幾年前 Reddit 上有個關於招聘的笑話:程序員
面試官問:你用過 Python 或者 Django 嗎?
答:我三週前去過動物園,這個算嗎?
面試官:你被僱傭了。面試
一週後,這位應聘者用 Django 給他們的產品寫了一個在線論壇。
英文的玩笑,用中文看有點不太容易懂。它的意思就是一個關於 Python(蟒蛇)經驗只有三週前去過一次動物園的程序員,只要他足夠的好,他也能夠用一週的時間,基於 Python/Django 完成一個在線論壇。數據庫
常常在網上看到各類標題爲「Java程序員」、「PHP程序員」、「C/C++程序員」的招聘帖子,但我感受這種招聘方式,很難找到好的人才。語言只是一種工具,對一個聰明的程序員來講,用沒用過什麼工具主要是由他原來的工做須要決定,並不能表明他所有的技能。django
另外,一個軟件產品每每涉及不少方面的知識,好比網絡、數據庫、Cache、編譯環境工具等。若是這些必要基礎知識不足,很難很好的獨立完成一個產品的某個部分。後端
另外一方面,一我的的聰明程度、對新知識的好奇心、自我驅動意識、爲問題找到最佳解決方案的決心,纔是他能不能成爲一個好程序員的關鍵。舉個例子,我在擔任 JPush CTO 的時候,有位同事原本是服務器端以 C 語言爲主作開發的,徹底沒有過 iOS 開發經驗,但他表現出對 iOS 開發頗有興趣,而且在作服務器端開發時,表現出良好的學習能力,後來我把他調到 iOS 組,負責 iOS SDK 和 APNs 相關的工做,結果只花了幾個星期,iOS SDK 的穩定性大幅提高,解決了多個致命問題。服務器
我常常在團隊裏強調,不要把本身定位爲某種語言的程序員,說本身是 Java 程序員,C 程序員,Python 程序員等等。一方面會限制本身的發展,一方面對團隊總體的能力提高也不利。幾乎全部的語言都有它本身的適用場景,在合適的地方用合適的語言,才能極大的提高生產效率。網絡
正確的作法是,首先要有良好的基礎知識,深入的掌握2~3門語言,而後適用於不一樣場景的語言要了解概念。基礎知識包括各類計算機原理、數據方面的知識,在學校沒認真學的,如今有時間也要補充。語言方面好比掌握了 C/Java,那 C++/Python/Bash/Javascript/CSS等均可以瞭解下概念,至少要理解在一個完整的產品鏈裏,它們分別適用於哪一個環節。工具
標題用「請不要說本身是 Java 程序員」沒有貶低 Java 程序員的意思,Java 是目前被採用得最多的語言,主要用 Java 的程序員裏,也是有大量牛人。另外,一樣的,也不要說本身是 C 程序員、Python 程序員。學習
之因此用 Java 做爲標題,一是如今以 Java 語言爲主的工做很是之多,另外在學校裏就以學習 Java 爲主的人也愈來愈多。但我發現,從學校就以學習 Java 這種高級語言爲主的人,不少基礎知識比較薄弱。高級語言掩蓋了太多細節,提升了生產力,但在學習階段,卻不利於基礎知識累積。ip
軟件行業是一個很是強調人的價值的行業,價值就體如今有效的推進產品前進,而語言只是實現這個價值的工具。
做者
張虎
weibo: @Tiger_張虎, 雲巴 (yunba.io) 創始人,yunba.io 雲後端服務。 JPush 創始人,原CTO。 Oracle VM 創始團隊成員。