作為一名程序員,你在編程的道路上一路走來都接觸過什麼語言?對你的程序員之路有什麼影響?
包括稍微會一點的,精通的,以及當作吃飯的語言的。最好能夠說說自己是在什麼情況下接觸的哦
小學(1984-1990)
- BBC BASIC:我接觸的第一門編程語言,主要學習變數、表達式(算術/比較/邏輯運算)、控制語句( 、 、 等)。那時候是在興趣班裡學習的,也學習了如何使用鍵盤。
- Applesoft BASIC:第一次通過閱讀書本學習的語言(或應說方言?)。通過它第一次接觸計算機圖形,除了硬寫命令來畫東西,也學會了用 來畫多邊形。編程上更多使用到數組。當時也摸索出遊戲循環的概念,能重做 BBC 上玩過的 Breakout 遊戲。每天中午和放學後在小學圖書館用被廢置的 Apple II 編程序,因沒有存儲,關機後程序就沒了,寫得好或不好,翌日重新開始。
- 6502 彙編及機器碼:也是通過在中央圖書館借書學習,主要得著是理解計算機架構,逐步拆開黑盒,知道更底層的知識,例如屏幕的像素也只是內存映射出來,畫線命令沒什麼神秘。但我沒有用來寫過很複雜的程序,因為當時欠缺組譯器。
中學(1990-1997)
- Batch file:升中學家裡擁有了一台二手的 286,翻閱電腦賣家贈送的 MS DOS 原版手冊(也是二手的),學習了如何使用 DOS,以及用 Edlin 來編寫 batch。也許學到最重要的是,即使只有小學程度的英語水平,也不需要懼怕看原文技術書籍。
- GW-BASIC:微軟出品的 Basic 解譯器,很多方面都比 AppleSoft BASIC 強大,但印像中沒有學到新概念。記得想寫一些較大型的程序/遊戲時,還要預先分配好行號,不然行號不夠用就很麻煩。沒有局部變數也是一個很麻煩的事情,雖然當時並不知道「局部變數」這個概念,後來就如獲至寶一樣。
- Logo:中一二電腦科教授的編程語言,記得主要是繪圖和 list 的處理。比較方便的是繪畫遞歸圖形,因為之前用的 BASIC 沒有局部變數,而那時候也不太熟悉自行定義棧數據結構。所以從 Logo 學到最重要的就是遞歸。
- Borland Turbo C:升中二暑假時買了一本 C 語言入門書,並找到這個編譯器。之前有了計算機架構的基礎,指針也不難學會,而且語言的設計更貼近機器。不需行號,而且具有函數和局部變數,甚至可以把一個程序分開多個文件編寫!簡直是天堂。當時還未學會抽象,許多時候在同一個程序里會重複寫很多代碼。例如當時用 Borland Graphics Interface(BGI)來「繪畫」自製的 GUI,便把每個對話框都硬編碼,並各自處理輸入。寫出來的程序規模有很大的提升,也學習了三維圖形學的基本知識(幾何變換、透視變換等,但不是用矩陣形式),中二時就寫了一個三維建模和渲染軟體參加比賽。也因為獲得了這些知識和技能,在 BBS 上找到了同好,開展做商業上的遊戲開發之路。
- x86 assembly language:用 C 語言在性能上還是有點不足,當時就學習編寫 x86 彙編,主要用來做二維圖象的處理。
- Turbo C++/Borland C++:我的第一個 OOP 語言是 C++,也是通過購書自學。學到最重要是 OOP 的概念,之前用 C 語言時也有封裝的概念,但沒有繼承和多型。由中三、四開始學習和使用,後來中六左右的版本才出現了模版和 STL。這門語言是我學習和使用時間最長的語言,直到今天。一門編程語言可以用二十多年,非常划算。但學習 C++ 的時間也是最長,看的書最多的一個語言。我挑選了一些學習路徑。
- dBase/Visual FoxPro:為了幫助親友做會員系統等軟體,學習了這些資料庫軟體。不需要直接操作文件 I/O,也方便定義數據結構。最困難的是用點陣式印表機列印發票、郵件標籤。當時都是單機上的資料庫。不過也算是學習了信息系統的開發、需求分析等。
- Turbo Pascal:A-Level 計算機課堂所教授的語言,當時我選擇 C 考試,所以最初只是了解一下。後來為了幫助師弟妹參加比賽,開發了一個給 Turbo Pascal 使用的遊戲引擎,學習怎樣開發給其他人使用的程序庫。不少師弟妹使用這個引擎獲得獎項:
- Visual Basic:從 DOS 轉向 Windows 時,第一個使用的編程工具是 VB。那個時候的 buzz word 是 Rapid application development,做 GUI 程序非常簡單,之後也利用過 WinG(DirectX 的前身)來做遊戲用的實時二維圖象渲染。我想,VB 很大程度推動了之後的 .net 格局。
- JavaScript:高中時才接觸到互聯網,當時最流行的是 Netscape 瀏覽器。為了一個網站設計比賽,學習了 JS。基於原型編程及動態類型對我來說都是比較不適應的。之後也沒有非常深入使用,通常只是用來做些簡單的網頁或教程 demo,如《用JavaScript玩轉計算機圖形學(一)光線追蹤入門》。最近也寫過 Smoothed-particle hydrodynamics demo,之後或者分享一下。
- COBOL:A-level 課程中的一個小部分。最討厭的一門語言。
- Watcom C/C++:DOS 下我最後一個使用的 C++ 編譯器,利用其 DOS Extender 可以方便地在 DOS 下編寫 32 位程序,使用 4GB 的內存定址空間。只開發過一個參賽作品,又寫了一個 GUI 系統。
大學本科/碩士(1997-2002)
- Microsoft Visual C++:雖然也只是一個 C++ 的編譯器,但當時用它學習了 Win32 API、OpenGL 等,正式從 VB 轉換至原生的 Windows 編程。我在本科里才正式學習演算法和數據結構,練習時許多都是用 C++ 實現。之後在工作上也一直使用。
- GNU Compiler Collection:以前多數是編寫個別平台的 C++ 程序,使用了這個之後,就更注重哪些是標準,哪些是編譯器/平台的東西,學習做更多隔離的工作。同時學習了使用 Make。
- Java:因大學一門課程的要求而學習,當時 Java 剛發布不久,打著 Write once, run anywhere 的旗號。但當時寫了幾年 C++,覺得 Java 就是一個簡單版本,最大優點就是 GUI 可以跨平台,以及有 GC、數組範圍檢測,寫得比較輕鬆。後來碩士做實驗也是用 Java 實現。
- Lisp:計算機課的內容,主要新學到的是 Lambda calculus 的概念。
- Prolog:人工智慧課的內容,學習到另一種編程範式。
- Bash:大學裡用的伺服器需要用到,比 Batch 好,但沒有寫過複雜度的東西。
- C# 和 SQL(Transact-SQL) :大學裡遇到科網熱潮,創業用 ASP.NET 及 Microsoft SQL Server 來做網站及解決方案。從 xBase 轉而到 RDBMS,了解正規化等知識。架構上學習了三層架構。C# 在語言層面比 Java 先進,.net 也是一個很好的框架。
- Lingo:隨著幾個客戶的需求,學習了使用 Director 實現多媒體軟體,做成 CD-ROM。
- ActionScript:也是因客戶需要做網頁遊戲,學習了 Flash 使用方法及其編程。
- Unified Modeling Language(UML):可能不算是編程語言,但一直用它來表示軟體需求分析及設計。現在比較常用 DOT 語言畫類圖,但 DOT 只算描述語言。
- XSLT:因為是圖靈完備,也算是編程語言吧。但學習後只應用過在一個項目中。
畢業後工作(2002-)
- Visual Basic .NET:合著第一本書時,同時提供了 C# 和 VB.NET 的代碼範例,但主要是從 C# 翻譯過去。我認為這語言只是為了 VB 使用者過渡 .net,基本上就是 C# 的簡化版。
- High-Level Shading Language(HLSL):Direct3D 9 開始有了可編程的著色器,所以必須學習這種專門的編程語言。這種語言需要學習不同的優化方式。
- OpenGL Shading Language(GLSL):OpenGL 版本,因著色模型定義了底層的功能,和 HLSL 沒有太大區別。近年用來玩 Shadertoy。
- Lua:遊戲中最常用的腳本語言,比以前自己做的腳本語言強大又精簡。
- LaTeX:雖然不是通用的編程語言,卻擁有完整的編程能力,一些庫(如 PGF/TikZ)的功能真是超越想像。我只會簡單的使用來寫公式、排版及畫圖,也一直都在使用。
- UnrealScript:開發《愛麗絲:瘋狂回歸》時用 UE3 的時候用過,它與原生 API 的挷定方式比較簡單,比 SWIG 那類工具好多了。
- Jade:在育碧開發《美食從天降》時,這引擎內有一個腳本語言,當時我有一個任務是加上運算符優先順序。除了在開發《王子傳奇》時寫個腳本語言引擎,很久沒再碰編譯原理的事情。由於本科沒有學習這一科,後來一直都想補回來。
- MaxScript:在開發自研引擎時做過一些工具,後來也試過用來做一些程序式生成器,例如從一些路徑生成道路網路。
其他/學習中
- Python:每次學習完寫了一兩個腳本就忘了,每次使用都看手冊重新學。像《Milo Yip:一行 Python 能實現什麼喪心病狂的功能?》也是看著手冊寫的。
- Go:學習過但沒實際使用。coroutine 還是語言層面支持的好。
- Rust:也只是讀過入門,沒實際應用。但它保留了一些 C/C++ 的優點,感覺比 Go 更會喜歡 Rust 多一些。
- F# 和 Ruby:因為寫一篇博文《C++/C#/F#/Java/JS/Lua/Python/Ruby渲染比試》,簡單學習了一下。
- Haskell:主要是想學習函數式編程。
- J:想擴展學習 APL 類型的語言思維。
- R:兩年前學來做統計,但用得不多,現在應該忘了。
- PHP:只簡單學習過,用來方便在後台生成靜態網頁。
- Objective-C:只為了做 iOS 平台上的初始化工作,然後主要都是用 C++。沒有深入學習。
- PowerShell:在 Windows 下代替 Batch 的腳本,做過一些簡單爬蟲及軟體構件腳本。
- Wolfram Language:非常強大,想計算一些東西的時候會用到,但不會考慮用在運行的軟體中。
- Scratch:兒子最熟悉的編程語言,我向他學習。
想到再補充。
初中,pascal,掌握了變數,函數,循環,判斷等基礎知識,學了一點點演算法
高中,obj-pascal,了解了oop的思維方式,和拖控制項開發GUI程序的方法
大學,系統學C,C++,不系統學C#,Java,JavaScript,Python。看了一點Haskell和其它函數式語言
學C主要是讓我拾起來了初高中的東西,深入的時候搞明白了指針和內存操作到底是什麼東西
學C++讓我掌握了oo,函數式編程,元編程,泛型和模板,高階控制流(如CPS)等
學Java讓我明白了如何寫爬蟲、使用css選擇器(畫風不對啊喂!)
學C#讓我明白了一個良好設計的語言和框架對於開發的巨大幫助
學JS純粹是為了寫畢設,我覺得還是TS好
Python我就拿來用了用Tensorflow
Haskell是讓我掌握C++模板元編程和函數式編程思維的重要助力之一
太多了數不過來,GitHub上開了個倉庫用來放我入門這些語言時寫的東西 https://github.com/ice1000/learn
寫完這些就去看reference啥的然後研究它的設計哲學去了,然後再看看他們寫的大項目大概咋回事,不知道這能不能算是會一點。
影響的話就是開闊眼界,像那些程序員站隊撕逼的場面就可以在旁邊什麼都不說,內心暗自一笑,然後出去安利一下我喜歡的公司出的語言,網上來一大片;遇到實現有坑的語言在被坑了之後還可以嘲諷一波。
然後因為見過了很多類型的語言,學新語言就特別快,也知道了什麼
語言只是工具,演算法才是靈魂
這類的話是只有小白才會信的,然後少交點智商稅吧。
學習更多的語言有助於在自己設計語言、寫編譯器/虛擬機/解釋器的時候組合更多的特性吧。
吃飯的話,可能是C++,得抱大腿【
在大學學過Pascal、SQL、彙編和C++,都不算特別精通,因為沒有學以致用。
工作之後學了Java,在摩托羅拉一開始也用Java,但是我們做的手機平台被裁撤了,整個部門都被併入去另一個部門,改用C++。我記得動員大會上Director說:「大家既然會用Java改用C++應該沒什麼問題吧?」當然沒人敢說不行,呵呵。
去了微軟用了一整子C++,後來還是用C#,最後做Web接觸了JavaScript,從此就和這個語言有很長的緣分了。
在雅虎的時候,開始用PHP,這玩意思維方式和Java和.NET都不一樣,挺有意思。
話說回來,語言如衣服嘛,換一件就換一件好了,不用糾結太多;思想如女人,不要常換。小學,QBasic,目的是競賽進初中,覺得這個裡面能玩的門道特別多,主要是有了興趣。
初中,Pascal,目的競賽,第一次看原版的『演算法導論』,甚至啃了點兒運籌學什麼的,覺得編程這個邏輯嚴密又精妙的玩意特別有意思。
高中,C,C++(只是C with STL),還是為了競賽。託了競賽的福,對演算法的認識突飛猛進,覺得自己都有了所謂的『計算機式思維』。還有Java,為了寫J2ME的小玩意(彼時手機上能跑的出了塞班就是J2ME了),做過一些工具(主要是幫我爹做的,換點零花錢),算是接觸了一下MVC。還有8051彙編,幫我爹幹些活兒,主要是讀,並不寫。彙編和單片機知識幫助理解底層的作用很明顯,而學了這麼多命令式的語言後,基本摸清了套路,接觸各種其它語言更容易理解上手了。
本科,進一步學了C++和Java,為了競賽,同時也為了做些更具體的東西。ACM去了World Final覺得自己無憾,演算法競賽的事情基本就到此結束了。學了MATLAB,主要是為了參加數學建模,用得最多的是畫圖,其它部分主要還是拿C/C++寫。學了Python,因為語法特性與代碼可讀性很吸引人,並且後來也拿去做數學建模競賽了。學了Object-C,因為買了台Macbook,做了點兒Mac OS X上的應用,不過沒發布過。學了點elisp,因為用emacs時多少不可避免要學這個,也算是接觸了一下函數式編程。學了學HTML+CSS+JS,只是簡單的部分,毫不深入也不規範。把以前寫的一些J2ME的玩意挪到了Android下。學了點兒SQL。第一次接觸了所謂的AI(彼時還沒怎麼普及機器學習這個名字,深度學習也都還可以說不存在)。各種近似演算法玩的挺溜。
讀研,深入折騰了一把Python和C++。Python主要是日常好用,而C++則是因為C++11標準出來了,激動萬分。因為一直都看MFC不爽,之前挺抗拒寫桌面應用,但似乎多少會有做應用的需求,於是最終投入了Qt的懷抱。課題需要,看了上千行的Fortran項目代碼,從此對Fortran深惡痛絕。課題需要,折騰了CUDA。碩士課題的一套光學模擬就是用Python擼的。
畢業後,工作中接觸了各種亂七八糟的東西,例如要做個3D展示不得不搞搞Unity,於是看了看C#;接了個別人委託的項目做Web於是重新折騰了一通前端(後端就上Python了);折騰了Java EE以及ES6;覺得有意思折騰了一下Go、Erlang、Elixir、Scala、Swift;幫老婆解決一些作業問題所以學了學Ruby;看Torch的項目所以順帶學了學Lua……
要說吃飯的傢伙,大體上還是C++、Java和Python。C++寫過分散式框架,寫過CV項目;Java主要是做Web;前端不太是我的菜,但多少能用jQuery、Vue來做些玩具。Python用得最多,寫過Web服務,做過計算和可視化,爬過各種數據,做深度學習也小有起色(嗯並且老婆大人在做這個)。
一路過來學的都是那個時候輿論上流行的語言,如VB、Delphi、彙編、C++、Haskell、C#、F#。我覺得對我沒什麼影響,反正我工作後發現,是個程序員,最終總是要學會那麼一二十種語言的。
我覺得對於編程語言數目這個問題,用類似 H index,即「有 H 篇論文至少被引用 H 次」這樣的指標來衡量比單純說接觸過幾門語言要科學一點,比如「用 H 種編程語言各寫過至少 H 千(萬)行代碼」(滑稽
單說接觸我可以說幾十種,用 H-k 的話就只有 5/6 種左右了,有效避免號稱寫過幾十種語言其實全都是 hello world(逃
按順序吧
從初中開始
VB 6
C 和 C++ (不是 VC 6
Java
ASP (那時候還沒有 .net
D (那時候 D2 剛出
Go (大概五年前吧,有本叫 「Go 語言,雲動力」的書,在一個什麼活動上別人送我的
Common Lisp (走上邪路的起點2333333
JavaScript (蛤客松一晚上學的,然後水了個獎品手機
PHP (接過一個外包做 PHP,結果寫了一半甲方跑了hhhh
Clojure
Scheme (看 SICP 學的hhhhhh
Racket (幫一個滑鐵盧 CS 本科的朋友寫了一學期作業,我忘了是不是 CS135 了
Python (幫別人寫 Python 作業學的hhhh
Ruby (也是蛤客松上學的,寫了個把類似 Haskell 的列表構造式的模板編譯到一個特定的 SQL 上的東西,然而評委都一臉懵逼
Matlab (這東西算編程語言嘛。。。我有門線性代數的課要用這東西就照著文檔寫了一學期
Erlang
Elixir
Haskell (至今不會用 Haskell 實現一個雙向鏈表2333333
Idris (正在讀 Type-Driven Development with Idris
OCaml (面試 Jane Street 之前刷了一遍 Real World OCaml,結果面試官跟我說用 Java 就行。。。
SML (面 Jane Street 之前還刷了一遍 Okasaki 的 Purely Functional Data Structure
Prolog (考我們學校一個弱智 Programming Languages 的 comprehensive exam 兩天前看了幾頁 The Craft of Prolog,結果發現這老師的 Prolog 水平還不如我2333333333
F# (剛出那個 Mac 版 Visual Studio 的時候玩了一下用 F# 寫 iOS
newLisp (看著挺好玩的就玩了一陣子,GitHub 上那個非官方鏡像的維護者還給我某個版本的 LoLi 點過 Star 2333333333
Arc (大忽悠天天吹的語言
Shen (之前在 Lisp 中文一群里聽說的,後來找時間看了看
Swift (我學校辦的蛤客松上我本來想寫個 app 劃划水,結果老了熬不動夜就回家睡覺了
C# (也是幫別人寫作業hhhhh
Type Script (之前想開坑寫個編輯器,結果發現 Electron 慢得不行,棄坑了
(好吧我發現到後面順序就亂了233333,畢竟學這些東西也不是線性地學的
影響的話。。。見得多了可能理解也就不一樣了吧
然後每次開新坑都要糾結好久用什麼語言2333333
同時我非常反對「語言工具論」這 BS
每個語言的表達力就是不一樣的,你 Zen-Oriented 語言就是得用 Paper-Oriented 語言三倍的代碼量去實現同樣的一個東西,而且實現得還啰嗦,還費遊標卡尺(逃
然而我一個學數學的並不靠這些吃飯(逃
BASIC——1996年,DOS上的QBasic,1997年,學習機上的Basic
圖片借用自 用 SB2000 的 FBASIC 計算圓周率後80位
LOGO——與BASIC類似,1997年左右,DOS和學習機
DOS Batch——1997年左右,DOS
我在你的知乎昵稱有哪些寓意、由來或故事?一文中曾經提到我用DOS batch編寫密碼驗證的事情
Foxbase——1999年左右,DOS
Rexx——2000年之後,浪潮電腦配套的PC-DOS 7.0手冊
Pascal——2000年參加NOIP普及組開始接觸,Turbo Pascal,短暫玩過Delphi
VB——2000年左右
廣茂達VJC(如果算的話)——2004年,參加機器人比賽用過
樂高RoboLab(如果算的話)——2004年,參加機器人比賽用過
Java——2010年,學校里學的,後來主要靠這個吃飯,寫安卓
C#——2010年,學校里學的,曾經有一段時間靠它吃飯,第一個接觸RFID的項目就是拿它寫的
SQL——2010年,學校里學的,SQL Server,MySQL,Oracle算是都摸過了
PHP——2011年,學校里學的,短暫的靠它吃過飯。
JavaScript——2011年,學校里學的,目前在靠它吃飯,寫Hybrid App
ActionScript——2011年,學校里學的
C——2013年,寫Arduino程序學的
After Effects ExtendScript——2014年,做AE自動化相關的項目
在 廉頗老矣尚能飯,還能爬雪山!P55M-UD2安裝macOS Sierra實錄 里的截圖就是我當時寫AE腳本時的環境
Python——2014年,AE自動化項目的外圍代碼
ESC/POS(如果算的話)——2016年,小票印表機開發
在 蓬岸 Dr.Quest:國外程序員也燙屯錕斤拷嗎? 展示過小票印表機的亂碼
Objective-C——2016年,之前的iOS同事離職我臨時接手,後來也完成過iOS上的一些功能模塊
TypeScript——2017年,用ionic2搭過一個demo項目
你問我中間的那些年幹什麼去了?上高中,上大學(第一學歷是文科),漢化PDA軟體,在TomPDA和淘寶上倒騰洋垃圾:蓬岸 Dr.Quest:在大學你都做過什麼騷操作? 學網工考CCNA、MCSE,學「裝鍋游擊隊」偷看敵台,學英語,出國,就這樣。
其實不是很喜歡學習新語言的
最早是四年級在學習機上的G-Basic,能編個超級瑪麗在屏幕上走,用手柄控制
初中有自己的電腦後,用QuickBasic搞了很久的noip,雖然老師也推薦用pascal,但都是學了點語法就扔掉了,不過期間發現win下的pascal版本可以寫gui,就想深入學一下,可惜資料太少,而且沒有visual basic方便,高中玩了一段時間visual basic,但也只是自己做個小遊戲啥的
高二末要參加noi全國,被迫系統學了一個月pascal,比賽完了就忘光了,現在只記得語法有點死板啰嗦,唯一收穫是知道了指針
大一學C語言,雖然有其他語言基礎,還是經常踩坑,不過到大三就比較熟練了,C++稀里糊塗學了下,勉強及格,C++課程作業我都是裝樣子寫個class,然後用C實現的
大四畢設要用到python,時間短不想學,跟老師說用C可不可以,最後用C做的
06年畢業工作,前兩年開發用C語言,主要學習點在於unix環境和一些開發技巧上,工作中熟悉了sql語言並經常用,一些同事也把sql用得比較複雜,原本想深入下的,但是看了一篇文章後轉變了想法(文章主旨是:高性能高可用系統並不應該引入或依賴太多和太複雜的sql,最好是只用四條基本語句和主鍵join,然後很多複雜邏輯計算應該由應用層來完成);如果xml也算是語言的話,這段時間也在接觸(作為系統的配置文件),在工作中由於C語言開發業務邏輯較為繁瑣,考慮過用xml來表達業務邏輯,但水平不夠只能想想
工作兩年後換工作寫手游伺服器,要用python,大致學了一下上手,後面慢慢研究,一年後看了源碼剖析有了更深入了解,並用py+C優化系統,不過這段時間主要興趣點在於網路編程框架上面,比如自己試著用C擼了個單線程非同步框架,期間接觸到C語言的一些ub等問題,開始不定期看標準
工作四年後新公司用C++,從帶類的C開始熟悉C++知識,但對新東西還是不太感冒,C++11之後的很多新語法基本不懂,也不推薦同事們用得太複雜
工作快六年的時候因為一個偶然的業務需求,設計開發了一個自製的語言,用python做編譯器,用C寫vm執行位元組碼,之後雖然沒有正式用起來,但是總結了兩點:一,性能優化和runtime的各種細節是很繁瑣的,而且水很深;二,前端編譯沒想像中複雜,和語法設計有關
之後因為自己玩projecteuler,針對python的問題,做了一個better python,用java做後端:
maopao-691515082/larva-lang_4j
其實原本叫larva的,但是後面因為larva被我重構成另外的東西了,就遷到自己的項目了,larva的項目地址是:
larva-lang/larva-lang
這個原本的想法是方便伺服器開發,直到今年才騰出手初步重構完,算是一個類似java語法的東東,用go做後端,但還有很多東西沒空搞
14年的時候轉方向搞資料庫開發,就沒再怎麼學新語言了,抽空看了下java和go的語法,但也用得不深入,因為之前做larva的時候專註前端和語法設計,所以關注點主要在語言設計哲學上,有些語言雖然不會,不過也耳聞,比如rust
今年換工作,開始用go做業務開發,總體感覺是還是要接觸一下新東西
一切都開始於小學五六年級看《少年電腦世界》,發現有一篇文章居然在教你怎麼用VB6擼一個瀏覽器出來(IE內核),而且發現在窗體設計器上拖控制項好像畫圖似的,對於剛剛被《金山畫王2004》驚艷到的我來說簡直酷炫到沒朋友。於是趕忙去文化市場買了盒VB6的盜版盤(原諒這個孩子吧),又去新華書店買了VB6的大學教材,就這樣第一次接觸了編程。之後從小學到高中一路做了好多小東西。
高中時為了向VB6致敬,就想用VB6高仿一個VB6(那時候滿腦子騷想法)。那時正值高中會考,同學們都頭疼於VB操作題,於是我開發了一個VB操作題編輯系統,成功高仿了VB6的窗口設計器部分。這個軟體可以製作會考和計算機二級考試包含的那種填空式操作題,相應地,也有能讀取這些題目的面向學生的訓練評分系統。這裡錄了一段編輯題目的視頻:
等軟體做出來第一版,會考早已結束,於是就no one cares了……用它參加了一個電腦製作比賽,由於吃了沒有經驗的虧,最後也是無疾而終,現在想想都很遺憾。高中也入了奧賽坑,成為了oier(蒟蒻)。集訓時學的是Pascal,天天面對著一個叫Free Pascal的上古IDE:
由於Basic和Pascal的語法風格都不是C系的,那時反而覺得C的語法很難適應,自學時頗費了一段時間。現在想想,儘管Pascal更好上手,但是C語言真的應該從oier抓起啊……
上大學以後,由於不是計算機相關專業,這方面基本都要靠自學。入門面向對象語言的時候學的是Java,記得很清楚的是這是在地鐵上看書學完的。當時順便給女朋友做了個電子寵物作為生日禮物:
相關回答: HowardZ:你見過哪些「戳中小心心」的禮物?
後來慢慢走出了Java坑,很大一部分原因是Java不適合做自己鍾愛的桌面開發,以及IDE不好使(逃
後來,可能是宿命的推動,我(似乎理所應當地)入了C#神教。學了.NET Framework和WPF,開始深入桌面開發;學了http://ASP.NET MVC,發現自己可以建網站了;學了一點T-SQL和SQL Server,發現資料庫也可以這麼玩;學了一點Unity3D,進一步感受到了C#的便利和美。那段時間過得無憂無慮,也充滿了驚喜。後來自己搞了個代碼量不小的項目,是一個能自動證明幾何題的幾何畫板:
相關回答: HowardZ:作為程序員,你有哪些正在做的個人項目?
由於Flash是我們的專業課,還學了點AS3.0和AIR,開發小遊戲很方便很走心。那時候也接觸了Flex,一個野心極大跨平台應用框架,可惜很快就涼了……
再後來由於一些機緣巧合,我開始注重前端開發,系統地學了js(用到了AS3.0的底子),也學了一點「世界上最好的語言」php。這兩位都是動態類型語言,不得不說,剛開始接觸的時候曾被噁心得不要不要的,但是過段時間就慢慢習慣了。做了幾個網站以後便愛上了前端,最後變成了我的畢業論文和畢業設計課題。
由於學過很多平面設計和視覺傳達方面的專業課,到最後也說不清楚我到底是從後端轉前端還是從設計轉前端的,應該是由這兩點同時向前端逼近的吧……
Logo : 幼兒園開始接觸,然後去少年宮學,學到三角函數部分理解不了就沒有再深入。到小學四年級開始參加市裡的競賽,並且一直做題練習。我覺得從小接觸 Logo 的好處是潛移默化了函數式編程的思想,雖然當年完全沒有人提這個概念,但對於我多年後接觸各種函數式編程的語言和工具很有幫助。
Pascal: 中學競賽用語言,一直用到高二高三拿了兩個 NOIP 省一等獎換取保送。中學時做了很多習題,一開始覺得自己總是做不上去,後來高二放棄數理化競賽後被迫用 NOIP 拿保送,所以狠狠地每天晚上自習課就做題,就算不能上機也要把演算法想出來。(感覺那個階段跟現在大家刷 LeetCode 有點類似吧,其實刷題刷不出創造力,但能夠訓練大腦的模式匹配,使得你看到一道題後很快地匹配到對應的演算法。)
VB6: 中學受計算機老師影響,開始對寫應用感興趣,於是學習了 VB6 自己寫一些小程序。最後最大的貢獻就是幫我們班寫了一個用遺傳演算法來排座位表的程序,讓班主任在全班面前執行以示公正。班主任提供原始數據,然後要求身高盡量從低到高排,考試成績盡量平均分布。領導力也盡量平均分布,男女生也要均勻分開等等。然後我的程序就會用遺傳演算法實時計算一個次優解。這個過程重複三次,然後全班投票三選一。
ASP: 本質上就是 VBscript,然後通過 ActiveX 連接一個 Access 資料庫並通過 SQL 操作。當年我問學校拿了一台廢棄的 Dell 台式機做伺服器,跑 Windows Server,由此學會了一些 Windows Server 和 IIS 的配置。之後我在上面放了個動網論壇(dvbbs),並且自己改造出各種功能來。(動網論壇最初還不支持插件,我相當於把源代碼 fork 了。)後來不滿足於此,又自己從零開始寫了一個支持論壇和 Wiki 的平台,不過沒有實際投入使用。
C#: 在 .NET 的大潮里,我有嘗試過學習 http://VB.NET,但發現這對 VB 的改造不是很自然。此外我當時還要維護 VBScript 寫的 ASP 代碼,所以同時使用 VB.NET 的話就會經常寫錯。既然 C# 才是親兒子,那我就去學 C# 吧。大學幾年裡的 ASP.NET 都是用 C# 寫的,有些語言不限的大作業也是用 C# 寫的。最後通過對 ASP.NET 的專業獲得了個 MVP 的稱號,對剛畢業那幾年的個人聲譽也算有挺大幫助吧,而且還認識了不少微軟圈子的朋友,我覺得這才是最有價值的部分。
JavaScript: 當初寫 ASP 時我是完全不會JavaScript 的,要改動網論壇的 JavaScript 完全無從下手。幸好當年所有人都用 IE4,那我就在客戶端也用 VBScript 吧。後來 Ajax 大潮來了,我對 Gmail 這種不需要刷新就能更新頁面的操作特別感興趣,於是就開始濫用 JavaScript,無論有什麼想法都一定要寫成 Ajax 的,這樣才有意思。經過幾年的訓練,竟然 JavaScript 和 CSS 成了畢業後吃飯的工具。這說起來其實也有一定的巧合程度,當年大多數公司都沒有前端職位,後端也沒有人用 ASP.NET,所以我的知識沒什麼用。碰巧百度就有前端部門,有個在百度做後端同時兼顧前端的師兄就把我推薦去了,由此開始了靠前端吃飯的好多年。
Haskell: 從來沒有真正學會,因為沒有用它做過任何實際有用的事情,但就是覺得設計得超級美超級有意思。這使得我的 JavaScript 寫得更函數式,而且我還模仿 Haskell 為 JavaScript 寫無限長數組實現。我現在寫 JavaScript 就如同寫 Haskell 一樣,基本上一路下來之後 const,幾乎完全不用 var 或者 let。(其實可以完全不用 var 和 let,但會導致代碼太複雜。)
Hack: 雖然我不喜歡 PHP,但在 Facebook 不得不寫。後來 Facebook 逐步把 PHP 進化為 Hack,變得好了很多。函數變數都編程有類型的,lambda 表達式有了,async 也有了,用 JavaScript 的人表示超級容易習慣。唯一不習慣的是對組合類型的處理,因為 array 跟 JavaScript 的對象不一樣,而 Map 和 Set 也跟 JavaScript 新增的不一樣。每次用到都要查文檔。
Objective-C: 很久以前自己看了書,後來在公司也參加了培訓,但其實不怎麼會寫。主要還是看著別人寫好的代碼能調試能改就足夠了。語言本身看懂沒問題,但是對於系統 API 很不熟悉,用到時再查。現在我只會用 Objective-C 修修 bug 或者做些小改動。幫別人 code review 有時候也不敢大膽 accept。不知道現在深入學習 iOS 是不是有點晚了,我覺得如果我有時間的話會去試試。
最早是寫小霸王學習機上的basic, 連浮點型都沒有啊,不過有好玩的圖形庫,可以使用任天堂馬里奧的資源,挺好玩的。那時候沒寫過特別長的程序,因為不能存檔,你懂的。
dos下的GW-Basic,標準basic語言的絕唱。當然這貨提供的basic也是私貨多多,但比。俗話說吃一塹長一智,編程人生吃的第一塹,goto寫多了真的會死人的。從QB開始,我就不太喜歡了,裡面附帶4個遊戲還不錯。微軟也進入了給各種編程語言瘋狂加料的階段。
Turbo Pascal,一開始主要貪圖它能編譯,做了不少小軟體。後來發現用來參加競賽也特別好,當時這是競賽語言的主流,小學生玩Logo,中學生玩pascal。樹啊,棧啊,很多數據結構都是最先在Pascal上學到的。
Turbo C,太強大了,簡直是給我打開了一扇窗,還有附帶的TASM,有一種一杆子捅進系統底層的感覺。在這之前也玩了段時間dos下的debug,也可以寫彙編,很有意思。這能做的事情就多了,可以操作顯存了,我最早的圖形化軟體GUI都是自己寫的,因為那時候我電腦裝不上windows 3.0/3.1
Borland C++,這貨我記得要17張還是21張軟盤,我裝了好幾個月啊,因為每次都有一兩張盤壞掉,又要再去copy,然後回來再壞。非常好的編程體驗,我是他家的粉,一直到後來的java 時代。
進入圖形界面時代後,我兵分三路:
桌面客戶端還是用borland系列,微軟的vc系列偶爾也用。然後有了.net, 我就徹底轉向了.net, 我是他們首批beta用戶,機器跑不動啊,還特意去買了新的硬體。
網頁客戶端有了html,js,不過我主要還是寫Java applet,後來有了flash,很好,很強大
伺服器端,上大學後,這是我最主要的賺錢機會,我先後寫了cgi, asp,asp/c#.net, php, 然後逐漸穩定在了java,也成了我最終的職業。
成為一個職業程序員以後,我的定位是後端
java是個好語言,我從java 1.2開始一直到現在的java 9, 是一步一步看它成為後端的首選。我也從用servlet到jsp,從jsp的各種el,到模版語言,後面也從jdbc裸奔,到jdo,到後來的hibernate,又到輕薄的ibatis。框架也從沒有框架,到笨重的ejb2,再到輕量級的spring,然後又是沒有框架。。。。。然後是基於netty的若干框架。。。我也算對java是黑轉粉吧,對.net則是粉轉黑
php也是個好語言,在我自己初次創業的時候,我還是選擇了用php來快速開發。問題很多,但是開發的確快速。那時候php還是不能完全靠得住,好多服務還是用java寫了才放心。
ruby也是個好語言,在我再次成為一個公司的技術總監的時候,我毅然選擇了ruby on rails,開發好快,就是運行好慢,誰說語言不是瓶頸,你去試試看ruby 1.8吧。。。。。但問題是可解決的,總體體驗還是不錯的。
node.js(servier-side js)也是個好語言(上次有朋友說node.js不能算語言,或者說算框架?方言?),非常好,非阻塞IO,帶來很好的開發體驗,但是性能和java比,還是差點(這個有人可能意見不同,其實無關緊要,真的不差這點性能), 主要是node.js內存回收的吞吐量,我吃了不少虧,不過在我構建訪問量沒那麼大的服務的時候,我還是會用node.js搭建服務來快速開發。
scala也算是個好語言吧,哎,用的人越來越少了,不過還是很有用的,很好的開發體驗,無限接近java的性能。這也是我現在用來吃飯的傢伙,也是用了好多年的老夥伴了。函數式編程可以顯著提高項目的可維護性,減少bug數量,我這裡大力推薦一下吧。面向對象設計存在很多問題,我們有時候可能用一個函數來抽象你的業務邏輯會更有力。
前面是我職業上弄的,下面說點我業餘玩的。
haskell是個好語言,我讀書時候主要用來做自動推導,寫寫作業什麼的比較快。
React/React-native 也是我喜歡的,有朋友說這一套都是桌面UI框架玩剩下的,這事咋說呢,你要看WPF或者qt的很多項目,的確有些影子,只能說前端的思路也是英雄所見略同吧。
lua和elang我不好說我懂,只能說淺嘗輒止了,很有意思的語言,在國外有些公司在用,工作機會挺多的,因為會的人實在太少了,你只要做過點事,就會一直有獵頭來找你。
python有趣的地方可不止是人工智慧,其實大量的學術論文,如果你朝作者要代碼,他會給你段python。亂七八糟的代碼堆在一起,只要能跑,就是成功。早年還有perl,都值得一玩。
lisp對我來說唯一的用處就是在emacs里了,儘管頭很疼,但是沒辦法啊。
go/rust/kotlin這些東西就不寫了,隨便玩了玩,有坑慎入吧。
不會寫代碼,也不是程序員。
入門搞的C,後來覺得Lisp好玩,就玩了。再後來就是Python、C++、js、Java、PHP、Haskell。
大致影響就是C逼著我學了OS相關的理論,對編譯原理也有一個初步的了解了。
Lisp當時學的SICP所以被迫用了MIT-Scheme,還沾染了Emacs的惡習(現已改掉),知道了軟體工程中抽象的重要性。
Python體驗到了動態語言的靈活之處,同時也對解釋器出現了水土不服的情況,後很快適應。感覺Python飄逸地感覺很適合我這種喜歡腳本的半吊子。
C++這個就別提了,語法特性多到噁心,但是被逼著學了一些OOP的內容,其實我覺得這部分的內容用Java來學更好。
Java就是感覺非常OOP,在OOP這個角度來說是非常完美的,但是代碼長度太操蛋了,感覺就像一個個拆的過於零散的小零件。
Js類似Python的感覺。
Php不想提。
Haskell,我的天——monad= = 。
最大的感觸就是語言之間是相互學習的(除了C),比如C++和Python都是借鑒了Scheme的lambda。Java和C++之間的互相借鑒等等。
很多時候語言之間某一點特性學不會沒關係,你可能在下一門語言的類似特性過程中突然頓悟了。(Haskell除外。= =!)
學校時期:Basic -&> C -&> Pascal/C++ -&> Fortran -&> 彙編 -&> DBase/Foxbase
工作時期(2009及之前):FoxPro -&> Delphi(Object Pascal) -&> ASP/Perl -&> PHP/JS -&> Java/Python/http://VB.NET/C# -&> Ruby
工作時期(2010-):Scala -&> Erlang/Elixir -&> Haskell -&> Go/Clojure -&> Scheme -&> Kotlin -&> Rust
以上按大致的學習時間順序。
影響力如下:
- C -&> 高級語言之母,初步幫我了解了高級語言的魅力,及某種程度的操作系統知識體系,當時對指針「奉如神明」。
- Foxbase/Delphi(Delphi) -&> 做企業MIS系統如魚得水,感覺生產力很高,認識到開發效率的重要性。
- ASP -&> Web開發登堂入室。
- PHP -&> 真正體會到開源開發語言的能量和魅力。
- Python -&> 至今是我日常軟體工具箱中的必備工具,真正的「瑞士軍刀」。
- Java -&> 真正實踐體系化的OOD/OOP思想。
- Scala -&> OOP搭FP,真的算是自己比較喜歡的方式,很甜。
- Clojure -&> 開發高效,習慣了以後括弧就不是問題。在思維上給了我很多衝擊,明白了一種簡潔之道有多重要,可以說Lisp系的表述能力是最強的,不要因貌似很多括弧而否定它。
- Ruby -&> 一直喜歡Ruby,總覺得寫Ruby是一種享受,很甜。
- Haskell -&> 從Haskell中掌握了很多FP思想,以至於在Scala、Erlang、Elixir等語言的學習過程中都能幫助我消化新的知識點。
總結一下,在開發中,開發效率及語法接受程度這兩點,是我選擇編程語言的首選因素,性能/業務規模支持程度則其次。
小學,Logo,GWBASIC,VB初中,Lava,Pascal,Delphi高中,C,C++大一,C++(一整年Orz)大二,C++,x86asm,Java,Ruby,PCRE,VimL,elisp,Scheme,Racket,ML,Haskell大三,C++,C#,PHP,Vala,Python大四,C++,Perl,shell,awk,R,matlab工作第一年,Lua,C++,放棄C++投入純C懷抱工作第二年到第N年,Tcl,JavaScript,Scala,各種新出現語言數不清了今年,Erlang
當時初中課上寫VB(只是照著敲代碼……連思考都沒有,當時也只懂得改字元串的內容……
大學只學了C++……感覺都白學了→_→
然後就是大一下學期期末的時候開始自學Java,然後應該是打開了新世界的大門,對自己影響最大的是Java。只是C++的基礎概念沒有搞懂的我通過Java反而學理解了……好像王垠的文章裡面說過類似的話(忘了怎麼說了來著)。大概是編程語言這種東西有的是語言特性的,有一些是通用的……
接著就是學習了一下python……
寫了爬蟲又順帶看了一下js……哦對,好像還得算上學習使用linux的各種……php也得算上→_→反正經過hackday以後我就再也不想用php了。。。然後就是在今年4月份的時候看到了冰封的傳教文入了kotlin的坑(′▽`)ノ然後五月份kotlin被谷歌欽定了ヽ(??ω??)?
用過kotlin以後就感覺回不去了→_→
然後就開始學著玩轉kotlin(自己一邊踩坑啊什麼的)然後我才知道用了一年多的Java以及JVM還能有這樣的花樣……最近的話就是這兩天搞了個十分雞肋的插件→_→
以後怎麼樣還不知道呢……不過要好好學習了。舉個不恰當的例子,對我個人來說學了Java就像是數學上發現了負數,然後kotlin就像是發現了無理數……之後的嘛→_→就走一步再說了。
比如先把解析的東西學清楚第一門接觸的是C艹,不過到現在也僅僅是能寫一點的菜雞水平,後來接觸了C艹艹,不過也是僅能寫一點,後來為了這兩個語言交互又去學了C艹/CLI,不過僅僅只是初學者水平,後來為了寫Shader又去學了GLSL和HLSL,不過也僅僅是能寫個反色啥的。
大學時期
學校教的是Pascal,畢業設計用的是Delphi + Access。單純的學習,應付考試,也沒積累下什麼有價值的東西。
收穫:
- 我會用Delphi。(當然簡歷里寫「精通」)
- 我會用Access(當然簡歷里寫「精通」)
- 讓我順利畢業了。
第一個工作(半年)
JSP + Struts + iBatis + MySql,還有一點點JavaScript。IDE最開始用Eclipse,後來轉用NetBeans。第一次實戰,獨立負責一個論壇的開發,過程中自然是一步一個坑,也談不上什麼設計,基本就是按照框架的模板套著網上寫。算是對MVC架構有了基本的認識,而用到的全套技術棧在跳槽之後再也沒碰過。
收穫:
- 養成了愛收集開發資料的好(誤)習慣,方便日(Wan)後(Quan)學(Bu)習(Kan)。
- Eclipse的插件系統好牛!配置起來好麻煩!我愛NetBeans!(之後再沒用過)
- Java不用第三方類庫幹不了活,配置好麻煩啊啊啊啊!!!(之後再沒用過)
- MVC架構啟蒙。
- 我會用上述技術棧啦。(當然簡歷里全部寫「精通」)
第二個工作(9年)
日企。最開始用了幾年Delphi 7,後來轉用C#至今。資料庫一直是SQL Server,用過2000、2005、2008版本。一直只做C/S架構的項目,客戶端WinForm,伺服器端早期WebService,後期WCF。維護公司老系統時也用過VB、ASP。做過一個http://ASP.NET的內部網站,又用了一點點JavaScript,這個時候jQuery已經出現了,驚艷!領導信任,自己有了大量的設計實踐,也就意味著難得的試錯機會,技術水平漲勢喜人。
收穫:
- Java相關資料都刪除,繼續收集技術文章,看著Evernote里2k+的文章,覺得自己受(Wan)益(Quan)匪(Bu)淺(Kan)。
- Delphi牛逼,嚴謹、優雅、高效,各種高大上控制項,跪舔各種大神的迷之代碼。啥?Borland亡了?!
- 微軟全家桶用起來實在是省心,各種圖形界面操作,各種控制項拖拖拖就能用,我愛微軟!
- SQL Server的性能杠杠的,中小型系統用起來很舒服,加上圖形化的工具,調試和優化啥的都是各種省心。
- 技術水準和設計能力都有了長足進步,可以獨當一面了。
- VB這屎一樣的語法,怎麼和我C#比,我愛C#!
- JavaScript這屎一樣的語法,怎麼和我C#比,我愛C#!
- 又學會了一堆新東西。(不過簡歷里不好意思寫「精通」了,自己水平自己有B數。)
- 公司被收購,就這樣有了幾年世界500強的工作經驗(捂臉)。
第三個工作(2年至今)
在日本工作。仍然是C#,資料庫改用Orale了。大部分還是C/S項目,也做過小型的B/S項目。技術棧基本沒有什麼變化。工作上遊刃有餘,更多的在架構設計方向努力精進。隨著Node.js的出現,JavaScript呈井噴之勢,Web和移動開發是趨勢,自己開始決心補上這一課。隨著人工智慧和大數據概念的普及與落地,Python也呈井噴之勢,也動了心思學學。
收穫:
- Evernote里的新文章,自己寫的數量超過了收集的數量,不過收集仍然進行中,畢竟是個優(Jiu)秀(Shi)傳(Bu)統(Kan)。
- 掌握了不少奇技淫巧,用來忽悠新人,樹立我高大上的形象。
- 知道一些第三方控制項的用法,以及為什麼用。
- 開始看得懂一些架構設計好在哪裡。
- 原來VB您是微軟親兒子啊,幸會幸會,但我就是不用你。我愛微軟!
- JavaScript您第二春了呀,恭喜恭喜,但改變不了我對你屎一樣的語法的看法,所以我打算用TypeScript寫代碼。我愛微軟!
- Python有點沒精力學了啊,先簡單鼓搗鼓搗吧。
隱藏收穫:
不知道有人發現沒有,我是個完全沒用過也完全不知道怎麼用C/C++的程序員,每當想到這一點,我就有點心虛……
五年前寫過一篇相關的博客,內容如下:
說說過去的這些事,我有點小懷念第一個語言了:logo,也就是海龜繪圖。。。
2002年吧Logo 語言的原型來自 Lisp 語言,內置一套海龜繪圖系統,很適合於兒童學習。一開始學的時候是小學5年級吧,沒錯就是這種語言中。那時候貌似是開始在WIN95在運行的,各種神奇。WIN95的系統沒有完全離開DOS系統,因此很多問題而且很容易崩潰。啟動LOGO的時候應該是個DOS應用程序圖標,還記得的命令不是很多。有的話好像就rt,fd,lt,bk,home其它的貌似忘得差不多了,當然還有個叫repeat,話說,那個時候不是很喜歡遞歸,現在貌似也一樣。雖然遞歸帶來的好處貌似是有的,不過,遞歸還是挺浪費資源的。那時候也是遞歸用得比較多,循環用得比較少吧。不過,和現在接觸的lisp還真是有些想像。但是,還是不一樣的(Lisp,後面講)。還記憶吧,KTurtle實現的一個KDE桌面上的海龜繪圖。不過,還是都忘了,而且語法還是有區別的,不過比較容易理解的。
BASIC,忘記了先接觸哪個BASIC了,可能是GAME BASIC或者F BASIC(好像是這個名字)。不過,我也忘了。這個是小霸王學習機上帶的。這也讓人想起那時候不睡覺RPG遊戲的經歷,幾個人圍一起。名字,不清楚了,其它有一個主角叫「海倫」好像被石化了,那時候有點吧。就是中吧。然後,也就是在那時候開始玩BASIC,老實說GAME BASIC這 個語言可以寫遊戲,那時候拿的手冊,缺了一頁,一頁啊,關鍵的一頁,有一些重要的函數。中途因為這個中斷了那個小小遊戲的開發,這也是一個超級瑪莉的人物 吧。那時候實現了就是用遙控柄控制人物走啊,跳啊,子彈什麼的,小小的地圖。不過後來,在繼續寫地圖的時候,把機子燒壞了。從那以後三年內就基本沒有玩編 程了。想想那時候寫的這個程序也有一百多行吧。不過,討厭那該死的GOTO語句還有行號,有時候修改代碼的話,就得修改各種行號。。
還有一點是那個卡只是個ROM,唉。。每次關機的時候代碼都沒了,下次開機還得重新敲,所以經常開機著,因此我們就可以解釋那台遊戲機為什麼會壞掉了。後來,學校買了點QBASIC的書,一開始訂的是C語言,後來不知道怎麼改了。因此,C語言後來是到大一才學的。也就是去年咯。不過,那時候這家裡沒有電腦,因此QBASIC應該怎麼樣,而且那台遊戲機也沒有文件操作什麼的。後來,也接觸了VB。
二、三年之後高一開始玩C++,之間幾年的時間基本沒玩電腦了。然後主力都入在數學上了,後來厭倦數學了,那時候也是厭倦計算機的。
C++,接觸C++的時候用的是遊戲編程那個系列的書,C++遊戲編程。沒錯,C++是一種優雅的語言,之前雖然沒有接觸C語言,不過C++程序員和C程序員好像之間的攻擊很嚴重。這我就不是了解了,後來的C學得很情願吧。不過,C++那本還真是錯,感覺。特別是那個遊戲引擎初始化後的,感覺神奇。那時候不是了解WINDOWS 的API,不過現在也不了解,寫的東西不多,泛泛的了解整個遊戲是怎麼開始的。那時候結識了那個叫DEV C++的IDE。一個輕量級的IDE,不過好像很久沒有更新了。
JAVA,初識JAVA也是因為那個系列的書,那時候看了些JAVA的示例,英文單詞有點多,然後要敲的東西也很多。後來,再次接觸到JAVA這種語言的時候是教務系統的代碼。後綴是JSP,一開始還 以為是JAVA的分支。。。JAVA完全是辛苦了你的手指頭的語言。而且,還要看SUN公司的臉色,應該是ORACLE的埃里森的臉色。同時受制於平台,雖然說JAVA說是多平台的,可是各平台上的虛擬機總有差距的。QT也是如此吧,但是,還好些。、
Visual Basic對VB的印像一直很不好,首先是依賴於WINDOWS的,或者說是微軟公司的。其次,他的快速開發,確實是一種不錯的開發。但是,把程序的一個個功能直接用拉拉推推的滑鼠操作總是感覺怪怪的,而且一開始接觸的時候不知道在哪裡寫代碼。無語掉了。。。不過,總的來說還算可以的一種語言吧,至少開發個GUI很快。QT也可以,而且是跨平台的。至少在我的openSUSE、Kubuntu(刪了)、Windows都能運行,至於跨平台的話,還是得編譯多次。VB跨平台也是可以的,至少可以在多個WINDOWS版本嘛。
PHP,PHP就了解得不是很詳細了,一開始接觸的時候是因為一個論壇,那時候有人提供了一個空間和給我,然後我試著修改了一下其中的代碼,感覺好像壓力很大,因為了解不多,而且了解C/S什麼的,也不了解各種資料庫。後來,是上學期吧,繼續了解一下,開發動態網頁還可以吧,但是開發效率高,或許沒有深入了解吧。而且,最大的問題是要自己一個個在WIN在架起來環境壓力很大的,我沒有成功過。後來用的是XAMMP,一個集成的PHP開發環境。不過,總的來說應該比一些語言快了許多,不過,這個是動態網站語言的開發首選,因為無論是*nix還是win的伺服器上面都是可以運行的。廉價的解決方案。Linux+Apache+MySQL+PHP,也就是LAMP。。。。不過,用nginx代替apache的選擇可以的。
彙編,彙編就是一種蛋疼的語言了。在高四的時候想了解整個操作系統是怎麼工作的時候,才接觸到這種語言的。買的是IBM-PC彙編的書。一開始覺得還算比想像中的簡單些。但是後來一遇到循環,還有其它各種東西的時候開始頭大了。一個簡單的循環足夠讓我們寫相當從時間了,於是我現在也忘了,彙編語言的HELLO WORLD是怎麼寫的。除了一開始接觸的計算機操作系統用了一部份,還有後來的 Orangle"s 一個操作系統的實現 也用了很彙編,還有的話,C語言是這書上看到的,不過直到大學才學的。彙編如他所說執行效率算是最高的,但是開發效率是最低吧。
大學,接觸語言多了,多數都泛學吧,很多像HTML之類的,容易就可以玩了。。
C語言應該是最開始時候接觸的語言了,辦法計算機課上教的,雖說上課都是睡過去的,但是總得來說還可以吧。那時候借了本誰的書,花了一星期看完的,然後就上課睡覺了 ,一直不是很習慣清華大學出的書。計算機的話,首選國外O"Reilly出的書,確實很不錯的選擇,就是帶著個要麼是珍稀動物,要麼是虱子什麼的封面。國內的外一般首選機械工業出版社的,博文視1點的書也不錯,然後是電子工業出版社,或者人民郵電出版社的。因為這幾個出版社都是翻譯國外的一些比較好的書,還有的也有一些很不錯的國內的作者寫的書。C總的還是忍了,無論是LINUX上的開發,還是單片機上面的那些都用得挺多的,用作者的原話來說這是一個系統開發語言。這也是多數人接觸的第一個語言,我話,估計就第七、八種了。看來,再次OUT了。。。
*ML/CSS 網頁製作就是各種神奇。還有ML,取了個這麼好的名字。。Makeup Language標記語言,就是各種&
Javascript,和java類似的是,java是瀏覽器大戰時代而走向巔峰的,javascript則是因為web 2.0而受到越來越多的重視。javascript可不是JAVA的分支,只是名字得有點相似罷了,JS總的來說和C有點相似,JS是面向對像的。。就是重多區別中的一個。JS的用處就廣泛了,比如註冊時候用紅字什麼的提醒你,哪裡錯了。還以前討厭的彈出廣告什麼的,總之,用處大得很。比如QQ空間就用得多了,Ajax,熟悉吧。。。還有谷歌地圖、WEB QQ等等。JQuery 是一個輕量級的庫,開發網頁的時候可以考慮。
SQL,資料庫語言,帶了個L,唉。不過SQL在某種方面像是解釋型語言吧。就是輸入幾個字元然後再敲個回車,不過資料庫的用途還是挺大的。或者sql文件等等,不過各個產商之間還是有差異的,最好的應該是Oracle公司的,畢竟是第二大獨立軟體公司嘛,但是用的還是MySQL,其一是免費的,其二是用得廣泛吧,不過MySQL好像也在甲骨文旗下了。。一開始接觸的時候是教務系統的代碼。。。
然後就接觸(僅僅是稍微了解一下基本語法和用法而已)了許多開發網頁用的語言了。。
Python,Python確實不錯,挺適合的,至少相比於其它語言可以解放一下你的雙手,還有你的時間,當然對於計算機的時間來說會有點小浪費了,不過,總的來就說是值得的。開發GUI的時候也挺不錯的,用下QT什麼的。不過,問題好像有的,版本問題吧,應該各個語言都有的。然後很適合當系統管理員的第二語言,在手機上玩python也是個不錯的選擇,至少在我的N72上還是勉強可以用的。至少在計算數學問題上也是個不錯的選擇,同RUBY一樣,RUBY在手機上玩編程時候,計算一些數學問題時候也是可以的。同時,在SYMBIAN平台上的話,也有GUI,當然不是跨平台了,不過PYS60項目好像停止了,之前試著聯繫了其中的幾個作者,但是都沒有迴音。自己從那些代碼開始會成為一個問題的。
Python作為WEB開發的時候,用django作為 web framework也是個不錯的選擇吧。用得挺多的,而且挺方便的。我記得手機上的PY好像也是刷QQ遊戲什麼的,用挺多的。一開始了解的是GAE,然後時候好像沒用過django,用Python作為GUI玩時候是暑假,老實說還是很划算的,還有的話,配合shell在linux下面還是可以很給力的。
*shell,就說是shell了,不知道這算不算,不過也是依賴著相同的能力。然後,*nix下面用得比較多,就是一個環境。
Perl,處理文本很是強大,所以一開始的時候是幹嘛的,我就忘了,也懶得查了,一個語言學家設計的,處理文本很強大吧。所以啊,和cgi配合作網站用的也挺多的。反正,我借的那本書講得更多的是正則表達式->神器啊。。。所以,不想理解這個什麼複雜的正則。
之間還學了很多語言但是不是很了解吧。比如Lua,C51、VHDL。。不想說這個,感覺和很多語言相似吧。
ADA,這個名字取得不錯,很像我的名字的本地方言。美國國防部開發的,結構算是嚴謹的,因為用作嵌入式設計的。以後還會繼續學的。
Lisp,人工智慧語言。出於使用Emacs的需求開始了解這個語言的,感覺,這個語言就是罵人很方便的。比如.
所以,這也就是這個語言智能的地方了,用於人工智慧領域確是個不錯的選擇,還有各種神奇的東西。
(defun double(x)
(* x 2))
這就是一個簡單的LISP的函數。當我們在clisp環境運行的時候輸入,
(double 2)結果出現4了。。有著很多神奇的括弧,什麼的。。正在學習,基本語法差不多了解了,還少本語法書呢。
就差不多的那些語言了,學得不精,都是因為興趣才學的。
原文地址:Phodal - A Growth Engineer
推薦閱讀:
※C printf #用法?
※windows10 為什麼不把POSIX完整支持了?
※為什麼多數外掛都用易語言?
※對心理學專業者來說,哪些編程語言是應該學習和掌握的?
※CPU處理無條件轉移指令時,為何實際上要清除流水線?