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


十八年的語言分支

當每個人走過一段路以後,都會有意無意的去回首一下自己的往事,這些往事有讓你印象深刻的部分、也有讓你一帶而過的部分、有值得深思的問題、也有自己後悔過的問題。雖然這些讓你覺得隻是你生活中的一段插曲,但是你可能沒意識到這些年的經驗本身來說就是一件“瑰寶”,不如分享出來,讓很多人得到寶貴的經驗,讓更多的人感受到你當時的心情。

就像我們以前提到的,大多的程序員在工作中,語言的分支選擇有很多,每個人在接觸另一種語言的理由也各有不同。那麼這次51CTO的記者很榮幸的邀請到了一位擁有十八年開發經驗的資深開發者廣聯科技(WideUnion)的開發部經理劉昱劉老師,同時也是EntityModelStudio產品的核心開發人員兼主設計師。相信他這些年的開發經驗一定會讓你有所收獲,那麼下麵的時間就讓我們一起來看他這十八年的語言分支。

菜鳥入“江湖”

也許很多人最開始接觸代碼是在大學裏,但是我認為那不算是真正的開發,而我真正的所謂第一次也不是在大學裏。我最早接觸代碼時我還是一個小學生,是和我姐一起買了一本關於Basic編程的書。由於當時沒有計算機可以上機練習,所以隻是看書而已,應該說沒有什麼收獲。但是從時間上來說,那應該是第一次接觸代碼。

以後在大學裏確實學習了編程,但是應該說我不是一個好學生,並且我的專業也不是與計算機相關的,所以我沒有學的什麼編程的東西,相反對編程在心理上還是有點畏懼的。所以這兩次所謂的第一次對我而言應該沒有留下什麼正能量的東西。

後來工作以後從1994年起開始有機會使用電腦了,第一門使用的語言是FoxBase。應該說這是我真正意義上開始第一次接觸代碼。這次的效果非常好,是我開發生涯的起點。單就語言而言,我覺得Foxbase還是比較容易上手的,而且其中一些做法至今對我來說還有很好的參考價值。

編程語言的分支

在工作中我學過的語言可以說還是有一些的,按照先後順序大概是FoxBase,C,C++,ASM,FoxPro,VC,VB,C#,少量的接觸過java,cobol,KDE。很多人也許會覺得學這麼多語言現實嗎?其實是現實的,我們一起來看看這些稱得上編程語言分支的情況:

1.Foxbase:這是第一次選擇,也是我上述提到的真正意義上開始第一次接觸的代碼,事實上應該算得上是被選擇,因為公司正在用這個東西,我沒得選。學習使用Foxbase是我開發生涯的起點。我最初的編碼經驗就是從這裏開始積累的,並且Foxbase中的一些內容至今對我來講還是有影響的。比如Foxbase中一些命令的設計直到現在依然對我所開發Entity Model Studio這個產品在思想上有參考價值。

2.C/C++/ASM(包括BC++和VC++):C/C++/ASM的學習是我開發能力和經驗真正意義上積累和成長的一個階段。為了描述方便我把這些語言統稱為C係語言。以後我成功轉型為程序員就是VC的原因,這是C++編譯器中的一個。最初選擇C語言的理由應該說體現了我當時稚嫩或者甚至幼稚的一麵。我沒有從實用角度,也沒有從自己實際的能力從發,而僅僅是聽說C語言難學,為了證明自己很強很聰明,於是就選擇了C語言。當時的我剛剛“成功掌握”Foxbase,所以正是氣盛的時候,想法確實有點不太理性。雖然從後來的實際結果來看這個選擇是對的,但是做出這個選擇的過程和理由實在沒有什麼可取之處。另外一個選擇C係的原因是當時存在一個說法就是所謂的高級語言和低級語言之說。而C係語言按照我老師的說法是屬於所謂的“中級”語言,言下之意是什麼都能幹。在自己的學習中也確實體會到是如此。比如C係可以直接嵌入ASM做最底層的控製,也可以使用ODBC開發MIS,雖然界麵做的慢一點,但不管怎麼說算是可以做了,同樣能做到這些事情的語言我當時確實沒有遇到。

在選擇C++時先後有兩次選擇,第一次是Borland的BC++3.1,第二次是後來微軟的VC++。C++的使用是到目前為止收獲最大的,編碼學習投入最多的階段,我對Borland公司至今仍有一種不舍的情感。選擇BC++的原因是兩個,第一個是想繼續深入為今後轉型程序員做準備。因為C++是很難學的,如果我掌握了C++那麼軟件公司聘用我的可能會高一些。應該說這個想法比之前學C語言的動機成熟些了也現實了一些。

另一個選擇BC++的理由是當時能夠獲得的資料都是BC++的,比如書和軟件。所以想學其他的編譯器沒有可能,隻能選BC++,很幸運BC++沒有選錯。這裏需要注意當時是上世紀的90年代中期,互聯網沒有那麼普及,谘詢的獲得非常困難,軟件下載遠遠沒有現在方便,都是需要郵購盜版軟件的。所以對我來說各類出版物是學習的主要途徑,市麵上流行什麼出版物,基本上我就隻能學什麼了,沒有選擇的可能。

後來學習使用VC++(這裏語言,編譯器和開發工具混稱了)的原因是大勢所趨了,因為微軟的Windows操作係統來了,DOS開發很快就沒有市場了。當時最初的選擇還是Borland的產品,是Turbo C++ 3.0 For Win。我的第一個Windows程序就是用這個編譯器開發的。但是很快就放棄了,我最終決定投入微軟的陣營,但是我對Borland的感情依舊,嗬嗬。

轉向微軟的理由是以下幾個:

a.如果PC的操作係統的是微軟的,那麼開發工具為什麼不用微軟的?這個根本不用多想。是一家人就不要用兩家的東西。事實上微軟在此後的表現一直很爭氣,所以我很幸運沒有選錯。當然我也很希望看到Borland可以再次崛起。

b.我家裏買了電腦,機器的配置允許我可以安裝類似Visual Studio這樣的軟件了

c.盜版軟件開始出現了,購買盜版軟件的光盤很容易,所以搞到軟件完全成為可能

d.出版物開始基本上和流行節拍吻合,雖然還有一點滯後,但已經不是一個問題了。

3.C#:選擇C#的第一原因是因為C#是.Net開發的首選語言(至少微軟是這麼定位的),為了保持自己的競爭力和開發能力,我選擇開始學習C#。當時記得是在2000年,我已經去了北京了,我是在中關村買到的盜版盤。這個選擇從現在看也是沒錯的。

選擇C#的效果從2006年開始顯露,我用C#開發的第一個產品就是從2006年2月份開始的。還有現在開發的Entity Model Studio也是用C#做的。應該說如果不使用C#而是使用C係語言來做的話,當然也是可以的,但是效率會低不少,成本和風險會增加。所以到目前為止來看C#在.Net方向上的開發是一個非常不錯的選擇。如果不出意外的話,我相信以後的開發生涯會一直和C#相伴了。

學以所用

很多朋友會認為學了那麼多語言,而且還是那個年代的,究竟對未來的發展道路有沒有什麼實質性的幫助?是否還要再次轉型?其實大家從我的經曆來看都是有所幫助的。這裏麵的原因可能是選擇本身的正確,但是我覺得主要的是選擇什麼語言,然後再去選擇該語言擅長或者應該這個語言去做的事情,從而保證從最終結果看每次語言的選擇都是正確的。比如我選擇了VC那我就會去應聘VC的開發職位,也會選擇VC擅長的項目去做。公司在方麵也有考慮具體一個員工的技能情況而有選擇的安排開發法任務,所以基本上都是有幫助的,而且技不壓身這句古話是沒錯的。

但是從長遠角度來說,這個很難講。由於時間跨度大了以後,很難說當初的選擇是否有幫助,比如DOS操作被Windows替代後,那麼原來的開發工具和語言就要考慮換了,那麼當初若是我還在一味地堅持那麼現在就會麵臨被淘汰的問題。當然這是反麵的例子,正麵的例子是我選擇C#。2000年開始第一次用C#,而真正用來開發產品則是在2006年,所以這樣的選擇有點戰略性的意味。其中原因是我定位自己在微軟的平台上做開發,其二是.Net的趨勢勢必成為主流,當時的輿論認為這是微軟向java的挑戰,意欲平分Java的天下。當然今天看來是否做到了另當別論,但是.Net成為一個主流平台卻是事實。那麼掌握c#語言就是一個正確的選擇,對自己做開發當然是有幫助的。

一旦選擇了一個語言,那麼勢必會在比其他語言上薄弱一些。這在我的經曆中也是有的。在C係語言的項目中我一般都是主力或者骨幹,但是在參與的其他一些項目中,比如有一次被要求參與一個java(之所以選我是因為java的語法和c++類似,學習成本比較低)項目,在那個項目中我基本上是做下手,做最簡單的事情。但是這不能認為自己選擇的語言沒有幫助,而是應該看到一個語言不能勝任所有的開發項目,也不可能滿足整個開發生涯的技能需求。所以隻要保證自己選擇的語言有價值,那就可以了。

十八年中值得回憶的往事

其實我對語言本身來講應該沒有特別的感觸,因為語言對一個開發者(至少對我是如此)來說是一個工具,適合的就用,不適合的就不用,沒有太多的情感因素在裏麵。相反用某一個語言寫下的具體的代碼或多或少會有一些情感,因為有些代碼是付出很多以後才得到的。還有是使用這些語言開發軟件所度過的時光,這是頗值得回憶的。

做一個比喻,就好像我們會對一篇文字有想法或者感悟,但是對寫下這篇文字的具體的語言(漢語,英語)未必會有什麼想法。還有一部分是和開發語言先關的一些認識,比如語言用多了就會體會到不同語言之間的一些共性的東西和差異,這對語言的學習和掌握會有很大的幫助。對於這個問題,有興趣的可以關注我其他的一些文章。(https://home.cnblogs.com/u/417670/

其實我覺得選擇編程語言的分支的出現不是必要的,而是正常的或者常見的。有些程序員一輩子有可能就隻用過一門語言,那麼對於這些程序員來說分支就不會出現。這是完全有可能的,隻是不太多,對於大部分程序員都會遇到學習多門語言的情況。這就好象有些人一輩子隻幹一個工作或者隻在一個公司工作,而有些人則幹過幾個工作或者為多個公司工作過。兩者都是正常的。

為何有那麼多種語言

相信看過編程語言排行榜的朋友都知道,每期榜單上的前二十名會有一個大的圖,前十名還有一個走勢圖,然後二十到五十名會有一個細長的小圖,五十到一百名就直接用文字進行概述了,再然後就沒有然後了,並不是說沒有一百名以後的語言,其實也有,那麼為何有那麼多種語言呢?我們先從項目的角度出發來說。

有時在項目中用到很多語言是一種正常的情況,畢竟每個編程語言都有一些缺憾,所以需要另一種語言來進行完善這個項目。在一些小的項目或者在大部分情況下,應該使用一種語言就可以完成開發任務的。但是在一些大型項目或者結構層次複雜的係統中,多語言同時使用是非常正常的。不同語言承擔自己擅長那部分工作,然後配合起來共同完成工作。在我的記憶中經常看到VB做界麵而VC做底層的情況,還有在FoxPro中調用C/C++的庫完成界麵中的部分工作。

若是說道為什麼會有那麼多的語言存在著,我覺得新語言的產生主要是為了滿足新的開發要求,而不是為了彌補其他語言的不足,至少主要目的不是為了彌補不足。我們現在一般情況下所說的編程語言實際上是指通用編譯器,這類編譯器可以勝任大部分一般的開發任務。但是在某些特定的方向上特定的語言會有更顯著的優勢,比如銀行數據處理會用COBOL,人工智能會用LISP,這些語言在特定方向上的優勢,是再好的通用編譯都無法替代的。

做一個比喻,公司需要招一個新員工(新語言),其原因應該是新的職位需求(新的開發需求),而不是主要為了彌補另一個員工(一門已存在的語言)的缺點或者不足。當然新員工的加入事實上對彌補另一個員工的不足也會起到積極作用,這個也完全是有可能的。

語言本無好壞

最後我覺得這世界上應該不存在什麼所謂最好的語言。因為單純比較語言的好壞是沒有什麼意義的。

所謂語言的優劣主要取決於你用一個具體的語言來做什麼而不是語言本身,對於需要完成的開發任務需要選擇正確的語言而不是一個好的語言。

其次,以當今通用編譯器來說,語言本身是一個因素,但是一個好的開發集成環境也很重要。語言好了,但是沒有好的開發工具,也是很令人頭疼的事情。

第三是開發者對語言的掌握程度。用自己擅長的語言往往比用一個好語言更明智,當然這不是絕對的。

全民編程

51CTO記者寄語:寶劍鋒從磨礪出,梅花香自苦寒來,不得不說,擁有十八年開發經驗的劉老師給我們帶來太多可以借鑒的地方,也讓我們了解了很多可能85後都不曾知道的編程曆史。

那麼看完上述內容是否有所感觸?是感同身受還是有所感悟呢?有句名言是這麼說的:在淚水中浸泡過的微笑最燦爛,從迷惘中走出來的靈魂最清醒。相信你我都在編程語言的分支上各有觀點,我們也曾迷惘過如何選擇,那麼時到今日,你是否還會當初的決定所迷茫呢?不如一起分享出來,一起來參與全民編程!


最後更新:2017-04-03 20:43:08

  上一篇:go Android listview異步圖片加載之優化篇——ImageLoader
  下一篇:go Eclipse 集成 Araxis Merge 作為比較和合並GUI工具的配置