最近,经常有同行或刚入门的Linux学习者在问同一个问题:作为运维人员,到底需不需要学习一门编程语言?如果确实需要,又该从哪一门入手?
这个问题,其实可以从两个不同的角度来剖析。
首先,在当前大数据和云计算快速迭代的大背景下,系统运维人员如果完全不懂开发语言,确实会寸步难行。业务系统越来越复杂,线上服务器规模不断扩大,重复且繁琐的操作只能依赖脚本(自动化的本质也离不开脚本)来完成。单纯靠人工去扛,根本不现实。因此,学会一门能批量完成运维任务的语言,已经成为刚需。
那么,具体应该选择哪一门语言呢?
答案并不简单。可选的方案有不少:Shell、Perl、Python、Ruby…… 但有一点很明确:每一位Linux运维人员都应该熟练掌握Shell(sh或bash),同时至少再掌握一门高级语言,比如Perl、Ruby或Python。至于具体选哪一门,其实并不重要——任何语言都是为运维工作服务的,只要能够高效完成任务,你个人喜欢哪一门就用哪一门。当然,对于初学者来说,优先选择当前企业使用最广、招聘需求最多的那一门,更容易打开局面,毕竟没有哪家公司会为了一门冷门语言去改变自己的技术栈。
那么,初学者是不是应该一上手就扑到语言学习上?这一点要慎重。任何语言,尤其是Shell、Python这类与Linux系统深度绑定的,如果对Linux一无所知就盲目去学,无异于盲人摸象。正确的学习节奏是:先打好Linux基础,熟悉常用命令和原理,再回过头来学语言,你会发现水到渠成,难度直线下降。
Shell作为运维标配的系统语言,是所有运维人员必须啃下来的硬骨头。它能够将日常工作中大量的重复劳动自动化。但Shell的根基是系统命令——只有理解了命令的原理和用法,Shell脚本才能真正跑起来。市场上其实有不少这样的案例:有人接触Linux好多年,却连基本的for循环、while循环、if条件判断(带[[或[)、位置参数$1/$2、$*、$@以及case语句都用不利索。这些人迟早会为当初没有早早攻克bash而后悔。
又有人问:我Shell已经很熟练了,可还是找不到工作,很多公司都要求会Python或Ruby,我到底要不要学?
这个问题需要分两层看。从员工的角度来说,企业招人是来干活的,只要任务能保质保量完成,用哪种语言实现并不那么重要。有些公司出于传统或统一管理的需要,强制要求使用某一种语言,那属于企业环境问题。如果每个员工都完全迁就企业,那岂不是得把所有语言都学一遍?这显然不是常态。翻看招聘信息就能发现,大部分岗位的要求是“熟悉Shell、Python、Perl等任意一种”,语言要求相当宽泛。许多大型公司内部都有专业的任务调度管理平台,平台上可以运行任何语言写的运维任务,所以你完全不必为“该学哪个”而纠结。
然后,从职业管理的角度来看:真正精通其中一门语言,并对其他语言有所涉猎,这才是最大的竞争力。哪怕只是读过几本相关语言书籍的前几章都算数。真正精通一门语言意味着你吃透了它的运用方式和底层机制,这样在架构更大规模的系统时,才能做出合理的设计决策。原因很简单:如果你想进入一家使用不同语言的公司,“成为愿意学习不同语言的专家”远比“只想学一门潜力大的语言”或者“对多门语言一知半解、没有一门真正精通”要重要得多。
