从程序员成长为500强企业的架构师,如何掌控自己的职业生涯?( 三 )


以上只是两个典型的例子,你需要做的是发现那些你要长期从事的任务(往往不随技术而改变,也不随公司而改变),将完成这些任务所需的工具调整至最优 。再举一个例子,我会留意身边的程序员所用的键盘 。只有少部分的程序员会买高端的静电容键盘,比如HHKB 。而在我看来,这明显是一笔很划得来的投资,程序员在工作的大部分时间里都需要和键盘打交道,一个舒适的打字体验是非常有收益的,更何况这类高品质的键盘都非常的耐用 。
你需要学会的编码习惯
程序员应该学会通过技术的手段来提高效率 。几个常用的手段是使用工具,快捷键和编写脚本 。
使用各种工具
技术人员电脑尽量用MAC,使用命令行效率一定比在 10241024 像素中找一个 1010 像素的按钮更快 。IDE用IDEA,比Eclipse更智能 。命令行工具用iTerm和IDEA里的Terminal 。写文章用MAC的客户端工具MacDown,左边编写,右边展示,比word等工具方便快速很多 。有时候我还会用按键精灵里配置脚本需要解决工作问题,比如通过点击我们的系统,来执行任务 。这样的工具很多,只要能提高工作效率的工具,大家都可以尝试使用 。
使用快捷键
MAC,IDEA和Eclipse有很多快捷键都要学会使用,比如在MAC命令行中通过idea .快速打开工程,通过open . 快速的打开文件夹,把IDEA里通过快捷键把一段代码抽成一个单独的方法,快速生成getter setter方法 。
用脚本写工具
当我们用人工的方式做一件重复性很强的事情,首先要考虑使用工具来帮我们自动完成,如果没有类似工具,可以自己写个脚本来实现,这样除了能快速解决问题,还能提高自己的技术能力 。
比如,我经常要在两个maven仓库发布jar包,我就写了个脚本来实现jar包的发布,deploy.sh代码如下:
cp pom.xml pom.xml.bakrm pom.xmlln -s pom-2-deploy.xml pom.xmlmvn deployrm -rf pom.xmlcp pom.xml.bak pom.xmlrm pom.xml.bak
在业务团队做开发如何成长
我一直在业务团队中做开发,在业务团队最主要的提高的能力是业务抽象和架构能力,通过业务场景,不断思考如何通过合理的架构和业务抽象能快速支持业务,降低运维成本 。同时在这个过程中锻炼技术能力,比如写一些技术框架来快速支持业务,做到技术驱动业务 。
可配置化的方式支持业务
设计业务的领域模型,把不随着业务逻辑变化的领域模型做成系统能力,把随着业务逻辑变化功能,做成可配置化,上一个新业务,通过配置的方式或少量开发就能支持 。
在做客户后台功能时,由于需要展示的数据种类非常多,每种数据展示可能需要花费几天的时间,所以设计了一个通用的技术框架,实现了通过配置化的方式展示各种数据 。
写框架解决业务问题
我在上家公司经常做一些CRUD的业务功能,我就自己开发了一个快速做CRUD的框架 jdbcutil,通过配置实体生成SQL语句,实现了子类只要继承父类,就自动拥有CRUD的能力 。后面还写过生成CRUD页面代码的程序 。
目前我们团队在做的TITAN框架通过模块化开发的方式,解决易变的业务系统在多人开发时遇到的问题 。
技术驱动业务
在业务团队,一定要不断的思考如何利用技术来支持快速支持业务,配置化是一种思路,但是有些功能配置复杂度比较高,配置加验证的工作量,可能需要一个星期的时间,那么能不能减少人工配置,实现系统自动化配置,于是可以研究下人工智能,通过人工智能的方式实现,系统告诉人需要配置哪些东西,然后交给人来进行确认,这样可以大大减少人工成本,更快的支持业务 。
系统化学习不断的提升自己的能力
掌握系统化的学习方法
如果学习到的知识不成体系,那么遇到问题时就会非常难解决 。有些同学会出现这些情况,比如编码时遇到问题百度搜索,如果百度上找不到答案,这个问题就解决不了 。再比如,在开发中要用到某个技术点,就学习下API,程序调通后就不再深入研究,浅尝辄止,如果程序遇到其他问题也不知道如何解决 。
以上情况我认为叫 点状学习。遇到一个问题,解决一个问题,需要一项技术,学习一项技术 。那么如何由点到面,由面到体,形成系统化学习呢 。
首先要确定学习的知识领域,需要达成的学习目标,针对目标制定学习计划,就像你要写一本书一样,先把目录写出来,然后根据目录上的知识点逐步去学习,最后把这些知识点关联起来,形成一个系统化的知识体系 。学习的时候,可以制定一个计划,以周为单位,比如第一周学什么,第二周学什么 。


推荐阅读