Twitter: @jungledave - will you be putting up your slides/talk from tonights AWE meetup online? i [...]

How I Learned to Code

Oct 06, 2008 in , , ,

When you talk to accomplished programmers, it’s no shock to hear they began programming at a very young age. Unfortunately, I was not the same way and did not grow up programming. I was much more into hardware during my childhood. I learned how to solder, read and write circuit schematics and build small projects. For my 7th grade science fair project I built a so-called breadboard robot built around a BASIC Stamp II microcontroller. However, you can only do so much hardware until you need to know something about software. It was then that I first got my hands on programming, years after I had tinkered with my dad’s IBM DOS box and then my sisters’ 25MHz Macintosh Centris 650 in 1993. I had to. The robot wasn’t going to find its way out of a maze without any instructions.

Thanks to Anonymous for suggesting this article via Skribit, and to the readers that voted heavily on it over the last few days.

All I had for reference with a massive, verbose PBASIC programming book that came with the microcontroller. That didn’t work so well. Fortunately, I got to know one of the managers at a local electronics store and he introduced me to some of the Basic programming language foundations, from gosub to interfacing with the microcontroller’s I/O registers. I went to the state level for that science fair but my robot didn’t do much other than move sporadically.

My CS History

It wasn’t until the end of high school when I took a computer science course that I touched programming again. It was Java and the teacher introduced us to the teaching-friendly BlueJ IDE. That same year I had a period where I would hang out with that teacher in the library and go and fix computers (remove spyware) from various teachers’ computers when summoned.

During that same time I had an idea to make a website allowing visitors to customize computers that I would build and ship. This was when I first got involved with HTML and used Dreamweaver - often on that same teacher’s Titanium PowerBook G4 when he was off running errands. The site never really launched but I implemented a photo uploader that somehow found its way all over the tubes and people began using my server for image hosting. I had to shut that down after it used several hundred gigabytes of bandwidth.

Fast forward to the summer after my freshman year at college. Along with a friend in my dormitory, I decided to create a wiki website compiling all sorts of computer modification information. For the years prior, I was very much into building, modifying and overclocking computers, had won numerous LAN party PC building competitions and had worked my first job building computers in an unairconditioned warehouse in Texas and installing them at schools for $7 an hour. (It was around the time that LGA775 first started being used by Intel so I was pretty psyched about playing with those machines.)

My friend and I created TheModWiki.org, began writing articles about computer modifications and spread the word. It was through tinkering with this project that I was exposed to PHP with MediaWiki, as well as Linux systems administration. It was also around this time that several friends in my dormitory got me hooked on Linux and I began using Gentoo Linux with Fluxbox exclusively for about a year.

That friend wanted to start a blog and began researching a few content management systems. I was equally curious and decided to install WordPress on my then-new Mac Mini G4. I liked WordPress and ended up buying PaulStamatiou.com and began hosting this blog from my dorm. Fast forward a year later and I was quite proficient at CSS and XHTML from endlessly modifying my WordPress theme.

Of course, my college major is heavily involved with computer science so I have been subjected to a range of courses like the following:

  • CS1371 (MATLAB/Java)
  • CS1322 (Java)
  • CS2260 (C)
  • CS2340 (SmallTalk)
  • LCC2700 (misc esoteric languages)
  • LCC3710 (Actionscript)
  • LCC3705 (PHP/MySQL/JS/AJAX)
  • CS3750 (User Interface Design)
  • CS4660 (Educational Technology)
  • CS4803CJ (Computational Journalism with PHP & MySQL for some projects)
  • CS4803doc (Design of Online Communities)

Among those, I learned the most about programming in the Information Design course LCC3705. There were only about 8 students in the class and it was taught by a graduate student from CMU, as I’m assuming Georgia Tech could not find a professor familiar enough with PHP, MySQL and AJAX to teach the class. It was a great class and very laidback. We learned a bit of PHP, tried it out on our own and then left. That class had a longer project at the end of the semester that I got into quite readily. I built a “party finder” application of sorts that used a PHP library for Google Maps and allowed users to create, share parties and find parties near them. It would subsequently load machine-tagged images from the parties from Flickr using their API and publish microformats data for each party.

Party Finder
The only images I could find of that project.

From what I learned there, I wrote a few guides:

I wouldn’t recommend those articles anymore as you’re probably better off building a web app with an MVC framework but it’s a decent beginner’s guide to tying together simple PHP and MySQL.

More Recently

So that was a bit about my computer science and tech background, but how do I learn about computer science topics now? For the past ~11 months I have been involved with Skribit, where we use Ruby on Rails. It’s my first experience coding collaboratively using version control (SVN in our case) and an MVC framework. I’m still very far from being proficient at Ruby on Rails development but I can usually hack something together over time.

I watch and learn, then write. I spend time tracing code and seeing what each line of code does. I use Firebug to debug things on the front-end and prod about for performance issues with TuneUp. I also bug Calvin with Ruby questions from time to time. And of course, I Google anything and everything. Errno 1041? Google. NoMethodError? Google.

How I Suggest You Get Started Coding

Becoming good at programming lots of practice and inevitably lots of failures. There’s no way around this, it just takes time. But that doesn’t mean it has to be drab and boring. I can look back at most things I’ve done and say that the reason I started them was my own curiosity. I was curious about WordPress, so I started a blog. I was curious about how computers worked, so I built my own. Curiosity may have killed the cat but it’s a way of life in the tech world.

First off, know your environment. Make things easy on yourself and just get a Mac/use Linux, or become a slave to Cygwin in Windows.

  • Get to know the Unix filesystem.
  • Learn vim basics.
  • Find a text editor you feel comfortable with.
  • Tinker with FTP.
  • Learn how to use SSH.
  • Install LAMP and setup your own blog, preferably on a web host. Doing so will introduce you to the basics of DNS, PHP, MySQL databases (try phpMyAdmin), firewalls, the Apache web server and more.

Find out what you’re interested in and something you want to build. Build it by learning along the way with trial and error and..

After about ten years you should be able to call yourself a programmer.

How did/are you learn(ing) to code? What’s your specialty?

Promote this article on various sites or email to your friends:     



32 Comments

  1. My journey started with Basic when i was in school. It was followed by C, C++, Java which i learned in college along with basics of web designing which included HTML, Java script, Css, PHP etc.

  2. I learned BASIC back in the days of “hacking” nibbles and gorrilla wars in QBASIC
    then came C, C++, and VB in college….then I quit messing with computers for about 5 years. Now I am trying to relearn everything. The current goal is javascript and PHP. Good thing all the “rules” are the same..sorta

  3. I learned to program writing Batch files for DOS, prior to Windows 3.1. It was a patchwork of hacks and goto statements. Then in high school I got proficient in Pascal (this was before they taught C++) and went from there.

    The best way to learn is to jump in and start experimenting. You will only get good if you enjoy doing it and take the time to try and fail and try again.

  4. I taught myself BASIC and built some rudimentary paint style applications. In college I learned Java (and all the web and database stuff that came with it), C++, and later taught myself PHP

    Been playing with Rails recently - don’t really have a project that I’m passionate about that I want to build in Rails, so my development with it has stalled =)

  5. I went to a Java school. Despite that, I think I’m a decent programmer. Started out learning VB in the 15 minutes between high school and work (at my high school troubleshooting Windows problems). From there, ASP. I’ve dabbled in everything, which I think is an important manifestation of innate curiosity but feel most like calling myself a C/C++ programmer.

  6. Hey Paul, I’m glad that the 3705 course proved useful in the end. You’ve really taken off since then. You totally should have sent me the links to your tutorials. That’s awesome stuff.

  7. I learned BASIC back in the days of “hacking” nibbles and gorilla wars in QBASIC. Learn C, C++ and VB in during the few moments I was in college. Then I didn’t mess with computers for about 5 years. Now I am trying to relearn everything. My current goals are javascript and PHP. Good thing the “rules” never change.

  8. I taught myself how to code when I was in the Marines (back in the late 90’s). Out of the blue one late night shift, I taught myself everything I needed to know about HTML and how to setup the little web space Earthlink made available to me (ugh, dial-up). I started to write, what we today call a blog, about my travels while in the military.

    That site is long gone but I now take myself taught knowledge of xhtml, css, php, sql - and apply it to my every day job as a Network Systems Admin and Webmaster for my employer. I’m also spending my nights helping other Non-Profits in the area with their websites and constantly re-vamping my own site (see link to my Maintenance page above, haha).

    It’s something that has always fascinated me and the ever changing world of technology ensures that I’ll always have something new to learn.

  9. And… get TextMate!

  10. I did my first programming in BASIC in high school using a time-sharing system and optical scan cards. Later we got to use a TTY terminal and paper tape. From BASIC I moved on to COBOL and then PL/1. Forté TOOL, Java and various scripting languages followed. I got hooked the first time I played a text version of STAR TREK on a thermal paper terminal at 300 BAUD. I wanted to know what made this thing work. I’ve been figuring out “what makes computers” tick ever since.

  11. Awesome! I got started the same way, with soldering, electronics, the BS2 and PBASIC, moving on up into software like PHP and friends.

  12. This is how you could also learn how to program, should you actually care:

    1) The C Programming Language (2nd Edition) - Kerninghan & Ritchie
    2) The C++ Programming Language (3rd Edition) - B. Stroustrup
    3) The Haskell Road to Logic, Maths and Programming - Doets, Eijck
    4) The Art of Computer Programming vol I - III (grab the IV fascicles as well) - Knuth
    5) Programming Erlang: Software for a Concurrent World - Armstrong
    6) Design Patterns: Elements of Reusable Object-Oriented Software - Gamma, Helm, Johnson, Vlissides
    7) Generative Programming - Methods, Tools, and Applications - Czarnecki & Eisenecker
    8) Operating Systems Design and Implementation, 3/E - Tanenbaum, Woodhull
    9) Accuracy and Stability of Numerical Algorithms - Higham - Society for Industrial and Applied Mathematics

    Once you complete the above titles, you will be able to learn guru level ruby , python, php and all that jazz while you walk through the bookstore corridor.

    You will not be learning programming in IRC channels, social mingling etc. Dark power overlords do not share their power with no one. Some, may share their books, but that’s just about it.

  13. That was the great read. I was awaiting for you to post.

  14. My first experience really coding (outside of just editing pre-written PHP/MySQL scripts for random websites over the years) was also in senior year of High School in a java class. Then I started CS at tech, took some more classes and got a good foundation. I got a CS co-op job where now I’m one of the more knowledgeable.NET (C#, ASP) programmers here. While I’ve gotten really comfortable with .NET, I know I could be doing so much more if I learned ruby or something like that, especially since I have all the basics of coding and DB programming down pat. I just don’t really want to spend time devoted to learning a new language unless I really have an impetus to do so (like I did when I started this job and learned .NET).

    I ended up switching to Management with a minor in CS, as I really wasn’t enjoying taking most of the CS classes at tech, and just wanted to take the ones that actually interested me. I wish I could take that LCC class though, it sounds like something in which I’d really be interested. I decided to switch to management because as much as I like coding, I’d much rather be on the business side of things than the coding side, but I hate managers who don’t understand the technical aspect, so I feel like I could really fulfill that role. So now half the year I learn management stuff (with one CS class I’m interested in), and the other half a year I come to my co-op job and code web-apps in .NET. I’m pretty sure I’ll be on good footing after I graduate to hopefully go out to California and find a job in the tech industry. I’ve lived in Atlanta my whole life, and now gone to college here, and I really want to go to the west coast immediately following graduation.

  15. I have been very interested in coding the last few years. My first major ‘project’ online was starting a web hosting business where I learnt quite a bit about FTP/SSH/DNS html/css and started tinkering with php/mysql.

    I took a programming course last year in school where we covered basic html/css, dabbled with javascript, then spent more than half of the year in php/mysql. I learnt A LOT. I didn’t think I’d learn so much from a class, but I did.

    Now… I don’t know enough to go out and code a full blown web app, but I got the basics down. My basic knowledge in databases has been very useful, and I can’t believe I’m saying this, but I’m actually glad my teacher taught us all the proper SQL Queries rather than just making us use the phpMyAdmin GUI.

    I still want to learn more about PHP and get that down, but lately I’ve been tinkering with Rails. I want to try so many more languages and see what I like, but I’m going to take them on one at a time.

  16. as I really wasn’t enjoying taking most of the CS classes at tech, and just wanted to take the ones that actually interested me

    I know quite a few people in that boat at Tech..

  17. LOL, well Paul, did that $7/hr job take place at Directron? Haha. My friend got the same job.

    I’m pretty much in the same boat as you. I was building and modding computers at the time. Thought coding was boring and hardware FTW. I really sucked at Newland’s Java class. In fact, my sister is taking it now, and he told her that I couldn’t code. LOL.

    Fast forward 2 years. I’ve realized the power of the internet and decided to try and make a dent!

    Didn’t know about LCC3705, gonna check that out!

  18. @Calvin Ashmore - thanks for stopping by!

    @Dan - haha yes, it was Directron. I’m not sure 3705 is taught every semester but if it’s taught again, take it.

  19. anyone know of a good CS book to teach logics. im currently taking discrete structures and im not understanding logics in the book were using

  20. Here is a great book I recommend for those looking for fundamentals in programming logic.

  21. I really wasn’t enjoying taking most of the CS classes at tech, and just wanted to take the ones that actually interested me.

    That’s how I feel right now. But the threads program helps out with that since I can take classes more focused on what I am interested in.

  22. Threads was a nice improvement, but I really did not want to have to take CS2110 and other classes like it. Just doesn’t interest me, and I wasn’t that good at it. I felt like all the CS program at tech was preparing me to do was be that CS nerd in a dark room at a shitty company.

    I would’ve done CM (Computational Media), but I felt it was too oriented towards people with art/design skills, which I don’t possess. I just hope that a management degree with a CS minor and 4 years experience as a co-op in a .NET consultant shop is enough to do what I want to do in the field.

  23. 1990s - I started coding….messing with BASIC & dos batch files back in grade school. I moved on to QBASIC in junior high.

    1997 - In high school learned some HTML..but I’d hardly call that programming.

    2000 - After high school I realized I could serve web pages from my home computer. I wrote my first ASP application….which was basically a data-collection program used for phishing. (Only used it on the well-deserving victims)

    2000 - Hired on by a .com whose entire site was coded in JSP. Determined that I could make the site work much better with ASP so ended up re-coding the whole thing. Did several other sites around this time.

    After the .com crash I learned some PHP. Actually I did all of the programming homework for a friend of mine. He paid me to write the programs and I learned PHP.

    Fast forward to now…I’ve created probably a dozen smaller PHP sites that I use for various things….mainly to fulfill needs of my own. (I wish there was a web site that…..) I’ve messed a little with Ruby on Rails…and while I think it’s a great framework/language….PHP is much more..there. You can take a PHP script almost anywhere and get it to run with basically no fuss. ROR is a different animal. It’s the car in your driveway that only runs on Hydrogen. Sure, it’s great…and it may be the future….but it’s still got some drawbacks.

    I’m looking at PHP frameworks right now….that feels like the direction I want to head for future projects…the problem is which one to select/learn.

  24. My first dabble in coding started when I was around 10. I found how to look at the source code of the websites (back in the days of Windows and IE6), and it kinda went from there.

    There was this really childish website around that tought kids the basics of HTML, so I fired that up, and fired up notepad and started experimenting with code and looking at what the results were. Not exactly standards-compliant, but whatever, I was young :p

    A few years on, I started to look at PHP and MySQL to see how I could extend this knowledge, and it all carried on from there..

  25. The site never really launched but I implemented a photo uploader that somehow found its way all over the tubes and people began using my server for image hosting. I had to shut that down after it used several hundred gigabytes of bandwidth.

    That sounds like an interesting story, Paul. Care to elaborate?

  26. To tell the truth, I think I’ve never learned to code quite accurately. I can still produce some real bugs in my programs and Im always (well not always) checking the documentation for references.

    But curiosity and trial and error are my friends… ^_^

  27. Programming doesn’t necessarily means using Unix/Linux and Vim…let’s not discriminate…

  28. @Mircea - yes but they are foundations of learning to code. I really don’t think you can be considered a programmer without knowing terminal basics and the like. They come up so frequently in the development environment.

  29. Great article, I think im up to the near end of h/s part, I know a fair bit of xhtml and css from playing with w/p and making a few php apps. But im not fully confident yet, and my website at the moment needs alot of debugging, I hate IE6, and 7 for that matter.

    thanks

  1. [...] a photo of the $500,000 Mercedes McLaren SLR I spotted over the weekend, but I can’t tell you how I learned to code with Flickr. The same type of thing goes for Facebook and Twitter. Each service has its own purpose [...]

  2. [...] I have scoured the web for this and I have recently found a good post by Paul Stamatiou titled, How I Learned to Code.  This is a very well written post and has some great links at the end of the post that I will [...]

Post a comment, receive Stammy points.


Send a trackback.


  • If you plan on posting code, run it through Postable first.
Copyright © 2005 - 2008 PaulStamatiou.com  Privacy Policy - Terms of Service Can't spell my name? Use PSTAM.com. Go back up ↑.