2019年快來了,送給每位程序員一份新年計劃清單
點擊關註加星標,江湖要事早知道
一日之計在於晨,一年之計在於春,對於程序員來講,挑戰自我很重要。有創造力的以及技術性的休整是可行的。給自己的新年列個計劃清單,一起在新的一年更好地成長吧!
進入真實生活
程序員們過分沈迷於數碼設備,在數碼設備之外也別有一番天地。
因此,在真實生活中的投資會帶來相對多的回報。
這裏有一個起步表,表中是真實生活中可供嘗試的活動。對於每一項活動,如果你真心付出一個月,你就不再是一個新手(而是一個富有經驗的初學者):
-
做飯
-
遠足
-
滑雪
-
天文學
-
慢跑
-
舉重
-
木工
-
武術
-
跳舞
保持健康
程序員往往過著久坐不動的生活,因此我們面臨著我們職業帶來的特有健康挑戰。
我們往往會忽視這些挑戰。
每年,花一整月的時間,調整你的鍛煉、飲食以及環境,來培養持久的健康習慣。
每年去一次診所,測量血壓、膽固醇以及血糖。觀察這些數值是怎樣隨時間而變化的。
如果你的手腕開始疼痛或者已經疼了一段時間了,現在就停下來,采取措施,預防重復性勞損(RSI)。
把目標放在改進姿勢上,重點關註肩膀和脖子。我使用姿勢糾正帶:
(對,它對男人也適用)
跟蹤體重、卡路裏攝入以及卡路裏消耗。如果必要的話,改變生活方式,來培養更健康的飲食和減肥方法。
如果你本來就很健康,就考慮一年的結合力量和肌肉的實驗吧。
在過去的幾個月,我一直在試著使用可以將桌子改造為站立式辦公桌的附件,我不僅在心靈上,而且在身體上都有新鮮感。
我估計我站一天能多消耗360卡路裏,然而我覺得它的作用還不止這些。因為站立讓我總體上活動得更多了。我發現,相比於坐著,我的註意力在站著時更加集中。
跳出舒適區
從我 20 歲出頭起,我觀察比我年長的同伴,嘗試發現為什麽有些人停滯不前,而另外一部分人一直精力充沛。
答案是舒適。
舒適導致技術僵化。
一個系統,它能正常為我們服務,而且我們一直在堅持使用它。
但是,技術在進步,那些局限於舒適的人絕對認識不到這些進步的益處。
慣例之所以變為舒適的,是因為它原來就是不舒適的。
清單中的事情,可能讓你在剛開始感到不舒服:
-
換成德沃夏克鍵盤。
-
從 emacs 編輯器轉化到 vim 編輯器或者反過來。
-
停止使用鼠標。
-
使用不同的窗口管理器。
-
從奶油和糖轉變為不加牛奶的咖啡或者不經過調味的茶。
-
花一整個月的時間試試『流行新垃圾』。
-
每周關掉手機一天。
-
學習使用單手輸入設備。
-
嘗試使用不同的操作系統。
-
對於一個小項目,嘗試不同的版本控制系統。
-
每周強制斷網一天。
-
試試飲食上的約束:純素食主義、素食主義、不含奶類等等。
-
每天吃一種你不喜歡的食物。
-
少用有利手臂(dominant arm)。
-
學習用非利手(non-dominant hand)寫字。
-
開始寫博客。
-
報名參加公眾演講。
-
聽一種你並不喜歡的音樂一個月。
-
在醫院或退休之家做誌願服務。
-
一周禁食一次。
-
去一個用不同語言或者有不同文化的國家。
-
從你不喜歡的種類裏選讀一本廣受歡迎的小說。
-
從你不喜歡的種類裏選觀一部備受推崇的電影或片子。
-
學會開手動檔汽車。
-
質疑一些你相信的事。
做一些不一樣的事情,一個月之後,決定是否想繼續這樣做,或者看看能不能找到這樣的方法,能把新事物和舊事物最好的東西融合起來。
舉個例子,當用了 10 年的 emacs 轉用 vim 時,在插入模式下,我設置了 emacs 風格的快捷鍵,但是我用的編輯器是 vim 。
更新:讀者 Shae Erisson 為欣然接受不舒適續寫了『3 的規則』:當已經有3個人推薦你嘗試一樣東西的話,你必須嘗試一下。
他還給出了一個『 15 分鐘規則』:給某個東西(比如一部電影或電視節目) 15 分鐘的評判時間。如果你在 15 分鐘之後不想繼續下去了,就放棄它。
這兩條規則我都喜歡。
學習一門新的編程語言
編程語言起起落落。
只懂一門語言的程序員,他們解決問題的能力和事業前景會受局限。
用它寫一個不大的程序。
這裏有一些非主流的可供學習的語言:
-
Racket.
-
Haskell.
-
Rust.
-
Scala.
-
Erlang.
-
Clojure.
-
SML/NJ.
-
OCaml.
-
Squeak.
-
Prolog.
-
Datalog.
-
miniKanren.
如果你有足夠勇氣,試一試依賴類型(dependently-typed)編程語言或者定理證明系統(theorem-proving systems):
-
Agda.
-
Coq.
-
Idris.
如果你沒有編程語言可以去學了,自己發明一個。
自動化
程序員具備的最有力而未被利用的技能就是,使虛擬和現實自動化的能力。
如果你從來沒做過機器人的話,做一個吧。
至少玩玩樂高頭腦風暴機器人吧:
或者玩玩 Arduino 板或樹莓派:
觀察你做的日常活動,然後決定哪些能全部或者部分自動化。
家庭自動化技術非常發達,借助 DIY 系統,例如 Insteon,很多東西都成為可能。
花一個月的時間來做一個自動化的項目:
-
調優你的郵件過濾器或者安裝 procmail。
-
設置 shell 腳本,自動化經常性的操作。
-
新建一個 shell 腳本來幫助你寫作。
-
學習怎樣使用 cron 工具。
-
把壁櫥的燈和運動檢測器連接在一起。
-
在可能的地方用無線代替有線。
-
停止手動同步:把它移到雲端。
-
安裝遠程聲控系統。
-
用你的服務器來控制你的恒溫器。
-
安裝數碼安全攝像頭。
-
做一個內線通話系統或者嬰兒監視器。
-
讓你的咖啡機自動打開。
-
為寵物安裝自動加水的盤子。
-
做傳感器控制的寵物門。
-
破解 Roomba,讓它成為快遞員。
多學點數學
計算機科學是一門與數學相關的學科。
成為好的程序員的前提是成為好的數學家。
不要讓你的數學才能消失。
考慮每年花一個月時間溫習這些主題中的一個:
-
邏輯學。
-
離散數學。
-
微積分。
-
概率論。
-
統計學。
-
抽象代數。
-
數論。
-
範疇論。
-
序理論。
專註於安全
極少數的程序員有好的安全習慣。
如果你在意自己的電子信息安全,你將會更在意自己代碼的安全性。
檢查一下,在每個網站上,你是否在用獨特、復雜的密碼?
用加密的密碼管理器管理你的密碼,例如 PasswordSafe 或者 KeePassX。
如果你還沒習慣全盤加密,那麽抽出時間做一下。(在 Mac 機上,設置它不難。)
每年,研究一下過去12個月的高危漏洞。他們是怎樣發生的?什麽樣的編程習慣能夠防止這些問題在你的代碼中出現?
這裏是你可以嘗試的其他安全任務:
-
學習 SSH 還能做什麽。
-
在 Apache 上安裝 SSL 安全證書。
-
實現一個加密系統,例如 RSA 或者 AES。
-
嘗試破解你的無線網絡的密鑰。
-
用 WireShark 嗅探你的網絡交通。
-
設置無需密碼、基於密鑰的 ssh 登錄。
-
自己運行 nmap。配置你的防火墻。
-
設置端口敲門(port-knocking)。
-
做一個加密的 U 盤。
-
安裝日誌文件監視器。
-
設置 cron 作業(cronjob)來規律地更新軟件包。
備份你的數據
每年,花時間來反思你的備份策略。
用一個月的時間,最小化做備份的成本。
(我最近把我的很多工作文件放到了 Copy 裏,它是一個靈巧的類 DropBox 應用,有比 DropBox 更多的免費存儲空間。通過這個推薦鏈接來得到多余的 5 GB。)
選擇容災方案:為每臺電腦指派單獨硬盤,借助像 Time Machine 的工具,打開自動備份。
用版本控制來管理關鍵文件,將他們存儲在異地服務器中。
多學點理論
計算機科學有著豐富的理論結構。
跟上新進展,復習你已經掌握的經典理論。
每年花一個月,學習類似下面的理論:
-
形式語言。
-
自動機和可計算性理論。
-
復雜度理論。
-
形式化方法。
-
語義學。
-
算法和數據結構。
對於初學者,你可能想看看這些帖子:
-
用 Haskell 語言寫 CEK 形式的(或者語義學上的)解釋器。
-
用推導來進行語法分析。
-
被遺忘的方法:怎樣從 Okasaki 的紅黑樹中刪除元素。
-
用推導的方法,使用 Scheme 語言對正則表達式進行模式匹配。
-
將正則表達式轉化為非確定有限狀態自動機(NFA)。
對藝術和人文學科有所涉獵
工程師往往輕視藝術。
工程師沒有意識到的是,藝術和人文成就了卓越的技術。
史蒂文 · 喬布斯喜歡指出聯系技術和人文的重要性,而且真的是這樣。
不要對這些理論一無所知。
藝術和人文訓練直覺,並且使其變得敏銳。這個過程是以一種很難量化的方式進行的。然而這種直覺對於在量化領域中工作的我們來說,是必要的。
工程師需要學習怎樣度量他們不能計算的東西,而不是只計算他們能度量的東西。
每年至少花一個月,多學學類似下面的理論:
-
工業設計。
-
哲學。
-
攝影。
-
繪畫。
-
寫生。
-
音樂和音樂理論。
-
電影。
-
文學。
社會科學也對計算機科學有很多貢獻。具體來說的話,試試經濟學和心理學。
學習新軟件
要為你自己的軟件獲得靈感,一個好的方法就是,學習一個或一類新應用。
舉個例子,如果你從來沒有用過 3D 建模工具,試試 Blender。
或者,如果你從來沒學過 LaTeX,真心地付諸一試。
在你學習的過程中,把你喜歡的和不喜歡的東西都記錄下來。
捫心自問,這些觀察是否反映到了你創造的軟件中?
在你自己的作品中指出壞毛病很難,但給別人的作品挑毛病就很容易。
每一對父母的孩子都是漂亮的。
學會認識自己醜陋的小孩。
完成一個個人項目
如果你整天總是為別人寫代碼,就要記住,程序員之所以成為程序員,是因為他為自己寫程序。
每年把一個月的時間花在你自己選擇的項目上。
實現那個項目的核心部分。
使其開源,將它發布到世界。
往期精彩回顧
從Java小白到收獲BAT等offer,分享我這兩年的經驗和感悟
GitHub 上四萬 Star 大佬的求職回憶
程序員依然是這個時代,貧寒學子翻身的不二選擇
程序員江湖裏有什麽?
1.作者是收獲BAT頭條等大廠研發offer的求職老司機,後臺回復“少俠”可以獲得我的微信,歡迎和我交流技術學習和求職心得。
2.每天早上九點分享一篇關於程序員成長與生活的文章,包括但不限於:求職攻略、學習方法、技術幹貨、成長感悟等方面的內容。
3.後臺回復“資料”即可獲得3T海量學習資料,資料涵蓋各個技術方向,包括Java、C++、前端、大數據、移動開發等方向。對於每個方向,都包含了基礎、進階、求職等部分內容。
2019年快來了,送給每位程序員一份新年計劃清單