回首往事:十八年的語言分支
原創(chuàng)當每個人走過一段路以后,都會有意無意的去回首一下自己的往事,這些往事有讓你印象深刻的部分、也有讓你一帶而過的部分、有值得深思的問題、也有自己后悔過的問題。雖然這些讓你覺得只是你生活中的一段插曲,但是你可能沒意識到這些年的經(jīng)驗本身來說就是一件“瑰寶”,不如分享出來,讓很多人得到寶貴的經(jīng)驗,讓更多的人感受到你當時的心情。
就像我們以前提到的,大多的程序員在工作中,語言的分支選擇有很多,每個人在接觸另一種語言的理由也各有不同。那么這次51CTO的記者很榮幸的邀請到了一位擁有十八年開發(fā)經(jīng)驗的資深開發(fā)者廣聯(lián)科技(WideUnion)的開發(fā)部經(jīng)理劉昱劉老師,同時也是EntityModelStudio產(chǎn)品的核心開發(fā)人員兼主設計師。相信他這些年的開發(fā)經(jīng)驗一定會讓你有所收獲,那么下面的時間就讓我們一起來看他這十八年的語言分支。
菜鳥入“江湖”
也許很多人最開始接觸代碼是在大學里,但是我認為那不算是真正的開發(fā),而我真正的所謂***次也不是在大學里。我最早接觸代碼時我還是一個小學生,是和我姐一起買了一本關于Basic編程的書。由于當時沒有計算機可以上機練習,所以只是看書而已,應該說沒有什么收獲。但是從時間上來說,那應該是***次接觸代碼。
以后在大學里確實學習了編程,但是應該說我不是一個好學生,并且我的專業(yè)也不是與計算機相關的,所以我沒有學的什么編程的東西,相反對編程在心理上還是有點畏懼的。所以這兩次所謂的***次對我而言應該沒有留下什么正能量的東西。
后來工作以后從1994年起開始有機會使用電腦了,***門使用的語言是FoxBase。應該說這是我真正意義上開始***次接觸代碼。這次的效果非常好,是我開發(fā)生涯的起點。單就語言而言,我覺得Foxbase還是比較容易上手的,而且其中一些做法至今對我來說還有很好的參考價值。
編程語言的分支
在工作中我學過的語言可以說還是有一些的,按照先后順序大概是FoxBase,C,C++,ASM,FoxPro,VC,VB,C#,少量的接觸過java,cobol,KDE。很多人也許會覺得學這么多語言現(xiàn)實嗎?其實是現(xiàn)實的,我們一起來看看這些稱得上編程語言分支的情況:
1.Foxbase:這是***次選擇,也是我上述提到的真正意義上開始***次接觸的代碼,事實上應該算得上是被選擇,因為公司正在用這個東西,我沒得選。學習使用Foxbase是我開發(fā)生涯的起點。我最初的編碼經(jīng)驗就是從這里開始積累的,并且Foxbase中的一些內(nèi)容至今對我來講還是有影響的。比如Foxbase中一些命令的設計直到現(xiàn)在依然對我所開發(fā)Entity Model Studio這個產(chǎn)品在思想上有參考價值。
2.C/C++/ASM(包括BC++和VC++):C/C++/ASM的學習是我開發(fā)能力和經(jīng)驗真正意義上積累和成長的一個階段。為了描述方便我把這些語言統(tǒng)稱為C系語言。以后我成功轉(zhuǎn)型為程序員就是VC的原因,這是C++編譯器中的一個。最初選擇C語言的理由應該說體現(xiàn)了我當時稚嫩或者甚至幼稚的一面。我沒有從實用角度,也沒有從自己實際的能力從發(fā),而僅僅是聽說C語言難學,為了證明自己很強很聰明,于是就選擇了C語言。當時的我剛剛“成功掌握”Foxbase,所以正是氣盛的時候,想法確實有點不太理性。雖然從后來的實際結(jié)果來看這個選擇是對的,但是做出這個選擇的過程和理由實在沒有什么可取之處。另外一個選擇C系的原因是當時存在一個說法就是所謂的高級語言和低級語言之說。而C系語言按照我老師的說法是屬于所謂的“中級”語言,言下之意是什么都能干。在自己的學習中也確實體會到是如此。比如C系可以直接嵌入ASM做***層的控制,也可以使用ODBC開發(fā)MIS,雖然界面做的慢一點,但不管怎么說算是可以做了,同樣能做到這些事情的語言我當時確實沒有遇到。
在選擇C++時先后有兩次選擇,***次是Borland的BC++3.1,第二次是后來微軟的VC++。C++的使用是到目前為止收獲***的,編碼學習投入最多的階段,我對Borland公司至今仍有一種不舍的情感。選擇BC++的原因是兩個,***個是想繼續(xù)深入為今后轉(zhuǎn)型程序員做準備。因為C++是很難學的,如果我掌握了C++那么軟件公司聘用我的可能會高一些。應該說這個想法比之前學C語言的動機成熟些了也現(xiàn)實了一些。
另一個選擇BC++的理由是當時能夠獲得的資料都是BC++的,比如書和軟件。所以想學其他的編譯器沒有可能,只能選BC++,很幸運BC++沒有選錯。這里需要注意當時是上世紀的90年代中期,互聯(lián)網(wǎng)沒有那么普及,咨詢的獲得非常困難,軟件下載遠遠沒有現(xiàn)在方便,都是需要郵購盜版軟件的。所以對我來說各類出版物是學習的主要途徑,市面上流行什么出版物,基本上我就只能學什么了,沒有選擇的可能。
后來學習使用VC++(這里語言,編譯器和開發(fā)工具混稱了)的原因是大勢所趨了,因為微軟的Windows操作系統(tǒng)來了,DOS開發(fā)很快就沒有市場了。當時最初的選擇還是Borland的產(chǎn)品,是Turbo C++ 3.0 For Win。我的***個Windows程序就是用這個編譯器開發(fā)的。但是很快就放棄了,我最終決定投入微軟的陣營,但是我對Borland的感情依舊,呵呵。
轉(zhuǎn)向微軟的理由是以下幾個:
a.如果PC的操作系統(tǒng)的是微軟的,那么開發(fā)工具為什么不用微軟的?這個根本不用多想。是一家人就不要用兩家的東西。事實上微軟在此后的表現(xiàn)一直很爭氣,所以我很幸運沒有選錯。當然我也很希望看到Borland可以再次崛起。
b.我家里買了電腦,機器的配置允許我可以安裝類似Visual Studio這樣的軟件了
c.盜版軟件開始出現(xiàn)了,購買盜版軟件的光盤很容易,所以搞到軟件完全成為可能
d.出版物開始基本上和流行節(jié)拍吻合,雖然還有一點滯后,但已經(jīng)不是一個問題了。
3.C#:選擇C#的***原因是因為C#是.Net開發(fā)的***語言(至少微軟是這么定位的),為了保持自己的競爭力和開發(fā)能力,我選擇開始學習C#。當時記得是在2000年,我已經(jīng)去了北京了,我是在中關村買到的盜版盤。這個選擇從現(xiàn)在看也是沒錯的。
選擇C#的效果從2006年開始顯露,我用C#開發(fā)的***個產(chǎn)品就是從2006年2月份開始的。還有現(xiàn)在開發(fā)的Entity Model Studio也是用C#做的。應該說如果不使用C#而是使用C系語言來做的話,當然也是可以的,但是效率會低不少,成本和風險會增加。所以到目前為止來看C#在.Net方向上的開發(fā)是一個非常不錯的選擇。如果不出意外的話,我相信以后的開發(fā)生涯會一直和C#相伴了。
學以所用
很多朋友會認為學了那么多語言,而且還是那個年代的,究竟對未來的發(fā)展道路有沒有什么實質(zhì)性的幫助?是否還要再次轉(zhuǎn)型?其實大家從我的經(jīng)歷來看都是有所幫助的。這里面的原因可能是選擇本身的正確,但是我覺得主要的是選擇什么語言,然后再去選擇該語言擅長或者應該這個語言去做的事情,從而保證從最終結(jié)果看每次語言的選擇都是正確的。比如我選擇了VC那我就會去應聘VC的開發(fā)職位,也會選擇VC擅長的項目去做。公司在方面也有考慮具體一個員工的技能情況而有選擇的安排開發(fā)法任務,所以基本上都是有幫助的,而且技不壓身這句古話是沒錯的。
但是從長遠角度來說,這個很難講。由于時間跨度大了以后,很難說當初的選擇是否有幫助,比如DOS操作被Windows替代后,那么原來的開發(fā)工具和語言就要考慮換了,那么當初若是我還在一味地堅持那么現(xiàn)在就會面臨被淘汰的問題。當然這是反面的例子,正面的例子是我選擇C#。2000年開始***次用C#,而真正用來開發(fā)產(chǎn)品則是在2006年,所以這樣的選擇有點戰(zhàn)略性的意味。其中原因是我定位自己在微軟的平臺上做開發(fā),其二是.Net的趨勢勢必成為主流,當時的輿論認為這是微軟向java的挑戰(zhàn),意欲平分Java的天下。當然今天看來是否做到了另當別論,但是.Net成為一個主流平臺卻是事實。那么掌握c#語言就是一個正確的選擇,對自己做開發(fā)當然是有幫助的。
一旦選擇了一個語言,那么勢必會在比其他語言上薄弱一些。這在我的經(jīng)歷中也是有的。在C系語言的項目中我一般都是主力或者骨干,但是在參與的其他一些項目中,比如有一次被要求參與一個java(之所以選我是因為java的語法和c++類似,學習成本比較低)項目,在那個項目中我基本上是做下手,做最簡單的事情。但是這不能認為自己選擇的語言沒有幫助,而是應該看到一個語言不能勝任所有的開發(fā)項目,也不可能滿足整個開發(fā)生涯的技能需求。所以只要保證自己選擇的語言有價值,那就可以了。
#p#
十八年中值得回憶的往事
其實我對語言本身來講應該沒有特別的感觸,因為語言對一個開發(fā)者(至少對我是如此)來說是一個工具,適合的就用,不適合的就不用,沒有太多的情感因素在里面。相反用某一個語言寫下的具體的代碼或多或少會有一些情感,因為有些代碼是付出很多以后才得到的。還有是使用這些語言開發(fā)軟件所度過的時光,這是頗值得回憶的。
做一個比喻,就好像我們會對一篇文字有想法或者感悟,但是對寫下這篇文字的具體的語言(漢語,英語)未必會有什么想法。還有一部分是和開發(fā)語言先關的一些認識,比如語言用多了就會體會到不同語言之間的一些共性的東西和差異,這對語言的學習和掌握會有很大的幫助。對于這個問題,有興趣的可以關注我其他的一些文章。(http://home.cnblogs.com/u/417670/)
其實我覺得選擇編程語言的分支的出現(xiàn)不是必要的,而是正常的或者常見的。有些程序員一輩子有可能就只用過一門語言,那么對于這些程序員來說分支就不會出現(xiàn)。這是完全有可能的,只是不太多,對于大部分程序員都會遇到學習多門語言的情況。這就好象有些人一輩子只干一個工作或者只在一個公司工作,而有些人則干過幾個工作或者為多個公司工作過。兩者都是正常的。
為何有那么多種語言
相信看過編程語言排行榜的朋友都知道,每期榜單上的前二十名會有一個大的圖,前十名還有一個走勢圖,然后二十到五十名會有一個細長的小圖,五十到一百名就直接用文字進行概述了,再然后就沒有然后了,并不是說沒有一百名以后的語言,其實也有,那么為何有那么多種語言呢?我們先從項目的角度出發(fā)來說。
有時在項目中用到很多語言是一種正常的情況,畢竟每個編程語言都有一些缺憾,所以需要另一種語言來進行完善這個項目。在一些小的項目或者在大部分情況下,應該使用一種語言就可以完成開發(fā)任務的。但是在一些大型項目或者結(jié)構層次復雜的系統(tǒng)中,多語言同時使用是非常正常的。不同語言承擔自己擅長那部分工作,然后配合起來共同完成工作。在我的記憶中經(jīng)常看到VB做界面而VC做底層的情況,還有在FoxPro中調(diào)用C/C++的庫完成界面中的部分工作。
若是說道為什么會有那么多的語言存在著,我覺得新語言的產(chǎn)生主要是為了滿足新的開發(fā)要求,而不是為了彌補其他語言的不足,至少主要目的不是為了彌補不足。我們現(xiàn)在一般情況下所說的編程語言實際上是指通用編譯器,這類編譯器可以勝任大部分一般的開發(fā)任務。但是在某些特定的方向上特定的語言會有更顯著的優(yōu)勢,比如銀行數(shù)據(jù)處理會用COBOL,人工智能會用LISP,這些語言在特定方向上的優(yōu)勢,是再好的通用編譯都無法替代的。
做一個比喻,公司需要招一個新員工(新語言),其原因應該是新的職位需求(新的開發(fā)需求),而不是主要為了彌補另一個員工(一門已存在的語言)的缺點或者不足。當然新員工的加入事實上對彌補另一個員工的不足也會起到積極作用,這個也完全是有可能的。
語言本無好壞
***我覺得這世界上應該不存在什么所謂***的語言。因為單純比較語言的好壞是沒有什么意義的。
所謂語言的優(yōu)劣主要取決于你用一個具體的語言來做什么而不是語言本身,對于需要完成的開發(fā)任務需要選擇正確的語言而不是一個好的語言。
其次,以當今通用編譯器來說,語言本身是一個因素,但是一個好的開發(fā)集成環(huán)境也很重要。語言好了,但是沒有好的開發(fā)工具,也是很令人頭疼的事情。
第三是開發(fā)者對語言的掌握程度。用自己擅長的語言往往比用一個好語言更明智,當然這不是絕對的。
全民編程
51CTO記者寄語:寶劍鋒從磨礪出,梅花香自苦寒來,不得不說,擁有十八年開發(fā)經(jīng)驗的劉老師給我們帶來太多可以借鑒的地方,也讓我們了解了很多可能85后都不曾知道的編程歷史。
那么看完上述內(nèi)容是否有所感觸?是感同身受還是有所感悟呢?有句名言是這么說的:在淚水中浸泡過的微笑最燦爛,從迷惘中走出來的靈魂最清醒。相信你我都在編程語言的分支上各有觀點,我們也曾迷惘過如何選擇,那么時到今日,你是否還會當初的決定所迷茫呢?不如一起分享出來,一起來參與全民編程!