新聞中心
[[278185]]

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網(wǎng)站建設、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的江門網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
【】業(yè)界有著這樣一個普遍的誤解:要成為一名優(yōu)秀的程序員,就必須掌握許多種編程語言和工具。實際情況是這樣嗎?也許下面給出的十二條建議會讓您或多或少地改變對此的認同感。
1.研究數(shù)據(jù)結構
計算機科學家Niklaus Wirth曾經(jīng)有過一個著名論斷:“數(shù)據(jù)結構+算法=程序”。可見,數(shù)據(jù)結構是計算機程序的基礎,它們就像構造房屋的磚頭一樣。實際上,數(shù)據(jù)結構決定了程序將如何快速有效地解決問題。一旦使用了正確的數(shù)據(jù)結構,您的程序方案會變得既簡單,又省時。
那么,我們該如何研究數(shù)據(jù)結構呢?
- 首先,選擇一本好書,以理解并掌握有關如何設計和執(zhí)行數(shù)據(jù)結構。在此,我推薦Narasimha Karumanchi撰寫的《輕松實現(xiàn)數(shù)據(jù)結構和算法》(Data Structures and Algorithms Made Easy,https://amzn.to/34DxomJ)一書。這是C/C++版本的,您也可以通過鏈接:https://amzn.to/2NZ3W4E,找到其對應的Java版本。
- 其次,嘗試從頭開始實現(xiàn)一些數(shù)據(jù)結構,例如:列表、堆棧和隊列。您不僅可以深刻地理解到它們的工作原理,而且還能夠通過“重新發(fā)明”這些數(shù)據(jù)結構來提高編程的技能。
- 第三,試用那些由自己常用的編程語言所提供的內置數(shù)據(jù)結構(如果是Java,則對應的是Collections框架)。例如:使用不同的列表,通過索引來快速訪問各種元素;將集合用于元素的隨機排列;使用隊列進行producer-consumer的處理等。
- 第四,在編寫代碼之前,請認真思考并選擇出最適合于解決問題的數(shù)據(jù)結構。當然,您不必重復造輪子,請盡量利用當前編程語言所提供的現(xiàn)有數(shù)據(jù)結構。
2.學習算法
如果說數(shù)據(jù)結構抽象出了問題的輸入和輸出的話,那么算法則決定了系統(tǒng)該如何解決問題。優(yōu)秀的程序員一般都能善于使用經(jīng)過實際檢驗的算法、并編寫出新的算法。
由于算法不僅需要良好的邏輯思維,而且需要一定的數(shù)學能力,因此它是編程中最難學習的部分之一。如果您能夠靈活運用自己擅長的各種算法,那么您將很容易從編程人群中脫穎而出。
不過,好消息是:您不必從頭開始發(fā)明各種算法,只需要學習和使用那些經(jīng)過實際檢驗的實用算法便可。我建議您至少對如下基本算法有一定的了解:排序(快速排序、合并排序等),二進制搜索,遞歸,圖檢索,greedy,密碼學相關基礎知識,以及復雜的big O表示法。
那么,我們應該如何學習算法呢?除了上述提到的數(shù)??據(jù)結構書籍之外,我建議您通過選讀《算法簡介》(Introduction to Algorithms,https://amzn.to/2NWOoyw)一書,以獲取相關的概念,并從頭開始實現(xiàn)那些熱門的算法。通常,您可以試著通過自行編程來模擬算法的運作原理。例如,您可以編寫一個程序,以可視化的方式顯示快速排序算法的工作方式。籍此,您不但可以學到許多相關概念,并且能夠大幅提高自己的編碼技能。
3.研究設計模式
雖說編程就是為問題尋找的某種解決方案,但是方案本身也可能會面臨各種問題與挑戰(zhàn)。例如,我們往往需要更好的性能、更靈活的設計、更可靠的體系結構、更少的錯誤、以及更少的潛在瓶頸。因此,設計模式是解決在軟件設計中各種常見問題的一種行之有效的解決方法。
要成為一名優(yōu)秀的程序員,您應該能夠將恰當?shù)脑O計模式應用到程序的技術實現(xiàn)上。那么我們應該如何學習設計模式呢?在此,我建議您從著名的設計類書籍:《設計模式:可重用的面向對象軟件的要素(C/C ++實現(xiàn))》(Design Patterns: Elements of Reusable Object-Oriented Software,https://amzn.to/2Q6B2Cy)入手。如果您經(jīng)常使用的是Java的話,我建議您閱讀《深入淺出設計模式》(Head First Design Patterns,https://amzn.to/2LtXu44)。通過學習,您可以迅速地掌握各種基礎的設計模式,其中包括factory、builder、strategy、command、template、facade、visitor、singleton。
當然,這是一個反復的過程,您只有通過閱讀案例,研究設計模式,編寫各種代碼,測試不同的模式,才能真正理解并自信地將自己的設計模式應用到程序之中。
4.讀書
您會堅持每年閱讀幾本編程書籍嗎?如果您的答案是少于三本的話,那么您該適當?shù)胤词∫幌铝?。畢竟,那些?yōu)秀的程序員都會表現(xiàn)出對新知識的如饑似渴。因此,我建議您每年至少閱讀五本書。這些書籍不但是過往經(jīng)驗的集合,而且能夠拓寬您的視野,幫助您更快地獲取新知,以及向您展示如何以正確的方式實現(xiàn)軟件與產(chǎn)品的功能。
那么,我們應該閱讀哪些書籍呢?我推薦您從如下的必讀書目開始:
- 程序員修煉之道(The Pragmatic Programmer,https://amzn.to/2Q6NUso)
- 代碼大全(Code Complete,https://amzn.to/2IhRA4f)
- 程序員職業(yè)規(guī)劃之道(The Passionate Programmer,https://amzn.to/2NXF0uz)
- 軟件工藝(Software Craftmanship,https://amzn.to/2Lv7kTv)
而對于Java編程愛好者而言,《Java 高效編程》(Effective Java,https://amzn.to/2Q82yzr)也是必讀書目。擇日不如撞日,咱們現(xiàn)在就開始規(guī)劃一年內需要閱讀的書籍吧。
不過,您在閱讀時請記住如下兩點:
- 不必從頭到尾地讀一本書。這樣您可能沒有足夠的時間和耐心。請試著采用一種明智的方式:首先只閱讀您需要的內容,然后在有時間的情況下閱讀其他的部分。例如,如果您需要應用Strategy模式,則應當重點閱讀涉及到該模式的章節(jié);而如果您需要編寫servlet,則請關注servlet的相關章節(jié)。
- 請認真做好筆記與練習,好腦筋不如爛筆頭,這樣會加深您的閱讀印象與效果。
5.閱讀各種博客與雜志
眾所周知:為了留存和吸引讀者,博客總是比書籍要更新得多。您可以在自己的細分市場與領域中找到一個權威性的博客或網(wǎng)站,堅持閱讀那里您所感興趣的各種帖子。例如:您可以通過每周閱讀一篇新文章的方式,讓自己與當今快速變化的技術保持更新。
在此,我會推薦DZone.com網(wǎng)站,這是一個最初為Java開發(fā)人員構建的社區(qū)。如今,它已成為了網(wǎng)絡中最大的軟件專業(yè)人員的交流社區(qū)之一。您可以在DZone上找到從Java到Javascript,從Web開發(fā)到敏捷(Agile)方法,從大數(shù)據(jù)到云計算等,幾乎所有類別的技術實用文章、見解和建議。
此外,您也可以訂閱自己相關領域的傳統(tǒng)或電子雜志。例如:對于Java而言,我建議您閱讀由Oracle發(fā)行的雙月刊Java Magazine(https://www.oracle.com/technetwork/java/javamagazine/index.html),它涉及到了Java技術管理的方方面面。
6.使用單元測試
在編程項目中,您可能聽說過“先寫測試,后寫代碼”的說法。我們需要將普通的需求轉換為非常具體的測試用例,然后編寫代碼,以實現(xiàn)業(yè)務邏輯,并確保它們能夠通過所有的測試。因此,我們應當通過編寫代碼,來測試每個程序的類,以及每個類的方法。
在編程界,大家普遍采用的是單元測試的方法。其好處包括:能夠及早地發(fā)現(xiàn)問題,促進代碼的更改與重構,簡化各種集成測試,為系統(tǒng)提供實時的文檔等方面。
單元測試直接導致了測試驅動開發(fā)(Test Driven Development,TDD)方法的出現(xiàn)。如今,TDD已被許多程序員運用到了多種編程語言中。
那么,我們應該如何學習單元測試呢?我建議您閱讀《單元測試的藝術》(The Art of Unit Testing,https://amzn.to/2NbbiCG)一書。它是有關單元測試與TDD方面極好的書籍。
而對于Java而言,由于JUnit是Java開發(fā)中非常受歡迎的測試框架之一,因此您可以從《Junit教程:設置、編寫與運行Java單元測試》(JUnit Tutorial: Setting Up, Writing, and Running Java Unit Tests,https://dzone.com/articles/junit-tutorial-setting-up-writing-and-running-java-1)開始。可以說,如果您從未使用過任何單元測試框架的話,那么您勢必缺少了軟件開發(fā)環(huán)節(jié)中的一項有力工具。
7.參與自由項目
以兼職或全職的方式參與自由項目,以提高編程的技能,是成為一名優(yōu)秀程序員的快捷方法之一。簡而言之,自由項目意味著您可以在線查找項目,通過遠程工作的方式獲得在線的報酬。更棒的是,您可以選擇自己喜歡的項目類型,例如:PC端、Web應用、移動應用、設計、編程、測試、乃至某些硬件項目。這些都可以讓您在各個領域積累并拓展自己的編程經(jīng)驗,提升面對挑戰(zhàn)的能力。
相比公司里的那些循規(guī)蹈矩的項目,自由項目雖然顯得更豐富、更精彩。但是,成為一名自由職業(yè)者可一點也不輕松。自由職業(yè)的市場往往充滿了激烈的競爭,您要面對成千上萬個其他自由職業(yè)者的爭搶與挑戰(zhàn)。因此,我強烈建議您最好在保留當前工作的前提下,逐漸參與或領取自由項目。
那么我們應該如何當一名自由職業(yè)者,開展自由項目呢?我建議您去訪問Freelancer.com網(wǎng)站。它是網(wǎng)絡上最大的自由職業(yè)市場之一,您可以在其中找到幾乎任何種類的工作。自2009年以來,我持續(xù)參加了該網(wǎng)站上的各類項目,目前已完成了142個項目,平均評分為4.8/5。當然,我從中也積累了豐富的編程經(jīng)驗。
8.做編外項目
如果您不喜歡做自由項目的話,那么可以通過接手一些有趣的小項目,來打發(fā)空閑的時間。處理此類項目可幫助您提高各個階段的編程技能,其中包括:編碼、測試、設計、文檔編制、以及部署等方面。與您在公司參與到的主要工作相比,這些編外項目向您提供了軟件開發(fā)的整個過程,而不僅僅是編碼這一個階段。
那么我們應該如何參與編外項目呢?常言道:不積跬步,無以至千里。我的建議是“從小開始”。由于一開始您并沒有足夠的資源與經(jīng)驗,因此最好不要馬上開展大型的項目。另外,您需要管理好自己的時間,一般以兩到三個月內完成一個項目為宜。
9.參加編程比賽
也許這是激發(fā)您自己成為一名優(yōu)秀程序員的最具挑戰(zhàn)性的方式。為了參加比賽,您必須投入大量的時間和資源,并高度重視具體的開發(fā)環(huán)節(jié),但是這對于提高您整體的編程技能是大有好處的。
請記住:重要的不是獲獎,而是在比賽中的成長。我曾經(jīng)參加了幾次移動應用和桌面端游戲的競賽,雖然并未獲得任何獎勵,但是我承認自己在努力保證按時提交程序作品的時候,已經(jīng)學到了不少的東西。
當然,您也可以嘗試一些著名的編程競賽,例如:微軟的Imagine Cup(https://www.imaginecup.com/);由IBM贊助的ACM-ICPC(https://icpc.baylor.edu/),以及TopCoder(https://www.topcoder.com/)。前兩個是面向學生的,而最后一個則是面向所有程序員的。另外,您還可以尋找并參與本國、本地區(qū)、乃至本公司舉辦的各類競賽。不要擔心自己是否擁有足夠的經(jīng)驗,大膽注冊,一切隨緣!
10.進行規(guī)范性審查
代碼審查工作應當定期在項目團隊中開展。您既可以對他人的代碼進行規(guī)范性審查,也可以讓其他程序員來審查您的代碼。一系列的審查工作,不但能夠規(guī)范大家編寫程序代碼的習慣,而且有助于團隊成員之間相互學習、取長補短。
我建議您使用Sonar Qube(https://www.sonarqube.org/)之類的代碼分析工具。此工具可掃描整個代碼庫,并根據(jù)各種代碼的質量標準生成詳細的報告。一般而言,您需要持續(xù)修復代碼中的問題,直到該工具不再出現(xiàn)“紅色報警”為止。當然,某些代碼分析工具還能夠與您的IDE(如,Eclipse或NetBeans)很好地集成在一起,使得代碼的檢查過程更加順暢自然。
11.閱讀代碼
與檢查代碼不同的是,我們也需要花時間去認真閱讀其他程序員寫出的代碼。通過這一過程,您將學到更多的東西。正所謂:“一千個人心中有一千個哈姆雷特”,面對同樣的軟件需求,不同的編程專家會編寫出截然不同的代碼解決方案。只要您能夠潛下心來仔細閱讀,就能收獲到各種設計上的創(chuàng)新和編程上的經(jīng)驗。
對于Java用戶而言,我建議您閱讀Java Collections框架(https://www.codejava.net/java-core/collections)的源代碼。您可以在JDK的安裝目錄下,通過src.zip文件找到它。當然,您也可以試著去閱讀諸如Spring、Hibernate、以及Struts等流行框架的源代碼。
12.開展與編程相關的教學
常言道:“最好的學習方法是進行教學”。您可以通過錄制視頻、撰寫文章、創(chuàng)作書籍、甚至是組織編程課程等形式,以幫助其他人學習編程。通常情況下,單純的編程目的是為了使程序代碼能夠“起作用”,而您在準備教學的過程中,往往會學習研究那些與目標課程主題相關的所有內容?!敖虒W相長”就是這個道理。
在此,我強烈建議您選擇一種最適合自己的教學方式。例如:在創(chuàng)建自己的網(wǎng)站--CodeJava.net(https://www.codejava.net/)和Java Youtube(https://www.youtube.com/codejava)頻道之前,我曾經(jīng)持續(xù)為一些編程網(wǎng)站編寫了各種各樣的Java教程。而且,我還在Udemy上開設過一些Java課程。
至此,我已經(jīng)和您討論了成為優(yōu)秀程序員的十二項自我修養(yǎng)。當然,這些只是我的經(jīng)驗之談,希望您也能分享自己的觀點。
原文標題:12 Practices That Make You a Good Programmer,作者:Nam Ha Minh
【譯稿,合作站點轉載請注明原文譯者和出處為.com】
當前名稱:成為優(yōu)秀碼農(nóng)的十二項自我修養(yǎng)
文章起源:http://www.dlmjj.cn/article/cooigce.html


咨詢
建站咨詢
