相關閱讀 |
>>> 技術話題—商業文明的嶄新時代 >>> | 簡體 傳統 |
當每個人走過一段路以后,都會有意無意的去回首一下自己的往事,這些往事有讓你印象深刻的部分、也有讓你一帶而過的部分、有值得深思的問題、也有自己后悔過的問題。雖然這些讓你覺得只是你生活中的一段插曲,但是你可能沒意識到這些年的經驗本身來說就是一件“瑰寶”,不如分享出來,讓很多人得到寶貴的經驗,讓更多的人感受到你當時的心情。
就像我們以前提到的,大多的程序員在工作中,語言的分支選擇有很多,每個人在接觸另一種語言的理由也各有不同。那么這次 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++類似,學習成本比較低)項目,在那個項目中我基本上是做下手,做最簡單的事情。但是這不能認為自己選擇的語言沒有幫助,而是應該看到一個語言不能勝任所有的開發項目,也不可能滿足整個開發生涯的技能需求。所以只要保證自己選擇的語言有價值,那就可以了。
十八年中值得回憶的往事
其實我對語言本身來講應該沒有特別的感觸,因為語言對一個開發者(至少對我是如此)來說是一個工具,適合的就用,不適合的就不用,沒有太多的情感因素在里面。相反用某一個語言寫下的具體的代碼或多或少會有一些情感,因為有些代碼是付出很多以后才得到的。還有是使用這些語言開發軟件所度過的時光,這是頗值得回憶的。
做一個比喻,就好像我們會對一篇文字有想法或者感悟,但是對寫下這篇文字的具體的語言(漢語,英語)未必會有什么想法。還有一部分是和開發語言先關的一些認識,比如語言用多了就會體會到不同語言之間的一些共性的東西和差異,這對語言的學習和掌握會有很大的幫助。對于這個問題,有興趣的可以關注我其他的一些文章。(http://home.cnblogs.com/u/417670/)
其實我覺得選擇編程語言的分支的出現不是必要的,而是正常的或者常見的。有些程序員一輩子有可能就只用過一門語言,那么對于這些程序員來說分支就不會出現。這是完全有可能的,只是不太多,對于大部分程序員都會遇到學習多門語言的情況。這就好象有些人一輩子只干一個工作或者只在一個公司工作,而有些人則干過幾個工作或者為多個公司工作過。兩者都是正常的。
為何有那么多種語言
相信看過編程語言排行榜的朋友都知道,每期榜單上的前二十名會有一個大的圖,前十名還有一個走勢圖,然后二十到五十名會有一個細長的小圖,五十到一百名就直接用文字進行概述了,再然后就沒有然后了,并不是說沒有一百名以后的語言,其實也有,那么為何有那么多種語言呢?我們先從項目的角度出發來說。
有時在項目中用到很多語言是一種正常的情況,畢竟每個編程語言都有一些缺憾,所以需要另一種語言來進行完善這個項目。在一些小的項目或者在大部分情況下,應該使用一種語言就可以完成開發任務的。但是在一些大型項目或者結構層次復雜的系統中,多語言同時使用是非常正常的。不同語言承担自己擅長那部分工作,然后配合起來共同完成工作。在我的記憶中經常看到 VB 做界面而 VC 做底層的情況,還有在 FoxPro 中調用C/C++的庫完成界面中的部分工作。
若是說道為什么會有那么多的語言存在著,我覺得新語言的產生主要是為了滿足新的開發要求,而不是為了彌補其他語言的不足,至少主要目的不是為了彌補不足。我們現在一般情況下所說的編程語言實際上是指通用編譯器,這類編譯器可以勝任大部分一般的開發任務。但是在某些特定的方向上特定的語言會有更顯著的優勢,比如銀行數據處理會用 COBOL,人工智能會用 LISP,這些語言在特定方向上的優勢,是再好的通用編譯都無法替代的。
做一個比喻,公司需要招一個新員工(新語言),其原因應該是新的職位需求(新的開發需求),而不是主要為了彌補另一個員工(一門已存在的語言)的缺點或者不足。當然新員工的加入事實上對彌補另一個員工的不足也會起到積極作用,這個也完全是有可能的。
語言本無好壞
最后我覺得這世界上應該不存在什么所謂最好的語言。因為單純比較語言的好壞是沒有什么意義的。
所謂語言的優劣主要取決于你用一個具體的語言來做什么而不是語言本身,對于需要完成的開發任務需要選擇正確的語言而不是一個好的語言。
其次,以當今通用編譯器來說,語言本身是一個因素,但是一個好的開發集成環境也很重要。語言好了,但是沒有好的開發工具,也是很令人頭疼的事情。
第三是開發者對語言的掌握程度。用自己擅長的語言往往比用一個好語言更明智,當然這不是絕對的。
全民編程
記者寄語:寶劍鋒從磨礪出,梅花香自苦寒來,不得不說,擁有十八年開發經驗的劉老師給我們帶來太多可以借鑒的地方,也讓我們了解了很多可能 85 后都不曾知道的編程歷史。
那么看完上述內容是否有所感觸?是感同身受還是有所感悟呢?有句名言是這么說的:在淚水中浸泡過的微笑最燦爛,從迷惘中走出來的靈魂最清醒。相信你我都在編程語言的分支上各有觀點,我們也曾迷惘過如何選擇,那么時到今日,你是否還會當初的決定所迷茫呢?不如一起分享出來,一起來參與全民編程!
網載 2013-04-11 14:46:45
稱謂:
内容: