There has not been a day in my life where Google has not existed1. My generation is the first to have ubiquitous access to an enormous amount of technology and information, and people such as Mark Zuckerberg, will.i.am, and President Barack Obama are advocating for the importance of implementing universally mandated computer science education in hopes of creating the next wave of innovators.

Students are slowly catching on, and events such as hackathons, the Hour of Code, and developer conferences are fueling the fire. In the Silicon Valley, the competitive culture combined with the plethora of corporate and academic giants surrounding the students increases this drive by several orders of magnitude. However, many of them have no idea where to start. I get asked questions like "What online courses should I take to become a good coder?" or "What language should I learn to get an internship at X?". I want to clear some misconceptions as well as provide some great tips for anyone wanting to learn.

Programmers v. Computer Scientists

Many of the people who ask me for advice often get the terms programmer and computer scientist confused or think of them as the same thing. Let's see what the Oxford Dictionary has to say.

programming

computer science

Although related, the two are quite different.

In essence, programmers make computers do things for them (e.g. search the web, grade a paper, host a website, etc.). You do not need to have a strong math background to be a great programmer. However, having your fundamental math and computer science principles down are always an added bonus. Some great programmers include Facebook CEO Mark Zuckerberg, Linux creator Linus Torvalds, and Reddit co-founder and CEO Steve Huffman. In contrast, computer scientists study the theoretical principles behind computers (i.e. algorithms, data structures, machine learning, encryption, etc.). Having strong mathematical intuition is (in almost all cases) a requirement. Some great computer scientists include Alan Turing, self-driving car expert Sebastian Thrun, and the University of California's Brian Harvey.

Hackers

hackers

Now that we've cleared up the difference between programmers and computer scientists, I want to talk about this strange group of people that identifies as neither computer scientist nor programmer: hackers. There are two kinds of hackers. Those that want your money, and those that like to tinker. From here on out, when I use the term hacker, I'll almost always be referring to the latter.

Hackers can be described as make-it-happen machines. Give them an idea, and they will find a way to make it work. They are not limited by their experience, the languages or technologies they've worked with, or the hours of sleep they sacrifice. It's because of their rapidly iterative workflow that they are able to do what they do. Hackathons are built on top of this mentality of "move fast and break things". It's because of hackers that companies like Google, Facebook, and Snapchat exist2.

My Story

I wouldn't call myself a super hacker or an amazing computer scientist or an ingenious programmer. I'm honestly just a student who likes to build things. But, I have learned a thing or two over the last 10 years that may help someone new.

Like most kids, I played with LEGO when I was young. To be fair, I would probably still be playing with LEGO today if I had the time3. At some point, I stopped following the instructions that came with the LEGO kits and I would mix and match pieces from different sets to create something different. I kept building more and more complicated things from very simple blocks. This is a very simple mentality and has stuck with me since then.

This became more relevant when I started coding after my neighbor introduced me to the MIT Scratch Programming Environment in 2008. I continued building, just with a different set of (virtual) blocks. I thought I had gotten pretty good at the whole Scratch thing when I finally outgrew it in 2010, only to find that people were building insane web experiments and tools using what I thought was an environment for kids...

In 2010, I wanted to find something new to build with. I don't remember why, but I decided I wanted to build a website. These were the pre-Codecademy days, so I used a hodgepodge of w3schools resources and O'Reilly HTML, JavaScript, and CSS books from the late 1990s. Among the first sites that I built was DeskRock, this virtual pet rock that acted as a nifty calculator. It had a bad interface, but it had a whopping 150 users on the Chrome Webstore. I'd later build an app called MathNinja that would get tens of thousands of weekly users.

A lot of stuff happened in between those vital first steps. I interned at a couple of startups, did some freelance work, attended (and won) numerous hackathons, learned a variety of technologies, and won a couple of cool scholarships and awards at tech conferences and robotics competitions. Right now, I continue to learn and grow as a hacker by exploring new technologies. I'm currently trying to figure out how to effectively combine music-making and machine learning.

Tips for Newcomers

I'm going to keep this short and simple. You don't need to take tons of online university courses or finish Advanced Placement BC Calculus by the time you're done with middle school in order to get good at programming. Here are some things you should try:

  • Think of a platform you want to build for (in my case this was the web). Once you get comfortable with one environment it reduces the learning curve when picking up other platforms.
  • Find a language that suits the platform of your choice. Often times people get caught up in this. Just find one language, get really good at it, and I assure you that picking up any other language will be elementary.
  • Think of something you want to build. This could be an app, a website, a robot, etc. Don't worry if you don't know how to make it.
  • Build it. Don't waste times worrying about minor features and details. Use tools like StackOverflow and Google to get through roadblocks that arise from time to time.
  • Didn't work? Try building it again. Or ask for help. The hacker community is pretty diverse and chances are, someone else has encountered the same issue you have at some point before.
  • Bonus points: Open source your work on GitHub, allowing others to contribute and review your work.

This is a pretty rough guide, and I'm sure it'll improve as time moves on. If you have any questions, feel free to shoot me an email or ping me on one of my social network channels.

Sometimes the best way to learn to swim is to get thrown in the ocean.

References

  • [1]: You probably can figure out my approximate age.
  • [2]: They all started out as dorm room projects at Stanford or Harvard University.
  • [3]: LEGO has also become a much more expensive toy in the past few years which really saddens me, because it used to be a really simple, great way to get almost any kid interested in building and creating.