Promo Video Answer Fumble (or, I Am Not Developer Barbie)

This morning, I got an e-mail from my coding bootcamp asking if I would like to be part of a promotional video.  Since I didn’t have any grandiose plans for the afternoon, I said yes, and headed out to catch the 2:30 train to downtown.

It turned out to be one of those deals where you sit in a chair and answer questions interview-style, which I didn’t mind.  There was a brief moment of concern when the lighting setup resulted in a shiny spot on my forehead, which the videographer insisted be dealt with.  Initially I had thought he was talking about my cheeks, which were dusted with glitter thanks to my severe underestimation of both the amount of shimmer in my eyeshadow and the amount of powder fallout it would have–not having had enough time to re-do my whole face, I went with it and declared glitter cheeks to be very “in” and “now”.  But no, it was my forehead, in a tiny spot I’d missed with my setting powder.  Oops.  Blotting papers were found and we were good to go, anyway.

Remember this aside about my makeup.  I’ll get back to it later, I promise.

The bootcamp I went to, We Can Code IT, has a focus on improving diversity in the tech community.   I don’t remember all of the questions for the interview, but they were along the lines of things like, “what made you decide to try bootcamp” and “how did you feel about your career before bootcamp and how do you feel about it now”.  Pretty standard stuff, but I was invited to share how I felt about these things “as a woman”.

I’m sure some of you reading this are already scoffing at that.  Truthfully, my immediate reaction was also “how about I just answer the questions, I don’t really need to point out how female I am.”  After the first few questions, though, I thought about it again, and realized that being a woman has impacted how I feel about some things.  My first year at Cleveland State, in German class, my friend Lizz and I were chatting when our instructor, Carol, came over.  We all got to talking, when all of a sudden, Carol looked at us, and dropped this bomb:

“You know, you two are very pretty.  I’m glad you’re smart.”

There was a pause, and Carol tried to clarify what she’d just said.  “What I mean is–both of you are very striking.  You’re good-looking.  But you’re also not afraid to be smart.  When you don’t know something, or when you get something wrong, you admit it, and when you do know something, you speak up.  You’re both smart enough to know that you’re pretty, too, but you know your looks are a bonus, not a crutch.  I’ve been teaching for a long time, and there are so many girls who won’t raise their hand in class, and there are so many girls who act cute and ditzy to try and play down when they don’t know an answer, or say ‘oh well, at least I’m pretty’ when they get something wrong–it makes me sad.  Because they’re all smart girls, too, but they think they can’t be smart in public.”

That moment has stuck with me.  It’s stuck with me because as a kid, I was bullied for being an awkward, shy, poorly-dressed smart girl with terrible skin, bitten-down nails and a bad haircut.  (Honestly, being smart was probably the least of my worries, but the meanies toned it down a bit if I didn’t draw attention to myself in class.)  In ninth grade, I transferred to a private high school with uniforms, got a haircut, saw a dermatologist and grew into my own brand of “pretty” as I re-learned how to raise my hand in class.  That experience has stuck with me, too–as an adult, I am very conscious of how I present myself to the world, and I’ve developed a pretty feminine look.  I wear a lot of black, yes, but I usually wear makeup, I (try to) take care of my hair, and I make sure my clothing is in good repair.  What’s more–I am okay with this.  Being concerned with my appearance in no way effects my intelligence or ability.  I am 100% sure that I can be pretty and smart.

Back to the video and the interview questions.  Thinking about what it mean to answer “as a woman”, I thought about my makeup and the amount of serum in my hair, which I had pulled back because it still wasn’t really cooperating.  I also thought about the other side of my wearing lipstick and slicking down my hair, which is that sometimes, it feels like a liability.  I have a few “masculine” hobbies: firearms, cars–and, yes, computers.  Sometimes, being female makes it seem like those hobbies aren’t really for me.  I don’t like walking into the auto parts store alone because the teenage boy behind the counter is so quick to assume I need help, and I usually have to ask for the ammunition case at Wal-Mart to be unlocked, even when the associate is standing two feet away from me and it is obvious I want to make a purchase.  The kicker?  Even using an alias that starts with the words “Queen Of”, people constantly assume I’m a guy on the internet.  I’m aware that my femininity can get me disregarded in some circles, and technology seems to be one of them.  It sometimes seem as though the message is this: as a woman, I must be too emotional and too easily distracted to solve complex problems.  My drive to nurture friendships and soothe over conflict must mean I lack the logic necessary for computer science.  Caring about my appearance means that I am incapable of looking past the surface of things.  My femininity is a barrier to the mindset needed for programming, and it must be overcome.  Maybe it would be easier to accept me if I could frump down my look a little?  Just to prove I’m serious about the whole thing.

Look.  I am not, nor do I want to be, Developer Barbie.  I just want to write good code and rock winged eyeliner.  At the same time.  Because one does not negate the other.

“So,” asks my interviewer.  “What advice would you give to women who are thinking about bootcamp?”

It takes me a couple of takes to get the answer out, and I’m still not satisfied with it.  I was supposed to give short answers, and I think everyone can agree this blog is anything but short.  I wish I could have said it better, but what I finally got out was something like this:

“There’s this idea out there that you can only do this if you’re really, really smart, or if you’re really good at math.  That it’s all logic, and there’s not room for emotion–but there totally is.  If you’re thinking about learning to code, jump in.  Try it out.  You’ll be surprised what you’re capable of.”

It’s not the best answer.  It’s not the most in-depth answer.  The thought was there, but I needed time to fully develop it. If I could do it over again, this is how I’d say it:

“There’s this idea out there that you can only do this if you’re really, really smart, or if you’re really good at math.  There’s this idea that it’s all logic, and that there’s no room for emotion–but there totally is.  It doesn’t matter how feminine you are or what background you come from; trust yourself and trust that you’re capable of making space for yourself at the table.  If you’re thinking about learning to code, jump in.  Try it out.  You’ll be surprised what you’re capable of.”

It’s too bad that ideas like the smart/pretty dichotomy seem to be persistant.  Traditionally feminine appearance and/or behavior has no bearing on competency–and, for that matter, traditionally unfeminine appearance and behavior has no bearing on it, either.  I would never suggest that all women wear makeup and heels.  What I am hoping to suggest, though, is that  it’s worth encouraging women to take a shot at anything they may have an interest in, even if (especially if?) they’ve somehow been made to feel as though it “isn’t for them”.  There’s a sense of power in carving out a space for yourself, and it’d be a real shame if we didn’t encourage women to try.

How I Won my Coding Bootcamp by Ponyrolling

If you’ve been on the internet for longer than ten minutes, you are probably familiar with Rickrolling–tricking someone into listening to the earbug that is Rick Astley’s Never Gonna Give You Up under the guise of sending them legitimate information.  Before Rickrolling, there was Duckrolling, which is where you’d get sent this stupid wheeled duck instead of Rick Astley.  Either way, *rolling is bait-and-switch, you expect one thing and get another.  For example, I won my bootcamp by ponyrolling.

It all started three weeks into the program.  We had whiteboard tabletops, and I drew this on the table:

My Little Pony: Coding is Magic

It was pretty funny, the instructor took a photo of it, I took a photo of it, everyone laughed.  So a week later, I drew another pony while we were talking about data structures.  And I drew a couple ponies when we talked about exception handling.  And it got to be a thing that I was making ponies out of programming concepts and computer languages.  Just a quirky little thing, right?  Ponies on whiteboards.  Nothing extravagant.

We were assigned final projects with a week to go: make a portfolio website using ASP.NET MVC, hook it up to a database, do some other stuff, it has to have this, this, and this other thing.  By the middle of the week, a classmate had told me that I had to put a pony on it, because of the whiteboard ponies.  So I brought in my Macbook, opened up Photoshop and made a good version of that original C# pony:

C# Pony

Originally, I just had C# Pony hanging out on the home index view as a way to take up space.  I was going to remove her and put in another image later, but people would walk by and comment on the pony, and then they were upset when I said I wasn’t going to keep her there.  So I tweaked the stylesheet to make the site purple, and kept the pony, because so many people said they really liked the pony.

I got done with the site pretty quickly, and decided to make another pony.  Since the site was done in C# + HTML and drew project information and image URLs from a database, I decided that C# Pony’s companion would be SQL Pony:

SQL Pony

People were getting a pretty good laugh out of the ponies, which made me happy.  I really like My Little Pony, although I’m not completely sure why.  At least part of it is nostalgia value, having watched the cartoons and played with the toys growing up.  The newest incarnation of My Little Pony, Friendship is Magic, is actually a really good cartoon, if you can get over the characters being colorful small horses.  Plus the main character reminds me a lot of myself (Twilight Sparkle is a total nerd unicorn who special talent is being a total nerd), and her friend Pinkie Pie is a dead ringer for my dear friend Terri (in personality, of course, Terri is a real person and not a pony).  I don’t really have a large problem with being an adult who likes a little kid cartoon, either, although it’s also not as though I go to parties and introduce myself to people by comparing myself to Twilight Sparkle the nerd unicorn.

Moving on.  People were getting a pretty good laugh out of the ponies, and I liked that.  I like it when I can make other people laugh, especially when it’s over something small and silly.  I also don’t particularly mind making a fool of myself for a joke, so long as I’m sure people are going to laugh and not just silently wonder if I need to be institutionalized.

That Saturday evening, a little more than 24 hours before the project was due, it came to me:  it’s not enough to have two ponies.  If my bootcamp pals wanted ponies, then by all means, I would give them ponies.  I would give them so many ponies. 

Just as I had finished reading about session data and writing up some very basic code that switched the CSS the site used based on a session variable, my classmate Stephanie posted something on my Facebook wall.  She was at Plato’s Closet, which is a kind of resale clothes shop, and she had found a marvelously pink My Little Pony sweater, in my size, for $8:

pony sweater

Just as I was about to ask her to get it for me and I’d pay her back, she asked if I wanted her to get it for me and I could pay her back.  Of course I wanted it, because it was the perfect accompaniment for my plan to unleash so many ponies on my unsuspecting classmates.

I spent most of Sunday at Panera, eating an almost sickeningly sweet carrot cake muffin, drawing ponies and giggling to myself in the corner.  Late in the afternoon, I had a stylesheet that my eight-year-old self and her collection of My Little Ponies would have been immensely proud of.  I just still felt as though it was missing something

Only one of my classmates knew of my daring plan.  When I confessed on Facebook Messenger that I felt as though my utterly ridiculous style change was not ridiculous enough, this happened:

Him: My recommendation: have the ponies dance by tilting them left and right with 2 stunning frames of animation.
Me: …oh my god
Me:  You’re a genius.
Me:  That idea was too much for Visual Studio, apparently, because it’s crashed.
Him:  You should be able to do it with the same CSS animation tools I used for blinky text.
Me:  It’s perfect.
Me:  You don’t know why it’s perfect because you are not looking at the pony extravaganza right now, but trust me, it’s perfect.
Him:  I’m helping!
Me:  You’ve just saved Christmas.

It ended up being more a gentle rocking motion than the original vision of “two stunning frames of animation”, but that actually ended up as a good thing.  The effect is mesmerizing.  He also suggested making the cursor into a pony, which is surprisingly easy to do with CSS3.  I remember back in the day when loading up a horrible, hard-to-use custom cursor on your Geocities page required a ton of JavaScript, but now all you have to do is something like this in your stylesheet:
body {
cursor: url("Other_Images/ponycursor.png"), auto;
}

So I had a custom pony cursor, dancing ponies, a rainbow gradient header background, fluffy clouds for the body background, I had a very girly cursive font courtesy of Google Fonts… and the majority of my content was the same.  For all intents and purposes, I had taken a very boring, adult website and overloaded it with pink/purple/rainbow/ colors and so many ponies.

Stephanie brought my awesome new pony sweater to class on Monday morning, and I parted with $8.  I put the sweater on and waited until just before lunch to present my masterpiece.

I got my laptop plugged into the projected and started.  The site begins looking like this:

site with normal stylesheet (boring!)

I clicked through the pages, pretending like nothing was wrong and like I also wasn’t wearing a pink fuzzy pony sweater.  A couple people who had seen the site that Friday were disappointed that the ponies were removed.  Good.

The project page has all of my bootcamp projects laid out in little display boxes.  There is actually a box for the ponies, and, because I have the projects being sorted alphabetically on the back end, they ended up right next to box for the portfolio project.  So I could laugh it off, haha, yeah, I put the ponies on here for you guys, you can find the ponies on Github.  (You can, for the record, find the ponies on my Github.)  I clicked into the detail view for the portfolio project to show off the jQuery lightbox (Fancybox) I’d used to scroll through the screenshots for the project… I had included one of the second stylesheet.

Down at the bottom of the page, tucked under the copyright information in the footer, are three small icons.  Clicking an icon fires an AJAX post to the server that resets the session variable; when the post is successful, some jQuery takes care of scrolling back to the top of the page and refreshing the browser window.  Some Razor at the top of the layout partial view for the site loads the session variable and uses it to determine which stylesheet to apply, so clicking the second icon flips it from the above image to looking like this:

moderate pony stylesheet

There were some laughs, oh, I got them good, haha, the site is purple and there’s ponies!  I clicked through all the pages on this, too, just to show that it was the same site with a different stylesheet.

But wait.  There are three icons at the bottom of the page.

I toyed with my sweater a little.  The thing about being an adult who likes My Little Pony, I said, not quite looking at anything, is that you really have to own up to it.  It’s not just a casual thing, you kind of have to really go big or go home… so I decided to go big.

Are you ready for Super Bonkers Pony Mode?

Are you really ready for Super Bonkers Pony Mode?

Because here it is:

super bonkers pony mode

The ponies in the header sway gently back and forth.  Constantly.  The cursor is a tiny pony (unfortunately, Windows screenshots don’t pick up the cursor).  The only thing it doesn’t do is play the My Little Pony theme song, because I absolutely hate websites that auto-play music… but I’m kind of thinking that maybe it should do that.  I was also hoping to get some things to sparkle, but the jQuery plugin I found to make DOM elements sparkle didn’t work, and I ran out of time to futz with it.

The reaction to Super Bonkers Pony Mode was outstanding.  I wish I could have taken a photo.  There was so much laughter.  It was everything I had hoped it would be.

On my peer review form, under the question, “What could be improved?  How?”  someone wrote:

Nothing.  She won, it’s over.

…and that, ladies and gents, is the story of how I won my coding bootcamp by ponyrolling.  Please hire me, I’m funny.

So, I’m Building A Web App (Part Two: Dropdown Fiasco)

In Part One, I introduced you guys to my personal project, a web app for leaders of small groups.  Now I want to provide you with gruesome details of how I snottily cried over attempting to make a dropdown list.

If you google “DropDownListFor MVC” or some variant thereof, you will actually get a half-billion search results from Stack Overflow, etc where people are wondering why their dropdown menu doesn’t work.  It turns out that making effective dropdown lists in ASP.NET MVC is really tough!  Like, really tough.  When I set out to change my text box to a dropdown, I thought, how hard can it actually be?  I’ve made dropdowns in HTML like, at least a dozen times. 

I don’t even remember what all I tried before blinding grasping the solution, but to be honest, I struggled with it for over a week.  Here’s my final word on how to make it work:

Step One:  Use a viewmodel.

Using a viewmodel makes life with dropdowns so much easier.  Actually, they make life in MVC much easier all over, because you can easily deal with “extra” data that you know you’ll need to include in your view, plus you won’t have superfluous data hanging around.  For me, this meant a viewmodel class that looks like this:
public class PersonGroupingViewModel
{
[Key]
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set;}
public virtual IList Memberships { get; set; }
public SelectList AllGroups { get; set; }
public int SelectedGroupId { get; set; }
}

I needed the ID of my Person object, the person’s first and last name, the list of groups they were a member of, and finally–here’s the important part for the dropdown–a SelectList of all the groups in the database and an int to store the ID of the selected group.

Step Two: Create a view that is strongly-typed to your viewmodel. 

You need your view to be strongly-typed to your viewmodel so that you can easily access the data fields in the viewmodel.  This part is kind of a no-brainer.

Step Three:  Populate your viewmodel in your controller and pass it off to the view.

Step three involved spinning up up a new instance of my viewmodel class and passing it off to the view instead of the domain model.  I also had to spin up a new SelectList with all of the groups available and make sure it was included in the viewmodel so that the dropdown would work.  I did it in the controller it shouldn’t matter if you do it in the default constructor for the viewmodel class:

SelectList allthegroups = new SelectList(db.Groups, "GroupId", "Name");

There are about eleven million constructors for SelectList objects, but the one I’m using here is SelectList(IEnumerable, String, String), which specifies list items and also assigns the data value field (GroupId) and data text field (Name).  This allows me to display the group names in the dropdown, but post the group ID back to the controller.  Set it to the appropriate property in the viewmodel (viewmodel.AllGroups = allthegroups;)  and off you go!

Step Four: Actually put that dropdown sucker in the view.

Now for the fun part!  This is where the magic happens:

<div class="form-group">
<label>Choose Group:</label>
@Html.DropDownListFor(model => model.SelectedGroupId, Model.AllGroups, "Select A Group")
</div>

DropDownListFor is an HTML helper than can be used with a strongly-typed model (in this case, the viewmodel).  What’s happening here is that the selected group will post back the value as SelectedGroupId, the dropdown will populate from the model SelectList named AllGroups, and the default selected value will just be a string called “Select A Group”.

Step Five: In the POST action, grab that sweet ID you got back from the dropdown and get to work.

I just grabbed the entire viewmodel back in the controller POST action and processed out the individual bits. Here’s the code to look up the person and group in the database, and perform the necessary person-into-group finagling:

int PersonId = viewmodel.PersonId;
int GroupId = viewmodel.SelectedGroupId;
Person person = db.People.Find(PersonId);
Group group = db.Groups.Find(GroupId);

group.Members.Add(person);
db.SaveChanges();

I cast off my viewmodel and spin a new one to pass back to the view, because in my app, a person can belong to more than one group.  This makes the group we just added show up on that view under a section called “Memberships”, and the person can then be added to another group.  It’s not the prettiest thing in the world and also not the best UX, but it’s good enough for now and will be revisited later.  The important part is that it works!

Stay tuned for part three, in which I tackle checkbox lists and cry about UX design.

So, I’m Building A Web App (Part One)

About three weeks ago, I started an ASP.NET MVC project.  What I’m attempting to do is build a web app that helps leaders of very small organizations (like a church small group or a scout troop) keep track of their members and projects.  For someone with a grand total of 4 weeks experience in C# and no real experience with model-view-controller architecture (I don’t think RailsBridge really counts), it was… not unambitious, I suppose.

Step one: get CRUD functionality for people and groups, and then functionality to add and remove people from groups.

At least, that was what step one was supposed to be.  I’m using Entity Framework (code-first) and the magic that was supposed to happen to set up my database + tables (pretty simple–Groups, People, join table for the many-to-many relationship between Groups and People) was just… not happening.  The entire first week and a half of my project time was dedicated to uninstalling and reinstalling SQL Server Express and trying to figure out a) why I could create databases in SQL Server Management Studio but did not have permissions to read/write to/from them anywhere else and b) why EF was refusing to cooperate with anything even vaguely related to data management.  Finally, I took my laptop to a friend who is an (ex) SQL DBA and, after futzing with it for over an hour, he finally hit upon that I was missing the SQLClient installer that allows SQL Server Express and everything else ever to talk to one another.  For some reason, it hadn’t downloaded and installed… still no clue what happened there, but hooray!  I finally had a working database and could do things!

Setting up CRUD actions with Entity Framework is stupid easy, so getting part one of step one ready to go went by fairly quickly.  I could create, read, update and delete (just in case you missed the acronym) people and groups, but now I had to somehow convince my app to put people into groups and take them out again.  Actually, to break down step one even further, I just had to get the people into groups.

Working with the MVC pattern when you only have a shaky grasp of what it actually is can be a little daunting (okay, a lot daunting).  I knew that I had a Person object, and a Group object, and the Person object had an ICollection<Group> called “Memberships” and the Group object had an ICollection<Person> called “Members”.  Now how did I get them to play nice?  I got it working (admittedly with some help from the prior-mentioned friend) so that the primary key (PersonId) of the Person into the view and inserted a text box so that the user could put in the primary key for the Group (GroupId) in.  This then passed back to the controller, which looked up the Person in the database and added them to the Group’s member list.  So, it worked, but it wasn’t nice.  No real user would remember the IDs of all their groups and use a text box, so I decided to do it with a dropdown menu.  Dropdown menus are easy, right?  Select a group, press a button, and off you go!

Not so much.  More on the dropdown fiasco  to come in Part Two…

Is Bootcamp Hard?

When I tell people that I’m in a programming bootcamp, and their response is usually something like this:

Ooooh, I’ve heard about those. How’s it going? Aren’t those like, really hard?

Yeah, well, it’s hard. It’s kind of designed to be hard. There’s a lot of information that has to be processed in a very short amount of time, and that’s hard, no matter what. But there are different kinds of hard, and for me, the hardest part isn’t the mental gymnastics.

Unfortunately, with my being basically a robot when it comes to feels, bootcamp’s morning stand-up makes my blood pressure spike because I am expected to share my feelings. I don’t have feelings that get shared with other people. My biggest breakthrough was admitting that I was “slightly nervous” on the day we had to do “math stuff” (wow, so eloquent, way to go, Tori). We’re also asked to share our goals for the day each morning, and I can never think of a goal. My goal is to finish bootcamp and get a kickin’ job with health insurance. How do I break that down into a daily thing?

The other bit that I struggle with is that I really, really like whiteboards. We have whiteboard tables and I love having a marker and drawing all over the table while I’m figuring something out. If we’re partnered up, I have a tendency to run away with my marker and leave my bewildered partner staring at my scribbles as I blather on, three steps ahead of where I’ve lost them. I also tend to talk pretty fast, especially when I’m talking through problems or, even more disastrously, solutions. This has been a problem since elementary school—my brain gets going and I forget to slow down. It’s not that other people are slow, or stupid, or anything like that—my classmates are all wicked bright, otherwise they wouldn’t be there, and I very much like them as people. It’s just that I get carried away, and then I worry that I’m coming off as an insufferable know-it-all.

So yes, bootcamp is hard. I have no doubt that for some people (most people?) the hard part may be the sheer amount of information presented in such a short length of time, or learning how to think analytically, or acclimating themselves to the syntax of whatever computer language is being used. But even though those are the kind of things that come easily to me, bootcamp is still hard—just hard in a different way.