运维学编程可以怎么用

在DevOps大行其道的今天,几乎每个运维工程师都被要求会编程,至于写出什么来,怎么写也没个具体的说法,甚至学哪种语言也没有要求。导致大量的运维“徜徉”在编程的海洋里,被各种编程语言和大师们的教学视频洗脑了一年又一年,但是始终靠不上自己的工作,最后拖延到放弃,这是我看到大部分人的真实学习经历;直到最近刷到一则新闻:我大Python加入到二级考试科目里面了,这是个与时俱进的好事,起码让大学生在训练编程思想之余,可以做点自己想做的应用程序,开发个小工具之类的,尤其对人工智能领域来说有非常大的贡献;编程能力要从小开始培养,每个人都理解计算机算法; 按照算法来行动, 以便人工智能更好的预测人类的行为。

翻越愚昧之山

对于运维学习编程, 一定要有目的性的学,大片的刷教学视频是没用的,国外名校的也不行!什么是有目的的学编程, 在工作中你会有偏重技术的重复工作,偏向管理的流程工作,最后还会有个什么总结你做了多少事情的kpi,这些都是可以编程化的,就是说把你的工作经验,对自己工作的理解转化为程序,这个过程你充当了产品经理的角色,很多人“学不会”编程多数是卡在这一步上面无法转换, 太难了!其实方法很简单,第一个程序在你想到需求,就开发什么功能, 不必求全,不必考虑界面的美丑,不用过多关注语言特性和性能,你要写出来能够解决问题的程序才是第一目的,哪怕只是开发个自己的记事本,用来记录你的工作,慢慢的新的需求就会推动你继续完善你的程序。

大程序小做,刚开始写程序最大的障碍是你无法转化一个庞大的需求,没关系,从小的细节入手,比如你要写一套整合所有云平台的管理界面,可以先选择一个云平台,再精简到只开发查询云主机数量的需求,再精简到连接到指定云平台,最后简化成怎样连接到云平台,以至于变成怎样写一个请求url,获得返回值的小功能;这回会写了吧!

编程思维你在学shell的时候已经训练过了,选择编程语言要基于用途来;还有很多人在选择编程语言的路上走进了死胡同,迟迟不会编程的原因就是没有一门适合自己的语言。听了各种高手show语言特点之后更不敢选了,每天关注排行榜,这也是一个误区,初学编程还是一个目的,解决你需要解决的问题,这方面我不想过多讨论, 如果需要我给建议,建议你选择Python,不是因为简单,是因为模块多,可以直接调用,减少你手写的bug的几率。那有哪些又是我常用的编程语言呢?

1. C&C++用于调试程序和定位问题,比如strace追踪有哪些系统调用的时候,你能知道程序在系统层都做了些什么,别人在解释操作系统的工作原理的时候,可以通过代码给你看内核都干了些什么

2. scala & Python, 在机器学习的大量库、函数方面,python提供了最丰富的实现,tensorflow、scikit-learn等等,不用重复造轮子,spark实现了强大的 分析和机器学习生产环境,也解决了你开发高性能又高稳定系统的麻烦。

3. lua,openresty+lua的组合让你实现简单的http接口,强大的异步接口,简单的开发过程,爽到不行

穿过绝望之谷

编程没有速成,选择一种语言深入理解才是王道;在逐渐丰富自己的代码和程序的同时,可以积累各种操作系统、网络、算法相关的库,做到开发新的程序,能够自己分解成函数(方法),知道实现自己的方法需要什么函数的时候算是对这门语言入门了,接下来就要打磨自己对语言特性的理解,写出更有效率的程序,追求更已读的代码逻辑。

自顶至底和自底至顶,在不断学习编程的过程中,你会受到各种外界干扰,比如:自己实现了某个功能,炫个技的时候各种大神会跳出来,告诉你怎样更优雅的编程, 让你陷入困扰, 是不是要先学习数据结构和算法,是不是应该先恶补一下操作系统原理,tcpip协议,甚至是不是要从高数开始学起。我要告诉你大神说的是对的,但是作为半路出家的半吊子程序员,应该更关注解决问题,学习问题涉及到的算法、操作系统、数学知识,因为系统的学习基础知识是一个更长时间的积累过程,例如你用到python打开文件的系统调用,想了解细节,会发现调用了open()系统调用,钻入操作系统层面发现,原来还有VFS这种东西,读文件会有buffer、cache,要懂内核、懂内存读取原理, 这些学会了发现居然还有网络IO可以学,在你学会了这些东西,发现读懂他们要学会驱动程序开发和芯片的原理。这是一个远远超过一门语言的知识量,这些东西不仅不会提高你的编程能力,还会让你陷入无休止的知识黑洞。这和自顶至底和自底至顶的编程方式很相似, 适可而止的学习底层细节对编程是有帮助的,但是深入的理解每一个技术细节会让你胆怯。这里需要解释的是这只是一种学习的方法,你欠下的技术债最后是一定要还的,我只是认为这样做会让你更快把编程技能用起来。

走向开悟之坡

通过框架来丰富编程的能力,在经过一段时间的磨难,对,是磨难之后,开始容纳更多功能进来的时候,就要考虑使用框架来丰富你的程序了,框架在维护代码时起到至关重要的作用, 你无法想象当你写的web程序因为浏览器不支持,需要改多少代码,简直比重写一遍还痛苦;通过框架除了可以引入新的功能外,可以进一步规范你的代码,同时也可以学习框架的源代码,也是提升代码能力的一个途径,记得我在刚学python的时候就把pssh ansible代码扫读了一遍,从里面学习了很多很实用的写法,是个快速提升自己的过程。

想清楚在写而不是边写边改,想清楚这件事一定在你有一定的编码能力之后再做,因为在你没有形成这门语言的思维习惯的时候,是想不清楚的,没法自顶至底的分解功能。所以要放在后面再培养这种能力。为什么边写边改不行了呢?因为在初学的时候,不清楚要使用什么函数,什么方法,要根据上下文修改自己的输入输出。当你有受到大量的训练之后要明确自己要实现的功能和需要满足的需求,没必要为了十几个数的加法而使用多线程技术,这些用复杂功能做简单事情的人多半是为了演示或练习,绝不是解决问题。

你该重构它,不是继续维护那份烂代码;当你的系统足够稳定的时候,就该考虑重构它了,回头看看自己初学时的代码,能不能用更有效的算法来解决,自己当初写的冒泡排序,能不能用sort()来替代;以前因为自己编程能力所限,增加的系统各种限制,现在是否能解锁新姿势了;这些是从功能和提升效率上来说的,还有可读性是不是可以优化,重复使用的代码是不是可以提取成一个方法复用,如果有可能你可以重构整个系统,让它的框架更合理,代码更易读,你会从重构中学会更多东西。

以上就是我从运维工程师的角度去学编程的一些方法和建议,每个人都有不同的学习经历,学习方法;我无法保证适用于每个人,但愿对你的学习有帮助。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171218G0CTMD00?refer=cp_1026

相关快讯

扫码关注云+社区