不知不觉毕业已三年有余,加上自己在大学或者实习的时间,作为一名程序员差不多已有四年到五年。记得还在实习期间,经常炫耀自己写Flex,就鄙视那些用JSP等模板引擎渲染成前端页面的人。比如自己用了Spring Mybatis等框架就开始嘲笑那些还在用servlet的人。偶尔还会陷入某种语言之争,或者陷入对某种语言的偏执或者偏见。
其实即便在工作大概2年左右,偶尔还会陷入类似的一些陷阱,比如我经常拿来说的就是除了会写Java还会写C#,javascript和c++,或者说我学会了用某个框架或者所谓的新技术,比如开始学redis,docker这些所谓的高大上的东西.但从去年下半年开始,我好像开始慢慢领悟到编程的本质。我更加偏向于脱离于编程语言层面的一些东西,比如各种编程范式的区别,各种编程语言的并发模型和内存模型,异构系统之间的交互,接口的设计,底层的网络通信,各种协议的设计初衷以及区别,分布式服务架构的设计考虑的容错,资源隔离,监控,服务之间通信的异常处理,服务的优雅降级等等问题。比如在服务化的架构设计中,对于服务发现有多少种方式,比如常见的网关,富客户端以及服务注册中心的机制,以及他们之间的优缺点和设计过程中的一些折衷。比如一上来有个架构师就跟你说用服务注册,然后巴拉巴拉再说用什么开源框架,这种架构师多半是半吊子。在工作中当然也遇到一些架构师,他们设计架构其实不是在设计,而是在套用架构,他们硬是把自己的业务设计的符合这套架构。再比如说你一跟他说需要共享session,他们马上立即吐口而出什么redis,memcached. 跟他说搜索,他就说lucene,跟他说分布式他就直接说什么一致性哈希,再比如跟他说存储就说mysql,mongodb.这些人全都是半吊子先生,甚至在我看来就是压根还没有入门。再举服务发现这个例子,一上来就说zookeeper,有些人也许还知道keepalived, 更有心的也许还知道eureka。那我就问在使用zookeeper如何解决网络分割问题?他肯定说额,什么是网络分割。去年在团队分享过一次redis相关的知识,其实我并没有分享redis的哪些api,而是分享了redis的一些应用场景以及和传统关系型数据库的一些区别,以及redis内部本身一些比如主从数据同步的方式等。第二天主管问其他同事,有些说没有干货。这就是不同层次关心不同问题的典型案例。说实话那个api有什么可讲的,直接看文档就好了。
今天在技术中心评审中其实也发现了这个问题,好像大家对使用了某个框架或者所谓的技术很感兴趣,就好像使用了某个框架就会了什么武林秘籍一样。说实话编程到一定的年限,把使用了某种框架当做新技术我觉得是很可悲的一件事,反正我熟悉一个新的技术要么熟悉内部原理借鉴思路,要么可以做二次开发,我可从来不认为简单用了下框架就是什么新技术。所以可以看到这一年来,我真没有说过什么其他框架名词,我只说解决了什么问题。今天在评审中涉及对我们团队一些开发规范的质疑,说实话要说流程规范,文档规范的确很欠缺,对于程序员来说开发规范和编写好文档的确是一项很重要的技能,我在团队也一直在强调开发的规范化和工程化,但目前似乎没有引起什么重视,但问题越拖越会暴露出瓶颈的。但说实话比如我设计的架构我需要文档化,但你知道我们的开发周期跟大团队的开发周期完全不是一个量级的。你们经常几个人一个团队做好几个人月,甚至还不包括需求分析阶段,而我们呢?关于技术中心的编程范型,从个人角度来说,也许对新人还有一定的用处,但对我们来说毫无用处,如果你连为什么毫无用处都不知道,我想还是不要编程算了。技术中心目前的通用技术储备还蛮落后的,至少要落后一线互联网公司五年左右、举个例子吧,我刚来讯飞的时候,发现大部分前端开发都只是是用用jQuery和开始探索前端mvc模式,可是你知道我作为一名不是全职前端人员,差不多1年前就那么做了吗?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。