每位新手程序員都應當了解的七條箴言
譯文資深軟件開發(fā)人員分享他們在多年從業(yè)當中學習到的,關于如何成功推進專業(yè)編程工作的種種真知灼見。
如果大家屬于剛剛涉足專業(yè)軟件開發(fā)世界的新人,各位可能會以為自己完全能夠憑借著多年來在計算機科學及編程領域獲得的教育及/或培訓順利玩轉一切。不過在這一行業(yè)浸淫多年的老鳥開發(fā)者則希望提醒大家,單憑科班灌輸?shù)闹R還遠遠不夠,我們還需要從實踐當中了解到更多***指導性的寶貴財富。
為了掌握這些真知灼見,我與多位經(jīng)驗豐富的資深開發(fā)人員進行了溝通——他們至少在軟件技術領域擁有十年乃至更長的從業(yè)經(jīng)歷(有幾位甚至已經(jīng)從業(yè)數(shù)十年)。提到他們希望自己在剛剛畢業(yè)并初次涉足編程行業(yè)時能夠了解到哪些箴言,他們都有著自己的答案。無論大家是剛步出校門的應屆生還是已經(jīng)在編程領域有些心得的從業(yè)者,下面這些來自老鳥們的建議相信都能在未來的發(fā)展道路上幫助各位找到正確方向。
了解與底層系統(tǒng)相關的一切
當然,軟件開發(fā)工作當中的重要組成部分之一正是編程語言本身。不過正如各位前輩所分享的心得所言,開發(fā)人員同樣需要了解堆棧之下所發(fā)生的一切。
“很多語言會以抽象形式將系統(tǒng)級別的運作機制剝離出去,而這種抽象性確實非常重要,因為它允許開發(fā)人員在大部分時間內(nèi)保持更高的生產(chǎn)效率。”Acquia公司技術支持工程師Pete Bull指出。“不過當大家遇到障礙或者說非常嚴重的錯誤時,則需要對引擎蓋之下運作的一切擁有相當程度的理解。我們需要有能力調(diào)試某項進程,并查看系統(tǒng)調(diào)用以真正掌握特定代碼片段與系統(tǒng)其余部分之間的交互活動,”他在采訪郵件當中寫道。
同樣的,Platform.sh公司客戶滿意度副總裁Robert Douglass告訴我們,“當我剛開始上手編程工作時,計算機本身還蘊含著大量我無法理解甚至聞所未聞的奧秘。文件系統(tǒng)、網(wǎng)絡以及數(shù)據(jù)如何駐留在內(nèi)存當中,這就是三個典型的實例。這部分知識的缺失,意味著我根本無法真正從編程角度出發(fā)了解開發(fā)項目中的某些目標。”
熟悉命令行工具
作為一位開發(fā)人員,大家很可能會把大量時間用在使用IDE或者代碼編輯器身上。不過需要提醒大家,如果了解如何在命令行上實現(xiàn)同樣的操作,那么各位的日常生活絕對會變得更加輕松。
“有時候,大家會發(fā)現(xiàn)自己只能使用一臺配置一切就緒,但可用工具非常有限的設備,”一位已經(jīng)擁有二十年從業(yè)經(jīng)歷的資深程序員告訴我們。“要像熟悉呼吸那樣熟練掌握shell,包括find、comm、diff、vi/vm、sed以及awk等等。有時候利用正確的合作行編寫小型腳本來查找必須馬上進行修改的文件將非常重要——因為生產(chǎn)體系很可能已經(jīng)受到了影響、而造成URL指向未知文件的那位技術人員還在斐濟度假呢。”
作為一位開發(fā)者,Bull最初使用的是微軟工具,但隨后逐步轉移到了Linux陣營。他表示“我已經(jīng)學習到大量與命令行相關的專業(yè)知識,并意識到Linux系統(tǒng)之上提供的這些功能的重要地位。現(xiàn)在我能夠輕松地重新調(diào)用幾年前自己編寫完成的代碼,或者拿出幾天或者幾周時間對grep + awk作出進一步改進。”
調(diào)試器是我們的好朋友
要想顯著節(jié)約寶貴時間,非常重要的一點就是利用相關工具追蹤各類bug。Novartis公司生物信息學開發(fā)人員Dave Varon對于調(diào)試器的重要意義作出了強調(diào),并解釋了其如何幫助我們獲得遠超過初始學習成本的收益。“學習使用調(diào)試器,快快快!”他在采訪當中指出。“拿出一、兩天時間好好鉆研配置一番。在此之后,如果發(fā)現(xiàn)結果與預期不符,那么馬上調(diào)試:設置斷點、貫穿代碼,特別是第三方代碼。這不僅能夠幫助我們大大降低問題出現(xiàn)機率,同時也能夠讓大家在其間學習到很多原本只能通過閱讀他人代碼掌握的知識。”
學習編寫測試
一部分開發(fā)人員認為單元測試——具體來講,就是編寫測試以驗證小型代碼單元是否起到了其應有的作用——非常關鍵。來自Strategic Power Systems公司的數(shù)據(jù)庫開發(fā)人員Richard Handloff就是其中之一。“我認為我能給新人們提供的***建議,就是學習如何編寫出優(yōu)秀的測試機制,并在項目開發(fā)初期就制定出一套可行的測試方案,”他在采訪郵件當中寫道。
制定改變規(guī)劃,了解新型系統(tǒng)
時至今日,每位從業(yè)者都清楚地意識到技術正在快速發(fā)展轉變。這種現(xiàn)象不僅影響著我們心愛的客戶的實際體驗,同時也改變著底層系統(tǒng)、語言乃至程序員們?nèi)粘9ぷ魉褂玫母黝惞ぞ摺?/p>
Milestone Made公司創(chuàng)始人兼移動開發(fā)者Adam Wulf建議稱,新晉程序員們應當準備好——而且搶先一步——應對技術變革。“就目前來講,我認為大家應該以四年為周期就學習全新技術堆棧作好規(guī)劃,”他表示。“良好的基礎知識當然能夠始終發(fā)揮作用,不過我們每天所使用的工具乃至技術方案每過四年就會發(fā)生顛覆性的變更。”
“項目不應再利用單一框架以單一語言編寫而成,”一位不愿透露姓名的開發(fā)者建議道。“大家千萬不要在某個項目當中只使用一種開發(fā)方式,因此請盡快適應在不同項目之間進行語言/技術轉換的實際需求,”他在采訪郵件當中寫道。
與他人保持良好關系
盡管常規(guī)概念下的程序員都會戴著耳機在自己的小世界里埋頭工作,但不可否認的是,我們?nèi)匀恍枰瞬⒓鐓f(xié)作。Sinclair Digital Ventures公司CTO Ben Miller著重強調(diào)了作為團隊成員角色工作對于實現(xiàn)職業(yè)生涯成功的重要意義。“大型項目往往是由眾多活動組件構建而成,如果我們無法順利完成協(xié)作,那么組件的合并將成為一項不可能實現(xiàn)的任務。”他在采訪郵件當中指出。“在嘗試對某種算法進行優(yōu)化之前,請先與團隊進行溝通并確保任何能夠幫助團隊成員減輕工作壓力的任務分配規(guī)劃都已經(jīng)部署到位。編程是一項團隊競技項目,千萬別忽視了這一點!”
Varon還著重強調(diào)了人際交往能力的重要性,表示“如果大家無法自行完成API或者調(diào)試的審查工作,請借力于他人。我們自認為編寫出了一段堪稱杰作的代碼,并不意味著它就一定出色或者沒有進一步提升的空間。跟在大學里一樣,同處一室的其他同伴也面臨著同樣的問題,而且每個人都有可能找到了解決問題的***答案。與同事們建立起融洽的合作關系,有時候甚至單純向對方描述問題就足以幫助我們找到解決靈感。”
另一位不愿透露姓名的受方者也表達了類似的想法,即成為團隊中一員對于順利完成任務所起到的積極作用。“即使當前的工作比較繁重,我們也應當盡可能幫助其他成員解決各類難題,這將讓大家的職業(yè)生涯走得更加順暢,”他表示。不過在這種情況下,他也提醒大家“但請注意,要保證有理有節(jié)的幫助強度,否則我們很可能身陷其中而耽誤了自己的份內(nèi)職責。”
勇敢邁出自己的道路,以自由職業(yè)身份編寫代碼
Miller在這里提出了一項有趣的建議,而且乍看起來似乎難以理解。他在采訪中告訴我,“在工作之外編寫代碼更易于實現(xiàn)職業(yè)生涯提升。找到最簡單的問題解決辦法并對代碼進行免費的彈性設置與維護,那么客戶自然會提供更多工作供我們完成。他們甚至會邀請我們以教師的身份指導其內(nèi)部開發(fā)人員,”他解釋道。“簡而言之,過分擔心當下這份工作是否穩(wěn)定反而會阻礙職業(yè)生涯的健康發(fā)展。”
原文標題:7 things every new programmer should know