軟體工程師必學的9件事

2021-06-22 18:13:14 字數 3300 閱讀 3075

發布者: 

vincy西西1010

三年前,我還在巴塞隆拿的神經科學實驗室工作,忙著研究腦電波、教授心理學上的認知系統課程。而今天,我以設計和寫軟體為生。

你或許會滿頭黑線:隔行如隔山,這轉變也忒快了吧。其實不然,早在以前我就已經寫過很多軟體了——比如想理解掃瞄出來的有40gb那麼多的大腦資料,我得捋起袖子、埋頭苦幹,寫個能緊縮這些資料的指令碼。所以我一直以來就是乙個能幹的程式設計師。但是直到我最終下定決心辭去了這份在學術上能有所建樹的工作,轉去一家朝氣蓬勃的創業公司打工,我才明白了什麼是軟體工程師——而更重要的一點是,知道了軟體工程師是幹什麼的。軟體工程師並不意味著你得學會更多的程式語言、類庫、演算法和設計模式。它是一種心態。

如果我能早點懂得這些,我的工作肯定要輕鬆的多。不過亡羊補牢,猶未晚矣。

下面是我寫給自己的注意事項,是我在這三年裡學到的經驗教訓,有的甚至是慘痛的。

當今社會太過於看重智力。當我告訴別人我曾經在神經科學方面工作過,大家第乙個反應往往是:「哇,你肯定超聰明的!」我不得不說,我認識很多人或許智力方面不及我,但是卻的的確確是更為優秀的神經科學家。

智力毫無疑問能為你開啟前行的大門,但是如果光有聰明,工作是永遠不可能做好的。勤奮、嚴謹、可靠的網路,最後還有守信等等,不光是在軟體工程領域甚至在其他專業都是必須的基本品質。而這些是學校不會教給你的。

寫軟體意味著要規劃特點、研究現有的開源**、學習新的模式和程式語言、修復bug、重構及維護等等。如果在這些過程中你絲毫沒有感覺到樂趣,只是把這些步驟當做是得以發表**、發布產品的工具,那麼你永遠也不可能在這個領域真正有所建樹。如果你在提公升自己技能方面沒啥目標,那麼我建議你還是盡快轉行,哪怕是去做科學家、工程師還是別的什麼,都比現在這樣浪費時間要好。

為自己鼓掌、以自己為榮意味著,你在做的專案是自己喜歡的,可能這些專案看上去又小又蠢,為了不影響整個專案的順利完工,可能根本沒有必要投入精力馬上去做,但是你就是孜孜不倦、刻苦攻關。只因為兩個字:喜歡。有意思的是,這似乎在軟體社群是個相當普遍的現象——我們每天在用的很多產品開始僅僅是因為開發者個人的愛好而已——但是卻在科學界極為少見。下面是konrad lorenz(奧地利動物學家、動物心理學家、鳥類學家、諾貝爾獎優勝者)寫的我最喜歡的一段話之一,和大家分享:

「對研究型科學家而言,

在早飯前

回顧丟棄寵物的假設

就是最棒的晨練了。」

如果你感覺這聽起來很愚蠢,那麼也許你並不應該成為研究型科學家。

學習新工具不只能夠擴大抽象的知識領域,並且在有的時候借助這些工具還能幫助我們解決問題。付出總有回報,一切很快就會見分曉。

以下是我強烈建議學習的一些好工具:

對乙個問題的解決方案往往會受到我們所用工具的限制。學習新工具也是為了能跳出這個框,從其他的角度看問題。

如果你還在上大學,那麼我強烈建議你每週定一天時間用於學習新工具。如果你已經是在搞研究的博士,那麼可以每週兩天。從長遠來看,這會節約你解決問題的時間,別人會因為你的高效率而震驚讚嘆。如果你覺得你沒有那麼多空餘的時間,也不需要給自己壓力,可以向年長的同事請教,如何去正確分配時間。

眾所周知,主管以及ceo總是把公司的利益放在首位,這是他們的工作職責。

但我們談到公司的最大利益,我們往往指的是利益相關者的最大利益。而現在的問題是:哪些是主管和ceo眼中的利益相關者,這些利益相關者的利益又佔多少比重?

如果你的老闆認為他/她自己是唯一的利益相關者,那麼趕緊走吧。不然的話,要是找到合適的傢伙,你就會被拋棄。還有哪些會是利益相關者呢?投資者或者慷慨的捐獻者,員工,學生,還是全人類,都有可能,關鍵是要盡快找出來。並且如果你不在利益相關者當中,那麼離開。

「發布」這詞已經成為了科技領域的新寵。它的意思是把我們的產品從倉庫中取出來展示給消費者。這不僅僅是乙個動作,更是一種心態。如果不能把產品成功交付給客戶,那麼意味著我們以前的工作毫無價值,是無用功。關於這一點,是我們要時刻謹記的。

以前在學術界的時候,我寫的大多數軟體必須一一對應系統。而現在要為五十萬使用者寫軟體,這真的大不相同。

這也意味著,如果不能發布乙個完美的產品,我們就得一直迭代。所以如果想盡快得到乙個完美的產品,那麼發布吧!有壓力才有動力,集思廣益,查漏補缺。

80/20法則的基本意思是,花上20%的時間能實現專案80%的預期效果,然後剩下20%的專案成果則需要80%的時間才能拿下。舉個例子,假如你從郊區開車前往市區:在20%的時間裡走了80%的路程,但是當你碰上交通堵塞,呵呵,剩下20%的路程就會用去你很多很多時間。

那麼了解這個法則有什麼意義?因為如果沒有這個法則指導,很多人往往會低估完成乙個專案所需要的時間。科學家和工程師更是容易犯這種錯誤。不光是這個法則,還有部分是經驗問題:懂得越多,就越能更好的**開工之後會遇到的各種問題,而這一點是很多人想不到的。

如果你還沒有這方面的經驗,那麼可以將你認為所需要的時間乘以五,希望經過五分之一的時間之後,你會明白對80/20法則有所了解。

我攻讀我的博士學位完全是個錯誤。其中乙個錯誤我把它叫做「學術犯罪」。因為那個時候我覺得如果我不去讀博士完全是浪費了我的天賦。不過我覺得我有所虧欠於那些支援我學術生涯的人——教授和支付我獎學金的人——因為我最後並沒有去搞研究。他們投資了我的未來但是很可能會失望,因為他們的投資並沒有成果——我並沒有成為一名偉大的科學家。不過這是他們的問題,不是我的。

這同樣也適用於任何其他工作。人們給你投資,是他們利益最大化的選擇。這並不意味著你由此需要出賣自己的靈魂。

以下是我對世界的看法:

在乙個你熟悉的地方,舒適又安全,你可能學進去很少。然而當處於恐慌的心態中,你可能啥都學不會。

每個人都有自己的「狗窩」,在這裡,你放浪形骸無拘無束,角落裡藏著什麼都清清楚楚。不過如果你想學到新事物並且能夠迅速成長起來,那麼首先你得離開這個「安樂」的地方,自己在學海裡迎風破浪「苦作舟」。

當然,如果你感覺不堪重負,那麼其實矯枉過正,已經處於恐慌的境地了。可憐的你,風浪太大掉海浬了!現在唯一能做的就是盡量保證自己能活著等別人來搭救。

而正如上圖所示,在到達恐慌的境地之前的最高點,我們能學得更多,成長得更快,變得更優秀。找到你的學習最高點。

舒適地坐下來,閉上眼睛,平穩的吸氣呼氣。感覺一下噹噹空氣流出你的鼻子流過上嘴唇**帶來的美好。什麼都別想,好好感受。

大腦放空多久了?有五分鐘了?可能不會。一分鐘?太棒了。20秒或者更少?好吧,這才是正常值。你的思緒就像乙隻猴子,它在樹上跳來跳去,看到哪個枝幹最近就抓著哪個跳過去。你可能還不理解,我再重新用專有名詞表述一下:現在比較流行的說法是聯想性思維。如果你想發明創造,那麼聯想性思維絕對是不可或缺的好工具,但是它卻是專注的殺手。幸運的是,專心致志是可以學習的。現在有非常非常多號稱「能提高生產力的高科技」,但是都還停留在表面因素。誰都不希望在寫軟體的時候,思緒飄啊飄得在想義大利面怎麼做才更好吃。我們需要馴服這只頑皮的猴子,一勞永逸。

英文原文:9 things i learned as a software engineer

軟體工程師必學的9件事

三年前,我還在巴塞隆拿的神經科學實驗室工作,忙著研究腦電波 教授心理學上的認知系統課程。而今天,我以設計和寫軟體為生。你或許會滿頭黑線 隔行如隔山,這轉變也忒快了吧。其實不然,早在以前我就已經寫過很多軟體了 比如想理解掃瞄出來的有40gb那麼多的大腦資料,我得捋起袖子 埋頭苦幹,寫個能緊縮這些資料的...

軟體工程師招聘需求

我們又很多軟體工程師需求,有意向的和我聯絡 c 高階工程師 任職要求 1.大學本科及以上學歷,計算機相關專業畢業 2.良好的英語閱讀能力 學習能力 溝通能力及團隊協作精神,能夠承受一定工作壓力 3.紮實的 c 程式設計功底,精通 win32 mfc 和多執行緒等技術 4.五年以上 visual c ...

軟體工程師應該寫作

在小學,有一些 數學天才 和 語文天才 你們由於在其他孩子印象中各自的強項而被貼上標籤。我曾是乙個所謂的 數學天才 所以我主修電腦科學並嚮往去做乙個軟體工程師。雖然一直以來 數學天才 或 語文天才 這樣的稱號從來沒有真正的磨去,但只要可以把任何事做強。如今我見過的工程師畏懼寫東西,我見過的作家也同樣...