我所说的“关于程序员的痛苦的一种悖论”描述如下: “好的程序员大部分的时间都在干他们厌恶的事情、使用他们厌恶的技术和工具。” 这是反常理的,看上去就是悖论;你会认为烂程序员才会把时间都花在烂技术上,优秀的程序员会把时间花在那些尖端的技术上。不是吗? 我在自己的体验中发现了这个悖论,直到后来我才明白为什么会是这样。 什么样的工作会让程序员们厌恶不已? 这对一些有经验的程序员来说并不是什么新闻,但我要把这向那些非编程人员解释一下: 好程序员厌恶做那些本来可以自动完成的事情。如果一个程序员被指使去做一个机器(通常是电脑)能自动完成的事情,他会非常的懊恼。程序员的志向是让机器尽可能多的替他们完成任务,只有剩下的一些机器不能完成的工作才会自己出手。 这是一个程序员应该具有的一种非常有益的本能。 一个简单的需要自动完成的工作的例子: 想象一个程序员浏览一个有1000行代码的文件。他想找到第791行,因为这一行被认为有问题需要修改。但编辑器现在显示到第30行。大多数人都会简单的拖动滚动条一直到自己想要的那一行。但一个好程序员是不会去干这样的事情的。他们会使用一个能够使他们直接跳到特定行的编辑器。例如,在我使用的编辑器里,“Ctrl-L -> 791 -> Enter”就能做这样的事情。 这个例子很简单;更复杂的例子有很多。 好的程序员厌恶做重复性的工作的原因是,这些小事情会打断程序员的思绪。思绪是一个脆弱的东西;一旦思绪被打断,需要花很久才能再接起来。如果你每5分钟就被这种体力工作打搅一次,你的思绪就无影无踪了。 在日常工作中,程序员需要处理各种各样的技术工作、使用各种各样的工具。程序员喜欢那种含“体力劳动”相对较少的工作。程序员喜欢那些只需要很少的体力劳动的技术和工具(Python,Django,git等都属于这一类),讨厌那些需要大量体力劳动的技术和工具。(这个我就不举例了:) 但程序员必须即要处理那些有趣的自动化的技术,同时也要做那些讨厌的,需要体力劳动的工作。好的程序员会尽可能的使他们的生活远离那些烂技术,但总有一些很糟糕的技术他不能简单的抛弃。有时是因为他们开发的产品需要这种技术;例如,所有的web开发程序员都必须要跟HTML打交道,但HTML里有很多很讨厌的属性。有时一些很烂的技术不能抛弃只是因为有大量的人在使用他们,程序员必须去使用它们。 大部分的时间都是花费在了烂技术上 从这个角度看,你就能很清醒的理解这个悖论为什么会出现了。烂技术会用掉大量的时间和精力。好的技术只需要很少的时间和精力。程序员每天的时间和精力是有限的。这有限的资源中很多一部分被投入到烂技术上,正是因为烂技术需要你付出更多。换句话说就是,他们主要的日常工作都是在跟他们讨厌的技术和工具打交道。因此,好程序员很痛苦。 我希望我的这篇文章最终能给解决这个问题带来一些启示,但估计不会很多。我们能做的事情就是尽量的抛弃那些烂技术,使它们远离我们的生活,而那些暂时抛弃不了的,我们只能忍受。
分享到:
相关推荐
8. **代码自我修改的怪圈**:程序员可能编写了一个能自我更新或修改的程序,这导致了代码行为的不可预测性,形成了一种自我迭代的迷宫。 9. **元编程的奇迹**:利用元编程技术,程序员可能创造了自动生成代码的代码...
它涉及到计算机视觉的前沿技术,如在极小的内存限制下创造引人入胜的视觉体验,同时也反映了编程社区中的一种创新精神和挑战极限的文化。对于程序员、计算机图形学爱好者以及对宇宙和外星生命问题感兴趣的公众来说,...
最后,蔡学镛的“香鸡排”提议,实际上是对台湾社会经济环境和个人职业发展之间矛盾的一种幽默而深刻的反映。它促使读者思考在理想与现实之间的抉择,以及在当前社会结构下,个人如何寻找生存与发展之路。 综上所述...
JavaScript,作为一种广泛应用于Web开发的脚本语言,其灵活性和易用性使得它成为实现这种交互式模拟的理想选择。在这个项目中,开发者可能使用JavaScript创建了一个可视化界面,用户可以通过这个界面调整参数,比如...
具体来说,我提出了一种我称之为数字艺术学习的方法,该方法为由于某种原因而被非传统教育方法所吸引的儿童量身定制教育。 在许多情况下,这些孩子是对艺术、音乐或表演感兴趣的孩子,但他们也可能只是讨厌数学和...
至少一种说法正确,至少一种错误,学习者需要找到符合这一条件的答案。 5. 撒谎问题:赵女士儿子偷吃水果和小食品的案例,学习者需识别唯一真实陈述,应用逻辑排除法找出真相。 6. 说谎与事实问题:关于零钱的谜题...
彼得原理是由劳伦斯·彼得在其著作中提出的一个理论,它深刻揭示了组织内部晋升体系中存在的一种普遍现象。该理论指出,员工在组织中往往会晋升到他们无法胜任的位置。这看似悖论的发现,实则来源于对组织运作中人性...
目录: 出版者的话专家指导委员会译者序前言第一部分 基础知识引言第1章 算法在计算中的作用 1.1 算法 1.2 作为一种技术的算法第2章 算法入门 2.1 插入排序 2.2 算法分析 2.3 算法设计 2.3.1 分治法 2.3.2 分治法...
当人工智能作为一种创作工具时,其生成的作品在符合作品构成条件的情况下,可以被看作是“作品”。这里的“作品”是指具有独创性、表达特定思想内容的文学艺术成果。此时,人工智能相当于一个辅助工具,其“创作者”...
8. **非阻塞同步**:另一种避免死锁的方法是使用非阻塞同步,即在尝试获取资源失败时,不立即阻塞,而是返回并尝试其他操作。 9. **哲学家的解决方案**:可以借鉴哲学家就餐问题的解决方案,比如使用一次性筷子或...
【Java】:Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle Corporation)开发,具有跨平台、性能高效、安全性强等特点。Java编程思想主要涵盖类、对象、接口、异常处理、多线程、集合框架...
内存堆栈溢出是一种常见的编程错误,发生在程序请求的内存超出分配给它的范围时。通常,可以通过编程语言的异常处理机制或特定的调试工具来检测这种情况。对于C++等低级语言,程序员需要更加小心,避免数组越界和...
10. 直角的证明:故事展示了数学证明在几何中的必要性,而学生用量角器量取直角则是一种直观的方法,但不符合严格的数学证明标准。 11. 查票的故事:数学教授找不到票无法确定目的地,这体现了数学逻辑在现实生活中...
1.2 作为一种技术的算法 第2章 算法入门 2.1 插入排序 2.2 算法分析 2.3 算法设计 2.3.1 分治法 2.3.2 分治法分析 第3章 函数的增长 3.1 渐近记号 3.2 标准记号和常用函数 第4章 传归式 4.1 代换法 4.2 递归树方法 ...
C++是一种强大的、通用的编程语言,以其面向对象特性、模板系统和性能而闻名。在处理IOI的问题时,C++的效率和灵活性是很大的优势。程序员可以利用C++的STL(标准模板库)来快速构建数据结构和算法,如vector、list...
11)四种强制类型转换 31 12 sizeof …31 13)动态库与静态库 32 14)压栈·优先级·位序·宏· Union·指针 32 15)new& malloc… 35 16) enum 35 2.面冋对象编程 面面面 35 1)构造函数虚函数静态...