Cookbook to become a great web developer!
In this post, I’ll offer my opinion on what you should do in order to become a great web developer. Throughout my career, I've read lots of books on the subject; some were interesting, others were boring. Here’s my list of important factors.
Too often, I meet some web developers who are unaware of how data are exchanged between browsers and web servers. Having a basic knowledge of TCP/IP, DNS and HTTP can help you a lot in your day to day work. I don’t mean to say that need to master the RFC by heart, but reading some Wikipedia articles will help you a lot.
TCP : http://en.wikipedia.org/wiki/Transmission_Control_Protocol
IP: http://en.wikipedia.org/wiki/Internet_Protocol
DNS: http://en.wikipedia.org/wiki/Domain_Name_System
For HTTP, I recommend you read "HTTP The definitive guide". Here is the cover:
Bonus: the internet's undersea world
2. Stop talking, start working
Sure, technical skills are important for a web developer but, in my opinion, what really matters (especially for startups) is the attitude. Of course, I am not asking you to change the way you are, I am just asking you to change the way your work. Here are some precious motos: "Planning is guessing", "pick a fight", "keep it simple", "meetings are toxic",... These mottos come from two amazing books, Rework and Getting Real. Rework has literately change my life at work and I am sure you won't be the same after reading it (by the way if you want know more about Jason Fried and David Heinemeier Hansson, visit the 37 signals against noise blog).
NOTE: another book that changed my work life was "the mythical man month", an essay on software engineering written in 1975 which is always releveant and applies as much today as it did back then.
You cannot develop any more without mastering object oriented programming. If you are very new to this, I recommend the HeadFirst book. After 1 or 2 years of practice, you can go a step further and read a book about design patterns (what's a design pattern?). The original book on that subject is a great one but it's written by nerds for nerds (the gang of four). I suggest reading the headfirst book before reading the original one.
By the way, use design patterns with caution. If you have read Rework, you should know that over-design is something you should avoid. Design patterns appear often after the most important task in software development; refactoring. My favorite book about refactoring is an old book written by the famous Martin Fowler called "Refactoring". Sure it's note a fancy book title, but it will help you a lot in your day to day work.
Reading is great but you cannot create amazing applications without coding. If you are new to web development, you may be asking yourself (or others) "Which programming language should I learn?”
- First, master HTML(5), CSS(3), it will be your day to day coding language. In the early day of your practice, coding in HTML and CSS will appear very simple, but, suddenly someone arrives at your desk and asks “Oh wait, did you test these pages on I.E?". It’s at this point that your troubles begin. If you work with smart people, they will send you this great link: http://dowebsitesneedtobeexperiencedexactlythesameineverybrowser.com . I also found a great quote from Paul Irish's blog "each browser gets an experience that is customized to that browsers's capabilities.". Finding the best experience for each browser is what makes HTML/CSS so hard.
I don’t have any book to recommend for HTML, w3c school will be your best friend for the begining and http://html5boilerplate.com/ later. You can also find several websites with css resources (here is an example:http://www.smashingmagazine.com/mastering-css-principles-comprehensive-reference-guide/).
- JavaScript, THE ubiquitous language for web developer. For a long time, JavaScript was denigrated by software developers. In the recent years, with the emergence of the Internet, the use of Ajax, and the help of great javascript frameworks (Jquery, mootools and prototype), javascript has become a programming language appreciated by all web developers. The Javascript community continues to grow rapidly, most notably with the emergence of node.js which allows you to execute JavaScript on the server-side. Now, more than ever, javascript is the language of web innovation. O'reilly, as usual, has great books about javascript, the definitive guide andjavascript the good part.
- Backend coding. Sure you read some tutorials on node.js, but you still need to learn a "backend" programming language. The choice will be hard: PHP, Ruby, Python, Perl, Java, .NET? Which one to learn first? I cannot answer this question for you, you need to read and pick one. I chose C# with ASP.NET (now ASP.NET MVC), why? Because my first web application was written in C#, I had senior developers around me to explain how and what to do, so it was easier for me to gain experience and confidence with it. During university I learned C++ and php (by myself). I haven’t directly used any C++ in my career in web but I believe that if you follow step 4 of this post, you should not have much difficulty switching from one language to another. All languages have their pros and cons. Oh wait, I didn’t mention Java ? Does it matter?
Testing is as important as coding. I’m not talking about testing your app in a browser, I am talking about automated testing.
For example, if a problem in the requirements is found only post-release, then it would cost 10–100 times more to fix than if it had already been found by the requirements review. “Wikipedia - Software Testing”
Bugs in production are time consuming and irritate users. Granted, it’s almost impossible to test everything, especially in web, but having code coverage of 70% will certainly prevent you from creating "broken code". There are a lot of libraries and books on the subject of unit testing. I personally use Nunit in C# and Qunit in Javascript but there are maybe other great choices.
A must read about unit testing:
5. Do not reinvent the wheel
I have a personal good tip for not reinventing the wheel, when I spent more than 30 minutes writing something which contains a namespace like "tools", "utilities", I am certainly coding something which almost exists somewhere in the web. There are so many API’s and libraries available on the web, do not rewrite one, contribute! Need a Javascript Framework? Jquery is there, need an mvc framework for Javascript? Backbone.js, spine.js,... New to node.js ? Express, socket.io... An HTML5 template? html5 boiler plate,...
You need to focus on your app (your domain) not on rewriting tools.
However, if you are specifically interested in API development, go to github and fork some repositories. Open Source projects are always on demand for motivated coders.
6. How dev team are working ?
If you want to develop great projects, you need teammates. Development methodologies are important when workings as a team. I am not saying that you should learn all aspect of agile development but knowing some basis like "User stories" and scrum will help you to integrate into a development team. There are a lot of great web applications to help manage your team work. Pivotal Tracker, Basecamp, Campfire, Githhub, are all tools will improve communications and knowledge among the team. Having a great setup for your team will certainly help you to produce more beautiful code for your app.
Fortunately or not, web technologies are always evolving, so you always need to keep on top of new developments in the field. If you are not passionate about the web and learning, do us all a favour and quit now.
Some useful industry-relevant news sites are Techcrunch, the next web, ReadwriteWeb, Mashable,... The answers to your coding questions can usually be found at stackoverflow and quora. Exploring github and all these fabulous repositories will help you to find great APIs and great demos. You can also follow “famous” developers on Twitter and buy some screencasts from Peepcode. Keeping up-to-date is a never-ending task that separates the passionate from the mediocre.
PS: special thank to Alex-Ziliko :)