㈠ 如何應聘程序員
具備以下能力:
1、版本控制系統(VCS)
VCS也許是計算機課程最大的疏漏。這些課程光記得教如何寫代碼,但卻往往忘記教學生如何去管理代碼。而每一個程序員都應該懂得利用Git或Subversion有效地創建repository(倉庫)、編輯與提交代碼、進行分支與合並、了解項目工作流。
2、寫作
身為程序員要寫的不只有代碼。你還要撰寫項目的發布說明,給版本控制寫提交消息,在系統裡面編寫漏洞報告。這些和許多地方都需要清晰有效的文字表達——但這個技能計算機科學卻很少強調。
3、正則表達式
正則表達式本身就是一門語言,每一個現代程序員都需要熟練掌握。每一門現代語言都支持正則表達式或者有相關標准庫。如果代碼需要校驗某字元串是否含有5個字元、1個破折號和1個數字,應該馬上就能寫出 /^[A-Z]{5}-\d$/。
4、庫的使用
現在已經是2014年,沒人需要用正則表達式從URL析取主機名。因為每一門現代編程語言都有執行常用功能的標准庫。程序員需要明白,那些經過開發、測試和調試的代碼通常要比自己重新寫的代碼更好。更重要的是,無需編寫的代碼實現起來要快得多。
5、SQL
很多程序員的SQL竟然是在工作中學會的。把數據存進平面文件的時代已經結束了。一切東西都要進出資料庫,而SQL則是存取數據的語言。這是一門說明性語言,不是程序語言,所以用它來解決問題時需要新的思考方式。每一個程序員都應該了解資料庫標准化基礎,能夠執行SELECT(及INNER、OUTER JOIN)、INSERT、UPDATE和DELETE。
6、IDE、編輯器及CLI工具
只懂用鋸子的木匠永遠也無法出師,所以計算機專業畢業的人只懂Notepad或pico的話實在令人驚詫。編程工具幫助操縱代碼及其他數據,令程序員生活變得容易。所以每一個程序員都應該知道命令行、shell腳本、find、grep及sed的使用。
7、調試
每一個程序員都應該知道利用互動式調試器或在代碼中點綴一些輸出語句來調試程序。通過逐步求精來跟蹤問題的能力實在是太重要了。
8、防錯性編程
錯誤總是難免的,哪怕是明星程序員也不例外。失控是世界的常態,出錯毫不奇怪。防錯性編程正是理解了這個事實。如果東西不會出錯,我們就不會檢查文件打開成功與否,不會檢查客戶ID是否合法數字,不用測試代碼是否允許正確。程序員需要知道,編譯器告警是有用的工具,可讓生活得更舒適,而不是要避而遠之的麻煩事。每一個程序員都應該知道為什麼每一個php程序都要這樣開頭:seterrorreporting,為什麼每一個Perl程序都要寫上這些語句:use strict; use warnings;。
9、團隊協作
很少有編程工作會讓你自己一個人完成,如果經常這么做,智力會受損,表現會變弱。你的代碼必須與別人的交互或者混合。再有才的程序員,如果無法與別人協作,都會給項目造成負面影響,並迅速成為團隊的負擔。
10、利用現有代碼
在學校的時候,每一次作業都是一個新項目,但實際工作不是這樣的。對於剛工作的人來說,所接到的第一項任務往往是修改代碼漏洞。然後,再在現有代碼庫的基礎上為現有系統增加一個小功能。設計新代碼那是幾個月後的事情,如果幸運的話。所以作為程序員的第一步,需要學會利用現有的代碼。
㈡ 如何面試一名程序員
如何面試程序員
一、提問之前的准備
首先,最重要的是,你自己一開始就應該想清楚:
1. 需要新員工完成什麼樣的任務?
2. 怎樣的人能完成這樣的任務?
3. 哪些途徑和方法可以發現這樣的人?
只有明確這些根本性的問題,才能正確高效地完成面試。
二、提問的原則
假定你對上一節的三個問題,已經有了清晰的想法,那麼接下來就可以設計如何提問了。
有一些提問的原則,是你應該遵循的:
每一個面試問題都有明確的目的。你不僅自己了解,還能向其他面試官解釋清楚。
多提一些開放性(Open-ended)的問題,而不是那種用Yes/No就可以回答的問題。這樣做使你有機會與面試者展開討論,並且提出後續的問題,盡可能多地了解對方。
不要問宗教、家庭、健康、個人隱私等方面的問題。
不要問太復雜的問題。因為面試者沒有太多思考時間,所以無法周全地回答,你也就無從判斷他的能力了。
三、考察專業能力
為了確認面試者是勝任的,你可以問一些與職位相關的專業方面的問題。(不過通常來說,一次面試不足以看出一個人的專業能力。)
比如,你的招聘職位是系統管理員,你可以問"如何快速地在50台機器上部署linux?"(提示:正確答案不是刻錄50張安裝光碟。)
另外,你還應該向面試者了解他的過去,因為過去是未來的最好預測依據。不過,提問的重點不要僅僅是他過去的成果,更要關注在當時的環境中,他是如何決策和實施的。
四、考察綜合素質
因為人是會發展的,所以某種程度上,面試者的綜合素質要比他的專業能力更重要。
所以,具體的技術問題(如何調用API、什麼是設計模式、編程語言的語法等等)可以少問一些,更應該關注面試者的事業心、對工作的熱情、進取心、自律能力、毅力等方面。
下面是一些典型問題:
Why did you get into development?
你為什麼開發軟體?
How many technical books did you read in the past year?
去年你讀了幾本技術書籍?
What was your favorite technical book in the past year? What did you learn from it?
去年你最喜歡的技術書籍是哪本?你從中學到了什麼?
What websites do you read regularly, related to development?
平時你經常訪問哪些編程類網站?
Do you maintain any open-source projects?
你有自己的開源項目嗎?
Do you code in your spare-time?
業余時間你編程嗎?
Do you love programming, or do you do it for the money?
對於你來說,編程是一種愛好,還是一種謀生手段?
Have you accomplished anything important in your career yet? Do you want to?
你的職業生涯之中有什麼重要的成就?它是你主導的嗎?
What would make you feel that you have done something important?
什麼事情會讓你很有成就感?
五、考察理性思維
某些情況下,你可能需要了解面試者的分析判斷能力,看他能否全面地思考問題、客觀地評價自己。
那麼,你可以依次提出這樣三個問題:
What's your favorite programming language? Why?
你最喜歡的編程語言是哪種?為什麼?
If you could add one feature to your favorite language, what would it be? Why?
如果允許你為這種語言加一種功能,你會加什麼功能?為什麼?
If you could remove one feature from it, what would it be? Why?
如果允許你取消一種功能,會是什麼功能?為什麼?
這里的重點是,讓面試者從正反兩方面評價一件自己熟悉的東西,看看他的思維是否片面。答案無所謂對錯,只要面試者有一個明確的立場,能夠從正反兩方面說出令人信服的理由,就可以了。比如,某個軟體的口碑不好,但是面試者說他很喜歡,而且說得出一大堆理由,清楚地解釋了這種軟體的優點和缺點在哪裡,這樣就很好。
你還可以把這些問題,套用在其他東西上面,比如操作系統、文字編輯器等等。
㈢ 應聘一般程序員需要什麼條件
其實應聘一般的程序員也就是看你的技術水平,只要技術夠硬就可以了。
㈣ 我是怎麼招聘程序員的
很早以前就想寫一篇和面試相關的文章了,今天在網路上看到一篇關於如何去面試程序員的英文文章,發現其中有很多和我共鳴的東西,所以仿照其標題通過自己的經歷寫下了這篇文章。工作這么多年來,即被面試過,也面試過他人,對於程序員的面試,經歷過很不錯的面試,很專業的面試,也經歷過一些BT和令人不爽的面試,我個人覺得一個好的面試,面試官是很重要的,所以,本文想從「面試官」的角度來闡述一下。於是,有了下面這樣一篇的文章,希望本文對你的職場經歷有用,特別是那些正在招聘和面試程序員的朋友,我覺得這篇文章會對大家有很多啟示。此外,做為被面試的人,你可以看看本站的《別的程序員是怎麼讀你的簡歷的》《程序員需要具備的基本技能》《優秀程序員的十個習慣》其它一些和程序員相關的文章。對於招聘方來說,在招聘程序員的時候,我估計面試應聘者時,最主要想知道的是下面三件事:這個程序員的是否夠聰明?這個程序員能否把事情搞定?這個程序員能和我的團隊在一起工作嗎?我相信,這是所有團隊經理招人要考慮的三個問題,所有的問題也基本上圍繞著這三個問題。有些時候,你也許覺得程序員的技術技能可以同時解決這三個問題,一個技術能力優秀的人必然是一個聰明的,可以搞定事情的人,當然也就能和團隊一起工作了。是的,感覺看起來是這個樣子,但其實並不是這樣的。有些人的確很聰明,但卻不能處理好工作上的事情,這樣人應該是你的朋友,你的顧問,但不應該是你的雇員。有的人為人很不錯,和團隊所有人都合得來,但並不是很聰明,但工作很刻苦很努力,這樣的人可以成為你的下屬,比如某個下屬骨乾的助手,或是整個團隊的助手。如果某個人不能和團隊一起工作,無論其有多聰明,解決問題的能力有多強,你都不應該和他在一起工作。人個認為,團隊的和諧是一切事情的前提。對於傳統的面試招聘過程,基本上來說都是下面這樣的樣子的:閱讀應聘者的簡歷,讓應聘者做個自我介紹。問一些比較難的非常細節的技術問題,以一問一答的形式。給面試者一些和幾個編程難題。(比如某些怪異的演算法題)我個人覺得這種面試方法很可笑,也很糟糕,尤其是後面兩點。通常來說,這樣的面試只會讓你面試到一些「書獃子」或是一些「技術痴迷者」,下面讓我來一條一條地剖析一下這幾條的弊端。你很難從一個人的簡歷或是自我介紹上了解一個人。因為這些都是當事人自己寫的,或是自己闡述的。所以,這並不是很准確的,通過簡歷,你只能知道很簡單的事情,這對於是否能招入團是遠遠不夠的。而在面試的開始,讓應聘者做自我介紹,只會讓面試者以很正式的態度來面對整個面試。一但面試過程很正式,很嚴肅,就會讓人很拘禁,其實,這並不是我們想要的,我要的是應聘者真實和自然的表現,從而才能了解到最真實的東西。問幾個技術難題。比如:我個人經歷過的——「ps的-a參數是什麼意思?」,「vi中刪除換行符的命令是什麼?」,「C++的關鍵字explict,mutable是用來干什麼?」等等,等等。以前做為一個應聘者來說,我非常討厭這樣的問題,因為這樣的問題查一下手冊就知道。難道他要招的是一個字典手冊?不是一個人?對於這方面,重要的不是知識,重要的是其查找知識的能力。給應聘者一個或幾個很難的演算法題,給上十幾分鍾,然後讓面試者把偽代碼或是代碼寫下來。這樣的做法是相當可笑的,不能討論不能查資料,讓人在一種壓力狀態下作答,這根本就不是實際工作中的狀態,而我們的面試也就成了一種刁難(我最變態的經歷是,當我把寫在兩頁紙上的代碼上交上去後,面試官把其交給旁邊程序員輸出電腦做校驗,結果程序員說,編譯出錯。於是,面試官說,「很遺憾,可能你寫的程序還不多」,相當可笑)。對於這點來說,重要的不是那個解題的答案,而是解題的思路和方法。我以前經歷過很多的面試,當技術人員來和我做面試的時候,我發現,「技術人員的思維」對於某些人來說根本分不清面試和考試,在潛意識里,他們在很多時候不是在面試這個人,而是在刁難這個人並以此展示自己的技能。我個人認為我是一個好的程序員,但我可以告訴你我無法通過那樣的面試,因為那樣的面試是為他們自己准備的,而不是為應聘者准備的。那麼,我又是怎樣去面試的呢?一、確認簡歷。首先,閱讀一下別人的簡歷是需要的,從簡歷上,工作經歷,項目經歷,技術技能這三個事情是你需要了解的。一般來說,你可以先通過電話確定一下他的工作經歷,項目經歷和技術技能,然後,如果他和你需要的人條件相符的話,可以叫到公司做面對面的面試。千萬不要把別人叫來,你又說你的經歷和我們的工作有差距之類的話。(我有過一次面試經歷,公司我不說了,反正是那個號稱需要有良好溝通的公司,面試了我9次左右,從一般的程序員,PM,經理,到總經理,而最後一次直接告訴我,我以前的經歷和他們的要求差距很大。我不禁要問了,前面若干次的面試他們都在干什麼呢?)二、面試開場。其次,把人邀請來公司面試,應聘者到了公司來面試,有一點很重要,那就是你一定要讓整個面試過程變得很隨意,很放鬆,就像普通的聊天和一般朋友間的交流一樣。這樣應聘者才會放鬆並拿出真實的樣子來和你談話和聊天,你才能在很短的時間內了解得更多。讓應聘者放下心理負擔,讓其表現得自然一些,這是招聘方的責任。千萬不要說,別人太緊張發揮的不好,有時候,招聘方得想想自己的問題。面試開場的時候,千萬不要讓應聘者介紹自己,因為,應聘者早就給你發過簡歷了,而你也給其打過電話了。另外,應聘者對這個面試慣例通常都會准備得非常不錯的,另一方面,這會讓整個面試過程太正式太嚴肅了。所以,不妨問問應聘者是怎麼過來的?最近怎麼樣?還可以和應聘者談一個大眾話題,比如喜歡什麼體育,音樂,電影,社會熱點什麼的,自己也別板著個臉,說說笑笑,試圖讓大家都放鬆下來。另外,通過這些閑聊,你可以知道他/她的與人交往能力和一些性格。另外,不要讓桌子放在你和應聘者之間,把環境搞得隨意一些。三、多讓應聘者說說他的經歷。接下來,如果你要覺得這個應聘者是否是一個可以解決問題,是一個可以把事情搞定的人,不用問他/她會做什麼,直接問問其做過什麼?干過什麼事?對於一個好的程序員來說,很難想像其沒有相關的實踐,就算你是在大學里,你也應該做過什麼。如果你有解決問題的能力,那麼,很顯然,今天你應該解決了很多問題,也搞定了很多事情,聽聽應聘者說一說他的那些事。(不要使用一問一答這種方式,應該讓應聘者多說,而多聽,多想)在他講他的項目的時候,通常來說你要注意下面幾點:溝通表達能力。應聘者能不能把一個事情講清楚。如果這個人聰明的話,他就可以用最簡單的語言把一個復雜的事情講清楚。而且,這是一個好的程序員最基本的能力。而且,你可以在應聘者一邊描述其經歷的時候,你可以和應聘者有一些的良好的來來回回的交談,這樣就可以知道,他的溝通能力和溝通方式,從而了解他的性格,。角色和位置。也許他參與了一個很大的項目,但只是做了一個很簡單的模塊。所以,了解其在項目中的擔任的角色和位置是非常必要的。當應聘者說到「我們」或者「大家」之類的詞彙時,一定要向下細化和明確。做出的貢獻和解決了什麼的問題。這個很重要,通過了解這個,你可以知道面試者是否聰明,是否有能力解決問題,是否有好的技術底子。演示。如果可能,你可以讓應聘者展示一些其寫過的代碼,做過的設計,或是直接給你看看他寫的程序的演示。(從設計上,代碼的風格,重用性,維護性上你可以了解很多很多)基礎知識。了解該項目中應聘者使用的技術的一些基礎知識,比如,通過整個過程,你可以問一些網路,語言,面象對象,系統的一些基礎知識。基礎知識是非常重要的,這直接關繫到了他的能力。流程和工具。了解應聘者所熟悉的項目的流程(銀彈,瀑布,敏捷,……),還有流程中的一些工件(如:需求文檔,設計文檔,測試方檔等),以及在開發過程中使用的工具(內存測試,代碼檢查,BUG報告,版本維護,開發調試……)(關於程序員的基本技能,你可以參考——《程序員需要具備的基本技能》)有人會說,應聘者的經歷可以被他自己編出來的,他可以把一些不是他做的事說成是他做的。是的,的確是有這種可能。不過,不要忘了,一個謊言背後需要用更多的謊言來圓謊的,所以,你不必擔心這個問題,只要你在應聘者的描述過程中逐步求精,細化問題,你會知道應聘者是否是在編故事的。千萬記住下面幾點:談話風格要隨意和自然,不要正式。在了解應聘者以前做過的事的時候,不要太投入了。因為招聘方也是技術人員,所以有時候,招聘者自己會因為應聘者所做的項目中的技術太過迷人而被吸引了。要注意引導應聘人。相信我,應聘的程序員十個人有八個人講不清楚以前做的是什麼。因為他們直接跳過了項目背景和要解決什麼樣的問題,而直接進入具體實現。不要一問一答,應該多讓應聘者說,這樣才能多全方位了解一個人。了解一個人的過去,了解一個人做過的事情,比其會做什麼更重要。了解一個人的性格,想法,思維和行為,比了解其技術技能更重要。溝通能力,表達能力,語言組織能力,理解能力,等方面的能力,關繫到了是否能和別人一起工作。基礎知識比知識的點滴要重要得多。你可能不知道其個C++的關鍵字,但你應該要知道C++的繼承和多態。技術技能固然很重要,但比其更重要的是這個人獲取知識的能力,學習能力是在計算機這樣變化飛快行業中必需具備的。是否可以進行培養,比掌握的技能更重要。四、實際參與??這一步可能是很不好實施的。因為,這需要一些應聘者付出一定的時間,如果是畢業生,那沒有問題,先讓他來實習一段時間。但如果別人有工作,就不好了。也許你會說,這就是試用期的用處了。不過,我個人覺得,你得要尊重應聘者,人家把那邊的工作辭了,來你這邊工作,三個月試用期間,如果沒有什麼原則上的問題,你作為一個招聘方又反悔了,這樣做很是相當的不好。如果發現這樣的事,只能是招聘者自己的問題。在面試過程中,一些招聘者會讓應聘者們一起做個游戲,或是搞個辯論比賽,或是現場組個團隊干個簡單的事情,有的甚至讓應聘者請一天假到自己的公司里來和自己的團隊一同工作一天,並要完成某個事情(甚至給其設置上deadline),並通過這些來考量應聘者的實際參與能力。是的,如果沒有一起工作過,沒有一些實際的事情發生,單靠幾個小時的面試很難了解一個人的。設置上這些面試的環節,在最短的時間內來了解應聘者的一切,對於招聘方來說無可厚非。而且有的時候也能得到不錯的效果。在這里,我只提一點,有時候這樣的周期拉得很長,讓應聘者付出了很多,反爾會讓應聘者產生反感和厭煩情緒,從某種意義上來說,這實在是對應聘者的不尊重。對於這一點,我一直持疑問的態度,所以,我在其後打了兩個問號。老實說,對於實際參與這一環節,我個人的意見是適可而止,因為時間太短了,無論你怎麼做你都無法了解完整。即然無法了解完整,那就獲取你最需要的吧,就是本文開頭的那三個問題,以及上面所述的「第三點」(了解應聘者的以往經歷)。也許這個文章中有一些你不同意的觀點,沒問題,歡迎批評,如果你有更好的做法,我也想聽聽,不妨在這里留個言,如果不想留也可以email給我。
㈤ 作為HR你是如何面試程序員的
我看下面幾乎所有人都說看人品。我就呵呵了,北京遍地小公司,哪怕大公司招一個合適的高級程序員知道有多難嗎?HR還看人品?這人品是你兩三句話能聊出來的?別逗了,無非是在技術差不多的情況下看看能不能接受加班出差,再比比價格,僅此而已。
㈥ 你要面試一個程序員,應該問他什麼問題
首先面試程序員分有沒有經驗
面試沒有經驗的程序員就隨便問問點ssm,ssh五大框架問題,多線程什麼的,再問問是否會點前端技術
有經驗就看看他的簡歷,問他簡歷項目上的問題,可以圍繞著簡歷上的項目問,通過他的回答涉及到的技術點之類的,拓展出去問其他的
㈦ 應屆畢業生,想做一名程序員,如何寫簡歷
應屆生求職最大的硬傷就是缺少項目(工作)經驗。所以應屆生應聘程序員簡歷中應該體現出來學習過程中做的項目,不僅要體現出來,而且還要體現的非常漂亮,不要簡單的就寫了下,我做了一個什麼項目,實現了哪些功能,使用了什麼技術……這就太形式化了,也不吸引面試官的注意。
敘述要簡明扼要邏輯清晰,項目不要讓別人看起來就很low,要表現出來項目的專業程度和復雜程度,更重要的是:你負責了什麼、你學會了什麼。
一個軟體項目可能不止一個人完成,你擔任了什麼角色,組員還是組長,負責了哪些模塊;另外,通過做項目,你學會了什麼,有什麼體會,對項目開發的整體流程有什麼認識。這些非常重要,經歷了什麼和收獲了什麼,是兩回事,一定要強調「收獲」!
並且在項目描述中,最好可以體現自己的綜合素質,如「我擔任組長開發項目期間,出現了什麼什麼狀況,我如何如何協調解決,項目比預計完成時間快了2天……」類似的,展現出來自己的管理能力、溝通能力或創新能力等,這樣就更好了。
作為技術職位,你簡歷中還可以增加一項「專業技能」,就是總結一下你的專業所長,你想應聘java開發這個職位,你具備的職位勝任能力,這項非常關鍵!很多HR篩選簡歷,她們並不懂技術,只是看關鍵詞,如果關鍵詞都沒有,你當然不會有機會。專業技能,寫的時候,一定要分類總結歸納清晰用詞准確,可以寫8-10項,不要太少。
㈧ 程序員面試要准備些什麼東西
面試前的准備
簡歷
1. 千萬別給自己挖坑
在面試的時候,面試官都會針對簡歷上技術能力、工作經歷、項目經驗等提出一些細節上的問題,所以你寫下的都些東西必須是真實,並且是非常了解。
2. 要有辨識度
通常一個職位可能收到的簡歷比較多,很多時候,你的簡歷甚至根本沒被HR看到。那麼,怎樣讓自己的簡歷脫穎而出呢?首先,簡歷要有「辨識度」,要讓面試官看完這個簡歷,就很想見見這個人。
3. 面試前最好進行一個「模擬面試」
其實自己在製作簡歷的時候,就像寫程序一樣自己是很難發現bug的,因此在面試前最好找朋友、老師或同學幫你來一場「模擬面試」,這樣也許會發現一些意想不到的問題。
4. 針對不同的公司要對簡歷進行微調
比如對方是個做電商。而你恰好做過類似項目,就可以將該部分的項目介紹著重突出以下,比如排列到最前面。
充分准備相關的專業知識
可以在網上收集一些相關的面試題,有時面試官也可能會照著網上的內容來問,所以網上一些比較熱門的題目也可以關注一些,然後對照自己的經驗組織成自己的語言。
項目經驗
項目的研發背景、整體業務流程、開發周期、負責的模塊、技術實現細節、技術亮點等。自己做過的每個項目都要整理清楚。
了解熱門前沿技術
比如你面試的是 iOS 開發崗位,除了 OC 你還能聊聊最新版本的 Swift;比如現在微信小程序開發又火起來了,你也在關注和學習,甚至能解決面試官的一些問題。了解這些熱門的前沿技術絕對會成為你面試時的加分點。
㈨ 程序員的招聘要求
怎麼說呢,不同的程序員要求是不同的,我們以JAVA程序員為例子:
三個基本要求:
(1)學歷要求:大學本科以上學歷(含本科),專業: 計算機相關專業本科以上;專科以上學歷,計算機及其相關專業,3年以上相關崗位經驗;
(2)工作經驗要求:一年以上java開發工作經驗;B/S項目開發經驗2年以上;3年以上的Java, J2EE, XML等開發經驗,1年以上架構設計經驗(Windows環境);
(3)項目開發要求:具有一定規模的項目開發經驗;
其實這三個要求,可以說,是目前大多數開發類技術崗位上,一定都有的要求。
學歷來說,只是一個敲門磚,我們沒有辦法幫你,你達到基本要求即可,當然,如果你的要求不太合適,可以強調你的技術實力。
沒辦法,這個社會就是這么殘酷,大多數公司,都不想花培養人的成本,都希望用熟手。
但另外一方面說,具有一定的項目開發經驗,工作起點就會高很多,不管是收入,還是發展,你都會站在一個比較有利的位置上。
實際上,大學生也可以通過一定的訓練,積累很多的項目開發經驗,達到工作2-3年程序員的水平,這個我們另文專門再說。
㈩ 想做程序員,要些什麼條件
程序員是一種技術工作,在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,他們把這個作為炫耀的資本,盲目 的追逐一些膚淺的,表面的東西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂
中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提 高。
善於總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有 目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高, 一個程序員才可能成長起來。