编程主要是思考

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。

如果我的分享对你有帮助,请关注我,一起向上进击。

这篇文章是 Tim Ottinger 在其博客 "Agile Otter" 上发表的,标题为 "Programming Is Mostly Thinking"(编程主要是思考)。

文章讨论了编程工作的本质,强调了编程不仅仅是编码,更多的是思考和设计。

编程工作的本质:

编程工作很大一部分是思考,而不仅仅是打字或使用工具。即使在没有写代码的时候,程序员也可能在思考解决方案、设计架构或调试程序。

软件工厂的比喻:

生产实物商品时,几乎所有可见的工作都是运动。人们轧钢、冲压、压制、研磨、拾取和放置、螺栓/螺丝/铆钉等。

现代工厂使用计算机数控机器生产产品,这些机器可以生产出真实生活中可能不存在的原始模型的完美复制品。这些机器以抽象模型(实际上只是数据)为基础,并执行完美的动作。人类负责操作机器,而不是手工加工木材。

软件开发类似现代工厂,其中产品(软件)的复制成本几乎为零。一旦初始模型(数据)存在,就可以通过点击“复制”或“下载”按钮来创建完美的副本。

一旦初始模型(实际上只是数据)存在,那么所有完美副本的边际成本基本上为零。是的,这只是复制而不是创造,但这就是工厂所做的。定制商店可能会生产独特的物品(例如吉他),但工厂会制作原件的副本。

软件工厂往往会给你一个进度条,这样你就能直观地看到比特的移动,但从很多方面来说,你可以说产品并不存在。

设计与制造的区别:

软件开发更接近设计工作而非制造。一旦设计完成,机器可以几乎零成本地复制数据模型。

在我与鲍勃·马丁大叔共事的这些年里,我听到他不断告诉客户和学生,软件开发不是制造操作,而是设计操作。一旦完成初始设计,所有重复工作都由机器完成,成本几乎为零。

因此,程序员、测试员、产品负责人、Scrum Master 和软件管理领域所做的一切(如果他们做得对的话)就是设计数据模型,该模型稍后将被工厂用来创建副本,供客户、顾客以及该软件所服务社区中的其他人使用。

然而,工业时代将软件开发视为工厂的机械化、工业化的理念仍然存在,开发人员尽职尽责地试图让它看起来像是在从事体力劳动,而这损害了整个过程。

所有智力活动都难以观察和监控。一个完成了 80% 的想法没有实际表现。这只是一个想法,还没有完成。有时我们会进行实验或概念验证代码或笔记,但它们无法像实际工作那样给出准确的“完成百分比”数字。

  • 制造中的椅子在 50% 标记处看起来已完成约 50%。完成后,它看起来已完成。

  • 椅子的设计可能要等到完成 70% 以上才会在纸面上呈现出来。我们不知道它是否真的完成了 70%,因为它还没有设计完成。

思考与编码的关系:

程序员在编码前会花费大量时间阅读、研究、决定、确认、验证,这些智力活动最终转化为代码库中少量的代码变更。

程序员一整天都在不停地打字。

在这 30 分钟里,他们要重现一天中写过的、没写过的、编辑过的、返工过的所有工作的净结果。这并不是他们付出的全部努力,而只是努力的残余。

程序员要尽可能避免Bug。

为了做到这一点,他们必须在编写代码的过程中不断对代码进行评估,假设可能会引入哪些缺陷或安全漏洞。毕竟,在共享代码库中引入缺陷会受到最严厉的批评。

编程是一种有损压缩。

代码只说明程序运行时必须做的事情。程序员为什么选择一种特定的方式而不是其他方式,这种方式如何影响系统的其他部分,引入和删除了哪些错误,以及避免了哪些陷阱,这些(一般)都不会出现在程序文本中。

大部分工作不在于进行更改,而在于决定如何进行更改。做出决定需要我们理解已有的代码。当代码杂乱无章或设计在源代码中并不明显时,这尤其耗费时间。

程序员是在社会环境中工作的,因为他们的所有成果都集成在一个共享代码库中(大多数程序员都使用结对编程或其他 "多眼 "技术)。程序员可能会帮助其他程序员、测试人员或操作人员处理他们的工作。与他人联系和交流的好处和代价并不体现在代码中。

程序员会所做的工作就是阅读、学习、理解,有时是猜测、研究、调试、测试、编译、运行、假设和推翻他们对代码应该是什么样子的想法。

总之,他们是在思考和决定。大部分工作都是脑力劳动。

文章提出其他要点:

  1. 对管理的启示:文章建议,管理层不应仅仅关注程序员编码的时间,而应提供有利于高质量思考的环境和流程。

  2. 社会化工作:程序员的工作是社会化的,因为他们的成果都集成到了共享的代码库中,并且经常使用配对编程或其他“多眼”技术。

  3. 代码只是工作的残留:代码只是程序员思考和决策过程的最终产物,而不是工作的全部。

  4. 提高生产力的方法:作者认为,提高生产力的关键在于构建促进共同思考和决策的系统,而不是简单地增加编码时间。

文章最后还包含了一些读者的评论,他们分享了自己的观点和经验,进一步强调了思考在编程工作中的重要性。

来源:网络

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~

推荐阅读  点击标题可跳转

1、Python 项目工程化最佳实践

2、Python 可以比 C 还要快!

3、streamlit,一个超强的 Python 库

4、豆瓣8.9分的C++经典之作,免费送!

5、Python 3.12 版本有什么变化?

最近我开了一家淘宝店,名字叫【打破壁垒】,主打程序开发相关付费素材、工具的共享类商品,帮助大家降低试错和使用成本。欢迎大家关注。

1394b8dfc9913084ee37724ff54942f0.jpeg

长按扫描下方二维码,然后点击页面中的【打开淘宝】,即可进入店铺:

576505516269c5ad0470c9790d26e150.png

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

👇关注我的公众号👇

告诉你更多细节干货

085173294782abae99245d4d271c0db2.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

内容概要:本文档是一份涵盖多个科研领域的Matlab、Python及Simulink代码实现资源集,重点包括通信系统中的GMSK调制二比特差分解调、Turbo码结合BPSK或GMSK的调制解调技术研究,以及永磁同步电机控制、微电网优化、路径规划、负荷预测、风电功率预测、无人机控制、电力系统仿真、信号处理、图像处理、雷达技术、车间调度、智能优化算法等多个方向的技术实现。文档详细列举了大量基于Matlab/Simulink的仿真项目,如自抗扰控制、模型预测控制、涡轮编码调制、智能优化算法等,并提供了相关代码资源的网盘链接。同,文档强调科研过程中逻辑思维、创新意识与“借力”工具的重要性,倡导系统性学习与实践相结合,帮助研究者高效推进课题研究与论文复现工作。; 适合人群:具备一定Matlab、Python或Simulink编程基础,从事电子信息、通信工程、电气工程、自动化、控制科学与工程、电力系统、计算机科学等相关领域的研究生、科研人员及工程师,尤其适合开展仿真类课题或需要复现顶刊论文的研究者。; 使用场景及目标:① 学习和复现现代通信系统中GMSK、BPSK调制与Turbo码结合的仿真流程;② 掌握永磁同步电机控制策略(如自抗扰、滑模控制、模型预测控制)的建模与仿真方法;③ 实现微电网能量管理、路径规划、负荷预测、风电功率预测等复杂系统的算法开发与仿真验证;④ 辅助科研论文作与课题研究,快速搭建仿真模型并优化算法性能;⑤ 借助智能优化算法解决生产调度、路径规划、资源配置等复杂工程问题。; 阅读建议:建议读者按照文档中项目分类循序渐进地学习,优先关注自身研究方向相关的代码实例。应结合理论知识,深入理解代码逻辑,并尝试在提供的仿真模型基础上进行参数调整与功能扩展,以达到掌握核心技术与提升科研效率的目标。注意资源来源于第三方,使用需尊重版权,避免用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值