⑴ 如何辨別一個程序員水平的高低呢
有的時候單純靠一個面試很難辨別一個程序員的水平是什麼樣的。原因很簡單,因為很多面試題在網上都有,如果刻意准備那麼一般都能回答的不錯。所以想辨別一個程序員的水平需要一定的方法。
上述幾方面我們稱為應能力,還有一些軟能力也是非常重要的,比如責任心,對技術的態度,學習能力等等。當然,這些就更難考量了,本文暫不介紹。
如果上述幾方面都比較不錯,那麼這個程序員的水平應該是不錯的。即使對目前的工作的知識儲備可能還有欠缺,但經過一段時間後必然可以
⑵ 我想問問關於java的問題。 1,怎樣判斷一個java技術人的技術水平 2、java可以做那些系統和平台
你的問題都不是很好回答,我嘗試給你答一下。
1、要判斷一個java技術員水平,首先要看經驗。
原因就是java是一個開源語言,各色各樣的框架只要有人想得到,或者別的語言出現過,都有可能在java里出現,經驗就是指與各種框架、思想打交道的時間。這個時間越長,對問題及平台的了解也就越全面,在很多時候比如設計框架等會走在前面,考慮到很多未來可能出現的問題,提前解決。
其次也是經驗,這次是指java外其它內容的經驗。好的程序員絕對不會只懂一種語言,理解更多的東西才有得比較,才會了解誰更好。另外程序開發一般也脫離不了一些東西,比如網頁開發的html、css、flex等;資料庫又要各種方言的SQL;假設要用到java mail又可能自己去搭建個mail伺服器等等等等,很多就不列舉了。與這么些雜七雜八的事打交道的經驗也是很重要的,會直接影響開發的水準及效率。
然後是學習興趣與學習能力。任何一個語言不進步就會自然被淘汰,java也是。各種新的內容不停的擴充進來,新的JDK特性,新的框架,還有新的OS支持平台,很多很多。做為一個程序員,你得不停的刷新自己的知識,這也是分辨是不是個好java程序員的重要條件。
2、Java可以做的內容。
CS(Client/Server)平台,即用java做出Client界面,Server端也是Java實現。這種類似於windows的窗口程序。
BS(Browser/Server),即用戶使用瀏覽器做為Client,程序員使用html,jsp,或者其它技術來實現Client,Server端仍是Java,這種可以製作各類型的網站、基於瀏覽器的內部系統等。
其它,如WebService,只是發布介面,讓其它程序來調用。例氣象局把天氣發布成WebService,任何程序都可以去調用來取得天氣的數據。
還有些內容恕我知識、經驗不足,時間不多無法全部描述。
希望能幫到你。
⑶ 如何辨別一個程序員水平的高低
1.自己介紹項目,看對項目的提煉總結能力(也是抽象能力);
2.自己印象最深的bug,可以知道大概技術深度;
3.設計模式提問,看有沒有學習方法;
4.語法基礎問題,多線,分布,安全等問題,看知識面廣度;
5.智力問題,看反應能力,分析問題思路等
上述五步基本可知是否是一個好程序猿
計科專業從事軟體開發十幾年了,主要在瀏覽器內核領域研究的比較多,最近在研究伺服器後台方向,辨別程序員水平高低主要看做出了什麼產品,如同現在的程序員主要是項目經驗,簡歷上寫的一堆項目經驗都是面試的時候主要提及的問題。經常在面試中會問兩個關鍵點:一個是做過什麼項目;一個是在項目組中承擔什麼職務,畢竟參與過和做的多少程度是不一樣的,這些都是可以通過一些具體的細節檢測出來,問題越具體越是容易看出水準,具體的東西不是能夠編造出來的。
有很多技術公司直接不通過筆試,僅僅通過簡單的面試就確定工資水準了,最簡單的測試程序員水平的直接用筆試的方式,筆試可以把一些細節量化,盡量的細節化也是能測試出程序員基本功的,但這種基本用來測試初級程序員的,很多高級的程序員看到有筆試直接就抬腿走人了,因為有些程序員在一個方向做的時間太長了,很多基本功都忘得差不多了,所以筆試可能不過關,現實中很多程序員筆試不過關,面試還可以,也一樣可以做項目說的就是這類人,起碼這算是非常優秀的程序員。
有很多公司採用谷歌的方式,直接採用上機寫代碼的方式檢驗程序員水平,這種方式比較直接,但在現實中可能消耗的時間以及面試官的精力,目前只有極少數的公司用這種方式,國外的公司用這種方式比較多,這種看基本功非常有效。通過代碼可以看到編碼習慣以及演算法的設計上,都能直接看的出來。
普通的程序員直接看項目的經驗,高級的直接看做過的產品,特別是產品主要設計人員,這就是程序員內心的自豪感,畢竟作為一個程序員起碼要有自己設計開發的產品,也算是不白做一個程序員,在程序員的職業經歷中如果能經歷過一個產品從開始設計的初稿到最後推向市場,如果是完整的經歷,將是一種巨大的財富,只要經歷過一次都會對產品設計有一個比較層次的認識,這種能力需要靠直接的面試語言表達來展示出來,談下對產品的認識以及產品穩定性性能等方面的總結,能到這個層面起碼是高級軟體工程師的級別。
當然有些程序員內在的東西不是靠語言或者寫代碼看出來的,因為一個優秀的程序員不僅僅是代碼能力以及框架能力,還有幾個非常重要的能力
程序員的能力表面是可以直接展示出來,但很多內在需要是需要時間的磨合才能了解,人就才能見人心,而且很多優秀的程序員是培養出來的,能夠長時間在一起的隊友都是時間長了磨練出來的。
希望能夠幫到你。
自認為不是一個好的面試官,因為我認為在這么短的時間內,准確地衡量出來程序員水平的高低是有比較大的難度的,並且我有多次看走眼的時候,面試的時候覺得能力還不錯,但是入職工作了一段時間之後,編程能力不忍直視。
工作之後接觸一段時間,我會從這么幾個方面觀察他們,以判斷技術能力的高低和發展潛力。
能不能出活兒、能不能debug
能不能把開發任務按時按質量地完成,當然是最主要的衡量標准了:
解決問題的方法
在開發過程中,難免會遇到沒有見過的問題,有些程序員遇到問題無從下手,而優秀的程序員,自有一套解決問題的方法。
分析問題、流程設計的思路
有人會認為,程序員的主要工作就是敲代碼,上班大部分時候都是在敲代碼,其實並不是這樣:
總結問題和改進問題的能力
好的程序員,相同的問題不會犯第二次,差的程序員,總會在一個問題上栽跟頭:
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。
不請自來,一介碼農路過,留下些看法。
程序員主要是有四種綜合能力,也就是debug 能力、 performance分析、 保護性編程和 投入產出比。
僅僅獨立完成日後必然成高手?在這里不能說一棒子打死,至少對於很多人來說,能獨立完成是沒什麼問題的,有的是因為對業務熟悉,有的是真的基礎扎實。但怎麼說呢,程序員和瀏覽器打交道是最多的,現在這個互聯網時代,遇到的大部分問題網路都是可以解決的,也就是普通程序員 + 網路 = 超級程序員。 但很多人也沒明白具體的原理,甚至都是這個項目抄抄那個項目抄抄的,久而久之雖然解決了平時的業務,但進步的空間卻很少,甚至止步不前,寫出來的代碼也可能存在很多坑,所以,僅僅能獨立完成任務的話,離高手還有比較遠的一段距離。
如何辨別高手程序員?也就是結合我們一開始列舉的那四個能力進行判斷。不同級別的程序員,在那綜合能力面前,強弱也是不同的。例如在奔潰的或者其他性能調優問題上,即使是面對大量復雜的代碼,在信息不全的時候也會一步步的分析,抽絲剝繭縮小范圍,最終定位根本原因
,並且最終給出一個好的方案。
如何成為高手程序員?
當然還有看他摘了帽子是否禿頂這樣的笑話,就再不贅述了。
第一階段(黃金):會用編程語言實現需求,比如現在的業務系統,都會找一些會搬代碼的人來拼工作量,也就是能自己獨立基於搭好的框架實現crud常規操作。
第二階段(鉑金):除了crud,還會有一些自己踩過坑的經驗,知道如何處理一些常見問題,或者可以基於搜索引擎快速解決一些異常情況。
第三階段(鑽石):能解決一些疑難雜症和會通過debug部分源碼類庫查看到這些疑難雜症是如何引發的,並通過編碼解決這些問題,還能進行一些局部的性能優化,類似某個系統介面緩慢可以單獨去優化。
第四階段(星耀):會基於整個系統進行設計和規劃,根據業務特性選擇合適的框架,從源頭控制開發遇到問題的頻率,可以自主的搭建框架並完善機制,了解各個組件工作原理。
第五階段(王者):小說裡面總是說練武功的永遠比不過創造武功的,同樣的道理,用框架的也往往不如寫框架的,所以寫框架的這類人單獨分層。
第六階段(榮耀):其實這個階段不應該列入進來,因為這類人往往不編碼的,只是給出思想;像Hadoop這種框架就是基於人家發表的一些論文(bigdata)進行編碼實現的,這類人注重的是思想和演算法,區塊鏈,大數據,雲計算等等概念的創造和理論的支撐是這類人提出來的,這些人才是真正影響行業走向的人。
程序員的水平高低,不是靠語言或外在表現就能看出來的,不是看他會多少技術、參加過多少項目、寫了多少博客,而是看他在實際業務場景中解決問題的能力,尤其是面對一些特別復雜的問題,或在高強度、高壓工作狀態下解決問題的能力與態度。
技術可以通過學習掌握,但是解決問題、定位問題的能力卻不是一蹴而就。大家可能會說,「解決問題的能力」這個太寬泛了吧,可以更具象化嗎,有具體的測量方法嗎?簡單整理了以下幾點供參考。
會寫出滿足需求的代碼,早就不是評判程序員水平的標准了。代碼編寫既要滿足業務需求,同時還要考慮後續的軟體維護,說得通俗些,既要自己爽,也要別人爽。一個優秀的程序員,會致力於寫出更簡單、更效率、可讀性強、擴展性強的程序代碼。
程序員在日常工作中,需要理解各式各樣的業務需求,所以這就需要程序員具備一定的邏輯思維能力。可以說,邏輯思維是程序員的靈魂,因為每一行代碼都是程序員邏輯的體現。
項目著急上線,發布時出現問題?
業務高峰時段,系統宕機了?
業務催、運營催、用戶催、老闆催!
各種形態的bug,各種著急的心情,背後無數支眼睛盯得內心慌慌......
這些都是一位合格程序員所需要面對的日常。不同的程序員,在解決問題的方法、效率、質量等方面,都各有千秋。一個經驗豐富的程序員,能夠扛住各方壓力,在復雜條件下找到核心問題,通過抽絲剝繭的分析來找到產生問題的原因,並快速進行應對處理,事後及時復盤總結,減少同類問題出現的概率。
隨之互聯網的發展,越來越多的人湧入程序員這個賽道,競爭日益激烈,加之新技術層出不窮,更新迭代快,程序員所使用的語言、框架、模式都會發生天翻地覆的變化。如果不主動學習,你很快就會被落伍淘汰。
這種其實在面試過程中能體現出來,溝通主要是技術溝通,以及和客戶之間的溝通,所有技術都不是閉門造車就能搞定的,溝通能讓事情推進起來更加順暢,包括和產品經理之間的流暢的溝通也顯得非常重要。程序員的能力表面是可以直接展示出來,但很多內在需要是需要時間的磨合才能了解,人就才能見人心,而且很多優秀的程序員是培養出來的,能夠長時間在一起的隊友都是時間長了磨練出來的。
線上出bug了,第一時間響應、處理;
團隊項目進度緊張、人手緊缺,主動補位;
又或者,在項目推進過程中如果只是關心自己模塊內容,對於整個項目置之不理,只守著自己的一畝三分地。
隨著時間軸的拉長,你會發現,有此f技術能力不是最好的,甚至不如你的小夥伴,最後做到了技術主管或經理、甚至更高職位,這裡面除了技術實力,還有一個叫「責任心」的東西。
結束語
判斷一個程序員的水平高低,核心是其解決問題的能力,而解決問題的能力養成,需要扎實的底層基礎來支撐,要綜合其代碼質量、項目經驗、框架能力、邏輯思維等等多方面,不能單看某一方面。
而對於1-6歲的程序員來說,想要成為一個高級程序員,變得越來越優秀,唯有持之以恆去學習、積累、實踐、修煉。
----end----
一:50歲的時候,頭發還是黑色的濃密的。
二:賺到的錢能保證家人快樂的生活。
三:當公司不要你的時候能成功轉型。
其他的例如編程經驗、寫代碼厲害啊什麼的根本不值一提。
這就是程序員的面試嘛 :-)
(1)是否能熟練使用所用編程語言的主要功能;
(2)是否知道用合適的數據結構解決問題;
(3)是否知道基本的演算法,並且用這些演算法解決問題;
(4)只看少量代碼的話,從變數命名和程序結構一般能夠判斷是否是新手;
(5)給出具體問題,能夠用程序解決,能考慮到所有的邊界條件;
(6)考慮程序的可擴展性,可維護性;
再往高一點走,就需要
(7)面對模糊的問題能夠分析並且找到細節和具體的需求;
(8)知道利用已有的庫,架構和工具等來解決新的問題,而不是什麼都自己實現;
(9)能發現並改進已有程序中的瓶頸;
(10)對整個大項目的程序架構有很清晰的了解,知道相互之間的依賴,以及知道為什麼採用這樣就架構;
(11)給一個大的項目,能夠對整個項目的程序架構和組件進行合理的設計,考慮並行性,低延遲,大數據量等各種需求和應對方式。
帶領團隊已多年,項目數十個,對判別程序員水平的高低,我有自己的看法,歡迎大家一起交流。
1.代碼質量。
優質的代碼,首先是經得起考驗。靜態分析工具過一遍,無錯誤,無警告。當然警告部分需要人工重審,因為靜態分析工具不一定完全正確。過了這一關,重要的還須過測試關,少Bug或無Bug的代碼,才是好代碼。優質的代碼帶有技術氣質和藝術氣質。閱讀起來,有一種賞心悅目的快感,即工整美觀,干凈利落,又蘊含著理論常識,運用技巧,精準到位。
2.表達能力。
3.文檔能力。
文檔形式包括但不限於PPT,文字,圖表,音視頻。文檔內容包括但不限於API說明,工具手冊,項目事項,技術論述,陷阱總結,方案展示,指導手冊。文檔要求必須是滿足公司或部門的規范和格式,否則五花八門的,不利於交流和傳承。
以上3點,是我量化判斷程序員水平的標准,僅供參考。相比水平,其實我更看重程序員的態度,執行力,時間觀念,自學力等等,也是很重要的團隊作戰能力,也可以說是程序員水平的考量吧。
謝謝大家。
⑷ HR怎麼通過簡歷來判斷程序員是否優秀
01.簡歷中項目的參與度、貢獻度
簡歷本身的效用信息往往非常局限,看了簡歷之後,也難以形成對候選人的初步判斷。但我們其實可以通過項目經歷上的信息,來評估候選是否完整、深入參與其中。
在候選人簡歷的項目板塊,我們可以查找是否有以下關鍵信息:本人在項目中的角色?比如後台系統開發,主導搭建了頁面框架,提高代碼質量;公共組建的提取、編寫。解決了什麼樣的問題?比如通過自動化,讓代碼易於管理;統一的編碼規范,更有利於多人合作,降低了代碼出錯率;性能上帶來多少提升?比如單頁應用讓請求次數變少、頁面呈現更快,用戶體驗更好了。通過以上信息,我們基本上可以判斷候選人在項目中的角色,或者從解決的結果來看能基本評估出候選人在整個項目中的貢獻度。
另外一種是簡歷上的項目闡述,可以通過以下兩個例子對比:例子一:A:應用 xx 技術,解決了XXXB:應用 xx 技術,解決了XXX,出錯率降低了 0.1% 等。例子二:A:結合使用 xx,實現了 app 登錄和個人資料的自動填充B:結合使用 xx,實現了 app 登錄和個人資料的自動填充,提高了多少的轉化率我們可以直觀看出,有量化的結果的項目履歷更有說服力,也可以側面證明候選人是有深度參與到項目中,才能對數據結果有一定的了解。
02.候選人在技術社區的使用情況
很多優秀的技術人才都有分享的習慣,比如在GitHub、知乎等社區都會分享一些自己的技術經驗貼。通常來講,如果候選人有在社區發帖的習慣,確實會增色不少。比如全球最大的開源社區GitHub,大多數程序員都會有賬號,但這個只能算是真正的「圈內人」,如果是GitHub的重度用戶,其實非常亮眼的:如候選人在GitHub發布的項目經常能收獲很多follower和star,那正是其能力的體現,可以通過其貢獻的項目來評估;如果能長期堅持使用GitHub,也能說明的是這個人心態比較開放,對業界比較關注、律己、有耐心;GitHub上大多數代碼是經過長時間構思和反復修改重構,代碼質量可以很好反映其當前的Code水平,其中也可以窺見解決問題的能力。
經常在技術社區發帖互動,可以說是判斷是否為優秀技術程序員的加分項,但也只能是敲門磚,不能過份強調它的重要性。
03.通過代碼筆試,直擊簡歷
要看能力最終還是應該考查編碼能力。面試官或HR其實可以通過一場在線筆試,在簡歷初篩階段來進一步判斷是否為大牛。
面試官可以設置一些耗時較短,考察具體硬技能的題目,來考察候選人的基本功,將簡歷造假的同學篩掉,在ShowMeBug筆試平台,支持不同職級、不同語言、不同維度等題目,面試官可以快速發一起一場筆試,可以節省面試官大量的時間;
對於簡歷中的項目,其實可以設計一個非常真實的問題,比如你目前有獨立設計實現過一個完整的功能嗎?你研發的這個功能產生了什麼作用,你在項目中扮演一個什麼角色?ShowMeBug筆試支持音視頻題型,面試官可以量身設計,讓候選人更加真實的回答。
⑸ HR如何快速判斷應聘的程序員是否靠譜
招人這個事情放到如何重要的地位,其實都不為過。前趕集網CEO楊浩涌在一次開放式演講中說過,CEO要花一半精力去找人。其實在Google、Facebook、Alibaba等一些公司在招聘一個員工的時候,他們是很耗費時間和精力的。一個好的人是值得花非常多的時間。你看重的人,在他身上花精力是非常值得的,他會被打動,他會感知到你確實非常在乎他,士為知己者死,好的人才覺得跟你是有共鳴的,他願意加入你這個團隊。
其實在一些中小公司,可能HR會初步篩選一些簡歷,然後給面試官進行面試。但其實很多時候,面試官面試的這位應聘者根本不靠譜(注意,我們現在說的是程序員招聘這個方向)。這樣一來其實不僅浪費面試官的時間(其實,你知道,一般能夠作為面試官的,在公司裡面其實是很忙碌的),也是在浪費面試者的時間。所以,我個人覺得,HR在招聘的時候,首先可以通過一些基本的問題來快速判斷應聘的程序員是否靠譜,通過HR的初步篩選後,面試官再和應聘者電話或者當面聊一些技術層面、邏輯思維層面以及團隊合作層面的問題,這樣就大大的增加了招聘的效率。
我個人覺得有兩點:
因為程序這個行業變化更新很快,不要說剛入行的程序員,就是工作了十年的老司機,也需要不斷的學習,而看書是學習的最直接體現。
HR可以在和應聘者電話溝通的過程中,可以詢問他的業余時間都是怎麼過的,如果應聘者沒有提到讀書、看書之類,我覺得多半不靠譜。當然看書並不局限於一些技術方面的書,也可以是一些非技術的書,我覺得愛看書的人,兩方面的書都會看的。
我覺得第二點非常重要,首先我想要的是,應聘者簡介、清晰、有條理的描述出他最近做完的一個項目或者產品的大的需求是什麼,他自身在整個團隊裡面充當的是什麼樣的角色,能否描述清楚他自己做的某些功能。
如果HR能夠很清晰的理解應聘者所描述的這些問題,我覺得他是靠譜的。
首先,如果作為一個非技術性的HR,能夠聽懂應聘者的解釋,我覺得應聘者溝通、理解能力是完全沒有問題。
其次,他能描述出來這個項目或者產品的大的需求是什麼,說明他不是在蠻干,也說明他並非只是關注於手頭上的事情,他還在關注整個團隊在做什麼樣的事情,這也體現了團隊精神。
然後,他能描述出來自己做的某個功能,說明他是真正的去實踐過和思考過,思考和實踐是作為一個靠譜程序員必備的素質。
總體上,快速判斷一個程序員是否靠譜也就是這兩點,如果這兩點都OK ,沒有問題後,我覺得HR再和應聘者約時間,再和面試官聊。
提出一點建議
就是HR先進行一輪電話面,溝通一些基本問題,從中覺察應聘者在表達、溝通、描述以及學習方面的能力。如果還行,可以和應聘者約定一個時間進行技術面,而面試官可以把時間選擇在晚上,也就是7-9點鍾,這個時候,上了一天的班,可以更好的投入到面試的上面。通過電話面,了解一下技術,以及以前的工作經歷,沒有問題的話,再約時間當面聊。
這是我能想到的,不喜可以噴......
⑹ 看資深面試官透露是怎樣判斷IT開發人員水平的
1、計算機相關學科的學歷背景,或者即使沒有計算機學歷背景,也要有計算機學科體系的完整學習經歷,基礎知識在我看來是第一步,如果你不懂數據結構演算法,不懂計算機體系結構,不知道怎麼設計演算法,不知道計算機軟硬體怎麼工作的,那寫出的代碼也是質量差的無效率的,你只是寫出來了,但是在我看來是沒有價值的代碼,沒有可維護能力和積淀性的,我從來就不相信一個沒學過數據結構演算法,計算機體系結構,編譯原理,軟體工程這些課程的人寫出來的代碼,那些很多策劃改行的程序的程序員是不會到我這里一面的,所以來我們這面試的,無論你之前多牛逼,那都是虛的,一定要做筆試題,一紙筆試題直接看出基礎能力,曾經見到技術總監不會寫快排演算法的,說太久忘了,那你來指導什麼?用你的經驗在這喝茶么?需要你來這里做什麼?這不是笑掉大牙么?為什麼我不招一個專業基礎優秀並且有活力且成本低易塑造的年輕人,數據結構和演算法設計是這里必須通過的。一句話,做技術的,太虛沒用,用你的專業能力說話,在這里我們會偏向那些名校背景的人,因為經驗上看,學歷背景好的專業能力普遍非常扎實,這點我覺得網易現在的技術的一枝獨秀,不得不說和他的校招只招清北浙交的策略有很大關系
2、游戲開發領域的專業知識,游戲開發有很多特定領域的知識基礎,包括3D圖形學,AI,物理,音視頻,操作系統平台開發,業務邏輯系統,很少會有人把這些面面俱到,這裡面每一個都需要幾本書的系統知識去啃,但是我們只需要看到你在這裡面某一個或兩個上面有深入研究和經驗,比如你非常通曉渲染,opengl D3D 各種shader效果,渲染優化都玩得很好,那就是一個加分,比如你非常善於研究ai,對行為樹,尋路這些有深入的經驗,也是很好的,如果對這些全都一知半解,那是不行的,我們需要的不是只是每個都懂一點的人,在游戲的專業知識領域方面,先做一個專才。
3、聰明。沒錯這是非常重要的一個衡量標准,開發者一定是這個世界上IQ最高的一群人,我很看重IQ,面對日新月異的開發工具技術的變革,聰明代表你有更快的學習適應能力,並能夠對問題提出自己的一定見解和解決方法,這個很重要。
4、工具的使用,工具是針對不同游戲項目的,比如你做unity,那要求你掌握unity編輯器,你做unreal,你做cocos,在我看來工具並沒那麼重要,一個基礎扎實聰明的人對工具的掌握是很快的,甚至很多非程序員都能玩轉工具,所以在面試時這個只佔25%左右的比例,和我說你多了解多了解某個工具,那其實並沒有那麼值得炫耀,就像練功的外功和內功,我們更看重內功,工具是可以花時間彌補的,專業基礎則很難,那需要悟性。我們現在主要招聘U3D的開發,對這塊,我們會衡量簡單的U3D編輯器基礎,U3D 的一些深入的概念,比如優化內存,drawcall,光照系統,assetbundle包,資源載入,動畫系統,GUI系統,還會深入的考察C#,LUA的開發的情況。如果面試者只是把unity當office用,那就在這塊沒有分數了,一個並不是很復雜的問題可以難到很多人:兩個資源BC共用A,那麼ABC如何打包?載入b的時候要怎樣載入?載入好b之後哪些包卸載哪些不卸載?不卸載的何時卸載?這個問題答得不完整不能說你深入的研究過UNITY
5、經驗,經驗在我們看來和工具差不多,這種依靠時間堆積的東西並不如專業基礎重要,在技術開發來講,10年經驗絕對不是1年經驗價值的10倍,經驗多固然好,但那是在其他因素都一樣的情況,一個聰明的名校畢業生,和一個10年經驗做過10款游戲但是一直沒有做過很多核心工作的程序員,我必然選擇前者。而且關於經驗,我們會把時間放在一邊,先來剖析你所謂的經驗多少是真正有價值的。首先,大廠大作的開發人員是加分的,這意味著你曾經同一些很棒的同事共事過,任何成功的產品都是有其成功的道理的(但是大廠的邊緣發開人員則沒有什麼亮點,大廠往往把核心工作和非核心工作分的很開,一些非核心開發的人員很久接觸不到主要研發工作,那反而是個劣勢了),然後我會就著你的簡歷詳細剖析你所做的工作,你說你做過尋路,那我問你A*演算法原理怎樣的,和navmesh有什麼區別,A*在大型地圖怎樣優化,如果你答不出來,那我不認為你真正的做過尋路,你只是使用過工具而已,那知識不屬於你,這一項經驗我會清0,你做過戰斗,那我會問怎樣同步前後端的狀態,怎樣避免延遲導致的問題,怎樣能夠更好的表現打擊感。所以經驗絕對不是你做過什麼,而是你詳細的琢磨過什麼,哪些東西真正的屬於了你。所以很多10幾年程序的經驗開始很不屑一顧的坐在對面,說了一堆堆很著名的產品,這我做的那我做的,我要來當主程,那ok,問到細節一個也說不清楚,再加上基礎的演算法也都說你忘了,那沒有任何意義,對不起,我喜歡刨根問底。
⑺ 怎樣快速判斷一個前端工程師的能力如何
對於考察人的技術等級,學界是有認真的研究的。參見:德雷福斯模型解說。
德雷福斯模型把人的技能水平,分成 5 級:新手、高級新手、勝任者、精通者、專家。
對不同技能等級的認定是這樣的:
新手:依靠指令清單,必須按部就班。就是必須給出詳細而具體的操作規則,才能工作。比如你做一道從未做過的菜,需要看菜譜的說明,第一步做什麼,第二步做什麼等等,直到最後烹飪結束。
高級新手:有限的情景洞察力,同等對待工作的各個方面。對全局性、體系性的東西沒興趣。這是小工的水平。比如他能跟著師傅干點活,打打下手。可以靠著反復檢索搜索引擎、StackOverflow 解決具體的小問題。
勝任者:能夠獨立解決各種各樣的領域內問題。這是一般的企業招聘,比較希望招到的等級,招進來稍作適應就能幹活了,省心省力。
精通者:經驗豐富,可以自我糾正、自我改進。這類等級的人,思考可以指向內在,通過反省、反饋改善技能。這種在企業可以算上高手、大拿了,培養不易。
專家:依靠直覺工作,不需要解釋和理由。實際你讓他解釋,他可能也說不出個所以然,就是直覺給出答案,然後還是對的。專家人數稀少,需要很長時間訓練、實踐。通常的說法是 10 年出專家,10000 小時定律。
這個是理論上的研究,實踐中比較缺乏操作性,難以迅速的判定應聘者的實際情況。不信你打開收進來的大把簡歷,剛畢業的學生,每個技能名詞上面都是一堆堆的「精通」 – 你相信么?但它可以當成一個職業技能等級判定的參照標准。
於是乎,各家企業開啟了各種「筆試」、「機試」,多輪面試,並且嚴格要求學歷以及出身院校,試圖以此過濾掉不合意的應征者,留下合格的人選。它當然是可行的,但是效果一般,而且容易出錯,錯失有思想有水平的人。不然也不會催生出各類「推薦式」的招聘。
看重學歷、學校當然也有其優點:它是快速過濾的手段,畢竟能考上好學校的人智商不會太差吧。但在大數字公司的一朋友說,公司裡面還有初中畢業,一直精研安全領域的人,技術能力也是十分出色。如果嚴苛對待背景,這些人就會錯過了。因為人的生活多種多樣,有各種歷史的背景因素影響經歷。而部分人的經歷,就是跟一些人不同的,可是不妨礙他們同樣可以變得優秀。招聘,實際上是建立信任關系。如果有充足的信息證明,應聘者足夠優秀,這就夠了。條條框框只是輔助手段,並不是目的。
推薦式的招聘實際要靠譜的多,因為人很容易了解熟悉的人的水平。這是靠推薦者的信用背書。人平時溝通時說什麼話,日常看什麼書,關注哪些領域,琢磨過啥問題,哪些東西很熟,這個經常聊的熟人往往都知道。可是,這類招聘局限性也很大:面窄、靠機緣。靠推薦能招幾個好手啊?好手往往是各家爭搶的對象,窗口期有限,基本不會缺工作的。
說了一圈,還是要在技能水準判定上有更高效率的辦法,招進合適的人來。
回到開頭的德雷福斯模型,既然人的技能是分級的,那麼對待不同的職位要求,也應該側重不同的考察角度。如果千篇一律的走招聘流程,就容易出問題了。比如你明明要找的是「精通者」,可上來就讓人一堆筆試、機試,這是不合適的。對方會十分的厭煩。體現高水平技術能力的並不在默寫什麼「字元串演算法」那裡。這反倒是剛畢業的人佔便宜,因為才學過不久,印象深。不信你讓工作 10 年的人跟計算機專業應屆生比比寫排序演算法,真未必能贏。但是這並不重要 – 你幹活不看手冊不查文檔嗎?聰明人從不死記硬背。重要的地方在於對問題域的准確、深刻的理解,對各類技術優劣點、各種條件平衡的評判和把握。
對待初階新人,應著重考察的是基本功是否扎實,專業成績是否優秀。更重要的,是他對職業的熱情,學習能力和研究精神。某類人要說起技術來,滔滔不絕,兩眼放光,充滿熱情,對未知的、新生的各類概念、技術非常好奇,這種人想差都難。因為他會自我驅動,不用督促,自己就鑽研前進。反之,覺得這個職業待遇高,只是想混飯吃的人,很少走得長遠。這類初階新人以畢業生、工作年限少者為多。測試考核,可以筆試查看其對基礎概念的理解是否准確,知識領域的大致范圍。甚至,布置一個有點挑戰性的小任務,讓他嘗試解決,說明思路。
考察勝任、精通者的策略不一樣。筆試做題沒啥用,原因前面說了。這類招聘是重頭戲,企業都喜歡找這樣的,能幹活。所以考核評估的地方也較多。我覺得可以分成幾個方面去看。意識是否先進,是否會反省思考;是否善於解決問題,富有創造性;是否有比較深的積累和廣闊的知識面。
業界的開發思想也是在不斷變化,工具鏈一直在革新。聰明的人不用蠻力,而愛用工具提升效率,喜歡自動化操作解放人力。要查看人用什麼開發工具鏈,用什麼開發環境,解釋下為什麼?好的開發者會及時注意新出現的工具,挖掘它能解決什麼問題,並嘗試吸收,解決自己的需求。如果沒有這個思想意識,工作效率就會打折扣了。因為你會落後行業發展水平。人善於自我反省,則會催動自我糾正,這正是精通者的特徵。參考:優秀的開發者為什麼要學習研究新的編程語言?
解決問題的能力是重頭戲,也是企業招聘人的主因。人要善於解決實際問題,而且,要學會聰明的解決問題。解決問題要看思路,看手段,看是否有創造性,這是真正考驗人能力的地方。好的開發者,會考慮很多可能選項,預估各種優劣,給出一個較優的方案。 遇到難題,會用各種方法嘗試。經驗豐富的人,常常會使用技術的組合手段來處理難題,而不是一個語言一個工具到處用。所以,要查看下過往的項目經歷遇到的問題、困難,是如何解決的,思路如何。一些公司據說不招聘不會用谷歌的工程師。谷歌打不開?嘿嘿,這就是你要克服的困難啊。這你都解決不了,還做什麼研發。谷歌是人類最全、最新知識的總索引,充分利用事半功倍。
考察知識的深度、廣度,對重要領域的概念是否有深刻的理解和掌握,以及從各類工作經驗中得到的認知。問問他看過什麼書,研究過什麼東西。說白了,知道的東西是否多。一些公司很喜歡用 CheckList 模式來考核,列一堆領域的知識點、概念,問人懂不懂,知道就是水平好,不懂就是水平差。實際情況並非如此。人的工作過程是獨立的,一些事情如果沒有工作機會去接觸並解決,那麼一些冷僻的問題就永遠都碰不上。當然也就不知道。但你能說沒做過就一定做不好么?
另外,人的技能樹,其實也是「犬牙交錯、參差不齊」的。什麼意思?技術領域非常的廣闊,你真的沒辦法每個領域都很精通,實際上是這個做的多,懂的多,那個用的少,知道的少。這個時候,應看具體知識領域,是哪一類。它是否需要復雜的、難度較高的背景。門檻高的技術,需要的配套技能多得多,比如 AI、機器學習。而一般產品應用領域則不然,了解核心概念、設計意圖,看著手冊、最佳實踐,也就能上手了。這個暫時不會,實際無關緊要的,工作一段學的認真點就會了。但是門檻高的領域,就需要很長時間的學習了。這是本質的差別。
我曾看見某公司放出的職員技能樹,包羅萬象,幾乎一切 IT 領域的知識技能都在裡面了,還聲稱要求「全部精通」。我不知道它如何定義的「精通」,如果按德雷福斯模型的定義,能做到的那是神,不是人類。這個純屬吹牛皮,我壓根就不信。如果真有這樣的人,出來讓我膜拜下。因為每個稍大點的領域,都足夠讓你鑽研一輩子,因為它們也在迅速發展呀。業內流傳「全棧工程師」的說法,鼓吹自己是全棧的人經常是前端工程師。而研究後端工作領域的技術高手經常鄙視這類人:真以為會點 Node.js 就能解決一堆後端的事務了么?我也懂一些前端,也能號稱「全棧」,但在不同領域的專業性是什麼水準,自己明白的很。前端要解決的事情也有很多復雜性。全棧實際是反專業化的,是人力資源稀缺時候的低成本選擇。
更高一層,則是考察人本身了。人的視野夠廣闊么?其它領域的知識有了解嗎?一些問題的解答並不在問題域本身,而是在外面的領域。所謂「功夫在詩外」。公司講求團隊協作,總要面臨不同的分工合作問題。比如產品、運營的人提需求,可以換位思考嗎?合作意識強么?誰也不想招個刺頭進來吧?把團隊的氣氛和人際關系搞的一團糟,大家做事都不痛快、不順心,又如何安心做好工作?最終只能讓團隊工作效率下降,甚至瓦解。