眼看就要開學,恭喜各位成為計科中的一員。相信很多人開學之後將會有很長一段迷茫期,將對編程這件事情將變得越來越陌生。這是很正常的現象,更重要的是,你不是一個人。

我個人是比較看重人生的第一門編程語言的,因為他的思想會潛移默化你對編程的定義。我的腦海裡面無時無刻不在思考著c語言的編程,比如,看到某一個東西想要去實現,第一件事情想著就是c語言的話,會怎麼實現。

所以,這裡總會有很多爭議的問題,比如學python先還是學c語言先,學java還是學c++等等。知乎大把大把這樣的問題,至今為止都沒有一個正確的答案。畢竟不同的人都在不同的語言中獲得不一樣的利弊。沒錯,小孩才分對錯,我們只看利弊。

回到主題,為啥我那麼看中第一門編程語言。第一門編程語言會潛移默化你什麼?我自己親身經歷過的,用c語言編程很久了,突然間去接觸java一下子適應不過來,咦,面向對象什麼鬼,不是跟面向過程一毛一樣的嗎,或者乾脆寫成static函數來拒絕面向對象編程。這是常常的事情。所以為啥很多時候回顧以前的代碼發現寫的很爛很爛,最關鍵的一段經歷就是自己終於摸索到了這門語言的正確編程思想,而不是混淆以前學過計算機語言的編程思想。

不少人很喜歡用一句話來告訴各位新手說,編程語言只是工具,他不影響你學習計算機。或編程語言只是用來實現你的想法的東西,沒必要看的太重。我不喜歡這樣的回答,因為他這樣的回答相當於沒有回答。編程語言能不能實現你的想法我就不槓,但是編程語言的編程思想已經潛移默化你了。

我就從其他方面來為大家介紹一下第一門編程語言帶給你對編程認識的影響。

偶像的影響

我這裡的偶像並不是唱歌的明星而是編程界的明星。

如果你是一個不懂編程的人,對於計算機界你可能就認識兩個人比爾蓋茨,喬布斯,在你的眼裡編程就是一個成為億萬富翁的途徑。

如果你是一個接觸c語言比較多的人,你會認識丹尼斯,林納斯,理查德等等開源界大牛,喜歡上google,紅帽這些開源公司,更有可能提前接觸到類似:

  1. Talk is cheap,Show me the code.
  2. premature optimization is the root of all evil
  3. Programming is not a science. Programming is a craft.
  4. C is quirky, flawed, and an enormous success.

等等這些經典語錄,甚至很早很早之前就已經意識到了墨菲定律,八二原則等等概念,這時候你的觀念已經改變成為編程是能夠改變世界的一個事情。

如果你是一個常駐於c++編程的人,你會認識另外一羣人,Bjarne Stroustrup,stepanov,Scott,Andrei Alexandrescu,等等,這羣人思想超前,愣是把c++改成了一個烏託邦,裡面形形色色的編程思想和奇淫怪技都常駐於此,甚至有一些想法無比超前讓人無法接受的觀念,如果沒有對編程持有絕對的熱情的人,你會感覺自己打開了一個潘多拉盒子,這時候你的思想更多改變為編程是件痛苦並快樂著的不斷更近學習和創造的過程。

如果你是一個熱衷於java,python,javascript的人,就說我自己的感覺,這些圈子裡面公司和框架比圈子內的名人更深得人心吧。我就是在這一瞬間我也完全記不起java之父和python之父的名稱。所以你的思想可能變成如何更快更輕鬆實現項目。

我很在意這個,這個重要性就相當於對於作家寫一個作品是為了取得億萬財富,還是為了自娛自樂,還是諾貝爾獎,然後名流千史。

瓶頸

無論任何計算機語言他都有他的瓶頸,等你學到一定程度之後,做到了一定規模的程序之後,瓶頸就會慢慢變得十分突出,就是c/c++的瓶頸可能是跨平臺,重構,java和python的瓶頸可能是速度。這個時候,互補是最好的辦法,很多項目都有這數門語言互補,比如java和python犧牲一些跨平臺使用c++提高他的速度,c/c++寫一個腳本語言運行機制來完善跨平臺。這些都是許多優秀項目的做法。

然而,對你來說,如果第一門語言實屬上層或者冷門的語言,你可能要往下走,或者重新學一門新的語言。如果第一門語言為較底層的語言,你可能輕鬆松一個星期就能學會一門上層較語言。這兩條路相當不一樣,第一條路,特別是上面我所講的潛移默化了的編程思想,你可能需要很長一段時間才能適應較底層語言的複雜繁瑣的寫法。第二條路,可能把底層語言的一些編寫習慣帶上去,編寫的程序不倫不類,不過這並不影響程序運行,但可能影響源代碼的查看。

未來的職業導向

其實不用我說,大家隨便搜一搜都知道中國現在的編程所需要的市場。你所選的第一門語言決定你的思維,間接也決定你是否符合市場的潮流。很多計算機科學的孩子已經放棄it界了,或者選擇考研,考非計算機專業。這樣的人大把大把存在。再或者自己因為代碼寫的不好,去選擇當了產品經理或者當一名軟體測試,資料庫管理員等等。不在奮鬥於寫代碼的前線,默默在後面當一名輔助。

如果你一開始就培養出一股對計算機十分渴望去探索的精神,將來你也會默默無聞繼續去探索計算機的世界,關注最新的計算機界新聞,這裡面很多人當了計算機演算法研究,譯者,當了培訓機構的老師,大學教授等等。

如果你創造慾望無窮大,就是扎克伯格那樣,無時無刻不在拉著自己的黑板到處花思維圖,那你很有可能成為極客,計算機界一名新星。

如果你學習計算機之後,根本不瞭解編程,根本不想碰代碼,一點做項目的熱情也沒有。這樣子你離開計算機的幾率非常大。

所以為何我如此在意第一門語言,因為這是一個能夠看到你未來人生的一個選項。

圈子

語文老師看作文會看文本結構,段落,文章內容。作家看作文看文章的內容,文章風格,文章內容的聯想。詩人看作文甚至要求一個詞一個字都會斟酌。

動物學家研究動物的喫喝拉撒,行為習慣。解剖動物的會看到動物骨骼,動物內臟等等。基因學家更專註動物的dna,內部化學成分的研究。

我為什麼要說這個,因為這就是圈子,對於同樣是文字界,生物界裡面的,為何不同的人對文章有著不一樣的行為?對生物的研究有著不一樣的行為?你可以說,因為他們的追求不一樣。

沒錯,計算機寫代碼也是如此。

有些c語言的圈子會要求代碼生成的位元組碼都裡面不能有一個位元組是無用的,甚至一個tab一個空格都要打得頭破血流,因為這影響了源代碼的大小。

而c++圈子裡面追求一種完美的抽象,最完美的是希望所有東西都交給編譯器去生成,無情地壓榨編譯器的性能。

在java圈子裡面更多是希望項目能夠有著完美的設計,希望十幾種設計都能夠納入代碼當中,甚至會為正方形繼承矩形還是矩形繼承正方形大打出手。

這就是圈子,你接受不一樣的語言,你會感受到不一樣的圈子,不管是網路上面的教程,還是從亞馬遜噹噹買回來的書籍,你都能感受到他們對自己的重心和要求都不一樣。所以這也是為啥會有那麼多鄙視鏈呀,語言之間的鬥爭。java的會覺得c圈子裡面討論tab和空格是毫無意義的,c圈子固然覺得java那傻不垃圾的類繼承是那麼愚蠢。

所以每當有人在爭論tab和空格,有人從中冒出一句,爭論tab和空格沒有意義,我就知道他不是圈子裡面的,被罵也是活該吧。

圈子對你有多大的影響,取決於你有多麼參與這個圈子,而你選擇哪一門語言也決定你該去哪個圈子。

學習的路線

這個是關乎時間耗費的,學習不同語言走的路線固然不同,而我更傾向於討論路線的多少,在我看來c的路是最多的,深入到計算機硬體可以走,高到web前端都可以走。所以為啥我在一個回答中聲稱c是中流砥柱的原因。其他的我就不說了大家百度一下就知道了。

我最想講講的是時間的耗費,一名標準的計算機科學的學生必然要走計算機科學,數據結構,資料庫原理,計算機操作系統,網路編程這五個點。這五個點都依賴著c語言(為何這樣說,因為用c來描述的經典教材是最多的,比如演算法導論,計算機科學導論,unix網路編程,tcp/ip等等作品),也就是說一名合格的計算機科學的孩子必然要經過c語言。

如果你第一門語言為java,或許你的路線是這樣的java se->oracle->spring->...->c->五個點,據我所知,大部分java的孩子都是在工作期間去學習c語言之後的路線。

如果你第一門選擇python,或許你的路線是這樣的python->人工智慧->爬蟲->c++ ->c->五個點。

如果你第一門選擇c++,或許你的路線是這樣的c++ -> c++ -> c++ ->c->五個點。

換句有意思的話來說,你可能要比學c的孩子花費更多時間。那c的孩子就很爽?時間不用耗費,不是的不是的,c的孩子可能比你更慢,因為他們還會自主去學習編譯原理,計算機圖形學,彙編語言,甚至去了解計算機的歷史去了。

你可以反駁我說,不需要學c語言,我直接越過五個點不學,老子也能夠行走江湖。那你完全可以不用看我的寫的文章,因為對你來說我寫的每一個字都是屎。

對語言的感覺

這種感覺很懸,我打個例子,當你第一次讀李清照的詞的時候,你會只是覺得句式很美,詞很悲傷,當你瞭解李清照背後的心酸故事之後,你會感覺每一個詞都展示出來的畫面厲歷在目,有不堪入眼的悲傷,也有心滿意足的幸福。

當你相當瞭解一門計算機語言之後的背後故事,比如c語言背後是開源運動的起伏,標準之間的鬥爭,java背後是sun公司和微軟公司的版權鬥爭,以及sun破產被oracle納入囊中的無可奈何。c++背後的思想變革,以及那一段在編譯器期間錯誤提示輸出階乘的代碼轟動了整個c++圈子的歷史只要你知道的足夠的多,你對該門語言的瞭解也變得更加深刻。

換句來說,你選擇哪一門語言,都將成為該語言背後歷史的一部分。

最後

無論你選擇哪一門語言,我更多希望你們記住這門語言並不是工具,他是計算機發展這麼多年來的歷史結晶,他裡面潛移默化的思想,現在市場的狀況,圈子內的氛圍,以及背後的形形色色的故事都足於使得每一個不同語言之間的開發者是如此不同和有趣,甚至可能是你離開it界的理由。如果還是有人跟你說,這只是一個斧頭和電鋸的區別,你就告訴他這是唐詩和宋詞的區別。

end...


推薦閱讀:
查看原文 >>
相關文章