learn to code.jpg

[Reposted from Medium

1. Remember that kid in high school, the kid who lugged around a 17 inch XPS and wore massive air-controller headphones and waited in the midnight line for Halo 3 and built a legit robot while the rest of the class struggled with potato versions?

I was not that kid. 

 2. “Be nice to nerds; chances are you’ll end up working for one,” my mother told me, the day I complained about the dandruff flakes of the nerd who sat in front of me in Lang&Comp. “Pretend they’re snow flakes,” she said. But they only looked like snow from a hard squint.

 3. The worst grade I ever received was in gym class, senior year. Dodgeball. Mr. L didn’t appreciate my Clueless-coopted defense. 

The second was in Computer Skills. I believe the skills we covered included Word and PowerPoint. Mrs. A humorless about windings. The end of that class was the end, I thought.

 4. While working at Guest of a Guest, I learn the acronyms CMS, WYSIWYG, HTML. HTML is the ugly alternative to WYSIWYG.

 5. Except sometimes, the WYSIWYG doesn’t give you what you see. I learn <p>, <ul>, <li>, <br>. 

 6. I start my own blog. Wordpress says Sandbox is a blank canvas for CSS artists. My canvas quickly assumes the aspect of a toddler’s finger painting. To make it less ugly, I have to open up the style files, stare down a new beast, CSS, google things like “wordpress change body font css,” copy, paste, and pray. 

 One time, I try to change a function. The entire site disappears, and only reappears after a tearful two-hour conversation with Bluehost. I steer clear of PHP after that. 

7. A few years later, a coworker shows me something called Stylebot. Stylebot lets you click on a page element, change it with a WYSIWYG, look at the new CSS, and paste that into your style sheet. Huzzah! And I learn a little more CSS to boot. 

8. The company works primarily with C# and .NET. I spend about two hours trying to learn the former. 

9. On twitter, I spend a lot of time talking to the people who use, or could use, our software. They tweet about #posho, #bash, #sql. What is MVC? What is a schema? I google, but I know not. 

 10. I teach myself how to use Sharepoint. Sharepoint is like Wordpress, only bigger and inherently ugly. You can make a lot of money helping companies bandaid that ugliness.

 11. Sharepoint is… not my thing. Luckily, the company hatches a spinoff company, and I go to work for that. We start off using Java, HDFS, and HBase. Java is hard and boring, people tell me. What’s another language that can be used to analyze data? Python. MIT Open Courseware has a free course on Python, and I sign up.

 12. And last about three weeks. I feel like I’m using the same copy/paste/pray technique I used with CSS, only this time I really want to learn. Also, there’s no one to answer my prayers. Which brings me to lesson one of Learn to Code: 

There needs to be someone/intelligent thing on the other end. Otherwise you often a) don’t know if you’re getting things right and b) don’t know why you’re getting them wrong. 

13. At my annual review, our CEO tells me I should learn Javascript. I sign up for Codecademy and start their JS track. I get further with Javascript than I did with Python, but a dedicated two weeks turns into a semi-dedicated month turns into a here-and-there two months turns into nada. Here are the good things about Codecademy:

A: web-based interpreter. Aka you don’t have to download anything to get started. Aka no staring at your terminal’s error messages, wondering why ggplot2 won’t install. (But more on that later.)

B: Error checking. You can’t move onto the next part of a lesson until you’ve gotten the code necessary to complete the current one correct. 

 Here are the not-so-good things:

A: Lack of explanation for why your code is wrong. This is understandable, but it’s hard to learn from your mistake if you don’t know why it was a mistake.

B: If you can’t figure out why your code is wrong, you have to go to the forums, and hope that someone has already answered your question, and that their answer works. The Stack Overflow model works because there are experts contributing, and the top answers have explanations, not just code. At Codecademy, the people answering are usually also novice coders, and so can’t do more than say “this worked for me.”

C: The projects accompanying each lesson are generally not compelling. This is a missed opportunity, because the projects are where you really cement new knowledge. Alors, lesson two of Learn to Code:

 Lessons and especially projects should teach you how to build things that have clear real-world applications. Do teach me how to scrape geotagged tweets from twitter. Don’t teach me how to build a Rock, Paper, Scissors game.  

14. At my friend’s behest and 7am cajoling, I go to a Rails Girls Baltimoredev shop on Ruby and Rails. Andddd lightbulb! By the end of the day, I understand what classes, objects, methods, and hashes are, and I have vague graspings of the components of a full stack. I owe this to the fine folks at Rails Gilrs, B’more Rails, and Jumpstart Lab’s excellent “Ruby in 100 minutes” tutorial, which is written in succinct-but-edifying layperson English.

15. Go Ruby! I start Dan Nguyen’s Bastard’s Book of Ruby. Twitter scarfs, at last! Except Dan’s instructions are tailored to the Twitter v1.0 API, not the 1.1 API, which has totally different permissions. Also, what is an API? 

Downside: My scarf isn’t very warm. 

Upside: I know that scarf-making is a thing, and that I want to make one for email data. I want to analyze things like sender/unread rates, time to reply rates, words associated with rapid replies, etc… 

16. I show David General Assembly’s 12 week Web Development Immersive course. He grimaces at the mention of Ajax. “Take this one,” he says, pointing to the Data Science course. 

17. The Data Science courses requests students have some familiarity with Python and/or R. Python it is, then! I return to Codecademy. Same pros, same cons. But: this is my fourth language stab, and finally, I am learning the underlying framework. Just as it was easier for me to learn Spanish after French and Italian after Spanish, it is easier to learn Python after Ruby, and vice versa. 

18. Enter Arabic, aka R. My GA pre work includes this lovely PDF from USCB. Its URL proclaims it to be the BestFirstRTutorial. As my pre work also included the first two chapters of the O’Reilly Code School R tutorial, I can safely say that USCB’s version is not the BestFirstRTutorial if you don’t know statistics. 

 That’s right. R is a statistical programming language, and I don’t know statistics. Not anymore, anyhow. I took AP Stats in high school, which exempted me from math at NYU. Save complicated tip calculations, I haven’t touched any it since. 

So, I spend a weekend looking up distribution functions and what sigma means and is summation the same as sum. The USCB PDF was supposed to take me ~2 hours to get through. It takes, er, significantly longer than that. 

19. Onto ggplot2! ggplot2 is system that lets you decide how you want your R graphs to be plotted. Installing it is supposedly easy, but my terminal will. not. cooperate. ‘install.packages(“ggplot2")’, I say, and it says nothing. 

 20. The last part of my GA pre work is a command line tutorial. Unable to install ggplot2, I move on to the command line. And again, lightbulb! The command line is just the code representation of all the stuff that is on my computer, and the ways I access that stuff. Amazing! I learn how to see what directory my terminal is in, and how to change that directory. Installing ggplot2 requires me to be in the R directory. Once I cd into that, it’s a snap. And this brings me to my third, and final lesson of Learn to Code:

Before you do anything else, learn the command line. 

Alors, this brings me up to present day: muddling through the ggplot tutorial, admiring the pretty pastels, trying to remember what dnorm means. The course officially starts tomorrow, and I’ll be documenting my gleanings along the way. Wish me luck!

*I don’t endorse this method.