我从最开始学习编程的时候,就是使用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内核的编译器。 而许多使用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做的。