Codeland – Well I guess I’m a developer now

When I was in my program, I loved reading other bootcamper’s blogs. Seeing their challenges, progress, their wins big and small… it got me through. One inevitable, disappointing and all too common phenomenon that I ran into again and again was that the student would be consistently blogging, then they’d graduate, look for a job…. and then the blog would just stop. Even worse, the posts might have stopped before graduation. I never knew what happened to the person, whether things worked out or not. I could be creepy and scour LinkedIn to see if the student became gainfully employed in web dev, but I never went that far.

Well, my last post was from December, so this blog is in dangerous territory of becoming yet another abandoned bootcamper blog.

So here’s a quick catchup. Plenty has changed since the end of 2016. The first few months of my apprenticeship were rough. Everything was so new, and I didn’t know how I was doing, so I was working double time to “catch up.” After I got some positive reinforcement and felt a little bit more comfortable with the development process, I stopped taking work home with me every night, and things improved. It was also a weird time because it was the holidays, and it was hard to get to know my new coworkers when everyone was out of town for the month.

Long story short, I survived my apprenticeship and was hired on full time as a software developer in mid April. It was a great relief, and a nice cap to the last few years of work. I changed my career! That’s nuts! One surprising aspect of my job is that I’m working 90% of the time in JavaScript, which seems like some cruel joke from the universe considering my personal feelings about JS, but it’s not too bad actually. JavaScript is less terrible when you know what you’re doing, I’ll give it that.

My progress on this journey has been capped by conferences. I went to my first programming conference (ForwardJS) while I was finishing my program in Spring 2016, and my second (RubyConf) just as I was starting my apprenticeship. Last month I attended Codeland. It was sponsored by the CodeNewbie podcast, which is a super supportive podcast for … you guessed it, programming newbies.

Quincy Larson of FreeCodeCamp on how to write a technical blog post people will actually read

This was the first year of Codeland, so I didn’t know what to expect. This was definitely a gamble, especially since I was weighing going to Codeland vs hitting up RailsConf in Phoenix the next week.

Codeland turned out to be a really strong event, despite a few logistical hiccups. Most obviously it was a super diverse crowd in every sense – age/race/gender/experience. The vibe was really great, inclusive, positive and supportive, none of that weird aloof super nerd awkwardness/ competitiveness I’d seen at other conferences, no clique-ishness. Oh, and it was woke as fuck.

Content? The talks and workshops were strong and varied. I got to make a pizza ordering Slackbot in one workshop. Talks that I had no interest in turned out to be actually interesting and there were things that I could relate to, even if I hadn’t used such and such technology (and it’s a good thing too, since the conference was single track aside from the workshops!). The high quality of the content I’ve gathered is because the speakers worked with the conference staff quite extensively to hone their talks. A+, good job guys. Also, the food was divine. One quibble – no Codeland shirts? ; o

There was a segment on coding bootcamps, pros and cons, with reps from 3 of the bootcamps that happened to be sponsoring the event. What, no Flatiron??
A very well put together program for the event, with info for each talk, supplemental resources, and space to take notes. Here is an ad from Dev Bootcamp, and I agree wholeheartedly. Apprenticeships are awesome – but incredibly rare.

It was strange to be at a conference and be more experienced than some people I met. I got to talk to a lot of people about bootcamps and it felt good to share my experience. I’m a ‘success story’ I guess, although to be honest I don’t know if I would suggest a coding bootcamp for a person just starting out on the path. But that is a whole nother blog post…..

RubyConf 2016 – Am I a developer yet?

As luck would have it, RubyConf occurred during my job search. The 3 day conference was $400, which ain’t bad at all, but at the time I couldn’t justify plunking down 400 bucks for a ticket, then 350 for a flight to Cincinnati, then another 200-400 for a hotel, not to mention however much money for food and cabs and such. Still… I didn’t have a job… maybe it was worth the investment?

In early October I applied for a diversity/adversity scholarship. Unsurprisingly I didn’t get selected (I haven’t had true adversity in my life in a long time, doing just fine all things considered), but there was a silver lining: I learned that I could volunteer for a free conference ticket. The ticket was a regular ticket including daily breakfast, lunch and snacks. Doing the math in my head, if I stayed with a friend I would really only be paying for airfare and cabs/dinner/snacks. Maybe not even food at all if I hit up the right happy hours.

They asked for 12 hours of help over 3 days, which seemed fine to me, so I signed up. It’s been a few weeks since I got back – nearly forgot to write it up! Here are some thoughts I’ve had about the conference.

Post-Election

  • RubyConf was right after the election, and it felt very strange to be in such a festive atmosphere. It felt like I shouldn’t be silly, I shouldn’t be networking or taking lots of pictures, I shouldn’t be eating fried chicken and trying to collect as much schwag as possible. Apparently other people were feeling that way as well, there was an informal group led venting about the election.
  • Somewhere in my late night social-media fueled stupor I ran into someone’s post-Trump blog post where they said they couldn’t find state by state listings of minority owned businesses. I found this database of certified businesses, but it could use some improvement. This seems like a good idea for my next toy project (maybe make it more of a Yelp clone?), but I feel like somebody must have already done this, right??? How does this not already exist?

Vs. ForwardJS?

This conference felt very different from ForwardJS, as it should have. It was basically the complete opposite of ForwardJS.

  • out of town  / hometown
  • planned a month in advance / planned a couple days before
  • 3 days of programming vs 1 day
  • No workshops / Paid workshops
  • Ruby / JS
  • Volunteering /  Attendee
img_5058
Milling about between talks

Volunteering

TBH, besides being cheap, volunteering seemed like a great option because I would be able to bond with the other volunteers over the shared work. I felt a little lonely at ForwardJS, and wanted to make sure that didn’t happen at a 3 day long event. I knew that they were recording the talks, so I wasn’t really going to miss anything.

Volunteering turned out to be pretty much all positive. One unforeseen benefit: I was working the registration and information booth, so I got to talk to Ruby celebs multiple times over the course of the conference. And in general once I’d already talked to someone, even if it was just to answer a question, I felt fine walking up to them and chatting later. It felt less weird for some reason.

img_5030
Opening keynote

Imposter Syndrome

Actually, there was one moment that felt a little awkward. I went up to talk to a company that I’d applied at a while back. I didn’t make it through their code challenge, but I wanted to tell them that I liked what they were trying to do, and the thought that they’d put into the assignment. The booth was a bit chaotic, so I didn’t find quite the right opening to talk about it. I moved over to the side. One of the booth folks came over to talk to me, then looked down at my badge, or maybe my red RubyConf staff shirt, and said “Oh, sorry I thought you were a Rubyist. You’re staff.”

0_X <- my face

Not gonna lie, had a mini-existential crisis. Do I look like a coder or not*? Sort of, because you talked to me, but not because of the badge… but I can be both… ;o

I talked about the volunteering, and how it was a great way to score a free ticket and meet people in a different way. After a bit of chatting, I ended up mentioning my new job**, and he actually knew some people there! Well what a great coincidence! Couldn’t have come at a better time as I was feeling insecure. Inside my insecure head: I AM A RUBY PERSON AND HEY SOMEBODY YOU KNOW HAS EMPLOYED ME. SO THERE! I AM FOR REAL. RILLY THO.

img_5065
Q & A w/ Matz on the future of Ruby

Content

The variety of content was great, but I gravitated more toward career talks and a few specific technical sessions. They had a content track called “Life After Bootcamps” which seemed timely.

There were also lightning talks at the end of the second day, and wow! People really wanted to share. They kept coming up to the info booth asking when we were putting out the sign up sheet, and then once we did it was a mob.

People

The first day I was a little starstruck, but quickly I realized that everyone was nice – attendees, other volunteers and staff, vendors, speakers. There were a pretty decent amount of women at the event (more at ForwardJS I think), and lots of female speakers. They did a good job making the conference inclusive – there were gender neutral bathrooms, a lactation room, and free childcare offered onsite. Free childcare!!! I will never have kids, but that makes me very excited!

Highlights

  • On the first day I got to meet Matz! I gave him back his cellphone, which he left in junior ballroom D 🙂 .
  • Meeting folks from a couple of companies I applied to (and got rejected from) was one of the things on my conference to-do list, and it wasn’t nearly as awkward as I thought it might be. TaxJar in particular were nice enough to find me first, right as I was stuffing my face. 🙂
  • The fried chicken and catfish on day 2 was really good. 😀
A "Three way "
Skyline Chili! Kind of weird!

* To be fair, for some reason I am often mistaken for a retail worker when I’m out shopping (Old Navy, Kinko’s…). I don’t think that I look particularly helpful, so who knows. Maybe I look young. Maybe my sweater folding game is good?

** Oh right, I got a job! Forgot to mention it here.

img_5071
Bye RubyConf!

The Cheap Coder

via GIPHY

I’m pretty frugal, so it caused me a great deal of psychic distress paying for my coding bootcamp, and following that, technical interviewing course. Despite my satisfaction with the curriculum, teachers, community and outcome, the entire time I kept saying to myself “I could be learning this FOR FREE. I could have just bought a thousand Chalupa Supremes from Taco Bell!”.

Well… as I’ve gotten older, I’ve learned that sometimes you just gotta shut up and pony up. You’re paying extra for quality, accept it and move on. For everything else, there’s probably a cheaper way in. You just have to look for discounts.

SUBSCRIPTION SITES

Okay, why do you need memberships to learn-to-code subscription sites? I know that you can teach yourself how to code for free. It’s all online. But the right content can make all the difference in your understanding, and sometimes the good stuff is behind a paywall! Here are some discounts I’ve seen over the past few months:

CONFERENCES

Conferences are a great learning opportunity, but with ticket fees, airfare, food and lodging it gets pricey real fast. The financial hurdle can be a lot to justify when you’re the one covering the costs. You could just watch the conference’s livestream, but really it’s not the same at all. Luckily there’s quite a few ways to weasel your way into conferences.

  • Follow the conference’s Twitter account for discount codes. They may even post ticket giveaway contests here.
  • Do you subscribe to web dev mailing lists? You can get reduced tickets there as well. I got my $19 ForwardJS ticket the day before the event thanks to Girl Develop It’s mailing list. Something like a 90% discount! The Women Who Code mailing list offers regular ticket giveaways so often they have an evergreen Google form they use for processing applications.
  • You can also try to win a scholarship, lots of conferences seem to be offering them now. However you will probably have to write more than a few essays explaining your situation -> why you are broke as a joke. It can feel very vulnerable putting that information out into the void, and then being rejected.
  • I applied for RubyConf’s scholarship, and didn’t make the cut, however they offered free passes for volunteers. So I decided to volunteer. ~10 – 15 hours of work for a $400 3 day conference pass sounded like a good idea to me.

Printing a Multiplication Table of the First 10 Prime Numbers

Ok, for a change of pace let’s break away from sorting algorithms and do this problem:

Printing a Multiplication Table of the First 10 Prime Numbers

Code Here

I got this as a coding challenge a few days ago and finally got a chance to tackle it this weekend. The prompt asks for the user to create a program that runs on the command line, and it should print out a multiplication table to STDOUT. I feel like I’ve seen similar problems elsewhere, but this one had the twist that it wanted the multiplier numbers to be primes.

Other rules: Make it flexible for N # primes, write some tests, don’t use Ruby’s Prime class, package yer code.

I started out this challenge by trying to understand clearly what the problem was. Print out a multiplication table? Like this?

039827b

Oooooooooooooh. Haven’t seen one of those in a long time.

So the top row and the first column would be populated with primes. Hmm…

Since I couldn’t use Ruby’s Prime class from the standard library, writing a method for finding primes seemed like the first thing to do.

I wanted to make my program flexible so you could create multiplication tables of different sizes. So I created a method to pull the first n primes into an array.

And finally actually printing out the actual table! Formatting was the biggest pain here.

After I was done with these methods, I thought I was good to go. HA! Nope, still got to package it up and write some tests. I was going back and forth, but I’ll talk about the tests first.

I decided to go with RSpec, so I created a gemfile and added in the requirement. Then I created some spec docs and started going to town. I really only had 3 methods to test, and I decided to do 2 tests for each. It’s been a while since I watched ThoughtBot’s TDD lecture, and my subscription to their site has lapsed, so I decided to keep it as simple as possible. An RSpec tutorial I was reading was referencing a “Calculator” class in its tests, so I thought “Oh, I might as well bundle up the 3 methods into a MultiplicationTable class.” So I went back and changed that, and my tests.

All of the tests were pretty simple except for the print_tables one. Again, it all came down to formatting. I wasn’t sure how to check what was being printed to STDOUT. I came across stringio and some helper methods on StackOverflow, threw them into my spec_helper, and then it was on. I could capture and check what was being printed to the console. Still, it was tricky to figure out what string I was looking for here. RSpec failure messages came to the rescue as I just copied the extremely ugly failure string  (making sure #’s were correct) and pasted into my tests.

Hooray! My tests were looking for the right things now. Nevermind that when I ran the tests I got this little deprecation warning:

screen-shot-2016-10-16-at-2-16-45-am

Um… ok. Sure I can go back and change that easily. Nope, getting errors after I tried to fix it. I’ll go back and deal with it later.

I started out thinking about how to package my program. My mind wandered to gems, which of course made me think about my NPR Stories Gem. I looked at my gem to check out the basic structure, see what I was still missing in my multiplication table project. Then I got sidetracked for about 30 minutes trying to push my NPR gem to RubyGems. I hadn’t yet actually published my NPR gem for a variety of different failures, but this time I realized one major reason- I had to actually build the gem first with:

gem build npr_stories.gemspec

then I could push it to RubyGems. D’oh. That was embarrassing. Now that it was published, and robots were already scraping it, I wanted to make sure that it worked, so I spent some more time trying to edit and test my NPR gem, then I remembered that I had to finish this coding challenge. Right. And of course there was a typo in my gemspec file. Not worth doing a whole gem update for a single letter typo.

Ok, back to multiplication tables! So I could package this multiplication table as a gem for easy installation…But is it even worth it? If so, I should have set this up as a gem to begin with so I could have used this bundler command that pulls together all those files and folder structure for you:

$ bundle gem my_gem

I decided to do it anyways and created a new repo to play with. I just copied over my tiny amount of code thus far.

15 minutes later I abandoned ship and returned to my original repo. Creating a gem just didn’t make sense to me for something so small. Hmmmm… how did I want this to run on the command line? I created a bin folder & executable, and also a CLI class with a simple interface.

And after a few hiccups it’s working!

screen-shot-2016-10-16-at-2-15-21-am

The last step I had was to write a README doc. Whew! That was a lot of work for such a simple little ask. It would have gone faster if I hadn’t indulged my little diversions to other projects and down multiple rabbit holes.

Algorithms: Insertion Sort

I wanted to make Insertion Sort part of a two-fer with Selection Sort, but it honestly took me a minute to figure out how to implement.

Continuing the card game analogy of earlier, if Selection Sort is scanning your hand and moving the smallest items down to the left, eventually ending up with a fully sorted hand…

Insertion Sort is like when a dealer gives you a new card. You look over what you’ve got so far, and add the card to its rightful spot. Similar to Selection Sort, Insertion Sort also operates on the idea of a “sorted” section and  an “unsorted” section.

When an item (let’s call it A) is larger than the element to its immediate left (B), the two aren’t swapped like in Bubble Sort. Instead, you hold on to A’s value, and then reassign B’s value to the spot array[A]. So it’s like you are sliding B’s value down the line. Then you compare A with the item in the index to the left again (C). If A > C, you can then put A down in array[B]’s original spot. Otherwise, you need to keep working to the left and shifting over elements until you find the right spot for A. When you finally assign A to its spot, you’re done with inserting A. Then you repeat the process with the next item in the “unsorted” section.

I had some issues wrapping my head around how to move items down the line, making room for the array, initially thinking about a recursive solution, but really all I needed was a while loop.

 

Scroll To Top