Ⅰ 我是怎麼招聘程序員的
很早以前就想寫一篇和面試相關的文章了,今天在網路上看到一篇關於如何去面試程序員的英文文章,發現其中有很多和我共鳴的東西,所以仿照其標題通過自己的經歷寫下了這篇文章。工作這么多年來,即被面試過,也面試過他人,對於程序員的面試,經歷過很不錯的面試,很專業的面試,也經歷過一些BT和令人不爽的面試,我個人覺得一個好的面試,面試官是很重要的,所以,本文想從「面試官」的角度來闡述一下。於是,有了下面這樣一篇的文章,希望本文對你的職場經歷有用,特別是那些正在招聘和面試程序員的朋友,我覺得這篇文章會對大家有很多啟示。此外,做為被面試的人,你可以看看本站的《別的程序員是怎麼讀你的簡歷的》《程序員需要具備的基本技能》《優秀程序員的十個習慣》其它一些和程序員相關的文章。對於招聘方來說,在招聘程序員的時候,我估計面試應聘者時,最主要想知道的是下面三件事:這個程序員的是否夠聰明?這個程序員能否把事情搞定?這個程序員能和我的團隊在一起工作嗎?我相信,這是所有團隊經理招人要考慮的三個問題,所有的問題也基本上圍繞著這三個問題。有些時候,你也許覺得程序員的技術技能可以同時解決這三個問題,一個技術能力優秀的人必然是一個聰明的,可以搞定事情的人,當然也就能和團隊一起工作了。是的,感覺看起來是這個樣子,但其實並不是這樣的。有些人的確很聰明,但卻不能處理好工作上的事情,這樣人應該是你的朋友,你的顧問,但不應該是你的雇員。有的人為人很不錯,和團隊所有人都合得來,但並不是很聰明,但工作很刻苦很努力,這樣的人可以成為你的下屬,比如某個下屬骨乾的助手,或是整個團隊的助手。如果某個人不能和團隊一起工作,無論其有多聰明,解決問題的能力有多強,你都不應該和他在一起工作。人個認為,團隊的和諧是一切事情的前提。對於傳統的面試招聘過程,基本上來說都是下面這樣的樣子的:閱讀應聘者的簡歷,讓應聘者做個自我介紹。問一些比較難的非常細節的技術問題,以一問一答的形式。給面試者一些和幾個編程難題。(比如某些怪異的演算法題)我個人覺得這種面試方法很可笑,也很糟糕,尤其是後面兩點。通常來說,這樣的面試只會讓你面試到一些「書獃子」或是一些「技術痴迷者」,下面讓我來一條一條地剖析一下這幾條的弊端。你很難從一個人的簡歷或是自我介紹上了解一個人。因為這些都是當事人自己寫的,或是自己闡述的。所以,這並不是很准確的,通過簡歷,你只能知道很簡單的事情,這對於是否能招入團是遠遠不夠的。而在面試的開始,讓應聘者做自我介紹,只會讓面試者以很正式的態度來面對整個面試。一但面試過程很正式,很嚴肅,就會讓人很拘禁,其實,這並不是我們想要的,我要的是應聘者真實和自然的表現,從而才能了解到最真實的東西。問幾個技術難題。比如:我個人經歷過的——「ps的-a參數是什麼意思?」,「vi中刪除換行符的命令是什麼?」,「C++的關鍵字explict,mutable是用來干什麼?」等等,等等。以前做為一個應聘者來說,我非常討厭這樣的問題,因為這樣的問題查一下手冊就知道。難道他要招的是一個字典手冊?不是一個人?對於這方面,重要的不是知識,重要的是其查找知識的能力。給應聘者一個或幾個很難的演算法題,給上十幾分鍾,然後讓面試者把偽代碼或是代碼寫下來。這樣的做法是相當可笑的,不能討論不能查資料,讓人在一種壓力狀態下作答,這根本就不是實際工作中的狀態,而我們的面試也就成了一種刁難(我最變態的經歷是,當我把寫在兩頁紙上的代碼上交上去後,面試官把其交給旁邊程序員輸出電腦做校驗,結果程序員說,編譯出錯。於是,面試官說,「很遺憾,可能你寫的程序還不多」,相當可笑)。對於這點來說,重要的不是那個解題的答案,而是解題的思路和方法。我以前經歷過很多的面試,當技術人員來和我做面試的時候,我發現,「技術人員的思維」對於某些人來說根本分不清面試和考試,在潛意識里,他們在很多時候不是在面試這個人,而是在刁難這個人並以此展示自己的技能。我個人認為我是一個好的程序員,但我可以告訴你我無法通過那樣的面試,因為那樣的面試是為他們自己准備的,而不是為應聘者准備的。那麼,我又是怎樣去面試的呢?一、確認簡歷。首先,閱讀一下別人的簡歷是需要的,從簡歷上,工作經歷,項目經歷,技術技能這三個事情是你需要了解的。一般來說,你可以先通過電話確定一下他的工作經歷,項目經歷和技術技能,然後,如果他和你需要的人條件相符的話,可以叫到公司做面對面的面試。千萬不要把別人叫來,你又說你的經歷和我們的工作有差距之類的話。(我有過一次面試經歷,公司我不說了,反正是那個號稱需要有良好溝通的公司,面試了我9次左右,從一般的程序員,PM,經理,到總經理,而最後一次直接告訴我,我以前的經歷和他們的要求差距很大。我不禁要問了,前面若干次的面試他們都在干什麼呢?)二、面試開場。其次,把人邀請來公司面試,應聘者到了公司來面試,有一點很重要,那就是你一定要讓整個面試過程變得很隨意,很放鬆,就像普通的聊天和一般朋友間的交流一樣。這樣應聘者才會放鬆並拿出真實的樣子來和你談話和聊天,你才能在很短的時間內了解得更多。讓應聘者放下心理負擔,讓其表現得自然一些,這是招聘方的責任。千萬不要說,別人太緊張發揮的不好,有時候,招聘方得想想自己的問題。面試開場的時候,千萬不要讓應聘者介紹自己,因為,應聘者早就給你發過簡歷了,而你也給其打過電話了。另外,應聘者對這個面試慣例通常都會准備得非常不錯的,另一方面,這會讓整個面試過程太正式太嚴肅了。所以,不妨問問應聘者是怎麼過來的?最近怎麼樣?還可以和應聘者談一個大眾話題,比如喜歡什麼體育,音樂,電影,社會熱點什麼的,自己也別板著個臉,說說笑笑,試圖讓大家都放鬆下來。另外,通過這些閑聊,你可以知道他/她的與人交往能力和一些性格。另外,不要讓桌子放在你和應聘者之間,把環境搞得隨意一些。三、多讓應聘者說說他的經歷。接下來,如果你要覺得這個應聘者是否是一個可以解決問題,是一個可以把事情搞定的人,不用問他/她會做什麼,直接問問其做過什麼?干過什麼事?對於一個好的程序員來說,很難想像其沒有相關的實踐,就算你是在大學里,你也應該做過什麼。如果你有解決問題的能力,那麼,很顯然,今天你應該解決了很多問題,也搞定了很多事情,聽聽應聘者說一說他的那些事。(不要使用一問一答這種方式,應該讓應聘者多說,而多聽,多想)在他講他的項目的時候,通常來說你要注意下面幾點:溝通表達能力。應聘者能不能把一個事情講清楚。如果這個人聰明的話,他就可以用最簡單的語言把一個復雜的事情講清楚。而且,這是一個好的程序員最基本的能力。而且,你可以在應聘者一邊描述其經歷的時候,你可以和應聘者有一些的良好的來來回回的交談,這樣就可以知道,他的溝通能力和溝通方式,從而了解他的性格,。角色和位置。也許他參與了一個很大的項目,但只是做了一個很簡單的模塊。所以,了解其在項目中的擔任的角色和位置是非常必要的。當應聘者說到「我們」或者「大家」之類的詞彙時,一定要向下細化和明確。做出的貢獻和解決了什麼的問題。這個很重要,通過了解這個,你可以知道面試者是否聰明,是否有能力解決問題,是否有好的技術底子。演示。如果可能,你可以讓應聘者展示一些其寫過的代碼,做過的設計,或是直接給你看看他寫的程序的演示。(從設計上,代碼的風格,重用性,維護性上你可以了解很多很多)基礎知識。了解該項目中應聘者使用的技術的一些基礎知識,比如,通過整個過程,你可以問一些網路,語言,面象對象,系統的一些基礎知識。基礎知識是非常重要的,這直接關繫到了他的能力。流程和工具。了解應聘者所熟悉的項目的流程(銀彈,瀑布,敏捷,……),還有流程中的一些工件(如:需求文檔,設計文檔,測試方檔等),以及在開發過程中使用的工具(內存測試,代碼檢查,BUG報告,版本維護,開發調試……)(關於程序員的基本技能,你可以參考——《程序員需要具備的基本技能》)有人會說,應聘者的經歷可以被他自己編出來的,他可以把一些不是他做的事說成是他做的。是的,的確是有這種可能。不過,不要忘了,一個謊言背後需要用更多的謊言來圓謊的,所以,你不必擔心這個問題,只要你在應聘者的描述過程中逐步求精,細化問題,你會知道應聘者是否是在編故事的。千萬記住下面幾點:談話風格要隨意和自然,不要正式。在了解應聘者以前做過的事的時候,不要太投入了。因為招聘方也是技術人員,所以有時候,招聘者自己會因為應聘者所做的項目中的技術太過迷人而被吸引了。要注意引導應聘人。相信我,應聘的程序員十個人有八個人講不清楚以前做的是什麼。因為他們直接跳過了項目背景和要解決什麼樣的問題,而直接進入具體實現。不要一問一答,應該多讓應聘者說,這樣才能多全方位了解一個人。了解一個人的過去,了解一個人做過的事情,比其會做什麼更重要。了解一個人的性格,想法,思維和行為,比了解其技術技能更重要。溝通能力,表達能力,語言組織能力,理解能力,等方面的能力,關繫到了是否能和別人一起工作。基礎知識比知識的點滴要重要得多。你可能不知道其個C++的關鍵字,但你應該要知道C++的繼承和多態。技術技能固然很重要,但比其更重要的是這個人獲取知識的能力,學習能力是在計算機這樣變化飛快行業中必需具備的。是否可以進行培養,比掌握的技能更重要。四、實際參與??這一步可能是很不好實施的。因為,這需要一些應聘者付出一定的時間,如果是畢業生,那沒有問題,先讓他來實習一段時間。但如果別人有工作,就不好了。也許你會說,這就是試用期的用處了。不過,我個人覺得,你得要尊重應聘者,人家把那邊的工作辭了,來你這邊工作,三個月試用期間,如果沒有什麼原則上的問題,你作為一個招聘方又反悔了,這樣做很是相當的不好。如果發現這樣的事,只能是招聘者自己的問題。在面試過程中,一些招聘者會讓應聘者們一起做個游戲,或是搞個辯論比賽,或是現場組個團隊干個簡單的事情,有的甚至讓應聘者請一天假到自己的公司里來和自己的團隊一同工作一天,並要完成某個事情(甚至給其設置上deadline),並通過這些來考量應聘者的實際參與能力。是的,如果沒有一起工作過,沒有一些實際的事情發生,單靠幾個小時的面試很難了解一個人的。設置上這些面試的環節,在最短的時間內來了解應聘者的一切,對於招聘方來說無可厚非。而且有的時候也能得到不錯的效果。在這里,我只提一點,有時候這樣的周期拉得很長,讓應聘者付出了很多,反爾會讓應聘者產生反感和厭煩情緒,從某種意義上來說,這實在是對應聘者的不尊重。對於這一點,我一直持疑問的態度,所以,我在其後打了兩個問號。老實說,對於實際參與這一環節,我個人的意見是適可而止,因為時間太短了,無論你怎麼做你都無法了解完整。即然無法了解完整,那就獲取你最需要的吧,就是本文開頭的那三個問題,以及上面所述的「第三點」(了解應聘者的以往經歷)。也許這個文章中有一些你不同意的觀點,沒問題,歡迎批評,如果你有更好的做法,我也想聽聽,不妨在這里留個言,如果不想留也可以email給我。
Ⅱ 怎樣快速確定程序員編程水平
想要快速確定程序員的編程水平,可以從以下四個方面考慮:
第一,知識的考察。這個是幾乎每個公司都會做的,也是很有效的手段,基本就是考試。包括問語法問標准演算法問API問一切有標准答案的問題。一個人懂得多,不一定寫得特別好,但是什麼都不懂一定寫不明白。這個方式還可以按需求選人才,比如我們就在php做前端,那我就可以問一堆關於php的,如果我是做嵌入式的,那我可以問一堆c。可以考察這個程序員在和公司需求的交集上完成的怎麼樣。這也是最最簡單和直觀的方法。
第二,對過往項目的理解。這個也是在簡歷關很常問的,說說你當時做的這個項目吧。這個問題非常有效地考察了他是否理解他之前做的東西。有的人簡歷寫的巨漂亮可是實際那項目和他沒關系,或者他就是復制粘貼的代碼,其實自己啥都沒寫。這種時候你和他聊的足夠深入之後能很明顯地發現他自己說不明白了。同時還可以考察一定的語言表達能力和邏輯能力。用我們的話說,先問到面試官不會的深度,然後讓他給面試官講明白。如果他做的東西,他蒙圈的時候比面試官還早(前提是面試官不是搞這方向的),那一般就比較悲劇了。
第三,對寫程序本身的理解。我們很喜歡問一道題,描述一下你是怎麼寫程序的。凡是說我事先design好所有的模塊、介面、功能,然後逐一實現,然後程序就work的,我們都心裡默默補上「呵呵」。因為這是不可能的,只能說明他沒寫過大程序或者沒總結過寫程序的經驗。沒有人在完成一千行以上的程序的時候在沒寫之前就做好所有模塊設計的,何況更大的程序。當然還有就是他會不會認為程序跑通一次就完成了(即寫程序有沒有test階段)之類的。
第四,動手寫程序的能力。這個說實話是面試的時候不太容易考的,因為時間有限。現在的大公司基本是45-60分鍾一輪,一輪還要問好幾個程序題,所以寫的代碼都是片段的,大概20行左右,根本沒法體現一個人會不會寫程序。所以很多人不需要會寫程序,只需要刷好leetcode之類的演算法題庫就可以進大公司(相信我我認識很多)。我們認為一個好的程序員一定要在限定時間之內完成一個完整工作,滿足要求的程序。從輸入到輸出到corner case的驗證。而不僅僅是研究明白某個基礎演算法如何用nlogn而不是n^2解決。這一關卡下去了無數看起來很美好的人。因為我們的題目是不可能在那個時間內找到最優解的,就像絕大部分工程中的編程一樣。一個較好的可用解往往比最優解要有價值的多,因為後者需要大量的時間,很可能沒有前者直白,而且提升未必很高。這是我們公司最在乎的一點。
Ⅲ 怎樣成為一個中級java程序員
1,先學習語言本身,那就邊看邊把程序抄到電腦上運行,不要希望每次都抄的很正確,要注意在錯誤中慢慢體會語言本身為什麼要這樣規定,慢慢理解語言。(這里所說的語言當然指的是java語言)
2,等學好了java語言本身,就要學習學習java的文件輸出輸入流,集合類,圖形界面編程,多線程編程,網路編程,等等,這些東東也是j2se的范疇,這些都是基礎,一定要記得好好學習,然後多在電腦上運行,還是老辦法,先是抄,慢慢的自己獨立寫,最後能達到自己獨立的編寫一個功能完整的程序,比如說什麼萬年歷啊,什麼便利店,什麼小游戲等等。
3,學好了以上兩個基礎,然後就選擇了,j2ee,或者是j2me,當然也可以兩個都學習。j2ee中就要先從servlet,jsp學起,慢慢學習struts,spring,hibernate,ejb,ajax等等,這就算是入了java的門了,你可以從事java方面的工作了。
4,其實說了這么多,學習的方法很簡單,先看書,看的差不多明白了,然後就運行相應的程序,這些程序當然就是你所看的那些程序,可以抄到電腦上,也可以直接運行書上帶的源碼,建議還是抄到電腦上吧。然後學習源程序,然後自己理解,然後自己照貓畫虎的在做一個差不多的東西,慢慢你就學習了這些技術了。
5,最後要達到的目的,其實在你掌握了技術的基礎上有更高的要求,要學會自學的能力,其實在工作中最難的不是技術,而是業務邏輯,這東西只能靠你自學的能力了。
Ⅳ 高中畢業的人怎樣才能做程序員!!!我想成為一名程序員!
一、要承受得住常人難也承受的孤獨與寂寞感;
二、要有良好的自學能力和邏輯思維能力;
三、要學習理論與實踐結合的法則;
四、要學會用搜索引擎搜索,最終得出你需要的答案;
五、要在知道答案的情況下,去分析和理解其中的奧秘與技術;
六、要有持之以恆,虛心學習,研究別人寫的代碼的精神。
七、要找准自己要學習的方向和目標(即語言),不要盲目的去學習與追求高級別的編程,一切從零開始。
八、當你找准目標後,就把你要學的這一門技術(語言)學精,其它的語言自然而然的就應忍而解了
綜上所述,如果你能做到以上幾點,將來你一定是一個高級的軟體工程師,祝你成功!
Ⅳ 怎樣自學成為程序員並進入微軟
微軟的官方網站上寫著"我們期待具有獨創性、開拓性的智者加入隊伍,我們的面試程序也是為網羅這樣的人才專門設計。"程序員只是具備了編程序的能力,微軟看中獨創性和開拓性。所以職業潛力更重要,獨創性需要一些人文要求,開拓性需要一些創業能力,而不完全是就業的能力。
Ⅵ 如何成為一個程序員
想要從零開始成為程序員,先不要著急的去學習,而是先要去了解程序員。
1.隨便在招聘網站搜索就會發現程序員會分有很多類型,那你就需要確定自己將來想要發展的方向,自己的職業規劃是什麼?
2.通過搜索可以看到,剛剛起步的程序員工資並不是很高而且學習階段也會比較忙,那這個時候你是不是靠考慮一下如何兼顧生活和工作?工資如何支配合理等問題(沒有經驗限制的工作相對較低)
PHP程序員崗位要求
關於學習建議你這樣試試看:
學習的方式基本可分為兩個類型,一個是碎片化的學習,一個是系統進修。
你可以從網路上各機構大量的視頻或者書籍得到相關的學習資料。從大量的資料中,發現真正的干貨,從而不斷學習,這屬於碎片化的自習。由於自學周期比較長,還有不少小夥伴選擇是一邊工作賺取生活費,一邊再利用閑暇時間學習,當然如果你的精力充沛,這也是一個好辦法。
如果要報培訓班, 一定要找正規的培訓機構學習,不然容易被坑。培訓機構裡面的課程都是現在工作中需要用到的,時間短,基本上是可以讓你快速上手工作的。但是要把所有的知識點都消化就沒那麼快了,所以需要自己私下更加的努力,鞏固學習。
注意事項:
1. 自學要注意的是:自學入門時會很枯燥,不要兩天打魚三天曬網!!!切記
2. 在培訓機構里學習要注意的是:勤加練習、主動自學、有問題提,不懂的盡管問老師(把交的錢發揮到極致),不然之後再有問題就沒有這么好的機會能夠直接得到老師的指點了。
最後,祝願想要成為程序員的小夥伴都能心想事成哦(*^▽^*)~
Ⅶ 請問程序員是做什麼的是不是每個公司都有自己的程序員要怎樣才能做程序員
這話問的,就算用PB也有1個月拿10K的!問這些有什麼用!耐下性子好好看吧!兄弟你路還長著呢!
Ⅷ 繼續干程序員還是去考編
如果你覺得對於程序員行業真的沒有什麼興趣,或者技術達不到再次上升的程度,可以選擇考編
Ⅸ 如何成為一名真正的程序員
很多人對程序員的理解不是非常明確,認為程序員是非常高大上的職業。怎樣才是一名真正的程序員呢?程序員並不是需要月薪達到五萬,最重要的是最程序的掌握。
什麼是程序?
程序=數據結構+演算法
當我們在寫代碼的過程中,需要包含哪些數據結構,需要包含哪些演算法呢?對於這些知識非常模糊的人來說,一定是一個假的程序員。
想要成為一名真正的程序員,並不是薪水的問題,最重要的是能力的問題,可以選擇參加電腦培訓,在這個過程中能夠有效的改變自己的學習和工作狀態。在學習的過程中不斷思考和練習,掌握技術能力,特別是一些需要更多邏輯思維的知識。很多人在學習的過程中不喜歡進行思考,最後在能力方面就會比其他人更加弱,這樣不僅沒有學到有用的知識,還浪費了大量的時間。
計算機行業的前景
隨著國家不斷推出的「互聯網+」戰略,軟體發展和國家經濟息息相關,在企業發展過程中離不開軟體的發展,所以在國家經濟不斷發展的過程中,軟體行業也在不斷的持續發展。在軟體發展的過程中,是需要不斷學習和進步的。北大青鳥為大家介紹掌握前端開發應該掌握的技巧。
前端開發工程師的興起隨著web的發展在不斷的進行細化,前端開發工程師主要是使用HTML/CSS/JavaScript/DOM/Flash再結合各種軟體進行界面的開發,在開發過程中需要掌握標準的代碼,能夠起到很好的交互作用,並且還需要掌握JSP和Flash的知識模塊,展現出完美的開發技能和視覺效果,為用戶提供更好的使用體驗。
昆明北大青鳥是一個提供人才的世界,在現在市場IT緊缺的情況下,成為一名真正的程序員是首要的目標,我們能夠為大家提供一個完美的平台,出校門即可就業,掌握實用的電腦技能。
Ⅹ 想做程序員,要些什麼條件
程序員是一種技術工作,在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,他們把這個作為炫耀的資本,盲目 的追逐一些膚淺的,表面的東西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂
中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提 高。
善於總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有 目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高, 一個程序員才可能成長起來。