傳統(tǒng)印象中程序員就只會碼代碼,那么程序員需要學(xué)什么才能讓自己的生活充實(shí)豐富起來,一年之計(jì)在于春,對于程序員而言,自我挑戰(zhàn)很重要,有創(chuàng)造力、技術(shù)性的調(diào)整是可行的,給自己列個(gè)計(jì)劃清單,一起更好的成長吧!
進(jìn)入真實(shí)生活
程序員們過分沉迷于數(shù)碼設(shè)備,在數(shù)碼設(shè)備之外也別有一番天地。因此,在真實(shí)生活中的投資會帶來相對多的回報(bào)。
這里有一個(gè)起步表,表中是真實(shí)生活中可供嘗試的活動。對于每一項(xiàng)活動,如果你真心付出一個(gè)月,你就不再是一個(gè)新手:
做飯
遠(yuǎn)足
滑雪
天文學(xué)
慢跑
舉重
木工
武術(shù)
跳舞
保持健康
程序員往往過著久坐不動的生活,因此我們面臨著我們職業(yè)帶來的特有健康挑戰(zhàn)。我們往往會忽視這些挑戰(zhàn):
每年,花一整月的時(shí)間,調(diào)整你的鍛煉、飲食以及環(huán)境,來培養(yǎng)持久的健康習(xí)慣;
每年去一次診所,測量血壓、膽固醇以及血糖。觀察這些數(shù)值是怎樣隨時(shí)間而變化的;
如果你的手腕開始疼痛或者已經(jīng)疼了一段時(shí)間了,現(xiàn)在就停下來,采取措施,預(yù)防重復(fù)性勞損(RSI);
跟蹤體重、卡路里攝入以及卡路里消耗。如果必要的話,改變生活方式,來培養(yǎng)更健康的飲食和減肥方法。
跳出舒適區(qū)
從我 20 歲出頭起,我觀察比我年長的同伴,嘗試發(fā)現(xiàn)為什么有些人停滯不前,而另外一部分人一直精力充沛。
答案是舒適。舒適導(dǎo)致技術(shù)僵化。
一個(gè)系統(tǒng),它能正常為我們服務(wù),而且我們一直在堅(jiān)持使用它。但是,技術(shù)在進(jìn)步,那些局限于舒適的人絕對認(rèn)識不到這些進(jìn)步的益處。
清單中的事情,可能讓你在剛開始感到不舒服:
換成德沃夏克鍵盤。
從 emacs 編輯器轉(zhuǎn)化到 vim 編輯器或者反過來。
停止使用鼠標(biāo)。
使用不同的窗口管理器。
從奶油和糖轉(zhuǎn)變?yōu)椴患优D痰目Х然蛘卟唤?jīng)過調(diào)味的茶。
花一整個(gè)月的時(shí)間試試『流行新垃圾』。
每周關(guān)掉手機(jī)一天。
學(xué)習(xí)使用單手輸入設(shè)備。
嘗試使用不同的操作系統(tǒng)。
對于一個(gè)小項(xiàng)目,嘗試不同的版本控制系統(tǒng)。
每周強(qiáng)制斷網(wǎng)一天。
試試飲食上的約束:純素食主義、素食主義、不含奶類等等。
每天吃一種你不喜歡的食物。
少用有利手臂(dominant arm)。
學(xué)習(xí)用非利手(non-dominant hand)寫字。
開始寫博客。
報(bào)名參加公眾演講。
聽一種你并不喜歡的音樂一個(gè)月。
在醫(yī)院或退休之家做志愿服務(wù)。
一周禁食一次。
去一個(gè)用不同語言或者有不同文化的國家。
從你不喜歡的種類里選讀一本廣受歡迎的小說。
從你不喜歡的種類里選觀一部備受推崇的電影或片子。
學(xué)會開手動檔汽車。
質(zhì)疑一些你相信的事。
做一些不一樣的事情,一個(gè)月之后,決定是否想繼續(xù)這樣做,或者看看能不能找到這樣的方法,能把新事物和舊事物最好的東西融合起來。
程序員需要學(xué)什么?很多人認(rèn)為還需要學(xué)習(xí)一門新的編程語言
編程語言起起落落。
只懂一門語言的程序員,他們解決問題的能力和事業(yè)前景會受局限。用它寫一個(gè)不大的程序。這里有一些非主流的可供學(xué)習(xí)的語言:
Racket.
Haskell.
Rust.
Scala.
Erlang.
Clojure.
SML/NJ.
OCaml.
Squeak.
Prolog.
Datalog.
miniKanren.
如果你沒有編程語言可以去學(xué)了,自己發(fā)明一個(gè)。
自動化
程序員具備的最有力而未被利用的技能就是,使虛擬和現(xiàn)實(shí)自動化的能力。
如果你從來沒做過機(jī)器人的話,做一個(gè)吧。
至少玩玩樂高頭腦風(fēng)暴機(jī)器人吧:
或者玩玩 Arduino 板或樹莓派:
觀察你做的日?;顒?,然后決定哪些能全部或者部分自動化。
家庭自動化技術(shù)非常發(fā)達(dá),借助 DIY 系統(tǒng),例如 Insteon,很多東西都成為可能。
花一個(gè)月的時(shí)間來做一個(gè)自動化的項(xiàng)目。
多學(xué)點(diǎn)數(shù)學(xué)
計(jì)算機(jī)科學(xué)是一門與數(shù)學(xué)相關(guān)的學(xué)科。成為好的程序員的前提是成為好的數(shù)學(xué)家。不要讓你的數(shù)學(xué)才能消失。
考慮每年花一個(gè)月時(shí)間溫習(xí)這些主題中的一個(gè):
邏輯學(xué)。
離散數(shù)學(xué)。
微積分。
概率論。
統(tǒng)計(jì)學(xué)。
抽象代數(shù)。
數(shù)論。
范疇論。
序理論。
備份你的數(shù)據(jù)
每年,花時(shí)間來反思你的備份策略。用一個(gè)月的時(shí)間,最小化做備份的成本。
選擇容災(zāi)方案:為每臺電腦指派單獨(dú)硬盤,借助像 Time Machine 的工具,打開自動備份。
用版本控制來管理關(guān)鍵文件,將他們存儲在異地服務(wù)器中。
多學(xué)點(diǎn)理論
計(jì)算機(jī)科學(xué)有著豐富的理論結(jié)構(gòu)。跟上新進(jìn)展,復(fù)習(xí)你已經(jīng)掌握的經(jīng)典理論。
每年花一個(gè)月,學(xué)習(xí)類似下面的理論:
形式語言。
自動機(jī)和可計(jì)算性理論。
復(fù)雜度理論。
形式化方法。
語義學(xué)。
算法和數(shù)據(jù)結(jié)構(gòu)。
對于初學(xué)者,你可能想看看這些帖子:
用 Haskell 語言寫 CEK 形式的(或者語義學(xué)上的)解釋器。
用推導(dǎo)來進(jìn)行語法分析。
被遺忘的方法:怎樣從 Okasaki 的紅黑樹中刪除元素。
用推導(dǎo)的方法,使用 Scheme 語言對正則表達(dá)式進(jìn)行模式匹配。
將正則表達(dá)式轉(zhuǎn)化為非確定有限狀態(tài)自動機(jī)(NFA)。
對藝術(shù)和人文學(xué)科有所涉獵
工程師往往輕視藝術(shù)。工程師沒有意識到的是,藝術(shù)和人文成就了卓越的技術(shù)。
藝術(shù)和人文訓(xùn)練直覺,并且使其變得敏銳。這個(gè)過程是以一種很難量化的方式進(jìn)行的。然而這種直覺對于在量化領(lǐng)域中工作的我們來說,是必要的。
每年至少花一個(gè)月,多學(xué)學(xué)類似下面的理論:
工業(yè)設(shè)計(jì)。
哲學(xué)。
攝影。
繪畫。
寫生。
音樂和音樂理論。
電影。
文學(xué)。
完成一個(gè)個(gè)人項(xiàng)目
如果你整天總是為別人寫代碼,就要記住,程序員之所以成為程序員,是因?yàn)樗麨樽约簩懗绦颉?/p>
每年把一個(gè)月的時(shí)間花在你自己選擇的項(xiàng)目上。實(shí)現(xiàn)那個(gè)項(xiàng)目的核心部分。使其開源,將它發(fā)布到世界。程序員需要學(xué)什么,看完相信大家會有一些新的感悟,學(xué)會了更多東西,程序員的人生會更加豐富多彩。