工作幾個月之後我開始想:
大家都希望工作經驗越久、薪水越高,憑什麼?
年紀越大,實力一定越強嗎?
所以我比上個月強?我比昨天強?
到底強在哪?難道只能空泛的回答:我經驗更豐富了。
於是我就開始筆記,明確的記下來,為什麼我每天都比前一天強。
寫到今天約莫三個月了,決定打成「軟體篇」、「管理篇」兩篇文章。
跟各位分享這本流水帳。
2月12號
* 第一次用別張table的id當主鍵,以前都是新建一個id欄位當主鍵
* 第一次使用CodeIgniter內建的Test library
* 應用了Jamie Rumbelow的MY_Model跟它的relationship功能
* 我終於知道怎麼寫單元測試了!
* 第一次應用Mock up的技巧
* 第一次把dependency injection應用在舊的model
2月13號
* 替每個web app在server上建一個帳號有好處。改root密碼時就不用全部shut down了。
* 單元測試真不錯。你替model加新功能,接著加新test,然後你可以確定全部功能運作正常
* 學會怎麼用JavaScript驗證input是整數來達到不錯的User Experience。
* 很流暢的完成的一段複雜的交易系統。
* 在需要同時開發新功能、修bug、更新美工的情況下,用git的branch做了良好的管理。
2月14號
* 操你媽的Bitbucket居然會掛站。所以我學會如何在windows上用AppServ, WINSCP, GitShell, Putty, LinuxReader達到類似Linux的開發環境了。
* 媽的PHP居然病毒般吃光我Linux資源。所以我學會recovery 模式、top還有kill指令了。
2月19號
* 在前一份php檔定義常數可以防止異常使用當前的php檔欸
* 知道php的singleton函式怎麼寫了
2月20號
* 實作一個簡易log系統
* 學會jeditable,還有一點小hack
* Restful的定義多理解了一些。
3月3號
* 原來瀏覽器在submit表單只支援GET跟POST
* 知道怎麼流暢處理exceptions或是errors了
* 自創一套方法,在model內應用validation library。(別人都在controller內用,我覺得醜死了。)
* 知道怎麼用salt跟hash更安全的處理密碼資料。
* 媽的用salt下去hash,丟失salt之後為什麼還是可以驗證?上一個工程師到底在寫殺小?
3月5號
* catch住exception,可以顯示錯誤訊息然後再丟出去。這樣不錯。
* 學到了第三方套件Mandrill還有它的設計架構。
3月6號
* 學會怎麼用phpmail透過gmail發信了
* 實作了「忘記密碼」的程序
3月8號
* 他媽的,mysql的float居然連1.3或1.4都存不好,幹。
* php有array_unique跟unset這兩個函式欸。糙,這語言真的沒什麼品味。
* 將simpletest導入CodeIgniter並且準備使用它了。
* 今天又碰了一次spark
3月10號
* 這輩子第一次去看Apache的server log來debug!
3月14號
* 理解到controller應該幾乎什麼都不做,但model也不能太大。所有class都應該要小!用library吧,不要出現God Pattern,不要出現mixin(商業邏輯與呈現混在一起)。每個class專注在一件事上!
3月17號
* 知道如何用table將email內容置中
3月21號
* 學會migration了
3月22號
* 會用simpletest了
* 更了解Test Driven Development
4月3號
* 更懂abstract class是什麼了。(誰要是繼承我,就必須提供這些函式)
* 在Github上開了我生涯第一個issue
4月9號
* 客製化Exception有兩種:傳入code或直接繼承它
這樣理解它:
用code就是狂欠技術債(一堆沒整理的數字),但幾乎沒利息要還
用繼承的方式就是資產,但開發比較慢
4月10號
* 理解前輩的log library在寫什麼了
* 理解PHP set_error_handler跟set_exception_handler,還有CI如何組織它們了
4月18號
* 知道了CI, FuelPHP, Kohana, Laravel的歷史背景了
4月23號
* 原來上傳檔案會被PHP暫存在tmp資料夾,程式跑完會自動刪掉。
* 而實作上傳功能只是把它從tmp移出去而已。
5月2號
* 第一次接觸Angular.js。酷斃了。但它好像很自成一套,而且跟jQuery不相容。
* 我發現我的JavaScript還是寫成procedural programming,並不是OOP或是functional programming!
(Photo via Brady Withers, CC license)