让代码运行起来,比代码可读性重要

7个提高 Python 代码运行效率的小贴士 这些Tips可以帮助你优化Python代码,提高其运行效率。 阅读详情

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

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

"代码的阅读胜于编写" 这句话现在已经是程序员共识,它提醒我们,在编写代码时不能仅追求方便,而忽视那些将来需要阅读和修改代码的人。更一般地说,"代码的阅读胜于编写" 传达了一个观点:通过保持代码可维护性,保持简洁、编写测试和文档等方式来使得代码易于理解是一个明智的投资。它关乎对软件开发周期的全局视角。

让我用更简洁的表达方式来表述这个观点:

维护者 > 作者

我认为这种思路可以超越编写代码,并作为一个经验法则用于问题识别和决策。

代码的使用胜于阅读

代码只是达到目标的手段。软件应该有一个目的,它应该为用户提供服务。无论代码是否编写良好、可维护性如何,以及所使用技术是否先进,如果软件不能实现其目标并给用户带来良好体验,则一切都没有意义:

用户 > 维护者 > 作者

或者,既然我们不再需要区分开发人员角色:

用户 > 开发者

因此,与其猜测或询问用户需求,最好的方法是尽早、频繁地将程序放在用户面前,并结合他们的反馈来改进。

这是一个强大的思维模式,只要在开发过程中牢记用户,我们就能走得更远。这大致是我学习这个职业以及我职业生涯前半段对它的理解方式。

代码的运行胜于阅读

当我说 "运行" 时,我不仅指执行程序,还包括在生产环境中操作它,包括部署、升级、观察、审计、监控、修复和废弃等等。正如丹・麦金利所说:在保持系统可靠工作方面,长期成本几乎总是远远超过你在构建过程中遇到的任何不便。

我们可以将这个观点纳入我们的小模型中:

用户 > 运维 > 开发

我花了一些时间才完全理解这一点,因为根据我的经验,很多正在构建的软件实际上从未真正投入生产使用,至少没有达到重要规模。大多数软件都是基于从未经过测试的假设构建而成。但当你将代码运行在生产环境中时,简洁性原则就有了新的维度。它不再仅仅关乎代码本身,而是关乎减少移动部件并了解其故障模式。它关乎交付产品并确保即使在出现故障时也能正常工作。

此外,还有商业因素

我说过,在开发过程中牢记用户可以帮助我们走得更远。这适用于软件对用户有价值且良好运行的假设。对于开发人员来说,这是一个方便的抽象:我们提供优秀、可工作的软件,而业务则负责将其转化为利润。这在消费者和企业软件领域通常有效。但最终,这种抽象会被证明是一种过度简化,并且我们可以从中受益,将一些商业观点纳入我们的工作流程:

商业 > 用户 > 运维 > 开发

最明显的例子就是预算:我们没有无限资源来满足用户需求,所以需要衡量成本和收益。还有市场营销、截止日期、利益相关者和投资者等因素。个人兴趣和政治也会产生影响。某些决策在孤立考虑我们的软件、团队或用户时是合理的,但当考虑整个组织时可能不再合适。有时,我们需要关注能够产生收入的事务,而不是只迎合用户。我将再次回到这个问题。

反向思考

我们得到了一个小模型,它表达了软件开发中各种因素的相对重要性,或许可以帮助我们看到更大的图景并专注于重要的事情。现在我想看一下一些常见的软件开发功能障碍,并看看它们如何与该模型相匹配。

难以维护的代码

作者 > 维护者

这是我们起点。这是聪明而懒惰的代码变成了意大利面条和鬼屋,这是过早优化,这是只有卡洛斯才能碰触那个模块等等。

不可用的软件

开发者 > 用户

由那些不从用户那里学习或将技术放在第一位的团队制作的软件。过度工程化程序、恶化用户体验的 "现代化"、破坏浏览器功能的 Web 应用等等。

只在我的机器上运行

开发者 > 运维

没有考虑操作问题而设计出来的软件。这是过于复杂、有很多移动部分、为小数据负载设计高级数据库、由单个小团队管理的微服务生态系统。这是过早为规模而架构的软件。这是由与在它出现故障时被叫醒的人不同的人设计的软件。

正确的事情

开发者 > 商业

将代码视为目标本身。这是自命不凡的工匠们、泰坦尼克号上的音乐家和 Lisp 黑客制作的软件。

以简历为导向的开发

开发者 > *

没有风险,开发人员可以做他们想做的任何事情。

虚构的软件

商业 > 用户 > 运维 > 开发

这是已经构建但很少(或从未)投入生产使用的软件。我称之为虚构的软件。Charity Majors 称之为活在谎言中。

商业 > 用户 > 运维 > 开发

另一种虚构的软件是那些没有用户但具有可扩展性(大规模)的软件。这是无法解决问题或解决错误问题,可能没有人关心问题。这种软件源于采用一些炒作技术并将其应用于所有事物,直到出现模糊地符合某个用例需求。

晚期资本主义

商业 > 用户 > 运维 > 开发

风险投资支持下没有商业模式或其商业模式是增长至垄断然后剥削用户的软件。

全局来看

如果你还没有关闭浏览器标签,让我总结一下:

商业 > 用户

这个观点可能很难接受。

正如我上面提到的,我学习这个工作时,软件是为最终用户解决问题的。这在《程序员修炼之道》的最后一个提示中得到了总结,该提示说我们的目标是让用户满意,而不仅仅是交付代码。但自从我开始从事程序员工作,并且随着软件变得无处不在,我发现这种假设越来越难以维持。

有很多正在生产的软件根本不关心其用户,或者操纵用户,或者将其变成产品。这不仅限于社交媒体:作为用户,在没有弹窗试图吸引我的注意力之前,我甚至不能预订房间、订购食物或点击 Windows 开始按钮;在进行谷歌搜索时,我会得到一堆垃圾信息。

我们认为做好工作意味着什么与行业中相当大一部分人认为能够获利是相矛盾的,我认为这解释了许多软件专业人士日益感到不适的原因。虽然我们不能回避对我们领域的经济现实,但也许我们应该更加坚定地站在道德立场上,不伤害用户。承认用户并非始终排在商业之前,但商业也不应无条件地居于第一位:

用户 > 运维 > 开发
商业 > 运维 > 开发

商业 ≹ 用户

原文链接:https://olano.dev/2023-11-30-code-is-run-more-than-read

本文分享自OSC开源社区。

- EOF -

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

推荐阅读  点击标题可跳转

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

2、Python 可以比 C 还要快!

3、streamlit,一个超强的 Python 库

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

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

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

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

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

👇关注我的公众号👇

告诉你更多细节干货

7372c2e4e50ff9795ab36dd2dbd6ebea.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

如何让Python代码加速运行? Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,有很多时候,Python 的效率并没有想象中的那么夸张。本文对一些 Python 代码加速运行的技巧进行整理 0. 代码优化原则 本文会介绍不少的 Python 代码加速运行的技巧。在深入代码优化细节之前,需要了解一些代码优化基本原则。 第一个基本原则是不要过早优化。很多人一开始写代码就奔着性能优化的目标,“让正确的程序更快要比让快速的程序正确容易得多”。因此,优化的前提是代码能正常工作。过早. 阅读详情

相关推荐

基于Ventoy制作单个U盘引导Windows+Linux+黑苹果macOS

一款国内高手开发的一个名为Ventoy的开源多系统启动U盘制作工具,官方链接:https://www.ventoy.net/cn/index.html Ventoy 特点 不影响U盘日常普通使用 直接从ISO文件启动,无需解开 支持MBR和GPT分区格式(1.0.15+) 支持超过4GB的ISO文件 支持大部分常见操作系统, 已测试650+ 个ISO文件 不仅仅是启动,而是完整的安装过程 版本升级时数据不会丢失 Ventoy 待改进 不支持macOS和ChromeOS 准备2个空的U.

wybarcelona的博客 3万+

代码的运行胜于可读性

通过在代码可读性和商业需求之间找到平衡,我们可以确保软件既能盈利,又能为用户提供真正的价值。未来的软件开发应以用户为核心,同时考虑商业因素,从而实现长久的成功。“运行”不仅指程序的执行,还包括在生产环境中的操作,如部署、升级、监控、修复等。通过一个小模型,我们可以理解软件开发中各种因素的相对重要性,并帮助我们专注于重要的事情。然而,从商业的角度来看,代码能正常运行才是最为关键的。这一观点强调了简洁性原则的重要性,不仅关乎代码本身,还涉及减少移动部件并了解其故障模式,确保在出现问题时系统仍能正常运行。

硬核科技 341

MQTT与物联网平台(一):基础知识和设备接入物联网平台的实现(以华为云为例)

本文简单介绍了MQTT的基础知识和使用方法,以蓝牙WIFI双模芯片W801作为硬件设备,接入到华为云。

weixin_50622833的博客 1万+

python的入门学习:pycharm的简单练习

运行一个python file文件就是点击文件鼠标右键可以看到Run运行即可 print 'hello xfl' 领取Python学习资料可以加小编的微信:tz2020jd 给代码加入注释: # 这是一个单行注释 print 'hello python' # 注释1 # 注释2 这是一个多行注释/块注释 """ print 'have a nice day!' """ 什么时候需要使用注释? 1.注释不是越多越好,对于一目了然的代码,不需要添加注释 2.对于复杂的操作,应该在操作开始前写上若干注释

rainbow508的博客 1973

Simulink玩转PMSM无感FOC:从IF强拖参数调试到切换失败的避坑指南

本文深入探讨了Simulink在PMSM无感FOC控制中的IF强拖启动参数调试与切换避坑技巧。通过详细解析强拖加速、速度维持和闭环切换三大阶段的设计逻辑,以及五个常见陷阱的解决方案,帮助工程师快速定位启动失败和切换震荡问题。文章还提供了典型故障的波形诊断方法和高级调试工具链优化建议,是电机控制领域的实用指南。

weixin_29164843的博客 408

silvaco——GaN HEMT探索

上图为输出特性曲线 ,分别是在栅压为1v、3v、5v的情况下,可以看出在1v时器件处于截止状态,只有非常小近似于0的电流通过,随着栅压逐渐增大,沟道开启,产生漏极电流。上图为栅极漏电流曲线和转移特性曲线以及其提取的参数,可以看到阈值电压为=1.30249V,当栅压为0v时,Id=8.01032e-006,当栅压为5V时,Ig=3.11627e-006。albrct.n,低场迁移率模型,bn.albrct,an.albrct是albrct模型中的参数,可以由用户自己设定。lat.temp,晶格自热模型;

weixin_61913839的博客 7619

c语言如何实现高内聚低耦合_如何养成良好的编程习惯?这六点你不注意一下很难提升编程能力!...

导语:要想提高编程能力,养成良好的编程习惯是非常必要的,这是因为良好的编程习惯不仅仅使编写的代码看上去有规范的美感,还使编写的代码具有良好的易读性、扩展性和维护性等优点。那么,有哪些编程习惯是比较重要的呢?我们一起来看看吧!1.增强代码的可读性一个优秀程序员编写的代码不仅体现在代码的质量上,而且体现在代码的可读性上。由于我们编写的代码是给计算机运行和供别人阅读的,所以在编写代码时要兼顾这两方面。对...

weixin_39941721的博客 613

matlab实现MSK调制解调

文章目录一、要求二、设计三、代码四、结果五、结论 一、要求 画出MSK信号产生的信息、I路、Q路信号对比图以及接收端解调的信息恢复的对比图。 二、设计 1.MSK调制 2.MSK解调 三、代码 clear all;clc; N=20; T=1; fc=10; Fs=100; bitstream=randi([0,1],1,N); bitstream1=2*bitstream-1; b0=1; for i=1:N encode_output(i)=b0*bitstream

Time_book的博客 1万+

只运行一部分代码_5种使代码运行更快的强大方法

好的代码顺序应该是干净,健壮和快速的。Image Credits: Unsplash.com Harley Davidson我的第一个“快速完成此代码”(技术上的代码优化)分配是一个庞大的SAP定制应用程序,具有30,000多行代码。该应用程序加载数据的速度非常慢,显然,用户对此并不满意。我必须承认,应用程序写得很好。 最佳地进行了数据库调用。 仅根据需要使用循环,并且在应用程序中充分考虑了模块性...

weixin_31499719的博客 1103

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 304

数据结构之博弈树搜索(深度优先搜索)

数据结构之博弈树搜索(深度优先搜索)

LucianaiB的博客 1527

想减少代码中的if等判断来提高代码运行速度,有哪些方法可以尝试?

通过减少代码中的条件判断来提高代码的运行速度,通常可以尝试以下方法:使用多态和继承:通过使用多态和继承,可以在运行时选择不同的代码路径,而不需要使用大量的条件判断语句。这样可以减少条件判断的数量,提高代码的可读性和性能。使用查表法:将条件判断转换为查表操作。可以创建一个预先计算好的查找表,将条件判断的结果存储在表中,然后通过查表的方式获取结果,而不需要进行条件判断。这种方法适用于条件判断的取值范围较小且有限的情况。优化算法和数据结构:通过选择更高效的算法和数据结构,可以减少代码中的条件判断。

weixin_45752679的博客 1777

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1282

如何写出高质量的C代码?快来学习这些coding技巧

优秀的程序员往往将bug扼杀在萌芽中,很明显这是“另一种”程序猿,那么我们应该怎样写出一手高质量的优秀代码呢?

LEE180501的博客 2220

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

代码设计模式--提高代码的运行效率、可读性、可维护性、健壮性

介绍通过代码设计模式,提高代码的运行效率、可读性、可维护性、健壮性。理解设计模式作用、介绍23种设计模式的核心思想与具体实现。(1)计算技术&硬软件开发工程篇。(2)计算机技术基础&开发经验。(3)嵌入式系统硬软件开发。

weixin_64037346的博客 245

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

scala与java 差别

此外,许多相似于高级编程语言的语法也渗入其中(例如 Python),不仅提高了 Scala 代码的可读性,维护、修改起来也较为省时省力。相对于Java而言,Scala的代码更为精简(减低犯错),而且功能更为广泛(Scala其实是Scalable Language 的简称,意为可扩展的语言),许多Scala的特性和语法都是针对Java的不足和弱点来设计的。在此值得提醒的是,统计显示,Scala 的代码运行速率仅为 Java 的 8 成。

bfhcchfcj的博客 265

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

写这么骚的代码,不怕被揍么?

曾经,我接手了一份大佬的代码,里面充满了各种“骚操作”,还不加注释那种,短短几行的函数花了很久才弄懂。这世上,“只有魔法才能对抗魔法”,于是后来,翻阅各种“黑魔法”的秘籍,总结了一些比较实用的“骚操作”,让我们装X的同时,提升代码运行的效率(请配合健身房一起使用)。

IT界那些事儿 3万+

改善c++程序建议——让代码运行的再快一些(十)

 让代码运行的更快 1、 用移位实现乘除运算 2、 优化循环,提高效率: 在c++的循环中,for语句使用频率最高,while语句次之,do语句最少;在多重循环中应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数,提高效率。 3、 改造switch语句 (1)对于case的值,推荐按照他们发生的相对频率来排序,把最可能发生的情况放在第一位,最不可能发生的情况放在最后;...

yaoming168的专栏 123

代码注释:为未来点灯

注释是提高代码可读性的重要工具,主要分为单行注释(以#开头)和多行注释(三引号包裹)。注释应解释代码意图而非重复代码行为,保持及时更新,并可通过工具生成项目文档。合理使用注释能帮助团队协作和未来维护,建议养成写注释的好习惯。

m0_72990228的博客 450

如何写出好的代码/易于调试的代码 减少bug

assert(判断语句);需要包含头文件#include 意思是符合括号内的条件才往下运行,否则错误。此时const修饰的*p 意思是*p的地位等同于常变量。p不能修改,但是*p可以修改。1.const放在*号左边。2.const放在*号右边。*p不能改,但是p可以改。第一个const修饰*p。第二个const修饰p。const 修饰指针变量。不可以通过变量名修改。但是可以通过地址修改。

q1312022158的博客 315

设计模式示例

介绍架构模式设计的相关方法,包括ROS工程代码规范、工厂模式代码设计、命令设计模式、发布订阅设计模式、请求服务设计模式、单例设计模式、适配器设计模式逻辑代码重构及设计的技巧等等。

weixin_64037346的博客 278

python的程序规则_写出优美代码的七条规则(Python版)

编程是一种与计算机系统通信的语言。交流就是与某人分享思想。二进制语言是计算机的最核心的语言。但是在前端,我们有很多种语言。这些语言使用解释器将前端代码转换为二进制代码。基本上,系统对一行代码执行大量内部操作。为了与系统通信,我们需要给出清晰易读的命令。这对系统和代码查看器都很有帮助。一些程序员最初编写的代码行很高,这会影响程序的执行时间和编译时间。作为一个程序员必须知道一种特定编程语言的所有快捷方...

weixin_30308101的博客 604

优雅整洁的 Java 代码命名技巧,风之极·净化

合格的程序员不仅仅是让代码跑起来,而是要做到代码整洁,只满足为了能让编译器通过编译,机器能跑就行而写代码的程序会算不上开发者,码农都不算。好的命名能体现出代码的特征,含义或者是用途,让阅读...

HollisChuang's Blog 635

Python性能优化秘籍:让你的代码运行速度提升10倍

本文分享了10个提升Python代码性能的实用技巧,包括:1)选择合适的数据结构(set/dict);2)利用内置函数和标准库;3)缓存重复计算结果;4)优化字符串拼接;5)循环优化技巧;6)并行处理;7)使用NumPy数值计算;8)性能分析工具;9)避免全局变量;10)使用__slots__优化类。这些方法涉及算法复杂度、内存管理和并行计算等多方面优化,强调要先分析瓶颈再针对性优化,在保持代码可读性的前提下提升10倍性能完全可行。

exlink2012的专栏 303
上一篇: 推荐一门 MIT 的计算机入门课
下一篇: 浏览器还能这样用?!
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值