软件开发的三重门

2023-10-09 22:59
文章标签 软件开发 三重门

本文主要是介绍软件开发的三重门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[观点]软件开发的“三重门”

2012-01-31 08:47 | 1610次阅读 | 来源:酷壳网 【已有13条评论】发表评论

关键词:软件开发 |作者:陈皓 | 收藏这篇资讯

自从上次写了“程序员技术练级攻略”以来,就觉得似乎还有很多东西没有谈到,但当时没有继续思考了。而春节前有人问我,是做底层技术,还是做业务。这问题让我思考了很多,不由自主地回顾了一下我这十多年的软件开发经历,并顺着整理分类了一下自己解决过的若干问题,还发散想了很多,经过了一个春节假期的发酵,产生了下面这篇文章。

前言

这篇文章必然是通过我的个人经历来写的。所以,我先说说个人经历吧。我的经历基本分成三个阶段。

第一阶段:我刚毕业时在家乡的某银行工作,做些银行的业务系统,还搞些网络,电子邮件系统,OA什么的,因为大四的时候在老师的公司里实习,银行里的人际关系太复杂,而且技术都包给了产商,所以在银行的每一天都觉得不能适应里面的工作环境。两年后离职,单位分的房也不要了,直接去了上海,在上海呆了两年,本来想做互联网的,但是泡沫来了,最终去了一家做系统集成的国企公司还是继续做银行业务。这四年来,主要解决的都是一些业务上的问题,银行里的会计业务,OA业务,国际业务,中间对公业务都非常地复杂,而且因为当时的软件开发相当的不规模,所以基本上是在一种比较混乱的状态下度过的,而银行方面又很强势,所以,这段时间主要是做业务。所以,技术上主要是积累了如何使用那些技术。C+/Java,Windows编程,Unix编程,网络编程主要是这段时间学的,看了太多的书(我大学课程里没有C++和Java,也没有Windows/Unix和网络编程,所以,只能拼命地看书和自学)。

第二阶段:然后,我来了北京,到了一家做分布式计算系统的公司,整天和一个高性能技术高可用性的企业级的集群式的软件产品打交道(这家公司去年被IBM收购了),在这家公司把Windows/Unix和网络编程有了更深入的了解,对我长进比较大的是明白了怎么做一个性能高,可用性高的集群式的系统,天天和底层打交道,干了4年多。然后去了一家金融信息公司,这家金融公司主要做全球的金融信息数据处理,而我主要还是做核心数据发布系统的性能调优的项目,金融数据的实时性要求的高,数据量非常地大,高可用性要求得高,得想尽一切办法省网络带宽,增加系统性能,还要保持高的可用性,不当机,不丢包。又干了4年多,去的时候从国外接过来两个系统,其性能单机每秒可处理120K message,我走的时候,我和团队把其优化到了每秒1.4M messages的吞吐,另一个系统,从接手时的100k message/s优化到了500k message/s。这八年多的时候,全是在和这些高计算高性能的项目打交量,几乎没有什么业务,都是纯技术,积累到了很多和性能有关的高并发高计算系统架构级的知识。

第三阶段:两年前来到了现在的做电子商务的互联网公司Amazon,还是在做一个数据处理量很大的业务系统,因为要干的是要把电子商务全球化的东西。但是,因为电子商务的特殊性,必需要去兼顾业务的特点,而且在Amazon,耳读目染了很多有趣的业务难题,比如,库存计划,配送优化,等等。虽然很多东西还不明白,但发现,用技术来解决业务难题真是太有意思了。

我的这三个阶段,第一个阶段花了4年,第二个阶段花了8年,第三阶段刚刚开始2年不到,有时候我也去别的公司讲课,所以,我很有幸经历了中国软件开发的进化过程。我的经历就是中国软件行业进程的一个缩影,而我把这三个阶段称为——软件开发的三重门。它们分别是:

  • 业务功能
  • 业务性能
  • 业务智能

之所以加上“业务”二字,是因为我以为计算机是一个工具,其用来解决实际问题,所以,什么都离不开业务,就算是性能优化也一样,通过之前那篇“12306.cn的性能优化”中的“业务分析”段落,我们可以知道业务的不同,系统的难度和解决方法就可以不同。所以,我们总是用技术在解决业务问题。业务的形态对软件的开发有决定性的作用。

下面让我具体描述一下。

一重门:业务功能

这是软件开发的第一重门,也就是掌握可以实现业务功能的技术。通常分成三块:语言+系统+数据处理。在这个阶段,主要是能掌握各种技术,比如:开发用的各种工具(如:IDE,XUnit,Debugger,等),各种代码库和框架(如:C++的STL,ACE,Boost,等,Java的Spring,Hibernate等),各种系统知识(如:Windows API,Unix/Linux API,TCP/IP,Socket,多线程多进程间的同步、互斥,并发安全,还包括Web平台,移动平台,等等),还需要掌握数据处理的知识(如:数据结构,基本算法,数据库设计,数据库引擎,SQL等)。

这个阶段主要是把这些不同的技术组织成可以实现业务功能的解决方案。重点是能掌握和使用技术。很多流程和方法论的东西基本上就在这一重门里。这重门主要解决的是实现问题。

二重门:业务性能

业务的功能搞定了以后,就是业务的性能问题了。搞定功能并不难,搞定性能是有点技术含量的事。有句话不是那么说的吗——每个人都可以搞一个网站出来,但不是每个人都能搞出能支持百万级访问量的网站。但是,我看到很多技术团队或是工程师脱离了业务,只单纯地搞性能,比如:单台服务器支持10万个TCP链接的并发,等等。这些东西虽然在技术上有点意思,但是没有业务的环境,也只能是自娱自乐了。

我们可以看到一些企业开始注重这个问题了,性能问题也是最近被大家讨论得最多的问题,京东商场的性能问题,12306的性能问题,等等。

当然,所谓性能不并单单指系统的吞吐力,还指系统运行时的总体性能,比如,系统安全性能,系统的Accessbility的性能,系统的扩展性性能,等等,就像是前些天中“Web开发中需要注意的问题”一文中谈到的那些事一样。这表明着你对系统的全面和深入的了解。

在这个阶段,需要对业务模型,数据流,业务流,系统架构,算法,和各种技术有深入的了解,要了解到本质上来。比如,在第一重门中,我们只需同要知道,Java有同步关键字,在这一重门中,我们还要知道同步或互斥对性能的巨大伤害性,在第一重门中,我们只需要知道STL中的智能指针或是STL的用法,这一重门中,我们还要知道智能指针中的refcnt的同步加锁对性能的损害,还需要知道STL中容器的size()方法在某些时候是性能很差的。在第一重门中,我们需要知道hash表的效率,在这一重门中,我们还需要知道hash表的碰撞问题。

最重要的是,在这重门重点是软件的设计问题。你需要有足够多的经验能比较不同设计方案的优缺点,比如TCP和UDP,同步和异步,epoll和select,push和pull,水平扩展的各种方案……还记得本站的那篇“程序员的谎谬之言还是至理名言”,广度是你深度的副产品。所以,这重门是看你的技术视野有多深有多广。

三重门:业务智能

这重门可能是最难的一重门了,如果你能进到这重门里,你应该是科学家级的程序员了。让你有智能的业务,这个事可能是顶级的技术难题了。第一和第二重门都不算难,这重门是最难的。参看Amazon的个性化推荐系统,或是Google搜索引擎的结果个性化推荐等等(比如我输入“黑天鹅”关键字,你怎么知道我要找的是动物,电影,还是本书?怎么让搜索出来的结果排名即公正又可个性?),你就知道,用技术来解决这种类似的问题难度可想而知,不然就不会出现如Hadoop之类的技术了。

我再举两个这重门里的业务方面的例子。

一个例子是关于库存计划的,需要像天气预报一样预测未来的销售量从而决定库存,所以,最简单的做法是,监测各个商品的销售统计,然后看一下最近的销售趋势,还要看一下往年的销售趋势(因为某些节假日会是一个高峰期),还要分析一下大众的喜好变化,比如,在某影评网站上的某电影的热度其会告诉我哪个电影的DVD要滞销了,得打折卖,哪个电影的DVD要畅销了,得多进货了。还可能需要监控新闻评论,比如某权威人士推荐了某个商品,那么我得赶快进货了。等等。这完全就是一门科学。

还有一个例子是配送问题。我有一辆卡车要处理我仓库和配送站间的物流问题,我需要找到一条最经济的路线来在有限的时间内处理最多的物流。这个不是最短路径问题,这是个计划统筹学的东西。也是一门科学。

还有近期“方韩之争”里有很多人来分析文章相似度的技术,这些东西都属于三重门里的东西。

到了这重门里,可能技术反而不是重要的了,而是数学模型。这重门里主要是业务模型,数据模型和算法问题。这些东西和你的业务模型密切相关。能解决这样的问题,是真正的大牛。对于我来说,可能是高山仰止了。

后记

通过上面的说明,我们可以看到下面这些东西,

我的那篇“程序员技术练级攻略”里的东西只能让我们最多达到1.1到1.2重门。

一重门像是开垦荒地,二重门像是扩大生产,三重门像是精耕细作。

一重门(业务实现)里聚集着大量的劳动密集型的企业,劳动密集型的企业通常都需要流程和方法论。敏捷过程改进这类的东西只在一重门里。

二重门和三重门里只有少数不多的技术型的公司。这类的公司通常非常注重技术,并且是企业文化是工程师的文化。

三重门里可以产生的创新和那些可以用来改变世界的技术。

国内现在的情况是,一重门优化阶段+二重门的学习阶段。三重门里似乎还没有什么见术。不过,我看到一些公司已在尝试三重门的东西了。

作为技术人员的你,如果你想跟上时代,让自己有价值的话,你至少要达到二重门。

因为国内的技术环境等不良因素,导致大量的程序员在一重门的时候就已经失去信心,或被大浪淘沙淘掉了,所以,二重门里的程序员比较少了,但是随着年轻的一代和技术的日趋成熟,也会慢慢多起来的,我现在已经看到这个趋势了。而三重门里的程序员成了稀缺的大熊猫。因为大量的二重门程序员干到那个时候都转管理了。

我的这些言论不一定对,但希望能让大家有启发,有所思考。

网友评论(共 13条评论)..
[观点]软件开发的“三重门”
  • sejade 2012-02-01 13:16:01

    很有启发

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • smpig 2012-02-01 10:13:17

    这么看来我还在0.5重门里晃啊...

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • haoel 2012-02-01 10:12:01

    能不能注明作者啊!!! CSDN编辑?!

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • xhwwc110 2012-01-31 22:16:34

    很好的内功心法

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • xingfeng1234 2012-01-31 20:11:55

    觉得不错,有感触!最近一直在想给自己定位的事情,里面有很多好点子啊!。。。。

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • gf05011 2012-01-31 16:44:41

    很精辟,路途遥远。。。

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • comradecore 2012-01-31 16:25:32

    Platform出来的?

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • jav84233284 2012-01-31 16:01:40

    写得真好

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • sunyard_dj 2012-01-31 14:05:01

    总感觉没怎么看懂~人家都说没看懂都是好的~暂且这样认为吧!

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • zdf1943 2012-01-31 14:03:42

    讲得不错。还在为实现功能而愁的小白程序员路过

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • luzhen328 2012-01-31 14:01:10

    有总结,才有进步。

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • jinfengmusic 2012-01-31 11:16:41

    路漫漫其修远兮。

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • ocean1010 2012-01-31 10:08:44

    总结的不错。。

    回复(0)支持(0)反对(0)举报(0) | 0条回复..

  • 正在用汇编:MIPS、ARM和8086的,作算法研究不会汇编会被别人笑死的;

这篇关于软件开发的三重门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/176159

相关文章

【软件工程】软件开发模型

三、瀑布模型  四、几种软件开发模型的主要特点 题目 判断题 选择题 小结

集成电路学习:什么是SDK软件开发工具包

SDK:软件开发工具包         SDK,即Software Development Kit(软件开发工具包),是一套由软件提供商或其他组织提供的开发工具集合。这些工具旨在帮助开发者更快速、更便捷地创建、测试和部署软件应用程序。以下是对SDK的详细解释: 一、SDK的定义与组成         定义:SDK是一套包含编程工具、代码示例、技术说明文档、调试和测试工具等内容的软件包,有

从知识视角理解软件开发

软件构造中的核心知识:业务知识与架构知识 在软件构造过程中,最关键的两类知识是业务知识和架构知识。业务知识回答“什么是正确的软件”,而架构知识解决“如何正确地构造软件”。从这两个方面深入理解软件构造,可以帮助我们在设计和开发过程中做出更明智的决策。 1. 业务知识:定义正确的软件 业务知识是关于如何解决现实问题的知识,包括业务的目标、规则、限制、和已有的解决方案。它定义了“正确的软件”是什么

第二章 可行性研究与软件开发计划简记

第二章  可行性研究与软件开发计划 可行性研究的任务:回答所开发的软件系统有无可行的解决办法或者这个系统值得开发么。 可行性研究大体可分为三个大的方面:工艺技术、市场需求、财务经济状况。 可行性研究的目的:就是尽可能的用最小的代价在尽可能短的时间内确定问题是否能解决。 可行性研究的解决方案:一般集中在 1.技术可行性2.经济可行性3.操作可行性。

软件工程技术专业软件开发综合实训室解决方案

一、行业背景与前景分析 1.1 软件工程技术专业就业前景 近年来,中国的软件行业取得了显著的成就,即便在全球经济受到新冠疫情冲击的情况下,仍保持了强劲的增长势头。据工业和信息化部发布的数据,2021年我国软件和信息技术服务业的业务收入达到85371亿元人民币,同比增长18.3%,远超同期国内生产总值的增长率。这一成就不仅体现了中国软件行业的韧性和发展潜力,也为未来的持续增长奠定了坚实的基

软件开发教学:基于数字药店系统源码的医保购药APP开发策略

本篇文章,小编将详细探讨基于数字药店系统源码的医保购药APP开发策略,并提出一些开发中的关键技术要点。 一、数字药店系统源码的功能概述 数字药店系统源码是构建在线药店的基础,它集成了药品信息管理、订单处理、支付系统、用户管理等核心模块,旨在实现药品销售的全流程数字化。一个典型的数字药店系统包括以下几个主要功能: -药品信息管理:支持药品分类、库存管理、药品搜索和详细展示。 -订单管理:

一般软件开发流程和一般软件的测试原则

一般软件开发的流程: 软件测试的原则:

为什么单元测试在软件开发中很重要?

单元测试在软件开发过程中扮演着至关重要的角色,其重要性主要体现在以下几个方面: 保证代码质量:单元测试是对软件中的最小可测试单元——函数、方法或类进行检查和验证的过程。通过编写针对各个模块的独立测试用例,开发者能够确保每个单元的功能正确无误,满足预期的行为。这有助于早期发现并修复代码缺陷,提高代码的质量和稳定性,从而降低维护成本和减少后期出现的问题。 促进代码重构与优化:单元测试为代码重构提供

强烈推荐!大模型辅助软件开发

强烈推荐!大模型辅助软件开发 今天给大家推荐一本书----《大模型辅助软件开发》 有感兴趣的小伙伴可以联系我,免费送~ 文末有联系方式嗷~ 太喜欢作者在书上的这句话了:是人类工程师的能力,而不是大模型的能力,决定了大模型协作式开发的上限。 软件开发正在经历一场前所未有的范式变革。人工智能的飞速发展,特别是大型语言模型所取得的成功,不仅会对软件本身的形态产生深远影响,也

软件开发中 的常用加密方式有哪些

在软件开发中,加密技术是保护数据安全的关键手段之一。常用的加密方式可以分为两大类:对称加密和非对称加密。此外,还有散列函数(哈希函数)用于确保数据完整性。下面是一些常见的加密算法和技术: 对称加密算法 AES (Advanced Encryption Standard):高级加密标准,目前最广泛使用的对称加密算法之一。DES (Data Encryption Standard):数据加密标准,