① 如何自學成為程序員
問題一:如何自學成為初級程序員 [經驗之談]30歲,我的程序,我的夢!
程序人生 : 30歲,我的程序員夢想
作 者: redbridge (雪燃)
30歲,開始實現我的程序員夢,從一個編程愛好者,從一個業余的程序員,一個水平不高的程序員,一個半道出家的程序員......
我的經歷到這里就告一段落了,五年裡跳了五次槽,不知道和大家比算不算多J,沒有什麼太多起伏,但我想很多朋友可能會和我有類似的經歷,不知道能不能引起你們的共鳴。我想對我上面所說的話給一個總結:
1. 如果你覺得自己應該追求什麼,不管遇到什麼困難千萬不要放棄,一定要堅持下去。
2. 不要因為自己年輕就找理由揮霍時間,少玩一點SC、CS、魔獸3、傳奇、魔力或者…….,多看點書,多練練題。
3. 如果你還是在校的學生,英語很差,專業課也很差。沒關系,想怎麼學計算機就怎麼學計算機吧。其它地只要能混到畢業證就行了。除非你對自己的未來沒有信心。(當然,如果你的理想不僅僅是要做一個程序員,那你別丟掉英語。)
4. 如果你不是科班出身,想要轉行而不知該怎麼開始的話,建議你先看兩類書:(1)計算機原理;(2)數據結構和演算法。(看數據結構之前先看C語言)。
5. 什麼時候努力都不晚,關鍵是你明白要努力了,大器晚成總比一事無成要好的多。
6. Java、、C++、PB、VB、Delphi、匯編到底應該學哪個?我的經驗,哪個最簡單就先學哪個、公司用哪個你就學哪個、哪個和你有緣(比如剛好你認識一個願意幫助你的Delphi高手)你就學哪個,如果你都學,或者三天兩頭的換,我可以告訴你結果肯定是什麼都不會,不要心浮氣燥,他們都只是工具,學精一門其它的就相通了,重要的是掌握編程的思想。如果你問我面向對象(好像現在已經是面向需求了)、UML、WebLogic、WebService、軟體工程、XML…….應該怎麼學呀,對不起,這些我也確實不是都會,但請相信,你先實實在在的寫上十萬行以上的代碼以後,那些東西你自然就慢慢會了。
7. 不要以為程序員的工資都很高,程序員之間的水平差異也大。公司衡量一個人的待遇標準是他能給公司帶來多大的效益。如果你體現了自己的價值,公司會主動給你加薪的,當然你也可以自己主動提,但一定要在你表現出了自己的價值之後。
8. 輕易不要跳槽,如果非要跳,也要保持工作經驗上的延續,而不是從新開始,不然就會象我一樣走很多彎路。
9. 如果你以為程序員都是熬夜熬出來的,那麼你錯了,因為它的代價就是縮短你的青春!大家不要象我一樣,真的,熬夜一點也不好!記住老毛的話:如有恆,何須三更起,半夜眠;最怕莫,三天打魚兩天曬網,竹籃打水一場空!
10. 這一點是我覺得最精華的一點:「君子性非異也,善假於物也。」這句話的本意是一個水平很高的人本身並不一定很高明,關鍵是他善於利用別人的高明!我在這里做個借鑒,就是要充分利用自己身邊的資源,不放過任何一個可以提高自己的機會。大家不要誤會,這里的假於物可不是指抄襲別人的源代碼,而是指通過學習別人的源代碼把他的思想擴展到自己的思想里去。
註:上面的十大「精華」純屬我個人的「謬論」,您自己看著消化,有用的收下,沒用的請拖入「回收站」。如果你覺得這些總結不過是一些浮華之詞,那請你先問問自己:「是不是在行動上都真正做到了。」
這就是我,一個不算優秀,不算勤奮;玩能玩通宵,學也學能學通宵;對夢想的追求很執著;到了30才開始真正寫程序;一個很平凡但又不甘於平凡的人……我的經歷相信很多朋友都有過的,我現在也不能算是一個成功人士,但我相信我的經歷卻是值得大家借鑒的,因為我終究代表了一類人......>>
問題二:如何成為一名程序員? 首先先選擇一門語言 現在比較火的是sun公司的java 和微軟的C#
友情提示:java移植性很好,這是網路平台所需要的。C#只能運行在微軟的平台,有局限性。
我不排斥其他的計算機語言 不過一般只要學懂一門語言後就相當進入程序的天堂,在學其他的語言時候就能簡單的多,因為很多軟體語言是相同的,學懂一門就能夠看懂其他的。
買書,見意買比較薄的書開始學,太厚的書看不完會打擊心靈。
需要有耐心,其實是非常有耐心,因為學軟體做軟體是一輩子的,沒有任何一門技術能做到老,必須一路學下去。每當度過一個階段盡量總結所學過的。
一定要沉得住寂寞,無論是學軟體還是做軟體。
只要認真學,一般一年自學都可以有所小成,程度還要看個人的領悟。
做軟體是需要注意很多細節,正是這些細節所以讓人很頭疼,所以需要耐心。
順便提一句:學軟體就盡量學比較火的,因為市場需要,才會火。
我不是鄙視某某某語言,而是實話說,畢竟學出來需要應付工作的,如果工作不需要,就算學的很有本事,沒人雇也沒用,對吧!
你完全可以去招聘網看看軟體這個行業哪些軟體需要的人才多。
別聽誰誰誰說哪種語言火,火不火招聘的數量就能說明一切。
一定要對軟體充滿信心,千萬別輕易放棄。相信軟體是有「錢」途的。
本人現在也是在自學軟體,也有三年的學習。
以上是我一些經驗,如果有需要,可以按右下角Hi我,相互促進。
問題三:程序員能自學嗎? 首要之首:不要急於選擇一種語言新手們有一個常見的錯誤就是猶豫於判斷哪種編程語言是做好的、最該先學的。 我們有很多的選擇,但你不能說那種語言「最好」。 我們應該理解:說到底,什麼語言並不重要。 重要的是理解數據結構、控制邏輯和設計模式。 任何一種語言―甚至一種簡單的腳本語言―都會具有所有編程語言都共有的各種特徵,也就是說各種語言是貫通的。 我正在攻讀我的計算機學學位,我編程使用Pascal,匯編,和C語言,事實上我從來沒有把它當成職業以求獲得回報。 我一直在自學編程,工作上用不到它,我使用現有的知識,參考各種文檔和書本,學習它們的用法。 因此,不要急於選擇何種編程語言。 找出你想要開發的東西,使用一種能夠完成這項任務的語言,這就可以了。根據各種開發平台的不同,有很多不同的軟體開發形式可供你選擇:從網站應用到桌面軟體到智能手機軟體到命令行腳本工具。 這篇文章里,我將重點介紹一些很受歡迎的入門教程和資源,它們能幫助你學會如何在各種主流的平台上編程開發。 我先假設你是一個悟性很強的讀者,但對於新手,當我談論程序代碼時還是要按照入門級的水平。 因為即使是你自己看一篇編程入門手冊,如果發現都能理解時,心情自然會很高興,這樣利於你進一步學習。桌面腳本想要動手在Windows里或蘋果系統里編程,最簡單的方法是從一種腳本語言或宏語言開始,例如AutoHotkey(Windows) 或Automator(蘋果系統)。 如今一些硬體程序員沖著他們的屏幕大喊大叫,說AHK和AppleScript並不是「真正」的編程語言。 也許他們說的是對的―技術上,這些種類的語言只能做一些上層的編程。 但是對於那些只是想來脫盲、想在他們的電腦里實現一些能自動運行的程序的新手來說,這些語言會是一個絕妙的入門入口―而且你會吃驚於它們豐富的功能。例如,大家都喜愛的Texter就是Adam使用AutoHotkey開發的能獨立運行的Windows應用程序,所以說這種腳本語言遠不是只能開發小規模腳本軟體。 如果你想從AutoHotkey入手,可以參考Adam的指導:how to turn any action into a keyboard shortcut using AutoHotkey(然後,你可以下載Texter源代碼看看這個功能齊全的使用AHK開發的Windows應用程序的內部結構)。Web開發HTML 和 CSS:開發網站,你第一件要知道的事情就是HTML(網頁就是由它組成的)和CSS(一種讓外觀更好看的樣式標記)。 HTML 和 CSS 並不是編程語言―它們只是頁面的結構和樣式信息。 然而,在開始開發web應用程序之前你必須要學會如何手工的編寫簡單的HTML和CSS,web頁面是任何webapp的前端顯示部分。 這個HTML 指導是你入手的好地方。JavaScript:當你可以通過HTML和CSS構建一個靜態頁面後,事情就開始變得有趣了―因為到了該學JavaScript的時候了。 JavaScript是一種web瀏覽器上的編程語言,它的魔力就是能在頁面里製造一些動態效果。 JavaScript可以做bookmarklets,Greasemonkey腳本, 和Ajax, 所以它是web上各種好東西的關於因素。學習JavaScript從這里開。伺服器端腳本:一旦你學會了網頁里的知識,你就要開始對它添加一些動態伺服器操作―為了實現這些,你需要把目光轉移到伺服器端腳本語言,例如PHP, Python, Perl, ......>>
問題四:如何成為一個程序員 1、 程序員意味著要編程序。(如果你僅僅想得到一份高薪水的工作,喝喝咖啡就等老闆發薪水,我奉勸你還是另找一份更合適的工作,譬如練攤,真的,兄弟,這份工作不適合你)
2、你是學文的還是學理的,編程序也許需要浪漫,但更需要邏輯和嚴謹。(說坦白點就是,在你沒有找到樂趣以前,它很枯燥)
3、你有對新技術追求的熱情嗎?你有刨根問底的探索精神嗎?(熱情絕對是最重要的!你仔細思考一下自己的性格適合當程序員嗎?)
4、當程序員決不是什麼好差事,時刻需要學習,需要思考。(直到你成為那個可以引導別人去學習和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)
5、程序員的未來很迷茫。(但我認為關鍵看你自己!我希望你是一個有追求的人,不僅僅是混碗飯吃。因為真正的樂趣在於創造;如果你能改變軟體業的歷史,那才是英雄;不想成為Bill Gates,不想成為Dennis Ritchie和 Bjarne Stroustrup,我會說你沒有追求。有個關於程序員未來的笑話,也許你還沒聽過,你該聽一聽,摘抄如下:
一個程序員對自己的未來很迷茫,於是去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝說「我的孩子,你去問Lippman,他現在領導的程序員的隊伍可能是地球上最大的」
於是他去問Lippman。
Lippman說「程序員的未來就是駕馭程序員」
這個程序員對這個未來不滿意,於是他又去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝說「我的孩子,你去問Gates,他現在所擁有的財產可能是地球上最多的」
於是他去問Gates。
Gates說「程序員的未來就是榨取程序員」
這個程序員對這個未來不滿意,於是他又去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝說「我的孩子,你去問侯捷,他寫的計算機書的讀者可能是地球上最多的」
於是他去問侯捷。
侯捷說「程序員的未來就是誘惑程序員」
這個程序員對這個未來不滿意,於是他又去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝搖搖頭「唉,我的孩子,你還是別當程序員了」)
6、當程序員還是很有樂趣的。(當你學到新知識時,當你有新的思想見解時,當你有新的產品問世時,和知己探討你的成果時…我問你,覺得這些是樂趣嗎?)
7、當程序員不易也不難。(世間事有難易乎?為之…;不為…。你有決心和信心嗎?)
8、你真的要當程序員?是你自己的想法?
9、你捨得花錢買書嗎?(讀好書絕對是學習編程的最佳捷徑。你一定會說,現在電腦書籍真他XX的貴,沒法子,誰讓知識和技術在人家的腦袋,在人家的書里呢;等你寫書時可以把價格定低一點,記著還有好多沒錢但想買書的兄弟很困難呀。要捨得買書,買好書,不好的的書不如不讀,其害大於其益,關於買什麼書,你可以問高手或看候捷的書評;准備一個小本子記錄你想買的書的名字,逛書店時看看,如果好就買下,記住要讀,別光買不看。) 10、我告訴你,程序就是:任何有目的的、預想好的動作序列,它是一種軟體。
11、編程序就是編寫程序。
12、你想好了嗎?(如果你想好了還是決定要當程序員,可以繼續往下讀;否則,你可以繼續尋找別的出路了。)
(三) 一個程序員應該具備的基礎知識和概念
1、計算機是有什麼組成的,CPU是什麼東西,其工作原理是什麼。(對於這些以及下面將要提到的概念我不會告訴你什麼答案,你可以看相應的教材,關於教材我會在下一部分詳述,記住理解最重要!)
2、機器語言和微指令集的概念。
3、程序的概念。
4、匯編語言是低級語言但不是機器語言。
5、高級語言主要有那些?(C......>>
問題五:如何才能成為一名優秀的程序員 中國的信息技術發展迅速,由它所帶來的浪潮已經滲入到了人們生活的每一個角落,而程序員們成為了這場信息化浪潮的見證者之一,更是其中的主要參與者,這是時代賦予每個程序員的機會和責任。做為一名程序員至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點推薦的開發工具,C/C++以其高效率和高度的靈活性成為開發工具中的利器,很多系統級的軟體還是用C/C編寫。而JAVA的跨平台和與WEB很好的結合是JAVA的優勢所在,而JAVA即其相關的技術集JAVA One很可能會成為未來的主流開發工具之一。其次,能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,C Builder,則更好,這些開發工具減小了開發難度,並能夠強化程序員對象模型的概念。另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。熟知資料庫為什麼資料庫是如此重要?作為程序員,他們自然有自己的理由:很多應用程序都是以資料庫的數據為中心,而資料庫的產品也有不少,其中關系型資料庫仍是主流形式,所以程序員至少熟練掌握一兩種資料庫,對關系型資料庫的關鍵元素要非常清楚,要熟練掌握SQL的基本語法。雖然很多資料庫產品提供了可視化的資料庫管理工具,但SQL是基礎,是通用的資料庫操作方法。如果沒有機會接觸商業資料庫系統,可以使用免費的資料庫產品是一個不錯的選擇,如mySQL, Postgres等。對操作系統有一定的了解當前主流的操作系統是Windows,Linux/Unix,熟練地使用這些操作系統是必須的,但只有這些還遠遠不夠。要想成為一個真正的編程高手,需要深入了解操作系統,了解它的內存管理機制、進程/線程調度、信號、內核對象、系統調用、協議棧實現等。Linux作為開發源碼的操作系統,是一個很好的學習平台,Linux幾乎具備了所有現代操作系統的特徵。雖然Windows系統的內核實現機制的資料較少,但通過互聯網還是能獲取不少資料。只有對操作系統有一定的了解後,你會發現自己上了一個新的台階。懂得網路協議TCP/IP在互聯網如此普及的今天,如果您還沒有對互聯網的支撐協議TCP/IP協議棧有很好的掌握,就需要迅速補上這一課,網路技術已改變了軟體運行的模式,從最早的客戶/伺服器結構,到今天的WEB Services,再到未來的網格計算,這一切都離不開以TCP/IP協議棧為基礎的網路協議支持,所以,深入掌握TCP/IP協議是非常必要的。
問題六:怎樣才能快速成為一名程序員 1 學習如何編程
這當然是最基本的黑客技術。如果你還不會任何計算機語言,我建議你從Python開始。它設計清晰,文檔齊全,對初學者很合適。盡管是一門很好的初級語言,它不僅僅只是個玩具。它非常強大,靈活,也適合做大型項目。
但是記住,如果你只會一門語言,你將不會達到黑客所要求的技術水平,甚至也不能達到一個普通程序員的水平---你需要學會如何以一個通用的方法思考編程問題,獨立於任何語言。要做一名真正的黑客,你需要學會如何在幾天內通過一些手冊,結合你現在所知,迅速掌握一門新語言。這意味著你應該學會幾種不同的語言。
如果要做一些重要的編程,你將不得不學習C語言,Unix的核心語言。其他對黑客而言比較重要的語言包括Perl和LISP。 Perl很實用,值得一學;它被廣泛用於活動網頁和系統管理,因此即便你從不用Perl寫程序,至少也應該能讀懂它。 LISP 值得學習是因為當你最終掌握了它你會得到豐富的經驗;這些經驗使你在以後的日子裡成為一個更好的程序員,即使你實際上可能很少使用LISP本身。
當然,實際上你最好四種都會。 (Python, C, Perl, and LISP). 除了是最重要的四種基本語言,它們還代表了四種非常不同的編程方法,每種都會讓你受益非淺。
這里我無法完整地教會你如何編程---這是個復雜的活兒。但我可以告訴你,書本和課程也不能作到。幾乎所有最好的黑客都是自學成材的。真正能起作用的就是去親自讀代碼和寫代碼。
學習如何編程就象學慣用自然語言寫作一樣。最好的做法是讀一些大師的名著,試著自己寫點東西,再讀些,再寫點,又讀些,又寫點....如此往復,直到你達到自己在範文中看到的簡潔和力量。
過去找到好的代碼去讀是困難的,因為很少有大型程序的可用源代碼能讓新手練手。這種狀況已經得到了很大的改善;現在有很多可用的開放源碼軟體,編程工具和操作系統(全都有黑客寫成)。這使我們自然地來到第二個話題...
2 得到一個開放源碼的Unix並學會使用、運行它
我假設你已經擁有了一台個人計算機或者有一個可用的( 今天的孩子們真幸福 :-) )。新手們最基本的一步就是得到一份Linux或BSD-Unix,安裝在個人計算機上,並運行它。
當然,這世界上除了Unix還有其他操作系統。但它們都是以二進制形式發送的---你無法讀到它的源碼,更不可能修改它。嘗試在DOS或Windows的機器上學習黑客技術,就象是在腿上綁了鐵塊去學跳舞。
除此之外,Unix還是Internet的操作系統。你可以不知道Unix而學會用Internet,但不懂它你就無法成為一名Internet黑客。因為這個原因,今天的黑客文化在很大程度上是以Unix為中心的。(這點並不總是真的,一些很早的黑客對此很不高興,但Unix和Internet之間的共生關系已是如此之強,甚至連微軟也無可奈何)
So,裝一個Unix---我個人喜歡Linux,不過也有其他選擇。(你也可以在同一台機器上同時運行DOS,Windows和Linux)學會它。運行它。用它跟Internet對話。讀它的代碼。試著去修改他。你會得到比微軟操作系統上好的多的編程工具(包括C,Lisp, Python, and Perl),你會得到樂趣,並將學到比你想像的更多知識。
關於學習Unix的更多信息,請看 The Loginataka.
要得到Linux,請看: 哪裡能得到 Linux...>>
問題七:如果想成為一個程序員應該學習什麼知識 程序員需要學習程序的邏輯,其次是需要學習編程的語言,這才是最根本的,有了語言才能和計算機「溝通」
如果做一個專業的程序員:
1.基礎語言知識 :從底層的ASM 到結構化的C,到面向對象的C++ JAVA,如果不能都精通,但是要了解,至少要精通一門
2.基礎數學知識: 高等數學(數學分析) 線性代數 離散數學,概率.數理統計等等
3.基礎計算機原理:操作系統原理,微機原理,編譯原理 資料庫原來等等
問題八:20歲如何通過自學成為一名程序員 努力追求,堅定自己的信心,一直堅持。
不要揮霍時間,少玩一點電腦大型網路游戲,多看點這方面的書,多練練這方面的題。
建議看兩類書:(1)計算機原理;(2)數據結構和演算法。(看數據結構之前先看C語言)。
java、、C++、pb、vb、Delphi、匯編里自己認為哪個最簡單就先學哪個,不要都學,也不要過一段時間換一個學,不要心浮氣燥,他們都只是工具,學精一門其它的就相通了,重要的是掌握編程的思想。
調整作息時間,不要總是熬夜,有一個好的身體是做任何事的前提。
懂得充分利用自己身邊的資源,不放過任何一個可以提高自己的機會。
問題九:怎樣自學成為程序員並進入微軟 微軟的官方網站上寫著我們期待具有獨創性、開拓性的智者加入隊伍,我們的面試程序也是為網羅這樣的人才專門設計。程序員只是具備了編程序的能力,微軟看中獨創性和開拓性。所以職業潛力更重要,獨創性需要一些人文要求,開拓性需要一些創業能力,而不完全是就業的能力。
問題十:怎麼才能成為一個優秀的程序員 優秀的程序員要具備很強的分析,和思維能力,我是一個Java JSP 的程序員,以我自己的感覺,程序員的理解能力要很強,因為我們做一個業務系統需要了解這個業務的邏輯,才可以去開發,至於學什麼語言,我覺得只要你可以精通一種語言,其他的你就都可以自學的。但是C除外。
至今我都不是很懂那個,我剛開始學的時候就是學的VB,但是我覺得可以直接學JAVA。搐可以選擇JAVA .NET C# 這都是現在很流行的。
如果你可以的話C是最好的。我們單位C的 開的工資是我們的幾倍。你要學一種語言,就必須先了解他的思想,所以你還是先看看理論上的東西吧。呵呵,其實程序員挺枯燥的,你要有思想准備哦。最大的困難就是你需要讓自己有恆心。
② 程序員年紀大了怎麼辦
誤傳1:年長程序員比新手要價更高,因而年輕的開發人員更受歡迎。
事實:有經驗的開發人員之所以被打上「昂貴」的標簽,是因為在任何軟體公司里員工的薪水永遠是最大的支出。事實上,年輕就意味著廉價。但是,盡管年輕但沒有什麼經驗的開發人員能夠幫你節省掉一些預算,但是如果你的團隊里只有年輕人長遠來看你要付出的會更多。年輕的開發人員並沒有經歷過失敗的歷練。他們甚至還沒有足夠的時間來經歷失敗。猜猜他們會用誰的錢來教學費?你的。錯過截止時間並且交付沒有完工的項目會給你帶來多大的損失?請再好好想想吧。
的確,年長程序員比年輕人的工資要高一些。但是你多花的錢究竟花到哪裡了呢?一個經驗豐富的軟體開發人員,你付出的薪水買到的是他從過去項目開發中學到的經驗與教訓。這些就是在你成為他的經理期間需要付出的昂貴的學費。但是如果你招入一名有經驗的工人,你就不會重復項目管理和軟體開發過程中常犯的錯誤。也就意味著在年底的考核中你會因為僱傭了會做事的員工而得到良好的評價。
誤傳2:年長程序員受到他們已有知識的限制,靈活性和學習新技術的能力不及年輕的開發人員。
事實:事實上正是因為他們過去的經驗,年長程序員能夠在更深入的層次轉向新技術、框架以及系統。例如,如果了解 C/C++編寫的GUI框架,你會對消息傳遞、事件處理、MVC模式有概念,而這些知識能夠幫助你在設計系統時把表示層和底層的邏輯進行分離。當你第一次接觸GUI框架的時候,除了學習代碼的文法,你還需要掌握示例以及相關的代碼庫,不僅如此,與之相關的所有概念也都需要了解。當第二次、第三次或者以後的更多次實現GUI框架時,你會發現在代碼文法之外更深的地方它們有著相似之處。你甚至可能會注意到,新的GUI框架會克服以前你花費很大力氣才能解決的潛在限制。這些領悟會以你不能直接衡量的方式提高生產率。
誤傳3:年長程序員有家庭以及其他因素的影響,因此不能承擔艱苦的軟體開發任務(解讀:長時間、艱苦地工作),而年輕人沒有這些負擔。
事實: 公平地講,有經驗的軟體開發人員較少會長時間、艱苦地工作,因為他們從實踐(失敗)中學到連續數月每周工作80個小時最終會到達生產率的極限。這種情況會讓你精疲力盡,我敢打賭任何曾經歷過這種情況的人都不想再嘗試。即使有這樣的傾向,所謂的「家庭負擔」 是不存在的。有經驗的高效的軟體工程師是無情的時間管理者,那些已經有家庭的工程師會更積極地在分配的時間內完成工作。他們也許會參加舞會或者足球賽,但是他們會把這些時間安排在業余時間,在每個禮拜的40個小時工作中他們會高度專注在自己的工作上。已經成家的優秀軟體工程師必須高效地管理自己的私人時間,否則他們很快就會被蜂擁而來的工作埋掉。
傳說4:年長程序員不如年輕人思路敏捷。
事實:時光的確會對大腦產生影響,有很多證據顯示年長的工人在思考速度上會稍遜一籌。但是思路敏捷只是判斷標準的一部分。思考得更快並不總是代表考慮得更好。對於判斷力情況又是如何呢?有句老話:好的判斷來自經驗,而經驗則是從錯誤的判斷得來。想想他們具備比年輕人更多的見識、完成的工作以及經歷的成功和失敗,就知道以思維不再敏捷作為不僱傭年長的軟體工程師是一個糟糕的借口。有經驗的開發人員可以從大量的項目中汲取經驗來為今天的項目避免錯誤的決定。年輕的開發人員有很多重要的新點子,但是卻沒有經過測試和驗證。同時具備這兩個方面會給你的團隊帶來巨大的價值。
③ 程序員四十歲以後該怎麼辦
這個問題,適合我回答。我是99年畢業的計算機系本科生,所以同學基本上都是40歲上下做it的人士。我就撿著幾個年輕時做過程序員的同學例子給你們說說,看看這些程序員40歲以後幹啥去了。
同學A,2000年去了某大公司H做開發,因為善溝通有親和力,後來逐漸脫離技術崗,做項目經理,售前,現在負責對外投資。
同學B,2000年去了某大公司H做開發,因為天賦好,技術崗位一路上升,做到中層領導職位,後來看好某新技術,毅然離職創業任ceo,堅持寫代碼至今。如今一邊經營公司,一邊寫代碼,一邊組織小樂隊吹拉彈唱,等著風口到來好起飛。
同學C,進入對日外包行業做程序員,現在自己組建軟體開發公司做老闆,時不常的還會弄弄代碼啥的。
同學D,進入對日外包行業做程序員被外派日本,後來定居日本,目前仍然是做維護代碼工作。
同學E,進入通訊領域做程序員,在換過多家公司之後,依然以資深專家身份玩弄著代碼,並以此為樂。
同學F,經歷了北漂創業,身體健康亮紅燈後,再次回到軟體外包行業打工。如今作為資深程序員堅持在代碼第一線,還經常加班。
同學G,畢業之後不久就炒了公司,做了軟體開發個體戶。從共享軟體到如今的APP開發,總能弄出名堂在排行榜中佔有一席之地。十幾年如一日,一邊瀟灑生活,一邊弄弄代碼保持排行名次。現在生活無憂,不停生孩子玩兒。
同學H,畢業後進了某大公司Z,做程序員。如今在Z司的下屬公司做某項目負責人。
所以說,各個行業呢,都是有深度的,不僅僅是寫代碼那麼簡單。只要你願意做下去,多年的行業經驗積累會幫到你。
軟體開發,或者說程序員工作,說到底就是一種工作。跟其他工作一樣,都是用來養家糊口的。喜歡呢,就做得開心些;不喜歡呢,早點轉行也好,或者繼續靠這個賺錢同時,培養點其他愛好也好,都行。
④ 程序員的一天,是如何度過的
在每個人的成長道路上,也許我們都會有自己的夢想,所以我們都會朝著自己的目標不斷努力,不斷拼搏,努力活成自己想活成的樣子。對於每個人來說,都會有自己的愛好,同時也會有自己感興趣的領域,在我們國家也有很多很好的職業崗位。作為程序員,也許他們的生活是很有趣的,也會充滿成就感。程序員的一天也許都是在電腦面前度過。
人生就是越努力,越幸運,你在自己的成長道路上只有不斷努力突破自己,你才會收獲屬於自己的成功。對於程序員來說,他們的生活壓力應該是挺大的,或者是頭發會掉很多,他們一天應該就是面對著電腦編寫各種各樣的程序。
⑤ 我的夢想是成為一名出色的程序設計人員,想問問那些成功的朋友們,我要怎樣努力,謝謝大家!
我上班第一天我的老闆讓我做的第一件事
看兩篇文章:
程序員隨想
雷軍
我不是天生的程序員,也並非天生就喜歡電腦,上高中時也沒有想過將來會當程序員,接觸電腦純屬偶然--小時候的一個好朋友上大學時選擇了電腦專業,為了和這個朋友有更多的逗共同語言地我便選擇了計算機系。在大學,我略窺電腦世界,開始為之逗發燒地;畢業後,開始了一個程序員的職業生涯。
從開始寫程序到現在快十年了,寫過的程序不少。從這些年的風風雨雨中走過來,不能不有些體會。說到體會,最大的體會就是這條路太漫長。
一、一輩子有你 苦一點也願意
我沒有奢望大家把寫程序和文學創作相提並論,但其中的苦楚卻不是一個普通用戶能夠體味的。為了寫好一個程序,我們度過太多不眠之夜。有個朋友如此評價道,逗寫程序簡直是在自殺,巨費精力巨費腦子巨累地。但還是有許多人不畏其苦,前仆後繼。
我剛接觸到電腦就發現電腦的妙處:電腦遠沒有人那麼復雜,如果你的程序寫得好,你就可以和電腦有著非常融洽的關系,就可以指揮電腦干你想乾的事,這個時候,你是十足的主宰。每每坐在電腦面前,你就如同在一個王國里巡行。
電腦里的世界很大,程序員是活在自己想像的王國里。你可以細微到電腦里的每一個位元組、每一個比特的東西。
這樣的日子簡直就是天堂般的日子,很多人都愛上了這樣的日子。
不少人認為程序員最多干到三十五歲就可以收山,腦子也差不多該歇歇了,並認為寫程序是年輕人的事情,到了一定年齡,估計沒什麼人再當程序員。
我剛畢業時,意氣風發,也想先吃點苦,到了三十歲就不幹了。年長一點後就發現了自己的無知。一個人大學畢業就二十一二歲,技術成熟一點後可能二十五,接著就是票子、妻子和房子等等諸多忙不完的事情。一切搞掂的時候,也許就是三十五歲。如果三十五歲就放棄的話,我們就不用選擇程序員的道路。
電腦進入我國時間不短,但真正大規模開始用,還是八五年PC登陸我國時候的事。因此國內真正寫電腦程序的人最長也就寫了十幾年(不知道是否還有這樣的人)。由於電腦應用在國內時間比較短,國內程序開發的主力以三十五歲以下的年輕人為主,但這並不表示程序員如同紅粉佳人般的容易衰老。美國和台灣地區的開發者以三四十歲的人為主。開始寫程序的時候,我們覺得沒有什麼不能做的(現在還能聽到這樣的豪言壯語),而且更要命的是,好象我們特別聰明,特別適合開發軟體,比老外強得多。當我們真正接觸那些傑出的國外開發人員的時候,發現他們太厲害了,都有十多年的開發經驗,絕對多數的產品出自這些有豐富開發經驗的程序員之手。
畢業後,編程不僅僅是愛好,而且成了一輩子的工作,可以肯定會干一輩子,雖然我沒有打算一生只干這一件事。用一生來編程是一件既容易又困難的事。如果碌碌無為,為交差寫點程序,這樣寫兩輩子的人都有。但如果想全身心地寫程序,寫十年都不是一件容易的事。現在我的不少朋友都洗手了,有時我也有這種想法,但一旦面對電腦,立刻頓悟:電腦還是自己最擅長乾的事,也是最順手的事。
二、我的未來不是夢
有的人刻苦學習編程技術,努力提高編程水平,並把高級程序員作為追求的目標,甚至是終身的奮斗目標。後來參與了真正的商品化軟體開發後,感到非常困惑和茫然。
當我上大學的時候,高級程序員也曾是我的目標。當時,我通過等級考試獲得了高級程序員證書,並在自己的名片上印上逗高級程序員地的字樣。後來,我的水平提高了,似乎也成了大家認可的好程序員了。這個時候我卻開始茫然。我希望我的技術能得到別人的承認,當得到別人的承認後,我又能如何呢看後來我發現,無論成為多麼高級的程序員都沒用,關鍵是是否能夠出想法、出產品,你的勞動是否能被社會承認,是否能為社會創造財富。
我的未來是明確的,開發出高質量的適用社會的產品,為社會創造財富。
三、每一個程序都是藝術品
有人認為程序員沒有什麼了不起,不過是一種熟練工種而已;也有人把編程說成是藝術創作,捧上天。這兩種意見爭論比較激烈,甚至可以說針鋒相對。
我們換個工種來看,石匠應該是熟練工種,跟藝術似乎沾不上邊。;但正是這些石匠,給我們留下了數不勝數的文物古跡,如樂山大佛、莫高窟等等。應該說這此石匠給我們留下了無窮的文化財富。我認為編程的工作和石匠比較相似,是技術,也是藝術。
現代軟體工業已具相當規模,很多軟體的完成需要的是大兵團作戰。一名精通程序員接受編寫某一塊的任務後,往往只是寫代碼,發揮的餘地很小。在大項目中,很多程序員只能了解到和自己所編模塊相關的很局部的細節,另外還受到開發環境的限制,真的很難體會到自己在從事逗藝術地創造,更多的時候是感到自己在從事重體力勞動。有的時候還擔心自己苦苦參與的這個項目究竟有沒有意義,是不是在同類產品中有競爭力,會不會開發出來以後就因為硬體的發展、操作系統的換代而過時......
編程是技術活,才有可能大規模進行,才會有軟體工程的理論。也正是編程具備藝術創作的特點,我們的生活才會有如此多的好軟體產品。寫一個程序需要付出腦力和體力,當我—我們—某個群體完成一個程序之後,在我們的眼裡,每一個程序就都是藝術品。
程序員應具備的素質
前言
程序員是一種技術工作,在IT的發展中有相當重要的地位,從底層硬體通訊協議的建立, 到數據傳輸層的處理,到操作系統的建設,到資料庫平台的建設,一直到應用層上各種數 據營銷平台的搭建,程序員在裡面都扮演著舉足輕重的角色並為IT事業的發展做出了巨大 的貢獻。
中國有很多精於編碼的人,但是中國軟體行業,尤其是網路應用開發方面誤區很大,很難形成有規模的軟體開發力量和產品能力,不但比美國差距甚遠,和印度相比也是頗有不 如。這些問題不是在於中國程序員的智商和工作努力狀況,也不是在於國家和民間對開發 的投入程度,而是很大程度上,有一些對技術,對程序開發,對項目設計方面的思想誤 區,這些誤區,導致了軟體行業的產品化能力不足,缺乏規模化和大型復用系統研發能 力,可以說,改變認識誤區,是解決軟體行業小作坊模式和個體英雄模式所帶來的局限性 的重要工作。
中國有很多小朋友,他們18,9歲或21,2歲,通過自學也寫了不少代碼,他們有的代碼寫的很漂亮,一些技術細節相當出眾,也很有鑽研精神,但是他們被一些錯誤的認識和觀點左右,缺乏對系統,對程序的整體理解能力,這些人,一個網上的朋友說得很好,他們實際 上只是一些Coding fans,壓根沒有資格稱為程序員,但是據我所知,不少小網路公司的 CTO就是這樣的coding fans,拿著嚇人的工資,做著嚇人的項目,項目的結局通常也很嚇人。
一、程序員基本素質
作一個真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應該具有的素質。
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們能認真想想,走到正途上,畢竟那些聰明的頭腦還 遠遠沒有發揮應有的價值。