编程四十载 - 总结了 13 条建议
编程四十载 - 总结了 13 条建议
编程四十载,从初学者到资深开发者,本文总结了作者在编程领域积累的13条宝贵建议。这些经验涵盖了核心技能、生产力管理、团队协作等多个方面,对于软件开发者和对编程感兴趣的读者都有很高的参考价值。
10 PRINT "HELLO"
20 GOTO 10
(注:这段代码是 BASIC 语言,无限循环打印 “HELLO”)
1984 年的 4 月,一位父亲为自己的家庭办公室购买了一台电脑,一台Luxor ABC-802,配备了 Z80 CPU、64KB 的 RAM,一块黄底黑字屏幕,可以设置为 80x25 的文本模式,或者大约 160x75 像素的图形模式,以及两个软盘驱动器。它的 ROM 内置了 BASIC 语言,但并没有任何游戏。如果想玩它,就必须学习如何编程,编写自己的游戏。从那时起,作者开始了他的编程之旅,学习了 BASIC、Pascal、C 等多种编程语言,并逐渐找到了自己的热情所在。
在学习编程的过程中,作者最初认为理解计算机的工作原理、编程语言的细节以及各种工具的使用是非常重要的。然而,随着时间的推移,他发现这些并不是成功的全部要素。在编程领域,沟通和协作才是构建软件的核心技能。仅仅掌握技术细节是不够的,还需要学会与他人交流、合作,共同创造出超越个人能力的成果。
在接下来的内容中,作者分享了他在编程领域积累的13条宝贵建议,涵盖了核心技能、生产力管理、团队协作等多个方面。这些经验不仅适用于软件开发者,也对所有对编程感兴趣的读者具有很高的参考价值。
核心技能
有趣且有意义的软件,超出了任何一个人在合理的时间范围内独自构建的能力。这意味着,构建软件的基本、关键、核心技能是沟通和协作。
仅仅了解计算机如何工作,如何使用编程语言,了解算法和数据结构,或者如何使用涉及到的各种软件构建工具是不够的。还需要知道如何与其他人交谈,了解需要构建什么样的软件,它必须做什么,接受的努力程度是多少,如何管理工作,以及许多其他的事情。需要知道如何与他人合作,共同建立一个比任何一个人都伟大的东西。如果和团队能做得好,那么它将会大于你们的总和。团队合作可以是一种力量倍增器。
这些都是难以学习的技能。作者发现它们比构建软件的任何技术部分都要难。
即使是在只有一个人参与的项目中,也至少涉及到三个人:“过去的我”、“现在的我”和“未来的我”。
- “过去的我”是一个懒散且粗心的人,总是留下一团糟。
- “现在的我”做得非常好,但是必须应对“过去的我”做的所有愚蠢的事情,并需要安抚“未来的我”。
- “未来的我”是一个自负且固执的势利小人,对他来说,没有什么是足够好的。
让这“三个人”和谐相处,以便完成任何事情,对作者来说是一种持续的挑战。通过日记来应对,在日记中写下做了什么,为什么做,结果如何。试图写得让自己能理解,即使很累,或者刚经历了一次《黑衣人》式的短期记忆消除,也计划明确的迭代,有具体的任务。使用 GTD 系统来追踪还需要完成的事情。
关于生产力
对于软件开发来说,生产力的含义并没有明确定义:时间容易测量,但产出却不是。大多数人至少对生产力对他们意味着什么,有一个模糊的概念。然而,有一些已知的因素会影响生产力——这些通常被忽视了。
要做好工作,需要照顾好自己。必须睡得好,必须吃得好。如果累了,或者压力太大,就会犯错误,做出错误的决定。这些会导致做出糟糕的工作。这不是一个道德问题,但可能必须修复自己的错误。如果做好工作,会更加享受生活和工作。
Hillel Wayne 讨论过睡眠,并且有相关的资料。推荐阅读:
还需要有一个环境来帮助做好工作。环境是否安静?有没有打扰?家具是否舒适,长期使用会不会伤害?能否获得必需品,比如厕所和茶?能否从工作区域休息一下?能否出去散步:散步有助于思考。这个列表并不完整。
此外,需要以适合自己的方式管理自己和工作。如何做这一点取决于个人的偏好和经验,以及做的工作类型。没有一种解决方案能够始终适用于所有人。
作者发现应用 David Allen 的 Getting Things Done 系统效果很好,但无论做什么,都需要知道要达成什么目标,今天和在不久的将来,需要安排事情,以便可以一次专注于一件事。然而,请注意,使用 GTD 系统是为了知道何时可以休息或者偷懒;并不打算一直尽可能地提高生产力。
跟踪所做的事情可能是值得的。反思这些可以给人一种成就感,并看到取得的进步,这可以是一个动力和士气的提升器。
对于计算机来说,多任务处理是没问题的,但大脑一次只能思考一件事,并且在切换上下文时效率极低。
关于团队治理
当一个团队进行协作时,他们需要早期建立的一件事就是治理:基本上,团队是如何做决策的,又是如何改变决策的?决策的范围从根本性的到日常的:谁在团队中?它是一个民主制度,还是等级制度,或者是其他的结构?谁有发言权?团队应该喝什么饮料?网站应该使用什么字体?
治理是困难的,但当它明确时会更容易。对责任和权力的不确定性,会导致混乱和争吵,这些都可能会导致团队分裂。
所有的团队最终都会有冲突。管理这些和解决差异,理论上是管理层的工作,但实际上它落在每个人身上。这需要一些技能,可惜的是,这些技能似乎很少被教给程序员。
本文原文来自gocode.top,作者Theo Leggett。