我願意把本文歸入我的“編程糗事”系列。儘管在正規大學課程中,接觸到軟體工程、企業級軟體架構和資料庫設計,但我還是時不時地體會到下述事實帶給我的“罪惡”感,當然,都是我的主觀感受,並且面向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. 不知道怎麼利用Regex
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點陋習》,簡潔並配有譯者注釋。