新手程序員應(yīng)該知道的7件事
資深軟件開發(fā)人員分享的一些關(guān)于專業(yè)化編程的經(jīng)驗(yàn)和教訓(xùn),這些經(jīng)驗(yàn)教訓(xùn)都是經(jīng)過多年歷練總結(jié)得出的。
如果你剛進(jìn)入專業(yè)的軟件開發(fā)世界,那么得益于在計(jì)算機(jī)科學(xué)和編程方面的教育和/或培訓(xùn),你已經(jīng)具備了一定的知識(shí)。但是真正的開發(fā)業(yè)務(wù)工作又和在學(xué)校編程不同,這是你不可能從大學(xué)課程或編碼學(xué)校中學(xué)會(huì)的東西。
為了了解新手程序員需要知道哪些內(nèi)容,我咨詢了一些經(jīng)驗(yàn)豐富的編碼老將,這些“老”將全部有著至少十年(有的甚至是幾十年)作為專業(yè)軟件工程師的工作經(jīng)驗(yàn)。我的問題是,如果他們現(xiàn)在回過頭去,哪些技能和知識(shí)是他們***次以寫代碼為生的時(shí)候就希望能夠掌握的。無論你是一個(gè)剛畢業(yè)剛開始自己***份開發(fā)工作的大學(xué)生,還是年長(zhǎng)的轉(zhuǎn)業(yè)到編程領(lǐng)域的工作者,歡迎閱讀這7條專為新手程序員總結(jié)的建議。
1.了解底層系統(tǒng)
軟件開發(fā)的一個(gè)重要組成部分是,了解編程語言。但是,正如有些人建議的那樣,開發(fā)人員還需要了解堆棧下面是怎么回事。
“很多語言抽象化了系統(tǒng)層正在發(fā)生的事情,這種抽象是很有用的因?yàn)樗岄_發(fā)人員在大多數(shù)時(shí)間里變得更高效。”Pete Bul,Acquia公司的一位支持工程師說。“但是,當(dāng)你碰到一個(gè)障礙,一個(gè)特別堅(jiān)實(shí)的bug,需要更深層次地了解內(nèi)部究竟發(fā)生了什么的時(shí)候,那么了解底層系統(tǒng)就是一個(gè)很有用的技能,可以讓你調(diào)試進(jìn)程,查看系統(tǒng)調(diào)用,并且真正意義上看到代碼片段與系統(tǒng)的其余部分的交互,”他在郵件中這樣寫道。
無獨(dú)有偶,Robert Douglass,Customer Satisfaction with Platform.sh的副總裁告訴我,“當(dāng)我剛開始編程的時(shí)候,對(duì)于計(jì)算機(jī)我有很多不明白的地方。文件系統(tǒng),網(wǎng)絡(luò)連接以及內(nèi)存機(jī)制就是三個(gè)明顯的例子。不了解這些,意味著我可能會(huì)不知道一些我想要呈現(xiàn)的編程結(jié)構(gòu)的目標(biāo)。”
2.知道命令行工具
作為一個(gè)開發(fā)人員,你必然需要將大量的時(shí)間花在IDE或代碼編輯器上。但是,知道命令行這個(gè)工具有助于你更便捷地完成工作。
“有時(shí)候,你可能會(huì)處在一種需要緊急完成任務(wù)但工具卻非常有限的情境中。”一位已有20年工作經(jīng)驗(yàn),并希望能夠匿名的資深程序員告訴我, “知道shell就要像呼吸一樣自然。掌握類似于find、comm、diff、vi/vim、sed、awk等工具。知道如何用命令行來查找文件等等,都可以在你寫腳本的時(shí)候?yàn)槟銣p負(fù)。”
Bull,是一位先用微軟工具,然后逐漸轉(zhuǎn)移到Linux的程序員,對(duì)此表示贊同:“了解命令行的來龍去脈以及掌握所有的實(shí)用程序真的很重要。這是我經(jīng)歷過的切身體會(huì)。”
3.調(diào)試器是我們的好朋友
程序員很大一部分時(shí)間會(huì)涉及追蹤bug。Dave Varon,Novartis公司的一位生物信息學(xué)開發(fā)人員,著重強(qiáng)調(diào)了調(diào)試器的優(yōu)點(diǎn)以及它是如何減輕了時(shí)間的初始成本。 “一定要掌握如何使用調(diào)試器!”他告訴我, “磨刀不誤砍柴工,事先不妨花個(gè)一兩天時(shí)間進(jìn)行配置。如果沒有得到預(yù)期結(jié)果,那就調(diào)試:設(shè)置斷點(diǎn),逐步調(diào)試代碼,特別要注意第三方代碼。這可以避免很多挫折,也能讓你更好地了解那些只能通過閱讀別人的代碼才能知道的編碼知識(shí)。”
4.學(xué)習(xí)編寫測(cè)試
一些開發(fā)人員認(rèn)為,單元測(cè)試,也就是編寫測(cè)試來驗(yàn)證小單位代碼是否在做應(yīng)該做的事情,是非常關(guān)鍵的。Richard Handloff,Strategic Power Systems的數(shù)據(jù)庫(kù)開發(fā)人員,就是其中之一。 “我認(rèn)為我曾給那些想要學(xué)習(xí)編程的人提的***建議就是,要學(xué)習(xí)編寫良好的測(cè)試并且學(xué)習(xí)在進(jìn)程早期就開始編寫測(cè)試,”他在回信給我的郵件中這樣寫道。
5.積極應(yīng)對(duì)變化和學(xué)習(xí)新系統(tǒng)
大家都知道,現(xiàn)在的技術(shù)變化很快。這不僅適用于深受我們喜愛的消費(fèi)品,對(duì)于程序員使用的底層系統(tǒng)、語言和工具同樣如此。
Adam Wulf, Milestone Made公司的移動(dòng)開發(fā)者和創(chuàng)始人建議,要積極應(yīng)對(duì)變化,并始終保持在技術(shù)的前沿。 “現(xiàn)在,我的建議是每隔4年就得計(jì)劃去學(xué)習(xí)基本上全新的技術(shù)堆棧,”他說, “好的基礎(chǔ)知識(shí)永遠(yuǎn)是可用的,但是你每天要用的工具和技術(shù)差不多每隔4年就會(huì)完全不同。”
“項(xiàng)目永遠(yuǎn)不可能只用一種語言和一種框架,”一位不愿意透露姓名的開發(fā)人員說, “你不能吊死在一種技術(shù)上,要習(xí)慣于從一個(gè)項(xiàng)目到另一個(gè)項(xiàng)目的轉(zhuǎn)移,一種語言/技術(shù)到另一種語言/技術(shù)的擴(kuò)散,”他寫道。
6.良好的合作
盡管程序員習(xí)慣于戴上耳機(jī)獨(dú)自工作,但你依然要與其他人合作。Ben Miller,Sinclair數(shù)碼公司的CTO,強(qiáng)調(diào)了團(tuán)隊(duì)工作對(duì)于事業(yè)成功的重要性。 “大項(xiàng)目往往意味著大量活動(dòng)組件的碰撞,需要處理組件如何結(jié)合和劃分的問題,如果你不小心的話,可能會(huì)導(dǎo)致難以預(yù)測(cè)的工程問題。”他在電子郵件中寫道。 “在優(yōu)化算法之前,和團(tuán)隊(duì)一起確保沒有問題是交叉的,可以讓每個(gè)人要解決的問題都變得簡(jiǎn)單起來。編碼是一項(xiàng)團(tuán)隊(duì)游戲!“
Varon重申了人際交往能力的重要性,他說:“如果你通過再次查閱API和調(diào)試,依然不能弄清楚問題的根源,那就應(yīng)該尋求幫助。哪怕你覺得你寫的是杰作,也并不意味著沒有廢話或者不能更好。要和同事融洽相處。有時(shí)候只需要大聲地說出這個(gè)問題或許就會(huì)有靈光一現(xiàn)。“
一些匿名人士還分享了類似的想法,比如說成為團(tuán)隊(duì)成員。 “提升團(tuán)隊(duì)凝聚力,樂于助人,即使是一些瑣碎的工作,”他說。但是,在這種情況下,他警告說,“一定要有一個(gè)度,不要撿了芝麻丟了西瓜,忘記了自己的本職工作。”
7.不要害怕失業(yè)
Miller有一個(gè)特別有趣的忠告。 “跳槽就是晉升,”他告訴我。 “尋找解決問題最簡(jiǎn)單的方法,可以讓你的代碼彈性化和免于維護(hù),這樣你的上司就會(huì)交給你更多的事情。他們甚至?xí)竽銓⒛愕淖龇ń淌诮o別人,“他解釋說。 “總而言之,一味地?fù)?dān)心失業(yè)可能會(huì)阻礙職業(yè)生涯的前進(jìn)。”