chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

程序員應(yīng)該具備哪些素質(zhì)

工程師人生 ? 來源:工程師吳畏 ? 2018-12-24 14:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

趁著這幾天無事,好好總結(jié)一下從事軟件開發(fā)以來的一些想法,這篇blog嘗試從我自身的一些經(jīng)歷來談?wù)?a target="_blank">程序員應(yīng)該具備哪些素質(zhì)。如有不足之處,還請(qǐng)不吝賜教!

下面,我將列出并展開所有我認(rèn)為程序員必須具備的素質(zhì)。

基礎(chǔ)知識(shí)你也許是像我一樣的自學(xué)者,沒有數(shù)電/模電,編譯原理,操作系統(tǒng)原理,網(wǎng)絡(luò)與數(shù)據(jù)庫等方面的知識(shí),但是對(duì)于這些你應(yīng)該嘗試去了解、理解。當(dāng)初跨專業(yè)考研之時(shí)學(xué)習(xí)的操作系統(tǒng)/網(wǎng)絡(luò)/數(shù)據(jù)結(jié)構(gòu)/數(shù)據(jù)庫的知識(shí)于我現(xiàn)在的工作仍然有益,我有遇到過一些能力很強(qiáng)的人,他們做解決方案很強(qiáng),但是debug能力說實(shí)話不大匹配其水平,原因就在于其不了解很多底層的原理。

對(duì)于C/C++程序員而言,其底層是操作系統(tǒng)和編譯器,所以需要了解操作系統(tǒng)原理,匯編,編譯原理等。

對(duì)于java/c#程序員而言,其底層是虛擬機(jī)和框架,也應(yīng)該去嘗試了解虛擬機(jī)的構(gòu)成,GC原理等。

我在網(wǎng)上遇到很多c/c++,java/c#程序員,很多時(shí)候都發(fā)現(xiàn)前者更喜歡追根溯底,后者更在乎如何使用框架,無法評(píng)判那種態(tài)度更好,但是了解得更深入很顯然是有好處的。

算法與數(shù)據(jù)結(jié)構(gòu)推薦閱讀《大話數(shù)據(jù)結(jié)構(gòu)》,《算法導(dǎo)論》。

算法與數(shù)據(jù)結(jié)構(gòu)怎么強(qiáng)調(diào)都不為過,雖然大部分程序員在工作中并不一定會(huì)用到很多高級(jí)算法,也并不會(huì)去參加ACM,但是理解常用算法應(yīng)該是一種基本素質(zhì)。

應(yīng)該掌握的常用的數(shù)據(jù)結(jié)構(gòu):數(shù)組,單鏈表,棧,隊(duì)列,二叉樹。

應(yīng)該掌握的常用的算法:順序查找,二分查找;冒泡排序,選擇排序,插入排序;深度優(yōu)先算法,廣度優(yōu)先算法。

進(jìn)階數(shù)據(jù)結(jié)構(gòu):雙鏈表,循環(huán)鏈表,雙端隊(duì)列,哈希表,跳表,大根/小根堆,哈夫曼樹,排序二叉樹,平衡二叉樹,紅黑樹,B樹/B+樹,圖,etc。

進(jìn)階算法:二叉排序樹查找;快速排序,希爾排序,堆排序,歸并排序,桶排序,基數(shù)排序;KMP字符串匹配算法 ,etc。

自學(xué)能力自學(xué)能力對(duì)于程序員來說非常重要,因?yàn)镮T這行更新的太快了,幾年不學(xué)習(xí)很容易就會(huì)被時(shí)代拋棄,國內(nèi)塵囂其上的“30歲轉(zhuǎn)行論”有這方面的原因。我不是科班畢業(yè)的,大學(xué)學(xué)的是水利,和程序員什么關(guān)系都沒有,一直以來都是自學(xué),我將結(jié)合我的經(jīng)歷談?wù)勛詫W(xué)。

首先需要學(xué)習(xí)的是編程語言。我接觸的第一門語言是Visual Basic,大部分理工科應(yīng)該都有這樣的一門編程課,或是vb,或是c,也有的是c++。這種課程對(duì)于大部分不感興趣的人來說都是一種折磨,不過我對(duì)這種計(jì)算機(jī)按照我的意圖來執(zhí)行非常感興趣,所以這樣的課程很對(duì)我的口味。在課余,我會(huì)去圖書館借一些vb的書來看看,偶爾也會(huì)跟著書上的代碼對(duì)照著敲代碼。后來覺得vb功能有限,且無法理解vb之下的秘密,所以轉(zhuǎn)而自學(xué)java,這次是在網(wǎng)上找的馬士兵老師的java視頻教程,跟著學(xué)習(xí)了一段時(shí)間。因?yàn)槲业墓P記本性能不夠,臃腫的JVM運(yùn)行的非常慢,轉(zhuǎn)而學(xué)習(xí)C++。現(xiàn)在我在學(xué)C++11。

其次要學(xué)的是框架,庫,API等,這時(shí)候你可以嘗試做一些有意思的程序出來,通過這些學(xué)習(xí)基本上可以勝任某些方面的工作。

再次要學(xué)的是某個(gè)具體的方向,比如web,圖形,圖像,搜索引擎,機(jī)器學(xué)習(xí)等等專業(yè)領(lǐng)域,這些知識(shí)的學(xué)習(xí)應(yīng)該是在日常工作中不斷積累的。

這段時(shí)間的自學(xué)告訴我,凡事只要去努力去學(xué)習(xí),都會(huì)有成果,所有看起來高大上的東西理解之后會(huì)發(fā)現(xiàn)就那么回事。此外,比較廣泛的閱讀了許多書籍,對(duì)我現(xiàn)在的工作仍然有利,許多事情是你首先得了解你才會(huì)去應(yīng)用,很多好東西在書上在網(wǎng)上,你知道了才會(huì)在某個(gè)未來的時(shí)刻用上,如果你不知道那你只能錯(cuò)失良方許久。

學(xué)習(xí)是持久的,在實(shí)際應(yīng)用中仍然會(huì)碰到你不熟悉的特性,會(huì)碰到坑,這時(shí)候你需要的是信息搜集與篩選的能力!

信息搜集與篩選在實(shí)際編程中,肯定會(huì)碰到各種各樣的問題,有些是常見的問題,有些是莫名其妙的問題。

我的建議是首先嘗試自己解決,次之看官方文檔和討論區(qū)是否有解釋,然后再去搜索引擎/stackoverflow查找有沒有相似問題的解決方案,最后再去社區(qū)(CSDN/cnblogs/oschina/stackoverflow等)提問。

強(qiáng)烈建議分享自己的解決方案和思考!

作為一個(gè)互聯(lián)網(wǎng)/開源受益者,分享應(yīng)該是一種基本美德,特別鄙視發(fā)布問題自己找到解決方案之后就結(jié)貼走人的程序員。

分享自己的解決方案與思考不僅僅是讓像你一樣的疑惑者受益,同時(shí)還是教學(xué)相長(zhǎng)的一個(gè)過程,自己也會(huì)從中獲益。

如何分享自己的思考,這時(shí)候你需要的是總結(jié)的能力!

總結(jié)能力總結(jié)使人進(jìn)步 ! 在網(wǎng)上看到一個(gè)段子,分享一下:

-“你有幾年的工作經(jīng)驗(yàn),怎么寫的代碼這么差勁?”

-“5年工作經(jīng)驗(yàn)”

-“呵呵,是1年經(jīng)驗(yàn)當(dāng)5年用了吧?!?/p>

決定我們是1年經(jīng)驗(yàn)當(dāng)5年用還是真有5年經(jīng)驗(yàn),最重要的就是記得總結(jié)自己碰到的問題,自己的想法,前輩的教導(dǎo)!

需求分析與文檔編寫一個(gè)項(xiàng)目的流程大致為:需求分析 –》 估計(jì)進(jìn)度 –》 設(shè)計(jì)架構(gòu) –》 編碼實(shí)現(xiàn) –》 Debug –》 測(cè)試 –》 Release 。其中coding,debug,test可能會(huì)反復(fù)迭代。

可以看出需求分析是決定項(xiàng)目的第一個(gè)關(guān)鍵部分,有些公司是由專門人員進(jìn)行需求分析,但是作為程序員,應(yīng)該要了解需求,確認(rèn)需求。

文檔包括很多方面,需求文檔、設(shè)計(jì)文檔、測(cè)試文檔、使用文檔、注釋等,貫穿軟件開發(fā)的所有流程。良好的文檔不僅僅是對(duì)項(xiàng)目的負(fù)責(zé),同時(shí)也會(huì)有利于項(xiàng)目的維護(hù)。

在項(xiàng)目注釋中,強(qiáng)烈建議添加:TODO , FIXME , HACK , XXX 等標(biāo)簽以幫助實(shí)現(xiàn)邏輯。

架構(gòu)能力推薦《架構(gòu)之美》

在我剛?cè)肼毜臅r(shí)候,每當(dāng)接到一個(gè)任務(wù)時(shí),我都迫不及待的去在IDE中敲代碼,這種渴望很強(qiáng)烈,很有成就感。但是一個(gè)前輩告訴我,你首先應(yīng)該做的是架構(gòu)設(shè)計(jì),充分考慮所有可能的情況并記錄下來之后再去coding,我記下來了但是在沒有教訓(xùn)之前仍然沒有很強(qiáng)烈的體悟,后來我便后悔了。在某個(gè)項(xiàng)目中,我很快的寫出了原型,然后洋洋得意地在這個(gè)原型上像打補(bǔ)丁一樣擴(kuò)展各種功能,最后在新加的某個(gè)功能上栽了跟頭,這個(gè)功能完全沒辦法湊進(jìn)去 。所以,作為程序員,我們需要擬制住自己的編碼沖動(dòng)以及修改代碼的沖動(dòng),先架構(gòu)設(shè)計(jì),然后再編碼。

架構(gòu)期應(yīng)該給各個(gè)模塊/類之間涉及一套相對(duì)合理穩(wěn)定的接口,實(shí)現(xiàn)是易變的,接口不應(yīng)該頻繁變化。

我認(rèn)為開發(fā)任何一個(gè)模塊,首先要做的是理解需求,然后做架構(gòu)設(shè)計(jì),再然后布置基礎(chǔ)設(shè)施(包括log,復(fù)用的宏,工具代碼等),接著進(jìn)行編碼實(shí)現(xiàn)。

代碼編寫推薦閱讀《編寫可讀代碼的藝術(shù)》、《代碼整潔之道》。

這個(gè)不用多說,沒有代碼就沒有軟件。想追求卓越,應(yīng)該讓我們的代碼更優(yōu)美,性能更好。

代碼編寫功底包括變量命名,函數(shù)拆分與提取,面向?qū)ο蟮奶匦詰?yīng)用,跨平臺(tái)意識(shí),多線程的同步,等。

這種能力是在日常coding中積累而來的,多做總結(jié)。

Debug能力推薦閱讀《軟件調(diào)試》、《格蠹匯編:軟件調(diào)試案例集錦》。

沒有不出現(xiàn)任何bug的一次性成型的代碼,debug是經(jīng)常會(huì)出現(xiàn)的場(chǎng)景。

debug應(yīng)該盡量的少,同架構(gòu)設(shè)計(jì)一樣,碰到問題應(yīng)該首先看代碼,能直接找出來問題最好。如果看不出來,就需要專業(yè)的debug能力了。

bug的場(chǎng)景包括:邏輯錯(cuò)誤,程序crash,內(nèi)存泄露。

bug的范圍包括:?jiǎn)文K,多模塊;單線程,多線程;單進(jìn)程,多進(jìn)程;單機(jī),聯(lián)機(jī)。

bug的頻率包括:100%出現(xiàn),容易出現(xiàn),很難出現(xiàn)。

可見debug的范圍之廣,bug總是如影隨形。

很多時(shí)候我會(huì)抱怨,oh,見鬼了,這太莫名其妙了,在我機(jī)器上都不會(huì)出現(xiàn),等等。我現(xiàn)在明白拿到反饋的bug我該怎么做了:首先閉嘴,然后重現(xiàn)問題,接著縮小問題范圍,最后借助調(diào)試器或者log找出問題原因。

代碼閱讀能力說實(shí)話這一段我寫的很傷感,因?yàn)橐獙憽皉ead the fucking source code”實(shí)在是太fucking了。

對(duì)于接手一個(gè)遺留項(xiàng)目,你需要的不僅僅是勇氣,還有耐心。對(duì)于一個(gè)拿到的項(xiàng)目,首先要做的應(yīng)該是先跑起來,作為用戶去使用,了解它的功能;接著閱讀設(shè)計(jì)文檔,了解設(shè)計(jì)意圖;再然后如果有版本控制歷史的話,可以嘗試從早期版本進(jìn)行代碼閱讀;再然后是從main函數(shù)起大致走一下流程,了解關(guān)鍵route;再然后是對(duì)感興趣部分進(jìn)行單步深入;最后是通讀代碼,可以先將功能性代碼比如log,hashtable等標(biāo)記為已讀,從頭文件看代碼間的聯(lián)系,弄懂各個(gè)類/函數(shù)的職責(zé)。

說實(shí)話,對(duì)于具有一定強(qiáng)迫癥的同學(xué)來說,閱讀其他人寫的代碼應(yīng)該是挺痛苦的,這時(shí)候有時(shí)間的話不妨對(duì)這些代碼按你的標(biāo)準(zhǔn)進(jìn)行重構(gòu)。

重構(gòu)能力推薦閱讀《重構(gòu),改善既有的代碼設(shè)計(jì)》。

不管是重構(gòu)別人寫的代碼,還是重構(gòu)自己寫的代碼,好像都不是什么令人愉快的體驗(yàn)。重構(gòu),不僅可以使得架構(gòu)更加合理,而且使得程序更加健壯。

重構(gòu),按我的理解分為兩種。

一種是自頂向底的重構(gòu),這需要對(duì)項(xiàng)目具有徹底的理解,才能高屋建瓴的對(duì)模塊/接口/類/函數(shù)進(jìn)行重新劃分,再將以前的代碼邏輯填充到新的框架下。

另一種是自底向頂?shù)闹貥?gòu),這種方式是對(duì)某些代碼進(jìn)行優(yōu)化重構(gòu),并且保證不影響實(shí)現(xiàn),在重構(gòu)部分區(qū)域之后調(diào)整局部結(jié)構(gòu),最后達(dá)到整體重構(gòu)。

工具的選擇與積累作為程序員,都應(yīng)該有一套自己使用的得心應(yīng)手的工具,這樣會(huì)事半功倍。

這些工具包括:IDE,編輯器,輔助debug的工具,檢測(cè)系統(tǒng)/程序狀態(tài)的工具,版本控制工具,文件比較工具,性能分析工具,make/cmake等等。

團(tuán)隊(duì)協(xié)作現(xiàn)代軟件工程單打獨(dú)斗基本上不大現(xiàn)實(shí)了,像傳說中的匯編寫wps的求伯君大牛那樣獨(dú)自搞wps的傳說已經(jīng)漸隱漸逝了。

團(tuán)隊(duì)協(xié)作包括溝通能力,接口協(xié)商,版本控制工具的使用等方面。容易出現(xiàn)的是相互推諉責(zé)任,對(duì)別人的請(qǐng)求不耐煩等,這于團(tuán)隊(duì)協(xié)作毫無益處。

高效的團(tuán)隊(duì)協(xié)作應(yīng)該是模塊間接口穩(wěn)定,基礎(chǔ)類庫一致,框架代碼共享,版本更新信息及時(shí),溝通反應(yīng)快速有效。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 程序員
    +關(guān)注

    關(guān)注

    4

    文章

    955

    瀏覽量

    30788
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    堆和棧的區(qū)別

    程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表,呵呵。
    的頭像 發(fā)表于 11-27 18:13 ?907次閱讀

    軟通國際亮相2025沙中開源與AI科技峰會(huì)

    2025年11月11日,由沙特程序員協(xié)會(huì)(parmg)主辦的"2025沙中開源與AI科技峰會(huì)"在利雅得盛大啟幕。
    的頭像 發(fā)表于 11-14 17:45 ?1284次閱讀

    奔赴熱AI,碼力全開!Talkweb House@1024程序員日系列活動(dòng)圓滿收官

    1024程序員日”系列活動(dòng)至此劃上了一個(gè)圓滿句號(hào)。本屆1024程序員節(jié)以“AI構(gòu)建世界,智能引領(lǐng)未來”為主題,廣邀技術(shù)大咖、產(chǎn)業(yè)領(lǐng)袖、企業(yè)代表與全球開發(fā)者齊聚星城
    的頭像 發(fā)表于 10-27 18:59 ?436次閱讀
    奔赴熱AI,碼力全開!Talkweb House@1024<b class='flag-5'>程序員</b>日系列活動(dòng)圓滿收官

    開鴻智谷“以賽促學(xué)、以賽選才”|1024程序員節(jié)暨開源鴻蒙構(gòu)建大會(huì)圓滿落幕!

    10月24日,由開鴻智谷聯(lián)合主辦的長(zhǎng)沙1024程序員節(jié)暨開源鴻蒙構(gòu)建大會(huì)在長(zhǎng)沙圓滿落幕。本次活動(dòng)以“湘聚長(zhǎng)沙,共赴熱AI”為主題,通過技術(shù)分享與實(shí)戰(zhàn)競(jìng)賽相結(jié)合的方式,著力培養(yǎng)“開源鴻蒙+AI”領(lǐng)域
    的頭像 發(fā)表于 10-27 17:58 ?479次閱讀
    開鴻智谷“以賽促學(xué)、以賽選才”|1024<b class='flag-5'>程序員</b>節(jié)暨開源鴻蒙構(gòu)建大會(huì)圓滿落幕!

    程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)

    的地址)出發(fā),采用推導(dǎo)的方式,深入淺出的分析了廣大C程序員學(xué)習(xí)和開發(fā)中遇到的難點(diǎn)。 2. 從方法論的高度對(duì)C語言在數(shù)據(jù)結(jié)構(gòu)和算法方面的應(yīng)用進(jìn)行了深入講解和闡述。 3. 講解了絕大多數(shù)C程序員開發(fā)
    發(fā)表于 05-13 16:45

    計(jì)算機(jī)網(wǎng)絡(luò)排錯(cuò)思路總結(jié)

    明人不說暗話,這篇文章我們來聊一個(gè)非常有用,同時(shí)也是程序員必備的技能,那就是網(wǎng)絡(luò)排錯(cuò)思路大總結(jié)。
    的頭像 發(fā)表于 04-01 17:32 ?648次閱讀
    計(jì)算機(jī)網(wǎng)絡(luò)排錯(cuò)思路總結(jié)

    如何在 樹莓派 上編寫和運(yùn)行 C 語言程序?

    ,一本很好的書是BrianKernighan和DennisRitchie所著的《TheCProgrammingLanguage》。這本書對(duì)經(jīng)驗(yàn)豐富的程序員和想學(xué)習(xí)C語
    的頭像 發(fā)表于 03-25 09:28 ?941次閱讀
    如何在 樹莓派 上編寫和運(yùn)行 C 語言<b class='flag-5'>程序</b>?

    零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行Python程序?

    是一種非常有用的編程語言,其語法易于閱讀,允許程序員使用比匯編、C或Java等語言更少的代碼行。Python編程語言最初實(shí)際上是作為L(zhǎng)inux的腳本語言而開發(fā)的。Py
    的頭像 發(fā)表于 03-25 09:27 ?1531次閱讀
    零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行Python<b class='flag-5'>程序</b>?

    Gemini Vision + Raspberry Pi 化身“數(shù)字導(dǎo)盲犬”?

    本文討論了一位程序員利用樹莓派、攝像頭、Gemini和Python構(gòu)建PeregrineEye設(shè)備,使其成為“數(shù)字導(dǎo)盲犬”為視障者服務(wù)的項(xiàng)目經(jīng)歷,包括項(xiàng)目靈感、功能、構(gòu)建過程、遇到的挑戰(zhàn)及未來計(jì)劃等
    的頭像 發(fā)表于 03-25 09:20 ?1707次閱讀
    Gemini Vision + Raspberry Pi 化身“數(shù)字導(dǎo)盲犬”?

    LDC1000 EVM GUI驅(qū)動(dòng)無法安裝,怎么解決?

    每次打開LDC1000 EVM GUI就會(huì)出現(xiàn)這個(gè)驅(qū)動(dòng)沒有安裝,請(qǐng)問程序員怎么解決這個(gè)問題?。。?!
    發(fā)表于 01-17 06:15

    阿里云升級(jí)通義靈碼AI程序員,全面上線

    近日,阿里云宣布其備受矚目的通義靈碼AI程序員已正式全面上線,為開發(fā)者帶來更為強(qiáng)大和便捷的編程輔助工具。 此次上線的通義靈碼AI程序員,在功能上實(shí)現(xiàn)了全面升級(jí)。現(xiàn)在,它支持VS Code
    的頭像 發(fā)表于 01-09 11:16 ?960次閱讀

    TMS320C6000程序員指南

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000程序員指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-24 17:19 ?2次下載
    TMS320C6000<b class='flag-5'>程序員</b>指南

    TMS320C55x DSP CPU程序員參考補(bǔ)充

    電子發(fā)燒友網(wǎng)站提供《TMS320C55x DSP CPU程序員參考補(bǔ)充.pdf》資料免費(fèi)下載
    發(fā)表于 12-21 11:36 ?3次下載
    TMS320C55x DSP CPU<b class='flag-5'>程序員</b>參考補(bǔ)充

    學(xué)習(xí)硬件的第一節(jié)課:學(xué)習(xí)讀懂原理圖

    學(xué)習(xí)硬件的第一節(jié)課:學(xué)習(xí)讀懂原理圖 讀懂原理圖對(duì)嵌入式軟件工程師和程序員尤為重要。在深入細(xì)節(jié)之前請(qǐng)注意,對(duì)所有的嵌入式設(shè)計(jì)人員來說、能懂得硬件工程師創(chuàng)建和使用的來描述其硬件設(shè)計(jì)的原理圖和符號(hào)是非
    的頭像 發(fā)表于 12-16 16:04 ?3670次閱讀
    學(xué)習(xí)硬件的第一節(jié)課:學(xué)習(xí)讀懂原理圖

    UCD3138A64/UCD3138128程序員手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《UCD3138A64/UCD3138128程序員手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 12-09 14:42 ?1次下載
    UCD3138A64/UCD3138128<b class='flag-5'>程序員</b>手冊(cè)