Web Sites and Books for Novice Programmers

In the continuation of the Learning to Program series with Nate Abbott and Natty Zola from Everlater, I asked them a few questions about which web sites, books, and blogs they consumed at the beginning of their journey when they knew nothing about programming. 

It turns out that Nate and Natty spent most of their time simply searching for what they were looking for.  Whenever a specific topic came up, they’d use Google, be patient when reading through the search results and forums, refine their search, and keep trying.   They discovered that there are an amazing number of programmers who publish code on their personal blogs.  As they were trying to get basic stuff to work, they spent time searching for and then reading the full posts and comments. 

While they like sites like Stack Overflow and Github’s wiki pages on different open source projects, Nate and Natty never found a great site on the web that has comprehensive documentation on how to program.  Instead, they concentrated on being smarter than the problem, really thinking it through and isolating what they needed to learn, and then being patient in searching for and researching the answer. 

As Nate and Natty landed on a language and a set of frameworks to work with (more on that in another post) they spent a lot of time with the API documentation for languages and frameworks.  As dry as it might be, they waded through the Rails API, the jQuery API, and even the WC3 documentation.  But they often quickly ended up back at Google searching away.

It turns out that Nate and Natty have only bought three programming books in the history of Everlater and one was a forgettable SEO book that doesn’t even merit being mentioned.  The other two were HTML, XHTML, and CSS published by Visual Blueprint and RailsSpace by Michael Hartl and Aurelius Prochazka.  They felt the HTML/CSS book was so-so but it was enough to get them started. On the other hand, they thought RailsSpace was an incredible book that taught Ruby on Rails by walking through the steps to create a social network for Rails programmers.  While they felt this was a little corny, it also ended up being very effective.

Not surprisingly, Nate and Natty read a lot of blogs.  They read typical tech news blogs like TechCrunch and VentureBeat, popular VC blogs like Fred Wilson’s and Dave McClure’s, and entrepreneur blogs like 37signals blog Signals vs Noise.  But when they went deep technically, they spent a lot of time with RailsCast, the Engine Yard blog, and Yehuda Katz’s blog.  For design, they went with SpeckyBoy and Smashing Magazine. And when they needed a break from development they read Tech Trader Daily which was a holdover from their old life as junior investment bankers.

As I reflected on this, I found it fascinating how little they relied on books.  True to form, they sat down in front of their computers and just got started.  All of the information was already out there – they just had to be disciplined about finding it, reading it, and learning it.

What have you read lately?

  • I'm currently in the middle of some time off and spending a lot of it to get back up to snuff with markup. The last time I did this was in the very, very early 2000's at which time books like Visual QuickPro were super helpful. I went the same route and bought the updated versions of the same books and dug in. It took me a few hours to realize that it would be much easier to just Google what I was looking for as well as using plugins like Firebug (http://getfirebug.com) to snoop on other people's HTML & CSS and learn by tinkering.

    While I can't be sure, I feel like I'm much further along using the "find it online" method than I would be if I was following the projects outlined in the Visual QuickPro books I got.

    • I couldn't agree more that Firebug and reading other peoples source code is one of the most valuable techniques out there. Simply seeing how other websites and libraries are constructed is critical to learning… Great Point!

    • Jeffrey –

      Amazing point. Being in charge of the front end, I relied a ton on Firebug and crawling through my favorite webpage's HTML/CSS. Its a great way to both learn how developers better than we are do things and get some style tips.

      Hope all is well out in SF. I'll be Firebugging all your new hot designs!

    • Another good one to add to Firebug is YSlow – this is extremely valuable if you care about page load times, critical in SEO and UX

  • Ant

    Can't beat Bucky's Python Tutorials on YouTube for beginners to that language. Pitched just right to get you started with a few laughs thrown in along the way.

  • Go Nate and Natty!

  • The effort and dedication of Nate and Natty in learning programming this way is impressive.

    But what does this say about the state of software as a technical/professional discipline? This is pretty sad that in this day and age that there is not online educational destination that you can go to and pay to learn to program from the ground up. Software is still a craft and not a discipline. Disciplines have profesional standards and processes and it's straightforward for people with interest and drive to go learn those disciplines.

  • pwb

    If you know a little bit of PHP, browsing the CodeIgniter documentation and files can be a good learning exercise. The best way to learn to program is to pick a project, ideally something useful, and do it. Even though it's not as fashionable, I usually recommend PHP since it's syntax is a bit easier to understand, there are lots of educational resources, it's widely supported and it's skills are in good demand.

  • There is no better value thanhttp://www.lynda.com at $25/mo for unlimited training.

    I spent about 10 hours watching some advanced PHP videos and re-wrote my barely functioning code to be a proper set of easily maintainable objects within a few days.

    Additionally, the book "Database design for mere mortals" should be a required reading for anyone involved in database drive applications. For the rest,http://php.net solves most syntax issues.

  • The lullabot videos have been super useful for learning drupal, which in the beginning can be quite a daunting cms.

  • Loving the comments, very glad to see you were serious about putting this to paper Brad. Props to Nate and Natty. Thanks again!

  • I'm surprised HackerNews wasn't mentioned.

    For me the two best resources for learning Rails/Ruby was Agile Web Development for Rails and the PeepCode Screencasts. Anyone that has basic knowledge of HTML/CSS can learn Rails in a few days by reading this book and watching the screencasts.

  • Rework. Which I think you suggested to me. I'm going through a similar programming process. I've dabbled in programming before, but call myself a hack of a programmer. I've followed their same experience. The only thing I'd add to this is that I'm building my project on top of an open source project. So, for me becoming part of the open source community around this project has been a great part of the learning process as well.

    I also just started to read "Founders at Work" by Livingston (Ycombinator I think). Pretty insightful so far.

  • Very timely. I'm going through a similar process at the moment.

    After over 3 years of not actually coding anything (and back then it was javascript without cool frameworks, HTML, SQL 2005 and Classic ASP mostly) I've ended up feet-first in a project using C# .Net, Azure and SQL 2008.

    My experience has been similar. I scoured Barnes and Noble and Borders for decent books to get me up to speed but frankly most of them are either dry or not that much help (and all of them are over-priced). Stackoverflow and Bing have really proved to be my friends, though sometimes working out how to phrase the question is the hardest part!

    While there is a lot of awesome material on the web, there's also a lot of cruft that unless you read through it carefully can waste a lot of your time either trying to make it work or drag you off on a totally wrong path.

  • (apparently my original comment was too long)

    I'm making lots of notes as I go so I can document the problems and the steps to the solution – sometimes knowing why a solution was rejected is as helpful as knowing why a solution worked.

    The funniest moment was hitting a brick wall on something, searching the internet and finding a reference to a blog post I'd written 5 years ago that held the answer in someone elses comments!

  • I've been doing some of the same, spending a lot of time on Google, StackOverflow, and whatnot. I also got good value out of O'Reilly's Learning PHP, MySQL, and JavaScript and CSS Cookbook. Lastly, just getting started on the CodeIgniter docs now.

    Regarding books versus the web, I don't think the programming book is dead. My main issues with them are 1) crappy search/indexes and 2) incorrect assumptions about what platform you're on. Even something as trivial as Ubuntu versus Red Hat can derail you in the intro chapter of a book, and yet publishers seem to make all kinds of assumptions about what platform you're on. But these are not difficult pain points to solve. What I really want to see is an e-book with Google search, a synched/linked online forum, and content that is parametrized so you can plug in your environment (OS, web server, and versions of everything) and have it customized to your situation.

  • Richard

    Firebug and the web developer plug ins for FF and Chrome are both great.

    O'Reilly's "CSS the missing manual" is a really good starting point imo for anybody new to CSS – Good Tutorials, access to online resources and a well laid out manual that encourages you to dive in virtually from page 1.

  • Highly recommend REWORK by the founders of 37Signals. Simple clear language to help focus on doing stuff I HAVE to do to move forward. Make small decisions and build, great for anyone starting their own business!

  • My notes from this post:

    1. Books are fine for getting the big picture, and to reference as needed.
    2. Ruby on Rails will get your prototype up and running very fast.
    3. There's no better way to get started than to just start trying it.

    This reignited my interest in Rails, I need to do this but have very little time. I spent about an hour last night watching a Rails 101 video and its funny how much more I understand today than I did a year ago.

    I'm convinced that if I just get it setup, and can get an app running on my Macbook Pro then I'll be able to tinker around with apps I need to build. The problem is I've always had issues trying to get a good local development environment setup. I've tried Eclipse, Aptana, and last night I installed Rubymine. I think what's been frustrating has been I've just tried to dive right in and those tools are really powerful, so now I'm going to be a little more careful about setting it up.

    It would be a real help to have a beginners tutorial on setting up a Rails app on a mac using one of those editors. I've gone through some of the little command line ruby programs, but thats not cool enough, I want to be able to setup the app running on a server with a database. I have ruby code in github so I want to take that and build it on my local machine to start messing around with it.

    • Scott – right on! I spent most of my weekend trying to set up an environment on my Mac. Not much out there to help. All the books I've seen regarding entry level open source programming cater to the Windows environment. I'm using MAMP and still trying to decide whether I want to use a text editor or IDE.

      Thanks Brad for this series. So much of what's out there speaks to the engineering crowd.

  • I learned quite a bit of PHP, CSS, and the Drupal 5 CMS 18 months back by hiring a skilled programmer to work on it, with me as his assistant, remotely using iChat screen sharing. we built a local development platform on my MacPro using MAMP, and I brought in static IPs and hosted the site right from my machine (w dynDNS). Some days I’d have up to 50 beta users on the site! We used BBedit, FireBug, YSlow, and spent a lot of time querying Drupal.org to debug the PHP in both our own, and contributed Drupal modules. He had me doing a lot of the CSS, moving files with FireFTP, etc. I learned a lot but never became a big fan of Drupal (even after attending a DrupalCAMP in LA). Instead, I want to learn Rails. On the design side, I use 99Designs for logos and baseline page layouts. the book “design for non designers” helped me a lot, to avoid gross mistakes like alignment and white space principals. But mostly, for managing outsourced design.

    Also reading REWORK on my iPad 🙂 using Kindle – I like reading on the iPad much better than on my old Kindle. I forget it’s not a book and while immersed, start reaching to turn the page; that never happened on the Kindle. just setup Calibre in order to make all my PDF books into ePub format books, so I can read them in iBooks!

    Go Nate and Natty! most impressive.

  • I've recently been involved in gathering and consolidating data from a number of sources, frequently ending with some collection of information in Excel. I've been developing a bit of code in VBA and VBScript as a result.

    While I have some really old books on VB/VBA, when I need to figure out how to do something, I usually just do what Nate and Natty did: Google for it (e.g. "VB range find lookin", which I executed when I needed to do a search in an Excel vb macro). There are many, many sites, many of them forums of one sort or another, with information that's useful. So many, that I can't say that I go to any particular site regularly. I just Google.

    The only site that I see frequently is ExpertsExchange, which I generally ignore because it's a pay site and I can usually find what I need elsewhere.

  • Jason Hartgrave

    I wish more people Inside of the internet marketing industry would take to heart your words, "All of the information was already out there – they just had to be disciplined about finding it, reading it, and learning it." – So many people keep buying how to courses and never actually "do" anything.

    I find it interesting that as the information age progresses I do less offline reading. Most of the innovative ideas are immediately published online or on some digital medium so by the time it reaches print it's already outdated. However, the difference that separates the successful from the ultra successful or elite IS the amount of time spend reading offline higher level conceptual books. For example "Think and Grow Rich", "The 4 Hour Workweek" , "The Magic of Thinking Big" etc. I think the key is striking the balance between not only the level of reading versus taking action, but in the diversity of content. Having a mindset of success is just as important as discovering the technical tools and skills need to achieve your goals.

  • Pickup a good beginners book to learn the syntax and then find a simple problem to solve and go to town. Because, the API is king when learning a new language. Learning the ins and out of the API will help you learn how the language functions internally and will help you write better code – for example what algorithm does Arrays.sort implement in the java API.

    After that IRC > *. If you ask intelligent questions there are pleanty of people on servers like freenode who can help you find what you need or even just answer the question straight up. Channels like ##java have people who work for companies like JBOSS and deal with the internals of the language on a daily basis. Just idling in the channel is a good way to pickup information as well.

  • Brad,
    the Pragmatic Programmer is a timeless book that spans languages and is a treasure trove of concepts like code debt, broken windows and other useful abstractions that can help any programmer be better: http://www.amazon.com/dp/020161622X

    Also I read this one many years ago and found it to be an excellent book for getting one's head around the concepts of OO programming to the level of being able to better interface with a team as a PM:http://www.amazon.com/Object-Technology-Managers-

    Lastly, it's not a book at all but I ran into an ex-employee on Friday. He's now a comp sci teacher at a local community college and speaks very highly of "Scratch" for a self-guided software-based learning of programming concepts. It's project that came out of MIT similar to the "Alice" program created at Carnegie Mellon but is apparently linear in approach as opposed to the "open world" style. I've played w/ Alice but not Scratch:http://scratch.mit.edu/


    PS. We had pitched you 2yrs ago w/ our startup. We're not raising money at this time but I'll be up in Boulder next wk for Boulder.me. Would be great to catch up and give you a progress report on things while I'm there.

  • I found Code Complete to be really useful http://www.amazon.com/Code-Complete-Practical-Han

    It isn't specific to a language and is a little intense for a novice (like me), but did provide great information on the concepts behind programing and the best practices that lead to solid software (things like test driven design, naming conventions, etc.)

  • Pingback: Are Storytellers The Best Programmers?()

  • Pingback: affordable car insurance in nj()

  • Pingback: http://takescreenshotonmac.com()