阅读更多

5顶
1踩

非技术

我老爸常对我说,「孩子,别太着急。慢点来,你完成工作的速度会更快。」

 

我曾在旧金山湾区的很多高科技创业公司工作过。现在已经有52岁,我编程的速度不快,却经过深思熟虑再开始。我就像是一个写代码的设计师;随着你的深入阅读,这一点将会变得非常显而易见。

 

最近,我和一些年轻的程序员一起做项目,他们信仰快速开发,迭代修改,这使得我缓慢的编程遇到了困难。这份工作,鼓励我们在同一个代码仓库里面工作,就好像是一大锅汤,如果我们一起不停的大力搅动,一个奇迹就会从中诞生。

 

实际上并不会。

 

这帮程序员信仰“所有的工程师都是可以被取代的”这种谬论,因而没有人需要为这些代码的任何方面负责;任何一个程序员可以在任何时候,改变代码的任何部分。毕竟,我们有像Github 这样特别赞的服务,来管理和合并来自任意数量的程序员们提交的任意数量异步开发的代码。只要每个人都频繁的提交(commit),不破坏任何东西,那么所有的东西都会好好的。

 

扯犊子。

 

你不能期许省略设计过程。这一过程在人类文明开始时就存在了。当下最新最灵巧的开发工具,不论它多么灵巧,也不能替代那些建造了大教堂、铁路和拍出长篇电影的最佳实践和现实中的合作。

任何编程都没能创造这样一个工具,可以减少软件开发的时间,让一群猴子以它们可以接受的速度来工作。

 

心律不齐

 

在这样一群信仰快速开发的程序员中,做一个我这样缓慢编程的程序员的代价,就是某种形式的心律不齐——因为我自己的编程节奏都被其他程序员那机枪似的迭代开发搞乱了。我的编程风格是这样,由一些不同尺寸和时间尺度的弧线组成,开始是时候是探索、试验和出错,使用一些hacks和临时变量。基本上是在做一些构建工作。程序初露端倪。稍后,我会回头去做些修改。最后结束的时候,是完整实现的代码(「打扫战场」是完成我这个工作循环的一个必要的部分)我编写代码的这一流程与策略、设计方案、架构的出现是同步的。

 

有时候,当一个成熟的方案出现后,我会回头重新开始。因为我觉得我会有更好的点子。有时候我错了,有时候我是对的。在一个方案完整的呈现在我面前之前,我是没有办法去知道对错的。

 

总之,先回到“一锅汤程序员”吧。问题是这样的:总体上,软件生态系统并没有停一停的意思——没有机会去引入设计过程,那么怎么能有人,而且是快速开发程序员,做出好的设计呢?



 

那些认为快速编程和慢速编程一样(除了速度以外)的程序员,他们并不理解设计过程。同样,神经学家现在认为,像流体一样穿过大脑的神经元放电会产生颞混响,这和思考,意识息息相关,好的设计是需要花费时间的。

 

慢速编程运动

 

维基百科记载:「慢速编程运动是慢速运动的一部分。这是一种软件开发哲学,强调仔细的设计,高质量的代码,软件测试 和思考。 尽量避免豆腐渣工程,垃圾代码和过快的软件发布。」

 

维基百科同时还这样描述「慢速软件开发」:「作为『敏捷开发』运动的一部分,世界上各个软件开发者团体期待更有预见性的项目,意在获得可持续的职业生涯,同时保持工作和生活的平衡。他们进行了诸如结对编程代码审查代码重构等实践。这产生了更多可靠的,健壮的软件」

 

在旧金山湾区,那些由风险投资支持着的软件开发,火急火燎地开在快车道上。

 

资金被投资在研发过程中的那些非自然的需求上,实际上应该把它留给设计演进过程中那些符合自然节奏的点。快,并不总是一件好事。实际上,放慢速度有时候意味着快。数字科技是如何侵占我们自然的节奏的,这一个主题在 Rushkoff 的Present Shock 中有所阐述。

 

还有一个问题:对科技近乎宗教般的痴迷——以及对工具的迷恋。人们想知道为什么软件很糟糕(没错,它很糟糕)。软件之所以这样糟糕,主要是因为纸上谈兵。快速开发的程序员会编写一些工具,来帮助他们使用其他的一些工具,他们利用这些工具来编写自己的代码。

 

这就是我为什么认为我们需要一些年长的人,女性、教育者和艺术家参与到软件开发中。更多人与人的交流,更少工具与人的交流。我指的不是做一些外围的工作,提供问询或是装饰UI。我的意思是深入内部——确保软件能够和用户产生共鸣。

 

我庆幸自己不是打字员。

 

我的一位朋友是一个成熟的女程序员,她曾有过这样精彩的吐槽:「软件开发不是比谁打字快。」每个人都明白这一点,但是时常这样提醒自己也不是什么坏事。

 

Brendan Enrick讨论过这样的问题。实际上,程序员们不停地用手指在键盘上猛戳,就好像这种肢体活动是和编程同步的。但是实际上编程是这样一种行为,它把思考、设计、语言、逻辑和一些心理层面的东西变成某种可以存放在电脑内存中的形式。



 

我的夫人经常会走到小院里,问我:「你在编程吗?」通常情况下我的回答是「是的」。实际上我正在用钳子修剪枝叶,或是到处施肥。

 

植物、泥土和剪刀和编程有很大的关系,就像与键盘和发光的屏幕一样。

 

我们正在从工业时代和经济纪元过渡到一个可持续发展的年代。是的,新的软件和新的商业需要增长。但是需要具有可持续性,它们要慢慢的,有爱的增长。就像美酒,就像宝贝。

 

关于作者: Lingfeng Ai ( @hanxiaomax )

  • 大小: 76 KB
  • 大小: 46 KB
来自: 伯乐在线
5
1
评论 共 6 条 请登录后发表评论
6 楼 尘土飞扬 2015-01-14 10:00
bewithme 写道
老板就叫你一天完成你还能拖到第二天么?

这样的老板主持的公司,基本就是个皮包公司,不过,国内有不是皮包公司的软件企业吗?好像还没有
5 楼 尘土飞扬 2015-01-14 09:59
dyp1984 写道
在中国52岁的程序员,肯定找不到工作,这也是中国做不出一款世界级的软件的原因之一吧。

深有同感,整个国家都在短平快的短视中折腾,以为能够赶英超美,其实根基不稳,大厦再高,倾倒的也越彻底。基础行业的人才流失,注定会造成核心竞争力的缺失。
4 楼 bewithme 2015-01-12 15:45
老板就叫你一天完成你还能拖到第二天么?
3 楼 kanme818 2015-01-10 16:45
敏捷和迭代开发已经变成了不想搞清业务需求的借口了
2 楼 dyp1984 2015-01-10 15:28
在中国52岁的程序员,肯定找不到工作,这也是中国做不出一款世界级的软件的原因之一吧。
1 楼 ykssky 2015-01-10 01:09
文章简言之: ctmd agile...

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 程序员人生:技术人员的职业发展规划

    说个大白话,一个TL管了N个人,他至少要能保证大家的输出所产生的价值,至少要高于这个团队的工资、奖金、五险一金、OPEX、CAPEX等等吧。这个TL为了大家输出的有价值,他是不是需要能: 能对所负责领域的业务特点、...

  • 【本人秃顶程序员】美女程序员观点:程序员最重要的非编程技巧

    这是来自一位美女程序员Ali Spittel的观点,至少可以看看美女喜欢和怎样的男程序猿打交道: 当我想与我希望的程序员合作时,我更多地考虑非技术技能,而不是技术技能,是什么非技术技能使得某人成为一名优秀的同事的...

  • 一位39岁程序员的困惑:知道得越多编程越慢怎么办?

    Zilk1988 年 14 岁时就开始编程,此后尝试过几种职业,最终还是在 1997 年决定成为职业程序员(又称码农),现在已经 39 岁,对此选择依然无怨无悔。 但是后来他发现一个问题,自己的经验越丰富,完成项目或任务的...

  • 28岁程序员从字节退休:IT是改命的唯一出路吗?

    有人说:每个人30岁以前改变命运的机会只有三次,出身、高考和择业。对于大部分普通人而言,决定人生走向的第一次机会大概是在22至28岁。这个年龄阶段恰好面临着人生最重要的一次选择...同样是在28岁,字节程序员郭...

  • 在中国当程序员,35岁是分水岭?这些新路你知道吗?

    程序员都应该看看

  • 北京44岁程序员失业,感叹:编程估计没戏了,想去卖煎饼果子

    点击上方 "程序员小乐"关注,星标或置顶一起成长关注订阅号「程序员小乐」,收看更多精彩内容每日英文It doesn't matter how slow you ...

  • 程序员职业发展与规划:我要做一辈子的程序员吗?

    经常听一些同学说:不知道下一份工作该去哪类公司做些什么,我的职场人际一团糟老板不重视我,我现在成长的非常慢所以又想跳槽了,我看不到公司的发展前景好迷茫,其实这一切的困惑都来源于没有做好职业规划或者你...

  • 独立开发者:我为什么要学游戏编程?

    对于一个比较小的团队或者是单枪匹马的开发者来说,很多的人都需要时是多面手,最近,一名独立游戏开发者在博客中讲述了自己数十年的游戏研发经历,他表示,游戏策划是需要有一些编程知识的, 因为只有这样你才可以...

  • 程序员这条路,技术往深度走还是广度走会比较好?看完这篇文章你就明白了

    来自老程序员的心声

  • 揭开程序员身上的「专业面纱」:非科班程序员,都来自哪些专业?

    【文章来源微信公众号:每天学编程】 专业选择重不重要?这几乎成了每年高考后的「全民话题」。有人说「专业决定就业」,有人说「职业无关专业」。对于程序员群体而言,大学专业对他们的职业选择发展又有着怎样的影响...

  • 2021 美国硅谷程序员调查:平均年薪 80 万,后端人才“吃香”

    Celential.ai 的《2021 年硅谷软件工程人才报告》中,没有大学学位的自学 SV 软件工程师的百分比 五、湾区是国际教育的大熔炉 我们一开始就提到 Celential 可以帮助初创公司招募多元化人才,这一发现在一定程度上...

  • 未来可期的 AI 编程:到底是程序员的终极解放还是失业的开始?

    不论是业内(编程)还是业外,人们对于 AI 编程的观点都是:未来可期 ——GPT,他好像什么都能干,也好像什么都干不好。所以,在这篇文章里,我将继续总结与其他人聊天的观点。对应的思路总结,也可以在 ClickPrompt...

  • 40岁后学习编程是否太晚了?7点技巧让学习变得轻松有趣

    很多人经常会问:“在什么时候学习编程才合适?...编程是一项很花脑力、精力的高压工作,在40岁后才开始学习编程,是不是太晚了?Damian Wolf给出的答案是“不会晚”!Damian是InfoWorld,DZon...

  • 推荐给程序员们的十条编程原则

    也许作为有一定工作经验的你来说,你已经知道了,或者已经有熟悉的大佬告诉了你,但是大多数都是靠自己一步步实践积累而来。掌握编程的这些技巧,并将他运用到实际的工作中才是最重要的

  • 基于OpenGL的C语言的魔方项目.zip

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

  • QT-qtablewidget表头添加复选框QHeaderView

    在 Qt 框架中,要在 QTableWidget的表头中添加复选框,可以通过继承 QHeaderView 并重写 paintSection 方法来实现。 介绍一种继承 QHeaderView的方法分别实现QTableWidget中添加复选框,可全选/全不选/部分选。

  • 分段划线测量表格通用版.doc

    分段划线测量表格通用版.doc

  • 扫雷小游戏(JAVA SE).zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

  • 啊哈算法哈磊基于队列的优化Bellman-ford算法搜索单源最短路径-Java实现

    本资源源自《啊哈算法》的高级算法实践,专注于讲解基于队列优化的Bellman-Ford算法在单源最短路径问题上的应用,并提供了Java语言的实现代码。哈磊老师以其独特的教学视角,不仅详细解析了传统Bellman-Ford算法的原理及其在处理含有负权边图中的优势,还深入介绍了如何通过队列优化(通常指SPFA算法)来加速这一过程,减少不必要的松弛操作,提高算法效率。 Java实现部分,代码实现清晰,注释详尽,从初始化距离数组、设置源节点开始,逐步展示如何维护一个队列来记录待检查的顶点,并通过队列进行有效的顶点遍历和松弛操作。本资源通过实例演示了如何高效地更新路径长度,检测负权环,并最终确定从源点到图中所有其他顶点的最短路径。 这份资源特别适合对图算法有深入学习需求的学生、工程师以及算法爱好者,尤其是那些关注算法性能优化和实际应用的人士。通过学习这份资源,你不仅能掌握Bellman-Ford算法的核心逻辑,还将理解如何通过队列优化策略提升算法的执行效率,为解决复杂的网络最短路径问题提供有力工具。在算法学习和软件开发的道路上,这将是一块宝贵的垫脚石,助你攀登更高的算法高峰。

  • 基于一阶倒立摆线性二次型最优控制

    基于一阶倒立摆线性二次型最优控制

Global site tag (gtag.js) - Google Analytics