Passing through PHPDevelopers.org, I found this worth to read article of how lousy a PHP coder standing out of the project team. The second sign is not very correct as sometimes I just need a Notepad or gedit or VIM but it is from Reinhold blog, I keep them all intact.

By Reinhold Weber

This is something I prefer to call my “programming list of shame”. Although having a formal university education with courses on software engineering, enterprise software architecture & database design I have been guilty of every single one of those things at one time or another. This is completely subjective & Eclipse oriented
You are a lousy PHP programmer if you

  1. don’t comment your code properly with something like phpDoc
  2. don’t see the need and/or benefits of a good programming IDE like Zend Studio or Eclipse PDT
  3. have never used some form of version control like Subclipse
  4. don’t adopt some coding & naming standards and general conventions and stick to to them at least throughout the project
  5. don’t use a consistent methodology
  6. don’t escape and/or validate properly input or sql queries
  7. don’t plan your application thoroughly before starting to code
  8. don’t use test-driven development
  9. don’t program & test with error reporting on
  10. don’t see the benefits of a debugger
  11. don’t refactor your code
  12. don’t keep the different layers seperated using something like MVC
  13. don’t know what these stand for: KISS, DRY, MVC, OOP, REST
  14. don’t return content but echo or print it from your functions or classes
  15. have never seen the advantage of unit tests or testing in general
  16. return HTML, not data, strings, or objects.
  17. hard code messages and configuration parameters
  18. don’t optimize your sql queries
  19. don’t use __autoload
  20. don’t allow intelligent error handling
  21. use $_GET instead of $_POST for any destructive actions
  22. don’t know how to use regular expressions
  23. you’ve never heard of sql injection or cross-site scripting
  24. don’t allow simple configuration, can be parameters passed to a class’s constructor, set/get methods called later, or constants defined at a runtime.
  25. don’t understand the benefits and limitations of Object Oriented Programming
  26. misuse OOP / everything you write , no matter how small is OOP
  27. you think reusable software equals/requires your code to be OOP
  28. don’t choose intelligent defaults
  29. don’t have one single configuration file
  30. don’t want the file contents to be seen, but give it a .inc extension instead of .php
  31. don’t use a database abstraction layer
  32. don’t keep it DRY, Don’t repeat yourself. If you have to copy and paste or duplicate something your design may be off.
  33. don’t make a function/class/method do just one thing and don’t make them interact.
  34. don’t try to take advantage of OOP specific features like abstract/interface classes, inheritage polymorphism & access modifiers.
  35. don’t optimize your application design with established design patterns
  36. don’t allow your user to define a base directory if you have multiple files and/or directories
  37. pollute the global namespace, one option is to prefix the functions in your library with a common string
  38. don’t allow a table prefix when using database tables
  39. use a separate template engine
  40. don’t take a look at established php frameworks for inspiration, most of them have advanced web dev concepts and good code