软件开发过程充满了复杂性,前面提到的效率难题、可靠性难题主要是一个项目本身的难题,而软件开发中还有另一个难题是:业务到技术实现。换句话说,就是如何通过组织人进行编码来实现产品和技术的连接。

关于这个难题,结合我的经验来看,我有这样 5 点建议:都是项目、盯紧目标、提前计划、有效沟通和交付结果。在开发工作中,应该怎么理解和应用这 5 点建议呢?下面我们就来分别详细说明下。

1. 都是项目

用项目的视角去处理问题或业务,会有两点好处:一是培养你从整体看问题的习惯;二是通过做计划,提高你的时间管理能力。

我们都知道性能优化在任何一个项目中都非常重要。假设在你的某个项目中,经过你的努力优化,系统响应时间缩短了 60%,TPS 提升了 2 倍。这个结果说明了什么呢?系统响应时间缩短、吞吐量提升是不是就意味着能满足需求呢?

实际上,这就是只看到局部而忘记了整体。的确,性能优化很重要,但是在当前的项目阶段中,性能优化是不是你需要达到的目标?还是说你的目标只是为了优化而优化?

而当你用项目视角去重新看待这个问题时,你就会发现,优化只是一个手段和方法,在合适的阶段引入才是最重要的。比如,你应该提前为项目大促做准备,当大促流量暴增或者某接口超时比例过高时,如果不进行优化,系统可能会存在风险。这样,你不仅会预留一些时间来重新做代码审查,也会看到项目的成败关键并不只是每一次新增功能的完成与否。

2. 盯紧目标

盯紧目标主要体现在两个层面:一是负责到底,二是不断调校。

负责到底是基本要求。 无论是写代码,还是做设计,只要是定下一个目标,就应该始终盯紧目标。比如,你最近要写一个文件上传的模块代码,调研了很多上传方法,然后觉得都特别有意思,想要都试验一次,结果你发现用的底层框架并不支持这些方法;于是你转而研究起了框架,又发现这些框架也很有意思,想要做下源码分析,再动手试试……可时间一天一天过去,你却发现文件上传的代码还是没有写完。

不断调校是基于事实的合理改变。 有时,在项目的推进过程中,可能需要修改目标。比如说,需要临时修改紧急线上问题,而这对当前的项目可能会造成一些影响,这就需要你敢于基于事实来做合理的评估,而不是固执地认为目标定好以后就不允许修改了。

3. 提前计划

很多开发人员最常犯的一个错误就是:拿到需求直接开始编码,计划便是不用计划,用最快的速度去实现代码即可,而这往往会导致更多问题的出现。在工作中,你也经常会发现很多开发人员都自诩自己很懂得时间管理,但是难度几乎相同的项目,有的人经常延期,而有的人每次都能按时上线。这是为什么呢?一个很重要的原因就是,这些按时交付的人做事往往具备一个共同特质:做事有计划。

做事有计划是说,要在有限的条件下提前做好分析,并在一个相对固定的时间周期内合理安排任务。简单来说,就是要搞清楚熟悉哪些、不熟悉哪些、哪些可控、哪些不可控……这样就能提前规避风险,并从整体上提升交付效率和质量。

4. 有效沟通

如何把复杂的技术问题简单准确地表达出来,让别人听懂并且不产生误解,其实是每个开发人员都会面临的挑战。

比如,下面是一个研发 A 同学在遇到线上技术问题时,在群里面求助的情况。

A 同学:大佬们,新架构上线后,数据库不动了。
A 同学:业务方反馈说店铺活动有问题。
其他同学:各种问题讨论中,上下文信息很多……
A 同学:数据库有问题,报备风险。
B 同学:先把问题描述清楚。

A 同学此时的心理状态:产品都出问题了,大家赶紧来一起看一下,反正不是我的问题,我只是恰好被提及了,我也把日志和截图发群里面了,谁负责的问题谁自己看。

B 同学可能的心理状态:这啥问题啊,还得自己翻聊天记录看,现在没空,也没接到电话,先不处理。

这里恰好反映了两种典型的被动的沟通心态。一种就是 A 同学的只抛问题不找关联人,另一种则是 B 同学的要看问题的轻重缓急再处理。

你可能也发现了,在平时的沟通群里有很多类似这样的对话,几乎都是在做无效沟通,甚至一个问题出现了几个小时,既没有搞清楚问题是什么,也没有找到责任人是谁。

而实际上,当你具备了软件工程思维后,提问方式可以变为:“现在有一个问题需要解决,问题现象是 xxx,业务方的预期是 xxx,实际看到的是 xxx,不符合预期,从日志和报错看可能是 xxx 出问题了。由于 xxx 项目上线时间紧迫,急需解决,在线等。”从定义问题开始,到业务方期望的目标是什么、实际上发生了什么、收集到了哪些信息,再到自己初步分析的思路是什么,最后自己的计划是什么,都清晰而又系统地表达出来了。

这就是一个典型的有效沟通过程。这种解决思路可以大大提升你的沟通效率,直至问题高效解决。

5. 交付结果

在工作中,你可能往往因为编码任务太重,以为代码只要写完,任务就算是做完了,领导或项目组的成员都会自动知道你的项目结果。这其实是对交付结果最大的误解。实际上软件工程早已对此提出了一种解决办法——发布你的产品,用现在流行的话讲,叫具备闭环思维。

你是否遇到过这样的场景:参加一个需求评审,会上大家各抒己见发表意见却没有提出什么结论和待处理项,等到再次评审的时候,却发现问题越来越多,很多讨论过的问题需要从头再开始讨论。

如果我们把上面的需求评审会当成一个项目来看,这就是没有发布产品(也就是得到结论),形成不了闭环,导致项目无法完成,那必然也解决不了问题。

其实,交付结果意味着你需要主动结束项目,包括结束确认、结束反馈、测试验证是否通过等,这和等待项目自动结束是完全不同的一种思考方式。

换句话说,这些年软件工程的知识一直在更新迭代中,其“过程+方法+工具”的本质并没有变,无非是各种方法和工具的推陈出新。

为了更好地应用软件工程方法,你应该牢记下面的公式:

软件开发过程 = 定义与分析 + 设计 + 实现 + 测试 + 交付 + 维护;

软件开发 ≠ 软件编码;

软件工程 = 过程 + 方法 +工具。

实际上,软件工程对过程的改进思维,能够应用于很多方面,包括工作中的代码编写、架构设计、需求分析、制订计划、项目管理等。无论你是一个普通工程师还是项目管理者,都应该学点软件工程方法。

引用

https://kaiwu.lagou.com/course/courseInfo.htm?courseId=710#/detail/pc?id=6865

写出好代码系列 工程思维相关推荐

  1. 如何写出高性能代码(四)优化数据访问

      同一份逻辑,不同人的实现的代码性能会出现数量级的差异: 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升:同一份代码,也可能在不同处理器上运行也会有几倍的性能差异:十倍程序员 ...

  2. 如何写出高性能代码(二)巧用数据特性

    导语 同一份逻辑,不同人的实现的代码性能会出现数量级的差异: 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升:同一份代码,也可能在不同处理器上运行也会有几倍的性能差异:十倍程序 ...

  3. 如何写出高性能代码(一)善用算法和数据结构

    同一份逻辑,不同人的实现的代码性能会出现数量级的差异: 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升:同一份代码,也可能在不同处理器上运行也会有几倍的性能差异:十倍程序员不是 ...

  4. 优雅的写出 JavaScript 代码

    目录 前言 避免使用 js 糟粕和鸡肋 编写简洁的 JavaScript 代码 使用 ES6/ES7 新特性 Babel ESLint Prettier 采用函数式编程 优雅的敲 JS 代码的几个原则 ...

  5. 写出漂亮代码的45个小技巧

    不知道大家有没有经历过维护一个已经离职的人的代码的痛苦,一个方法写老长,还有很多的if else ,根本无法阅读,更不知道代码背后的含义,最重要的是没有人可以问,此时只能心里默默地问候这个留坑的兄弟. ...

  6. 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...

    如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进.使用清晰的变量名和方法名.在必要时提供文档与注释.不要过度精简代码等等. 但是对于什么是烂代码,你有比较清晰的认识吗? 在 G ...

  7. idea代码提示插件_IDEA 插件推荐 —— 让你写出好代码的神器!

    概述 今天介绍的插件主要是围绕编码规范的.有追求的程序员,往往都有代码洁癖,要尽量减少代码的「坏味道」. 代码静态检查是有很多种类,例如圈复杂度.重复率等.业界提供了很多静态检查的插件来识别这些不合规 ...

  8. 写出漂亮代码的七种方法

    首先我想说明我本文阐述的是纯粹从美学的角度来写出代码,而非技术.逻辑等.以下为写出漂亮代码的七种方法: 1.尽快结束 if 语句 例如下面这个JavaScript语句,看起来就很恐怖:  functi ...

  9. 如何写出“简单“代码?

    如何写出"简单"代码? 当你做实际开发中,你一定会发现有人跟你说,或者你在网上看:要写简单代码要写简单代码.    这句话其实就跟大家熟悉的设计模式中的简单(kiss)原则是挂钩的 ...

最新文章

  1. 如何成为一个合格的项目经理?
  2. 深入理解 Android Https
  3. 【转】一步一步学Linq to sql(五):存储过程
  4. 每日一博 - tcpdump小技巧
  5. 重学JavaScript(1)--JavaScript简介
  6. php用asp文件js,asp下用fso生成js文件的代码
  7. dvwa通关教程超详细
  8. 异步fifo_【好设计论文】一种面向异步FIFO的低开销容错机制研究
  9. python自主学习——Unicode
  10. MongoDB-day1:MongoDB安装使用、python操作、虚拟环境、windows下pip豆瓣源配置
  11. win7电脑怎么伪装ip地址【系统天地】
  12. Windows 域之 组、OU
  13. Matlab中矩阵的右上角有一撇表示什么意思
  14. Linux系统的应用
  15. 信息论基础(信息量、熵、KL散度、交叉熵)
  16. python nltk语义分析_Python nltk 如何解析出英语短语?
  17. Git workflow工作流及边角知识
  18. 免费的SVG在线编辑器大推荐
  19. 在Excel中按条件筛选数据并存入新的表
  20. 130. Surrounded Regions

热门文章

  1. 开发不能上外网怎么查资料_中考生不能复读,近一半上不了高中,怎么办?
  2. 服务器配置列表在哪个文件夹,FolderMagic
  3. php redis 用户会话,使用Redis保存用户会话Session详解
  4. Handler的源码分析
  5. 神经科学与“记忆印记”
  6. url传参(中文乱码)值得注意的地方
  7. iOS Runtime特性之关联对象
  8. layui table数据渲染页面+筛选医生+在筛选日期一条龙2
  9. 信息传递(NOIP2015提高组Day1T2)
  10. JavaGC(1)—深入浅出Java垃圾回收机制