我願意把本文歸入我的“編程糗事”系列。盡管在正規大學課程中,接觸到軟件工程、企業級軟件架構和數據庫設計,但我還是時不時地體會到下述事實帶給我的“罪惡”感,當然,都是我的主觀感受,並且面向Eclipse:
你是PHP菜鳥,如果你:
1. 不會利用如phpDoc這樣的工具來恰當地注釋你的代碼
2. 對優秀的集成開發環境如Zend Studio或Eclipse PDT視而不見
3. 從未用過任何形式的版本控制系統,如Subclipse
4. 不采用某種編碼與命名標准,以及通用約定,不能在項目開發周期裡貫徹落實
5. 不使用統一開發方式
6. 不轉換(或)也不驗證某些輸入或SQL查詢串(譯注:參考PHP相關函數)
7. 不在編碼之前徹底規劃你的程序
8. 不使用測試驅動開發
9. 不在錯誤開啟狀態下進行編碼和測試(譯注:參考PHP函數error_reporting)
10. 對調試器的好處視而不見
11. 不重構你的代碼
12. 不使用類似MVC模式把程序的不同層次劃分開
13. 不知道這些概念:KISS, DRY, MVC, OOP, REST
14. 不用return而是直接在你的函數或類中輸出(echo/print)內容
15. 對單元測試或通用測試的優點視而不見
16. 總是返回硬編碼的HTML,卻不返回純粹的數據,字符串,或對象
17. 總是對“消息”和“配置參數”進行硬編碼
18. 不對SQL查詢語句做優化
19. 不使用__autoload(譯注:參考PHP手冊相關描述)
20. 不允許智能錯誤處理(譯注:參考PEAR的ErrorStack)
21. 使用$_GET替代$_POST來做具有破壞性的傳遞操作
22. 不知道怎麼利用正則表達式
23. 從未聽說過SQL注入或跨站腳本
24. 不允許簡易配置,也不允許類的構造函數接受參數傳遞而後執行set/get方法,或運行時的常量定義
25. 不理解面向對象編程(OOP)的優勢和劣勢
26. 不視情形大小而濫用OOP
27. 自認為實現可復用的軟件一定等於/需要讓你的代碼遵循OOP
28. 不利用智能缺省值
29. 沒有單一的配置文件
30. 不想暴露文件源碼,卻用.inc後綴名取代了.php
31. 不使用數據庫抽象層
32. 不能保持DRY作風,即不重復自己,如果你總是在復制粘貼一些東西,說明你設計得很差勁
33. 沒有實現讓一個函數/類/方法只做一件事,也不能組合利用它們
34. 沒能嘗試OOP的特長,如抽象類、接口、多態、繼承,訪問控制修飾符(譯注:如public, private, protected)
35. 不用現有的設計模式優化你的程序體系設計
36. 不允許你的用戶在你擁有很多文件或目錄的情況下定義基礎目錄
37. 污染了名稱空間,比如用常見字符串命名你的庫函數
38. 使用數據庫表時不使用表前綴
39. 不使用統一的模板引擎
40. 不關注已有的PHP開發框架,懶於探索;其實先進的開發理念和美妙代碼就蘊含其中。
譯注:另有馬永占翻譯版本《PHP程序員的40點陋習》,簡潔並配有譯者注釋。