個人編程語言經歷

Alan Perlis 說過:「一種不改變你編程的思惟方式的語言,不值得去學。」,儘管寫了這麼多年程序,用了這麼多的語言,但我自認還沒悟道編程語言怎樣改變個人思惟方式。javascript

幾天前。我需要用python來爲ledisdb寫一個client,我忽然發現,對於c++,go這樣的語言,我假設需要實現一個功能。首先想到的是問題是代碼應該怎麼寫。但是當我使用python的時候,我首先考慮的問題是在哪裏去找一個庫用來解決個人問題。可能這就是使用不一樣語言帶給個人不一樣思考方式吧。css

個人編程語言經歷沒有那麼複雜。沒用過很是多,但是事實上也夠我受的了。尤爲是在不一樣語言語法糖之間切換的時候。有種讓人崩潰的感受。html

沒準我應該升級一下個人大腦cpu,使其可以更高速的進行中斷處理。html5

c

我是從大學才開始學習編程的,相比方今的小朋友來講,可以叫作輸在了起跑線上面。java

誰叫曾經生活在山區。沒機會接觸電腦這玩意。node

個人第一門編程語言是c,不一樣於很是多童鞋使用的譚浩強神書,我用的是周純傑的<<c語言程序設計>>。不知道每一年有多少同窗受到過它的摧殘,固然還有那哥們蹩腳的普通話。python

在大學裏面。很是多同窗的c的畢業設計都是我幫其完畢,但我始終認爲本身仍然是個半吊子,除了c的基礎略微強一點以外。很是多方面譬如操做系統,算法等全然不會。mysql

(現在隨着工做年限的添加讓我愈加懊悔,當初怎麼就不略微學點這些知識,尤爲是編譯原理。)android

我差點兒沒怎麼用c開發過項目,僅僅在tencent可憐的維護過別人的c項目。但至少能看懂c代碼,這就夠了。nginx

因爲大多數時候,我用的是c++,而不是c來解決個人問題。

c++

c++是我工做使用的第一門語言,也是我使用時間最長的一門語言,都七年之癢了。只是仍是有點不離不棄的。

曾經上學的時候有一句口頭禪,叫學好c++,走遍天下都不怕。但是有幾我的能把它學好的?因此千萬別說本身精通c++,那會被人歧視的。

我使用c++可以分爲三個階段:

類c階段

這個階段主要是我第一份工做的時候。那時候才畢業,c的烙印很是深,面向對象除了有個概念,真正是啥全然不知道。

因此最喜歡的方式仍是寫着一堆函數來解決這個問題,當初VIA身邊那幫c++的牛人竟然能忍受我這樣的代碼,真佩服他們。

面向對象階段

後來去了第二家公司linekong,開始作遊戲。才開始真正意義上的用c++寫代碼了。

記得最開始去第一家公司面試的時候。被問了啥是面向對象,當時不假思索的答了繼承,多態和封裝。

啥叫封裝?整一個class,把該包的都包了。一個同事曾告訴我。他見過有幾萬行代碼的class,看來我這個幾千行的過小兒科了。

啥叫繼承?先來一個父類,乾脆叫bird,有一個fly方法,再來一個子類,叫duck吧,繼承了bird,只是duck會fly嗎?一個父類不夠,再來一個。搞個多重繼承。什麼?出現了菱形繼承,那乾脆在來一個virtual繼承得了。

啥叫多態?不就是virtual function,而後父類指針能在執行時依據實際狀況調用對應的子類實現。那c++的多態是怎麼實現的?看看<<深度探索c++對象模型>>不便可了。

這段時間,可以算是我寫c++代碼最多的時候。都快寫到吐了。尤爲還要忍受那龜速的編譯。

咱們竟然都實現了直接經過彙編改c++的虛表,使其調用本身的函數這樣的變態的東西。在那時候我就得出結論,假設不想早死,儘可能別用這個東西寫代碼。但是到現在我都在不停的慢性自殺。

現代C++階段

不知道從何時開始,我忽然認爲我應該來點modern c++的編寫方式了,c++0x都出了,還不玩一下就晚了。固然新特性那麼多,不可能全部都拿來用的,Bjarne Stroustrup貌似都說過,c++0x應該算是還有一門語言了。

因而哥就走上了僞modern c++之路,class仍是需要的,否則數據怎麼封裝。繼承嗎,比重減輕吧。最好採用面向接口的編程方式。而多態,能不用就不用吧,反而認爲bing + function的方式實現的delegate模型反而更方便,沒準也更酷喲。

shared_ptr,weak_ptr是需要用的了,c++沒有gc,因此一套好的內存管理方式是不可缺乏的,每次new以後還要記得delete也比較煩,最嚴重的是可能忘記那就內存泄露了。

因而,我就自認爲我進化了,最典型的樣例就是我寫的高性能網絡庫libtnet,感受很是modern了。

lua

最開始知道lua。是雲風那本編程感悟的書,當時但是菊花一緊。認爲這東西是啥。爲何能跟c結合到一塊兒使用?

後來本身開發遊戲了。才發現lua真的是一門很是強大的語言,短小精悍。嵌入簡單,性能超強。全然是做爲遊戲腳本語言開發的不二人選。

只是我最開始使用lua的經歷不怎麼happy。最開始就是接手了一個c++與lua的粘合層庫,關於這個庫的傳說,見這裏Lua 不是 C++。後來,在踩了無數個坑,填了無數個坑以後,我最終弄得相對穩定了。

貌似現在我曾經的同事還在使用,只是正如我在lua c函數註冊器中說明的那樣。對於語言的交互,簡單一點纔好。現在曾經作的遊戲已經開源,見這裏。那個傳說中的蛋疼粘合層也見了世面。固然,我可不會告訴大家好多搓代碼是我寫的。

後來,在現在的公司。因爲項目的需要,咱們急需解決python的很是多性能大坑問題,因而我開始推廣使用openresty,一個用lua包裹的nginx,用了以後。腰不痛了,腿不痛了。性能妥妥的。

因爲lua,我第一次嚐到了在代碼裏面直接寫配置的便捷,用一個table搞定,相比起來,c++處理ini。json這些的弱爆了。另外,動態語言的熱更新機制使其代碼升級異常方便,只是你得很是當心lua的閉包,沒準你又一次載入了代碼執行仍是老樣子。

lua是一個動態語言,因此不用咱們管內存釋放問題。但是仍然可能會有引用泄露。在開發遊戲的時候,爲了解決咱們程序lua內存泄露的問題。我曾經幹過直接從_G遞歸遍歷,掃描整個lua數據的事情。相比在c++使用valgrind這些程序的工具。lua配套的東西仍是過小兒科了。

lua的調試也是一個大頭問題,我曾今寫過幾個lua的調試器,好比這個,甚至都支持了類似gdb那樣ctrl+c以後動態的設置斷點。但是仍然沒認爲比gdb方便。因此多數時候。我都是寫log爲主。

python

儘管小時候吃過很是多蛇,但是蟒蛇但是歷來沒吃過的,現在看來python味道還不錯。

我是來了kingsoft以後才開始正式使用python的。

對於爲啥使用python。我曾跟拉我進來的技術老大討論過,他直接就說,開發高速,上手easy。

python開發的高速很是大程度是創建在豐富的第三方庫上面的,咱們也使用了很是多庫,譬如tornado,gevent,django等,但是正如我最開始說的,因爲咱們有太多的選擇。面對一個問題的時候。每每考慮的是怎樣選擇一個庫,而不是本身怎樣實現,這事實上在某種程度上面使得很是多童鞋知其然而不知其因此然。這點,lua多是還有一個極端,lua的定位在於嵌入式和高性能,因此天然地,你得本身動手造輪子(固然,現在也有很是多好的第三方庫了),儘管有時候寫起來很是不方便,但是至少本身很是清楚程序怎麼跑的。

固然。我絕對沒有貶低python的意思。我很是喜歡這門語言,用它來開發了很是多東西。同一時候也知道很是多公司使用python構建了很是多大型穩定的系統(咱們的產品應該也算吧)。

僅僅是現在我愈加認爲,看起來簡單的語言,假設沒有紮實的基本功底,寫出來的東西也很是爛。而python,偏偏給人放了一個很是大的煙霧彈,你覺得它有多easy,事實上它是在玩你。

go

好了,最終開始說go了,let's go!

。!

我使用go的歷史不長,可能也就一年多,但是它現在全然成了我最愛的語言。go具備了python開發的迅速。同一時候也有着c執行的性能。

(固然。仍是有差距的!)

網上有太多的語言之爭。包含go,有人恨,有人愛。

但蘿蔔白菜,各有所愛,對於我來講,能幫我解決這個問題。讓我用着舒服的語言就是好語言。

go很是適用於服務端程序開發。比起用c++開發,我陡然認爲有一種很是幸福的感受,譬如對於網絡編程,在c++裏面,我需要本身寫epoll的事件處理,而且這樣的異步的機制全然切分了整個邏輯。使得代碼不怎麼好寫。我在開發libtnet的時候感觸尤爲深入。但是在go裏面。因爲天生coroutine的支持,使得異步代碼同步化了,很是利於代碼的編寫。

現在個人主要在項目中推進go的使用,咱們已經用go搭建了一個高性能的推送server,興許還有幾個系統會上線,而且開發的進度並不比使用python差,另外也很是穩定,這讓我對go的將來充滿了期待。

我也用go寫了很是多的開源程序,也算是拿的出手了。譬如:

  • ledisdb:一個基於leveldb的提供類似redis高級數據結果的高性能NoSQL。真挺繞口的。簡單點就是一個高性能NoSQL。
  • Mixer:一個mysql-proxy,現在支持通用的mysql命令代理,讀寫分離。以及本身主動主備切換。興許將要參考vitess支持分區,爲此一直在惡補編譯原理的知識。

  • go-log:一個類似python log模塊的東西,支持多種handler,以及不一樣的log級別。

還有一些,可以參考個人github,譬如moonmq(一個高性能push模型的消息server),polaris(一個類似tornado的restful web框架)。因爲go,我開始熱衷於開源了,而且認識了很是多的好基友。這算得上一個很是大的收穫吧。

其餘

好了,說完了上面個人長時間使用語言(至少一年以上),我也用了很是多其餘的語言。現在儘管使用時間比較短,但不排除興許會長久使用。

Objective-C

因爲我家最終有了蘋果三件套。因此決定開發app了,首要的任務就是得學會使用Objective-C。我認可這真是一門奇葩的語言,假設沒有xcode的本身主動補齊,我真不知道寫起來是神馬樣的感受。

而且第一次見到了一門推薦寫函數名,變量名就像寫文章的語言。至少我寫c++,go這些的一個函數名字不會寫成一個句子。

我現在在自學iOS的開發。慢慢在整出點東西,畢竟答應給老婆的iphone作點啥的。興許乾脆就寫一個《小白學iOS》系列blog吧(假設我有精力!),反正對於iOS,我真是一個小白。

java

好吧。我也在android上面寫過程序。build到個人S3上面去過,對於java,個人興趣真不大,貌似本身還買過兩本《java編程思想》,那時候腦殼鐵定秀逗了。

但是不得不認可。java在server領域具備很是強的優點,很是多很是多的大企業採用java做爲其server的編程語言。典型的就是淘寶,據傳杭州的很是多軟件公司都不用java的。你用java就等於給淘寶培養人才了。(只是我發現他們很是多基礎組件譬如TFS這些的但是c++的喲!

java是門好語言,僅僅是我我的不怎麼喜歡,可能我就是過小衆了。僅僅對c語言體系的感興趣。因此很是多公司我去不了,哈哈。

erlang

受《計算機程序的構造與解釋》影像,我一直想學一門函數式編程語言。最開始玩的是elisp。誰叫曾經我是個深度的emacser(後來竟然變成了一個vimer,再後來就是sublimer,這世界真奇妙)。

後來仍是決定好好學習一下erlang,也第一次領略到了函數式編程的魅力。本身惟一用erlang開發過的東西就是bt下載的client,只是後來發現用處不大就沒繼續進行下去了。

(好吧,我認可當時想下島國的東西)

學習erlang以後最大的優點在於現在能看懂很是多優秀的erlang項目。譬如我在作moonmq以及公司的推送服務的時候。研究了rabbitmq,這玩意但是用erlang寫的,而我竟然還能看懂,太佩服我了。

還有麼?

想一想本身還學了哪些語言?貌似沒了。不知道awk算不算一門。

看來我會得語言真很少。

興許可能會學的

逆水行舟。不進則退。計算機發展這麼迅速,我也需要不斷提高本身,當中學習一門新的語言多是一個很是好的提高途徑。至少能爲我打開一扇門。譬如,假設掌握了日文。就能更好的理解島國片的精髓。

我不會日文,因此仍是個門外漢。

ruby

ruby是一門很是優雅的語言,很是多大神級別的人物推薦,github貌似也是ruby的幕後推手。

因爲ROR的興起,使得ruby更加流行。看來。一個好的框架庫對於語言的推廣幫助真挺大的。

相比而言。python有django,tornado等,光選擇適合本身的就得費點時間。

ruby可以算是一門全然面向對象的語言,連number這樣的的都是對象,而且看了幾本Matz的書。認爲這哥們挺不錯的。對技術的感悟很是深。因此更讓我有興趣去了解ruby了。

javascript

做爲一個技術人員。沒一個本身的我的網站怎麼行。個人阿里雲都是包年買的(明年仍是買國外的vps吧),本身的我的網站還無影無蹤。

好吧。我全然不會javscript,看着css就頭疼,沒準我從一開始想本身寫代碼搭建我的網站這個步子就邁的太大。扯着蛋了。假設先用一個開源的框架搭建起來,再本身調整無缺,可能會更好。

但無論怎樣,javascript這門語言仍是要學習瞭解的,尤爲是之後隨着html5的流行。加之node.js瘋狂流行,這門語言也會愈發的發光發熱。

C#

事實上原本不許備跟ms的東西扯上關係的,儘管vs是一個很是強大的開發工具,但是我自從換成mac以後就不許備再遷回windows。

僅僅是c#我多是必需要學會的,因爲那個坑爹的unity3d,儘管unity3d也提供了其餘語言的支持(譬如僞javascript),但是大量的開發人員仍是選用了c#,至少在中國我問過很是多朋友,都妥妥的用c#,既然這樣。我也僅僅能考慮學習使用了。

至於我爲啥蛋疼的想玩unity3d,畢竟幹了很是多年遊戲開發,一直有本身弄一個簡單小遊戲的夢想,仍是妥妥的unity3d吧。

本身造一個?

語言千千萬,我不可能全部學會的,而且之後沒準因爲業務的需要,沒準都會本身造一門語言,也就是DSL。

只是這個貌似還離我比較遙遠。編譯原理的東西太差了(說多了都是淚呀)。本身寫詞法分析還成,後面就菜了。這也是Mixer一直沒啥進展的緣由。只是已經買了龍書,在學習屠龍祕籍,但願成爲頂尖高手吧。

後記

寫了這麼多,看來隨着年歲的添加。愈來愈囉嗦了。

不是有一句古話:吾生也有涯,而知也無涯 。以有涯隨無涯,殆已。只是不停地追逐不也是樂趣一件?

僅僅是,現在我首先要作的就是向我老婆申請資金升級電腦了吧!

相關文章
相關標籤/搜索