矽谷被公認是目前世界上雲集了最多優秀工程師和知名科技公司、創業公司的地方,吸引了全球無數投資者、創業者和工程師的目光。在矽谷工作的工程師,有著令人羡慕的職業發展前景,薪酬待遇。此外,他們出眾的教育背景,扎實的專業能力,創新的思維,專注的敬業精神也成為了其他工程師們學習的標杆。
成為一名矽谷的工程師可能是很多工程師的夢想。下面總結的一些建議,來自一些有關程式設計的網站、社交平臺和部落格,給出這些建議的人大多數也是工程師(當中包括在矽谷工作的),以及一些專門研究電腦科學的學者。如果你有志成為一名出色的工程師,不妨借鑒一下這些寶貴的建議和他們在工作中的經驗和心得,從而令自己在程式設計的學習和工作中不斷提高。雖然不是每個工程師都可以有機會在矽谷工作,但每個人都可以通過努力,讓自己變得更出色,甚至有一天,你會比在矽谷的工程師更加優秀。
- 精通一種程式設計語言
程式設計語言是一種用來對電腦進行操控的工具。精通一種程式設計語言要比對一堆程式設計語言都只是略懂皮毛要好。程式設計是一門專業性很強的工作,它對工程師的要求也是很嚴格的。優秀的工程師必須精通至少一種程式設計語言,能夠輕鬆地解決所碰到的問題。
- 成為一名系統的調整員(tuning)
成為一名系統的調整員,這意味著當你在進行調整的時候,你對你的代碼有一個很好的構思模型。這就是說,當你的程式出了問題時,你可以對一些出錯的程式作出假定,而不是盲目地進行修改直到你的程式正常為止。
- 有一個出色的程式設計環境構思模型
大多數的工程師都需要與外界互動,因此瞭解你的程式設計環境是很重要的。這個包括了輸入 / 輸出,以及你的程式設計語言所提供的併發原語, 你的程式獲得外界資訊的方式(例如環境變數和命令列參數等),還有就是你的作業系統處理檔訪問,設備訪問,搜索路徑等等。
- 有一個出色的硬體構思模型
瞭解你所使用的硬體是如何工作的,這可以幫助你更有效地寫代碼。即使你正在使用一種更高級的程式設計語言,你仍然需要瞭解很多東西,例如調用堆、MMU、上下文切換的成本、記憶庫的層次結構,以及你所連接的網路特性等等,這些將讓你在做出程式設計決定時得到預示。
- 擁有出色的演算法思維
演算法是用來描述一種計算的一套步驟。演算法思維意味著你對於如何儲存和操作你的資料有一個很好的直覺,你可以做到反覆運算和回歸思考,並能夠對你的代碼的性能特點作出推理。
- 擁有很好的數學思維
雖然程式設計並不像行外人所想的那樣,需要很深奧的數學知識,但是當你著手處理一些比較棘手的問題時,你會發現如果擁有很好的數學思維會讓你的工作方便很多。很多有趣的程式設計領域,例如電腦圖形、信號處理和密碼使用法都要求要有深厚的數學知識。即使你只是在評估代碼的性能,它同樣需要一些統計思維。
- 能夠從零開始寫一個程式和快速寫代碼
從零開始寫一個程式是一個優秀程式師必須具備的能力。很多時候,嘗試一些不同的解決方案並從中選擇最有效的,這樣比只是不停地思考一種解決方法更有效。優秀的工程師還具有能夠快速寫代碼的能力。這種能力是通過不斷地學習,思考和實踐積累而來的。
- 擁有團隊合作精神
很多時候工程師要做的項目並不是從零開始的,而是要與其他人一起合作,共同開發一個專案,每個人負責部分工作,因此擁有團隊合作精神十分重要。和比自己優秀的人一起工作,樹立一個共同的目標,盡力幫助別人,而不是害怕競爭,這不僅有利於項目的順利完成,也有助個人能力的提升。對於團隊工作經驗不多的工程師,可以多參與一些社交平臺或社區的活動,看看那些神人們如何寫代碼,還可以通過參與討論,觀看程式設計直播,線上交流等方式來提高自己的能力和團隊意識。 Livecoding.tv就是一個不錯的社交平台,那裡聚集了世界各地的工程師,大家可以在線交流,討論如何寫代碼,還可以全程直播寫碼。
(livecoding.tv 上也有很多來自國內、台灣和香港的工程師通過平台直播寫碼。)
- 懂得如何構建你的代碼
一個結構良好的代碼可以讓你輕易地導航和上下通過抽象層。在一個結構良好的程式中,你可以不用理會那些無關重要的執行細節,並且你可以修改執行,並不需要在所有使用了代碼的地方進行修改。
- 通過實用的工具提高效率
這不是說一個優秀的工程師必須懂得使用所有工具,而是選擇適合自己和專案開發所需要的工具。很多工程師會在他們自己個人的社群帳號或社群平臺上推薦一些他們經常使用的程式設計工具和程式設計實例,多瀏覽這些資訊,從中你會得到很多啟發。在 livecoding.tv 上有應用於各種程式設計語言的工具介紹。感興趣的朋友,可以瀏覽他們的部落格。
- 透過開發實際的專案積累經驗
進行實際的專案開發是最好的讓一個工程師變得更優秀的方法。尤其是你要在壓力下開發一個專案,面對變化無常的客戶以及真實的多變的開發環境,還有很多真實發生的問題,這些困難會讓你快速成長成為一個優秀工程師。
- 每年開發一個喜愛的專案
每年開發一個自己喜愛的專案,直至它完成為止。這樣可以讓你突破自己的界限和讓你對開發專案保持興趣。這個專案可以是你有過體驗的並且是喜愛的,也可以是你不知道的一些事情。例如如果你已經懂得了遊戲開發,但不懂 Ruby,那麼你可以嘗試用 Ruby 來開發一個遊戲軟體。
- 站在終端使用者的角度來看待你的應用程式
優秀的工程師並不會是在封閉的空間裡編寫代碼就可以了,而是要站在終端使用者的角度去評估自己所編寫的軟體。終端使用者不是專業人員,他們通常會把軟體看作是一件神奇的工具,而在工程師的眼中,軟體是一個邏輯的步驟。也可以說,在工程師看來一件簡單而邏輯性的事情,在普通的用戶看來是很難理解的事情。因此,優秀的工程師會擺脫工程師的身份,用普通用戶的角度去看待在軟體中可能存在的「令人討厭」的問題。這樣也有利工程師更好地進行測試。
- 具有淵博的知識
電腦世界變化的速度是驚人的。工程師被認為是最接近電腦世界的職業,幾乎所有的科技新產品都得由程式師來寫代碼。因此一個優秀的工程師應該具有淵博的知識,狹窄的知識面會讓你的技能停滯不前,跟不上技術發展的步伐而最終被淘汰。你今天還在引以為豪的技能,可能突然會成為一種「過時」的技能了。因此,在程式設計領域中那些知識淵博的工程師,無一不具有這樣的特質:不斷地學習新的技能,並且銘記在過往使用那些技能時得到的經驗。
- 永遠不要停止學習和閱讀
一個真正優秀的工程師是從來不會停止學習的。在矽谷中的工程師也不例外。很多公司在招聘工程師的時候,也會很重視候選人對學習的態度。保持學習的態度可以體現在:閱讀大量的書籍,而不僅僅是流覽網站;以一種要提升自我的心態來閱讀,而不是只是為了最新的項目;同樣的,廣泛地閱讀,而不是只是關注最新的技術。此外,你還可以每年學習一種新的程式設計語言,瞭解這種語言的基本知識。這會有助你瞭解這種語言有哪些優勢,讓你在程式設計時會有更多新的想法。
最後,想和大家分享一些對工程師很有幫助的網站或社區:
.Stack Overflow: 這個網站相信大家都很熟悉了,這是一個為程式工程師提供技術交流的平台。無論你在開發設計時遇到什麼問題,都可以在網站上提出來,你會獲得很有幫助的答案。
.com: 這裡聚集的是世界各地的來自軟體開發,數據科學和設計領域的優秀人才。會員可以以自由職業者的身份接工作。該網站還會定期舉辦各種專業比賽。
.tv: 這個網站是 2015 年才上線的,但成長速度很快。最大的特色是程式師可以在線寮時直播編寫代碼,互相交流學習。它有別於其它的教育平台,因為這裡所開發的都是真實的產品,而且表現出色的工程師還可以有機會被一些公司聘佣。
(本文為作者 Chen Cherry 投稿刊登,圖片來源:dumbledad CC Licensed,未經授權請勿轉載。)
- 延伸閱讀:
【台大洪士灝】寫程式還不夠!成為「傑出」軟體工程師需要六項能力
工程師 12 年工作經驗教訓第一條:能解決問題的不是工具,而是思考!
資深工程師的血淚教訓:當了 35 年工程師,讓我後悔一輩子