xufei / blog

my personal blog
6.67k stars 762 forks source link

老码农的技术理想 #16

Open xufei opened 9 years ago

xufei commented 9 years ago

老码农的技术理想

小时候,老师问我,你的理想是什么?我不假思索说是工程师,于是长大之后果然成了工程师。

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

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

我想说说自己对这几个问题的理解。

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

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

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

之前有不少传统行业,进行了一定程度的信息化,但这个信息化仅仅能满足自身运作的基本要求,当它与整个社会的潮流相对接的时候,就显得非常落后,迟缓。比如说在网购这个大体系中,普通用户所能看到的是商品展示,比价,下单的过程,但背后的核心环节却是配货与物流。

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

所以我现在看程序员的状况,仍然是供不应求,尤其是高端程序员,十分抢手。这个问题的背景就是全社会的信息化进程在加速,之前的程序员人数远远跟不上需求量。

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

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

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

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

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

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

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

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

换个角度看,为什么几乎所有外行都觉得软件贵呢?因为人力成本太高了,他们觉得,做出这么多东西,应该是不需要这么多时间。为什么双方的反差这么大呢?

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

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

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

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

那为什么软件系统的质量不容易高呢?我觉得主要原因是流程不完善。那为什么不完善?需求容易变。为什么容易变?是因为不论程序员自己,还是需求方,其实潜意识都认为自己做的东西是变更成本较低的。

试想一下,为什么没人在盖高楼盖一半变更需求?为什么没人修大桥修一半变更需求?甚至做衣服做一半的时候变更需求,理发到一半变更需求,都会被人认为是不讲理。但是在软件领域,好像这倒成了普遍现象。

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

我见过不少公司是通过加强测试的方式来试图控制质量,但个人觉得这种方式不划算,而且收效不高。要想很好地应对需求变更,很重要的一点就是不要有这个软件一定不会改的想法,然后,从架构上做拆分,隔离,组件化等等,力争做到即使要改,也只改某一块的内部,不影响别的地方。

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

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

所以,将来的软件开发方案,一定是会朝着几个方向发展:

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

后记:昨晚翻以前写的东西,翻到06年写的一篇,挺有意思的,看自己年轻时候写的东西,总是挺多感慨。当年的自己充满对未来的向往,激情澎湃,十足的微软粉啊。那时候的工作基本是在用Java,不过个人还是一直关注着微软技术的发展。写完今天这篇,再对比当年的最后一段,虽然那时候有些幼稚,认识问题不深刻,所幸的是初心未改!

贴后面给大家看看:

2006年10月7日

昨天,微软发布了Windows Vista RC2,可能这个是Vista的最后一个测试版了,下面值得我们期待的就是正式版本。

说实话我对这个东西还是很期待的,虽然我的电脑不一定能流畅地跑起来,而且我未必就喜欢那么花哨的界面,但是这个系统里面拥有了太多令人兴奋的新特性。

据说Vista的界面非常漂亮,整个是透明的玻璃风格,窗口是3D的,甚至还可以切换视角,斜过来看,是不是微软的系统终于可以能跟MAC比一下美观了?

我最关心的不是这个,是这个系统带来的一些新的技术上的便利。据说在这个系统里面会支持传说中的XAML,这个是什么呢?是一种用写HTML网页的方式来写应用程序的开发方式,有了这个,做界面就是一件非常轻松,而且没有技术难度的事情了。

另外,据说Vista会支持传说中的.net framework 3.0,这个其实核心是2.0的版本,只是多了几个foundation,比如presentation foundation,communication foundation,甚至还有workflow foundation。

在操作系统里面集成工作流,我不知道这个创意是谁想出来的,总之,是一件非常酷的事情,这个意味着什么?以后我们用操作系统就可以玩工作流了。微软为什么要在操作系统里面集成工作流?他们的想法是将操作系统变成一个真正意义上的平台,然后使用工作流引擎调动Office的各大部件,形成协同工作。这个对于一个办公室的人来说,可能会有很多非常方便的作用。

大约在Vista系统发布的同时,Office2007也要发布了。这个东西并非完全是界面搞得很花哨,内在功能实在是提高不少。文件格式有了根本的改变,这次是基于XML的,并且文件格式是对外开放的,就是说第三方软件公司也可以更方便地读取这些文件。此外,Office2007直接支持生成pdf文件,这个直接就把Acrobat干掉了,呵呵。

有消息说微软正在开发Office的在线版本,就是说本机上都不用装Office了,能上网就直接可以用,我觉得这个想法很超前,因为网络条件并没有达到这个水准,虽然说基于Web、基于Service的软件会是未来的一种趋势,但是现在可能还为期过早。不过对于微软来说,做这个已经不早了,因为Google就在做这种东西,很明显不能让自己的竞争对手占先,不然以后亏大了。

微软的另外两个巨型产品是今年推出的Visual Studio 2005和SQL Server 2005,这两个东西也不是一般的强悍。Visual Studio一直是微软的开发工具旗舰,这个东西的特点就是高大全。虽然说令人不满的地方也不少,但是要说比它好用的开发工具还真不怎么找得到。Visual Studio 2005的特点是第一次加入了完整的团队协同方案,并且将微软开发方法论MSF融入其中,整个软件开发过程环环相扣,用这样的东西开发真是一种享受。

VS2005是基于.net framework 2.0的,它改进了C#和VB,增加了很多语言特性,比如说C#里面的Generic,不过有消息说,在C#3.0的版本里面,加入了更酷的特性,比如可以直接使用SQL语句对于集合进行查询,这个真是没得说,跟Power Builder学的?

另外Visual C++ 2005也有很大的改变,C++语言在这里演化成了C++/CLI,虽然说我总感觉这个东西有些古怪,但是比VS2003里面的C++已经要好不少了,在那个里面居然有两个下划线这种“ugly”的语法,看起来就令人十分不爽。

VS2005另外一个很特别的地方就是新搞了一个Visual Web Developer,这个东西是专门为开发ASP.Net使用的,效果相当不错。跟VS2005里面的其他部件一样,VWD一样跟SQL Server 2005进行了很好的集成,可以直接把一个表拖动到界面上去,自动形成数据绑定,然后只要进行简单的操作就可以完成分页之类的功能。

SQL Server 2005是微软花了5年时间推出的产品,说实话,我觉得SQL Server 2000的可用性已经是非常的好了,这次改进貌似还有相当大的改善,虽然说还是不如Oracle强悍,但是它的易用性实在不是一般的好。SQL Server 2005提供了很好的Reporting Service,Bussiness Intelligence,Full-Context Search之类的功能,对于企业开发应当能有相当大的帮助。

VS2005和SQL Server 2005对移动设备的开发能力也有了很大的增强,比如.net compact framework 2.0,这个就是一个非常可爱的东西,我在我的PDA上就装了一个,还写了一个小程序去上面跑,挺好玩的。还有SQL Mobile版,我也装了一个,有一个非常可爱的查询分析器界面,还有一个NorthWind例子数据库,呵呵,很习惯地写了一个“Select * from Employee”,于是出来一排熟悉的名字,这真是太美妙了。   微软这次还有一个战略,就是提供了VS2005所有语言的Express版本,这些版本都是免费下载使用的,里面集成了MSDN的Express版本和SQL Server 2005的Express版本,开发功能一点都不弱,除了没有集成VSS和缺少团队协作、移动开发功能之外,其他功能都在,对于初学者和业余开发人员来说,这实在是太好了,还有它们都有对应的中文版,甚至连MSDN都翻译成中文的了,真是非常体贴。

微软的另外一个重点产品就是MSN了,它已经改名成Live,于是包括Live Messenger,Live Space在内的一系列东西,都是微软庞大Live计划的一部分,这个战略应当才开始起步,但是前景实在是很令人期待。

在Web 2.0时代,AJAX技术的盛行使得在Web界面上展现各种复杂效果都成为可能,对这一点我深有体会。微软并没有放过这个大好机会,Atlas是微软将要推出的一个基于AJAX的开发框架,现在社区预览版本早已推出了,直接可以作为VS2005的插件使用。

关于这个VS2005的插件,不得不再提一下。微软有一个Enterprise Library,它将企业开发中所遇到的典型案例整理成类似模板的东西,并且写了详细的文档来解释这些。这对于架构人员来说实在是莫大的帮助。而这个Library是可以直接跟VS2005集成的,使用起来非常方便。另外几个东西就是我上次提到过的几种Factory,包括Service Factory,Smart Client Factory和Mobile Factory,这些作为VS2005的插件,使得基于.net平台的开发如虎添翼,效率出奇地高。

后记:本来我只是随便写点对于微软的感想,没想到下笔了就没法停住,心底里对于微软的那种崇拜,那种向往使得我控制不住自己的激动。微软对于我来说,是一个永恒的动力,我所学的东西基本上都是基于微软平台的,我也曾经接触过Linux,也写过Java,可是一直不能适应它们那种理念,那种是纯粹技术的乐趣。我无法理解为什么Linux阵营的人坚持要用makefile文件来编译程序,不理解为什么有那么多人要坚持写着那么原始的代码。在我看来,那是一种信仰,一种对于技术的执着,可惜我不是。

我所憧憬的梦是让这个世界里能说话的人就可以写程序,能写字的人就可以开发软件。当技术不再成为高高在上,遥不可及的东西,留给我们技术人员的会是什么?我不知道,也许很幸福吧,就像一个职业军人遇到了永久的和平。

zhuxiaojian commented 9 years ago

刚才我老婆还我让我帮他侄子选一下专业,我脱口就说了一句软件开发已经饱和了,其实只是不希望他当个码农罢了

tolerious commented 9 years ago

来看看

tiye commented 9 years ago

很启发人啊. 十年后编程肯定是完全不同的样子, 从现在的 Wolframe 语言, LightTable 和 Eve, Google 的 Polymer 图形制作工具, 还有 Bret Victor 设计的那些交互软件, 可以看出来已经有一部分新方法正在成为现实.

"DSL和二次开发平台"这个真是啊, 编程语言之所以能够大行其道, 很大的原因就是能抽象出函数或者模块, 这些函数或者模块只需要知道外部传递的条件, 而不需要了解外部其他的所有细节的条件, 而能实现重用. 这种提升效率的方案也将出现在人们的分工当中, 把一份工作拆分成两层, 经常就给分工协作提升效率创造了空间.

"高楼造一半改需求"这个例子太好笑了, 我也多少次觉得被这种问题郁闷到. 不过也许软件现在因为太小吧, 我觉得这样比更合适, 就是同时在造楼跟装修, 有些需求是钢筋混凝土, 有的需要是墙体装修.. 那么设计架构的时候想明白点还是能改一下的.

另外那个开放的问题实在没法想清楚, 十年后各种职业跟写程序的关系怎样, 现在的程序员到时候会出现怎样的分工, 渗透到哪些领域当中?

mimers commented 9 years ago

我也有这样的理想

justliqiang commented 9 years ago

从过去中预测未来

lvlongtao commented 9 years ago

只会用linux的vim和emacs开发的人路过。

bjzhush commented 9 years ago

我也是一直linux+vim,不过,思想不分平台

SiZapPaaiGwat commented 9 years ago

@bjzhush 这句话好屌

deonwu commented 9 years ago

程序员比业务人员稀缺,很贵。所有老板想让程序员,懂业务。就变得不稀缺了,就便宜了。

vagusX commented 9 years ago

从坑里来,到坑里去

markyun commented 9 years ago

徐总想的好多,看来最适合走技术型路线。

huadee commented 9 years ago

专业ios外包

Andy-Hsia commented 9 years ago

对于dsl的看法和你不谋而合,我现在正在尝试实现你文章中提到的,“技术人员和业务人员一起定义DSL,技术人员负责DSL的底层平台实现,业务人员负责使用它来构建业务模型和业务流程,甚至业务界面”。希望能做点东西出来,让大家看到这种思路是可行的

riskers commented 9 years ago

受教了

aruis commented 9 years ago

分析的够深刻,尤其是面对企业的业务系统、管理软件,不论是客户还是开发者,有时候都忽视的需求变更所带来的高昂代价。在这一个领域,未来不久,我相信,势必会出现像您说的那样,只要客户懂业务,愿意去学习一定的DSL等编程方面的知识,就可以自己主导建立自己的管理软件。而且,那个时候,这种客户业务级的变更,成本应该会下探到一个非常低的水平。 事实上,很多面对企业管理系统开发的软件公司都有自己的开发平台,比如用友的UAP,只是这些平台的出发点,是为开发而生,而不是客户自己使用而生,封装度、易用性差很多。 另外想提另外一个东西,您提到了excel和vba,不知道您听说过excel server这样的东西么,国内比较火的是勤哲,其实还是挺接近这个目标的,至少路线是对的。 条条大路通罗马,再过十年,我们再看您今天的文章,希望到时可以会心一笑。

yalishizhude commented 9 years ago

“回头看自己觉得当时很天真” 这就是人成长的必然状态吧~

famingjia commented 8 years ago

支持一下理想

KingMario commented 8 years ago

感觉BPM系统如processmaker很符合飞哥的二次开发平台的描述。 还有以前用过的一个搭建wiki的系统mindtouch,当年网上mindtouch的资源很多,自从mindtouch开始云服务之后,资源少多了,然后前不久看到mindtouch才刚刚获得A轮融资,感觉真是十年磨一剑。。。

wzhwok commented 8 years ago

让业务人员也参与软件研发过程,是有很多软件企业搞过二次开发平台,二次开发门槛有所降低,但还是存在软件抽象思考要求,还是有一套规范和规则需要学习掌握,实际上业务人员还是没有能力参与,基本是客户企业内部又养了一些开发人员来搞二次开次开发。这只不过是开发成本转移了,但这是这种理想要的结果吗?而且很多实际二次开发都是微乎其微的细枝末节调整,相比建设这种平台付出的复杂性成本,不是太划算。 让业务人员参与研发过程,还有别的形式,让业务人员充分参与需求调研、分析、功能性设计、测试,但很多软件企业对这个都没有引起足够重视,舍本逐末让其参与软件构建过程,真是得不偿失。

stuxt commented 8 years ago

马克·

guonanci commented 8 years ago

看完这篇文章,我想静静

tuzhao commented 8 years ago

C语言永远不倒!

hiram3512 commented 8 years ago

回头一想,已经敲了九年代码了...时间过的真快

Seandor commented 8 years ago

开头三个字“小时候”改成“在我小学二年级的时候”,会不会很有趣呢,和后面提到信息化的程度相当于小学二年级对应起来了:smile:

waterVenice7 commented 8 years ago

06年的徐老师就已经想的这么多了!

baohongfei commented 8 years ago

06年我刚上大学,转眼十年了,软件定义未来

yangsiheng commented 7 years ago

写的真好

kklwq123 commented 7 years ago

写的不错

xiaoxiaoyao commented 7 years ago

我是个想当码农的财务,当时报考大学志愿的时候,所有人都不希望我做程序员,最后屈服了,现在做财务,还是有一颗不忘code的心

eventhorizon-cli commented 7 years ago

因为在土木行业无法实现技术理想,毕业半年后下定决心转软件行业,但那时候实在找不到愿意面试我的软件公司,除了对日外包,最后就靠日语进了个外包公司,但做了一年多之后感觉很迷茫,技术能力实在是提不上去了。想好好提下自己的编程能力,时机成熟了去找一家有技术氛围的公司重新开始。

qianyinghuanmie commented 6 years ago

想学code就只管学就好了,个人觉得如此开源的时代,学起来还真是方便啊。

zhoulujun commented 6 years ago

比如说,一个有经验的仓库保管员,可能文化程度不高,理解不了软件的运行原理之类,但一定对产品出库入库的流程非常熟悉,包括各种审批过程和异常状况,但这些,程序员是不懂的。那如果要促进这个领域的信息化,必然要在两者之间寻找一个结合点,程序员可以学业务,业务人员也可以尝试参与软件研发过程,目前来说,都是前者比较多,因为程序员相对来说还是比较年轻,学东西快些。但从整体社会效益来说,这其实是不利的,因为程序员是更稀缺资源,而传统业务人员非常多。 事实上,一般的积水团队都被要屈服于运营的。 …… 程序员的就是学习业务,优化运营 比较中国的目前互联网公司 或者其他——都是披着高科技的皮,重点还是运营(核心不在科技优势

joinmouse commented 6 years ago

感觉初心没变

dongzhiheng commented 6 years ago

未来值得期待!

xyf2016 commented 6 years ago

大多数人生活中阴沟里,但总有人仰望星空

ghost commented 5 years ago

已经被需求逼迫得没有理想了,只想用健康换一套房子。
等我有了房子,再有个车,再有个性格贼好贼漂亮的老婆,最后有马老板百分之一的钱,我也要用技术手段改进世界。

weartist commented 4 years ago

还是希望自己能写代码写到60岁

gh0sthx commented 3 years ago

我的技术理想是能把我自己的意识电子化。哈哈,希望几百年后技术成真

liwuhou commented 2 years ago

真想一直写下去…

linlai163 commented 2 years ago

所以徐飞大佬如今还看好 trantor 吗? 😂😂😂

tgzzl commented 2 years ago

这是来自QQ邮箱的自动回复邮件。   您好,您的邮件我已收到,谢谢!

sumili commented 2 years ago

你已经成功召唤了小龙虾

dongbruno commented 2 years ago

这是来自QQ邮箱的自动回复邮件。您好,我是董永*,我已经收到你的邮件,我会尽快给您回复。

enophan commented 2 years ago

哇,受教了(╹ڡ╹ )

dongbruno commented 2 years ago

这是来自QQ邮箱的自动回复邮件。您好,我是董永*,我已经收到你的邮件,我会尽快给您回复。

sumili commented 2 years ago

你已经成功召唤了小龙虾

Aoyia commented 1 year ago

现在就是接近2025年的时间,2023 低代码平台大火。懂业务也可以实现简单的系统,2025年想必那时候比较成熟了

dongbruno commented 1 year ago

这是来自QQ邮箱的自动回复邮件。您好,我是董永*,我已经收到你的邮件,我会尽快给您回复。

sumili commented 1 year ago

你已经成功召唤了小龙虾

iXingo commented 1 year ago

现在就是接近2025年的时间,2023 低代码平台大火。懂业务也可以实现简单的系统,2025年想必那时候比较成熟了

现在是2023,chatGPT可以理解自然语言并且输出代码了