導航:首頁 > 程序命令 > 程序員小白如何提升演算法

程序員小白如何提升演算法

發布時間:2022-06-01 01:41:30

⑴ 初學者java程序員怎樣快速提升自己技術

一、提升對java技術的思考
很多人口裡嚷著要提升java技術,行動也有,但就是不奏效,是怎麼回事呢?因為行動前沒有好好的思考,比如老是盯著已經掌握熟練的java技術練習,你為什麼不考慮多練練你不熟習的java技術呢?那麼應該思考些什麼關於java技術的問題呢?
1、這個技術能解決什麼問題(why)
2、比較適合在哪些場景應用(where+when)
3、這個技術跟我已經掌握的哪個知識或技能類似,有什麼差別、有什麼特點、有什麼優點和缺點(what)
4、了解前面的問題後,你在開始考慮提升java技術那麼效果會比較好。
二、善於模仿,把他人的變成你的
你的代碼剛開始是怎麼學會的呢?不外乎模仿,但是模仿也有訣竅,有的人模仿的快,有的人模仿的慢。時常強調,多去看看其他人的代碼是怎麼編寫的,你可以從其他人的代碼中模仿出很多的東西,甚至你可以嘗試去修改其他人的代碼,讓它跟你的想法更加接近,看看你下次是不是可以這樣做,看看學習效率有沒有提高或者變得簡單,長此以往,你的java技術一定會有質的提升。

⑵ 程序員小白都應該知道的30件事

作者 | 宋蘭欣 廖馨婷

來源 | 讀芯術

從事編程並不容易。每年有許多人從各國的頂級計算機科學專業畢業,這是所有人都嚮往的最具競爭力的職業之一。與此同時,編程也振奮人心。隨著技術的進步,每天都有新的創新。對於喜歡編程,並立志從事編程的人而言,編程是其熱愛且為之奮斗的事業。

本文的這個列表可以幫助新手答疑解惑,節省精力。即使目前某些內容可能暫時不需要,但是總有一天它會派上用場。

1. 從事編程無需學位,但需要有所了解。

編程是少數幾個不取決於學位的職業之一。但是編程是一項知識密集型職業。如果你要從事編程行業,閱讀一些基本的涵蓋計算機科學的基本概念等書籍是必要的。除了編寫功能代碼之外,為你的技術打下堅實基礎,對基本概念有一個深刻理解,這使得你能夠贏得技術面試有助於與同事交流。

2. 在問題解決技能上,編程十分具有創造力。

大多數人都有這樣一種先入為主的觀念,即編程就是分析和解決問題的能力。這只說對了一部分。編程還涉及許多創造性。通常,可以使用多種方式編寫給定的代碼。當你設計出最簡單有效的編碼方式時,創造性就產生了。

3. 掌握所有編程語言是不可能的,訣竅是將一門語言學到極致。

世界上有數百種編程語言。有一些編程領域為特定的職業道路鋪平了道路:Web開發人員,前端開發人員,後端開發人員,軟體工程師,資料庫開發人員等。明確希望成為哪種開發人員,然後學習該職位所需的技術技能。

4. 你不需要成為一個機器,保持作為人的狀態就更好了。

請記住,你首先是人,其次才是一名程序員。初次編程時,很容易迷失在代碼中。你是一個人,你需要笑,需要哭哭,需要減壓,需要與人交談。作為一名程序員,平衡生活,盡可能的發現工作之外的樂趣與激情將為工作帶來更多創造性。

5. 編程是應用知識而不是死記硬背。

與發明和創造新知識領域的研究不同,編程就是應用現有知識。書籍,研究論文,在線文章和學習視頻將成為經常使用的資源。沒有必要記住所有知識。可以通過搜索資源找到答案。隨著處理的項目增加,知識也會自然而然銘記於心。

6. 你每天都會與冒名頂替綜合症對抗。

編程是所有「聰明」人都超同一個目標前進的行業。除非你是天才,否則你會每天都覺得自己不配取得成功。當你每天都為這種感受所困時,會試著想辦法解決這一問題。你可以一直將其作為學習新事物的動力,正確看待問題。

7. 作為一名程序員,你還需要有工作之外的生活,否則,你只會沉迷於編程。

有段時間你可能會宅在家裡不出門。但是,要成為一名快樂的程序員,必須主動尋求計算機屏幕之外的生活。職業生涯的成功往往取決於你遇到的人。人際關系對程序員而言必不可少。保持程序員之外的個性特徵對於防止沉迷於編程至關重要。當你樂在其中而非強迫自己時,工作才會更加出色。

8. 與他人合作會學得更快。

在職業生涯初期,你會想要斷開與外部世界的聯系,沉溺於閱讀這十本有關編程的書籍,以建立計算機科學基礎。你猜怎麼著?如果你找到一個學習夥伴,會學得更快。當你與他人合作,所有的編程「缺點」都會暴露出來。編寫的代碼會得到審閱。由於有第三方的存在,你將會學著編寫高效的代碼。由於夥伴也在學習,所以你會想找到最好的辦法。當你從事程序員這一工作時,總會有人審查代碼。你永遠不是獨自一人這是你需要習慣的。

9. 不需擅長數學和科學。

在技術行業會遇到各種超級明星程序員,他們在接受了長期的文科教育之後,發現了編程在邏輯思維方面的吸引力。有很多畫家和作家在追求藝術的同時以編程謀生。成為一名優秀的程序員,你需要的是堅持不懈。編程很辛苦。但是,一旦有了恆心,任何人都可以通過閱讀編程書籍掌握基礎知識。在這個行業工作一段時間後有很多人重拾數學。最後他們甚至可以在沒有接受正式數學教育的前提下理解實施復雜的演算法

10. 成為全明星「學習者」。

程序員的學習能力都很強。剛開始也許你的學習能力並不出色,但最終將會得到提升。有時,工作會要求你在六個月內學習三種編程語言。這就是技術創新的狀態。作為程序員,每天都在學習。學習就像呼吸一樣。即使你對每天都需要學習的狀態不太舒服,你也會被迫習慣。

11. 你將對完成項目上癮。

編碼成癮是真實存在的。在編程生涯中的某一階段,你將經歷通宵編程的馬拉松。在完成項目之前,你都不會想要睡覺。由於大腦正在處理大量的信息,你會忘記吃飯,喝酒,甚至不會離開辦工作。不要緊,工作做完後,就到外面散散步或者度度假吧。

12. 耗費一整天只為找一個小漏洞。

多數時候,在編程項目中許多部分彼此相互關聯。通常,你會發現除非修復了系統中潛藏的一個小漏洞,否則無法繼續進行下一步操作。作為程序員,除非找到這處漏洞,否則你會對整個項目倍感壓力。你會整天坐在電腦夙夜難寐,只為找到這一漏洞。這種現象只有找到它後才會消失。

13. 你將花費大部分時間在谷歌搜索無人能為你解答的答案。

如果使用流行的語言編程,那麼大部分的問題都能得到解答。但是,也有例外。有時,你也會出現別人碰不到的問題。在這種情況下,參考編程書籍並詢問編程委員會通常會幫助你答疑解惑。

14. 閱讀設計模式的書

是否畢業於國內外最好的計算機科學專業並不重要。在每個程序員的職業生涯中,都會坐下來仔細閱讀Head First Design Patterns。它可能是新程序員最常閱讀的書籍之一。還在等什麼?趕緊拿起它並從頭到尾閱讀。

15. 學會專注於確切的拼寫

在每個程序員的職業生涯中,都會用自己喜歡的語言編寫足夠的代碼,以便按照自己的方式做事。這包括為變數,類,甚至資料庫中的表提供的命名約定的准確拼寫。仔細審查這一點。你最不想發生的就是因為拼寫錯誤而產生的系統漏洞。記住,當理由充分時沉浸與值得關注事情是情有可原的。但是如果無據可依,那不過只是無意義的重復。

16. 你可能會放棄

有時你會遇到無法解決的問題。有時問題難到讓你懷疑人生,只想要辭職。有時工作環境會讓你想要放棄。激情取決於堅持。這時候質問自己,是要堅持還是放棄?當遇到挫折和困難時,你就把它當做港灣和下一次騰飛的跳板。

17. 重頭再來

當你看到那些和從前的一樣熱愛編程的人,你會很羨慕接著發現自己無法放手。你不能放手。然後又會回到編程項目上來。你意識到在內心深處,和編程同呼吸共命運,這是你才成為一名真正的程序員。

18. 回到某種形式的學校教育,去學習系統的知識。

即使是從精英計算機科學碩士課程畢業的最優秀的程序員也將在工作中學習。事實上,在職培訓是大型科技公司工作的最佳福利之一。公司將送你去學習「高昂」的課程和研討會,以培訓你使用他們希望使用的最新技術。如果碰巧在工作中沒有學到足夠的知識,你將接觸到許多在線編碼學院和youtube視頻,以提高你的技能。

19. 被不喜愛的公司聘用

即使你是一個平庸的程序員,某些公司也會需要你的技能。當他們面試你的時候,試著記住你也在面試他們。根據公司的文化,你可能會發現自己想對這份看似輕松地工作說不。作為程序員,工作時間很長。找到適合自己的公司文化幾乎至關重要。幸福度會帶來好的工作表現。如果你的技能無可替代,總會有其他公司排隊挖你。非必要情況,不要輕易妥協。

20. 技術面試不合格

技術面試不是開玩笑。高級程序員經常以編寫技術面試問題為樂。通常,出於某些原因,這些問題總是格外難。如果技術面試不合格,這也不是世界末日。這當然不能證明你的編程能力。它只測試你的知識庫。試著想想積極的一面。如果個人技能出色,經理們會記住你。如果他們看好你的能力,然而你並不適合擔任這個角色,他們仍可能會聯系你,為你提供另一個職位。

21. 被告知你很出色

在職業生涯中,有時候你會覺得自己像個明星。經理需要依靠你完成項目,他們誇贊你很棒,以激起你的干勁。你會覺得自己處於世界之巔。注意了,這是在誘導你變得自負。請保持謙虛,畢竟學無止境,人外有人山外有山。

22. 被貶得一無是處

在職業生涯中,有時你會覺得自己一無所知。對項目沒信心人會告訴你,你什麼都不知道。也許他們這樣做是為了讓你了解自己身處的位置。但是,既然你正在閱讀這篇文章,你就會大踏步前進。因為你知道的可能比你想的還要多。你所掌握的知識也會隨著時間增多。一年後,人們會尊重你,所以請堅持下去。假以時日,甚至可能贏得那位曾經將你貶得一無是處的人的尊重。

23. 與你所欣賞的其他程序員競爭

編程最絕妙的方面之一就是競爭。當你編寫一個你欽佩的程序員認為值得的代碼時,會開心地像贏了彩票。編程競爭總是很有趣。精妙之處不在於誰是最好的而是互相學習。

24. 可能理解不了同事的話

一開始,這種情況可能是每周或每月一次。在新編程工作中,你可能理解不了同事剛剛說的話。可能以下兩個原因。鑒於生活環境的不同,你可能聽不懂他們的口音。在這種情況下,請另一位同事翻譯。不能理解某人的言論並不可恥。很可能,其他同事也花了多年時間才得以習慣這種口音。另一個原因是同事剛才所說的完全超出了你的知識范圍。那也沒關系。畢竟,同事是專家。讓同事以圖片形式解釋一下。你會想要拉把椅子坐下詳聽,因為這可能需要一段時間。

25. 看到去年寫的面條式代碼,你會感到羞恥

這事兒常常發生。開始時因為Perl代碼,我被批評了。這是一個記錄良好的代碼,設計也很好。但我卻用一種難以閱讀的語言寫出來。所以,我寫了面條式代碼。但是,每年,無論我怎麼努力,我仍然會找到一些我清除由於快速完成工作而編寫的面條式代碼。這就是程序員的日常。我們解決問題並修補問題。不必覺得羞愧。當你意識到這是你寫的,返回修正即可。

26. 當你厭倦了看另一行代碼時,你將在資料庫項目中躲避

當你進行一次精彩的編程攻關時會發生這種情況。已經兩個月了。你需要休息一下。但是你喜歡這種勢頭,所以繼續前進。然後你意識到SQL很有趣。無法弄清楚為什麼你不能看另一行代碼。但不知何故,將數據放入資料庫並再其取出使你感到愉悅。你陶醉於完全邏輯語言的簡單性。

27. 對編程馬拉松又愛又恨

編程馬拉松現在很常見。程序員加入團隊並相互競爭。在這個過程中,他們會在幾個小時內進行高密度學習。你會因為團隊精神愛上編程馬拉松,也會因為快速碼字造成的腕關節綜合症而討厭它。你也會討厭工作擁擠的房間以及在編程時感官的過度刺激。

28. 閱讀研究論文時,會覺得一個字看不懂

你會說英語嗎?好大多數人會說是的。但是,你可能會一遍又一遍地閱讀一些研究論文,並發現自己一頭霧水。對我來說,在學習基礎數學之前,大多數關於演算法的研究論文看起來都像是一片巨大的霧林。然後,突然間,一切似乎又都撥開迷霧了。

29. 購買耳機

在職業生涯的某個階段,當你專注於代碼時,會發現任何類型的噪音都會阻礙你的感官。買一個能夠隔絕外部噪音的好耳機,可以讓你在嘈雜房間內專心工作。在某些時候,還會發現音樂有助於編碼。編碼生涯的早期我就發現,音樂節奏有助於流暢地編碼。即使是現在,需要提高工作效率時,我還會找些音樂來聽。

30. 抓住與同伴交流的大好時機。

在職業生涯的某個階段,你會成為公司非常重要的開發人員群體。這時你將被邀請到異地技術專業人員將在這里進行社交活動。高層管理人員會藉此機會了解你。這並非是無憂無慮、享受的時候。相反是與同伴交往和交流的大好時機。有時,外出活動還包括與其他公司的技術專家的會議。

⑶ 新手入門如何快速提升編程水平

首先,並沒有快速提升的辦法,都是孰能生巧,學習越多掌握的越多。學習編程是一件好事,新手入門不要認為編程很難,也不要急功近利,先了解你學習編程的目的是什麼,目的決定發展方向。

其次,目前對於編程有很多種編程語言以及相對應的開發軟體,根據你的情況選一種語言進行專業學習,不要盲亂學習。編程是一種融匯貫通的東西,學會基礎到後邊就越來越簡單了。而且可以向多種語言發展。

再次,這邊有些一些常用的編程語言,對於新手來說有些幫助。
C語言 是一種可移植性和多系統平台的編程語言
JAVA 是一種功能強大可移植性強的開發語言
HTML 是一種超文本標記語言
Java Script 是一種基於客戶端的腳本語言


程序語言,顧名思義就是一種語言,是用於交流的,程序就是計算機的語言和人類語言的翻譯者,做一個程序員就是要把人類世界的問題用計算機的方法去解決和展現,可是因為種種原因,大多數人在如何學好語言,如何學好開發平台上疲於奔命,到頭來你只會敲寫代碼。如果想做一個合格的程序員,C++、JAVA、sql、都是一定要學的,另外,不要去學你喜歡的,也不要去費勁腦子想該學什麼,看看IT界,IT市場需要什麼,你就學什麼。

新手學編程要從根本出發

從理論上來說,需要廣泛的閱讀,了解演算法的博大精深和計算機的基本理論。
從實踐上來說,需要有廣泛的練習,練習的廣泛在於練習不同的內容。
然後就是創新精神和數學思維能力,這些都是需要培養的。

基礎要打好

學編程要具備一定的基礎,總結之有以下幾方面:

(1)數學基礎 、從計算機發展和應用的歷史來看計算機的數學模型和體系結構等都是有數學家提出的,最早的計算機也是為數值計算而設計的。因此,要學好計算機就要有一定的數學基礎,出學者有高中水平就差不多了。

(2)邏輯思維能力的培養 、學程序設計要有一定的邏輯思維能力,「思維能力」的培養要長時間的實踐鍛煉。要想成為一名優秀的程序員,最重要的是掌握編程思想。要做到這一點必須在反復的實踐、觀察、分析、比較、總結中逐漸地積累。因此在學習編程的過程中,我們不必等到什麼都完全明白了才去動手實踐,只要明白了大概,就要敢於自己動手去體驗。誰都有第一次。有些問題只有通過實踐後才能明白,也只有實踐才能把老師和書上的知識變成自己的,高手都是這樣成材的。

(3)選擇一種合適的入門語言、 面對各種各樣的語言,應按什麼樣的順序學呢?程序設計工具不外乎如下幾類:

1.本地開發應用軟體開發的工具有:Visual Basic 、Delphi 、VC++ ( C++ Builder ) 等;資料庫開發工具有:Visual Foxpro 、Oracle Developer 、Power Builder 等。

2.跨平台開發開發工具如 Java 等。

3.網路開發對客戶端開發工具如:Java Script 等;對伺服器開發工具如:php 、ASP 、JSP 、ISAPI 、NSAPI 、CGI 等。以上不同的環境下幾種開發工具中 VB 法簡單並容易理解,界面設計是可設化的,易學、易用。選 VB 作為入門的方向對出學者是較為適合的。 (但現在已經過時)

培養好的編程習慣

編程入門不難,但入門後不斷學習是十分重要的,相對來說較為漫長。在此期間要注意養成一些良好的編程習慣。編程風格的好壞很大程度影響程序質量。良好的編程風格可以使程序結構清晰合理,且使程序代碼便於維護。如代碼的縮進編排、變數命令規則的一致性、代碼的注釋等。

多問多學習

掌握編程思想必須在編程實際工作中去實踐和體會。編程起步階段要經常自己動手設計程序,具體設計時不要拘泥於固定的思維方式,遇到問題要多想幾種解決的方案。這就要多交流,各人的思維方式不同、角度各異,各有高招,通過交流可不斷吸收別人的長處,豐富編程實踐,幫助自己提高水平。親自動手進行程序設計是創造性思維應用的體現,也是培養邏輯思維的好方法。

總結

1、先照書上的題目寫,題目的設計是有道理的鞏固基礎知識。

2、找數學題,寫個小程序解決,熟悉演算法和基礎函數。

3、自己出題目,小一點的,如自編資源管理器、自編寫字板之類,練習WINDOWS下的編程。

4、結合身邊的事,找個中等課題,或看別人的程序,自已想辦法實現。

5.把教材中的例子,自己仿照著寫一遍,上機運行,看結果.要知道,任何產品都是有例子的,有機結合或仿照。

6.從自己熟悉的事情入手,如成績統計,編制一段程序,完成一個功能.然後再完善。

7.要反復破壞代碼,從破壞中尋找代碼的規律。

8.必須經常反復上機練習。

⑷ 作為一名程序員,如何提高自己的編程能力

現在的程序員越來越多,如果,你身為一名程序員,但是,你的編輯能力並不是很好的話,你就會被一些能力好的人取代。所以你要多看一些書籍,還要多做一些練習題。

⑸ C#初級程序員,怎麼快速提高技能呢做技術牛人

1:團隊精神和協作能力
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是不可想像的。獨行俠可以作一些賺錢的小軟體發點小財,但是一旦進入一些大系統的研發團隊,進入商業化和產品化的開發任務,缺乏這種素質的人就完全不合格了。

2:文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未乾的毛孩子,良好的文檔是正規研發流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。

3:規范化,標准化的代碼編寫習慣
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和糾錯,也有助於不同技術人員之間的協作。
有些coding fans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己壓根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質需求。
再看看整個linux的搭建,沒有規范化和標准化的代碼習慣,全球的研發協作是絕對不可想像的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多小朋友寫程序往往只關注一個功能需求,他們把性能指標全部歸結到硬體,操作系統和開發環境上,而忽視了本身代碼的性能考慮,有人曾經放言說寫一個廣告交換程序很簡單,這種人從來不知道在百萬甚至千萬數量級的訪問情況下的性能指標是如何實現的,對於這樣的程序員,你給他深藍那套系統,他也做不出太極鏈的並訪能力。性能需求指標中,穩定性,並訪支撐能力以及安全性都很重要,作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。

5:復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復寫一些沒有任何新意的代碼,這其實是中國軟體人才最大浪費的地方,一些重復性工作變成了熟練程序員的主要工作,而這些,其實是完全可以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作,如果一個軟體研發單位和工作組能夠在每一次研發過程中都考慮到這些問題,那麼程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投入到創新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統裡面作為功能模塊都能適合的很好,而現在我看到的是,很多小公司軟體一升級或改進就動輒全部代碼重寫,大部分重復性工作無謂的浪費了時間和精力。

6:測試習慣
作為一些商業化正規化的開發而言,專職的測試工程師是不可少的,但是並不是說有了專職的測試工程師程序員就可以不進行自測;軟體研發作為一項工程而言,一個很重要的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成後進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。當然並不是程序員要對自己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和各種性能需求,有針對性的進行相關測試並盡早發現和解決問題,當然這需要上面提到的需求理解能力。

7:學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就更加高了。但是學習也要找對目標,一些小coding fans們,他們也津津樂道於他們的學習能力,一會學會了asp,一會兒學會了php,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目的追逐一些膚淺的,表面的東西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提高。
善於總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高,一個程序員才可能成長起來。
一個不具備成長性的程序員,即便眼前看是個高手,建議也不要選用,因為他落伍的時候馬上就到了。
具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的各種素質都不是由IQ決定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序員對自己工作的認識,是一種意識上的問題。

那麼作為高級程序員,以至於系統分析員,也就是對於一個程序項目的設計者而言,除了應該具備上述全部素質之外,還需要具備以下素質:

第一,需求分析能力
對於程序員而言,理解需求就可以完成合格的代碼,但是對於研發項目的組織和管理者,他們不但要理解客戶需求,更多時候還要自行制定一些需求,為什麼這么說呢?
一般而言,進行研發任務,也許是客戶提出需求,也許是市場和營銷部門提出的需求,這時候對於研發部門,他們看到的不是一個完整的需求,通常而言,該需求僅僅是一些功能上的要求,或者更正規些,可能獲得一個完整的用戶視圖;但是這都不夠,因為客戶由於非技術因素多一些,他們可能很難提出完整和清晰,或者說專業性的性能需求,但是對於項目組織者和規劃者,他必須能夠清醒認識到這些需求的存在並在完成需求分析報告的時候適當的提出,同時要完整和清晰的體現在設計說明書裡面,以便於程序員編碼時不會失去這些准則。
程序設計者必須正確理解用戶需求所處的環境,並針對性做出需求的分析,舉例而言,同樣一個軟體通過ASP租用方式發布和通過License方式發布,性能需求可能就是有區別的,前者強調的是更好的支撐能力和穩定性,而後者則可能更強調在各種平台下的普適性和安裝使用的簡捷性。

第二,項目設計方法和流程處理能力
程序設計者必須能夠掌握不少於兩到三種的項目設計方法(比如自頂至下的設計方法,比如快速原型法等等),並能夠根據項目需求和資源搭配來選擇合適的設計方法進行項目的整體設計。設計方法上選擇不當,就會耽誤研發周期,浪費研發資源,甚至影響研發效果。
一個程序設計者還需要把很多功夫用在流程圖的設計和處理上,他需要做數據流圖以確立數據詞典;他需要加工邏輯流圖以形成整體的系統處理流程。一個流程有問題的系統,就算代碼多漂亮,每個模塊多精緻,也不會成為一個好的系統。當然,做好流程分析並選擇好項目設計方法,都需要在需求分析能力上具有足夠的把握。

第三,復用設計和模塊化分解能力
這個似乎又是老調重談,前面基本素質上不是已經說明了這個問題嗎?
作為一個從事模塊任務的程序員,他需要對他所面對的特定功能模塊的復用性進行考慮,而作為一個系統分析人員,他要面對的問題復雜的多,需要對整體系統按照一種模塊化的分析能力分解為很多可復用的功能模塊和函數,並針對每一模塊形成一個獨立的設計需求。舉個例子,好比是汽車生產,最早每輛汽車都是獨立安裝的,每個部件都是量身定做的,但是後來不一樣了,機器化大生產了,一個汽車廠開始通過流水線來生產汽車,獨立部件開始具有一定的復用性,在後來標准化成為大趨勢,不同型號,品牌甚至不同廠商的汽車部件也可以進行方便的換裝和升級,這時候,汽車生產的效率達到最大化。軟體工程也是同樣的道理,一個成熟的軟體行業,在一些相關項目和系統中,不同的部件是可以隨意換裝的,比如微軟的許多桌面軟體,在很多操作模塊(如打開文件,保存文件等等)都是復用的同一套功能模塊,而這些介面又通過一些類庫提供給了桌面應用程序開發者方便掛接,這就是復用化的模塊設計明顯的一個佐證。
將一個大型的,錯綜復雜的應用系統分解成一些相對獨立的,具有高度復用性的,並能僅僅依靠幾個參數完成數據聯系的模塊組合,是作為高級程序員和系統分析員一項最重要的工作,合適的項目設計方法,清晰的流程圖,是實現這一目標的重要保證。

第四,整體項目評估能力
作為系統設計人員,必須能夠從全局出發,對項目又整體的清醒認識,比如公司的資源配置是否合理和到位,比如工程進度安排是否能最大化體現效率又不至於無法按期完成。評估項目整體和各個模塊的工作量,評估項目所需的資源,評估項目可能遇到的困難,都需要大量的經驗積累,換言之,這是一種不斷總結的累計才能達到的境界。在西方一些軟體系統設計的帶頭人都是很年長的,比如4,50歲,甚至更老,他們在編碼方面已經遠遠不如年輕人那樣活絡,但是就項目評估而言,他們幾十年的經驗積累就是最重要和寶貴的財富。中國缺這么一代程序員,主要還不是缺那種年紀的程序員,而是那種年紀的程序員基本上都是研究單位作出來的,都不是從專業的產品化軟體研發作出來的,他們沒有能積累那種產品化研發的經驗,這也是沒有辦法的事情。
第五,團隊組織管理能力
完成一個項目工程,需要團隊的齊心協力,作為項目設計者或研發的主管人,就應當有能力最大化發揮團隊的整體力量,技術管理由於其專業性質,不大同於一般的人事管理,因為這裡面設計了一些技術性的指標和因素。
首先是工作的量化,沒有量化就很難做到合適的績效考核,而程序量化又不是簡單的代碼行數可以計算的,因此要求技術管理人員需要能真正評估一個模塊的復雜性和工作量。
其次是對團隊協作模式的調整,一般而言,程序開發的協作通常分為小組進行,小組有主程序員方式的,也有民主方式的,根據程序員之間的能力水平差距,以及根據項目研發的需求,選擇合適的組隊方式,並能將責權和成員的工作任務緊密結合,這樣才能最大發揮組隊的效率。
一個代碼水平高的人,未必能成為一個合格的項目研發主管,這方面的能力欠缺往往是容易被忽視的。

綜上可以看到,作為一個主管研發的負責人,一個項目設計者,所需要具備的素質和能力並不是程序代碼編寫的能力,當然一般情況下,一個程序員通過不斷的總結提高達到了這種素質的時候,他所具有的代碼編寫能力也已經相當不簡單了,但是請注意這裡面的因果關系,一個高水平的項目設計者通常已經是代碼編寫相當優秀的人了,但是並不是一個代碼相當優秀的程序員就可以勝任項目設計的工作,這裡面存在的也不是智商和課本的問題,還是在於一個程序員在積累經驗,逐步提升的時候沒有意識到應當思考哪方面的東西,沒有有意識的就項目的組織和復用設計進行揣摩,沒有經常性的文檔習慣和總結習慣,不改變這些,我們的合格的項目設計者還是非常欠缺。

另外,為防止有無聊的人和我較真,補充一點,本文針對目標是作商業化的軟體項目和工程,那些科研機構的編程高手,比如演算法高手,比如圖象處理高手,他們的工作是研究課題而非直接完成商業軟體(當然最終間接成為商業產品,比如微軟研究院在作的研究課題),因此他們強調的素質可能是另外的東西,這些人(專家),並不能說是程序員,不能用程序員的標准去衡量。

最後補充一點東西,一個軟體項目研發的設計流程是怎樣的呢?以通常標準的設計方法為例,(不過筆者喜歡快速原型法)。

第一個步驟是市場調研,技術和市場要結合才能體現最大價值。

第二個步驟是需求分析,這個階段需要出三樣東西,用戶視圖,數據詞典和用戶操作手冊。用戶視圖是該軟體用戶(包括終端用戶和管理用戶)所能看到的頁面樣式,這裡麵包含了很多操作方面的流程和條件。數據詞典是指明數據邏輯關系並加以整理的東東,完成了數據詞典,資料庫的設計就完成了一半多。用戶操作手冊是指明了操作流程的說明書。請注意,用戶操作流程和用戶視圖是由需求決定的,因此應該在軟體設計之前完成,完成這些,就為程序研發提供了約束和准繩,很遺憾太多公司都不是這樣做的,因果顛倒,順序不分,開發工作和實際需求往往因此產生隔閡脫節的現象。
需求分析,除了以上工作,筆者以為作為項目設計者應當完整的做出項目的性能需求說明書,因為往往性能需求只有懂技術的人才可能理解,這就需要技術專家和需求方(客戶或公司市場部門)能夠有真正的溝通和了解。

第三個步驟是概要設計,將系統功能模塊初步劃分,並給出合理的研發流程和資源要求。作為快速原型設計方法,完成概要設計就可以進入編碼階段了,通常採用這種方法是因為涉及的研發任務屬於新領域,技術主管人員一上來無法給出明確的詳細設計說明書,但是並不是說詳細設計說明書不重要,事實上快速原型法在完成原型代碼後,根據評測結果和經驗教訓的總結,還要重新進行詳細設計的步驟。
第四個步驟是詳細設計,這是考驗技術專家設計思維的重要關卡,詳細設計說明書應當把具體的模塊以最『干凈』的方式(黑箱結構)提供給編碼者,使得系統整體模塊化達到最大;一份好的詳細設計說明書,可以使編碼的復雜性減低到最低,實際上,嚴格的講詳細設計說明書應當把每個函數的每個參數的定義都精精細細的提供出來,從需求分析到概要設計到完成詳細設計說明書,一個軟體項目就應當說完成了一半了。換言之,一個大型軟體系統在完成了一半的時候,其實還沒有開始一行代碼工作。那些把作軟體的程序員簡單理解為寫代碼的,就從根子上犯了錯誤了。

第五個步驟是編碼,在規范化的研發流程中,編碼工作在整個項目流程里最多不會超過1/2,通常在1/3的時間,所謂磨刀不誤砍柴功,設計過程完成的好,編碼效率就會極大提高,編碼時不同模塊之間的進度協調和協作是最需要小心的,也許一個小模塊的問題就可能影響了整體進度,讓很多程序員因此被迫停下工作等待,這種問題在很多研發過程中都出現過。編碼時的相互溝通和應急的解決手段都是相當重要的,對於程序員而言,bug永遠存在,你必須永遠面對這個問題,大名鼎鼎的微軟,可曾有連續三個月不發補丁的時候嗎?從來沒有!

第六個步驟是測試
測試有很多種:按照測試執行方,可以分為內部測試和外部測試;按照測試范圍,可以分為模塊測試和整體聯調;按照測試條件,可以分為正常操作情況測試和異常情況測試;按照測試的輸入范圍,可以分為全覆蓋測試和抽樣測試。以上都很好理解,不再解釋。
總之,測試同樣是項目研發中一個相當重要的步驟,對於一個大型軟體,3個月到1年的外部測試都是正常的,因為永遠都會又不可預料的問題存在。
完成測試後,完成驗收並完成最後的一些幫助文檔,整體項目才算告一段落,當然日後少不了升級,修補等等工作,只要不是想通過一錘子買賣騙錢,就要不停的跟蹤軟體的運營狀況並持續修補升級,知道這個軟體被徹底淘汰為止。

寫這些步驟算不上賣弄什麼,因為實話講我手邊是一本《軟體工程》,在大學里這是計算機專業的必修課程,但是我知道很多程序員似乎從來都只是熱衷於什麼《30天精通VC》之類的,他們有些和我一樣游擊隊出身,沒有正規學過這個專業,還有一些則早就在混夠學分後就把這些真正有用的東西還給了老師。

網上現在也很浮躁,一些coding fans亂嚷嚷,混淆視聽,實際上真正的技術專家很少在網上亂發帖子的,如筆者這樣不知天高地厚的,其實實在是算不上什麼高手,只不過看不慣這種對技術,對程序員的誤解和胡說,只好挺身而出,做撥亂反正之言,也希望那些還沉迷於一些錯誤人士的coding fans們能認真想想,走到正途上,畢竟那些聰明的頭腦還遠遠沒有發揮應有的價值。

⑹ 如何從沒有一點技術知識的小白成為一個合格的程序員

一.學好C語言的運算符和運算順序
二.學好C語言的四種程序結構
(1)順序結構
(2) 分支結構 ①if(條件) ②if(條件) ③嵌套分支語句 其語句格式為 ④switch開關語句
(3)循環結構
(4)模塊化程序結構
三.掌握一些簡單的演算法
以上是C最基礎的東西, 先會了這些, 以後的不同道路你可以自己選擇了, 對這些有一些大體了解,你就知道以後怎麼做了,GOOD LUCK, 另外我談談我的經驗

[經驗之談]30歲,我的程序,我的夢!
程序人生 : 30歲,我的程序員夢想
作 者: redbridge (雪燃)

30歲,開始實現我的程序員夢,從一個編程愛好者,從一個業余的程序員,一個水平不高的程序員,一個半道出家的程序員......
我的經歷到這里就告一段落了,五年裡跳了五次槽,不知道和大家比算不算多J,沒有什麼太多起伏,但我想很多朋友可能會和我有類似的經歷,不知道能不能引起你們的共鳴。我想對我上面所說的話給一個總結:

1. 如果你覺得自己應該追求什麼,不管遇到什麼困難千萬不要放棄,一定要堅持下去。
2. 不要因為自己年輕就找理由揮霍時間,少玩一點SC、CS、魔獸3、傳奇、魔力或者…….,多看點書,多練練題。
3. 如果你還是在校的學生,英語很差,專業課也很差。沒關系,想怎麼學計算機就怎麼學計算機吧。其它地只要能混到畢業證就行了。除非你對自己的未來沒有信心。(當然,如果你的理想不僅僅是要做一個程序員,那你別丟掉英語。)
4. 如果你不是科班出身,想要轉行而不知該怎麼開始的話,建議你先看兩類書:(1)計算機原理;(2)數據結構和演算法。(看數據結構之前先看C語言)。
5. 什麼時候努力都不晚,關鍵是你明白要努力了,大器晚成總比一事無成要好的多。
6. Java、.net、C++、PB、VB、Delphi、匯編到底應該學哪個?我的經驗,哪個最簡單就先學哪個、公司用哪個你就學哪個、哪個和你有緣(比如剛好你認識一個願意幫助你的Delphi高手)你就學哪個,如果你都學,或者三天兩頭的換,我可以告訴你結果肯定是什麼都不會,不要心浮氣燥,他們都只是工具,學精一門其它的就相通了,重要的是掌握編程的思想。如果你問我面向對象(好像現在已經是面向需求了)、UML、WebLogic、WebService、軟體工程、XML…….應該怎麼學呀,對不起,這些我也確實不是都會,但請相信,你先實實在在的寫上十萬行以上的代碼以後,那些東西你自然就慢慢會了。
7. 不要以為程序員的工資都很高,程序員之間的水平差異也大。公司衡量一個人的待遇標準是他能給公司帶來多大的效益。如果你體現了自己的價值,公司會主動給你加薪的,當然你也可以自己主動提,但一定要在你表現出了自己的價值之後。
8. 輕易不要跳槽,如果非要跳,也要保持工作經驗上的延續,而不是從新開始,不然就會象我一樣走很多彎路。
9. 如果你以為程序員都是熬夜熬出來的,那麼你錯了,因為它的代價就是縮短你的青春!大家不要象我一樣,真的,熬夜一點也不好!記住老毛的話:如有恆,何須三更起,半夜眠;最怕莫,三天打魚兩天曬網,竹籃打水一場空!
10. 這一點是我覺得最精華的一點:「君子性非異也,善假於物也。」這句話的本意是一個水平很高的人本身並不一定很高明,關鍵是他善於利用別人的高明!我在這里做個借鑒,就是要充分利用自己身邊的資源,不放過任何一個可以提高自己的機會。大家不要誤會,這里的假於物可不是指抄襲別人的源代碼,而是指通過學習別人的源代碼把他的思想擴展到自己的思想里去。
註:上面的十大「精華」純屬我個人的「謬論」,您自己看著消化,有用的收下,沒用的請拖入「回收站」。如果你覺得這些總結不過是一些浮華之詞,那請你先問問自己:「是不是在行動上都真正做到了。」
這就是我,一個不算優秀,不算勤奮;玩能玩通宵,學也學能學通宵;對夢想的追求很執著;到了30才開始真正寫程序;一個很平凡但又不甘於平凡的人……我的經歷相信很多朋友都有過的,我現在也不能算是一個成功人士,但我相信我的經歷卻是值得大家借鑒的,因為我終究代表了一類人。
最後我還想說一點:現在很多朋友都抱怨中國的軟體業環境太差,前途渺茫。確實是這樣,我有同感。不過我想軟體業不過是千萬個行業中的一種,每一個行業總是會有起落的,中國的軟體業環境差有她的歷史原因,我們不要總是簡單地和印度相比。抱怨沒有意義,已經這樣了,抱怨不能使她變好,希望我們每一個人多貢獻一份自己的力量,總有一天她會變的比印度還好,甚至比美國還好。
最後:希望所有的程序員和擁有成為程序員夢想的朋友們在新的一年裡心想事成,萬事如意。請相信我:明天不一定更美好,但美好的一天一定會來!
===================================================================
好好看看這篇文章,對你肯定有用.

⑺ 初級程序員應該如何鍛煉自己的邏輯思維和思考能力

對於初級程序員要想提高這兩方面的能力,最好的辦法就是解剖麻雀——向前人的經典案例學習。
初級程序員還不需要完成高難度的突破,需要做的是掌握基礎知識,了解前人遇到了哪些問題,他們是如何思考和解決的,
多看多思考,經常動手做,就會大幅度提高自己這兩方面的能力的。

⑻ 一名小白程序猿怎麼快速提升編程能力

一、先列三個常見的開發場景:

1、拿到一個模塊詳細設計文檔,大部分程序員的通常做法就是開始搭建界面代碼,然後從第一個按鈕點擊事件或頁面Load事件開始寫第一行業務代碼。寫的差不多了,就運行一下,發現哪裡不是自己想的那樣,就改改,直到改到是自己預想的那樣。

2、做完了一個功能模塊或幾塊相關聯的功能模塊,輸入111asd,發現新建正常、保存正常,就提交給測試人員。測試員用測試用數據、測試場景用例來測試,發現有問題,就登記bug。對於嚴重的影響下一步測試的BUG,測試員就用內部IM通知這個開發人員。對於不影響繼續往下測試的BUG,測試員就登記下來,等程序員有空時處理。

3、程序員一般工作不希望大家打擾,所以開發起來就是開發。等手頭開發告一段落,就看看BUG庫。發現有與自己有關的BUG,就從第一個BUG開始看起。就開始通過IM和測試員掰扯起來(這不是個BUG啊、業務邏輯不是你想的那樣啊、我這里不能重現啊、你給的信息描述不清晰啊),於是IM幾來幾往,甚至跑過去當面交流一番,甚至會拉扯上產品經理一起討論,更甚者需要項目經理或產品經理發起一個會議來集體討論一下

這是不是很熟悉呢看這就是大部分程序員開發的三個步驟:寫代碼、自測、修復BUG。

二、說好的代碼設計、代碼測試呢看

代碼設計看那不是都有開發平台么,已經固化了啊。那不是維護舊功能做完善修改呢么,又不是寫新代碼,只能在現有代碼基礎上修改啊,你又不能大幅重構。

代碼測試看你丫需求討論期、產品設計期、設計評審期那麼長,都把研發項目時間佔光了,就留下2個星期讓我們寫代碼,我們哪裡有時間搞那麼深的測試。還想讓我們搞結對編程看還想讓我們搞測試驅動開發看

而且你看測試,什麼功能測試、集成測試、性能測試、安全測試、安裝部署測試、升級測試、遷移測試、UAT測試,一大堆測試,測試也需要很多時間。

一個項目,需求討論、產品范圍規劃與評審、產品設計與設計評審佔了一個半月,開發+自測就一個月,測試佔了一個半月,這就4個月了啊。

三、為啥程序員寫代碼總是寫寫測測看

剛才大家也都看到了,大部分程序員都是從界面代碼開始寫起,而且寫一寫,就運行一下看看。為什麼會是這種開發方式看

那是因為大部分程序員缺乏在腦子中的整體建模能力。只能做出來一點,真實的感覺一下,然後再往下。

有些是產品經理的上游就有問題,沒給出業務流程圖(因為產品經理也沒做過業務),也沒畫清楚產品功能操作流程圖。

為啥沒給出業務流程圖看因為產品經理不熟悉業務,另外,產品經理也沒有流程建模能力啊。為啥沒畫清楚產品功能操作流程圖啊看因為不會清晰表達流程啊。

很多產品經理、程序員,都缺乏分類、分層、相關、先後能力,更別說總結、洞察能力。

這是基本訓練,是一個做事頭腦清醒的人必備的技能,這不是一個程序員或產品經理或測試員的特定技能要求。

我經常看書就梳理書的脈絡,每看一本就寫一篇總結。我過去閑扯淡還梳理過水滸傳、紅樓夢的人物關系圖呢,其實就在事事上訓練自己的關聯性、層次性、洞察性。

我經常面試一個人時,我會問這樣的問題:逗你把我剛才說的話復述一遍,另外你再回答一下我為什麼會這樣看地,其實,我就在看一個人的細心記憶、完整梳理、重現能力,我也在看一個人的梳理、總結、洞察能力。

我個人寫代碼就喜歡先理解業務流,然後理解數據表關系,然後理解產品功能操作流,大致對功能為何這樣設計、功能這樣操作會取什麼表、插入或更新哪些表,哪些表的狀態欄位是關鍵。

然後我寫代碼的時候,就根據我所理解的業務流、功能操作流、數據輸入輸出流,定義函數,定義函數的輸入與輸出。

然後,我會給函數的輸入值,賦上一些固定值,跑下來看看能否跑通這幾個關聯函數,看看還需要怎樣的新增函數,或者看看函數的輸入輸出參數是否滿足跑通。

剩下的事,就是我填肉寫詳細邏輯代碼了。

當然,大部分人沒我這樣的邏輯建模能力。怎麼閱讀理解也想像不出來,也沒法定義函數。畢竟有邏輯建模能力的程序員都很少,100個人里有10個,已經是求爺爺告奶奶好幸運了。

那怎麼辦呢看

我建議是分離分工配合,這就是現實中沒辦法的辦法。讓有邏輯建模能力的人來設計函數框架、來設計工具來設計代碼模板,然後讓沒有邏輯建模能力的人來填肉寫詳細邏輯代碼。

我們可以先從最緊要的模塊開始這么做。不緊要的模塊,還讓它放任自流,讓熟練手程序員繼續塗抹。

我曾經還讓有頭腦的程序員做榜樣,給大家分享他是怎麼規劃函數的,怎麼做維護性代碼的代碼結構改善的。但是發現效果並不佳,其他人並沒有因此能做代碼設計。可能邏輯建模能力是個人的基本素質,是從小到大訓練成型的,不是你一個大學已經幾年的人能夠短時間內可以訓練的。

所以啊,還是讓能走的人先走,讓從最緊要的模塊開始這么做。

不必擔心這樣做後,因為過去一件事被分工(一個做代碼框架一個填肉)成兩個人做了會降低工作效率。我們很多的工作效率低就是因為半瓶子醋搞出來的,來回反復修改。

真是應了劉德華在電影里說的那句話:說你又不聽,聽又聽不懂,聽懂了又不做,做又做不好,做不好還不服氣。

四、為什麼大部分程序員不做代碼測試或白盒測試或單元測試呢看

還是因為沒有代碼設計。因為沒有函數啊。所以,一個按鈕功能有多復雜,代碼就有多長。我見過2000行的函數,我也見過1000多行的存儲過程和視圖SQL。怎麼做白盒測試啊,這些代碼都粘在一起呢,要測,就得從頭到尾都得測。

所以啊,先學會設計函數,先寫好函數,這就求爺爺告奶奶了。很多開發了5年的熟練手程序員,可能都未必會寫函數。

函數的輸入輸出值就很有講究。很多人都寫死了,隨著版本迭代,發現過去定義的函數參數不夠用了,於是就新增了一個參數。然後,相關性異常就爆發了,其他關聯的地方忘改了,到底哪些有關聯,怎麼查啊,本系統沒有,沒准其他系統就調用你了,你根本不知道哪個神經人曾經COPY過你的代碼修吧修吧就改成了他的功能呢,而且裡面的很多代碼他看不懂也不敢刪,只要他實現的功能正常了他也不管了。於是,你改了你這個函數,他的系統就莫名出錯了。

所以,我一般會定義幾個對象來做參數。另外,我也很注重函數的日誌、函數的異常保護、異常拋出、異常返回。另外,我也很注重參數輸入值的合法性校驗。

所以啊,應該開發Leader們先制定函數編寫規范最佳實踐,輸入輸出參數怎麼定義比較好,函數的返回值如何定義比較好,函數的日誌記錄應該怎麼寫比較好,函數的異常保護、異常拋出、異常返回如何寫比較好。先教會一般程序員,先從會寫函數開始啊。

當然,你光有一份規范,程序員們還是不理解、不實際應用啊。所以,還得Leader們做好典型的代碼模板,裡面是符合函數規范的代碼框架,只有這樣,一般程序員們才會照貓畫虎適應了函數設計的編程習慣。

所以啊,我專門重新定義了leader的明確職責,其中第一個重要職責就是:負責工具/框架/模板/規范的制定,並且負責推廣且普及應用落地。

你不明確定義Leader的這個重要職責,你不對這個職責做明確的KPI考核,誰尿你啊。你以為好的工具/框架/模板/規范是靠人們的熱情、自發產生的么看我們還沒有那麼自覺高尚啊。

五、為什麼大部分程序員不寫注釋啊看

我經常說一句話,千萬別多寫注釋。為啥看

因為我們經常遇到的問題不是沒有注釋,而是更糟的是,注釋和事實代碼邏輯是不相符的。這就出現常見問題了:殘存下來的設計文檔是一個邏輯、注釋是一個邏輯說明、真實代碼邏輯又是一個,鍾表多了,你也不知道正確時間了。

所以啊,產品文檔、注釋、真實代碼,三者總是很難一致同步。我為了幾百人研發團隊能做到這個同步花了大量心血和辦法,但我最終也沒解決了這個問題,還把Leader們、總監們、我都搞的精疲力盡。

索性回歸到一切一切的本源,代碼,就是程序員的唯一產出,是最有效的產出。那麼,讓代碼寫的不用注釋也能看懂,咱得奔著這個目的走啊。

為啥看不懂,不就是義大利面條式代碼么,又長又互相交雜。

OK,我就規定了,每個函數不能超過50行。用這一個簡單規定和靜態代碼檢查插件,來逼迫大家嘗試著寫函數。有的函數屬於流程函數,是串起其他函數的,有的函數就是詳細實現函數,實現一個且唯一一個明確作用的。

有了流程函數和功能函數,而且每個函數不超過50行,這就比過去容易看懂了。

六、為什麼大部分程序員不抽象公共函數啊看

我經常說一句話:千萬別抽象公共函數啊。為啥看

因為大部分程序員缺乏抽象洞察能力。特別是有些積極熱情有餘、愛學習愛看書、半瓶子醋晃悠的二桿子,看了幾本UML、重構、設計模式、整潔代碼之道,就躍躍欲試了,還真敢給你抽象公共函數了。

一開始,他覺得80%相似,20%不相似,於是在公共函數裡面簡單寫幾個if..else做個區隔就可以。沒想到,越隨著版本迭代,這些功能漸漸越變越不一樣了,但是這個代碼已經幾經人手了,而且這是一個公共函數,誰也不知道牽扯多少,所以誰也不敢大改,發現問題了就加一個if..else判斷。

沒想到啊沒想到,這個本來當初公共的函數,現在變成了系統最大的毒瘤,最復雜的地方,誰也不敢動,除非實在萬不得已,手起刀落。

所以,我平時告誡程序員,純技術的、純通用的,你們可以嘗試搞搞抽象公共函數,對於業務的,你們還是簡單粗暴的根據Leader們做的代碼模板代碼框架,乖乖的復制、修改、填肉吧。

你們啊,先從做模板做代碼片段開始吧,咱們放到咱們內部代碼片段開源庫里,看誰的代碼片段被別人復制的多,說明你的代碼抽象設計能力越好了。那時候,我就大膽放心讓你撒丫子跑了。在沒有學會跑之前,給老子乖乖的復制、修改、填肉吧。

⑼ 程序員如何能快速的成長跟學習

我記得剛剛跨入大三的時候,當時對於NLP、IR、ML等知識,真的了解很少,那個時候做項目特別的痛苦,不知道從哪兒入手,很多時候為了解決一些問題,就開始花時間去做調研,開始學會在ACL等頂級的期刊上面去找論文,在Google文獻裡面去找論文來讀,那個時候真的是每一天保持抽時間讀至少一篇論文,讀完就開始總結;最後發現讀了六七十篇論文,才剛剛開始入門NLP這個領域,才知道有那麼多人在研究那麼多有意思的問題。

那段時間特別的充實,但是進步真的很快,從一個小白慢慢的編程了一個入門者,最起碼別人跟我講樸素貝葉斯還有邏輯回歸等我開始懂了,我開始制定如何去訓練一個模型,如何去選擇特徵,如果去抽取特徵;而這些都是來至於讀的那六七十篇paper,這六七十篇paper有的很經典,有的很垃圾,但是他們就像一張網一樣,在擴展我的知識面。

那段時間特別的充實,但是進步真的很快,從一個小白慢慢的編程了一個入門者,最起碼別人跟我講樸素貝葉斯還有邏輯回歸等我開始懂了,我開始制定如何去訓練一個模型,如何去選擇特徵,如果去抽取特徵;而這些都是來至於讀的那六七十篇paper,這六七十篇paper有的很經典,有的很垃圾,但是他們就像一張網一樣,在擴展我的知識面。

可以參考:http://acl2017.org/

可以參考:http://acl2017.org/

4、多和同行交流

不懂就要問,多和行業的牛人去交流;其實很多人都很願意和你交流,多問問別人是怎麼做的,那些技術問題有沒有什麼新的方法去解決等等,把你的問題准備好,可以請人家吃個飯,邊吃邊聊,或者直接向人家請教;請教完了做自己的總結,該補充知識的時候就要學會去找資料,慢慢的一步一步的進步,成長。不要想著一步登天,更別想著「速成」

⑽ Java程序員如何自我提升

一、編寫可讀性強的代碼

曾經碰到過多少人認為編寫一些不可思議的、復雜的代碼可以為他們提供工作的保障。「如果除了我其他人都不知道薪資報告模塊是如何工作的話,上面就肯定不敢炒我魷魚!」

當然,這在理論上可能是對的(盡管有太多的人在說這句話的時候往往高估了自己)。雖然企業老闆可能不會炒掉你,但他們也不會支付你很多薪水。如果公司不能在薪資報告模塊上失去你,那麼自然而然也不會晉升你。它不會把你放到另一個更受人矚目的項目上。這樣做只會讓你牢固地待在當前位置,就像死水一樣波瀾不驚。

而且,不要自欺欺人地以為這也可以測試市場反應。企業總是希望程序員能夠編寫干凈、可維護的代碼。他們需要刷掉不合格的人以滿足業務需求。如果你的簡歷主要特點是精通某一個點,那麼你就不會有很多選擇,因為在一次又一次的晉升考驗中,你的老闆總是會略過你。

不要走那條錯誤的路。與之相反,你需要編寫能夠使其他人受益的代碼,並讓業務靈活起來,無論是在項目人員配置上還是在對代碼進行更改的時候。


二、了解你的代碼如何讓別人賺錢

如果有人付錢讓你寫軟體,那麼你的輸出結果就應該產出經濟效益。學習並了解這個利益關系。發展向任何人解答這方面內容的能力。

對最新的客戶端技術或在雲中進行加速的能力感到興奮的開發人員比比皆是。對這些東西感到興奮,並且了解如何使用這些能力來賺錢的開發者就少見的多了。

如果你能針對產品特徵好好培養對業務動機的理解,那麼你就能做得更好。你會找到既能節省時間又同樣能實現業務目標的替代方法。或者,當有一個產品特徵證明不可能實現時,你可以提出能降低一部分成本的建議。

企業(特別是真正支付薪水的大boss)喜歡這種軟體人的思維。這將意味著你可以晉升,提供咨詢服務以及擔任領導角色。

三、對職業的思考

擅長編程代表了職業生涯的其中一個方面,並且是一個重要的方面。建議多考慮許多其他的方面,並且有目的地去發展和培養那些習慣。在你自己的時間里,你應該通過一切手段,愛上這個職業。當然還要確保你可以為他人和為自己賺到錢。

閱讀全文

與程序員小白如何提升演算法相關的資料

熱點內容
手機文件夾應用推薦怎麼關 瀏覽:605
伺服器為什麼要分業務口和管理口 瀏覽:682
楊輝三角java演算法 瀏覽:55
cmd編譯錯誤找不到符號 瀏覽:695
linuxip機器名 瀏覽:487
伺服器喇叭和頻道喇叭有什麼區別 瀏覽:31
閑魚排名演算法如何計算 瀏覽:975
linuxtargz解壓命令 瀏覽:741
還完房貸後解壓手續銀行會代辦嗎 瀏覽:811
解壓烹飪樂高 瀏覽:675
元神的伺服器怎麼看 瀏覽:362
stc8單片機串口中斷 瀏覽:954
信號分析pdf 瀏覽:927
暴力刪除命令 瀏覽:803
qt如何編譯加快速度 瀏覽:903
php添加數據sql語句 瀏覽:717
免費的小說app有什麼 瀏覽:405
螺桿壓縮機進氣閥動畫 瀏覽:651
兩台伺服器如何做負載均衡 瀏覽:227
程序員的工資是漲的嗎 瀏覽:813