
Nowadays many people call themselves PHP programmers / web developers as soon as they know a bit of Frontpage or using Dreamweaver to generate the code for them. But are they really good web developers? Here's my top 10 characteristics of good web developers, feel free to comment.
1. Ability to hand code
Instead of using an IDE where it justs generate a bunch of lines which you don't understand, why you don't fire up a text editor such as VI, Emacs, Notepad or Notepad++ if you prefer and start coding right away? There are many advantages of hand coding HTML.
I currently use Eclipse PDT as IDE
2. Ability to produce valid HTML.
The W3C has an online tool which checks whether the HTML code you write is valid or not and there's a debate whether your code must valid or not. IMHO they must be and that's why :
3. Use Linux as operating system
Why on earth a web developer doesn't use Linux? It's free, comes with bunch of applications, you know the internals, you compile from source, you experiment things and most important, you're more productive. An example, I must edit a file on server A.
On Windows :
Launch WinSCP -> connect to server A -> retrieve file -> edit file -> save -> upload -> ask for confirmation -> wait upload finish
On Linux:
Launch console -> SSH on server A -> open file in VI for editing -> save
Enough said
I currently use Kubuntu (Hardy Heron)
4. Templating
Have you heard of spaghetti code? If not, it's mixing PHP code with HTML code. For example :
<body> <?php echo 'hi'; ?> </body>
This results in nightmare maintenance, a mess of code. Both designer and web developer work in the same file which is a bad mixture of logic and presentation. Fortunately there are templating engines which separate these two things.

The most popular one being Smarty which I currently use. Have the crash course if you haven't already.
5. Database abstraction layer
Your scripts must be database independent, i.e. if tomorrow your boss decides to throw all MySQL away and replace them by PostgreSQL, you don't have to write the scripts all again replacing all MySQL functions by PostgreSQL one. Also, you just have to learn a single API.
I use PEAR MDB2 as DB abstraction library.
6. JS framework
Javascript is everywhere nowadays together with the AJAX buzz word. Good web developers must have an overview of all the js frameworks available and choose the best one for his task. Popular frameworks include the YUI library, Prototype, jQuery, MooTools, Dojo Toolkit and Ext JS to name just a few.
I prefer YUI library (lots of documentation and exciting future)
7. Caching
Why retrieving the same information from the database again and again whereas you can cache the output to files or in memory. This will reduce the load on your database server. If you use the Smarty templating engine you can use cache groups . Another popular technique is by using Memcache, for high volume websites.
At work I use the Smarty caching system and a little bit of Memcache (for the taste ;-)), and my database load reduced by more than 70%.
8. Must have Firefox extensions : Firebug, web developer toolbar, YSlow

These great firefox extensions will help you greatly whether to debug some javascript, fix some CSS issues, increase your site performance. These are must-have for web developers, all three of them.
9. Keep reading
Keep reading reading and reading. Find popular programming posts on Digg, del.icio.us and read great magazines like Smashing Magazine, blogs like the YUI blog. Don't forget to participate actively in forums and ask questions.
I don't know why it's like that but I like del.icio.us popular section more interesting and everyday I find lots of interesting stuff via this page.
10. Look around you

Don't focus only on PHP. It's OK but have a look around you, there are fantastic things happening, like RoR, Python ![]()
A web developer who hasn't heard of RoR is NOT a good web developer.
Good list. Still I think couple of things are missing:
1. Version control. I don’t use it myself much
so I can be a better programmer.
2. Write good documentation for your code.
3. Write test-cases for your code.
4. Learn XML, JSON etc.
5. Learn to use APIs. See programmableweb.com/apis.
6. Write APIs (REST / SOAP) yourself.
7. Use a framework like Codeignitor / CakePHP / Zend.
Some thoughts:
1. Not very convincing to preach about the virtues of hand-cranking HTML in vi and how IDEs are automagic tools of doom and then say you use one? There’s a whole heap of difference between an Integrated Development Environment and a WYSIWYG code generator like those found in HotDog and Dreamweaver.
3. Its all very well saying that linux is a good development environment - and don’t get me wrong it is - but when you consider the number of web users that have M$IE/Win outweighs that of any other browser you might want to consider using a windows platform to make testing of your webapp easier.
Also just because you don’t know a better way than copying files to and from your machines doesn’t mean you can’t do on windows what you do on linux. Remote file editing is more than possible on windows just as it is on linux.
4. Spaghetti code is not the term you are looking for. Spaghetti code refers generally to overly complex code flows, classically found in Basic where excessive use of GOTO is found.
And the example you give is wrong - sorry. Its fine to put that type of PHP in your presentation layer, its WRONG to put and business logic there tho. The Smarty templating engine does little except replace a particular format of key-string in the tpl file for one you’ve already put in the key-value map. String replacement can be very expensive sometimes, its not a panacea to removing all tags in your presentation layer its an alternative.
I agree very much with the comments Alfred made, although I’d like to be pedantic there too and suggest that point 6 should be “Implement REST/SOAP APIs yourself”, i.e if you have a blog you’d have URLs like blog/delete?id=xxx, blog/update?… etc. This allows you to bolt on further functionality which can call back in to your application using a web services like interface.
Sorry if this came across as a bit harsh, didn’t mean it to be quite so. I do enjoy your blog but sometimes feel you don’t qualify or explain enough of some of the things you post.