我從最開始學習編程的時候,就是使用Linux。雖然我只有三年的編程經驗,但是我覺得,使用Linux編程,真是一件令人心情愉悅的事情。
C語言
我接觸C語言,僅僅是大學時的一門必修課。而C語言的簡單、結構化和高效也使它從誕生至今四十余年,經久不衰。
C語言算得上是一門成熟完善的面向過程的編程語言,這主要體現在兩個方面:
一、完善的條件分支結構和截斷求值特性。這在許多基於函數來做條件判斷的編程語言上是無法做到的。
二、支持遞歸的函數調用。C語言用棧的方式完美解決函數遞歸調用的問題。
對於Linux,C語言更是無比重要。Linux內核完全是用C語言編寫。其它C語言編寫的程序還有shell環境、大量CLI工具,著名的跨平台GUI庫GTK,著名腳本語言PHP的解釋器等。
C++
相比於C語言,C++添加了OOP、模板編程等高級特性,使C++獨立於C語言形成了一門新的程序設計語言。它在僅增加少量性能損耗的條件下,大大增加了開發效率。Smalltalk、C++等語言的出現引領了設計模式的一次最大變革,也使得軟件工程等相關學科有了一次質的飛躍。
而C++的應用領域相比C更加寬廣。如今最優秀的跨平台圖形界面庫,Qt,就是C++庫。而我,准確地說,主要是一名Qt程序員。
C語言與C++之爭
Linux之父林納斯·托瓦茲、圖靈獎得主尼克勞斯·維爾特曾經批評C++。對於此事,我有一些自己的看法。
我認為,C++絕對可以稱得上世界上最難的編程語言。曾經有位學長和我說,一位C++程序員想轉行到其它編程語言是非常容易的,但是反過來卻異常艱難。學習C++是艱難的,但是掌握C++以後,收獲卻僅不止C++本身而已。因為C++真的過於強大了。
shell
shell可以說是Linux系統上必不可少的工具之一。在圖形界面如此流行的今天,shell仍然憑借著它的強大、方便、快捷發揮著無可替代的作用。一些沒有安裝圖形界面的主機,就是靠shell來維護的。而bash、zsh、csh的出現,極大的豐富了shell的語法。加上一大批CLI工具,可以說,沒有shell完不成的任務。
GNU構建工具鏈
感謝四十前來,世界頂尖的黑客們創造並發展壯大了Unix操作系統。而Linux將Unix的優秀設計全部繼承下來,同時,也繼承了大量簡單好用的工具。
對於C/C++程序,在不同操作系統上編譯、移植是一個非常復雜的過程。而GNU構建工具鏈提供了一個強大的解決方案,只需要幾個簡單的命令就可以完成構建過程。
GNU構建工具鏈包括GCC、make、autoconf等工具。GCC是一個強大的編譯器,可以編譯十幾種編程語言。而它提供的大量擴展被Linux內核使用,導致現在GCC是唯一一個能夠編譯Linux內核的編譯器。www.linuxidc.com 而許多使用Linux的服務器如此穩定、高效地運行了十幾年,也證明了GCC的強大。
make是一個自動解決源文件依賴關系的工具。用戶只需要編寫一個簡單的Makefile,make工具就可以依靠時間戳來判斷出哪些目標需要重新構建。而且,真正的構建過程交給shell完成,這使得對於熟悉shell編程的程序員,編寫Makefile變得十分簡單。
lisp
lisp是一門古老的語言,歷史甚至可以追溯到計算機出現以前。它為人工智能的發展做出了非常大的貢獻。而lisp的語法也對之後產生的編程語言產生了深遠的影響。例如,函數作為第一類值、閉包等概念影響到了之後出現的Lua、Javascript等語言。
Java
Java在Linux上的發展一直並不被大家看好,主要是因為Java的封閉態度。sun jdk一直不是自由軟件,而openjdk在許多特性上支持不足,使得Linux環境中沒有一種完美的Java編譯器。
3P
Linux上的3P指的是PHP、Python、Perl三門編程語言。
先說PHP。PHP的語法非常簡單,而且和C語言很像。這使得PHP的入門門檻大大降低。曾經有一家公司在招不到PHP程序員的情況下,招募一大批C程序員,僅提供3到5天的培訓,就正式上崗了。PHP對CLI和GUI的支持很差,但它在網站編程上的專注,使得它在Web領域取得了非常大的成功,也成就了著名的LAMP框架。
Python可以說是OOP語言中非常另類的一門語言,而且它的諸多語法特性,讓我覺得它是僅次於C++的第二難學的編程語言。但也正是這些語法特性,使它的功能非常強大,CLI、GUI、Web,無所不能。GUI領域,Python有PyQt等強大的庫;Web領域,國內著名網站“豆瓣”就是用Python做的。
我對Perl的了解非常少,傳說它在系統管理上發揮非常大的作用,正在一點點占據C語言在CLI中的份額。而且,Perl風格的正則表達式也稱做經典,被很多編程語言引用。
我了解的編程語言基本也就這麼多了。由於Linux的開放態度,Linux上優秀的編程語言層出不窮,百家爭鳴。