12. On learning to code

2018-02-26

The last few months have been particularly unstructured for meand it’s given me a great opportunity to pick up lots of projects that I’d been wanting to for a while. One of those has been building a basic competence in programming – ‘learning to code’.

I use the quotes there because the phrase ‘learn to code’ feels like it’s been beat into the ground by self-help books, online tutorials, and bootcamps. I never aimed to become a ‘coder’ but wanting to move into the startup world, I found it important to be fluent in that language, understand what the work entails, and build at least simple things.

In any case, I’ve had a lot of fun learning, but I get a lot of questions about it from friends, former colleagues, and potential employers. Here’s a distillation of those many conversations.

First of all, why? Programming is not your competitive advantage.

Thanks, business school friend. That’s true, and I’d never aim for a programming career for the simple reason that there are people much better at it than I’d ever be.

That said, I’ve always loved the process that goes into this kind of learning: the thought process, the frustration when something doesn’t work, the on-top-of-the-world feeling after a day of testing fixes, the magic feeling of making something out of thin air. It feels like a video game sometimes, and it was less a “I need this to get ahead” and more a “This could be fun.”

Fair enough. Did you know anything beforehand?

I took a class in high school class on writing simple BASIC and HTML and CSS essentials. I remember building a three-page site dedicated to my favorite band at the time, Radiohead, and it blowing my mind. Since then I always tried to maintain a personal website (and you might be reading this on its latest iteration, https://willsab.com).

I’d used Excel and SQL at work before which gave me some comfort around numbers, and I’ve had a fair bit of study in statistics which was helpful when diving into machine learning.

So what did you learn?

I’d heard great things about Python, and knew it was a pretty powerful language, so started there. It was easy to pick up given its natural language and I highly recommend it for any beginners.

From there I played with a few packages: from scientific (NumPy, SciPy, Pandas), to dataviz (Matplotlib, Seaborn), to machine learning (sklearn, TensorFlow), to web scraping (Scrapy, beautifulsoup).

With that I built a few fun things: a Wikipedia crawler to build a database and API of Nobel Prize winners, a d3 web visualization based on that data, a tweet sentiment analysis tool, and a bunch of machine learning pipelines and models around things like real estate pricing, cancer detection, and image recognition.

I also spent a good amount of time buffing up on Javascript and some frameworks like React. With that I re-built https://willsab.com from the ground up with a static site generator called GatsbyJS, with a Bootstrap front-end, deployed on Netlify. Simple, but super fun.

Gotcha. How did you do it?

I’m a big ‘learn by doing’ guy so I opted to teach myself through as-close-to-real-life-projects as I could find. I really loved O’Reilly Media books that center on building out a big, hairy project step-by-step and carving out teachable skills along the way. FreeCodeCamp is also a fun resource to play with.

I also became convinced that half of programming is writing good Google searches and trawling through StackOverflow and GitHub. It is insane to be how valuable these resources are.

Wait. Should I learn to code?

It’s a noble endeavor, but it’s a time-consuming and heavy one. Like it’s been mentioned, software development is not my, or many people’s, competitive advantage.

That said, code is a great tool for solving certain kinds of problems. I’d argue that learning to code as an end in itself is very misguided (I’ll echo these posts: “Don’t learn to code” and “Please don’t learn to code”), but developing the skill as a tool, just like you might Microsoft Excel, can be very powerful (see: “Learn to code. Or don’t!”).

More broadly, I think the exercise is very useful if you’re working in a technical setting. It gives you an appreciation for software development, a sense of the opportunities it opens in solving problems, the kinds of challenges it presents, and most importantly, the kind of work it is (e.g., how long things take, the importance of testing, the kind of concentration required).

Is that it?

Yep. Talk soon.