软件的目的有时会被遗忘


程序员似乎忘记了软件的真正目的,那就是解决现实问题。

50年前,在1968年,由北约科学委员会主办的软件工程工作会议召开。那时,人们开始注意到软件正在成为社会的基本组成部分。然而,它也变得难以理解。在那次会议之后,编程开始成为一个新的行业。它开始摆脱商界人士的控制。

无论从那时起编程的路径如何,业务和软件开发之间的分离仍然存在问题 - 或者是第一次召开会议时的“工程”。如果开发人员过于专注于开发,他们可能会错过他们编写的软件背后的目的。他们可能看不到不需要任何代码的隐藏解决方案。

这里有一个例子。

有一家初创公司正在建造一种设备,允许一个人使用蓝牙解锁他们家的门。与设备通信的可视界面是一个小部件,即使手机被锁定也可见。它只有一个名为“打开门”的按钮。

当用户靠近房子时,他们会抓住手机,找到小部件,然后单击按钮打开。

有人看着那个工作流程并问:

如果我们使用蓝牙,我们的商业模式接受任何拥有手机的人都可以进入房子,为什么我们需要让某人拿起手机并按下按钮?当检测到设备靠近1米时,我们允许门解锁。这样我们就不需要为设计和编写可视化界面付出代价了!

蓝牙故事是狭隘焦点的一个很好的例子:目标是以最小的努力解锁门。如果传感器是无线的,那么设计可视界面是没有意义的。

如果您了解业务正在尝试实现的目标以及对用户的价值,您可以将这些知识与您对该技术可能性的了解相结合。只有这样,您才能获得足够的信息以获得更好的答案,并得出结论。

这是如何解决编程问题的一个很好的例子,而不必编写除解锁功能代码之外的任何其他代码。然而,就像技术债务一样,没有什么可以作为在其余部分编写垃圾代码的借口。

并非每个代码都是有价值的

有时,严重bug的修复可能不是优先事项。如果您是加密交换,并且您的系统允许重复存款一次,那么如果解决问题的成本很高,人工干预可能是最佳的成本效益解决方案。

严重性和优先级之间的这种权衡让我想起了一位同事最近向我展示的模型。它被称为优先级矩阵,这是一种二维模型,可用于根据错误影响的用户数量和严重程度确定错误的优先级。

前面描述的单个重复存款问题属于影响一个用户不便类别。因此,优先3。

并非每个bug都值得修复

作为开发人员,尝试为所有内容编写脚本是很常见的。但是,一些可重复的任务可能不值得自动化。

复杂逻辑的封装和有用知识的抽象之间存在差异。有时,信息应该明确,以便易于理解。如果你抽象它们,它们会产生相反的效果并且更难理解。

在CLI中使用某些类型的低级命令比抽象知识的高级命令(如Git别名.)更有用。

并非每个命令都值得编写脚本

几年前,我使用Incremental Delivery进行了一个项目。这是一个身份验证系统,要求用户提交一些个人数据以供第三方提供商验证。

团队想要建立这种奇特的现场验证功能。然而,随着截止日期变得越来越近,验证在每个sprint规划中被排除优先级。最后,该团队发现,首先存在的花式验证没有任何意义。

原因如下:验证是强制性的!

提供有效信息符合用户的利益。如果用户提供了错误的数据,则不会对其进行验证,也无法使用该系统。此外,大多数浏览器都支持足够好的标准HTML验证。

在最糟糕的情况下,无法验证自己的用户会调用支持手动验证。

并非每个功能都值得编码

作为开发人员,如果您了解了您尝试解决的问题,那么您将能够提供更好的代码,有时甚至根本没有代码。您不是为在屏幕上书写字符而付费的 Code Monkey。你是一个专业的解决问题的人。

您编写的代码的目的是为了创造价值并使现有世界变得更美好,而不是满足您对自我世界应该是什么的以自我为中心的观点。

有人说:“如果你拥有的只是一把锤子,那么一切看起来都像钉子一样。”

最好先钉一个钉子,以便你可以考虑锤子的需要。

你解决的问题比你编写的代码更重要!相关推荐

  1. 你解决的问题比你编写的代码更重要! 1

    你解决的问题比你编写的代码更重要! 来源: 众成翻译    原文链接  英文原文: The problem you solve is more important than the code you ...

  2. 成功解决基于VS2015(Visual Studio2015)编写C++程序调试时弹出窗口一闪而过的问题

    成功解决基于VS2015(Visual Studio2015)编写C++程序调试时弹出窗口一闪而过的问题 目录 解决问题 解决方法 T1.修改配置属性的控制台

  3. 编写HTML代码常见错误以及解决方法?

    编写HTML代码常见错误以及解决方法? 参考文章: (1)编写HTML代码常见错误以及解决方法? (2)https://www.cnblogs.com/sqyss/p/11105221.html 备忘 ...

  4. java培训教程分享:Java编写软件代码自动提示功能

    本期的java培训教程分享主要是介绍的java编写软件代码的一个自动提示功能,很多零基础和初学java的同学们对这一块还不是很了解,Eclipse for android 实现代码自动提示智能提示功能 ...

  5. 编写优质代码的 6 大关键方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习实验室 [译者注]作为一名开发者,编写一手干净的 ...

  6. 如何优雅的编写 JavaScript 代码

    几乎每个大一点公司都有一个"运行时间长,维护的工程师换了一批又一批"的项目,如果参与到这样的项目中来,大部分人只有一个感觉--"climb the shit mounta ...

  7. AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码

    AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码 添加Watch应用对象时新增内容介绍 Watch应用对象添加到创建的项目中后,会包含两个部分:Watch App 和 Wa ...

  8. 不要将时间浪费到编写完美代码上

     不要将时间浪费到编写完美代码上 不要将时间浪费到编写完美代码上,原因就在于一个系统的迭代开发可能持续运行5年至10年甚至是20年,而某行代码甚至某个设计的生命周期则要短很多,只有几个月或者几天. ...

  9. 对编写的代码进行单元测试_编写数据访问代码测试–单元测试是浪费

    对编写的代码进行单元测试 几年前,我是为我的数据访问代码编写单元测试的那些开发人员之一. 我正在孤立地测试所有内容,我对自己感到非常满意. 老实说,我认为自己做得很好. 哦,男孩,我错了! 这篇博客文 ...

最新文章

  1. java 删除数组指定元素_Java从在数组中删除指定元素
  2. R语言KMeans聚类模型示例
  3. 上手kubernetes之前,你应该知道这6件事
  4. LNOI2014 LCA
  5. 我爱工程化 之 gulp 使用(一)
  6. vue中的provide/inject的学习
  7. 【Level 08】U08 Positive Attitude L2 Into the world of a bookworm
  8. mysql 实例与用户_MySQL(17):用户登录实例
  9. 年前辞职-WCF入门学习(5)
  10. 把“~/niunantest.aspx”转成http://localhost:4532/test/niunantest.aspx的方法
  11. mybatis插入时间_深入分析MyBatis源码
  12. Matlab R2016b简体中文版安装教程(附Matlab R2016b百度网盘下载地址)
  13. 方舟基础物品指令代码大全
  14. JS高级程序设计精简版(第十章:函数)附思维导图
  15. 申城「三日谈」:言汇百家,思通以达(SDCC 2017上海站PPT集锦)
  16. Mac 下修改文件的 md5 值
  17. Android程序员春招三面蚂蚁金服,7年老Android一次坑爹的面试经历,先睹为快
  18. 呼叫中心静态座席的配置
  19. python数据抓取工具_【重磅开源】Hawk-数据抓取工具:简明教程
  20. window server 2012 R2 端口耗尽 解决办法

热门文章

  1. fisher's exact test
  2. 在 Linux 下忘记 mysql root 密码的解决方法
  3. sap 给集团分配一个逻辑系统
  4. CentOS5.3编译安装mod_jk_1.2.15_链接器_整合apache_httpd和tomcat
  5. Effective C# 原则13:用静态构造函数初始化类的静态成员(译)
  6. Vue2.x开发饿了么项目(header部分)
  7. 实现图片预览效果及模糊效果
  8. 深度学习的异构加速技术(一):AI 需要一个多大的“心脏”?
  9. Java的缓存使用-Ehcache
  10. 性能调优常见问题与方案