`

知道得越多编程越慢怎么办?

阅读更多

Zilk1988 年 14 岁时就开始编程,此后尝试过几种职业,最终还是在 1997 年决定成为职业程序员(又称码农),现在已经 39 岁,对此选择依然无怨无悔。

 

Zilk1988 年 14 岁时就开始编程,此后尝试过几种职业,最终还是在 1997 年决定成为职业程序员(又称码农),现在已经 39 岁,对此选择依然无怨无悔。

但是后来他发现一个问题,自己的经验越丰富,完成项目或任务的时间反而越长。因为他见过了太多可能会出问题的情况而对选择踌躇。比方说,假设他刚想 到要写一段写入文件的代码时,电光火石之间他就已经开始担心起下面的一系列的问题:权限、锁定、并发、原子操作、迂回 / 框架,不同的文件系统、目录中的文件数、可预测的临时文件名、PRNG(伪随机数生成器)的随机性质量够不够、操作过程中断电怎么办、API 怎么写才好理解、文档应该怎么写等等。

简而言之,他的问题已经从“怎么做”变成了“怎么做最好 / 最安全”。

结果就是他他做出来的版本坚如磐石,但是也导致他完成项目的时间比菜鸟还要长。

Zilk 说,他自己精通算法、热爱数学,享受复杂项目,专注度也没有问题。也许经验是有问题(尽管已经 39 岁了),导致害怕犯错,使得项目费时。所以他在StackExchange上邀请同行帮助他解决这个问题。

下面就是精选出来的解决方案:

Telastyn:

你完成项目并不慢。以前你认为自己的菜鸟项目做完了但实际上并没有完。你应该把质量卖给客户。“公司可以做得更快成本更低,但项目真的完成了吗?或者说你愿意花几年的时间找 bug 吗?”此外,你还应该知道并接受那句老话:“完美是好的敌人。”

sevenseacat:

“好、快、省只能 3 选 2”。以前你懂得少所以牺牲了“好”,现在你懂得多了却牺牲了“快”。

mouviciel:

似乎你的经验的确不足:)。教训:遵守需求即可,不要想其他。这样才不会实现不需要的功能。

Satish:

应考虑敏捷方法论而不是瀑布流。先交付然后迭代交付。此举有助于降低风险和成本。

DXM:

似乎你加入黑暗面:管理的时候到了。

我不是要建议你放弃编程变身经理。但从你的描述来看你的经验仅限于技术层面。写文件这么简单的事情你居然能想到 10 个方面的问题,稚嫩一点的开发者绝对是想不出来的。这不是什么坏事,但是……

黑暗面的一切都与现值有关。它要考虑的是如何用最小的投入实现最大的产出(成本效益分析)。商业上的一切事情都要归结到成本、成功几率、失败几率、潜在回报等问题。做好这方面的数学然后采取相应行动。

哪怕你是开发者也无妨:忽略权限和命名冲突的情况下建个临时文件只需 5 分钟的时间。净收益:团队其他成员可以开始依赖此文件的代码编写工作。这是不是一个完美的解决方案?当然不是。99% 呢?95%?90%?这些可能性是存在的。

还要问你一个问题:你对技术债务(注:快速解决但会增长后续维护成本的做法)感觉如何?有人认为不应该有技术债务。我不同意。跟商业一样,技术债务 让你可以借到“金钱”和“时间”以便晚点交付某样东西。2 年做出一个完美解决方案,或者用 4 个月时间快刀斩乱麻作出客户可以使用并且购买的东西,哪一个更好?判断当然要因情况而定,但是大多数情况下如果你要让客户等两年的话,客户可能早就跟竞争 对手签约了。

关键是像管理商业债务一样管理好你的技术债务。借的钱不够的话就拿不到最佳的投资回报。但是负债太高的话利息会把你压垮。

我的建议是用番茄工作法。专注于小的时间间隔(番茄),然后为未来的工作 / 研究分配这些时间段,并且在执行的过程中不断根据事情的优先级进行调整。

Saul:

编程的一个关键是管理并控制好复杂性,这是我的最高优先级之一。忽略了复杂性管理,要么缺陷频发,要么软件的 ETA(预计到达时间)急剧增加。

软件复杂性有很多不同的管理层次和办法,好的做法可以是这样的:“任何软件项目的最高优先都是客户满意度,这是客户期望的函数。”

换言之,软件复杂性取决于你控制客户期望的水平如何。

如果你接受这个观点,那么下面两点也很显然:

  1. 客户期望必须明示

  2. 客户期望永远都可以改变且通过协商完成。

你举了一个很好的例子,“直接写”还是“无数的其他考虑”。考虑一下,如果有人详尽写下了此二者的需求,双方的功能描述还是一样的吗?

同样是造飞机,F16 能飞,航模也能飞,但那能一样吗?

3
0
分享到:
评论

相关推荐

    音频编程的编写文档

    音频编程的编写文档 ...音频编程是一种复杂的技术,需要考虑音频采样、音频播放、采样频率、量化位数、声道数等多个因素,并且需要注意声卡驱动程序的限制和应用程序读取数据的速度,以确保音频信号的质量和可靠性。

    【嵌入式】程序为什么越优化越慢?

    然而,有时候我们可能会遇到一个反常的现象:程序在经过优化后反而运行得更慢。这个问题通常与编译器优化策略、处理器的缓存机制以及代码结构紧密相关。 在给定的案例中,开发者在Nios II内核的嵌入式平台上使用GCC...

    串口编程调试精灵

    停止位越多,传输的效率相对较低,但能提高数据识别的准确性。 5. **校验位**:校验位用于检测数据传输的错误,常见的校验方式有奇偶校验、无校验、CRC校验等。 6. **握手协议**:如xon/xoff或RTS/CTS,这些协议...

    少儿编程-电子学会Python考级一级知识点汇总

    - 设置画笔移动速度:`turtle.speed(速度)`,速度范围为0~10,0最快,数值越大速度越慢。 - 设置画笔造型:`turtle.shape(形状)`,形状可以是箭头、空白、圆形、基本形状、正方形、三角形、海龟等。 4. **画笔...

    VC文字语言朗读编程

    4. **语速和音量控制**:在使用ISpVoice时,可以通过调整其Rate属性来改变朗读速度,数值越大语速越快,反之越慢。同样,Volume属性可以用来调整音量大小,值的范围通常是0到100,其中100代表最大音量。 5. **事件...

    Python3教程-廖雪峰

    用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算机干活的CPU只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。...

    解决python运行效率不高的问题

    虽然使用python的编程人员都应该接受其运行效率低的事实,但python在越多越来的领域都有广泛应用,比如科学计算 、web服务器等。程序员当然也希望python能够运算得更快,希望python可以更强大。 首先,python相比...

    数控加工工艺与编程考试试题模板.doc

    8. 机床控制系统:试题中涉及到机床控制系统的相关知识,例如恒线速控制的原理是当工件的直径越大,工件转速越慢(题18)、经济型数控机床一般采用半闭环系统(题19)等。 9. 判断题:试题中涵盖了多种判断题,例如...

    单片机流水灯编程各个花样自己改下数据就可以了很实用不下会后悔

    这使得LED的变化节奏可调整,延迟时间越长,流水灯变化的速度越慢。 这个程序的核心在于查表法的应用,它允许用户通过修改TAB数据表中的数据来创建新的流水灯效果,而无需改动程序的主要逻辑。这大大提高了代码的可...

    触摸屏与plc通讯较慢的主要因素

    人们可能会认为刷新周期设置得越短,通讯就越快。但实际上,当变量数量较多时,过于频繁的刷新会导致通信堵塞,反而降低通信速度。因此,合理的做法是根据实际项目的需要来设定变量的刷新周期,对于不那么关键的变量...

    Python3-廖雪峰[带标签完整版]-www.yeayee.com

    用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算机干活的CPU只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。...

    微机原理与控制技术-卢晓红3-113存储器及可编程接口芯片.ppt

    4. 可编程中断控制器8259A:管理中断请求,协调CPU对多个中断源的响应。 这些接口芯片在微机系统中起着不可或缺的作用,它们允许微处理器与外部设备灵活通信,实现复杂的功能。 总的来说,这门课程涵盖了微机系统...

    圣诞树代码编程python

    首先,我们需要创建一个turtle对象,并设置它的速度(速度越慢,绘制过程越容易观察)。然后,通过调用turtle对象的`forward()`和`left()`方法,让海龟向前移动并改变方向。我们可以用嵌套循环来实现树干和树枝的...

    MYSQL高效编程

    然而,索引并非越多越好,过多的索引会增加写入操作的成本,因此,需根据查询模式和数据分布情况,精心设计索引策略。例如,对于频繁出现的查询条件字段,应优先建立索引;对于范围查询,考虑建立复合索引;避免在...

    三、202109青少年软件编程(Python)等级考试试卷(一级).docx

    13. 海龟绘图时,使用speed(n),n的值越小,绘图的速度越慢,故n=0时的速度最快。 14. print(51%10)的结果是1,因为51除以10的余数是1。 15. print()函数的功能是进行输出。 16. mixed operation的顺序是先执行...

    C语言图形方式下的编程.doc

    分辨率越高,图像细节越清晰,但对硬件要求也越高。例如,MDA卡仅支持字符显示,而VGA卡则可以达到更高的分辨率并支持多种颜色。 2. **显示速度**:指图形和字符在屏幕上更新的速度,与分辨率和扫描频率有关。高...

    PID控制原理及编程方法

    比例项越大,系统的响应速度越快,但是过大的比例系数会导致系统振荡。 **积分部分**:积分项用于消除稳态误差,即使得系统的长期误差趋于零。积分作用能够提高系统的控制精度,但过度的积分作用会使系统响应变慢,...

Global site tag (gtag.js) - Google Analytics