閱讀390 返回首頁    go 阿裏雲 go 技術社區[雲棲]


怎樣成為一個編程高手

在過去5年中,我麵試了數百名IT工程師,我認為很值得把我的麵試IT工程師的經驗同大家分享。這能夠:

●幫助人們為他們的下一個麵試準備
●幫助IT工程師找到合適的工作。
●幫助IT工程師創造更好的環境。

我們通過兩個方麵麵試IT工程師:

●技術技能:包括理論和實踐技能以及經驗等。
●非技術技能:性格,溝通技巧,是否能夠融入我們的文化環境。


第1部分中,我將主要從技能部分講述。


1、一個IT工程師應該具有的技能

我認為實用技能包含3個方麵,如圖1所示:


              圖1

這些都是很重要的:

●編碼:你必須能夠在限定時間內編寫出高質量的代碼。
●經驗:具有相關經驗表明你對該行業的熱情,並能夠在一開始就進入工作狀態。
●理論:理論知識是IT工程師的基礎,好的理論知識能夠讓你快速解決新出現的問題。


而準備工作麵試的過程是一個提升自己各種能力的絕佳機會。


1、提高你的理論知識


(1)學習C語言


    C語言是編程的基礎。因此,學習C語言能為我們了解高層概念打下堅實的基礎學習C語言的基礎知識並不會花太長時間,隻需要幾個星期的時間一般就能夠掌握。C沒有太多的抽象封裝,這就使得C語言相對簡單,和其他人一樣我學習C語言是看《C Programming Language》這本書(我們可以看譚浩強的書)。
    一旦你能夠真正理解C語言中的指針和內存管理,C就會變成一門有趣的語言,因為它將幫助我們從處理器層麵(底層硬件)來理解語言,而這正是其他大多數的高級語言所不具備的。同時了解這些概念,也將有助於你了解更高層次的語言工作。

(2)了解數據結構和算法

    雖然在網站/應用程序開發中編寫複雜的算法和數據結構比較少見,但是數據結構和算法在我們編寫複雜係統的時候將會影響我們的思維。即使你不需要編寫自己的數據結構,你也可能會在編程中使用到他,因此,了解基本的選擇是至關重要的。

    我推薦這本書,《算法導論》。由於這本書是很長,如果你沒有時間把他讀完,那也要學習其中的排序,哈希表,二叉樹,字符串匹配部分。

    一旦你很好的掌握了數據結構和算法,你會發現這些概念將隻是將你做的每件事都總結成問題而已。

2、比較編程語言

一開始,你會經常接觸多中編程語言。你可能還需要快速學習新的語言和概念。
為了加快學習,學習不同語言有助於我們了解他們的概念以及他們的相似及不同之處。
最好的辦法是在下麵每種風格的語言中學一門語言:

●底層:C語言。
●麵向對象:JAVA,C++等。
●動態語言,高層次的語言:python, ruby 等
函數式語言: Lisp, Erlang, Haskell等(之前將其翻譯為功能性語言,感謝zzljlu的糾正)

3、至少精通某一種語言和一種框架

這能夠說明:
●你既然能在一個領域成為專家,就表明你同樣能在其他領域做得一樣好。
●你理解這些語言/框架的細節可以讓你根據不同技術的優缺點來做出決定。
●你有激情去深究一個項目並且深入語言的最底層。

想要成為專家需要花一定的時間和經曆。這裏有一些建議:

●嚐試做不同的項目,這樣能夠幫助你理解編程語言。
●閱讀其他人的技術博客。 Hacker News是一個很好的技術博客。
●為開源社區做出自己的貢獻,例如在GitHub上能夠查到你的代碼。

4、提高實際編碼能力

在這裏我們在麵試時主要通過3中方法來測試工程師的編碼能力:

●你貢獻到開源社區的代碼(例如,在GitHub上)
●現場編寫一段代碼
●連續2小時編寫代碼的挑戰

    一個工程師的編碼能力的質量和速度是重要的,而這隻能來自於實踐經驗。
    另外,使用合適的語言和框架對於一個項目也是很有幫助的。例如用Python和Ruby等腳本語言可以比使用像Java、C++這類靜態語言的許多情況下更快。因為我們知道一個求職者可能在動態腳本語言方麵沒有太多經驗,所以我們麵試的時候並沒有將其作為重點。
    做一些有挑戰的編程測試可以磨練你的技能。網上可以找到了大量的資源,這也可以測試你的編程速度,從而讓你可以進一步提升你編寫代碼的速度。Google Code Jam上麵有一些不錯的題目。

5、提高您的相關技術經驗

    有一些相關工作經驗是很重要的:

●這表明你對編程有一定的激情
●你的開發經驗可以引導公司裏的其他人
●你將會在工作中一鳴驚人。

●你有能力可以探究更多的現代技術,並有一個更加全麵的視角


    你可以從你以前的公司裏或者其他項目中學到這些經驗。

6、結論
  

   當然,在技術方麵僅僅是一個硬幣的一麵。第2部分中,我將探討非技術方麵。


(翻譯並不一定完全準確,但是滿足基本的閱讀應該沒問題)

原文地址:https://stdout.heyzap.com/2012/07/25/how-to-ace-a-startup-engineering-interview-part-1/



最後更新:2017-04-02 16:48:10

  上一篇:go Android高仿UC半透明MENU菜單(示圖)
  下一篇:go 用c語言產生隨機數總結