我是工程師,不是編譯器

來源: 伯樂在線  發布時間: 2012-05-15 08:42  閱讀: 4641 次  推薦: 0   原文鏈接   [收藏]  

  英文原文:I’m an Engineer, Not a Compiler 

  原文作者:dclements,發布于 2009-2-23

  最近我接到一個面試電話,被問了許多 Java 的問題。這樣的面試很平常,大部分的問題也都是標準問題:

  ● 什么是多態?

  ● List 和 Set 有什么區別?你什么時候用 List,什么時候用 Set?

  ● 什么情況下你會遇見死鎖?

  ● 強類型和弱類型有什么區別?

  這些算是很合理的問題。我不喜歡那個多態的問題,因為它和大部分的面向對象語言以及繼承緊密相關,而當我們覆蓋和重載一個方法時,我們是不會意識到“哦!這實際上是一個多態!”而我會想“什么是繼承,我什么時候應該用繼承”,而這才是面向對象語言的關鍵。但是這是我個人的觀點,可能會有其他不同觀點。

  強類型和弱類型的那一題有點不尋常,因為他實際上指的是類型檢查而不是類型強度。當我說C是一種弱靜態,Java 是強靜態,Python 是強動態時,他有點迷糊(我認為 JavaScript 是弱動態,但我并沒有說出來)。

  接下來的是一些細枝末節的問題:

  ● List 在哪個包中?

  ● File 在哪個包中?

  ● 你要繼承的時候用什么關鍵字?

  (我們也會經常遇見一些標準問題“你 5 年內想成為什么樣的人?”等等)

  Russ Olsen 提到了問細枝末節問題的結果

除了不能告訴你許多信息以外,問細枝末節的問題會付出兩種代價:首先會占用你真正可以用來了解一個人的時間,你可以利用這些時間來了解這個人是否足夠聰明,是否有合適的背景,是否適合你的團隊。其次,這種類型的問題有可能會剔除掉那些真正聰明的,你真正想雇傭的人呢。

  我現在列出這些細枝末節的問題,我認為還會引發一個結果:問這樣的問題剔除掉那些真正合適的人之外,剩下的人將會錯誤的人選。

  一個好的工程師在設計和創造系統的時候是抽象性的思維的,他們會想象算法,組件,工程性的設計。他們不需要知道語言的所有細節,尤其是當他們使用 IDE 時,IDE 可以幫他們完成(我使用 Eclipse:我輸入 List,然后輸入 control + 空格,IDE 會自動幫我載入 java.util.List)。我能分辨出我需要哪個包,這比我能記住它們的名字更重要。

  類似的,更重要的是我能告訴你什么時候我應該使用繼承,什么時候應該使用多態,而不是僅僅記住概念。

  總體而言:用 Google 5 秒鐘可以找到答案的問題不是好問題。我最喜歡的電話面試問題是“你最喜歡的語言是哪一種?”然后接著是“它的弱點是什么?”

  然而很多面試和考試測試的都是為了看你能否很好的取代編譯器而設置的。甚至 Java 認證考試都只關注在語言的語法和編譯上的問題,而不是測試實際編程的能力和實際設計系統個能力。

  我是一個優秀的軟件工程師,我不是一個優秀的編譯器。我不能看了一段代碼后就告訴你它有問題,它不會獲取 ClassNotFoundException,現代的編譯器會告訴我問題的所在。即使不是馬上知道,但當我編譯的時候我會知道。這么說我就過于依賴 IDE?也許吧,但這不是什么壞事,因為在辦公室里我們還是要用到這些工具。

  一句話:找一個合適團隊的人選時,不要糾結于細枝末節的問題。

0
0
 
標簽:程序員 面試
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()