新聞中心
80年代末,我***次接觸了Apple II電腦上的BASIC編程語言,從此走上了一條程序人生。十多年前我在博客園上開通了自己的博客,由于下象棋時經(jīng)常出點“毒”招,所以網(wǎng)名干脆就叫“毒龍的程序人生”,2016年8月底申請公眾號,名字就叫“申龍斌的程序人生”了。

回想這些年,由于項目需要或興趣使然,竟然學(xué)了十多種編程語言。
BASIC
***次接觸計算機(jī)大概是在1987年,當(dāng)時我的學(xué)校竟然引進(jìn)了20臺昂貴的Apple II計算機(jī),我連如何操作電腦都不會,直接就學(xué)BASIC語言。
那時也不懂什么結(jié)構(gòu)化編程,反正就是抄著書上的代碼學(xué),雖沒寫出什么成規(guī)模的BASIC程序,但也算編程入門了。記得曾把幾個程序小心翼翼地保存在一張1.2M的大軟盤中,可惜現(xiàn)在軟盤也沒了蹤影,所以一行BASIC代碼現(xiàn)在也沒有留下,想懷念懷念過去都沒了可能。
FORTRAN
FORTRAN是在讀本科時學(xué)的,當(dāng)時科學(xué)計算很流行,這是數(shù)學(xué)系的必修課。一個班幾十人連接一臺大型機(jī)(我已經(jīng)忘了它的名字),提交程序后得等上十多分鐘才能看到程序的編譯結(jié)果,所以代碼要寫得非常認(rèn)真,提前把代碼寫在本子上,仔細(xì)檢查各種語法和邏輯錯誤,否則上機(jī)1小時可能連編譯都無法通過。
參加工作時竟然還用FORTRAN語言做過項目,當(dāng)時有一位北大畢業(yè)的CHAI師傅,能用FORTRAN寫上幾百行的代碼,我就跟著他修改這一堆代碼。當(dāng)時能寫代碼的人就是高手,不管什么可維護(hù)性,GOTO語句滿天飛,每做一個項目就復(fù)制、修改一份源程序,***程序版本混亂,無法維護(hù)。
最讓我震驚的是當(dāng)時MIPS工作站上的一套國外開發(fā)的地震解釋軟件,竟然包含了全部的FORTRAN源代碼,那套代碼有上萬行,注釋詳細(xì),邏輯清晰。
那時的我明白了結(jié)構(gòu)化編程的重要性,即使語言本身的特性不好,也同樣能夠?qū)懗隹删S護(hù)的優(yōu)美代碼。
PASCAL
大學(xué)里開了《數(shù)據(jù)結(jié)構(gòu)》這門課,所有的例子代碼都是用PASCAL語言寫的,所以我又學(xué)了PASCAL語言。
以前學(xué)FORTRAN和BASIC時,養(yǎng)成了非結(jié)構(gòu)化編程的壞毛病,因為有行號,語句之間可以隨意跳轉(zhuǎn),也沒有模塊化的概念,亂用全局變量,程序的可維護(hù)性幾乎為零。PASCAL這門語言的特點就是嚴(yán)謹(jǐn),begin和end雖然啰嗦,但結(jié)構(gòu)非常清晰,靠這門語言養(yǎng)成了結(jié)構(gòu)化編程的好習(xí)慣。
工作后還曾經(jīng)用Dephi(在Pascal基礎(chǔ)上升級的面向?qū)ο蟮目梢暬幊陶Z言)寫過一個小項目,可惜也沒有實際的應(yīng)用效果。
C
C語言因為性能好,被UNIX、Windows各種機(jī)器所支持,所以使用廣泛。大學(xué)時我們班里沒有開這門課,我跑到計數(shù)班去聽這門課,上機(jī)課就混他們的機(jī)時。
C語言中指針等概念雖然麻煩,但還是慢慢掌握了。我一開始學(xué)語言的動機(jī)實際上就是想著寫游戲,當(dāng)時俄羅斯方塊正流行,自己也嘗試著寫一個。有一次,老師在微機(jī)課上巡查,發(fā)現(xiàn)我正在玩俄羅斯方塊,當(dāng)場對我提出嚴(yán)厲的批評。
我輕輕地按下一個功能鍵,游戲馬上停止,此時顯示出一排排的C代碼,我正在調(diào)試自己寫的C程序呢。老師盯著看了看,無語,向其他學(xué)生走去。
實際上,自己根本不可能沉迷于自己寫的小游戲,而是更關(guān)心如何讓動畫更流暢、代碼如何寫得更簡潔,如何調(diào)整難度級別、改進(jìn)一下記分系統(tǒng)等等。在寫游戲的過程中,逼得自己去掌握了編程的語法和算法。
工作后,這門語言的用處還挺大,當(dāng)時分到物探方法室工作,主要接觸UNIX工作站,只有C語言能用也會用,所以就經(jīng)常幫著師傅們寫點小程序,做些上萬行數(shù)據(jù)的統(tǒng)計、格式轉(zhuǎn)換之類的小活,實際上可是幫了他們的大忙。
Visual Basic
Visual Basic可視化式的編程開發(fā)開創(chuàng)了一個新的時代,當(dāng)時用鼠標(biāo)點點拖拖就可以產(chǎn)生一個Windows程序,這種感覺太美妙了,由于我有以前的BASIC基礎(chǔ),所以學(xué)這種語言飛快。
Visual Basic這款產(chǎn)品的兼容性真是沒得說,最早的開發(fā)環(huán)境是在Windows 98上開發(fā)的,后來windows升級到2000, xp,windows 7,它仍能運(yùn)行。
我現(xiàn)在仍在維護(hù)的一個用VB寫的程序就是瑞士積分編排程序的表格生成器SwissTab,前前后后修改了無數(shù)次,至今仍在一些比賽中發(fā)揮作用。
CASL
CASL這語言估計很多人沒聽說過,它并不是一門真正的語言,只是一門考試用的匯編語言。參加工作后,項目并不多,就去報考高級程序員試試,其中有一道大題就是寫CASL這種匯編語言。
由于我并非計算機(jī)專業(yè)畢業(yè),基礎(chǔ)知識薄弱,想通過高級程序員還是非常有難度的。***年我沒有通過,來年我把那套高程教材幾乎都翻爛了,把所有的練習(xí)題都做了一遍,把歷年的高程題都試了一遍,從而順利通過,那時是1996年。就因為這個高級程序員證,還提前2年混到了中級職稱。
JAVA
JAVA語言大概是在2000年學(xué)的,此時的JAVA語言火得一塌糊涂,“一次編寫,到處運(yùn)行”的理念好像是各個軟件項目的救命稻草。本來以為它的優(yōu)勢是桌面端程序,沒想到后來服務(wù)器程序卻變成了它的強(qiáng)項,J2EE/EJB大行其道,寫個服務(wù)器端程序非要吹出J2EE四個字來。
當(dāng)前室里幾個人組成了一個團(tuán)隊,寫出了勝利信息網(wǎng)網(wǎng)站發(fā)布系統(tǒng),2003年上線,一直沿用到了現(xiàn)在。這種跨平臺的語言真是節(jié)省了大量的工作量,我們的java,JSP程序都在windows端編寫、調(diào)試,***的程序部署在unix機(jī)器上的weblogic上,非常方便。
此系統(tǒng)被強(qiáng)行交給信息室維護(hù),項目和人員全部解散,以后我再也沒有用JAVA做過項目。
C#
這是在項目中應(yīng)用最多的一門語言,相對其它語言來說,在Windows上開發(fā),學(xué)習(xí)門檻較低,在國企里能建立起這樣一支隊伍已屬不易?,F(xiàn)在帶著團(tuán)隊還在完善、推廣和維護(hù)的系統(tǒng)就是EDSS系統(tǒng)了。
另外用C#寫的幾個小程序:
- 用C#寫的CGM解析程序
- 以前用C#寫的一個中國象棋引擎程序
- Eclipse油藏模型解析程序
- SeismicPro地震剖面顯示程序
- LDM地震數(shù)據(jù)體的存儲格式分析與應(yīng)用
- AlphaGo挑戰(zhàn)李世石,我的點格棋程序挑戰(zhàn)孩子
Haskell
2008年,無意中接觸到純函數(shù)式編程語言Haskell。這種語言與以前學(xué)的命令式編程(Imperative Programming)完全不是一種思路。Haskell語言是一群數(shù)學(xué)家發(fā)明的,寫起來就像一條條公式,欣賞一下這段優(yōu)美的快速排序代碼:
- qsort [] = []
- qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger
- where
- smaller = [ a | a <- xs, a < x ]
- larger = [ b | b <- xs, b >= x ]
用一行代碼打印100以內(nèi)的勾股數(shù):
- [(x,y,z) | x<-[1..100], y<-[x..100], z<-[y..100], x*x + y*y == z*z]
后來出現(xiàn)的新編程語言很多都借鑒了函數(shù)式編程語言中的語法特點,Python中也能寫出類似這樣的語句。
Objective-C
2011年,蘋果APP非常吃香,我也交了99刀的學(xué)費體驗了一把蘋果開發(fā)者。歷經(jīng)一年的折磨,踩了無數(shù)坑,終于提交了一個小程序XQViewer,當(dāng)時也不懂什么推廣和流量,最終只賣出了幾美金,連第二年的開發(fā)者證書費用都交不起,更別談用APP掙錢了。
R
看《大數(shù)據(jù)時代》和《赤裸裸的統(tǒng)計學(xué)》這本書時,又學(xué)了一點R語言,這門語言中竟然全部都是向量計算,統(tǒng)計功能強(qiáng)大,我試著用R分析孩子們的考試成績,短短的代碼,立刻可以生成多種直觀的分析圖表。
我的教訓(xùn)
1)學(xué)習(xí)新技能時沒有目的和計劃性,雖然學(xué)了10多種編程語言,只有C#算是用得最熟練的,其它的都不精,連最重要的前端JavaScript竟然都沒好好學(xué)。不管學(xué)哪門語言,一定要寫一款產(chǎn)品,然后不斷打磨它。
2)各種語言實際上主要分為兩大體系:過程式(或命令式)、函數(shù)式,過程式陣營中掌握J(rèn)AVA或C#即可,純函數(shù)式的編程語言幾乎沒有,只要了解Haskell或Lua等的理念即可,實際上現(xiàn)代的編程語言都已經(jīng)吸收了函數(shù)式編程的先進(jìn)思想。
3)學(xué)了一堆語言的一點點好處,就是當(dāng)遇到一個實際問題時,馬上會想到用某種語言解決起來會更加簡潔高效。
4)學(xué)了十多種語言后,再學(xué)其它語言時,只用一、二周就能學(xué)完所有語法,比如Python。其實最麻煩的部分是每種語言都帶著龐大的類庫,這些東西只能通過項目慢慢熟悉。
5)學(xué)了這些語言后,現(xiàn)在發(fā)現(xiàn)只剩下一個優(yōu)勢了,就是當(dāng)別人編程遇到障礙時,能夠很快發(fā)現(xiàn)對方可能的錯誤,看來我的使命就是輔導(dǎo)別人學(xué)編程了。
【本文為專欄作者“申龍斌”的原創(chuàng)稿件,轉(zhuǎn)載可通過作者微信公眾號(申龍斌的程序人生)獲取聯(lián)系】
新聞標(biāo)題:學(xué)會10多種語言是種什么樣的體驗?
URL標(biāo)題:http://www.dlmjj.cn/article/dppgcec.html


咨詢
建站咨詢
