最近有人问我:系统管理员该学什么语言。
如果你是一名Windows系统管理员,那么答案很简单:该学PowerShell。
如果你是Unix/Linux系统管理员,答案就比较复杂,因为有更多的选择。我不想引发一场“语言大战”,而是想说:
我认为,每一个Unix/Linux系统管理员都应该知道外壳程序(sh或bash),另外还要知道Perl、Ruby或Python当中的某一门语言。至于学哪一门语言,并不重要。
图片来源:O'REILLY编程大师
在我看来,上面这番话比我认为Perl、Python或Ruby哪门语言更优秀或者哪门语言有更多的职位空缺(或者使用其他任何标准)来得重要。容我细细解释:
学习bash确实蛮重要,因为bash对于你许多方面的工作来说极其重要。无论是调试/etc/init.d脚本,还是编写一个小型包装器。每一个Unix/Linux系统管理员都应该知道:如何执行for循环、while循环、if with [[或[、$1、$2、$3... $*和$@以及case语句,还要明白变量代换是怎么一回事,如何处理简单的命令行标记。
只有掌握了那些基本的东西,你才能继续深入一步。我惊讶地发现,我结识的不少人接触了好多的Unix/Linux,却不会用bash来执行循环;他们迟早会为没有尽早学习bash而自责不迭。
选择Perl、Python还是Ruby,这通常取决于贵公司已经在使用什么语言。Ruby和Python最近变得比Perl更为流行,所以许多公司重点关注Perl。如果你使用Puppet,那么熟悉Ruby将有助于你熟练运用Puppet。
我在谷歌工作,这家公司很看重Python,于是我进入谷歌后学习了这门语言。
对于自1991年以来就熟悉Perl的本人来说,这的确是一次不容易的学习过程(最近有人告诉我Perl在1991年还没有出现……我建议他不妨查查维基百科)。
从职业管理的角度来看,我认为真正擅长其中一门语言,对另外两门语言有所涉猎,这至关重要;哪怕这意味着仅仅阅读介绍这些语言的书籍的头几个章节。
真正擅长其中一门语言意味着,你深入了解如何运用该语言,深入了解该语言在“底层”是怎么一回事,那样你在设计更大型的程序时,就能作出更合理的决策。
我之所以把这个问题上升到职业管理问题的层面来讨论,原因在于,如果你想受雇于一家使用不同语言的公司,“成为愿意学习不同语言的专家”远比“成为只想学习大有潜力的语言”或“对这门或那门语言一知半解,但是从来没有耐心把某一门语言学好的人”来得重要。