我说个观点,linux现在其实是重视程度不够。
看下应用,我是做java的,就以这个来举例。java程序被打成jar包,一般都是被部署到linux上运行,一些分布式组件,比如redis,kafka,或者nginx,都是部署在linux系统上,而且可能会以集群的方式部署。Docker工具以及docker容器,还有k8s,也都是部署在linux机器上。
相比之下,程序员虽然是在Windows上开发代码,但开发成的结果,以及运行项目的基础设施,比如分布式组件或数据库,不是部署在windows上,而是linux上。
为什么会这样,本人不做进一步说明,但事实上确实如此。但本人平时也是做技术面试官,在问求职者,你们的项目是怎么部署的?或者再细问,你们的项目是部署在哪个操作系统上的?回答说项目部署在windows平台上的,不是少数,甚至不少应聘高级开发岗的求职者也会这样回答。
但是,在java方面,如果要做到资深开发或架构师级别,一定得熟悉各种linux的操作和底层,比如得用命令看linux日志文件,同时分析日志排查问题,或者部署各种模块或组件,或搭建集群,但是,这些linux技术对大多数只会掌握增删改查的初级开发来说,平时可能甚至没实践过。
初级开发在程序员群体里占的比例不小,大多数初级开发不熟悉linux技术。所以可以这样说,虽然linux是程序员在升级到资深开发和架构师道路上所必需的技术,但linux的重要性其实没被广大程序员所认可。
那么具体来说,程序员应该掌握linux方面的哪些技术呢?其实也不难,不用去看源码。
1 熟悉linux操作文件的基本命令,比如tail或vi等,要通过这些技术,找到linux里的日志文件,并能通过搜索关键字,找到关键日志并排查问题。
2 能通过命令,在linux上关闭或启动程序,或者需要具备一定sh文件的编写和调试基础。
3 最好还能通过命令,在linux上搭建redis等集群,或者是能通过命令修改某些配置文件。
我不否认,其实这些技术应该是运维的工作,但事实上很多资深开发或架构,平时也干这些工作。很多初级开发认为平时用的技术够用了,不去主动接触在linux上部署运行维护模块和组件相关技术,那么这样可能就一直停留在初级级别了。
其实linux也能往深挖,比如通过看linux源码,调试分析linux通讯流程,但这些平时开发用的并不多,哪怕架构也不大会用这些技术。
最后做个总结:平时程序员可能未必会关注linux技术,但等到要升级,又不得不学习和使用linux行管技术,所以linux不能说被重视,而是可能被广大程序员所忽视的。
如果大家想进一步了解写简历和面试方面的技能,可以关注我。