I don’t know anything about programming

I’ve been spending a lot of time on Koding lately. It’s been called Facebook for programmers, because it’s a combined activity feed and virtual machine that you can use for development. Outside of specific questions on how to do X in Y, how to connect using SSH and other technical questions, the most common question is the following:

I don’t know anything about programming, where should I start?

It’s always hard to answer that question. In the end of this article I’m going to be linking to a few resources that I think are good, but the main portion is going to be about something almost as important as resources: The mindset.

Why do you want to learn?

This is not intended as a way to discourage you from learning, but the first question to answer is going to be why, because the why will inform the how and what. First, take your ambitions down a step. Don’t think about it as I want to build the next Facebook, or I want to build the next iTunes or even I want to build the next Flappy Birds (or whatever’s cool in app games right now), think of it in smaller terms:

Facebook
Web programming/developing
iTunes
Most likely installable software
Flappy Birds
Android or iPhone programming

What

Having an idea on the scope of the why, you can consider the what, as I stated above. The lines between web development and “other” development is getting fairly blurred, where one of the key differences lies in what languages you need to focus on.

If you’re wanting to do software like Microsoft Office, or Photoshop, or iTunes, you’re going to need to work very close to individual operating systems. You’ll need to have more understanding of the architectural structure of a computer than the other two. Recommended languages: Python, C++, Ruby, Java, C#.

If you’re wanting to do apps (disclaimer, not my forte), it’s both easier and harder than writing software. You will know the operating system, but it’s going to be different bases depending on if you’re supporting iPhones, Androids, or both. Recommended languages: Objective-C (iPhone), Java (Android).

Web development

Finally, web development. You’re not going to need to worry too much about the hardware of client’s computers (though performance is still an issue), but you are going to need to worry about cross-browser compatibility. As a quick but important note before I continue: a site does not need to look identical in all browsers. It should be functional, but it does not need to look identical. Web development is also very multifunctional, in the sense that you’ll most likely need to learn several languages depending on where in the stack you are. You can read this article for a deeper discussion of the concepts I’m introducing here.

Now, a quick disclaimer: If your thoughts on this is closer to “but … I just want to get a page up and running immediately!”, you’re best off going with WordPress, either hosted on WordPress.com or using a web hotel of your choice to host it from WordPress.org. To build themes/plugins for WordPress, you’ll need the Front-end information from below and PHP as a server-side language. This is not to dismiss people who wants a quick page up, but rather that if you want something up and running quick, it is better to use something that works (ish) rather than trying to figure out how to build it yourself.

Front-end

To build what is visible to users, you’ll need (at a minimum) HTML (HyperText Markup Language) and CSS (Cascading Style Sheets). HTML describes/marks up what individual elements are (this is a link that goes here, that’s a header, this is a list), CSS gives directions on how the page should be displayed (links should be blue, headers should be bold Georgia, lists should use a square bullet point). If you’re also wanting it to do things, you need to use JavaScript (if you focus on this link it shows a tooltip, if you activate on this header it displays that paragraph, if you activate this list item it shows a sublist). However, all of these things are hardcoded into the system (in some way) if you don’t communicate with a server.

Backend

Note: In my article above I refer to this as Middleware, but in this I will use the more commonly used term Backend to describe both of them.

Backend/server is where data is transformed into a front-end. Even if you aren’t going to touch the front-end, you need to have a working knowledge of HTML and CSS, or at least CSS selectors. This is because either you will work with someone who gives you a mockup in HTML/CSS that your code needs to produce, or you will need to come up with at least part of what is being produced.

You always need to have a working knowledge of HTML, CSS and best practices, no matter if you want to do backend or front-end development.

For backend programming, what language(s) you focus on is dependant on a lot of things. If you’re needing to rely on shared hosting (most commonly if you’re on a tighter budget), the language you are most likely to find supported is PHP. If you’re just working for yourself and want marketable skills, probably PHP, Python (with Django), NodeJS or Ruby (on Rails). Personally I recommend against C# or Java for server-side languages for webpages.

To host things other than PHP (though PHP can be hosted through it as well — all things but pure HTML-pages can), I recommend Heroku. If you’re just experimenting but need a development server where you can see progress, I strongly recommend Koding.

Finally, the how

So, now you’re hopefully having an idea on what you’re wanting to learn. To recap:

If you want to build …

  • software that’s on the actual computer: learn Python, C++, Ruby, Java or C#
  • apps for smartphones/tablets: learn Objective-C (iPhone) and/or Java (Android)
  • web sites/applications: learn HTML & CSS; JavaScript; PHP, Python (with Django), NodeJS or Ruby (on Rails)
  • nothing in particular right now, just want to learn: learn Python or NodeJS

Final thoughts on how

Find yourself a project. It doesn’t need to be a large one (in fact, in the beginning, it’s better to go small), but it needs to solve a problem. Problems can be anything from “I can’t remember who borrowed my DVDs”, to “I’d love to connect to Google Calendars API to have reminders in the morning”. I say that it needs to solve a problem because that makes it personal and motivational. In the beginning, keep a bit of an eye on best practices, code styles, etc, but more than anything: Learn to think.

Resources

CodeAcademy

You can learn …

  • Python
  • HTML/CSS
  • PHP
  • JavaScript
  • Ruby
  • how to use APIs

TutsPlus

Has articles and screencasts in quite a few different areas, both premium and free.

It’s a good idea to keep an eye on when it was posted and if there’s comments, since occasionally the information gets changed, since they often report on very new things.

PythonTurtle

An adorable way to learn Python. It is an interactive tutorial that’s easy enough for children to use, and advanced enough that you don’t feel like a child using it.

Rails Girls Tutorials

Created to be a good way to learn Ruby on Rails in workshops, there’s quite a lot of nice material to absorb. The Rails Girls App is a good place to start.

Getting started with Github

I did not touch on Git or Github in the article, but I want to add it here. Git is a way to version control your code, which gives you a bigger freedom to play around with it without needing to worry as much about losing work. Github is a place to host the code, and quite a few open source projects are on Github.


For the moment comments are not enabled, but feel free to reach out on Twitter.