A friend got in touch recently to ask for help on making a career change into web development. They were involved in technology some fifteen years ago—more than me in a lot of ways—but appreciated that things had changed almost beyond recognition, so they would at least need to upskill and were worrying if they should concentrate on retraining and getting an academic qualification. In effect, they were giving themselves maybe twelve months of spare time to become at least savvy enough for an entry-level job in the industry, and wanted to know if I could advise them.
I didn't initially see how I could possibly help them. After all, in terms of web development I'm almost completely self-taught, and a lot of that has been through processes of osmosis and curiosity rather than through any particular grand plan. Also, my career has been one of sideways motion first—DPhil student to LATEX compositor to journals e-publisher to web and CMS developer—and any upwards motion very much later, so it's not as though there was a clear path set down from the start that I could advise on.
In a flash, an idea came to me: if I were reconstructing myself as a web developer—all over again, but this time doing it systematically and with a timetable like twelve months in mind—how would I go about that? How might I build myself, all over again, in the space of twelve months? That's not to say that I'm a perfect developer, by any stretch of the imagination; but I'm a developer of a sort I recognize from the inside out, so it might help me offer advice more coherently. Anyway, I started writing... and writing... and writing.
When I finished, I had a lot of ideas, but I hoped that they weren't too prescriptive.I wanted it to be more flexible than edicts of "do it my way": my friend could pick and choose what they liked, and almost any result might be of more value than that of the effort put in. Much later, it's occurred to me that this list might be useful to (or at least worthy of comments by) other people. So if you're not sure how to get into the industry, or if you need a different perspective on it, then have a look at the notes below and see if any of it helps you.
- READ: Hacker News is a reasonable starting point these days. Make it your homepage if you've no better suggestions. It's like the Digg bit of Y Combinator: HN is what happens when geeks meet venture capitalists meet project managers, in a shared discussion space. That sounds like it could be a disaster, but it helps to surface a lot of blog writing where VCs think about tech and geeks think about scratching other people's itches. There's sometimes talk in the comments about programming careers and the industry, and the list of news items tends to bring to the surface lots of new technology and even people's work in progress (more illuminating, as you learn about e.g. how people do hosting these days, or deployment.)
- READ: Stack Overflow. It's probably the future of online documentation and problem-solving. Consider getting involved and helping out with replies.
- READ: Wired, Techcrunch, 37signals, UXMovement, Coding Horror, Diveintomark. Avoid: Slashdot and The Register; these days they're repositories of of churnalism, contrariness, well-actually and tinfoil hats.
- ATTEND: any local meetups for techies you can find. I run the Oxford Geek Nights. These things get organised in the weirdest places, though, so you might find one near you. Check on Upcoming and Lanyrd.
- ATTEND: OpenTech 2011. It's cheap as chips—a fiver for entry—and you get to peek at lots of not-for-profit and similarly exciting projects. Interesting 2011; maybe Future Of Web Apps if you can afford it. The last one gets a bit speculative at times, but they're all weathervanes for the industry and what's, well, interesting.
- FIND: an itch to scratch. Once you've begun to dip into the industry, you've really got to have something you want to do to keep going. Unless you're really able to go through book after book, just doing the exercises. (Besides, a lot of the following is quite hard to find in books.) Something you're currently having to do that's really repetitive, that a simple website or program could help you with. Maybe you could build a "single-serving" site like caniturniton.com, for you to be able to check on your phone when you're out and about. Have something in mind that you will actively want to play with and it'll keep you involved.
- RESEARCH: about how things like the cloud work. EC2, S3. Alternatives from e.g. Rackspace. VM hosting from e.g. Bytemark. Google App Engine. All their APIs: at least know that they exist. Look at new technologies. PHP is still going strong but for security development REALLY needs to happen within a framework. Ruby (on Rails) and Python (Django) are "sexy" and they work. Look at the MVC-ness of these new frameworks. Get a feel for why they're like that. Have a look at AOP (kind of event driven programming) and other non-MVC paradigms. CMSes are freeware these days: Drupal and Joomla are robust products capable of much complexity; Wordpress simpler but more popular. Know that they're out there and what sort of stuff they can do. MySQL still powers the web, but look at NoSQL alternatives like CouchDB if you get a chance.
- RESEARCH: Dive into HTML5 is a great resource for information about the new generation of web standards. CSS3 is going crazy, with a whole demoscene of pointless, Flash-less content; it'll settle down soon but it's all still exciting. Javascript, along with jQuery, is finally a respectable programming language. VCS has turned into DVCS, with the onset of git and mercurial. Use one of these for your own projects as a rule: I like git, but pick whichever. There are great, free online references for all of this especially the Pro Git book.
- JOIN: Twitter, Delicious (despite the fact that it might not be around forever), LinkedIn, Github, maybe Bitbucket. Use Delicious extensively: look ahead to paid alternatives like Pinboard; pipe specific tags (e.g. "fortwitter") to your Twitter account using Twitterfeed. Do the same with LinkedIn, but don't have services automatically retweeting; consider what your audience wants. Get yourself a presence online in a way you might find slightly aggressive at first, as you've got a lot of ground to cover quickly.
- PLAY: Find a language you like and start to play with it. My personal favourite is Python, even though I do mostly PHP these days. Python is OO, but has a very loose feel to it (google for "duck typing") and, on top of a nice syntax and style, it employs concepts of code aesthetics rather than strict right or wrong choices.
- BUILD: Write lots of code. Lots and lots. Wonder how things work in a language. Try example coding. Fork someone else's project on github and tinker with it. There's so much code out there for free these days that you should be able to find something to play with.
- POLISH: pick some of these recommendations off Stack Overflow and consider reading them. I'd say The Pragmatic Programmer and Mythical Man Month are good "cultural" tomes. Others are up to you. I'd recommend my book, but in all honesty diveintopython.org blows everyone else's writing on the subject out of the water. If you've still got some spare time, read the wikipedia entries on principles like Agile, XP, Scrum, Kanban etc. so you can work in those environments if you're asked to.
Not all of this will be of use to everyone; some of it might even be of use to no-one; but I wanted to put it out there for other people to see, should it help them in any small way. And while I'm not interested in holy wars particularly: "is Slashdot not still worth reading these days?" for example. Instead, I'd love to know how you personally would rebuild your career persona from scratch, given twelve months.
Why not blog about how you might go about rebuilding yourself over a year, and post a link in the comments?