我大體上對程式語言感興趣。特別低,我一直對另一門程式語言 如何能夠提供給我表達程式的新特性以及允許我成長為一名程式設計師 感到好奇。
我在校時學到了第一門語言。那兒的電腦——一屋子都是PET 2001,那時候他們是新潮的——只有BASIC,很快就讓我失望了。在大學,我開始了一門Pascal的課程,閒暇做了很多程式設計。Pascal很快填補了我在BASIC發現的惱人的不足。
帶著興趣我學習了FORTRAN基礎,但是從來沒有真正用過。Modula 2 出現了,甚至有更大的程式設計分配,但是沒有真正引起我的興趣。我發現Ada更有意思,不過在程式控制課程之外很少有機會使用。我接觸了一點兒Forth,但是再一次沒有真正的應用程式來實踐。
當我接觸C時,最終被吸引住了。那是,最終的,“真正的語言”,在某種程度上,我可以完全掌控的一門語言,不僅在技術情景——對於我的大部分專業生涯,它是讓我過得很好的主要因素之一。
我在大學還學了其它有意思的語言,比如,Tcl,不是最偉大的語言,但它是一個非常易於嵌入的直譯器。很快,我把它嵌入了我寫的每一個主要程式。我學了一點兒Prolog,但還不夠,我很遺憾。
但是我對函式式語言產生了極大興趣,並在那個領域取得了更多進步——主要是Lisp、Hope、ML,Lisp是我自己構建實現的唯一語言——或者,不止一個。起初對於一項任務,和一名合作學生一起,在Modula 2上。我們不喜歡那門課程裡的某些要求,沒有如此多的實現語言,因此隨後,我們用C做了一個相似的。數年後,我用Java做了一個Lisp直譯器,後來還用C做了另一個Lisp直譯器。所有這些都不是真正完全的——特別是後面的垃圾回收有點兒著急,回收了它不應該回收的東東,但是兩者都實現了一個小型但“真正”的Lisp,能夠使用遞迴和高階函式,有可用的基本內建命令。在此期間我用Go寫了一個,它是它們當中最完整的,儘管還在我收藏的玩具語言分類、而不是有用的程式設計環境。
正如前面提到的,C對於我的大部分專業工作是有幫助的,也是我目前在用的。但是其他語言進入了視野,主要是Perl。當我想嘗試某個東東或不得不只實現一點兒功能時,Perl甚至變成了我的預設語言。這不是因為我對Perl的技術有點有著高度評價,不過它隨處可用,每個人瞭解它,因此和C比起來,很多事情用Perl不可否認地更加容易,所以Perl已經變成了一種習慣。雖然我不是Perl的最大粉絲;我發現它處處不雅和粗野,總在試圖鼓勵其它語言的有疑問的程式設計習慣。還有,它用相對較少的努力就能把事情搞定。
在此過程中還有其它語言我發現有意思,但是沒有找到足夠時間(或實踐機會)去真正學習它們——LUA、SNOBOL,APL(或J)浮現在腦海。我遲早不得不要用JavaScript工作,但是我認為它非常無聊。
然後我看了越來越多的Go。Rob Pike的一篇文章最終讓我深入進去,關於我一直想去做的東東。現在它貌似是一門好的語言,內建了偉大思想,還有繼承了與C和其後代語言一起成長的程式設計師的習慣。Go有潛力把我帶回20年前我腦子裡充滿C的那種愉悅,結合了一門最終的優雅語言(雖然不如Lisp或更加現代的函式式語言優雅)的舒適和實用(像Perl)。我將拭目以待;現在除了一些簡單程式和用Go實現的上面提及的Lisp直譯器,我沒有做更多。
後來有了Haskell。我在90年代早期就對Haskell感到好奇,當時我做為一名學生(參考上面)接觸了其它函式式語言。有人給我一篇關於在ACM SIGPLAN Notics上面的Haskell的文章。Haskell那時候還是新的,但是它已經成長了數十年,它仍然存在,我認為這是好的訊號。由於我總是喜歡函數語言程式設計,這或許是我一起成長的語言。
現在對我來說,採用一門新語言的最大障礙不是學習的難度和為了實際任務的加速學習,而是其他人。讓我遺憾的是,我的工作場所有一種文化,人們大部分在獨立地做他們的開發專案,當原作者在度假、或者原作者離開後做進一步開發時,其他人能夠修復問題,這仍然被認為是重要的。當然我同意這一點。但是當其他人只是對同樣事情不感興趣時,才會使得采用一門新語言變得困難。哎,他們好像不是這樣。
除了使用shell指令碼,我們工作時用C,差不多也用Perl,不過我愛用Go或Haskell工作。我願意在工作中使用,來讓我的工作更加簡單和有趣。但是由於沒有人能夠接手用這些語言做的專案,我還不能那樣做。(有個人對Go有足夠的興趣,我猜的,但他是名學生,一兩年後會離開我們。)太讓人失望了。或許我應當儘量發起 下一步我們應當採用哪種語言的 某種共識——不過我擔心興趣不夠而剩下C和Perl的老路。畢竟,他們已經採用Perl做為一門新語言甚至不到20年,那麼,為什麼同樣的情景這麼快就再來一次呢?
原文地址:http://jyrgenn.dreamwidth.org/30953.html
文章首發:臘八粥