摘要:對程式員們來說挑戰自我非常重要,要麼不斷創新,要麼技術停滞不前。新年伊始,我整理了12個月的目标,每個目标都是對技術或個人能力的挑戰,而且可以年複一年循環使用。
對程式員們來說挑戰自我非常重要,要麼不斷創新,要麼技術停滞不前。新年伊始,我整理了12個月的目标,每個目标都是對技術或個人能力的挑戰,而且可以年複一年循環使用。
01. 變得有耐心
02. 保持健康
03. 擁抱變化帶來的不适應
04. 學習一門新的程式設計語言
05. 自動化
06. 學習更多數學知識
07. 關注安全
08. 備份你的資料
09. 學習更多理論知識
10. 接觸藝術和人文
11. 向新的軟體學習
12. 完成一個自己的項目
接下來我會對這些建議逐個介紹。
變得有耐心
程式員們會擔心鍛煉耐心付出的努力得不到應有的回報。其實,培養耐心隻要付出很小的投入就能夠得到相對而言很大的收獲。下面是開始鍛煉耐心可以嘗試的一個清單,隻要全身心投入其中任意一項,都可以在一個月左右脫離門外漢(成為有經驗的新手)的階段:
烹饪、徒步、滑雪、天文、慢跑、木工、國術、舞蹈
保持健康
程式員通常久坐少動,是以在日常工作中會面臨健康問題,但通常都被我們忽略了。一年中花整整一個月來調整你的生活習慣、飲食和生活環境,這會促使你養成持久、健康的生活習慣。每年去一趟診所檢查血壓、膽固醇和血糖,看看這些名額最近有什麼變化。如果你的手腕開始疼痛或者已經疼了很久,馬上停掉手上的工作開始與“滑鼠手”(重複性勞損)作戰。注意你的坐姿,尤其是肩膀和脖子。我使用了矯姿器來幫助治療。
跟蹤你的體重、攝入以及燃燒的卡路裡。如果有必要,可以改變生活方式以養成健康的飲食習慣和減肥。
擁抱變化帶來的不适
在我20剛出頭的時候,通過觀察身邊年紀稍大一些的夥伴我發現有些人停滞不前而另一些則活力充沛,我試着尋找背後的原因。答案就是舒适感。舒适會讓技術停滞不前。當找到一個能夠為我所用的系統時,我們會一直使用它。但技術是不斷進步的,而那些停留在舒适區的人永遠不會意識到這些進步能夠為他們帶來好處。不破不立,要讓自己适應不舒适的感覺。
下面列出的事情一開始可能會讓你感到不适應:
- 使用德沃夏克鍵盤
- 使用vim替代emacs,反之亦然
- 不使用滑鼠
- 使用不同的視窗管理器
- 喝清咖啡不加奶油和糖,或者喝清茶
- 嘗試一個月“流行且無聊的新事物”
- 一個星期中有一天不開手機
- 學習使用一種可以單手輸入的裝置
- 嘗試一個不同的作業系統
- 一個星期中有一天不上網
- 試着對飲食加以限制:嘗試吃素,成為純素食主義者,不吃乳制品,等等
- 每天吃一種你不喜歡的食物
- 将你習慣使用的胳膊用繃帶綁起來
- 學習用你不習慣的那隻手寫字
- 開一個部落格
- 參加公共演講
- 一個月聽一種你不喜歡的音樂
- 去醫院或退休家庭護理做志願者
- 一個星期有一天快生活
- 去一個與自己文化或語言不同的國家旅行
- 讀一篇廣受好評但卻不是你喜歡題材的小說
- 看一場廣受好評但卻不是你喜歡風格的電影或演出
- 學會用變速杆(手動)開車
- 反對你相信的一些事情
在一個月的嘗試之後,你可以決定是否繼續采用新方式,或者找到新方式中好的經驗與原有方式的結合點。例如,在我從使用了10年的emacs轉向vim時,我會為插入模式設定emacs風格快捷鍵進而繼續使用vim。
學習一門新的程式設計語言
程式設計語言起起落落。如果隻了解一門語言,程式員的解決問題能力以及職業前景都會是以受到限制。花上整整一個月時間吸收一門新語言或者一個新的程式設計範式,并用它寫一個小程式。
下面是一些可以學習但不是非常主流的程式設計語言:
Racket、 Haskell、Scala、Erlang、Clojure、SML/NJOCaml、Squeak、Prolog、Datalog.
如果你無所不知,那麼你可以實作一門新的程式設計語言。
自動化
程式員擁有最強大的待開發技能就是将虛拟和現實自動化的能力。如果你從來沒有造過一個機器人,那麼去做一個吧。至少學會使用Lego Mindstorms或者玩一玩 Arduino board。
檢查一下你每天的任務,看看其中有哪些可以完全或者部分自動化。自動化在家庭生活裡已經有了長足的進步,甚至可以像Insteon那樣對系統進行DIY。
投資一個月的時間來進行自動化:
- 調整你的郵箱過濾器或者設定procmail
- 為頻繁進行的工作編寫自動化shell腳本
- 編寫shell腳本幫助寫作
- 學會如何使用cron工具
- 改造櫥櫃燈由感應控制
- 盡可能地用無線替代有線
- 停止手動同步:将資訊存到雲端
- 安裝一個遠端控制音頻系統
- 通過你的伺服器控制家裡的空調
- 安裝數字監控攝像頭
- 安裝數字内部通話系統,兒童監控系統
- 讓咖啡機自動打開
- 為寵物安裝自動給水槽
- 為寵物安裝自動感應門
- 将Roomba改造成個人信使
譯注:
procmail:procmail軟體包包含一個自動的郵件管理器,可以很好的過濾和排序郵件。
cron:linux下的定時執行工具。
Roomba:Roomba是iRobo公司生産的定時智能機器人。
學習更多數學知識
計算機科學本質上講是數學的一個學科。好的數學家中間會産出優秀的程式員。不要讓你的數學能力喪失殆盡。
考慮每年花一個月時間複習清單中的一項:
邏輯學、離散數學、微積分、機率論、統計學、抽象代數、數論、範疇論、偏序理論
關注安全
很少有程式員具備好的安全習慣。如果你對自己的數字安全很在意,你就會對你寫的代碼安全性更加關心。確定你在每個站點都使用了唯一的高安全系數密碼。使用加密的密碼管理器來管理你的密碼,例如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,請真誠地試着去了解它。
在學習過程中,請注意你喜歡什麼和讨厭什麼。真誠地問自己,這些觀察到的内容是否在你的軟體中存在。在工作中很難看到自己的缺點,但發現别人的不足卻很容易。天下沒有哪個父母認為自己的孩子長得難看。請學習看到自己作品的不足。
完成一個自己的項目
如果你整天為别人寫代碼,那麼為自己寫程式能讓你記得當初為什麼會成為程式員。每年為自己選擇的項目配置設定一個月的時間,完成核心功能,将其開源釋出。
譯文出自:伯樂線上
英文出自:netmagazine