當前位置:編程學習大全網 - 編程語言 - 天才程序員

天才程序員

我老板讓我第壹天上班做的第壹件事。

看兩篇文章:

程序員的隨想

雷軍

我不是天生的程序員,也不是天生喜歡計算機。我在高中的時候沒有想過自己以後會成為壹名程序員。我接觸到計算機純屬偶然——我的壹個好朋友小時候選擇了計算機專業,所以為了和這位朋友有更多的樂趣,我選擇了計算機系。在大學裏,我瞥見了計算機世界,並開始對它狂熱。畢業後,我開始了我的程序員生涯。

從開始寫程序到現在快十年了,寫了很多程序。從這幾年的風風雨雨中,我不禁有些體會。說到體驗,最大的體驗就是這條路太長了。

第壹,我願意讓妳痛苦壹輩子。

我不指望大家把寫程序和文學創作相提並論,但其中的痛苦不是壹個普通用戶能體會的。為了寫出壹個好的程序,我們度過了太多的不眠之夜。有朋友評論說,逗節目簡直是自殺,耗費大量精力和腦力。但還是有很多人不畏艱辛,勇往直前。

壹接觸電腦,我就發現了電腦的妙處:電腦遠沒有人復雜。如果妳的程序寫得很好,妳可以和計算機有非常和諧的關系,命令它們做妳想做的事情。這個時候,妳就是絕對的主人。每次坐在電腦前,就像在壹個王國裏旅遊。

電腦裏的世界很大,程序員活在自己想象的王國裏。妳可以深入到電腦的每壹個字節和每壹位。

這樣的日子簡直就是天堂,很多人都愛上了這樣的日子。

很多人認為程序員最多到35歲就可以不工作了,大腦應該差不多休息了。他們還認為寫程序是年輕人的事。到了壹定年齡,估計沒幾個人會再去當程序員了。

剛畢業的時候意氣風發,想先吃苦。30歲就退出了。長大了才發現自己的無知。壹個人大學畢業也就二十壹、二十二歲,技術成熟的時候可能二十五,接下來就是車票、老婆和房子,還有很多其他忙的事情。等壹切都搞定了,我可能三十五歲了。如果35歲就放棄,就不用選擇程序員這條路了。

電腦在中國由來已久,但直到1985年PC登陸中國才真正開始大規模使用。所以國內真正寫計算機程序的人,最長也就寫了十幾年(不知道有沒有這種人)。由於計算機在中國應用的時間較短,國內程序開發的主力軍主要是35歲以下的年輕人,但這並不意味著程序員就像粉紅女郎壹樣容易衰老。美國和臺灣省的開發者以三四十歲為主。剛開始寫程序的時候,我們覺得沒有什麽是我們做不到的(現在還能聽到這樣的豪言壯語),更重要的是,好像我們特別聰明,特別適合開發軟件,比外國人強多了。當我們真正接觸到國外那些優秀的開發者時,我們發現他們是如此的強大,他們都有著十幾年的開發經驗,而且大部分產品都出自這些有著豐富開發經驗的程序員之手。

畢業後,編程不僅是壹個愛好,更是壹份終身的工作,而且我確定我會做壹輩子,雖然我無意壹輩子只做這壹件事。用生命周期編程既容易又困難。如果妳很平庸,那就為工作寫點程序,讓寫了兩輩子的人都有。但要想全心全意寫程序,寫十年也不容易。現在很多朋友都洗過手了,有時候我也會有這種想法,但是壹旦面對電腦,我馬上就意識到,電腦還是我最擅長的,也是最方便的東西。

第二,我的未來不是夢

有些人努力學習編程技術,努力提高自己的編程水平,把高級程序員作為自己的追求目標,甚至是畢生的奮鬥目標。後來參加了真正的商業軟件開發後,覺得很迷茫,不知所措。

大學的時候,高級程序員也是我的目標。當時通過等級考試拿到了高級程序員證書,名片上印著“逗高級程序員”的字樣。後來我的水平提高了,似乎也是公認的優秀程序員。這時,我開始不知所措。希望自己的技術能得到別人的認可。被別人認可後能做什麽?回想起來,我發現做高級程序員沒什麽用。關鍵是妳能不能拿出創意和產品,妳的工作能不能得到社會的認可,妳能不能為社會創造財富。

我的未來很明確,開發適合社會的優質產品,為社會創造財富。

第三,每個節目都是壹件藝術品。

有人認為程序員什麽都不是,只是壹個技術活;也有人把編程說成是藝術創造,捧到天上去。這兩種意見爭論激烈,甚至針鋒相對。

讓我們來看壹份不同的工作。泥瓦匠要技術過硬,與藝術無關。但就是這些石匠給我們留下了無數的文物,比如樂山大佛,莫高窟等等。應該說這個石匠給我們留下了無盡的文化財富。我覺得編程的工作和泥瓦匠差不多,既是技術也是藝術。

現代軟件業已經達到了相當的規模,很多軟件的完成都需要大規模的兵團作戰。壹個熟練的程序員在接受了寫壹篇的任務後,往往只是寫代碼,留給發展的空間很小。在大型項目中,很多程序員只能了解到與自己模塊相關的非常局部的細節,同時也受到開發環境的限制。真的很難意識到他們從事的是藝術創作,更多時候感覺他們從事的是繁重的體力勞動。有時候會擔心自己正在努力的項目是否有意義,在同類產品中是否有競爭力,是否會因為硬件的發展和操作系統的更新換代而變得過時...

編程是壹項技術活動,這樣才能大規模進行,才會有軟件工程的理論。正是因為編程具有藝術創造的特性,所以我們的生活中才會有那麽多好的軟件產品。寫程序需要腦力和體力的努力。當我-我們-壹個小組完成壹個程序時,在我們眼裏,每個程序都是壹件藝術品..

程序員應該具備的素質。

程序員是壹個技術性的工作,在IT的發展中起著非常重要的作用。從底層硬件通信協議的建立,到數據傳輸層的處理,到操作系統的搭建,到數據庫平臺的搭建,再到應用層各種數據營銷平臺的搭建,程序員在其中扮演著重要的角色,為IT的發展做出了巨大的貢獻。

中國擅長編碼的人很多,但是中國的軟件行業存在很多誤區,尤其是在網絡應用的開發上。難以形成大規模的軟件開發力量和產品能力,不僅遠遠落後於美國,與印度也有較大差距。這些問題不在於我國程序員的智商和努力程度,也不在於國家和人民在開發上的投入,而很大程度上在於對技術、程序開發和項目設計的壹些認識誤區,導致軟件行業缺乏產品化能力,缺乏大規模、大規模復用系統的研發能力。可以說,改變認識誤區是解決軟件行業小作坊模式和個人英雄模式帶來的局限性的壹項重要工作。

中國有很多孩子。分別是18,9歲或者21,2歲。他們也通過自學寫了很多代碼。有些寫得很漂亮,有些技術細節也相當出眾,也很好學。但他們受到壹些錯誤認識和觀點的影響,缺乏對制度和程序的整體認識。這些人,壹個網上的朋友,說的很好。他們其實只是壹些編碼迷,根本沒有資格做程序員,但據我所知,很多小網絡公司的CTO就是這樣的編碼迷,工資嚇人,項目嚇人,項目的結局通常也很嚇人。

壹、程序員的基本素質

做壹個真正合格的程序員,或者說真正能完成壹些代碼工作的程序員,應該具備的素質。

1:團隊精神和合作能力

把它當成壹種基本素質,並不是不重要。反而是壹個程序員安身立命最基本最重要的基礎。把高級程序員描述成獨行俠是無稽之談。任何個人的力量都是有限的。即使是萊納斯這樣的天才,也需要通過組建強大的團隊來創造奇跡。那些全世界為linux寫核心的高手,沒有合作精神是不可想象的。獨行俠可以做壹些小軟件賺錢,但是壹旦進入壹些大系統的R&D團隊,進入商業化和產品開發的任務,缺乏這種素質的人就完全不合格了。

2.記錄習慣

可以肯定的是,高級程序員從來不寫文檔。良好的文檔是正式R&D流程中非常重要的壹環。作為壹個代碼程序員,30%的工作時間用來寫技術文檔是正常的,但作為壹個高級程序員和系統分析師,這個比例要高得多。

沒有文檔,壹個軟件系統就會缺乏生命力,在以後的檢錯、升級、模塊重用等方面都會遇到很大的麻煩。

3.標準化和規範化的代碼編寫習慣

像國外壹些知名軟件公司的規則,對代碼的變量命名,代碼中註釋的格式,甚至嵌套行的長度,函數間空行的數量都有明確的規定。良好的寫作習慣不僅有助於代碼移植和糾錯,也有助於不同技術人員之間的合作。

壹些編碼愛好者叫囂,高級程序員寫的代碼,別人永遠看不懂。這種叫囂只能證明他們根本不配自稱程序員。代碼可讀性好,這是程序員的基本素質要求。

讓我們看看整個linux的構造。沒有標準化和規範化的代碼習慣,全球R&D合作是絕對不可想象的。

4.理解需求的能力

程序員需要理解壹個模塊的需求。很多孩子在寫程序的時候往往只關註壹個功能需求。他們把所有的性能指標都歸結於硬件、操作系統和開發環境,而忽略了自己代碼的性能考慮。有人曾經說過,寫壹個廣告交換程序很簡單。這樣的人永遠不知道在幾百萬甚至幾千萬訪問量的情況下,業績指標是怎麽達到的。對於這樣的程序員,妳不能用妳給他的系統做太多。在性能要求中,穩定性、並行訪問支持能力和安全性非常重要。作為程序員,需要評估模塊運行的環境,將要承受的負載壓力以及各種潛在危險和惡意攻擊的可能性。此時,壹個成熟的程序員至少需要2到3年的項目研發和跟蹤才有經驗。

5.可重用性,模塊化思維能力

我們經常能聽到壹些程序員抱怨自己寫了幾年程序,成了技術工人。他們每天都在重復寫壹些沒有任何新意的代碼。這其實是中國軟件人才最大的浪費,壹些重復性的工作成了熟練程序員的主要工作,其實是完全可以避免的。

可復用設計,模塊化思維就是要求程序員在完成任何壹個功能模塊或功能時,要多思考,不局限於完成當前任務的簡單思路,而是要思考該模塊是否可以脫離本系統而存在,是否可以通過簡單修改參數在其他系統和應用環境中直接引用,這樣就可以大大避免重復開發工作。如果壹個軟件R&D單元和工作組能夠在每壹個R&D過程中考慮到這些問題,那麽程序員就不會在重復性的工作中浪費太多時間,就會有更多的時間和精力投入到創新的代碼工作中。

壹些好的程序模塊代碼,甚至是70年代寫的,現在在壹些系統中可以作為功能模塊使用,但我現在看到的是,很多小公司往往壹升級或改進軟件就重寫所有代碼,大部分重復性的工作都是無謂地浪費時間和精力。

6.測試習慣

作為壹些商業化、標準化的開發,專職測試工程師是必不可少的,但不代表有專職測試工程師的程序員可以不進行自測;作為壹個項目,軟件R&D的壹個很重要的特點就是問題發現的越早,解決的成本越低。程序員通過仔細測試每壹段代碼和每壹個子模塊,可以盡早發現和解決壹些潛在的問題,從而保證整個系統構建的效率和可靠性。

其實測試需要考慮兩個方面。壹方面是正常調用的測試,就是看程序在正常調用下能否完成基本功能。這是最基本的測試職責。可惜的是,它已經成為很多公司唯壹的測試任務,其實遠非如此。第二個方面是異常調用的測試,比如高壓負載下的穩定性測試,用戶潛在異常輸入下的測試,整個系統局部故障下模塊受影響狀態的測試,頻繁異常請求阻塞資源時的模塊穩定性測試等等。當然,程序員沒有必要對自己的每壹段代碼都進行如此完整的測試,但程序員必須清楚自己的代碼任務在整個項目中的位置以及各種性能需求,有針對性地進行相關測試,盡早發現並解決問題。當然,這需要具備上述理解需求的能力。

7.學習和總結的能力

程序員是人才很容易被淘汰和掉隊的職業,因為壹項技術可能只領先三兩年。程序員要想安身立命,就必須跟上新技術,學習新技能。

善於學習是任何職業的必要動力,對於程序員來說這個要求更高。

但是學習也需要找準目標。壹些小編碼迷也說說自己的學習能力。他們學了壹段時間的asp,php,jsp。他們以此為炫耀資本,盲目追逐壹些膚淺的、表面的東西和名詞,在不懂中斷向量處理的情況下做網絡程序,做應用程序。這樣的技術人員,無論掌握了多少所謂的新語言,也絕不會。

善於總結也是學習能力的體現。每完成壹個研發任務,壹段代碼,都要有目的地跟蹤程序的應用狀態和用戶反饋,隨時總結,發現自己的不足。壹個程序員只有逐步提高,才能成長。

壹個沒有成長的程序員,即使目前是高手,也建議不要選,因為是他落伍的時候了。

具備以上所有素質的人都應該是合格的程序員。請註意,以上素質不是智商決定的,也不是某些大學課本上能學到的。需要的只是程序員對自己工作的理解,這是壹個意識問題。

第二,壹個高級程序員/項目設計師還需要具備的素質。

那麽,作為壹個高級程序員,甚至是壹個系統分析師,也就是對於壹個程序項目的設計者來說,除了以上所有的素質之外,妳還需要具備以下的素質:

第壹,需求分析的能力。

對於程序員來說,了解需求可以完成合格的代碼,但是對於R&D項目的組織和管理者來說,他們不僅要了解客戶的需求,還要自己做壹些需求。為什麽這麽說?

壹般來說,R&D任務可能由客戶提出,也可能由營銷部門提出。此時,對於R&D部門,他們看不到完整的需求。壹般來說,需求只是壹些功能性的需求,或者更正式地說,他們可能會得到壹個完整的用戶視圖。但這還不夠,因為客戶可能會因為更多的非技術因素而難以提出完整清晰或專業的性能需求,但對於項目組織者和計劃者來說,他必須能夠清楚地認識到這些需求的存在,並在完成需求分析報告時恰當地提出,同時要在設計規格書中得到充分清晰的體現,這樣程序員在編碼時才不會失去這些準則。

程序員必須正確理解用戶需求所處的環境,有針對性地進行需求分析。比如,同壹個軟件,通過ASP出租和許可發布時,性能要求可能不同。前者強調更好的支持和穩定性,而後者可能強調在各種平臺下安裝和使用的通用性和簡單性。

二、項目設計方法和流程處理能力。

程序員必須能夠掌握至少兩到三種項目設計方法(如自頂向下的設計方法,如快速原型法等。),並能夠根據項目需求和資源配置,選擇合適的設計方法進行項目的總體設計。

設計方法選擇不當會延緩R&D循環,浪費R&D資源,甚至影響R&D效應。

壹個程序員還需要花費大量的時間在流程圖的設計和處理上,他需要制作數據流程圖,建立數據字典;他需要處理邏輯流程圖以形成整個系統處理流程。

壹個有流程問題的系統,即使代碼再漂亮,每個模塊再精致,也不會成為壹個好系統。當然,要做好流程分析,選擇好的項目設計方法,妳需要對需求分析的能力有足夠的把握。

第三,復用設計和模塊分解能力。

這似乎是老壹套。基本素質不是已經說明這個問題了嗎?看啊。

作為壹個從事模塊化任務的程序員,他需要考慮他所面對的具體功能模塊的可重用性,而作為壹個系統分析師,他所面對的問題要復雜得多,他需要根據壹個模塊化的分析能力,將整個系統分解成許多可重用的功能模塊和功能,並對每個模塊形成壹個獨立的設計需求。比如像汽車生產。起初,每輛車都是獨立安裝的,每個部件都是量身定制的。但是後來就不壹樣了,是機器批量生產的。某汽車廠開始通過流水線生產汽車,獨立零部件開始具有壹定的可重用性。後來標準化成了大趨勢。不同型號、品牌甚至不同制造商的汽車零部件也可以很容易地更換和升級。這時候汽車生產效率最大化。軟件工程也是如此。在壹個成熟的軟件行業中,在壹些相關的項目和系統中,可以隨意替換不同的組件。比如微軟的很多桌面軟件都是在很多操作模塊(比如打開文件、保存文件)中復用的同壹套功能模塊,通過壹些類庫把這些接口提供給桌面應用開發者方便掛鉤,這就是復用模塊設計的明顯證明。

將壹個龐大復雜的應用系統分解成壹些相對獨立的、復用性高的模塊,這些模塊只需要依靠少數幾個參數就可以完成數據連接,這是高級程序員和系統分析師最重要的工作。合適的項目設計方法和清晰的流程圖是實現這壹目標的重要保證。

四、項目整體評價能力

作為壹個系統設計師,妳必須能夠從大局出發,對項目整體有壹個清晰的認識,比如公司的資源配置是否合理到位,比如項目進度是否能最大化發揮效率,不能按期完成。評估整個項目和每個模塊的工作量,評估項目需要的資源,評估項目可能遇到的困難,都需要大量的經驗積累,換句話說,這是壹個需要不斷總結和積累才能達到的境界。在西方,有些軟件系統設計負責人年紀很大,比如4、50歲,甚至更老。他們在編碼方面遠不如年輕人靈活,但就項目評估而言,他們幾十年的經驗積累才是最重要最寶貴的財富。中國缺少這樣壹代程序員,主要是缺少那個年代的程序員,但是因為那個年代的程序員都是研究所做出來的,不是專業產品軟件研發出來的,也沒有積累那種產品研發經驗,這也是無奈之舉。

第五,團隊組織管理能力。

要完成壹個項目,團隊的齊新需要齊心協力。作為R&D的項目設計師或總監,他應該能夠充分發揮團隊的整體實力。由於其專業性,技術管理不同於壹般的人事管理,因為其中設計了壹些技術指標和因素。

首先是工作的量化。沒有量化,就很難實現恰當的績效考核,程序的量化也不是簡單的計算代碼行數。因此,需要技術經理真正評估壹個模塊的復雜性和工作量。

其次,團隊合作模式的調整。壹般來說,程序開發的合作通常是分組的,主要是程序員的方式和民主的方式。根據程序員能力水平與項目研發需求的差距,選擇合適的團隊組建方式,使責權利與成員的工作任務緊密結合,實現團隊組建效率的最大化。

壹個代碼水平很高的人不壹定是壹個合格的項目研發主管,這方面能力的缺乏往往會被忽視。

綜上所述,可以看出,作為壹個R&D的負責人,壹個項目設計師,所需要的素質和能力,並不是寫程序代碼的能力。當然,壹般情況下,當壹個程序員通過不斷的總結和改進達到這種素質的時候,他的代碼編寫能力是相當簡單的,但是請註意因果關系。壹個高水平的項目設計師通常是壹個非常擅長代碼編寫的人。但是,並不是壹個代碼生成優秀的程序員就能勝任項目設計。這裏存在的不是智商和課本問題,或者說壹個程序員在積累經驗逐漸提高的時候沒有意識到要思考什麽,沒有有意識地去揣摩項目的組織和復用設計。沒有規律的文檔習慣和總結習慣,我們還是非常缺乏合格的項目設計師。

另外,為了防止無聊的人跟我較真,我補充壹下,這篇論文的目標是做商業軟件項目和項目。那些科研機構的程序員,比如算法專家,比如圖像處理專家,他們從事的是研究項目,而不是直接完成商業軟件(當然他們最終也會間接成為商業產品,比如微軟研究院正在做的研究課題),所以他們強調的質量可能是別的東西。這些人(專家)不能說是程序員。

三、軟件項目研發的設計流程

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

第壹步是市場調查。

技術和市場要結合起來,才能體現最大的價值。

第二步是需求分析。

這個階段需要產生三樣東西,用戶視圖,數據字典,用戶操作手冊。

用戶視圖是用戶(包括終端用戶和管理用戶)可以看到的頁面樣式,包含很多操作流程和條件。

數據字典是指出數據的邏輯關系並對其進行排列的東西。當數據字典完成後,數據庫的設計就完成了壹大半。

用戶操作手冊是指示操作過程的說明。

請註意,用戶操作流程和用戶視圖是由需求決定的,所以要在軟件設計之前完成,為程序研發提供約束和準則。可惜太多公司不這麽做,因果顛倒,順序不分,開發工作和實際需求往往是割裂的。

需求分析,除了以上工作,我認為作為項目設計人員,要做好項目完整的性能需求陳述,因為往往性能需求只有懂技術的人才能理解,這就需要技術專家和需求者(客戶或公司營銷部門)之間真正的溝通和理解。

第三步是輪廓設計。

初步劃分了系統的功能模塊,給出了合理的R&D流程和資源需求。作為壹種快速原型設計方法,完成輪廓設計後可以進入編碼階段。通常采用這種方法是因為所涉及的R&D任務屬於壹個新的領域,技術總監壹開始無法給出壹個明確的詳細設計規範,但這並不代表詳細設計規範不重要。實際上,快速原型法在完成原型代碼後,需要根據評估結果和經驗教訓,再次進行詳細的設計步驟。

第四步是詳細設計。

這是考驗技術專家設計思維的重要關卡。詳細的設計說明要以最幹凈的方式(黑盒結構)向編碼人員提供具體的模塊,從而最大化系統的整體模塊化;壹個好的詳細設計規範可以最小化編碼的復雜性。其實嚴格來說,壹份詳細的設計說明書應該詳細提供每個功能的每個參數的定義。從需求分析到概要設計,再到完成詳細設計說明書,壹個軟件項目應該是完成了壹半。換句話說,壹個大型軟件系統在完成壹半的時候,實際上還沒有開始壹行代碼的工作。

那些把做軟件簡單理解為寫代碼的程序員,從根源上就犯了錯誤。

第五步是編碼。

在標準化的R&D過程中,整個項目過程中的編碼工作最多不會超過1/ 2,通常為1/3。俗話說,設計過程完成得好,編碼效率會大大提高,不同模塊之間的進度協調和配合是編碼時最需要細心的。也許壹個小模塊的問題就能影響整體進度,所以很多程序員被迫停工等待。編碼時相互溝通和應急方案非常重要。對於程序員來說,bug永遠存在,妳必須永遠面對這個問題。大名鼎鼎的微軟有沒有連續三個月不發補丁的時候?看吧,從來沒有!

第六步是測試。

測試有很多種:

根據測試執行者的不同,可以分為內部測試和外部測試。

按測試範圍可分為模塊測試和整體調試。

根據測試條件,可分為正常運行測試和異常情況測試。

根據測試的輸入範圍,可以分為全覆蓋測試和抽樣測試。

以上都很好理解,就不解釋了。

總之,測試也是項目研發中非常重要的壹步。對於壹個大型軟件來說,3個月到1年的外部測試是很正常的,因為總會有不可預知的問題。

在測試、驗收和最終幫助文檔完成後,整個項目將告壹段落。當然,未來還會有升級,維修等等。只要不想壹錘子買賣騙錢,就必須持續跟蹤軟件的運行狀態,持續修復升級,直到徹底淘汰軟件。

寫這些步驟也沒什麽好炫耀的,因為說實話我手頭有個軟件工程,是大學計算機專業的必修課,但是我知道很多程序員似乎壹直熱衷於“VC 30天精通”之類的。他們有的和我壹樣是遊擊隊,從來沒有正式學過這個專業,有的已經混夠分把這些真正有用的東西還給老師了。

現在的互聯網也很浮躁。有些編碼迷大驚小怪,混淆視聽。事實上,真正的技術專家很少會在網上發帖。由於作者如此之少,他真的不是壹個大師。他就是不喜歡這種對技術和程序員的誤解和胡說八道,所以他要站出來把事情做好。也希望那些還沈迷於壹些錯誤的人的編碼愛好者們,能夠認真思考壹下,走上正軌。

  • 上一篇:本想來個悄無聲息的表白 結果? 但是沒想到微信會這麽坑
  • 下一篇:vs2010跟vs2008比較增加了哪些功能?
  • copyright 2024編程學習大全網