很少有程序員具備好的安全習慣。如果你對自己的數字安全很在意,你就會對你寫的代碼安全性更加關心。確保你在每個站點都使用了唯一的高安全係數密碼。使用加密的密碼管理器來管理你的密碼,例如 PasswordSafe 或者 KeePassX。如果你還沒有對整個磁盤加密,留出時間完成它。(在 Mac 上可以輕鬆完成)
每年都要研究過去 12 個月中前 10 位的安全漏洞。他們是如何發生的?在編程中需要怎麼做能夠避免在你的代碼中出現這些漏洞?
下面是另外一些你需要嘗試的安全任務:
- 在 Apache 中加入 SSL 驗證
- 使用RSA 或 AES 實現密碼系統
- 試着破譯你的無線網絡密碼
- 用 WireShark 偵聽你的網絡通訊
- 設置基於密鑰的無密碼 ssh 登錄
- 自己運行 nmap;配置你的防火牆
- 建立端口掃描
- 爲 USB 驅動器加密
- 監控日誌文件
- 設置 cron 任務定期更新你的程序
譯註:
nmap:linux 下的網絡掃描和嗅探工具包
每年花一些時間檢查你的備份策略。
花一個月時間將備份花費的時間減到最小。
使用基於雲的備份服務,比如 Mozy 和 Carbonite,很容易建立無縫自動備份。
更全面地防禦可以選擇爲每個人分發硬盤,對每臺電腦使用像 Time Machine 這樣的自動備份工具進行備份。
對重要文件使用異地遠程倉庫進行版本控制。
計算機科學有豐富的理論基礎。
瞭解最新進展的同時還要加強對經典開發理論的掌握。
每年在下列主題上花一個月時間:
- 形式語言
- 自動機與可計算性理論
- 計算複雜性理論
- 形式化方法
- 語義學
- 算法與數據結構
譯註:
形式語言:按一定規律構成的句子或符號串的有限或無限的集合。
自動機:是有線狀態機(FSM)的數學模型。
可計算性理論:研究計算的可行性和函數算法的理論。又稱算法理論。它是算法設計與分析的基礎,也是計算機科學的理論基礎。
計算複雜性理論:計算複雜性理論是理論計算機科學的分支學科,使用數學方法對計算中所需的各種資源的耗費作定量的分析,並研究各類問題之間在計算複雜程度上的相互關係和基本性質,是算法分析的理論基礎。
形式化方法:在邏輯科學中是指分析、研究思維形式結構的方法。
語義學:研究自然語言中詞語意義的學科。也可以指對邏輯形式系統中符號解釋的研究。
對於剛起步的程序員,可以先看一看下列文章:
- 用 Haskell編寫 CEK風格的解析器(或語義分析器)
- 通過推導進行語法解析
- 遺失的方法:如何對 Okasaki的紅黑樹執行刪除
- 通過推導使用 Scheme進行正則表達式模式匹配
- 將鄭則表示轉換成非確定性自動機(NFA)
譯註:
CEK:CEK 機器是由 Matthias Felleisen 和 Dan Friedman 開發的λ-演算的力學模型。
Haskell:一種純函數式編程語言,以美國數學家 Haskell Brooks Curry 命名。
工程師往往輕視藝術。他們沒有意識到藝術和人文是基礎昇華的重要因素。史蒂夫·喬布斯樂於指出將技術與人文結合的重要性,事實也卻是如此。
藝術和設計原則同樣適用於人和計算機之間的交互。不要忽視這些原則。藝術和人文的訓練讓直覺更加敏銳,而這方面的練習是難以用數字來計量。工程師需要知道如何衡量那些他們不能計量的事物,而不是隻是統計他們可以計量的內容。
每年至少有一個月學習下面列出的主題:
- 工業設計
- 哲學
- 攝影
- 繪畫
- 素描
- 音樂及音樂理論
- 電影
- 文學
社會科學同樣會對計算機科學家有很大幫助,尤其是經濟學和哲學。
一個爲自己的軟件尋找靈感的好辦法就是向新的或新型應用程序學習。例如,如果你從來沒有嘗試過 3D 建模軟件,可以嘗試Blender。抑或是,如果你從來沒有接觸過 LaTeX,請真誠地試着去了解它。
在學習過程中,請注意你喜歡什麼和討厭什麼。真誠地問自己,這些觀察到的內容是否在你的軟件中存在。在工作中很難看到自己的缺點,但發現別人的不足卻很容易。天下沒有哪個父母認爲自己的孩子長得難看。請學習看到自己作品的不足。
如果你整天爲別人寫代碼,那麼爲自己寫程序能讓你記得當初爲什麼會成爲程序員。每年爲自己選擇的項目分配一個月的時間,完成核心功能,將其開源發佈。