程序员的自我修养、高效实践和自动化
[程序员的自我修养]
程序员,只是个职业而已,不比其他职业高贵,也不比其他职业低贱。这里不谈程序员自我修养的微观实践,只从宏观的角度谈谈程序员的道路选择。
我这里说的程序员,是指广义的,IT行业中常年与编码打交道的那么一群人,他们的称呼有可能为:程序员、软件工程师、高级软件工程师、架构师、系统管理员等不一而足。
两个典型的场景:
- 国外四五十岁,甚至头发花白的程序员依旧在第一线编程,对他们,我们不由心生尊敬
- 如果有看到国内这样的人,恐怕很多人都是内心充满鄙夷:怎么混的这么惨,还在写程序?
也无怪乎人们这样想,其实这样想的人心中隐含的有朴素的价值判断:老外那么大年龄的程序员收入多高,国内的这么大年龄的还在编程序,收入又低又没前途。
确实对于目前国内的情况来说,好像摆在大龄程序员面前的就只有两条路,要么升职转向管理要么转行不干程序员了,否则就只有留着被鄙视。
的确悲哀,很多有才华的程序员不能在专业的道路上继续专精,很是浪费。不过这就是现实,服从现实还是遵从内心,这是个问题。
[程序员的高效实践]
作为一个程序员,也当每日三省吾身,努力地让自己成为一个高效的程序员,不断地在细节上精益求精,切实地消除浪费、提高效率。
在《Programming Perl》一书中,Larry Wall说:懒惰、傲慢和缺乏耐性是程序员的三大美德,其中的两点都与程序员的效率有关。只有高效才能减少需要完成的工作量,保持懒惰;只有缺乏耐性才不会浪费时间去做本该计算机做的事,保持高效。
要做到高效,根本上是在思想方法上下功夫,但是具体实践细节也不容忽视,下面我列出一些比较有效的实践:
- 首选键盘而非鼠标,文本编辑用vi或emacs,手不用离开键盘
- 花点时间学习你手边常用的快捷键,如windows的、word的、ide的
- 减少重复,用自动化脚本代替你的工作,windows下可以学习AHK
- 少用长长的树状列表,多用搜索
- 保持清洁
- 保持简单
- 用好正则表达式
- …
[程序员的自动化]
为什么是程序员?
我想不出还有什么职业比程序员更接近计算机,让机器代替我们工作,让我们享受自动化带来的快乐。
自动化的好处?
自动化最少能带来下面两个显而易见的好处:
- 减少工作量,减轻重复劳动
- 减少手工工作出错的机率
把什么自动化?
我们无法把每件事都自动化,所以先把事情分分类[1]:
- 只做一次的事情:既然只做一次,我想就没太大必要自动化,要做成自动化会比直接做事更花时间
- 重复做的事情:只要有重复就一定能找出其中共性的部分,马上把它抽取出来,开始自动化
如何自动化?
可以考虑按下面4个步骤来进行:
- 手动去做一遍:首先要确定你可以手动执行此流程,或许你可以写下此流程,这样一是确保不会遗漏步骤,二是可以强迫你好好再想上一想
- 编写每个步骤的脚本代码:把每个步骤转成由命令行或小程序组成的脚本,并单独测试每个步骤,确保每个步骤的脚本都是正确的,有些参考资料[2]可以帮到你
- 把所有步骤的脚本合在一起:如果在这步能够渐增式合并的话,可以将最终脚本的错误率降至最低
- 最后别忘了测试:写个自动化脚本即使我们用不到TDD[3],最后的测试还是不要忘了
自动化脚本举例
参见我以前所用的一个oracle数据备份脚本的片段:
day=`date ‘+%Y%m%d’`
su – oracle <<EOF
rman target / nocatalog;
run {
allocate channel t1 type disk;
sql ‘alter system archive log current’;
backup format ‘/back/rman/last/arch/arc_%d_%T_%u_%s_%p’ archivelog all delete input;
release channel t1;
}
exit
exit
EOFmt -f /dev/rmt/0mn eod
cd /back/rman
tar cvf /dev/rmt/0mn last/arch/arc_$day_*
注释:
- 国外也有人用四象限法把事情按是否重复和简单还是复杂分为四类
- Windows下可以参考《Win32 Perl Scripting》,Unix下可以参考《Advanced Bash Scripting Guide》
- TDD:测试驱动开发,Test-driven development,利用测试来驱动软件程序的设计和实现,极限编程中倡导的一种程序开发方法



最新评论