Looking for new skillz (turning the blog around)…


Just for giggles, I went looking at the various job listings within Microsoft and outside Microsoft (no, I’m not going anywhere, I was just curious).  While looking, I realized that I had absolutely no marketable skills :).  Nobody seems to be hiring an OS developer these days.

To repeat and be even more clear: I’m *not* leaving Microsoft.  I’m *not* leaving Windows. 

I’m just looking for a book or two to read to improve my skills (I do this regularly – most of my recent reading has either been on Security or WPF and to be honest, I’m kinda bored of those topics so I’m interested in branching out beyond security and UI topics)…

I could run out and browse the bookstores (and I might just do that) but I figured “Hey, I’ve got a blog, why don’t I ask the folks who read my blog?”.  So let me turn the blog around and ask:

If I wanted to go out and learn web development, which books should I read? 

I’ve already read “Javascript: The ood Parts” and it was fascinating but it was more of a language book (and a very good language book), but it’s not a web development book.  So what books should I read to learn web development?

Comments (42)

  1. Kev says:

    ASP.NET MVC is all the rage just now, if you fancy getting your head around it then you might want to read Pro MVC by Steven Sanderson:

    http://www.amazon.com/Pro-ASP-NET-Framework-Steven-Sanderson/dp/1430210079

    Kev

  2. LarryOsterman says:

    Kev: I thouht that ASP.NET MVC was server side code, not client side.  I’m looking for client side development (continuing my "I want to learn UI programming" theme).

  3. Zian says:

    jQuery is a great tool for manipulating webpages.

    Book: jQuery In Action

  4. Adam says:

    "Design of Sites" is good, but it’s not code per se.

  5. Great suggestion from Zian – jQuery in Action is superb. Also check out Douglas Crockford’s [Javascript: The Good Parts](http://oreilly.com/catalog/9780596517748) .. it gave me an entirely new appreciation of the language.

  6. Thomas says:

    I’d say a book about Silverlight. There are many good ones, and Silverlight is great stuff.

  7. Gah! Perhaps I should have read your entire post. Another book I enjoyed was Pragmatic Ajax (http://www.pragprog.com/titles/ajax/pragmatic-ajax), co-authored by the chaps that started ajaxian.com (which also is an excellent resource for client side development).

    Now that I think about it, all of The Pragmatic Programmers have been consistently worthwhile.

  8. gazzal says:

    If you are not particular about web development, learning SSIS would be a pleasant experience.

  9. Karellen says:

    Don’t.

    Web development sucks. All web browsers are broken. Even if they’re not, you need to act as if they are. You figure out how to do something from a book/tutorial, implement it, and then spend five times as long as you spent implementing it correctly working around bugs, limitation and missing features in all the popular browsers to make it actually work.

    You ever come across an API bug in OS/app development on a sane platform? It happens, but it’s rare, right? Nearly all the time the problem is with your code, and figuring out *why* it’s your code and then fixing your code makes you a better programmer. Fixing it makes your code better. When it’s a bug in the API, that’s frustrating. Especially when it only happens on some platforms. Tracking the bug down is hard. Figuring out how and where and when to work around it is frustrating because *it’s supposed to work*, damnit! And it’s not a proper fix, it’s a workaround, a band-aid, an ugly hack.

    Web development is like that *all the time*.

    Nearly all the bug hunting is about working around browser bugs. None of this bug hunting is interesting, productive or fun, and cannot be interpreted as a useful learning experience (as you don’t learn anything that can help you be in general a better developer, but rather just learn more and more and more about how annoying fscking web browsers are) or a productive use of your time, and does not give you any sense of achievement or accomplishment. Only a feeling that it really should not be this hard, and a sense of dread that you’re going to have to go through all the same kind of crap again next time.

    Really, stay away.

  10. Stuart Dootson says:

    As already said – jQuery is excellent. I’d be tempted by either of the books by jQuery’s developer, John Resig, even though they aren’t about jQuery (as already mentioned, jQuery In Action is a good book for jQuery).

    Or why not have a look at alternate server-side technologies, like Django, Rails or TurboGears? It’d certainly be a significant departure from ASP.NET :-)

    Or with F# entering the Visual Studio mainstream, maybe you could dip a toe into functional water? Real-World Haskell (pub. by O’Reilly) or Joe Armstrong’s Erlang book (pub. by Pragmatic Programmers)?

  11. Jeroen Mostert says:

    +1 for jQuery, it’s probably the most fun you’ll have with Javascript. Diving into its internals to get a feel for how challenging cross-browser development is (if you’re not already familiar with the pain) is also a nice pastime.

  12. LarryOsterman says:

    Thomas: While I agree that Silverlight is excellent, I’m looking for something that will teach me HTML+CSS+JavaScript programming.  

  13. Dave Brown says:

    I’ve already read “Javascript: The ood Parts” …

    http://en.wikipedia.org/wiki/Ood

    Are you implying that Javascript programmers are Squid-faced humanoids?

  14. Steve Gilham says:

    It’s a func choice, so long as you’re not looking to go make a living from — I accidentally picked up web design as part of a server-side career, luckily in the heady days when the field was just picking itself up after the dot-com crash — it’s different and easy enough to get some "Ooh! shiny!" out of that the server side never does.

    For tackling web development from the design side, for an introduction I’d go no further than Jeffrey Zeldman’s Designing With Web Standards (3rd edition), and follow all the material it references.  

    Going back through his on-line magazine A List Apart (alistapart.com) will also be rewarding, as you can follow the evolution of the field from the days of "Netscape 4 sucks" through the realization that most browsers supported enough CSS to make it worth using, and thus to the present.

  15. Maurits says:

    What Karellen said.

    I can’t recommend any book, but when I was doing web development I made a habit of reading the relevant standards:

    http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

    http://www.w3.org/Style/CSS/

    http://www.w3.org/TR/html4

    http://www.w3.org/CGI/

    With that basic knowledge under my belt, I was able to better understand what the various server engines/libraries I used were actually trying to do.

  16. Hamilton says:

    You can feel the pain in Karellen’s post :-)

    But web dev can be fun! Choose some cool software stack built upon a cool language and you won’t be disappointed. I suggest django, because rails is so not cool, mainstream nowadays.

  17. Garthy says:

    The Django Book is free?

    http://www.djangobook.com/

  18. andy says:

    Why not Android? Just skim through "Application fundamentals" in their Developer’s Guide and get an overview of their *super-cool* model of activites, services, content providers, broadcasts and intents: http://d.android.com/guide/topics/fundamentals.html

    Even if you do not want to develop any Android application, it can be very refreshing to learn their concept, which is quite different from other platforms (UNIX, Windows xyz (server, desktop, mobile), OS X, …). Actually I find some similarities with the good, old "ActiveX Documents" concept of Windows, but they kind of generalize documents.

    Unfortunately I do not know yet any good book on Android to recommend you to read…

  19. Karellen says:

    On top of the resources that Maurits has listed, if you are going to get into web development, the following resources are also invaluable:

    http://www.quirksmode.org/compatibility.html

    http://en.wikipedia.org/wiki/Comparison_of_layout_engines  (the links in the block at the very bottom of the page to the individual detailed comparisons for HTML, CSS, DOM, etc… is the important part of this page)

    http://www.w3.org/TR/DOM-Level-2-Core/  (as well as the main page, the "References" page has links to DOM2 Events, DOM2 HTML, etc…)

    https://developer.mozilla.org/en/A_re-introduction_to_JavaScript  (made me realise that the JS language is quite beautiful, and it is just browsers that suck. One thing that that I find particularly interesting is the "willful violation" for "document.all" in HTML5 §12.3.4 detailed at the bottom of: http://www.w3.org/TR/html5/obsolete.html#other-elements-attributes-and-apis  If your JS engine happens to be running code from a browser, you are *required* to implement a horrible special-case work-around hack for one specific property of one specific object to the otherwise simple and elegant JS type system, *and will have to do so for the rest of time* – instead of just leaving this as a quality-of-implementation "quirks" issue for browsers. Note that as a web developer, this is now codified behaviour that you can rely on, if you so choose. Searching the HTML5 spec of "willful violation"s of other specs is quite enlightening as well.)

  20. LarryOsterman says:

    Does Android run on PCs?  I thought it was an OS for mobile devices.

  21. Roland says:

    Dear Larry,

    Please don’t switch to the JavaScript camp! What a waste of genius would that be. Literally anybody can program in JS after some weeks.

    What the world really needs are the few remaining kernel hackers, the Russinovichs and Ostermans. The true heros who still can read and optimize assembly code and create the basis for a fascinating whole like Windows 7. We need guys who care about reducing latency in the audio stack, even it’s just 1 ms.

    I don’t want to see Dave Cutler write JS code, I don’t want to see Raymond Chen blog about .NET, and I don’t want to see Larry Osterman write in a language that shields him from using pointers.

    With deepest respect and admiration!

    Roland,

    a nostalgic German software engineer

  22. LarryFan says:

    > Does Android run on PCs?  I thought it was an OS for mobile devices

    Yes it does – http://www.android-x86.org/ !

    Get the ISO image and use it under VPC if you like – http://android-x86.googlecode.com/files/android-x86-20090916.iso .

  23. LarryOsterman says:

    LarryFan: Let me rephrase: Where’s the Windows port of Android?  How do I build and run an android application for Windows?  

    One other question: How does learning about Android help me learn HTML+CSS+JavaScript programming?  

  24. LarryFan says:

    Larry: Just to make sure – I was answering your specific question – does Android run on PCs.

    However using Android or Palm’s Mojo SDK (runs on Windows) are two great choices to experiment with HTML/CSS/JavaScript as you can build interesting stuff using the environment and that in my opinion makes things a lot interesting than they otherwise would be if you were to experiment with HTML/CSS/JS on the browser.

    I would advise not going the book route – and instead using the ton of freely available resources on the web – google^W bing for it and learn the basics and then advance by looking at existing code and by experimenting building apps in HTML/JS/CSS on one of those cool devices or emulators. You will learn a lot faster! But for CSS check out Eric Meyer’s work – http://meyerweb.com/eric/css/

    What did I just hand over advice to *you* Larry?!  

  25. Dave Aronson says:

    Larry, if you ever DO go looking, BAE Systems might be looking for OS types, to help continue developing STOP.  It’s not at all Windows-y, and it’s on the east coast, but . . . .

    -Dave

  26. Dave Aronson says:

    Roland is right — any idiot can program in Javascript (for various values of "program"), and many do.

    That said, though, it would help your roundedness to learn it (and HTML and CSS and so on).  As Heinlein said, "Specialization is for insects."  (My all-time favorite quote.)

  27. LarryOsterman says:

    LarryFan: My question should have been "Do Android apps run on Windows?".  

    As I said in the article, if it’s not HTML+CSS+JavaScript, I’m simply not interested (jquery absolutely falls into the HTML+CSS+JavaScript world and I appreciate the suggestions).  I don’t see a ton of job listings for Android developers but I do see job listings for web developers.

  28. LarryOsterman says:

    Oh and LarryFan: Me getting suggestions from the people who read the blog is the whole point behind the "Turning the blog around" theme).

  29. LarryOsterman says:

    Dave: Exactly – if I don’t keep on learning new things, my skills ossify.  It’s important for my job that I keep up-to-date with at least some level of the industry and it’s clear that a lot of client side development is being done in HTML+CSS+JavaScript.  That’s why I chose them for my next toy project.

  30. Bob says:

    Any idiot can use Javascript. The problem is that they often do.  :)

    Anyway, Javascript is sufficiently different to most languages used on the desktop that it can’t hurt to at least learn a bit about it even if you don’t end up using it.

    Another thought: google’s V8 is pretty neat, and is "just Javascript" instead of "javascript plus web browser stuff". Aside from being interesting for doing Javascript on the desktop, a bit of playing with it could help with learning how the actual language itself works. A lot of Javascript stuff seems to focus on "how to use Javascript on the web" rather than just "how to use Javascript". Obviously that side is important, though. But still, I find a lot of javascript tutorials just assume the DOM manipulation stuff is there and don’t explain the magic of how it gets there. Personally I find that sort of stuff important to understand.

    As always, wikipedia is your friend:

    http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks

    If you want to do all the web stuff in one big hit, pick a framework, any framework will do, learn to use it. Then once you know what you’re doing, you’ll be able to evaluate frameworks to use for real.

    But jQuery is still a decent choice.  :)

    Also, A List Apart seems, to me, to be a decent website site – plenty of CSS and HTML goodness.

    The CSS Zen Garden is cool, too:

    http://www.csszengarden.com/http://www.alistapart.com/

    One page of text, large numbers of completely different CSS files to change the presentation completely. While its more extreme than most "real" sites, it has to be worth a look.

  31. andy says:

    Oh, sorry. I didn’t completely read the last part of your article before commenting. Somehow I thought you wanted suggesting for reading anything, and that web development got triggered by the first commenters. Now I know why they focused on web development. Sorry for this Android-digression. Anyhow, it’s not so likely that you will be able to run Android apps on Windows in the near-term. But they do have a very different model on what an application is that makes it useful to learn about it even if you don’t plan to develop or use any Android-app.

    Anyhow, with regards to web dev. I would also recommend you to learning the underlying technologies, like HTML, CSS and Javascript, instead of starting with one of the funky high-level frameworks (Django, Ruby on Rails, etc.). Personally I haven’t read any book on those subjects, just the standards along with blogs & tutorials. IMO, W3C’s standards are fairly easy to read with lot’s of examples to show what is meant. But I do know it is not that common to prefer standards over book!

  32. devdimi says:

    Larry Osterman learning web development?

    Where is this world going?

    I guess it is good to stay up to date with new technologies, but do you consider doing web development with your experience and skill set?

    For web development – check out http://www.w3schools.com/ – they have nice html, css and javascript tutorials for beginners.

    Also check out http://msdn.microsoft.com, section web development – it is the ultimative reference when doing web dev.

  33. Joe Chung says:

    The O’Reilly "Definitive Guide" books on HTML, CSS, and JavaScript are dated but still good reads.

    Eric Meyer. CSS: The Definitive Guide (3rd Edition, 2006).

    Danny Goodman. Dynamic HTML: The Definitive Guide (3rd Edition, 2006).

    David Flanagan. JavaScript: The Definitive Guide (5th Edition, 2006).

  34. Dominik says:

    Any idiot can program in Javascript like any idiot can in C.

    C is challenging…like any other language.

  35. I must take issue with Roland regarding JavaScript. Sure, anyone can pick it up in no time; that’s true of any language. Using JavaScript correctly, however, takes quite a bit of learning. You mentioned reading "JavaScript: The Good Parts," so you’re already WAY ahead of most JavaScript coders. Check out Crockford’s web site as well.

    Too many people regard JavaScript as an underpowered little scripting language, when it’s actually incredibly powerful when you learn what it’s actually capable of. I use it to write full-fledged apps away from the web.

  36. Charlie Owen says:

    RESTful Web Services

    Web services for the real world

    By Leonard Richardson and Sam Ruby

    You’ve built web sites that can be used by humans. But can you also build web sites that are usable by machines? That’s where the future lies, and that’s what this book shows you how to do. Today’s web service technologies have lost sight of the simplicity that made the Web successful. This book explains how to put the "Web" back into web services with REST, the architectural style that drives the Web.

    http://oreilly.com/catalog/9780596529260/

  37. tb says:

    Couple weeks late on this, but I didn’t see these in the comments.

    Steve Souders has some good books

    http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309

    http://www.amazon.com/Even-Faster-Web-Sites-Performance/dp/0596522304/

    O’Reilly’s DHTML is a good offline JS/CSS/HTML reference, but most of that info is available online.

    Good online reference – http://w3schools.com/

    Client side sucks web dev, unless you choose a sandbox like Flash or Silverlight or NaCl — but that one’s not ready for primetime yet. Every browser does things different, and subtle bugs are plentiful. Not to mention that many antivirus programs can bring client-side browser performance to a crawl with the way they hook into everything. McAfee is practically a rootkit.

  38. Wow! Web Development…

    Unfortunately (as some have pointed out) compatibility issues is way higher, if you thought sitting down with Raymond Chen and talking about Windows compatibility was bad enough *laughs* then try doing the same with an oldschool web developer.

    My advise regardless which books/tutorials/reference sites you use is the following:

    Browser Neutral

    By that I mean, do not try to use hacks or some way to distinguish between browsers.

    So with Javascript the proper way is to check if a javascript function is NULL or not. If it exists cool, if not then either do not use it or do it some other way.

    Not unlike how Windows WIN32 API suggests checking if a dll and the function you need actually exists instead of blindly assuming or checking Windows versions.

    When it comes to HTML and CSS it’s a tad different, just make sure to let things gracefully fall back, and again avoid any and all browser specific hacks.

    And test on IE,Firefox,Opera,Chrome as that should cover the 4 major browser engines (Safari and Chrome both use Webkit)

    You mentioned HTML+CSS+Javascript

    Personally I’d suggest Apache+MySQL+PHP+HTML+CSS+Javascript as that would cover the bulk of websites out there.

    The support sites for Apache, MySql and PHP has great online reference manuals, and I use the PHP online manual a lot and the user comments can be a gold mine.

    As to HTML, CSS and Javascript, the W3 site, and some of the links folks posted above.

    Oh and you might want to just focus on HTML5 from the start,

    just use a <!doctype html> at the start and that’s it, HTML5, most of the HTML4 stuff works fine.

    And Google (or Bing if you prefer that) is always a lifesaver,

    I’ve lost count of the times I needed to figure out to do a certain thing and found the answer within the first few links.

    Search Google or Bing for: html 5 for beginners

    Other things to search for are:

    html best practices

    html usability

    …and so on.

    You’ll quickly find some of the older and more popular sites.

    Oh yeah, and something vital. Do not use something like Frontpage etc.

    Use a syntax highlighting text editor instead.

    Personally I’ve used PSPAD for years http://www.pspad.com/

    But there are many others out there free or otherwise, and you might want to look at the Microsoft portfolio I think there is at least one product there that does syntax highlighting of HTML, CSS, Javascript and PHP etc, just make sure it’s one that is updated now and again.

    Some more links:

    http://www.w3schools.com/html5/html5_reference.asp

    http://www.quirksmode.org/

    http://html5doctor.com/

    http://www.csszengarden.com/

    http://validator.w3.org/

    http://jigsaw.w3.org/css-validator/

    http://wiki.whatwg.org/wiki/Implementations_in_Web_browsers

    So, see ya again in ten years Larry? *laughs*

    The best way is just to "get started".

    Considering your one of "the" audio guys,

    why not make a audio related "site" at least you shouldn’t lack any content, letting you focus on the design and functionality instead.

    Doesn’t matter if you never make it public on the net,

    but maybe you could make it available on the internal "pub" net?

    Or simply keep it on your own machine, doesn’t matter as long as you make it.

    A project helps you work towards a goal.

    Otherwise it’ll all be just a jumble of "stuff" you’ll have no use for.

    A small audio related website using HTML5, CSS2+, and Javascript to enhance functionality, and if a template based site is wanted and database storage then I’d suggest PHP5 (alternatively ASP or Python), MySQL (alternatively SQLite or Microsoft SQL), and Apache2 (alternatively MicroSoft Server/IIS(!))

    Might be wise to head over to wikipedia and compare the various alternatives of serverside scripting language, database backends and page server.

    And I apologize if I ended up confusing you even further. *smiles*

    You got one thing working for you though…

    You know programming, which means you’re halfway there already.

  39. Oh and I forgot to mention something in my comment above…

    "View Source" is vital, and there is no better way to learn how to do something by using the No1 source on web design, the web itself. *grin*

    A lot of times when I surf I sometimes do a View Source, being curious how this or that is done, even though I’m looking up something completely different.

    And make sure you got a bookmark subfolder (or several) on standby because you’ll accumulate a lot more links to not just "guides" or reference sites but also sites which have a look or functionality that makes you go "Damn that’s nice/cool, I wanna try that too".

  40. Andreas says:

    As a C++ programmer in the embedded world I sometimes feel the same way. Much of my time is spent on writing low level drivers and protocols, none of it looks sexy on a resume. Where I live (in Sweden) no one is looking for down-to-the-metal C++ programmers. Not that I currently want to work somewhere else, but it’s just nice to have some options open at times like these…

  41. Leif says:

    I learned it twice ! First I wrote a CGI app to query and display a DB I’d created for a client – they’d never had time to do it themselves so I just decided to do it for them, on the basis that "I’ve never done this before" means it wont be pretty and will take longer – about a week later I had something thats still running today (6 years later!!). That was enough to teach me the basics of HTML and request/response processing. I think I read one HTML book and enough of the Apache and perl HTML::Template and CGI::App doco to cobble a solution together (those were recommended by a collegue). There was no CSS, no javascript, just a bit of code running on the web server firing off queries to the DB and pushing the resultant rows through the html templates.

    Second time round I picked up a copy of "Agile Web Development with Rails" cheap off eBay, read it and went from there – it taught me a much better way of structuring my web apps, how to prototype and test, and where the other technologies (css, javascript) can be hooked in. I didnt know Ruby when I started, but its pretty easy. There are a lot of MVC webapp frameworks out there, but Rails is very very easy to get going.

    I still havent read any more HTML books, I’ve read "CSS: The Missing Manual" which is truly excellent. I did one chapter a night, making sure to actually do the tut’s at the end of each chapter, in 2 weeks I was done. I’m no master, but I know what is possible.

    Javascript is my current topic, I’ve watched all of Doug Crockford’s google video’s, and I’m currently working through "Learning Javascript", and I hope to get through jQuery and prototype and script.ac.ulous by the end of Feb

    My best advice is to actually try to build a site – I’ve built a site for managing massage appointments at a day spa, with a sideline in oils and candles – its not for a real business, but it emulates solving a real-world project. Now I’m doing an e-magazine for festivals and fairs – again, not a real business, but something a business could need. Trying to approach doing a "professional job" without the headache of a professional deadline. Works for me. Blogs and photo sites are boring, thinking of a business and trying to create an online presence require thought and creativity.

  42. Geoff Bailey says:

    I know this is somewhat late, but I didn’t see it recommended above.  The book "Head First HTML with CSS and XHTML" — http://oreilly.com/catalog/9780596101978 — is purportedly quite a good way to dive into things.  There’s also a "Head First JavaScript" — http://oreilly.com/catalog/9780596527747 — that may be useful after working through that book.