如何成為一個(gè)程序猿

本來(lái)主要思想來(lái)自開(kāi)源中國(guó)霜幼,部分內(nèi)容經(jīng)本人的自我體驗(yàn)镊讼。

對(duì)于剛開(kāi)始學(xué)習(xí)軟件開(kāi)發(fā)的新人來(lái)說(shuō)赢织,“必備技能”往往意味著一個(gè)長(zhǎng)長(zhǎng)的擎鸠、標(biāo)有重要度的學(xué)習(xí)列表揭鳞,但是過(guò)長(zhǎng)的列表通常會(huì)導(dǎo)致新人不知如何開(kāi)始學(xué)習(xí)炕贵,壓力倍增。本文嘗試列舉出最重要的幾個(gè)技能野崇,也期望通過(guò)此列表能給新人一個(gè)比較明確的學(xué)習(xí)重點(diǎn)和路徑称开。

深入學(xué)習(xí)一門(mén)編程語(yǔ)言

沒(méi)有掌握任何一門(mén)編程語(yǔ)言,就不可能成為一名編程人員乓梨。許多程序員試圖在學(xué)習(xí)之初一次學(xué)習(xí)幾種編程語(yǔ)言鳖轰,以便應(yīng)對(duì)他們第一份軟件開(kāi)發(fā)工作的需要。雖然我認(rèn)為開(kāi)發(fā)人員最終會(huì)學(xué)習(xí)多種編程語(yǔ)言扶镀,??但建議不要在開(kāi)始時(shí)這樣做蕴侣。??因?yàn)橥瑫r(shí)學(xué)習(xí)多種語(yǔ)言只會(huì)導(dǎo)致混亂,也會(huì)分散學(xué)習(xí)其它技能的精力臭觉。相反昆雀,我建議深入的學(xué)習(xí)一種編程語(yǔ)言辱志,這樣也會(huì)對(duì)使用這種語(yǔ)言編寫(xiě)代碼感到非常有自信。

如何組織代碼

新手程序員在完成編程語(yǔ)言的學(xué)習(xí)之后狞膘,或者最好在學(xué)習(xí)編程語(yǔ)言的同時(shí)揩懒,需要掌握的是如何正確的組織代碼。通過(guò)Steven McConnell所著的《Code Complete》挽封,可以幫助學(xué)習(xí)這個(gè)寶貴的技能已球。組織代碼意味著編寫(xiě)良好的、清晰可理解的辅愿、不需要大量注釋的代碼智亮,因?yàn)榇a本身是可自注釋的。許多軟件開(kāi)發(fā)人員究其整個(gè)職業(yè)生涯都不曾具備這樣的技巧点待,但是這個(gè)技能卻是判斷一個(gè)軟件開(kāi)發(fā)人員的技術(shù)和能力的首要標(biāo)準(zhǔn)阔蛉。良好的代碼結(jié)構(gòu)代表的不僅僅是完成了編碼工作,而是對(duì)編碼事業(yè)的熱衷奉獻(xiàn)亦鳞。對(duì)于新手程序員來(lái)說(shuō)馍忽,簡(jiǎn)潔清晰且含義明確的代碼棒坏,能讓你輕松地通過(guò)面試燕差。提升代碼結(jié)構(gòu)已經(jīng)成為了軟件開(kāi)發(fā)的重要部分,但是提升的過(guò)程卻是十分嚴(yán)格的坝冕。在這個(gè)過(guò)程中徒探,雖然不需要編寫(xiě)新的代碼,但是卻需要和團(tuán)隊(duì)成員一起花費(fèi)大量時(shí)間來(lái)維護(hù)現(xiàn)有的代碼喂窟。

面向?qū)ο笤O(shè)計(jì)

為了應(yīng)對(duì)軟件開(kāi)發(fā)中的面向?qū)ο笤O(shè)計(jì)思想测暗,開(kāi)發(fā)人員也需要學(xué)習(xí)一種面向?qū)ο蟮恼Z(yǔ)言。面向?qū)ο笤O(shè)計(jì)是一種設(shè)計(jì)復(fù)雜程序的方法磨澡,它將代碼分成了單獨(dú)的類和對(duì)象(類的實(shí)例)碗啄,這些類和對(duì)象封裝了一些特定的功能。我們一直試圖在軟件開(kāi)發(fā)中管理復(fù)雜性稳摄,用對(duì)象的方式思考就能幫助我們做到這點(diǎn)稚字。面向?qū)ο笤试S我們跳出一堆關(guān)系繁雜的組件,來(lái)清晰的定義和設(shè)計(jì)一個(gè)復(fù)雜的系統(tǒng)∠贸辏現(xiàn)在已經(jīng)有大量的功能性編程語(yǔ)言胆描,但是在軟件開(kāi)發(fā)過(guò)程中,你會(huì)發(fā)現(xiàn)那些最受歡迎的語(yǔ)言和模型都深受面向?qū)ο笤O(shè)計(jì)的影響仗阅。所以就需要深入的理解類昌讲、繼承以及如何使用,還有多態(tài)和封裝减噪。

數(shù)據(jù)結(jié)構(gòu)和算法

軟件開(kāi)發(fā)人員應(yīng)該熟悉以下的數(shù)據(jù)結(jié)構(gòu):

數(shù)組或向量

鏈表

堆棧

隊(duì)列

樹(shù)結(jié)構(gòu)

哈希

集合

掌握并熟練運(yùn)用以上的數(shù)據(jù)結(jié)構(gòu)短绸,能幫助開(kāi)發(fā)人員清晰的定義车吹、存取、管理數(shù)據(jù)醋闭。通過(guò)合理的數(shù)據(jù)結(jié)構(gòu)和算法礼搁,許多困難的編程問(wèn)題就能迎刃而解。

常見(jiàn)的算法有以下幾種:

排序算法

查找算法

圖搜索算法

動(dòng)態(tài)規(guī)劃算法

模式匹配算法

善于利用好的算法目尖,能起到事半功倍的效果馒吴。如果你對(duì)算法不夠熟悉的話,就很難提出一個(gè)好的解決方案瑟曲,這也就是需要我們掌握算法的原因饮戳。事實(shí)上,??數(shù)據(jù)結(jié)構(gòu)和算法也是軟件開(kāi)發(fā)中最有趣的領(lǐng)域之一洞拨。利用數(shù)據(jù)結(jié)構(gòu)和算法來(lái)開(kāi)發(fā)一個(gè)干凈扯罐、簡(jiǎn)潔的解決方案,效果會(huì)非常好烦衣。Gayle Laakmann McDowell的“Cracking the Coding Interview”書(shū)中介紹了有關(guān)算法和數(shù)據(jù)結(jié)構(gòu)的所有知識(shí)歹河。學(xué)習(xí)這些知識(shí)是一個(gè)挑戰(zhàn),但卻是非常值得的花吟。掌握其中的任何一個(gè)技能秸歧,都能讓你遠(yuǎn)遠(yuǎn)超過(guò)其他人。這些知識(shí)也正是其它軟件開(kāi)發(fā)人員所不具備的衅澈。

開(kāi)發(fā)平臺(tái)及相關(guān)技術(shù)

應(yīng)該至少對(duì)一個(gè)開(kāi)發(fā)平臺(tái)以及與之相關(guān)的技術(shù)或框架有一定的經(jīng)驗(yàn)键菱。平臺(tái)通常意味著操作系統(tǒng)(OS),但它也適用于與操作系統(tǒng)類似的其他抽象系統(tǒng)今布。例如经备,你可能是專注于Mac或Windows操作系統(tǒng)的Mac開(kāi)發(fā)人員或Windows開(kāi)發(fā)人員,同時(shí)你也可以是專注于特定Web平臺(tái)的Web開(kāi)發(fā)人員部默。具備某個(gè)特定平臺(tái)的專業(yè)知識(shí)侵蒙,不僅僅意味著需要熟悉平臺(tái)本身,還需要掌握開(kāi)發(fā)平臺(tái)常用的開(kāi)發(fā)工具傅蹂、模式和通用框架纷闺。

框架與技術(shù)棧

除了學(xué)習(xí)特定的編程語(yǔ)言和平臺(tái)外,學(xué)習(xí)并掌握一個(gè)框架和技術(shù)棧也是非常重要的贬派〖钡框架是一組用于在特定平臺(tái)或多個(gè)平臺(tái)上開(kāi)發(fā)代碼的庫(kù),它通常會(huì)使該平臺(tái)上的常見(jiàn)編程任務(wù)更加容易搞乏。例如波桩,大多數(shù)C#開(kāi)發(fā)人員使用.NET Framework編寫(xiě)C#應(yīng)用程序。.NET Framework由許多庫(kù)和類組成请敦,允許C#開(kāi)發(fā)人員在更高層次的抽象中工作镐躲。技術(shù)棧則與框架有點(diǎn)不同储玫,技術(shù)棧是一組通常包括框架的技術(shù),通常一起用于創(chuàng)建完整的應(yīng)用程序萤皂。技術(shù)棧使得創(chuàng)建應(yīng)用程序變得更加容易撒穷,??因?yàn)樗鼈兲峁┝嗽S多開(kāi)發(fā)人員用于開(kāi)發(fā)應(yīng)用程序的常見(jiàn)范例,因此可以輕松共享知識(shí)裆熙。學(xué)習(xí)技術(shù)棧是非常有價(jià)值的端礼,因?yàn)檫@意味著你擁有開(kāi)發(fā)完整應(yīng)用程序所需的所有技能。許多使用特定技術(shù)棧開(kāi)發(fā)應(yīng)用程序的公司入录,也在尋找熟悉該技術(shù)棧的軟件開(kāi)發(fā)人員蛤奥。

數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)

目前,?主要有兩種數(shù)據(jù)庫(kù)技術(shù):關(guān)系數(shù)據(jù)庫(kù)和文檔數(shù)據(jù)庫(kù)×鸥澹現(xiàn)在的開(kāi)發(fā)人員應(yīng)該很熟悉關(guān)系數(shù)據(jù)庫(kù)凡桥,但同時(shí)也應(yīng)該對(duì)文檔數(shù)據(jù)庫(kù)有所了解。在軟件開(kāi)發(fā)中蚀同,數(shù)據(jù)庫(kù)通常用于存儲(chǔ)應(yīng)用程序的數(shù)據(jù)缅刽。對(duì)于數(shù)據(jù)庫(kù),開(kāi)發(fā)人員至少應(yīng)該了解以下方面:

數(shù)據(jù)庫(kù)的工作原理

如何執(zhí)行基本查詢來(lái)獲取數(shù)據(jù)

如何插入蠢络、更新和刪除數(shù)據(jù)

如何添加數(shù)據(jù)集

源代碼管理

管理源代碼是任何軟件開(kāi)發(fā)項(xiàng)目不可或缺的組成部分衰猛。在使用源代碼之前,應(yīng)該有一個(gè)網(wǎng)絡(luò)來(lái)共享項(xiàng)目的所有文件谢肾。源代碼管理工具最基本的功能腕侄,是保留軟件項(xiàng)目中對(duì)文件所做更改的歷史記錄小泉。它還允許多個(gè)開(kāi)發(fā)人員同時(shí)處理相同的代碼芦疏,??并將這些處理代碼融合在一起。所有的開(kāi)發(fā)人員都應(yīng)該知道如何使用源代碼管理工具微姊,以便能夠檢查代碼并從多個(gè)來(lái)源融合代碼酸茴。

構(gòu)建和部署

目前,大多數(shù)軟件開(kāi)發(fā)項(xiàng)目都有一些自動(dòng)化的構(gòu)建和部署系統(tǒng)兢交。同時(shí)也有許多不同的軟件應(yīng)用程序薪捍,來(lái)幫助團(tuán)隊(duì)自動(dòng)化構(gòu)建和部署任務(wù)。

構(gòu)建

當(dāng)你編寫(xiě)代碼并將其合入到源代碼管理系統(tǒng)中后配喳,你想通過(guò)一些方法了解你合入的代碼是否運(yùn)行的很好酪穿,這就需要進(jìn)行構(gòu)建。構(gòu)建會(huì)編譯系統(tǒng)中的所有代碼晴裹,并確保沒(méi)有編譯錯(cuò)誤被济。一個(gè)復(fù)雜的構(gòu)建系統(tǒng)還可以運(yùn)行單元測(cè)試和用戶測(cè)試,或者代碼質(zhì)量檢查涧团,并提供一些有關(guān)代碼庫(kù)當(dāng)前狀態(tài)的報(bào)告只磷。

部署

部署系統(tǒng)負(fù)責(zé)將代碼部署到產(chǎn)品機(jī)器上经磅,或者將其部署到某種測(cè)試環(huán)境中。雖然開(kāi)發(fā)人員不一定要成為部署方面的專家钮追,但是了解系統(tǒng)的基礎(chǔ)知識(shí)以及構(gòu)建和部署代碼的過(guò)程也是非常的重要预厌。

測(cè)試

現(xiàn)在,很多的軟件項(xiàng)目都采用了所謂的敏捷流程元媚,軟件開(kāi)發(fā)人員和測(cè)試人員合作的更加密切轧叽。代碼質(zhì)量成為了整個(gè)開(kāi)發(fā)團(tuán)隊(duì)的責(zé)任,所以開(kāi)發(fā)人員也需要對(duì)測(cè)試知識(shí)有一定了解刊棕。

對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)犹芹,至少應(yīng)該熟悉以下的基本術(shù)語(yǔ):

1.白盒測(cè)試

2.黑盒測(cè)試

3.單元測(cè)試

4.邊界條件

5.測(cè)試自動(dòng)化

6.驗(yàn)收測(cè)試

7.調(diào)試

對(duì)于軟件開(kāi)發(fā)人員來(lái)說(shuō),經(jīng)常會(huì)花費(fèi)90%左右的時(shí)間鞠绰,來(lái)弄清楚自己的代碼為什么不起作用了腰埂。不論你從事任何語(yǔ)言的代碼開(kāi)發(fā),代碼調(diào)試都是開(kāi)發(fā)過(guò)程中不可缺少的一部分蜈膨。所以開(kāi)發(fā)人員應(yīng)該下定決心屿笼,認(rèn)真的學(xué)習(xí)如何做到高效的調(diào)試代碼。

方法論

一些軟件開(kāi)發(fā)團(tuán)隊(duì)在編寫(xiě)代碼并完成他們的項(xiàng)目時(shí)翁巍,都遵循著一些方法論驴一。所以開(kāi)發(fā)人員至少應(yīng)該熟悉諸多最常見(jiàn)的軟件開(kāi)發(fā)方法論中的基本幾種,這里要說(shuō)的就是瀑布開(kāi)發(fā)和敏捷開(kāi)發(fā)灶壶。

總結(jié)

盡管本文中列舉的軟件開(kāi)發(fā)人員應(yīng)該了解的知識(shí)很多肝断,其中很多知識(shí)也許正是你所不了解,但是請(qǐng)不要沮喪驰凛。我們要做的就是認(rèn)真的補(bǔ)充這些知識(shí)胸懈,不斷的提高自己。[^footnte]

[^]




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恰响,一起剝皮案震驚了整個(gè)濱河市趣钱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胚宦,老刑警劉巖首有,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異枢劝,居然都是意外死亡井联,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)您旁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烙常,“玉大人,你說(shuō)我怎么就攤上這事被冒【啵” “怎么了轮蜕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蝗锥。 經(jīng)常有香客問(wèn)我跃洛,道長(zhǎng),這世上最難降的妖魔是什么终议? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任汇竭,我火速辦了婚禮,結(jié)果婚禮上穴张,老公的妹妹穿的比我還像新娘细燎。我一直安慰自己,他們只是感情好皂甘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布玻驻。 她就那樣靜靜地躺著,像睡著了一般偿枕。 火紅的嫁衣襯著肌膚如雪璧瞬。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天渐夸,我揣著相機(jī)與錄音嗤锉,去河邊找鬼。 笑死墓塌,一個(gè)胖子當(dāng)著我的面吹牛瘟忱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苫幢,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼访诱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了态坦?” 一聲冷哼從身側(cè)響起盐数,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伞梯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帚屉,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谜诫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了攻旦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喻旷。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牢屋,靈堂內(nèi)的尸體忽然破棺而出且预,到底是詐尸還是另有隱情槽袄,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布锋谐,位于F島的核電站遍尺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涮拗。R本人自食惡果不足惜乾戏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望三热。 院中可真熱鬧鼓择,春花似錦、人聲如沸就漾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抑堡。三九已至催跪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夷野,已是汗流浹背懊蒸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工悯搔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妒貌。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓通危,卻偏偏與公主長(zhǎng)得像灌曙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子在刺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,734評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)蚣驼,斷路器,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • 那一刻颖杏,用盡了勇氣。 或許,你看到了我微微顫抖的身體和不自然的表情翼抠。 那一刻咙轩,我看到的是自己用盡勇氣后的心臟由血脈...
    綠PZY閱讀 186評(píng)論 0 0
  • 我印象中活喊,父母對(duì)鄉(xiāng)下的感情是復(fù)雜的。他們既知道那是原鄉(xiāng)一般的所在膘盖,有著抹不去的記憶,卻又清楚地意識(shí)到侠畔,必須逃離那里...
    編輯韓松閱讀 263評(píng)論 0 1
  • 首先结缚,在開(kāi)始正文前,有兩點(diǎn)我要表示懺悔软棺,一是我所選取的事例红竭,大概會(huì)觸犯一些“衛(wèi)道士”的敏感神經(jīng);二是我居然取了個(gè)這...
    火燒風(fēng)閱讀 897評(píng)論 0 3