`
jgsj
  • 浏览: 951627 次
文章分类
社区版块
存档分类
最新评论

从学校到公司,玩具到产品

 
阅读更多

我是一名码农,而且是位java码农,至少几年内一直会是。同时,我是位攻城狮。

在实验室时写代码,做工程时候培养的想法和思路是封建的,狭隘的。实验室做项目,连基本的版本管理工具SVN都不会有,所以不会有周期性的迭代,更不会有code review,不会有测试(包括你自己开发时候在build项目时候的测试以及之后的测试)。你只要做老师给你布置的那块任务而不用参与过多的设计,你的代码是写在自己本地的而不用考虑不同环境平台的迁移,你的项目可能就是个java project或者web project,你的项目可以跑出结果就可以了而其他方面老师都关心不大。

至少在一个小公司里,要开发产品,最简单流程是怎样的?最简单的场景:公司把代码托管在github上,公司有台服务器,你写的是新的模块。流程:你有一个安装了maven和git插件的Eclipse,你构建maven项目,并配置好项目的依赖,包括第三方库,你的测试是基于junit库的,也在maven里配置好。你本机和公司的github库以及服务器putty都通过ssh设置好了key,你写完代码后,commit后push到git上。在服务器那边有一个CI,比如是jenkins(或者Hudson),公司已经帮你把jenkins搞定,你只要用google帐号登录,在jenkins里写几行shell,让它自动获取git端最新的代码并进行mvn install,在这个过程中你已经不用管任何环境的问题。你自己的测试代码成功通过,你的项目构建成功。这只是最简单一步。虽然java称是“一次编写,到处运行”,但是不同环境下跑代码还是有很多很傻逼的问题。比如:1. Eclipse上默认编码是GBK,你可能每次建成项目之后都要在properties里把编码改成UTF-8,同时,你在搞输入输出流,或者getBytes()的时候,都要写好参数"UTF-8",保证没有问题。2. java main函数是不返回值的,而Linux shell下main类跑完没跑完,最后都是给出一个0,后果就是它并不知道你的main类执行结果是否正常停止,除非声明了Throw Exception,返回值会非0,提示程序不是正常停止的,所以该throw出来的就不能try catch掉。

我们再看看别的。google公司在开发Android的时候贡献出来的一个附加产品:Gerrit。这里插一句,不论公司是做什么产品,做的是什么规模的产品,哪怕你就是个做网站的,你的网站都没什么PV的,内部都会有一套够复杂够专业的项目开发和管理流程,涉及到很多主流工具,而很多公司会有自己内部一套私有的工具,大公司甚至可以最后开源出这套工具,而变革一个开发时代,冲击整个业界。Gerrit 是一个基于 Web 的代码评审和项目管理的工具,面向基于 Git 版本控制系统的项目,Eclipse和Android的管理开发都使用了它。google gerrit eclipse或者gerrit android,就可以找到Gerrit上是怎么做Code Review的。授权的开发者在向这样大的开源项目提供代码或补丁的时候,CI结果,提交失败与否,diff内容,CR内容都一目了然,改革了项目开发流程,所有授权人员都可以在web上进行CR。授权开发者有很多是公司内部的团队,可能公司聘你就是让你干这事的。如果想被授权,好像你只需要得到所有授权者里的三票,大部分人可能都会弃权,但如果有一位反对就不行。再拿Android举个例子,Android的git库好像已经达到百多个git仓库了,使用了100+的开源项目,所以每个版本的编译都有明细记录,任何一个子项目的版本有出入,你就不可能编译出一个Android4.x版本。安卓所依赖的CM也使用Gerrit做开发管理。

可悲的是,在学校里,我从来没想过一个真正大型的项目是怎么开发的,这个问题想都没想过,更别说去google下。我一年前说我想做架构师,幼稚的是我依然停留在只关注技术细节,依然在关注业界什么受关注最多,什么最火,随波逐流。

以上所说的,就是想指出一些应该具备的认知,无论是否在学校里。现在注重的可能还是技术细节,功能实现,但更重要的方面是对整体架构的把握,不然靠时间升完职,就再也爬不上去了。真正的高手,一定会具备以下几点:整体架构的把握大于技术细节实现;熟练掌握项目管理和开发的各种平台、工具;解决问题能力;看清什么是最实用的技术,什么能真正解决问题,不管你现在炒的是什么概念,你搞的是什么方向,你用的是什么语言。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics