回忆一下从业这些年花时间学过的技术,做一个阶段性的总结。

首先写一些编程方面的东西。虽然我并非一个程序员,但是我觉得既然是在这个圈子混饭吃,一些编程技巧总是少不了的。

这也是因为以下两点:

1.能够获得与计算机对话的一种手段,在找不到任何可用工具的时候可以自己制作趁手的工具。或者让计算机帮助自己完成一些重复性的工作。这就好比一个整天和外国人打交道的工作如果不能流利使用外语只能说几个单词或者靠手比划是很痛苦的。

2.能够阅读一些开源系统的代码,理解这些系统关键部分的作用原理。这也是一个资深的系统管理员的看家本领。


对于前者来说,我需要一个表达能力非常强的能够非常方便的进行快速进行开发的语言,不需要非常快的运行速度,不需要对这个语言背后的运行机制非常清楚,能够随心所欲地完成工作即可。

最初我选择了perl。但是perl的语法风格真的是太糟糕了。整个文件充满了各种稀奇古怪的符号,写完了自己都看不懂。接下来我试了下python。一旦粘手,就放不下了,用起来非常舒服,而且代码异常整洁和优雅,可维护性极强。

python是一个多范式的语言,既可以使用函数式式编程做开发,也可以像传统的面向过程语言的方式开发。也可以用面向对象的方式开发。

但是我现在比较倾向面向对象的开发方式。尽管python动态语言的特性天然的拥有多态性,但是面向对象的方式还胜在更好的模块化特性,而且这也是python天然的数据结构的表示方法。


另外,很多系统管理员都要求要会使用shell编程,而我并不是很喜欢这个东西。

因为

1.无论是linux bash,还是windows的cmd 和powershell,语法都非常难看。尤其是bash,充斥着if-fi,case-esac这种怪异至极的东东。让人浑身难受。

2.shell无法在不同类别系统中移植。

3.shell作为胶水语言要依赖其他工具,而且shell很难进行大规模开发。

4.很多人都用shell因为shell对于某些工作非常简单和方便。但是考虑到并不是一直在用,我宁愿把这个任务交给python来做,能够让自己有时间练习一下正常的编程语言。

当然,shell我还是会去使用的,只要不涉及分支循环等逻辑判断,不是作为一种编程语言,而是一个批处理的管道工具。


对于后者来说,我还是需要一些c,c++以及汇编的知识。虽然我几乎不去写c和c++代码,但是还是必不可少的需要掌握这方面的知识。

因为:

1.相当多的重要系统都是由c或c++写成的。想要去看代码只能看到c。遗憾的是,c语言阅读起来是非常困难的。各种宏定义,类型声明以及全局变量分散在各处。而且c语言很多地方为了实现一些更加高级的功能会有复杂的类型转换和多级指针,非常混乱而又难以理解。


2. 作为静态编译语言,c语言和汇编有着非常直接的一一对应的关系。非常适合用来了解机器语言和高级语言之间的联系,掌握一些编译以及计算机原理的重要概念。也就是说非常适合拿来学习。这也是为什么c语言非常难以被初学者掌握的原因。因为有太多的隐藏在底层的概念和原理需要知道,无论是内存的分配方式,还是编译和连接的技术细节。这些东西很多即使是专业程序员,大部分人也不会想去关注的。因为相当多程序员和技术宅不同,技术只是一个赚钱养家的工具。枯燥的底层技术细节不需要关心,高层的算法中深奥的数学原理也不需要去理解,那些大牛们已经把算法封装好了,知道api什么意思,直接拿来使就ok了。大部分程序员所能左右的只是自己的业务逻辑,他们更关心如何复用代码,减少自己的工作量。以最少的bug更快完成开发任务。不知道这是幸运,还是不幸。