Ā Some of you are reblogging because you think its funny that programmers would talk to ducks. Iām reblogging because I think its funny picturing a programmer explaining their code, realizing what they did when they explain the bad code, then grabbing the strangling the duck while yelling āWHY WAS THE FIX THAT SIMPLE!? AM I GOING BLIND!ā
AS A PROGRAMMER I CAN TELL YOU THAT THIS IS EXACTLY WHAT YOU FUCKING DO WE HAD TO BAN THE DUCKS FROM MY CLASSES BECAUSE EVERYONE WOULD FLIP THE DUCK OR THROW IT AT A WALL OR SOMETHING WHEN THEY FIGURED OUT THE PROBLEM IN THEIR CODE
I work at a startup and part of the onboarding package you get when you first start working here now includes a rubber duck. We also have a bigger version of the duck for the extra hard problems. Sometimes one duck doesnāt cut it and you need to borrow your neighbors to get more ducks on the problem. One time we couldnāt figure out why something wasnāt working right so we assembled the counsel of ducks and by the grace of the Duck Gods were we able to finally come to a solution. These ducks have saved many lives and should be respected for the heroes they are.
JavaScript Overload: Where do you begin when there is no standard framework?
Scenario A: Youāre starting out as a Ruby programmer. You decide to investigate web frameworks. Within one Google search, or after asking one more experienced Ruby dev, itās clear that the most common framework is Rails. Will it be your favorite? Maybe not, but itās a clear place to start that you know will be used by many teams and workplaces.
Scenario B: Youāre starting out as a JavaScript programmer. You decide to investigate web frameworks. Within one Google search, or after asking one more experienced JS dev, itās clear that there is no standard framework. There are so many, some full MVC frameworks and some libraries to extend basic JS. Everyone seems to have strong opinions, including that you need to develop your own opinion because they canāt tell you what will serve you best in your next project or job so⦠Pick one and run!
Last week I talked to a lot of (seriously, so many) programmers who use JavaScript regularly. I was trying to pick a framework and run. I narrowed it down to two choices: React and Angular. At first I was leaning towards React. I read a lot of blog posts comparing the two and it seemed like it might be easier to start with. Some time before Friday I'd tilted over to the Angular side, which I only knew for sure when somehow asked about my experience with JS and I replied that I was about to start learning Angular. What swayed me? I don't really know. Today I started learning AngularJS. I'm following a tutorial from Thinkster: https://thinkster.io/angular-rails and taking it slowly, so I can absorb each part. (If you're interested in following my progress, I'm keeping my work at https://github.com/kellyteresa/angular-news while I work through the tutorial.) The tutorial guides you to create Yet Another Hacker News Clone. I've made so many of these now--but that's OK! It's a familiar problem with pretty much all the basics involved. I'll be working through the tutorial this week, in between meetups and classes and all that. Soon I should be able to apply my knowledge to creating a nice display page for XCOM: Onamae Unknown!
Last week I finished the last of my official work at Launch Academy with two Career Days. We had some great hiring partners come in, awesome presentations, tasty pizza, and then... Graduation! It was a great time and truly my whole Launch experience deserves a thorough post.Ā
Now, a week and a day after graduation, Iām in the midst of job searching for my first official junior dev role. Itās intimidating and also exciting! All these things Iāve learned, and more that Iāll keep learning--I get to apply them in a workplace soon!
In the meantime Iām continuing to work on Gender Friendly Adventures, my breakable toy (final project) for Launch that has begun to take on a life of its own. Check it out: genderfriendlyadventures.herokuapp.com
Also in todayās news, Launch Academy released this video as part of their promotion of the winter session scholarship. Words really cannot describe.
Just a reminder incase anyone forgot. Also a reminder if you happen to be at Comic-Con tomorrow, weāll be having a joint panel with Adventure Time! Come on by, weād love to see you! (info here)
We had a TON of trouble getting Coveralls to work for group projects, so finally tcchenā and launcherovairaā and I spent a large chunk of today figuring it out. Rovaira wrote up a nice post for everyone!
launcherovaira:
This is intended to fill a few holes in Launchās tutorial on adding badges for your project. Ā Iām taking a bunch of this directly from their tutorial and adding the parts that werenāt explicitly included, but were helpful, especially in getting my Codeship and Coveralls badges to turn green.
Codeship
Step 1
Sign into Codeship with GitHub, create a new project, and connect your GitHub repository.
Step 2
Select āRuby on Railsā from the drop-down. Make sure to change the ruby version to the version your group is using in development.
rvm use 2.0.0 --install
Step 3
Click āSave and go to dashboardā
Now, whenever you issue a pull request, Codeship will build your app, run the tests, and then let you know whether or not the build has passed.
If you would like to learn more about how you can configure Codeship, check out the documentation.
Coveralls
Step 1: Ā Add the gem to your gemfile:
# ./Gemfile
group :test do gem 'coveralls', require: false end
Ā Step 2: Ā Add to the top of your spec_helper file:
First Aircast Deco: Launch Academy sticker!Ā Now itās my Space Boot.
Yesterday the Ignition phase of Launch Academy officially ended with aĀ āBlast Offā meet and greet party. I had a good time despite being super late and needing to leave early instead of stay for dinner with the big group after (thank you, aircast and public transit...). I hope the dim sum was delicious!
Thinking back on Ignition, it was a mixed journey for me. I started out with all the time in the world, putting half my day into working on assignments or reading up on extra things. I finished Phase 1 well ahead of time. By the time Phase 2 came around, I was working a temp job with a very long commute, where I spent a lot of the day looking at JSON and the last thing I wanted to do when I got home was work with more code. I did manage to get Phase 2 completed on time in its entirety, but by Phase 3 I was working to get the code challenge in by deadline and skimming a lot of the other material.
Things evened out a bit more when I finished up my temp assignment at the beginning of this month, and I was able to catch up on what I missed from Phase 3 as well as get a good start on Phase 4.Ā
I havenāt spent as much time doing extra practice as I know some people in my cohort have, and some days I feel like Iāll be starting out behind. On the other hand, I know Iām not the only person who had to juggle Ignition and a job or school, plus everyone learns at their own pace.Ā
Overall, I think Iāve balanced things pretty well. I even got to put a lot of what Iāve learned to use in re-writing my XCOM naming script using Ruby! See my previous post for the first stage of what Iāve made. Iām going to document the whole process, mistakes and all. It will be fun. :D
Monday is going to be intense. Iām definitely looking forward to talking with fellow Launchers more, and really getting to work. Hopefully Iāll also figure out a decent solution for switching from my aircast to my indoor brace... Maybe leave an extra pair of shoes in my locker? Speaking of locker, I better find that combination lock I have lying around somewhere.Ā
Building Onamae Unknown, Part 1: Creating A Complex Data Structure For Name Formats
I love playingĀ XCOM: Enemy Unknown. I also love giving my soldiers custom names--but sometimes I donāt want to do the work of creating interesting names on the spot to replace the default list. Tools exist to turn full names (perhaps of your friends, so you can send them into battle against aliens) into XCOM soldier names, my personal favorite being the XCOM Namelist Generator created by Daiz.Ā
I wanted something more: a tool that will allow me to set names by soldier origin, define first and last names, decide whether a name is used for female soldiers, male soldiers, or both.Ā
Unable to find such a tool online, I wrote the beginnings of one myself in Python, before learning Ruby duringĀ Launch Academyās pre-work, Ignition.Ā Now Iām starting again with Ruby.
The First Step
I decided that before attempting to modify any user input, I would set up a data structure that I can call on later to output the soldier names.
There are a multitude of factors to consider: What gender is the name for? Is this a first name, or a last name? What is the nameās origin?Ā Does this origin have gender-specific last names?Ā
You need to have all these answers in order to correctly place a userās input ofĀ āAbigailā for a female American first name into the gameās structure of:
Ā m_arrAmFFirstNames=āAbigailā
I started working on it by hand, but there were are too many origins for that to be practical: 23 general name origins, and 3-4 formats within each depending on gender, and whether itās a first or last name. I decided instead to create a separate script that would generate the complete data structure for me. This has the added bonus that if I realize later something about the structure needs to change, I can simply run the script again, and immediately have a corrected name file.
First I created a nested set of hashes for the origins, separated by whether or not the last names were gender dependent. With this, I can do all kinds of fun things to output a name structure.Ā
In the early stages, Iām guessing that Iāll want to refer to each origin by itās short version, such asĀ āAmā forĀ āAmerican.ā Iāll also want to store all possible name formats for each origin, and make a note of whether the user has to specify gender for the last names.
In order to do that, I iterated over the ORIGIN_DATA hash using .each, and sent the results to a new file.
Using theĀ āwā argument on File.open means that 1) if the file does not exist yet, it will be created and 2) if it already exists, it will be completely re-written each time I run my scriptĀ āsetup.rbā
The above image shows what I settled on after a few tries at formatting the data. It gives me a hash of short-form origin keys with nested hashes for their values, storing all additional information about that origin: itās long-form name, the formats a user could potentially need when adding a name to the origin, and whether the last names are based on gender.
I added the boolean of true or false for gender based last names in order to quickly find out whether my program should expect 3 or 4 entries in theĀ āFormatsā array later. It could turn out that this isnāt necessary, in which case it will be easy to remove that line from my setup code and run it again.
Now I can runĀ āsetup.rbā in terminal, and find a fully organized data structure for all 23 origins.
Lovely! Much better than typing all of that by hand.Ā
Challenge for fun: Can you make my setup file more efficient? Right now it has a lot of repeated code. How would you write it instead?
So I thought Iād check in and give a little bit of an update. Ā Iāve been so busy lately between Ignition for Launch Academy and my final semester at FSU.
The challenges in Ignition havenāt been too difficult for me yet, mostly itās just hard to find the time to get everything done. Ā I also wish I had more time to practice instead of just doing whatās required. Ā I just finished Phase 2 of ignition. Ā For the final challenge we created a text-based game of rock, paper, scissors. Ā Throughout Phase 2 there were other challenges including the notorious fizzbuzz, as well as a lot of reading and tutorials on websites like codeschool. Ā
There was a coding competition to win a full scholarship to Launch Academy, and runner ups won a laptop. Ā I was a runner up. Ā Congrats to Melissa-Leigh Gore for winning the scholarship! Ā And congrats to my other runner ups, Kristen Kehlenbeck,Ā Jesse Norris, andĀ Kelly Raila. You can read about it here: Ā http://blog.launchacademy.com/shipping-up-to-boston-scholarship-winner/
The challenge was to create a translation program that will translate the Boston accent into normal English. Ā I also did the reverse and included a version that translates regular English into the Boston accent. Ā You can see my program here:Ā https://gist.github.com/csoreff/9b7187ff823090d1802a
Love the picture. I thought about doing a reverse translator myself, though I didn't end up having the time before submission deadline. It's fun to see the code of another honorable mentionee!
Honorable Mention! Shipping Up To Boston code contest
I did it! I got honorable mention for my entry in Launch Academy's first ever scholarship contest. Melissa-Leigh Gore got the top prize (full tuition), and it's well deserved. Check out her entry in the link above. I'm impressed. Now that the winner has been announced, I can share my entry! Yay! Kelly's Bahstin Translatah! Congrats to Melissa and my fellow honorable mentionees Kristen Kehlenbeck, Jesse Norris and Corey LeBlanc. :)
The biggest challenge I expect to face in becoming a successful Ruby on Rails developer isnāt related to programming, radically changing directions in my career, or preparing for the intense 10 weeks Iāll spend at Launch Academy this summer. Itās not about skills or keeping up. Itās a lot simpler:Ā
My biggest challenge ahead is being a woman in tech.
This summer, Iām attending Launch Academyās 10-week course to become a Ruby on Rails developer. Our pre-work, Ignition, has already begun. Before that I was immersing myself in Ruby for over a month to prepare for my application to Launch. My life has become extremely dedicated to the one goal of becoming a developer. At one point I even posted to Facebook:Ā āCanāt sleep, brain too full of code. Canāt code, brain too full of sleep.ā
Itās the life Iāve chosen going forward, and I havenāt been this excited to lose sleep over what Iām learning since I was working 50 hours a week on my animations in undergrad. Iāve loved technology for as long as I can remember. Thatās why I studied digital animation, web-series, app startups, etc. Web development has been a hobby of mine for about 16 years. Now it is the next step in my career.
One area of my future has been nagging at me, though. Why would I, a young woman with no particular desire to invite conflict to my world, choose to enter a field that women are abandoning in large numbers, and not returning, even as we start in the minority?Ā
Am I a naĆÆve young professional thinking she can be stronger than those who have come before, that she can make a difference, that she wonāt be driven out by a hostile culture?
Maybe. Maybe Iāll end up in the large percentage of women who leave tech careers after a few years. Maybe Iāll get lucky and find a job miraculously free of the sexist culture that unfortunately pervades so much of the tech world. Maybe I wonāt get that lucky, but Iāll keep speaking up and absolutely refuse to back down.Ā
I donāt expect my gender to cause any difficulties at Launch. Iāve been there, Iāve talked to current Launchers, alumni, the staff, and others who will be in my cohort. Itās a very open and accepting space. The difficulty comes after, when I get my first web development job, when I attend tech conferences, when I build my personal brand.
I know itās going to be hard. Thatās why my first blog post about becoming a developer isnāt about why I want to change my career, how Iām preparing for an intensive training program, or why I picked Launch out of all the options. Iāll get to those.Ā
Growing up as the girl in the boyās clubs has given me a taste of what I'm going to deal with. So has reading the news. I donāt think itās possible to spend any significant time in gaming circles on the internet and not know about GamergateĀ or Anita Sarkeesian.Ā
Iām a gamer, and I have been since approximately kindergarten. Most of my gamer friends are male. The ones I know in person are, more often than not, actually very outspoken feminists, which is incredibly awesome. The ones Iāve met through multiplayer games have rarely been anything but hostile once they find out Iām āa girl.ā Iāve muted my fair share of boys who thought it would be fun to harass me over voice chat when my kill/death ratio was better than theirs. Iāve blocked more male gamers outright than I can recall. It isnāt a pretty world.
I donāt expect sexism in the workplace to be as overt. There isnāt the relative anonymity of an avatar to hide behind. Iām also not a stranger to my opinions being discounted, or my time being deemed unimportant, while male co-workers were praised for saying the same things Iād been shunned for.
I have a no-nonsense approach to the workplace, and I wonāt keep my mouth shut when I see injustice, regardless of what form it takes. This doesnāt exactly get me in the good graces of the people benefiting from the unjust practices or environment, but it sure encourages my other co-workers to stand up for themselves as well. Someone has to be loud about injustice. I have some practice with that. If I have to become a feminist crusader to improve my life and help others in the tech world, so be it.
I think thatās it, really. Iāve been beaten down more than a few times. It hasnāt been an easy path to get where I am today, and it doesnāt look like itāll get any easier going forward. That hasnāt stopped me before, and it wonāt stop me now.Ā
Things get harder; I get stronger.Ā Giving up is not in my nature.
This is where Iām learning Ruby!
My cohort starts in May. Iām doing the pre-work, Ignition, now. Yay!
I like that in my preview thing it says:Ā āLearn to Code Ruby on Rails, Become a Web.ā I shall become a world wide web. Somehow.