聊聊软件工程的“内卷”

muchan92
• 阅读 1257

软件工程的开发曲线极度类似 emacs 的学习曲线。

聊聊软件工程的“内卷”

这确实令人尴尬,哭笑不得,又很是郁闷。(心中一万只……)

内卷是如何产生的?

过程式的编程方法是导致内卷的原罪

过程式的方法要求我们必须一步一步走遍软件工程的每个角落,才能看出整个工程的一点点影子。而工程规模越大,代码量越多,逻辑过程就越复杂,内卷就越严重,使人陷入其中难以自拔。

逻辑过程就是“内卷”

所以,内卷伴随在每一行代码中,是伴随每个过程、步骤的危险副作用。根本无法消除。

内卷变危险的迹象

主要有两个迹象,表明内卷已经相当严重、危险了:

  1. 看不懂
  2. 改不动

当开始看不懂的时候,意味着内卷的威力开始凸显了,此时影响还不算甚大,加把劲还能看懂。
当实在看不懂的时候,意味着内卷已经开始占上风,此时开发者开始处于被动的局面。

当开始改不动的时候,意味着内卷的杀伤力已经强悍了,可以伤到开发者了。
当实在改不动的时候,意味着开发者要被内卷团灭了,开发者可以飙脏话跑路了。

如何看“得”懂,改“得”动

要想看得懂,改得动,就要避免逻辑过程的复杂性,避免内卷。
因为按照逻辑过程组织出来的程序,也必定要由我们自己一步一步吃力走完所有的过程, 过程之间的关联和跳跃,更会加剧内卷,最后动弹不得,等待崩塌。

那么,怎么做到呢?
要想避免内卷,就要避免逻辑过程。
对于我们人类而言,所有的、事无巨细的过程并不是必须的,我们其实最关心的只是输入和结果(也即输入和输出)。
这就像跟工厂定制一个产品,但并不 care 它是怎么生产出来的,而只 care 最终的产品。要做的只是描述清楚需求。
不然,难道要造火箭,就要把涉及的所有零件制作流程都弄懂吗?这显然不靠谱。 但实际上那些内卷变危险的软件工程,使用的就是这种方法(说面试造火箭,工作拧螺丝的,你确实在造火箭,你造吗)。

我们关心的只是输入和输出,不要在意那些细节。描述清楚需求就够了。
如果有一种方法,只需描述清楚输入和输出,就能跑通程序,那就好了。
这种方法还真有,就是数据结构化编程。

数据结构化编程

链接在这里(很硬核):https://github.com/rainforesters/rainforest-js

这种方式要求我们描述清楚预期的输入和输出的数据结构,然后填充输入数据(即:令输入准备好),就能自动获得预期结果。
这样我们就关心该关心的,忽略 no care 的。

核心思想是:期待的数据准备好了,就该获得预期结果。
这真的确实符合人类的生活习惯。

为何会有这种效力?

秘密原因之一就是,我们在一开始,就明确的描述清楚了预期的数据结构。 从这,就能完整了解程序,而不必深入其中。我们看到的就是预期的结果。

另一个原因是,数据结构是可以自洽的,它包含了输入和输出,非常棒,这就能够把自己描述清楚了。 它自己就解释了自己的意图,我们不用再去通过复杂的逻辑过程去推测意图了。

下一个原因是,数据结构是层次分明的,并且它是自洽的,所以在每个层次上都能弄懂意图。

还有一个大的、神奇的原因是,整个理论思想和以往的都不同了,无论是在认知上,还是用法上都更符合人类的习惯。 这里包含许多可以一一拿出来探讨一番的原因,限于篇幅,只简要列几项。

更符合人类习惯

  • 新认知:编程不再是去推导结果,而是为尚未准备好的输入,去填充数据。
  • 新概念:当输入数据准备好时,自动执行预期规则,获得预期输出结果的编程方式。
  • 新思维:关心数据结构描述,忽略复杂的逻辑过程。
  • 顺序无关:如果预期多个输入数据,任哪个先准备好都无所谓,只要最终都准备好。(这很赞,上手就能感受到的快乐;团队协作更友好,友爱)
  • 提前预期:不必等待数据经过逻辑过程之后,才能推导出结果,而是提前定义预期规则,静待数据准备好,就能获得结果。(试想团队协作的和谐画面)
  • 弹性规划:如果某人任务量过大,可以再次规划数据结构,将大任务逐层拆分成子任务作为输入数据,多人并行开发。(这几乎是可以无限拆分的)
  • 并行开发:Yes!
  • 自动化:回归到新认知、新概念上来,只要期待的数据准备好了,就会自动获得预期结果。不必费力主动去驱动数据。
点赞
收藏
评论区
推荐文章
海军 海军
2年前
程序员如何摆脱内卷?
前言你知道到目前为止国内程序员有多少吗?对于这个问题,似乎没有一个准确的答案,不过据IDC保守估计500w作用。据网站创始人蒋涛透露,CSDN注册会员超过2500万,其中活跃用户超过800万(3个月内登录的),这其中30%是学生,60%是和一线开发相关人员,也就是说差不多500万。在当下互联网中流行的一个词语"内卷",引起了广泛的热议。在这个万
Easter79 Easter79
2年前
stm32 diy 机械键盘
程序员对机械键盘的需求不止于情怀,当然,对于算法工程师、逻辑复杂而代码量小的软件工程师来说,平时对键盘的操作并没有那么多,可能对机械键盘并不感兴趣。而我曾经是一个日常大量编码、运维的数据工程师,逻辑简单,键盘操作却很多,特别是对十几台服务器ssh不能用鼠标,更增加了键盘的用量。为了统一工作流程,我使用vim作为Windows、Linux的唯一编辑器,让c/c
开发者测试你必须知道的7件事
好买网(www.goodmai.com)IT技术交易平台摘要:开发者测试是现代软件工程中非常重要的一环,敏捷开发、主干开发这些先进的项目管理方法和流程都基于完善的开发者测试。一、“开发者测试”就是“开发者来测试”开发者测试是现代软件工程中非常重要的一环,敏捷开发、主干开发这些先进的项目管理方法和流程都基于完善的开发者测试。当每个月甚至每周都要交付一个版本
Stella981 Stella981
2年前
DevOps是软件工程的未来!
!(https://oscimg.oschina.net/oscnet/f1355e4ee4df64508969a183fa609754c3c.jpg)19年6月,腾讯蓝鲸智云与嘉为科技于北京、上海、广州、深圳四地成功举办《蓝鲸DevOps,为研发效能而生》专场技术沙龙。本次活动,中国DevOps大师、腾讯高级管理顾问乔梁,腾讯蓝鲸创始人
Stella981 Stella981
2年前
Scrum 实操流程
Scrum是用于开发、交付和持续支持复杂产品的一个框架,是一个增量的、迭代的开发过程。敏捷的原则和方法必须在每天的实践中落地,对人和管理要求高。所以有scrummaster为了适应变化,敏捷的迭代周期短特征1.迭代开发:这意味着你应该重复开发过程。2.增量交付:意味着你应该一步一步地创建产品的“可用”子集
Stella981 Stella981
2年前
ReviewBoard代码评审实践总结
代码评审代码评审(CodeReview),顾名思义是对代码进行评审,是软件工程的活动之一。通过代码评审可以保证代码质量,促进团队知识共享……好处多多。版本控制与代码评审软件工程的各个活动总是离不开工具的支持。代码评审工具首先必须和版本控制工具相结合的。现在主流的两种版本控制工具:SVN和GIT。GI
Stella981 Stella981
2年前
DevOps的概念
    DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。  1\.简介    DevOp
Stella981 Stella981
2年前
Javascript模块化开发-轻巧自制
一、前言现在javascript的流行,前端的代码越来越复杂,所以我们需要软件工程的思想来开发前端。模块化是必不可少的,这样不仅能够提高代码的可维护性、可扩展性以及鲁棒性,更大的好处就是能够提升整个团队的开发效率,也能够让新进的程序员更快的接手工作。今天晚上根据前辈们的经验,写啦一个简单的模块定义的封装组件,当是练手吧。不过感觉还是蛮好用的。
python那些更严的反爬技术
在几年前“内卷”已经被一些人使用,而近两年受到各种不可抗力的影响,则进一步加剧了“卷”的程度。为缓解压力摆脱内卷,有越来越多人在开辟副业兼职赚钱,毕竟大家都希望有更多的收入而现在人工智能、大数据与物联网的爆火,在这个全民副业的时代,若是能掌握与这些领域关系密切的Python技术,则能在兼职副业方面获得极其显著的特殊优势。并且现在互联网行业对Python
小万哥 小万哥
3个月前
C# 面向对象编程解析:优势、类和对象、类成员详解
C什么是面向对象编程?OOP代表面向对象编程。过程式编程涉及编写执行数据操作的过程或方法,而面向对象编程涉及创建包含数据和方法的对象。面向对象编程相对于过程式编程具有几个优势:OOP执行速度更快,更容易执行OOP为程序提供了清晰的结构OOP有助于保持C代码
muchan92
muchan92
Lv1
植树人
文章
1
粉丝
0
获赞
1
热门文章

暂无数据