【老码农的技术理想】

  小时候,老师问我,你的理想是什么?我不假思索说是工程师,因而长大以后果真成了工程师。html

  工做这么多年,一直在思考工程师这三个字的意义,终于有一天恍然大悟,原来就是:用技术手段改进世界。前端

  那么,在软件方面,目前的世界有哪些问题须要解决呢?有这么一些问题能够思考:java

  • 如今整个世界的信息化程度是偏高仍是偏低?程序员


  • 程序员面试

  • 的人数够用吗?编程

  • 软件行业的生产力是偏高仍是偏低?架构

  • 大部分软件系统均可靠吗?框架

  我想说说本身对这几个问题的理解。编程语言

  虽然如今咱们的生活与十年前相比,已经发生了巨大变化,好比智能手持设备已经很是普及,可穿戴设备也在蓬勃发展。十年前咱们用手机收发短信或者邮件,浏览很是简单而老土的wap页面,但如今,绝大部分人的手机已经取代了电脑,成为平常生活中不可缺乏的工具。ide

  咱们用手机交流,购物,欣赏影视,阅读书籍,玩各种游戏,尤为是飞速发展的移动购物和支付体系,使得咱们能在任意场合购买心仪的物品,订购旅游服务和宾馆,叫快餐,打车等等,生活很是美好,那么,整个世界的信息化程度处于什么级别呢?

  我以为,才刚刚至关于小学二年级,整个世界的信息化程度仍然严重偏低。从如今算起,往前10年,日后10年,这20年时间中,面向我的的信息化服务处于高速发展期,这个领域很是吸引眼球,由于它与每一个人的生活息息相关。但是,另外有一些领域,却很是须要发展,那就是传统行业的信息化。

  以前有很多传统行业,进行了必定程度的信息化,但这个信息化仅仅能知足自身运做的基本要求,当它与整个社会的潮流相对接的时候,就显得很是落后,迟缓。好比说在网购这个大致系中,普通用户所能看到的是商品展现,比价,下单的过程,但背后的核心环节倒是配货与物流。

  我还在上学的时候,有老师这么说过,如今计算机行业很是火热,极可能要饱和了,大家不必定非要从事这方面的工做。如今回头看这句话,以为颇有趣,人真的很难有眼光看到将来。去年我入职苏宁培训的时候,孙为民副总讲了当年一个决策失误的例子。90年代末,公司统计发现全国空调的年销售量达到数百万台,以为很可怕,这个行业可能要饱和,估计要再想办法拓展别的商品经营了,但如今,全国空调的保有量为七亿台,即便彻底没有新增,十年换一轮,每一年也卖得出去七千万台,当年凭什么说这就饱和了?

  因此我如今看程序员的情况,仍然是供不该求,尤为是高端程序员,十分抢手。这个问题的背景就是全社会的信息化进程在加速,以前的程序员人数远远跟不上需求量。

  那么,如何解决这个问题呢?一方面是继续培训,促使更多新人来到这个行业,而且认真作下去,另外还有一些别的手段须要考虑。

  我想追问一个问题:世界上懂业务的人多,仍是懂技术的人多?很明显,懂业务的人要多不少,什么叫业务?其实就是行业常识,生活经验。

  好比说,一个有经验的仓库保管员,可能文化程度不高,理解不了软件的运行原理之类,但必定对产品出库入库的流程很是熟悉,包括各类审批过程和异常情况,但这些,程序员是不懂的。那若是要促进这个领域的信息化,必然要在二者之间寻找一个结合点,程序员能够学业务,业务人员也能够尝试参与软件研发过程,目前来讲,都是前者比较多,由于程序员相对来讲仍是比较年轻,学东西快些。但从总体社会效益来讲,这实际上是不利的,由于程序员是更稀缺资源,而传统业务人员很是多。

  以前见过一个问题:如何让业务人员更好地参与软件研发过程。这个问题的根本解决方法是DSL(Domain Specific Language),核心解决方案是二次开发平台。

  什么是DSL和二次开发平台呢,这两个词听上去很高端,但其实你们有很经常使用的东西就属于这个范畴,好比Excel,它提供了各类各样的公式,还有VBA,使用这些东西的人绝大部分不是软件行业的,Excel就是一种很成功的二次开发平台,公式和VBA就能够算DSL了。

  不少时候这些东西还不够直观,咱们能够看到一些图形化的编程语言,好比Scratch,如今不少小学生的兴趣班就会学,这些东西相对学起来就比较容易了,咱们也能够作一些相似的抽象,以图形化的方式让业务人员可以参与,好比流程配置等等。图形化的东西,是最适合非技术人员理解的。

  因此,要促进社会的信息化程度,最好是可以想办法把各行业的业务人员都拖进来一块儿搞。具体的分工大体是:技术人员和业务人员一块儿定义DSL,技术人员负责DSL的底层平台实现,业务人员负责使用它来构建业务模型和业务流程,甚至业务界面。

  那么,软件行业的生产力是偏高仍是偏低呢?我认为严重偏低。什么叫严重偏低?若是以机械力量的变革来对比,软件行业目前的生产力水平处于蒸汽机发明以前。也就是说,生产力远远没有被解放,你们作的大部分东西未来是会被机械化的,再也不须要这么多人来作这么重复的劳动。可能不少人会对这段话不满,怎么就重复劳动了,你说说我作的什么是能够被机器替代的?

  换个角度看,为何几乎全部外行都以为软件贵呢?由于人力成本过高了,他们以为,作出这么多东西,应该是不须要这么多时间。为何双方的反差这么大呢?

  我以为其中的关键点在于绝大部分工做的抽象程度严重不足,另外有很大一部分效率损失在编程平台或编程语言的不完善,好比Web前端。

  从第一代到第四代编程语言,每一代都是损失必定运行效率,而大幅提高编写效率。随着硬件技术的发展,软件编程必然愈来愈粗放,大的趋势是不特别重视细节效率,只要没有数量级的性能损耗。

  因此咱们能够预期,会有愈来愈多的人使用一些运行效率相对不怎么高的语言或框架,只是为了提升单位时间的生产力。从老板们角度想,也会明白,提高运行机器的性能,要比多雇几个程序员便宜多了。所以,从总体趋势看,追求细节性能的程序员们恐怕会离本身的理想愈来愈远了,除非是在某些特定领域。

  那么,绝大部分软件系统均可靠吗?我换一句话来问:各位程序员朋友,若是大家住的房子质量跟大家正在作的软件同样,你敢住吗?感受你们都在笑,笑是什么意思,咱们都懂的。

  那为何软件系统的质量不容易高呢?我以为主要缘由是流程不完善。那为何不完善?需求容易变。为何容易变?是由于不论程序员本身,仍是需求方,其实潜意识都认为本身作的东西是变动成本较低的。

  试想一下,为何没人在盖高楼盖一半变动需求?为何没人修大桥修一半变动需求?甚至作衣服作一半的时候变动需求,理发到一半变动需求,都会被人认为是不讲理。可是在软件领域,好像这倒成了广泛现象。

  由于整个软件系统的实现,都是虚拟的,看不见摸不着,并不消耗什么物料,因此从这个角度想,变起来固然是容易的。但软件系统的架构,其实也跟实体的没本质区别,变动时候要考虑不少关联因素,并非就那么孤立的看一小块地方,固然,也会有一些不影响全局的变动。打个比方说,若是你在盖房子盖到一半,那变动外墙颜色确定是要比变动窗户大小容易的。要是想变得太多,估计只好拆了重来。

  我见过很多公司是经过增强测试的方式来试图控制质量,但我的以为这种方式不划算,并且收效不高。要想很好地应对需求变动,很重要的一点就是不要有这个软件必定不会改的想法,而后,从架构上作拆分,隔离,组件化等等,力争作到即便要改,也只改某一块的内部,不影响别的地方。

  不少软件公司,一方面不注重架构的设计与宣贯,致使变动的时候问题多多,程序员也不能很好领会架构意图,一方面忽视整个过程当中对架构的管控,认为架构只是最初那张静态图。

  任何一种架构方案,都须要一个良好的管控机制。没有哪一个盖大楼的只认真管设计图纸,不控制施工过程。架构实际上是跟施工过程严格相关的,架构并非一张扁平的图,而是一个立体的东西,做为整个系统工程的骨架。若是能在开发的时候看到这个骨架逐渐创建,血肉充盈的过程,对整个系统的成功把握必定会大得多,这也就是开发过程当中架构管控的理念,具体实现要依赖于不一样场景。

  因此,未来的软件开发方案,必定是会朝着几个方向发展:

  • 高生产力,单位时间生产效率更高,普通人员也能够参与

  • 高可控性,整个生产过程更加完备可靠

  有时候看如今的小孩子,会以为他们很幸福,由于等他们这代长大,就不须要像咱们如今这样编写程序了,那时候,编程已经成了一种使人习觉得常的通用技能,就像如今的人用Office软件同样,所谓的编程,极可能已经不须要敲代码了,而是图形化,设置几个参数就完事了。


跟多java,java学习,java面试题  http://techfoxbbs.com/thread-621-1-1.html

相关文章
相关标签/搜索