“回車鍵”究竟回的什麼車?成爲專業人士的必修讀物

和傳統行業(媒體與寫作除外)相比,軟件行業的作家似乎要多出不少,這可能是因爲程序員的本職工作就是敲鍵盤,因此額外敲出一些字不算難事。但更可能的原因是軟件行業在幾十年來迅速發展、規範,在短短的時間內完成了許多傳統行業需要上百年乃至上千年才能完成的過程,因此在這一過程中可以說的話題就額外多,而程序員作爲一種典型的知識工作者,其平均素質也較高,因此更容易整理與表達自己。如今,“軟件”行業已經成了一個非常龐大而細分的產業,“程序員”也包含了諸多細緻到外界無法區分的類別,但在外界看來,“程序員”仍然是一羣沉默寡言、不易理解的傢伙。正如Bob大叔在本書中所講的,提到醫生、律師、會計的時候,我們都立即承認其專業性,但面對程序員時,卻總是很難將其也歸類爲這樣的“專業人士”之列。而這本《程序員的職業素養》,正是爲了講述如何成爲一名“專業人士”而寫的。

在我看來,本書的適用範圍絕不僅僅適用於程序員,起碼在工程、能源這些傳統的工業領域,要成爲專業人士,這本書都有足夠重要的參考價值(當然對程序員來說,書中可以參考的內容會更具體與深入一些)。在軟件行業(姑且用此泛泛的名稱)發展的幾十年來,迅速地完成了從粗放到細緻,再到不斷迭代改進的階段,和傳統的工業行業相比,這種進步是及其迅速的,也是其內在的特徵決定的:一段軟件如果不足夠規範,就無法通過編譯,即使是大小寫或者標點符號的錯誤,都可能引起編譯器的迷茫;一段程序如果在邏輯上有一丁點兒疏忽,就有可能將整個系統帶入到缺陷的深淵之中……與其他任何類型的工作相比(或許財務工作除外),這種要求都是非常嚴苛的。當然,工程上的關鍵環節要求的嚴苛程度及其後果不會比軟件行業低,但是並沒有到對每一個從業人員的每一個操作步驟都嚴苛到如此吹毛求疵的程度。軟件行業的發展與規範也正是因爲這些要求才形成的,而工程行業由於尺度原因則無論怎樣推行項目管理都無法達到軟件行業的標準化程度。在這個意義上,任何關於軟件行業與軟件從業人員的書籍都值得工業領域其他人員進行學習和研究,以求在自己的領域上獲得發展的靈感與參考。

在原則上,這本《程序員的職業素養》中關於職業素養的內容,與行業並無關係,只是作者Robert C Martin(Bob大叔)本職工作是程序員,書中的案例與實踐都是程序員行業而已。書中講到的要素包括,如何理解專業主義;專業精神及有效承諾(如何堅定對無法承諾的事情說“不”與如何做到承諾是專業精神的底線);如何管理工作的狀態,調整自我的工作狀態、保持節奏以及面對阻塞與困難(向同僚求助是Bob大叔提出的非常有建設性的意見);如何對工作進行預估與測試;如何進行練習(有意識的艱苦練習對成爲專業人士是必不可少的);如何管理時間、應對壓力、與人協作,成爲有凝聚力的團隊一份子;專業人士如何經過學徒期與熟練期併成爲大師。這些要素對任何一位專業人士而言都是重要的,而書中的內容也非常具有參考價值。是Bob大叔42年程序員生涯的精華總結。

之所以強調本書在工業領域同樣非常合適,主要原因當然和我從事與熟悉工程領域有關,但更重要的是軟件行業與工業行業在模式上相當接近,彼此有很多相通與值得借鑑之處。尤其在項目實施與工程管理方面,傳統工業有必要向軟件行業借鑑更多的思路與方法。

在本書的最後一部分,Bob大叔提到了細節。在編程工作中,編碼永遠不是最重要的內容,細節纔是。他提到了編程中最重要的字符\n和\t,前一個代表換行而後一個代表回車。在如今,已經幾乎沒有人知道這兩者的區別了,但是程序中還是會混雜着\n、\n\t以及\t\n這樣的內容。究竟是爲什麼呢?

答案是這是打印機時代的遺物,在打印機時代,當一行文字打印完之後,你必須先換行,才能保證打印頭將內容打印到下一行上,然後,你需要回車,因爲打印頭放在一個被稱爲“車架”的設備上,回車意思是將車架回到第一個字符的位置,這樣你才能開始在下一行開始打印。如今對大部分電腦使用人來說,換行與回車的操作都通過一個“回車鍵”實現了,我們並不關心“回車”是將什麼車回到了哪裏。但對程序員來說,這細微的區別也可能導致程序的崩潰,因此,即便是這樣的細節,也要引起足夠的重視。

以下爲書中部分精彩段落:

管理層一遍又一遍地向我們強調這些截止日期的重要性。如果延期一次,政府就會把我們列入當年的黑名單;而如果客戶們沒有在第一時間和我們簽約,他們就會和別的供應商簽約。如果拿不到訂單,我們就徹底出局了。

職業發展歸根結底是自己的事。僱主沒有義務確保你在職場能夠立於不敗之地,也沒有義務培訓你,送你參加各種會議或者給你買書籍充電。將自己的職業發展完全依賴於僱主的人會很慘。

堅持學習:你會找那些已經不看醫學期刊的醫生看病嗎?你會聘請那些不瞭解新稅法和會計法則的會計嗎?你會求助那些不瞭解當前的法律條文的律師嗎?那麼僱主們會什麼會聘請那些不能與時俱進的開發人員呢?

真正的專業人士往往勤學苦練,以求得自身技術的爐火純青。只完成日常工作是不足以稱爲練習的,那隻能算是執行性質的操作,而不是練習。練習是指日常工作之外的專門練習技能以自我提升。

專業人士不需要對所有請求都回答“是”。不過,他們應該努力尋找創新的方法,儘可能做到有求必應。當專業人士給出肯定回答時,他們會使用承諾用語,以確保各方能明白無誤地理解承諾內容。

專業開發人員的“完成”只有一個含義:完成,就是完成。完成意味着所有代碼都寫完了,所有測試都通過了,QA和需求方已經認可。這纔是完成。

會議的成本實際是很昂貴的,包含了工資、福利、設備等因素。關於會議由兩條真理:第一,會議是必須的,第二,會議浪費了大量的時間。專業人員清楚會議的高昂成本,他們同樣清楚自己的時間是寶貴的。因此,如果會議沒有現實且顯著的成效,他們應該主動拒絕。

你應該明白,繼續待在會議室裏浪費時間,繼續參加沒有太多意義的會議,是不專業的行爲。因爲你有責任合理分配老闆給你的時間和金錢。

即使有壓力,專業開發人員也會冷靜果斷(想一下手術檯上的外科醫生)。儘管壓力不斷增大,他依然會堅守所受的訓練和紀律,他知道這些是他賴以戰勝由最後期限和承諾所帶來的壓力感的最好方法。

讓你的團隊和主管知道你正深陷困境之中。告訴他們你所制定的走出困境的最佳計劃。請求他們的支援和指引。

有凝聚力的團隊通常有大約12名成員。最多的可以有20人,最少可以只有3人。

除了自身的內驅力和資深導師的有效輔導外,沒有東西能將一名年輕的軟件開發人員更快地提升爲敏捷高效的專業人士。

專業程序員最糟糕的表現是兩耳不聞窗外事,只顧一頭將自己埋在技術堆裏,甚至連公司業務火燒眉毛行將崩潰也不聞不問。你的工作職責是讓業務免於陷入困頓,讓公司可以長久發展下去。因此,專業程序員會去理解義務……簡而言之,他們會將注意力放在如何與業務同舟共濟上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章