天天看點

一個簡單實用的程式員雞湯

對于程式員來講,挑戰自我很重要。有創造力的以及技術性的休整是可行的。在新年來臨之際,我總結了 12 個心願。

每個月都是一個每年可更新的技術性的或個人的挑戰:

1.進入真實生活。

2.保持健康。

3.欣然接受不舒适。

4.學習一門新的程式設計語言。

5.自動化。

6.多學點數學。

7.專注于安全。

8.備份資料。

9.多學點理論。

10.對藝術和人文學科有所涉獵。

11.學習新軟體。

12.完成一個個人項目。

繼續讀下去,看看我的建議。

進入真實生活

程式員們過分沉迷于數位裝置,在數位裝置之外也别有一番天地。

是以,在真實生活中的投資會帶來相對多的回報。

這裡有一個起步表,表中是真實生活中可供嘗試的活動。對于每一項活動,如果你真心付出一個月,你就不再是一個新手(而是一個富有經驗的初學者):

  • 做飯
  • 遠足
  • 滑雪
  • 天文學
  • 慢跑
  • 舉重
  • 木工
  • 國術
  • 跳舞

保持健康

程式員往往過着久坐不動的生活,是以我們面臨着我們職業帶來的特有健康挑戰。

我們往往會忽視這些挑戰。

每年,花一整月的時間,調整你的鍛煉、飲食以及環境,來培養持久的健康習慣。

每年去一次診所,測量血壓、膽固醇以及血糖。觀察這些數值是怎樣随時間而變化的。

如果你的手腕開始疼痛或者已經疼了一段時間了,現在就停下來,采取措施,預防重複性勞損(RSI)。

把目标放在改進姿勢上,重點關注肩膀和脖子。我使用姿勢糾正帶:

一個簡單實用的程式員雞湯

(對,它對男人也适用)

跟蹤體重、卡路裡攝入以及卡路裡消耗。如果必要的話,改變生活方式,來培養更健康的飲食和減肥方法。

如果你本來就很健康,就考慮一年的結合力量和肌肉的實驗吧。

2016 年更新:在過去的幾個月,我一直在試着使用可以将桌子改造為站立式辦公桌的附件,我不僅在心靈上,而且在身體上都有新鮮感。

一個簡單實用的程式員雞湯

我估計我站一天能多消耗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,真心地付諸一試。

在你學習的過程中,把你喜歡的和不喜歡的東西都記錄下來。

扪心自問,這些觀察是否反映到了你創造的軟體中?

在你自己的作品中指出壞毛病很難,但給别人的作品挑毛病就很容易。

每一對父母的孩子都是漂亮的。

學會認識自己醜陋的小孩。

完成一個個人項目

如果你整天總是為别人寫代碼,就要記住,程式員之是以成為程式員,是因為他為自己寫程式。

每年把一個月的時間花在你自己選擇的項目上。

實作那個項目的核心部分。

使其開源,将它釋出到世界

轉載自伯樂線上點選打開連結