三板斧!助你成為優秀軟體工程師

語言: CN / TW / HK

雖然前面討論了很多編寫程式碼的方法,但優秀的程式碼最終還是出自優秀的軟體工程師。本節介紹如何成為一名優秀的軟體工程師。

首先澄清 幾個誤區 ,一名優秀的軟體工程師和以下因素沒有必然聯絡。

(1)寫了多少年程式。

(2)寫了多少行程式碼。

(3)曾經在哪裡上學,曾經在哪裡工作。

我將一名優秀軟體工程師的修煉方法總結為以下 三句話

(1)學習—思考—實踐。

(2)知識—方法—精神。

(3)基礎乃治學之根本。

下面將對這三句話做詳細解讀。

路徑一:學習—思考—實踐

1. 學習

對於一名軟體工程師來說,學習是非常重要的事情。

軟體編寫的歷史已經超過半個世紀,有太多的經驗可以被借鑑。非常遺憾的是,很多軟體工程師雖然工作多年,但是卻沒有對前人和大師的經驗進行過充分學習,在很多方面沒有使用正確的方法。

在學習途徑方面,我推薦大家優先閱讀相關圖書。很多軟體工程師主要通過閱讀部落格或微信公眾號上的文章來學習,其實很多內容質量遠不如經典圖書。另外,我還建議大家選擇一些高質量的開原始碼來研究,以提升自己在閱讀程式碼方面的品位。

有些讀者對於持續學習缺乏足夠的動力。這裡我想到蘋果創始人喬布斯的一句話:

Stay hungry, stay foolish. (求知若飢,虛心若愚。)

也就是說,只有自己感覺到“飢餓”和“愚笨”,才會去學習。

關於學習,希望讀者養成“學習的習慣”,以及培養好“學習的能力”。我曾做過多次調研,發現很多人在一年內閱讀的圖書不超過兩本,這遠遠少於大家在大學時的閱讀量。在一個不斷髮展的社會里,如果5~10年不學習,一個人很快就會“過時”。

建立起不斷學習的習慣很重要。我還發現有一些人不會學習,對於所閱讀的內容抓不住重點,這就是“學習能力”比較薄弱,建議大家可以看看《如何閱讀一本書》,書中深入地介紹了正確而高效的閱讀方法。

2. 思考

古人說,學而不思則罔。

即使學習了一些知識和方法,也獲得了一些實踐的機會,但是如果不去思考,就不能形成自己的思想體系,這就相當於白學和白乾。

一方面, 在經過思考之前,所學到的知識或方法還只是外在的,如果不能在思考的基礎上去深入理解,就很難靈活地在工作中使用; 另一方面, 現實情況經常和書本中的內容有一些差異,需要在工作中通過思考來判別差異,總結經驗,形成符合實際情況的方法論。

3. 實踐

在學習和思考的基礎上,還要勇於實踐。

有些讀者在經過學習和思考後知道了什麼是好的方法,但是在面對工作中的問題時,卻仍不敢去實踐。

在實踐中,我們需要有“知行合一”的精神。以前,北京大學有位老師叫湯一介,關於“真、善、美”曾做過一個總結,我認為總結得特別好:

天人合一,謂之真;知行合一,謂之善;情景合一,謂之美。

從我的經驗看,所有的進步都來源於失敗的經歷和遭遇過的挫折。沒有哪個方法是經過一次學習就可以馬上掌握的,所有成功的方法都需要在實踐中不斷體驗和調整。一個人的學習速度,從某種意義上決定於他犯錯的速度,在這方面成年人反而不如小孩子。小孩子學說話學得很快,就是因為這是一邊犯錯、一邊糾正的過程,小孩子學走路也是一樣。成年人怕犯錯,所以往往不敢嘗試,學習的速度也就慢了下來。

路徑二:知識—方法—精神

1. 知識

對於認為“軟體工程師只能工作到35歲”的人,其中一個論據就是軟體工程師經常需要學習,擔心年齡超過35歲之後就學不動了。

如果只是學習新知識,確實如此。在這個知識大爆炸的時代,知識是過時最快的。對於軟體工程師來說,由於不斷湧現出新的程式語言、新的系統、新的概念……,所以只學習知識的人,總是感覺世界變化太快。

如何解決這個問題呢?這需要我們不僅僅要學習知識,而且要學習方法。

2. 方法

如果我們從“方法”這個角度來看待世界的變化速度,就會發現其實變化速度並沒有那麼快。我在本書中介紹的內容,在很大程度上都不是新知識,而是在20多年前就在學校學過的,它們至今仍沒有過時。有些方法,歷經幾千年都不會過時,比如《老子》中介紹的方法,雖然只有幾千字,但卻能給人留下深刻的印象。

相對於“知識”,“方法”這個詞總是讓很多人感到很“虛”。但是這個“虛”(的方法)可能比那個“實”(的知識)更有價值。最深刻的方法其實是不可言傳的,正如《老子》中的一句話:

道可道,非常道。

(如果“道”可以說出來,就不是永恆的“道”了。)

對於軟體工程師來說,分析問題、解決問題的能力才是最重要的。其實,這就是“研究”的能力。

關於“研究”,20多年前加州理工學院的Steven Low老師曾在給我的一封郵件中給出過一個很好的定義:

To Identify the Fundamental Problem, and Solve it.

(去識別、定義那些最重要的問題,並解決。)

3. 精神

即使有了知識和方法,To be or not to be永遠都是一個問題。前進的路上往往不是鮮花和掌聲,而是困難和荊棘。人類總是在神性和獸性間不斷鬥爭,進步往往來自對理想的追求。

關於精神層面,這裡送給大家三句話,供參考。

(1)獨立精神,自由思想。 這是清華大學的陳寅恪為紀念王國維所寫的碑文中的一句。這塊碑位於清華大禮堂附近的第一教學樓旁邊。我一直認為這是清華大學“自強不息,厚德載物”之外的另一個重要校訓。

(2)Don’t follow(不要跟隨)。 這是20年多年前UCLA(University of California, Los Angeles,加州大學洛杉磯分校)的張麗霞老師送給我的一句話。當時我向張老師請教應該如何做研究,張老師的這句話令我印象深刻。

(3)對完美的不懈追求。 “完美”永遠是一個可望而不可及的目標。對於“完美”,我們需要不斷去追求。

路徑三:基礎乃治學之根本

有些軟體工程師在發展到一定階段後,會感到繼續提升很困難。對於一些規模稍大的專案,他們會感覺把握不住;對於一些方向,會感到無法持續深入。其實這些都是因為之前的基礎沒有打好。

于敏是2014年國家最高科技獎得主,中國氫彈元勳。于敏特別喜歡諸葛亮在《誡子書》中的格言,將其視為座右銘:

非寧靜無以致遠。

他也非常喜歡魏徵諫唐太宗的兩句話:

求木之長者,必固其根本;欲流之遠者,必浚其泉源。

他深知基礎乃治學之根本。

對於軟體工程師來說,需要具備的基礎能力如下。

(1)計算機學科的基礎知識和方法, 包括:資料結構、演算法、作業系統、系統結構、計算機網路等。

(2)軟體研發的相關知識和方法, 包括:基礎的軟體編寫方法、軟體工程方法、程式設計思想等。

(3)基本思考能力和溝通能力, 包括:邏輯思維能力、歸納總結能力和表達能力等。

(4)研究能力, 主要是分析問題和解決問題的能力。

對於一名軟體工程師,以上這些基礎的建立至少需要5~8年之功。

通過本文,希望大家對“軟體工程師”這個職業建立起正確的認識。軟體工程師不等於“碼農”,軟體工程師不能只知道怎麼編寫程式碼,還需要具備非常綜合的能力。

(1)程式碼可以是藝術作品,也可以是“垃圾”,關鍵在於編寫程式碼的人。 希望大家都能朝著藝術家的方向努力,努力把自己的程式碼變為藝術品。

(2)不要忘記我們為什麼出發。我們的目標是改變世界/格物致知,而不是學習程式設計或者炫耀技術。 最開始我認為,寫程式碼的目標是“改變世界”,但是後來我改變了想法,將目標轉變為“格物致知”。其實,我們工作和生活的更主要的目的是增加對這個世界的理解和認識。如果寫了多年程式碼,但仍然對寫程式碼的“道”沒有了解,那麼時間和生命就浪費了。

(3)好程式碼的來源不是寫好程式碼。好程式碼是一系列工作的結果,包括需求分析、系統設計、編碼、測試、上線和運營等。

(4)程式碼是寫給別人看的,而不是能正確執行就可以了。 對一名軟體工程師來說,寫出別人看不懂的程式碼則是失敗的。

(5)寫好程式碼是有道的。通過系統而持續的學習、思考,以及實踐正確的方法,我們自己也可以打造出精品。 一名優秀的軟體工程師的養成至少需要8~10年的積累,大家需要摒棄浮躁的心態。

本文節選自 《程式碼的藝術:用工程思維驅動軟體開發》 一書 ,想要了解更多相關內容,歡迎閱讀本書!  

如果喜歡本文

歡迎 在看 留言 分享至朋友圈  三連

點選 閱讀原文 購買:

程式碼的藝術:用工程思維驅動軟體開發(雙色精裝版)(博文視點出品)