英文原文:A Cautionary Tale of Learning to Code node
這是一個真實的故事,關於我本身的。一個理智的生命個體是怎麼一步步走向瘋狂?程序員
我穿着西裝,坐在辦公室裏,腦子裏有一個模糊的創業想法。而後,我決定學習編程。我曾經無心中聽到過幾我的在那吹牛說本身怎麼使用一種叫 Ruby 的語言輕鬆實現自動辦公。我想「呵,Ruby」。我回到家,谷歌 Ruby。15 秒以後,我隨機選擇了一個 Ruby 教程,開始學習。web
一週之後,我參加人生中的第一次黑客聚會。在場的每一個人都在討論什麼 Scala,Clojure,Go。我想,他們學得還真是多。轉身我就借了三本O'reilly 的書,每本書看了大概 50 頁。面試
什麼?你問我爲何沒有完整地看完一本書?那還不是由於每本書開始的時候簡單易懂,而後就開始作假設,假設你具有這個知識,假設你會使用那種工具,但是這些我都不會好嗎?編程
個人一個朋友告訴我應該學 Emacs,而且給了我他的配置文件。我又花了幾個小時學習基本的 Lisp 語法,以便我能本身設置配置文件。服務器
而後一我的從我身邊通過,看見我正在使用 Emacs,就問「你怎麼還在用 Emacs(表情自行腦補),你不知道 Vim 更好嗎?」我想「呵,Vim」,因而我開始背誦 Vim 成堆的鍵盤快捷鍵。框架
工程師們常常討論這樣一個話題,文本編輯器哪家強?而且,工程師們將這當作是一場宗教戰爭——評判的標準不在於客觀的準則,而在於歷史分歧。編程語言
那時候,我認爲若是我打字越快,我編程的速度也會越快。因此我拋棄了傳統的鍵盤佈局,用上了程序員必備的 Dvorak 鍵盤佈局(就像下面這樣)。客觀上來講,對程序員而言,這是最高效的一種鍵盤佈局。編輯器
看着上面的鍵盤佈局,你能告訴我有多少字母鍵,數字鍵,特殊字符鍵的位置沒有變更嗎?答案是個位數。工具
等我可以成功啓動 Linux,一分鐘可以敲出十個單詞的時候,我開始經過看書和 Udacity 的課程學習 Python。
通過七個月的艱苦奮戰,我獲得了第一份軟件工程師的工做。
CTO 面試個人時候,我告訴他全部我學過的工具和我正在使用的高大上的配置文件。CTO 禮貌地聽我說着,時不時點點頭。等我吹噓完本身淵博的知識以後,他看了我一眼,而後說「其實,大部分事情都有不少解決的辦法,可是隻有其中的極小一部分是有意義的」。
四年之前,我所在的公司決定使用 Ruby on Rails 構建他們的產品。對於語言的選擇,全部的工程師都沒有意見,如今,他們的許多原始代碼還在工做。全部的工程師都用 MacBook,由於 MacBook 不只可靠,而且和他們在產品中使用的 Ubuntu Linux 服務器很是相似。這裏的工程師不討 Vim 和 Emacs 哪家強,每一個人使用的文本編輯器都是 RubyMine,這是一個強大的集成開發環境,默認配置很是好用。這裏的每一個工程師使用的工具徹底一致,意味着每一個人能夠隨便挑選本身的座位,而後立馬和左邊或右邊的同事開始結對編程,而不須要糾結開發環境的配置問題。使用徹底相同的配置能極大地方便兩個開發者之間的合做。
雖然我不會 Ruby on Rails,公司也以爲我能勝任工做。由於我會 Python 和 Django,而且贏得了黑客馬拉松的比賽,公司認爲這些能夠說明問題。
最開始的幾周真是艱難,這種艱難不只僅來自於我來到一個新的團隊,使用一種新的語言,新的框架和新的代碼庫,而是由於我發現身邊的人都是以一種自虐的態度在學習編程。
我獨自在圖書館、咖啡廳坐了幾個月,天天就是盲目的經過命令行安裝各類工具,調試 Linux 驅動,解決一些細枝末節的問題,好比說括號不匹配。我涉足每個能想到的在線課程,報了無數的 MOOC 課程。我認爲實際上我什麼都沒學到,直到在某個月的考覈中,我上升至第五位。這些經歷給個人印象是,編程是一場你永遠沒法取得勝利的戰鬥。我開始明白那些看起來正常的程序員他們的過往其實是那麼灰暗,他們經歷過太多,又壓抑得過久,不得不說,學習編程簡直就是一個反社會的活兒。
辭掉上一份工做的第一個週末,我上傳了這張自拍。那天我起了個大早,穿了件體面的西裝,穿西裝是爲了提醒本身:我但是要去學習編程的人。Facebook 的標語「個人新辦公室——餐桌上。我天天過着朝 8 晚 6 的生活,只有在必需要休息的時候才休息」。在生活中,我學程序員說話,像他們同樣思考,如今,我已經習慣了這個詞。
個人同事幾乎從沒遇到過語法錯誤,由於他們的 IDE 替他們解決這個問題。而當他們遇到一個錯誤信息,若是在幾分鐘內不能解決問題,他們就會給其餘同事發送一條即時消息,請求其餘人的幫助。他們會隨意跳到別人的桌旁,而後開始結對編程。這裏的程序員不會太自我,也不自誇爲精英。他們也不認爲編程是一件痛苦的事。有的只是成年朋友之間的建設性的對話。
一個團隊中的成員使用的工具是高度一致的。在 Passion Project 和黑客馬拉松中,開發者可能會使用新的 JavaScript 框架,好比說 Angular.js。而在一個真正的團隊裏,成員把精力主要放在使用現有的技術提高產品之上。從這個角度來講,他們是保守的。
在 ThoughtBot 你也會看到相似的狀況,在 ThoughtBot 中,每一個人都堅持使用一個小且高效的工具集(Rails,Vim,Postgres 和 Redis)。由於工具集小,因此工程師容易成爲該領域專家,又由於每一個人使用的工具集都是同樣的,因此相互之間進行互操做就變得很容易。
因此真正的問題是,若是高效的團隊在使用一個小且固定的工具集的時候最高效,那麼是否是人們在學習編程的時候使用一個小且固定的工具集是最好的。那些在線編程課程和編程訓練營顯然是這麼想的。
可是做爲一個個體,能夠選擇的工具那麼多,真的很難決定到底該怎麼選。我知道這一點是由於我經歷過。一個好的程序員的技能集合能夠用T形來表示——涉獵的領域不少,可是真正擅長的領域很少。可是,通過經年累月的積累,T形將會慢慢變成下劃線形。
我遇到過許多學習編程的人,上來就想什麼都學,什麼都會,最終,他們都失敗了,放棄了他們成爲一個程序員的夢想。我不想這種狀況也發生在你的身上。
你須要專一更多方面
事不宜遲,下面給出一些新手容易犯的大錯誤:
若是非得用一個詞來總結個人建議,我會說:專一。
我問你,你會用專一這個詞來描述你的編程學習計劃嗎?若是你認爲你的計劃夠專一,好,你如今能夠中止閱讀,回到你的計劃開始學習,由於我不想說任何可能致使你失去專一的事情。
若是你還的計劃不夠專一,那你也有福了——照我說的去作,你也能專一,可是這須要花費你幾分鐘的時候作幾個艱難的決定。等等,大家別走啊!
好的,你還沒走。下面就是你須要作出的艱難的決定。
一旦你作出了這些決定,剩下的路就太簡單了。你只要保持清醒,不要被周圍的新工具所迷惑。一週七天,天天學一點在線課程,哪怕一次只有半小時。相信你今天作出的決定。最後,請記住:只要有耐心,任何能幹的人都能成爲絕世 coder,固然也包括你。