回答者卡特·佩基(Carter Page),谷歌(Google)工程經(jīng)理
我的答案很短,但是由于這是一個需要站隊的討論,所以我先要介紹一些背景。
我聘用過許多軟件工程師,他們身上最有價值的技能就是學習并迅速掌握一門編程語言的能力。
幾年前,有一家境外公司為我們提供Java程序,他們的質(zhì)量一直不太穩(wěn)定。我可以通過翻閱簡歷來打造一個遠程團隊,但是我沒法和他們進行面試,因為他們不會說英語。不過這種限制倒是帶來了一個有趣的實驗。
這些程序員的簡歷看起來很不錯,都有著幾年的工作經(jīng)歷。但是,他們寫的代碼依然有bug,不順暢,結(jié)構(gòu)組織也不好。作為一種實驗,我開始聘用會 C++語言的程序員。他們之中有的人不會Java,但是我愿意給他們一周的帶薪學習時間。在同事的幫助下,他們學習了這種新的語言和習慣用法,并變得和我 們一流的Java程序員一樣優(yōu)秀。
所以我的簡短的回答就是:學習C語言或C++
你可能永遠不會在工作中用到它,但是卻可以因此受益終身。那些需要頂級程序員來解決的大難題或多或少都會涉及到一些基礎(chǔ)的C語言。
用C語言開發(fā)的有:
用ANSI C開發(fā)的Java虛擬機
用C語言開發(fā)的Linux(有些還包括其他語言,但是C語言最主要)
用C語言開發(fā)的Python
用C語言開發(fā)的Mac OS X kernel
用C語言和C++開發(fā)的Windows
用C語言和C++開發(fā)的甲骨文(Oracle)數(shù)據(jù)庫
用于連接互聯(lián)網(wǎng)的思科路由器(Cisco Router)也是用C語言開發(fā)的
隨便說出一個基礎(chǔ)的、復雜的和性能關(guān)鍵的程序,那都是在C語言的基礎(chǔ)上加上少數(shù)其他編程語言開發(fā)出來的。
掌握C語言會讓你成為一個更優(yōu)秀的Java程序員。你會知道JVM什么時候用堆棧、什么時候用堆,以及那都意味著什么。你會對無用單元收集更敏感。你會對對象與原語的相對性能成本有著更好的認識。
掌握C++會讓你成為一個更優(yōu)秀的Python程序員。Python的class機制主要是通過C++建立的。想要維護好它,你必須學會寫出干凈整齊的代碼。你會學會對全局變量多加小心。
掌握C語言會讓你成為一個更優(yōu)秀的Objective-C程序員。你會知道如何管理refcount以及哪些代碼應(yīng)該“擁有”對象。你會能夠避免存儲滲漏。
那么,C語言和C++哪個更好?我稍微傾向于C++一點,因為雖然兩者非常相似,但是通過C++你還可以獲得面向?qū)ο缶幊蹋╫bject- oriented programming)這個額外收獲。即使你決定只用函數(shù)式語言編程,學習如何從面對對象的角度思考,仍然可以讓你掌握對制作和維護大型項目至關(guān)重要的 組織模式。
所以,或許在供求不太正常的較短時期里,你的時薪會相對較低,但是一旦你掌握了C語言,你就能夠?qū)W會其他各種編程語言。因為如果說這個行業(yè)有什么長久不變的東西的話,那就是今天的熱門技能在幾年后就會變成罕見的獨特存在。學習技能背后的技能,你會走得更遠更好。
必須說明的是:
我從來沒說過你應(yīng)該靠C語言編程來生存,或者你應(yīng)該只學習C語言,或者用C語言編程要比用Foobar更賺錢??偟膩碚f,除非有非常充足的原因,你甚至不應(yīng)該用C語言開發(fā)自己的應(yīng)用。
但是你仍然應(yīng)該學習C語言。因為其他的編程語言都是用它來理解物理計算機的。你可以在其他程序員還在撓頭的時候瀟灑地邁著勝者的步伐。這會讓你從長期而言更“有水平”,賺更多的錢。
如果你想成為最優(yōu)秀、賺的最多的F1方程式車手,那么就去學習一下引擎知識。不是因為這是你的工作,而是因為這會讓你把工作做得更好。而且,隨著車子不斷變化演進,你也就能識別出其中的不同之處。
轉(zhuǎn)自:福布斯中文網(wǎng)
很多學員問我不知道該學什么編程好,現(xiàn)在出了一份程序員調(diào)查,新手可以參考下
小風推薦大學生學Java編程語言,
java是目前最流行的編程語言,
而且最熱門的安卓技術(shù)、ios都是建立在java編程語言基礎(chǔ)上的,
java容易學,就業(yè)廣,是大學生理想的選擇。
最有前途:C++
最好賺錢:PHP 開發(fā)建站,基本上后臺使用的都是這個,需求量大。
需求量高:Java 容易就業(yè)