本節書摘來自異步社群出版社《告别失控:軟體開發團隊管理必讀》一書中的第2章,第2.2節,作者: 【美】mickey w. mantle(米奇 w.蒙托) , ron lichty(羅恩•利克蒂),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
為了選擇合适的職員,我們還需要了解另一種看待程式員的方法。在上一節讨論的幾種類型中,我們側重考慮了程式員所從事的工作的類型(即用戶端、伺服器、資料庫、web)。實際上,從技術知識、實踐經驗和程式員的專長角度去考慮也是很重要的,按這樣的思路可以把程式員分類為:
系統工程師/架構師;
系統程式員;
應用程式員;
非真正意義上的程式員。
在所有開發類職員中,系統工程師/架構師是最有技術和經驗的。要想了解所有相關的系統元件(作業系統、通信系統、資料庫、線上/離線通路、安全性、硬體等)之間的複雜關系,需要對所有這些技術和系統都有豐富的專業知識和經驗。通常,在一個規模合理的團隊中,隻會有一兩個“真正的”系統工程師/架構師。傑出的系統工程師/架構師可以使團隊中的其他人表現得更好。他們的系統工作起來會更可靠,通常看起來也更簡潔。
gracenote就是由一個技術和經驗都很豐富的系統工程師/架構師創立的,純粹由他完成的設計和實作創造出了一種令人難以置信的可靠、可擴充而且靈活的服務。google公司的聯合創始人larry page和sergey brin也是類似的系統工程師/ 架構師,他們在設計和實作上培育的優雅風格幫助google公司在技術和商業領域都取得了成功。
大多數系統工程師/架構師都是從系統程式員做起的。系統程式員了解系統中所有元件的工作原理,包括用戶端和/或伺服器端的作業系統和通信系統。alan kay在他的博士論文[1]中引用了bob barton對其他程式員如何看待系統程式員的總結:
系統程式員相當于民間宗教中的大祭司。
——bob barton[2]
系統程式員負責編寫與硬體互動的裝置驅動程式,建立能夠為裝置驅動程式和應用程式執行提供運作時環境的作業系統,為其他程式員建立編譯器和調試工具,通常還會為其他程式員提供工具和服務用于傳遞程式。
在過去,對社交能力正常的人來說,被稱為系統程式員幾乎可以說是一種侮辱。我們認識許多系統程式員,他們的着裝和舉止如今已成為代表性的極客造型并流行開來。每當我們想起自己認識的那許多系統程式員,就會想到“我當極客的時候,極客還不受歡迎”這句話(順便提一下,我們兩位也曾經是系統程式員)。
在專業程式員、學生以及自稱為程式員的業餘愛好者中,絕大部分都屬于應用程式員。應用程式員開發的程式或其結果通常給終端使用者直接使用。應用程式員開發的程式包括文字處理軟體、電子表格、月曆、web浏覽器、itunes與windows media player之類的媒體播放器、遊戲等。應用程式也可以由資料庫程式員開發,以便對資料庫中取出或存入的資料執行特定的操作。資料庫應用程式包括财務軟體、機票預訂系統以及oracle financials之類的資料挖掘工具等。
一些應用程式員能夠跳出代碼本身的束縛,與應用程式的使用者産生同感,真正從使用者的角度看問題,進而很好地把握各種可視化、互動式的設計之間的細微差别。這樣的應用程式員很适合從事使用者界面(ui)的開發。如果讓這樣一位有天分的應用程式員與一名ui設計師(通常不僅有圖形設計背景,而且對人性甚至認知心理學都有所研究)合作,将産生一加一遠大于二的效果。
有一些項目(如macos的桌面ui——mac finder)側重于ui,要求整個團隊都由這種有天分的應用程式員組成。是以,ron在蘋果公司上司mac finder團隊時,在尋找和面試候選人的過程中,特别看重程式設計技巧和使用者視角。他認為:“隻懂得程式設計技巧的程式員在那個團隊中是無法取得成功的。”
開發團隊中有一些被稱為“程式員”的技術人員其實并不是真正意義上的程式員。他們當中有些人使用圖形使用者接口(gui)指定程式邏輯或商業邏輯,然後生成使用者可通路的應用程式;有些人則通過建立腳本或修改配置檔案來定制顯示的内容。這些“程式員”與真正的程式員之間的主要差别在于:他們使用現成的工具或應用程式,而不是自己直接寫代碼。
這類“程式員”有其重要性和價值,但他們的技術深度通常不能與我們所讨論的其他類型的程式員相提并論。随着程式設計工具的出現和日益強大,像這樣的程式員正變得越來越多,但在本書中我們不會直接讨論他們。
我們所介紹的許多程式設計技術也适用于這種另類的“程式員”。但根據我們的經驗,他們中的多數人僅滿足于把自己的工作做好,而不像“真正的”程式員那樣渴求學習、動力十足。