軟體開發人員如何走好職業生涯前幾步?

出版圈郭志敏發表於2012-06-28

“如果國家的生活水平不停止改善的話, 我們就不會再有出身卑微的偉人。”———RussellP.Askue

軟體開發是一個美妙的領域,部分原因是它總是那麼有新鮮感、充滿活力。軟體行業的活力和變化的快節奏讓每個人都專注於個人成長和學習,這是絕對無法逃避的。有些人在變化和不斷的學習中迅速成長,而有些人則在痛苦中掙扎。雖然自始至終變化不斷,而且最佳實踐也在不斷重構,但整個行業裡有一個不變的事實:職業工作的第一個五年是最具教育性的。在這些年裡,你開始接觸到企業文化、組織動態以及公司政治。你需要作為一個團隊的成員來工作,而不是一個人單打獨鬥,通過與同事共享資訊、技術和其他資產(文件、程式碼、演示資料),你會茁壯地成 長。你會近距離地看到軟體領域平凡的一面(可能會有許多平凡的工作分配給你———總有人要做這些事,所以很可能就是你這位新手來做)。在技術方面,你會體會到企業級軟體是如何開發的,並親身體驗在大團隊中工作的活力。這些年的寶貴時間絕對需要重視和加以利用。花在職業成長上的時間是值得的。


行業技能

“程式設計師不是用聰明才智和邏輯性來衡量的,而是以他們案例分析的完整性來衡量的。”———A.J.Perlis,《程式設計格言》

儘管大多數應屆畢業生還沒有大型專案的工作經驗,但他們已經有了較強的程式設計能力。在加入一個新公司後,你可能希望學習公司先進的技術和複雜精密的產品。你可能會發現,比起你在學校裡的程式碼開發來說,雖然在企業裡的程式碼開發規模更大、更復雜,但也是萬變不離其宗。其實令新員工眼花繚亂的是行業技能。所謂“行業技能”,我是指本質上非常專業但過去在學校可能並未深入涉足的技能。對於那些有很多開發者要一起程式設計的大型專案而言,這些行業技能必不可少。比起我們在學校裡做的專案來說,現實世界的專案往往在可靠性、可用性、併發性或效能效率方面有更高的要求。其中有些方面在研究生課程中講到過,但即使是這些獲得計 算機科學碩士和博士學位的少數幸運兒也只是瞭解一點皮毛。

其中有些技能與我們如何規劃和開發程式碼有關,有些則涉及如何組織許多人(5人、50人甚至500人)協作開發程式碼。而還有些技能涉及軟體所執行的系統規模,可能有數百個CPU,以及成千上萬的併發使用者來操作TB或PB級的資料。比起單純的學術技能,軟體的行業技能就不那麼專業和抽象了,但就像學習彈鋼琴一樣,需要多年的經驗才能充分地掌握和理解。

我建議每一個軟體從業者在職業生涯的頭五年都去獲取這些經驗和技能。假如你還沒有機會獲得這些技能,從現在開始也不會太晚。

  • 至少學習四種不同的程式語言和至少四種不同的資料格式(如JPEG,
  • XML,分隔文字和MPEG)。
  • 開發至少能支援一千人併發訪問的軟體。
  • 開發可以擴充套件到超過1TB資料量的軟體。
  • 參加10個以上程式設計師一起做的專案。
  • 做既有程式碼的擴充套件工作,這些程式碼至少是5年前開發的,而且無法從原始作者那裡得到任何資訊。 解決至少40個別人程式碼中的缺陷。
  • 編寫支援國際化語言輸入的程式,包括UNICODE的輸入,以及支援兩種語言以上的使用者輸出(錯誤資訊,圖形使用者介面的文字,等等)。
  • 研究下列情形的效能特點。 無論是否存在CPU 快取未中的情況,都能從記憶體中獲取資料。 對比從磁碟連續塊讀取與隨機I/O定址。 對比大塊資料與小塊資料的I/O操作。 三種流行的程式語言(如Java,C/C++和PHP)。

軟體業的經營之道

如果你獲得了電腦科學、計算機工程或相關專業的學位或文憑,那麼你就已經掌握了一系列令人印象深刻的技術技能,可以在令人興奮和充滿活力的軟體開發領域施展這些技能了。但軟體業的經營之道可能是你的學校沒有傳授給你的,軟體是如何銷售的? 市場的本質是什麼? 銷售和營銷的流程如何? 在軟體行業中,最成功的人都努力地獲取這些流程方面的知識,即使這並不是他們的主業。其原因在於,如果你清楚地明白了流程是如何運轉的,誰是你的使用者以及使用者的期望是什麼,那麼你所做的一切都會得到提升。

建立領域專長

從長遠來看,職業上的成功在很大程度上依賴於你在某個領域要具備成為專家的能力:專家級的程式設計師、經理、測試人員或技術佈道師,或一個特定技術領域的專家(如資料庫、虛擬現實、實時通訊、客戶關係管理系統、移動裝置,等等)。你需要用整個職業生涯的關注和努力才能達到世界一流的專業水平。多數情況下,你最開始從事的技術領域並不會是你終身的事業,然而,你在職業生涯頭幾年所學到的一切都將有利於你將來的發展。程式語言會改變(有誰還在使用FORTRAN 或Pascal),作業系統、技術平臺、可程式設計裝置等也會改變。軟體行業的這種不斷變化已成為常態,但是,其中的一些特定領域(如電信、遊戲、影像處理、資料庫)的基礎知識和軟體產業的運作方式的變化是緩慢的。

溫故而知新

請記住,由於程式設計抽象化和程式設計介面的演化,今天的底層技術在將來會被淘汰。現在很少有人會從組合語言程式設計開始自己的職業生涯,因為現代CPU 的高效能和程式語言編譯器的高效率已經不需要程式設計師和CPU 再那麼親密。但是,那些曾經學會並掌握了組合語言程式設計的程式設計師今天依然很厲害,因為他們更深刻地理解系統的執行機制,而我們很少有人會獲得這樣的知識。彙編大師可以輕鬆地閱讀核心轉儲,還能看懂迷宮般的十六進位制程式碼和登錄檔項來除錯記憶體崩潰的問題,就像我們大多數人讀《星期日泰晤士報》一樣。但如果始終停留在彙編程式設計上,那就比較古怪了,雖然它偶爾會很有用,但已不是實現主要業務目標的主流技術。對於那些從組合語言轉型到C/C++、Java和其他程式語言的人來說,他們對CPU 及其與作業系統和記憶體之間互動的深入理解,是其技能的強大補充。他們能吸取新老技術的精華,能比別人更優雅更容易地設計、程式設計和除錯系統。正如組合語言曾是20世紀80年代的核心程式設計技能一樣,如今的底層程式設計技術也終將會被人們抽象出來。現在掌握這些技能而獲得對硬體的瞭解,會為將來擴充你軟體職業發展提供動力。RayTomlinson是電子郵件的最初發明者。他不僅是軟體界的先驅,也是少有的幾個始終走技術路線的軟體大師之一。如今,他仍然在做著軟體專案。當我採訪Ray時,他表示,在軟體開發領域,變化的事情越多,共性的東西也就越多。新技術擬在簡化流程卻經常引入新的複雜性,更多的記憶體被軟體的膨脹和大資料量所消耗,並且,雖然工具、平臺和語言也發生了變化,但軟體開發的基本原則卻保持不變。

軟體行業經常會出現一些新的、奇妙的東西,似乎可以用較少的人來完成目前需要很多程式設計師來做的事情,這樣程式設計師就可以騰出時間去做一些其他的事情。但實際上,這從未發生過。無論你如何輾轉騰挪,都只是在轉化同樣的問題,只是名稱不同而已。困難程度從未改變, 縱然你使用不同型別的工具、不同型別的物件、不同種類的程式設計實體和不同語言來工作,但這些仍然是類似的東西。你仍要試圖組裝這些互不匹配的東西,並設法讓它們能在一起工作。 ———RayTomlinson,電子郵件之父,BBN科技公司

觀察領導者

你可能會驚訝地發現,在組織中,許多身邊的專家們都是落後於時代的。他們還在談論五年前的技術,他們似乎並不瞭解你在學校裡學到的流行程式設計模式,也不懂得你的程式設計夥伴在業餘時間裡鼓搗的一些流行的新平臺。你或許覺得解僱他們比較容易。然而,這些人做到他們現在的位置是有充分的理由的,儘管他們可能不知道你在做什麼,但他們通常知道許多對軟體職業更重要的東西。他們知道如何建立大型系統;他們知道程式碼的好壞;他們知道可以安全地走哪些捷徑,而你這樣做的話就有風險;他們瞭解軟體開發的流程和軟體團隊的動態;也許最重要的是,如果他們已經在公司工作了一段時間,還清楚企業組織文化。通過學習這些人的經驗和智慧,你將受益匪淺。你可以學習如何生存,如何更好地適應組織而獲得成功,以及如何避免大部分初級程式設計師會掉入的陷阱(技術或政治方面的)。

著手建立你的人際關係網

利用職業生涯早期的幾年在整個業務領域構築一個人際關係網,把你將來可能會求助的人都拉入進來。請記住,這不是關於你知道什麼,而是關乎你認識誰。你在職業生涯中所交的朋友和建立的關係,在將來會對你有所幫助。在職業生涯的早期,與你一起工作的很多人也是相對初級的工程師——我們通常和同輩人一起工作。你可能會誤以為進入了一個無需發展人際關係的階段,畢竟,這些初級的工程師如何才能在未來的職業關係網中用得上?但是,生命的美麗之處在於我們都在一起慢慢變老。十年後的今天,你的職業發展將會大有進步,你的同事們也會。他們中有些人可能會為你工作,有些人可能是你的主管,有些人已經離開了,去了其他公司發展或開辦了自己的公司。但有一點是肯定的,你同事們的事業也會向前發展,其中一些人會取得一定的地位,他們在某時某地將能夠幫到你。這就是為什麼人際關係不只是一個被動接收的關係,你必須要付出才會有收穫。想辦法幫他人些小忙來儲存一些信任和感情債。從長遠來看,這些關係將推動你的職業發展。通過成功地建立一個支援你的大型關係基礎,在時機成熟時你就可以做更多的事情。也許更重要的是,同時你也建立了一個能夠向其提供幫助的關係人群。這是一個構建雙贏局面的經典模式。

Malcolm Gladwell在他的經典著作《引爆點:如何製造流行》中介紹了社會的相互作用如何導致深刻的變化。他說,變化的核心推動力之一是“個別人物法則”,意思是說,重大變化依賴於三類人:聯絡員、內行、推銷員。聯絡員擁有廣泛的社會網路,並且將人們彼此相互連繫。聯絡員跨越許多團體和界限去聯絡不同的人,而這些人通常是沒有交集的。內行了解相關領域的海量資訊並分享之。多產的部落格使用者可以被認為是內行。推銷員是有說服力和有魅力的人,可以激發其他人發現共通的觀點。總的來說,是世界上的聯絡員、內行、推銷員引發了變化。建立你的社交網路可以幫助你成為一個聯絡員。隨著時間的推移,如果你也能成為一個內行和推銷員,那麼這個三位一體的特點將使你成為一個可以呼風喚雨的人。如果不能成為一個有魅力的推銷員或擁有資訊的內行,那麼你可以通過一些推銷員或內行朋友的幫助而取得成功。如果你在關鍵的地方認識足夠多的人,你的交際網路會幫助你把事情搞定。特別是,如果你能為你的關係網路注入適當的回報,做些有助於他人的活動,那麼當你需要他們幫助的時候,他們就可能會很樂意地給予你回報。這就是所謂的善有善報。如果你擁有廣泛而深厚的人際關係網,那麼你會在發展道路上受益匪淺。

你想成為哪種人

你從事軟體的頭幾年會接觸到軟體開發的流程和軟體業的經營之道。在這些年裡,你會了解到在軟體業存在著哪些不同角色,瞭解與之伴隨的壓力、挑戰、機遇和喜悅。為了明確什麼才是職業的成功,最重要的一件事情就是要想好你想成為什麼樣的人。很多人試圖從技術選擇上客觀地思考自己的未來,但這個路徑相對來說比較難分析,因為技術總是在不斷變化著。另一種規劃職業發展的合理方法就是環顧整個組織,觀察你周圍高層人士的日常工作,並考慮以下兩個問題。 (1)在這些人中,我在職業生涯中最想模仿誰?我相信我會喜歡做他們所做的工作。

(2)這些角色中哪個適合我?可以想象我能和這個高階員工一樣把工作做好甚至更好。

思考這些問題將有助於你開始確定一個未來職業發展的願景。一旦形成,這個願景就可以指導你的職業發展。沒有什麼是永恆不變的,隨著時間的推移,我們中的大多數人會改變自己的目標。但一開始就設想你想成為什麼樣的人,是職業發展過程中的第一步,也是最關鍵的一步。

人人都需要導師

導師可以和你分享智慧的珠璣(我並不是說你看完這本書之後就需要馬上找一個),可以對你的行為提供一些個人意見。你的經理可以一直是你的導師,但有一個上下級關係之外的導師將是有益的。有幾個原因,可能最重要的一點是,在多數大大小小的公司裡,一個經理管理著若干員工,他不可能總是像同事一樣深入地看到每個員工的技術貢獻。其次,導師的優勢在於對程式設計技巧、除錯策略或到哪兒去找工具和找人幫忙等方面有許多獨到的見解,而你的經理可能不能立即提供現成的幫助。我在IBM的第一位導師教會了我很多程式設計的藝術,幫我對C語言和程式設計工具有了深刻的見解,這些大大提高了我的生產力。我的第二位導師教會了我關係型資料庫系統及其內部架構。後來的幾位導師指導我的職業發展方向和政治洞察力,有時給我極具建設性的反饋意見。沒有這些導師,在IBM我絕不會有這麼大的成就。一個好的導師會給你幾個方面的指導:技術、組織和政治。無論你在一個小的創業公司還是一家大型實體公司,有人指點你總是有好處的。這些可能都是顯而易見的,最後分享幾個不那麼明顯的要點。

  • 你必須主動地找一個導師。不要指望有人會替你安排一個無所不知的大師,花費大量的時間照看你的職業生涯。為自己尋找一個感覺合適的、有適量的時間來指導你的人。

  • 如果指導過程運作良好,你會讓導師花費不少時間和精力,特別是當你是個新人時。你要對導師長懷感激之情,並看看可以做些什麼來回報他。

  • 確保你與導師之間有一個約定,通過面對面的討論或電子通訊(即時聊天或電子郵件)讓你得到定期和不定期的指導(也許一天兩次,如果你是新人的話會更多)。提前設定期望值是很重要的。如果你每天都問很多的問題,而你的導師卻期望的卻是每三個月一次的正式會議,那麼這種落差會令人沮喪並引起導師的不滿。

  • 你在職業生涯的不同階段,需要不同的導師來指導不同的方面。在早期,你可能需要他來指導你技術上的問題,或如果你是新人的話,需要他來指導你團隊的有關工作流程。而隨著你的職業生涯向前發展,你可能需要他來指導你的事業發展和商業戰略的洞察力。

快樂孕育成功

2005年,谷歌副總裁Marissa Mayer在她的母校——她學習電腦科學和人工智慧的史丹佛大學,做了一次主題演講。在她演講後面的問答環節,她被問到自己事業的成功歸功於什麼。她當場回答:“我喜歡工作。這很有助益。”

你若開心,時間就過得很快,當工作是純粹的享受時,也很容易集中注意力並努力地工作,且會工作更長的時間。在認知和工業心理學研究領域,一項重要的研究是關於工作滿意度與生產力之間的關係。直觀上,我們似乎都感覺到,當我們熱愛所做的事情時,就會做得更好,也會投入更多的精力和興趣在所做的事情上。然而,工作滿意度與生產力之間的關係一直並沒有得到科學的論證,直到2001年由Judge等人所做的大型研究 T. A. Judge, C. J. Thoresen, J. E. Bono, G. K. Patton,“The job satisfactionjob performance relationship: a qualitative and quantitative review.” Psychol Bull, vol. 127, no. 3, pp. 376-407, 2001.才發現了二者的關係在某些工作上是緊密相關的——具體說來,就是包含智力複雜度的工作。如此看來最重要的是,為了達到最佳狀態我們需要點燃激情,激勵自我。這就是為什麼軟體工作,鑑於其複雜性,是最受工作滿意度影響的工種之一。

對工作滿意的話,不僅會令你工作得更有效率、更有創新性、更有熱情,也會支撐你持續工作幾十年。很多人認為他們是為了工作而工作,但你的工作卻是一項事業,將經久不衰。在這麼漫長的時間裡,始終保持這種高漲的熱情本身就是一個挑戰,而且是很重要的。事業的成功與工作滿意度是相輔相成的。成功會給你機會做愉快的事情,而做愉快的事情會幫助你更成功。

一個古老的禪宗格言說:“痛是難免的,苦卻是甘願的。”不幸的是,每一項工作都有不愉快的責任、痛苦的義務和偶爾的失敗。這是軟體行業令人不愉快的一面。但幸運的是,軟體公司通常會提供一種環境,讓員工有一些更愉悅(或娛樂)的活動,而這些活動不屬於其正式的職責。如果你把大部分的時間都花在工作職責範圍以外的事情上,那是錯誤的,甚至可以說是沒有職業道德,但是你通常可以用10%~20%的時間去做工作之外的事,如果你下班後還會加點班,這個比例還可以更高。當然,什麼是樂趣在很大程度上取決於個人,所以看看下面所列的事情,考慮一下你會喜歡哪個。

  • 把一個全新的技術或專案分拆為臭鼬工廠的工作
  • 發明一些專利。
  • 發表專業論文、白皮書或技術文章。
  • 在著名學術會議或在科學期刊上發表科學論文。
  • 寫一本書。
  • 在有異域風情的地方舉辦的會議上發言(或者協助舉辦會議)。這樣,你總有方法能擠出一些時間去海灘休閒或遊覽名勝古蹟。
  • 幫助公司搞定了一個數百萬美元的交易。
  • 主持一個工業委員會,這有助於建立一個全行業的方向或標準。
  • 指導更多的初級員工和培養下一代領導人。
  • 為同事組織跟工作相關或不相關的社會活動。
  • 為你的公司或當地軟體公司聯盟和大學組織一系列很棒的演講。
  • 幫忙製作一個新的YouTube視訊來展示你正在開發的技術。你不是一直想成為一個電影製片人嗎?

我知道許多人已經做過上面所列的這些事情,這樣做使他們更享受職業生涯。這只是隨便舉的一些例子,你還可以新增更多。像這些活動,就像是你往工作中投放的佐料一樣。它們不是必需的,但是它們可以為你的工作帶來很多的熱情。看看以下這些有趣的發現。

(1)成功的人通常能夠做到只用少部分工作時間和加班時間就能完成這些事。大部分的僱主對這類活動都讚賞有加,為什麼不去做呢?

(2)這些事能讓你的簡歷看起來更漂亮,並間接地促進你職業的發展。雖然這些事都不如在份內工作中取得驕人業績,但它們能起到錦上添花的作用,使你穩固的事業看起來就像一個跨行業的領導事業。比較圖5-1中Bob Smith和John Doe的簡歷。Bob和John有著非常類似的教育和工作經歷,他們都是非常優秀的員工,但John多年來一直在花時間做一些有趣的事情。在過去的十年中,他所做的這些已經開始產生積聚效應。如果你要招聘一名經理,通過看這兩份簡歷,誰會是你中意的人選,你會讓他來參加高階職位的面試?(請注意John的簡歷中的“特長”部分。)如果你正在評估員工的晉升,John的優點對你的影響有多大呢?

enter image description here

相關文章