作為軟體工程師,我學到的9件事

Janzou發表於2014-09-04

三年前,我在巴塞羅那的神經科學實驗室工作,當時我忙於將電極放在人身上,並在認知系統上訓練分類。現在,我靠設計和編寫軟體為生。

當然,早在做科學工作時,我就寫了很多軟體,我也一直是個優秀的程式設計師。——如果你想讓大腦掃描的40G資料有意義,你不得不捲起袖子,編寫指令碼來壓縮這些資料。但直到我在學術界辭掉工作(也可能是我的未來)並開始小型而雄心勃勃的創業時,我才明白什麼是真正的軟體工程師。更重要的是,明白了軟體工程中的業務是什麼。這不需要知道更多的程式語言、庫、演算法和設計模式。這是一種思維模式。

如果我曾經知道這種思維模式,並在我開始讀研究生之前採用它,它可能會讓我的工作輕鬆許多。

這是給我年輕時的自己的一張紙條,上面列舉著過去三年我學到的一些事情,其中有時是痛苦的。

 

1. 智力被高估

當你年輕的時候,需要走很長一段路才能讓你變得聰明。你是小池塘中的一條大魚。如果在中途,你懂得一些表達自己的訣竅,你會加倍加快你的程式。事實上,成為智慧的流暢的言論者會讓任何人通過高中和大多數大學,而根本不需要學習太多。(雖然你必須學習物理,但不只是講一個等式。)——恭喜你,你是幸運的。同時,也是非常不走運的。因為當你毫不費力地通過學校,一路上學習東西時,其他人必須學會以後什麼是更重要的:勤奮、堅持、人際關係。和一些下面列表中可能的八件事。

我們的社會非常重視智力。當我告訴別人我曾經在神經科學實驗室工作時,他們的第一反應經常是:“哇,你肯定超級聰明”。我不傻 ,我知道有很多人可能在智力上不如我,但他們是更好的神經學家。

智力仍然是一個開門磚,但不能只依靠智力。勤奮、嚴謹、可靠的人際關係和最終犯傻,不僅僅是軟體工程師的必要素質,也是從事研究生院之外的任何職業的必要素質。

 

2. 以你的手藝為傲

這個口頭禪可能已被過度使用,但它對你而言仍然很重要。親愛的年輕的自己:無論你做什麼,要把它視為一個光榮的手藝。沒有什麼應該只是達到目的的一種手段。我們都愛在出版物上看到我們的名字,但真正的手藝是想出來的許多無效的假設,是針對你的主題的——無論是人類還是浮在試管中——而且趨向於它們的需求,嚴格地分析你的資料並驗證你的統計資料,重新開始,因為在某些時候,你會發現你剛才提出了一個令人尷尬的愚蠢的錯誤。如果你編寫軟體,這意味著要規劃特點,研究現有的開原始碼,學習新的模式和程式語言,修改程式碼錯誤,重構並維護程式碼。如果你做這些事情時沒有愉悅感,只是認為它們是你為了釋出論文或產出產品必須要做的,那麼你將永遠不會真正的擅長這些。如果你沒有野心要真正地擅長於你的手藝,那麼成為一個科學家或工程師或任何你現在做的事情可能都是在浪費你的時間。

你尊重你的手藝的一個好的跡象是,你正在做一些小專案:這些愚蠢的小專案不需要服務於任何當前的需求,你做這些僅僅只是因為專案的緣故。因為你喜歡做這個。有趣的是,這似乎在軟體界非常普遍——我們每天使用的許多產品都開始於某人的小專案——但是這在科學界較為少見。來自康德拉·洛倫茲的一句我最喜歡的引用:

“每天在早餐前放棄一個小的假設,這對科學家而言是一個很好的晨練。”

如果這聽起來對你而言有點愚蠢,也許你不應該成為一個科學家。

 

3. 學習新的工具

作為最後一點的延續:花時間來學習新的工具。不僅為了擴充你的抽象知識,而且真正瞭解工具可以幫助你把事情做好。你將很快的從中獲得回報。

學習新工具的一個好的方法是通過上面提到的“小專案”。每次你建立一些新的東西,同時也以新的方式建立它。請記住,小專案即將失敗。你投入不多,你學到的也很少。如果沒有取消或你失去了興趣或你意識到面臨的挑戰太多了:沒有造成傷害。沒有自我傷害。

如果你在學術界,我強烈推薦學習好的工具:

  • Git和Github。Git幫助你管理你的工作,並從不需要擔心備份。Github上有許多優秀的程式碼,因此你不必重複的造輪子。請和你的同伴做程式碼審查。不要使用程式碼去分析資料,除了你沒有人會去讀。(我甚至不能相信,我甚至不得不告訴你,年輕的自己。你一直是一個優秀的程式設計師,但如果不是因為程式碼審查讓我相信,因為錯誤,科學上所有結果的30%可能都是假的,我仍然會毫無察覺得犯錯)。
  • 繪圖軟體。我個人比較喜歡Inkscape,不過行業標準的Adobe Illustrator和新生的Sketch同樣也很好。用這些軟體對你的曲線和圖表進行後期加工;這往往比寫Matlab或matplotlib的繪製指令更容易。
  • 學習如何有效地使用你的文字及程式碼編輯器。Sublime Text是一個很好的編輯器,它的學習曲線比VIM或Emacs低得多。學習快捷鍵。這能節省你的大量時間。
  • 學習如何說話。看TED演講,並注意許多經驗豐富的演講中是如何能吸引觀眾十五分鐘,同時講述一個引人入勝的故事的。在鏡子前練習。你的身體和聲音也是工具。
  • 知道Python, R, HTML和Javascript的基礎知識會讓你還有很長的路要走。如果你對程式設計已經並不陌生,學習一個新的領域或庫。接觸下計算機視覺,自然語言處理,網頁抓取,音樂合成。

你可以看到一個問題的解決方案總是受限於你所知道的工具。學習新的工具意味著從其他的角度看待問題。

如果你在大學裡,我強烈建議你每週安排一天專門來學習新的工具。當你作為博士開始做自己的研究時,每週安排這樣的兩天。從長遠來看,你將節省大量的時間,人們會對你的工作效率感到驚訝。如果這樣的安排聽起來好像要很多時間,而你認為你沒有時間,同時你有太多的壓力要去做其他事,跟比你年長的同行聊聊,在什麼才真正花時間這個問題上,問問他們的意見。

 

4.做一個利益相關者且讓你的日程知道

這是一個普通的假設,你的主管或CEO將總是在研究所或公司的最佳利益上採取行動,這是他的工作。

但是,公司和實驗室都不是一個有意識的實體,因此沒有內在的興趣。當我們談論一個公司的最佳利益時,我們實際上指的是利益相關者的最佳利益。現在真正的問題是:你的CEO或主管認為這些利益相關者有哪些人,以及他們的利益有多重要?

如果你的老闆認為他(或她)是唯一的利益相關者(獲得儘可能多的出版物;目標是快速獲利退出):儘可能快地退出。你將被扔下車。還有誰呢?你的投資者或資助者?員工?學生?人類?問題的關鍵是:儘快找出來。如果你沒有被視為利益相關者,那麼全身而退。就像你可能喜歡你的工作一樣,這將是片面的、辱罵性的關係。

 

5.出貨(Shipping it)

在科技界,“出貨”已經成為一個非常時髦的名詞。這意味著讓你的產品從你的倉庫中出來,並傳給消費者。但比一個行為更重要的是,這是一種心態。這意味著,直到你的工作在消費者手中結束,它才不是毫無價值的。而這應該永遠是你的主要目標。

在學術界時,我寫的大多數軟體完全只在一個系統上執行過一次。編寫生產就緒程式碼為五十多萬使用者工作,完全是另一碼事。而當我開始專業地編寫程式碼時,我的工作往往達不到這一點。

但是,這也意味著,迭代多年直到你有完美的作品,這是沒有意義的。做一個小而完整的。寫你能得到的最簡單的篇幅。然後擔心做更復雜的研究。迅速獲取基本的正確,並讓它們儘快的出來。出貨就行。

 

6.知道二八法則

二八法則基本上表示,它將使用20%的專案時間來實現80%的預期效果,然後剩餘的80%的時間只是來完成最後的20%。這就像從郊區開車到市區:其中20%的時間,你能行使80%的路程,但一旦你進入市區交通,最後20%的距離將佔用很多的時間。

為什麼知道這個很重要呢?因為人們總是低估一個專案需要的時間。尤其是科學家和工程師們特別容易這樣。這是屬於經驗方面的問題:你越瞭解,就越能預測什麼會出錯,並且當你開始做時,沒有人會想到有趣的邊緣情況會是什麼。

如果你還沒有這樣的經驗,花一個專案所需時間的5倍,並在達到預計時間的五分之一後,期望能積累到經驗。

 

7.不出賣自己的靈魂

因為所有錯誤的原因,我開始了我的博士生涯。其中一個錯誤的原因就是我現在所說的“學術內疚”。我認為,如果我不讀博士會浪費我的天賦。同時,我覺得我做研究欠那些用自己的方式支援我學術生涯的人——教授們和支付我獎學金的人。我真的不知道。他們對我的學術前途的投資可能要失望了,他們的投資沒有還清或產生一個偉大的科學家。但這是他們的問題,不是我的。

這同樣適用於其他任何工作。人們總是投資你,這往往是他們的最佳利益驅使他們這樣做。但是,這並不意味著他們擁有你的靈魂。

 

8. 離開你的舒適區

以下是我如何看待世界的觀點:

如果一種狀態太熟悉,你學不到太多。然而如果你感到恐慌,你可能什麼也學不到。

這裡是你的舒適區。你知道池塘中的每條魚。你的歸屬。你知道如何處理問題。太陽底下沒有什麼新鮮事。如果你想要學習新東西並且成長,你必須離開你的舒適區。這是學習的開始。這是有趣的事情開始的地方。這是你不會立即對一切事情做出反應的地方。

當然,這也是你感到不堪重負的地方。這是恐慌區。這是你將暈厥的地方。在這裡,你所能做的就是儘量把你的頭保持在水外,希望有人會救你。

最佳地帶在你的恐慌區之前。這其中的挑戰是,在那裡你將學到最多,成長最多,改變最多。去那裡吧.

“忘記安全。
在你害怕的地方生活。
破壞你的名譽。
變得臭名昭著。”
-魯米

 

9.馴服你的猴子思維

舒適地坐著,閉上你的眼睛,只是繼續正常的呼吸。專注於從你鼻孔撥出的空氣如何在你的上脣之上撫過你的皮膚。不需要在意其他任何東西。只是關注於這一點。

在你的心靈開始飄蕩之前,這有多久?五分鐘?大概沒有。一分鐘?很好。二十秒或更短?恭喜你,你是正常的。你的思維就像一隻猴子,它會抓住任何最近的一個樹枝。我可能敘述地與學院派的稍有不同,它的專業術語是聯想思維。如果你想做一些有創造性的事情,那麼聯想思維是很好的,但它是專注力的殺手。好訊息是:你可以學習如何專注。這裡有無數多的“生產力技術”,但它們都只是隔靴搔癢。你不想依賴定時器且分心於自由寫作軟體。你想一勞永逸地馴服你的猴子思維。

適合我的方式與適合你的方式可能極不相同。我通過定期打坐(它有一些其他有益的副作用)得到了很好的效果,但即使是這樣,這裡有這麼多不同的風格和傳統,我不可能推薦一個適合每個人的。我所推薦的是,讓你的思維保持良好的狀況,並認真對待這個問題。想想冥想是浪費時間嗎?你去健身房減肥。你應該至少在思維訓練上花兩倍的時間來減輕頭腦中的一些雜念。改善你的精神洞察力。增強你的背部,能夠讓你的頭腦保持直立更長時間。

相關文章