Skip to content

Instantly share code, notes, and snippets.

@cube-drone
Last active December 28, 2015 17:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cube-drone/7539342 to your computer and use it in GitHub Desktop.
Save cube-drone/7539342 to your computer and use it in GitHub Desktop.
A long-form response to a tweet.

@classam hey dude, we spoke yesterday about things I should know for developing... Any resources that are helpful for learning?

Hey, Stuart. Lots of resources. So many resources that I could talk for days about them. So I'm going to:

  1. I got started with PHP - and a book called "Web Applications with PHP and MySQL" which is now starting to seriously show its age ( http://shop.oreilly.com/product/9780596005436.do ) - because deploying a PHP application is very, very easy. I'm not sure if I necessarily recommend it, because PHP is a total shit-show of a language, but it's an introduction to PHP, an introduction to MySQL, an introduction to getting those things to work together... a good way to get to the point where you can call yourself a web developer very quickly.

  2. Get comfortable with the Linux command line. If you're in for a long read about user interfaces, command lines, Linux, and Windows, unpack and absorb this thing: http://www.cryptonomicon.com/beginning.html - but the extreme tl;dr of that short novel (I actually have the paperback version) - is that command-line interfaces are ugly as sin and not even a little bit user-friendly, but they're infinitely more powerful and programmer friendly than GUIs. But it's more than just that - Linux is hands-down a better programming environment than Windows, and cheaper to deploy on, to-boot.

  3. If you're familiar with a compiled static language (C# or Java), an interpreted dynamic language (Ruby or Python), and Javascript, you can work just about anywhere.

  4. Learn SQL, at least well enough that you can Create, Read, Update, and Delete things. It's not hard, and it's staggeringly useful. It comes in a lot of variants (MySQL, PostgreSQL, MS SQL...), but once you know one, you know all of the others, too. Read a book about SQL. There are thousands of 'em.

  5. Learn how to write a SQL query so badly that it will break your server. Things like "an unindexed query against an enormous data set" or "a query that contains un-filtered user input so that malicious users can execute arbitrary code".

  6. Learn HTML and CSS to the point where you can create an okay-looking website from scratch. You can learn an awful lot about building with HTML and CSS from the W3C and W3Schools websites. Although, again, it's starting to show its age, Dan Cederholm's "Web Standards Solutions" is a wonderful resource for this: http://www.amazon.ca/Web-Standards-Solutions-Markup-Handbook/dp/1590593812

  7. Learn a MVC framework for your server-side language - Ruby on Rails, or Django for Python, or CodeIgniter for PHP, or ... I hesitate to say Spring for Java because it's terrifying, but Spring for Java.

  8. Understand HTTP. What is a GET request? What is a POST request? What are headers? Everything that happens in the browser is intimately tied to the HTTP.

  9. Just... read about software.

A 10-year-old article filled with miscellaneous odd little gems about software: http://samizdat.mines.edu/howto/HowToBeAProgrammer.html

An entire free book about .. well, why UNIX/LINUX are great, and why they are the way that they are: http://www.faqs.org/docs/artu/

Joel Spolsky and Jeff Atwood are .. uh.. well, commonly thought of as self-important windbags, but in their windbaggery happened to produce two blogs just dripping with useful advice - also, StackOverflow, which I still consider to be one of the most useful things ever produced, and Trello, which I think of as a neato-burrito management tool.

http://www.joelonsoftware.com/ www.codinghorror.com/blog/

(The full list of the blogs I follow is available in an OPML file, here ( https://gist.github.com/classam/7538963 ) - which is an OPML file that imports cleanly into TheOldReader, but you probably aren't interested in COMICS or COOKING or VANCOUVER so it's a bit much)

And, well, this book, amongst others

Code Complete, by Steve McConnell - http://www.amazon.ca/Code-Complete-Steve-McConnell/dp/0735619670/ref=pd_ys_iyr13

And finally, this answer to a question posed to be by an even more junior programmer:

Hey Curtis, I was wondering if you could help me out with something? I plan on gong to UVic next year to do music and computer science. Since I know next to nothing about computer science, I want to try to learn some of the basics before I start. I was hoping you could point me in the right direction to some sort of book or online resource that would be a good starting place for me.


There are so many books and online resources. So many. I wouldn't even know where to start.

So, first: how I learned. A free online book called "How To Think Like a Computer Scientist" : http://www.greenteapress.com/thinkpython/html/index.html Then download Python and follow along with the book.

Alternatively, the Hot New Thing: Learning to program with live systems like the one provided by Codeacademy at http://www.codecademy.com/ or the system built in to Khan Academy at https://www.khanacademy.org/cs/programming

Most of these things try to get you through the key tools of programming, using one sample language (often Python or Javascript):

  • math (doing basic math with a language)
  • variables (saving stuff so you can use it again later)
  • loops ( repeating things over and over again )
  • conditionals ( getting your program to make decisions )
  • functions ( re-using whole blocks of code )
  • types ( the difference between an integer(number), and a string (words) )
  • objects ( a simple data structure with functions taped to it's head )

Some first-programming courses get to more advanced topics, like:

  • debugging (something has gone wrong. how do we fix it?)
  • compiled languages (an extra step between your code and execution)
  • libraries ( a bunch of functions all packaged together )
  • data structures ( efficient ways to structure data )
  • recursion ( what happens when a function calls itself? madness, that's what. )
  • memory management (when you save data to a variable, where does it actually go?)

If you have any questions, feel free to ping me.

Good luck!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment