程序员A:借我1000元吧。
程序员B:给你凑个整数,1024元吧


 


擅长抽象思维、动手能力强、追求效率、喜欢自动化、愿意持续学习、对代码质量有很高的追求等等,这些维度对优秀的程序员都有其合理性,不过又都略显抽象和主观。

习惯使用命令行可能只是表象,其背后包含的实质才是优秀的程序员之所以优秀的原因。


命令行如何提升效率

《UNIX编程环境》,和其他基本UNIX世界的大部头比起来,这本书其实还是比较小众的。

简而言之,HOC语言的开发过程需要这样几个组件:

词法分析器lex

语法分析器yacc

标准数学库stdlib

另外还有一些自定义的函数等,最后通过make连接在一起。

每个工具只做且做好一件事

工具可以协作起来

一切面向文

下面是书中的Makefile脚本,通过简单的配置,就将一些各司其职的小工具协作起来,完成一个编程语言程序的预编译、编译、链接、二进制生成的动作。

YFLAGS = -d

OBJS = hoc.o code.o init.o math.o symbol.o

 

hoc5:    $(OBJS)

    cc $(OBJS) -lm -o hoc5

 

hoc.o code.o init.o symbol.o: hoc.h

 

code.o init.o symbol.o: x.tab.h

 

x.tab.h: y.tab.h

    -cmp -s x.tab.h y.tab.h || cp y.tab.h x.tab.h

 

pr:    hoc.y hoc.h code.c init.c math.c symbol.c

    @pr $?

    @ touch pr

 

clean:

    rm -f $(OBJS) [xy].tab.[ch]


持续集成/持续发布

日常开发任务中,除了实际的编码和环境配置之外,另一大部分内容就是持续集成/持续发布了。借助于命令行,这个动作也可以非常高效和自动化。

Jenkins

持续集成/持续发布已经是很多企业IT的基本配置了。各个团队通过持续集成环境来编译代码、静态检查、执行单元测试、端到端测试、生成报告、打包、部署到测试环境等等

比如在Jenkins环境中,在最前的版本中,要配置一个构建任务需要很多的GUI操作,不过在新版本中,大部分操作都已经可以写成脚本。

这样的方式,使得自动化变成了可能,要复制一个已有的pipline,或者要修改一些配置、命令、变量等等,再也不需要用鼠标点来点去了。而且这些代码可以纳入项目代码库中,和其他代码一起被管理、维护,变更历史也更容易追踪和回滚(在GUI上,特别是基于Web的,回滚操作基本上属于不可能)。

node {

   def mvnHome

 

   stage('Preparation') { // for display purposes

      git 'https://github.com/jglick/simple-maven-project-with-tests.git'

      mvnHome = tool 'M3'

   }

 

   stage('Build') {

      sh "'${mvnHome}/bin/mvn' -Dmaven.test.failure.ignore clean package"

   }

 

   stage('Results') {

      junit '<em>*/target/surefire-reports/TEST-</em>.xml'

      archive 'target/*.jar'

   }

}


上面这段groovy脚本定义了三个阶段,每个阶段中分别有自己的命令,这种以代码来控制的方式显然比GUI编辑的方式更加高效,自动化也变成了可能。



您在开发过程中有什么好的心得体会呢?

欢迎留言讨论










相关问题推荐