女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

程序員應該具備哪些素質

工程師人生 ? 來源:工程師吳畏 ? 2018-12-24 14:33 ? 次閱讀

趁著這幾天無事,好好總結一下從事軟件開發以來的一些想法,這篇blog嘗試從我自身的一些經歷來談談程序員應該具備哪些素質。如有不足之處,還請不吝賜教!

下面,我將列出并展開所有我認為程序員必須具備的素質。

基礎知識你也許是像我一樣的自學者,沒有數電/模電,編譯原理,操作系統原理,網絡與數據庫等方面的知識,但是對于這些你應該嘗試去了解、理解。當初跨專業考研之時學習的操作系統/網絡/數據結構/數據庫的知識于我現在的工作仍然有益,我有遇到過一些能力很強的人,他們做解決方案很強,但是debug能力說實話不大匹配其水平,原因就在于其不了解很多底層的原理。

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

對于java/c#程序員而言,其底層是虛擬機和框架,也應該去嘗試了解虛擬機的構成,GC原理等。

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

算法與數據結構推薦閱讀《大話數據結構》,《算法導論》。

算法與數據結構怎么強調都不為過,雖然大部分程序員在工作中并不一定會用到很多高級算法,也并不會去參加ACM,但是理解常用算法應該是一種基本素質。

應該掌握的常用的數據結構:數組,單鏈表,棧,隊列,二叉樹。

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

進階數據結構:雙鏈表,循環鏈表,雙端隊列,哈希表,跳表,大根/小根堆,哈夫曼樹,排序二叉樹,平衡二叉樹,紅黑樹,B樹/B+樹,圖,etc。

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

自學能力自學能力對于程序員來說非常重要,因為IT這行更新的太快了,幾年不學習很容易就會被時代拋棄,國內塵囂其上的“30歲轉行論”有這方面的原因。我不是科班畢業的,大學學的是水利,和程序員什么關系都沒有,一直以來都是自學,我將結合我的經歷談談自學。

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

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

再次要學的是某個具體的方向,比如web,圖形,圖像,搜索引擎,機器學習等等專業領域,這些知識的學習應該是在日常工作中不斷積累的。

這段時間的自學告訴我,凡事只要去努力去學習,都會有成果,所有看起來高大上的東西理解之后會發現就那么回事。此外,比較廣泛的閱讀了許多書籍,對我現在的工作仍然有利,許多事情是你首先得了解你才會去應用,很多好東西在書上在網上,你知道了才會在某個未來的時刻用上,如果你不知道那你只能錯失良方許久。

學習是持久的,在實際應用中仍然會碰到你不熟悉的特性,會碰到坑,這時候你需要的是信息搜集與篩選的能力!

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

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

強烈建議分享自己的解決方案和思考!

作為一個互聯網/開源受益者,分享應該是一種基本美德,特別鄙視發布問題自己找到解決方案之后就結貼走人的程序員。

分享自己的解決方案與思考不僅僅是讓像你一樣的疑惑者受益,同時還是教學相長的一個過程,自己也會從中獲益。

如何分享自己的思考,這時候你需要的是總結的能力!

總結能力總結使人進步 ! 在網上看到一個段子,分享一下:

-“你有幾年的工作經驗,怎么寫的代碼這么差勁?”

-“5年工作經驗”

-“呵呵,是1年經驗當5年用了吧。”

決定我們是1年經驗當5年用還是真有5年經驗,最重要的就是記得總結自己碰到的問題,自己的想法,前輩的教導!

需求分析與文檔編寫一個項目的流程大致為:需求分析 –》 估計進度 –》 設計架構 –》 編碼實現 –》 Debug –》 測試 –》 Release 。其中coding,debug,test可能會反復迭代。

可以看出需求分析是決定項目的第一個關鍵部分,有些公司是由專門人員進行需求分析,但是作為程序員,應該要了解需求,確認需求。

文檔包括很多方面,需求文檔、設計文檔、測試文檔、使用文檔、注釋等,貫穿軟件開發的所有流程。良好的文檔不僅僅是對項目的負責,同時也會有利于項目的維護。

在項目注釋中,強烈建議添加:TODO , FIXME , HACK , XXX 等標簽以幫助實現邏輯。

架構能力推薦《架構之美》

在我剛入職的時候,每當接到一個任務時,我都迫不及待的去在IDE中敲代碼,這種渴望很強烈,很有成就感。但是一個前輩告訴我,你首先應該做的是架構設計,充分考慮所有可能的情況并記錄下來之后再去coding,我記下來了但是在沒有教訓之前仍然沒有很強烈的體悟,后來我便后悔了。在某個項目中,我很快的寫出了原型,然后洋洋得意地在這個原型上像打補丁一樣擴展各種功能,最后在新加的某個功能上栽了跟頭,這個功能完全沒辦法湊進去 。所以,作為程序員,我們需要擬制住自己的編碼沖動以及修改代碼的沖動,先架構設計,然后再編碼。

架構期應該給各個模塊/類之間涉及一套相對合理穩定的接口,實現是易變的,接口不應該頻繁變化。

我認為開發任何一個模塊,首先要做的是理解需求,然后做架構設計,再然后布置基礎設施(包括log,復用的宏,工具代碼等),接著進行編碼實現。

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

這個不用多說,沒有代碼就沒有軟件。想追求卓越,應該讓我們的代碼更優美,性能更好。

代碼編寫功底包括變量命名,函數拆分與提取,面向對象的特性應用,跨平臺意識,多線程的同步,等。

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

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

沒有不出現任何bug的一次性成型的代碼,debug是經常會出現的場景。

debug應該盡量的少,同架構設計一樣,碰到問題應該首先看代碼,能直接找出來問題最好。如果看不出來,就需要專業的debug能力了。

bug的場景包括:邏輯錯誤,程序crash,內存泄露。

bug的范圍包括:單模塊,多模塊;單線程,多線程;單進程,多進程;單機,聯機。

bug的頻率包括:100%出現,容易出現,很難出現。

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

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

代碼閱讀能力說實話這一段我寫的很傷感,因為要寫“read the fucking source code”實在是太fucking了。

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

說實話,對于具有一定強迫癥的同學來說,閱讀其他人寫的代碼應該是挺痛苦的,這時候有時間的話不妨對這些代碼按你的標準進行重構。

重構能力推薦閱讀《重構,改善既有的代碼設計》。

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

重構,按我的理解分為兩種。

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

另一種是自底向頂的重構,這種方式是對某些代碼進行優化重構,并且保證不影響實現,在重構部分區域之后調整局部結構,最后達到整體重構。

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

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

團隊協作現代軟件工程單打獨斗基本上不大現實了,像傳說中的匯編寫wps的求伯君大牛那樣獨自搞wps的傳說已經漸隱漸逝了。

團隊協作包括溝通能力,接口協商,版本控制工具的使用等方面。容易出現的是相互推諉責任,對別人的請求不耐煩等,這于團隊協作毫無益處。

高效的團隊協作應該是模塊間接口穩定,基礎類庫一致,框架代碼共享,版本更新信息及時,溝通反應快速有效。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 程序員
    +關注

    關注

    4

    文章

    954

    瀏覽量

    30254
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    TMS320C6000程序員指南

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

    TMS320C55x DSP CPU程序員參考補充

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

    UCD3138A64/UCD3138128程序員手冊

    電子發燒友網站提供《UCD3138A64/UCD3138128程序員手冊.pdf》資料免費下載
    發表于 12-09 14:42 ?0次下載
    UCD3138A64/UCD3138128<b class='flag-5'>程序員</b>手冊

    機械革命發布CODE AI程序員

    近日,英特爾新質生產力技術生態大會在成都舉行,機械革命作為重要參展商帶來了多款明星產品引爆全場!其中更是在AI PC軟件生態產品發布分論壇上,Intel、智譜、機械革命三方聯合發布了專為程序員設計的CODE AI程序員本,成為本次大會的一大亮點。
    的頭像 發表于 11-30 10:34 ?941次閱讀

    Linux驅動程序程序員指南

    電子發燒友網站提供《Linux驅動程序程序員指南.pdf》資料免費下載
    發表于 11-22 15:53 ?0次下載
    Linux驅動<b class='flag-5'>程序</b><b class='flag-5'>程序員</b>指南

    AI編程工具會不會搶程序員飯碗

    AI編程工具可輔助編程,減少手動編碼,提升效率,對程序員有積極影響也有挑戰。程序員需深化技能、拓寬知識應對。長遠看,AI與人類程序員將共生共榮。
    的頭像 發表于 11-08 10:17 ?463次閱讀

    第五屆長沙·中國1024程序員節開幕

    據官方媒體報道,10月24日;? 第五屆長沙·中國1024程序員節在湖南湘江新區開幕;本次中國1024程序員節以“智能應用新生態”為主題。設置有岳麓對話、技術英雄會、主題峰會及賽事、展覽等活動,一場
    的頭像 發表于 10-25 15:42 ?424次閱讀

    京東上萬程序員都AI用它!

    對大模型生成代碼進行智能修復,為程序員開啟代碼漏洞修復的“自動駕駛”模式,不但減少人工接入、提高工作效率,更為企業抵御內外部各種攻擊構建起一道堅固的安全屏障,確保業務的連續性和穩定性。 JoyCoder是京東云自主研發的一款輔助開發人員
    的頭像 發表于 07-17 16:29 ?432次閱讀
    京東上萬<b class='flag-5'>程序員</b>都AI用它!

    程序員節視頻創意大賽,用串口屏贏取千元大獎

    10月24日,程序員專屬的節日里,我們盛大開啟“程序員節視頻創意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發表于 07-08 10:38 ?72次閱讀
    <b class='flag-5'>程序員</b>節視頻創意大賽,用串口屏贏取千元大獎

    程序員節視頻創意盛宴,邀您共襄盛舉!

    10月24日,程序員專屬的節日里,我們盛大開啟“程序員節視頻創意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發表于 07-04 09:00 ?67次閱讀
    <b class='flag-5'>程序員</b>節視頻創意盛宴,邀您共襄盛舉!

    助力程序員告別困擾已久的夢魘-Bug

    程序員的噩夢是什么?不用懷疑,就是讓你加班到崩潰的Bug!下面是經過業界大佬們“長期加班”積累的小妙招,助力你離早下班又進一步~一、定位Bug范圍及性質要有效解決問題,首先要縮小范圍,集中關注最近
    的頭像 發表于 07-02 08:10 ?626次閱讀
    助力<b class='flag-5'>程序員</b>告別困擾已久的夢魘-Bug

    數控程序編程通常可分為哪兩大類

    編程的定義 手工編程是指數控程序員根據零件的加工要求和機床的性能,通過人工編寫數控程序的過程。手工編程是一種傳統的編程方式,它要求程序員具備豐富的經驗和熟練的編程技巧。 手工編程的特點
    的頭像 發表于 07-01 14:17 ?1938次閱讀

    大模型時代,程序員當下如何應對 AI 的挑戰

    隨著 AI 技術的飛速發展,特別是大模型的出現,傳統的程序員角色正在經歷深刻的變革,我們不得不重新對自己進行審視和思考。 通用領域大模型的“泛化能力” 在過去的二十年內,AI 領域的大部分研究
    的頭像 發表于 06-28 16:19 ?806次閱讀
    大模型時代,<b class='flag-5'>程序員</b>當下如何應對 AI 的挑戰

    阿里云發布首個AI程序員,引領應用開發進入“分鐘級”時代

    近日,在備受矚目的阿里云上海AI峰會上,阿里云向全球開發者們展示了其最新的技術成果——首個“AI程序員”。這款創新應用基于通義大模型構建,具備了令人驚嘆的多項技能,包括架構師、開發工程師、測試工程師等,為軟件開發行業帶來了革命性的變化。
    的頭像 發表于 06-24 10:36 ?884次閱讀