改变游戏是一种心态。- 罗伯特罗德里格兹
作为一名软件开发人员,我不断地问自己:杰出开发人员与普通开发人员的区别是什么?根据我的观察,它与正规教育,年龄,性别甚至行业经验几乎没有关系。它与思维方式有很大关系。
开发软件非常像烹饪。所有传奇厨师必须首先掌握食物准备和厨房过程的共同基础。只有这些基本原则才能发挥其独特的个性特征。伟大的开发人员在他们来时具有创造性的多样性,但他们共享一种奇怪的共同心态,他们在这种心态上建立自己的技艺。
没有想象力,我认为我是优秀的软件开发人员之一。但是,我确实要继续研究优秀软件开发人员的有效思维模式,以便模仿它们。
您为什么要关心软件开发人员的想法?难道他们不是一堆书呆子在键盘上敲击?是的,但软件开发人员的思维方式可以应用于您生活的许多方面,例如,在您的业务,您的喧嚣,投资,爱好,运动或学习新技能。
让我们剖析一下软件开发人员如何思考的基石概念。使用您的抽象思维,您可以将它们用作心理蓝图,以吸引您的日常事业。
学习如何学习
如果我必须选择一项对软件开发人员来说绝对必要的技能,那就是自学能力。
开发人员通过阅读书籍,使用博客,学习辅导,参加培训和做迷你项目来自学。
当遇到编程问题时,开发人员会为Stack Overflow等论坛提供提示和解决方案。通常情况下,解决方案可能已被别人弄清楚了。
是的,它可以作为软件开发人员生存,而无需学习任何新东西。这样做的高昂代价是成为固定产品或技术角色。
学习新东西是消费信息和为自己尝试的东西之间的微妙舞蹈。如果依赖于消费信息,您将无法独立生成解决方案。如果您只是通过反复试验来学习,那么您将错过利用现成的信息。例如,阅读写作确实会让你成为一个更好的作家,但只有你把时间写进去。
培养学习的热情。如果你这样做,你永远不会停止成长。 - Anthony J. D'Angelo
除了法律或医学领域之外的一些例外,自学新技能的能力可以胜利正规教育。就像软件开发人员一样,我们应该不断地教自己新技能,以保持我们的竞争意义。
面临的挑战是平衡两种自我教育途径:积极的信息消费和通过反复试验的学习。
不要重新发明轮子
在开发软件时,您几乎不必从头开始。您可以从众多编程语言,框架,基础架构和工具中进行选择。
尽管现有工具和其他供应商提供的软件可用,但软件行业中的非发明(NIH)综合症描述了重新发明轮子的趋势。很容易陷入这个陷阱,因为创建软件比在其他行业中创建组件要便宜得多。
有充分的理由重新发明自己的车轮。一个非常有效的原因是,现有的解决方案不符合您的要求。即使是这种情况,一些开源解决方案也允许您扩展或修改它们。
另一方面,重新发明轮子有可怕的理由,包括但不限于:
- 被自我欺骗,假设自己开发的解决方案总是更好
- 懒得弄清楚那里有什么解决方案
重用现有软件具有节省时间和精力的明显好处。从长远来看,您将受益于软件开发人员提供的错误修复和新功能。
在进行风险投资时,如果我们能够采用现有的解决方案,那么我们应该谨慎行事。我们可以问自己这样的问题:
- 那里有什么相关的想法?
- 有别人想出一个系统或一个过程?
- 我们可以建立任何现有的解决方案吗?
- 有可用的工具吗?
- 我们可以使用任何可用的服务吗?
小迭代
软件开发过程是一个迭代过程。从日常编程任务到跨越数周或数月的产品发布,可以在多个层面上看到迭代思维。
迭代的基本思想是计划,执行,测试和学习。
布鲁斯流的插图
迭代越短,反馈就越快地回到下一个开发周期。在20世纪90年代之前,通常会有更长的产品开发周期,在解决方案到达客户之前最长可达6个月。目前的方法是迭代次数要短得多。一些软件公司甚至每天多次为生产系统部署解决方案。
当我们面对那些“可能,应该拥有,会做得更好”的时刻时,采用迭代方法可以让我们对自己不那么苛刻。这是因为如果我们错过了在这次迭代中做得好的事情,我们可以在下一次迭代中修复它。
知道我们不必完美,我们必须不断改进,这是令人欣慰的。
迭代工作的另一个主要好处是,我们可以从一开始就把一切都搞清楚的心理负担减轻。在不忽视大局的情况下,我们只需要为当前迭代提供足够的计划和决策。未来迭代的决定暂时可以省略,因为它们还取决于当前迭代的学习。
迭代思维模式几乎可以应用于任何基于项目的任务。该方法系统,有效,实用且易于实施。
测试,测试,测试
软件开发人员工作的一个组成部分是测试。尽管代码通常是根据一个人的意图编写的,但仍然会有错误。由无意识错误或错误假设引起的错误。
一个好的软件开发人员永远不会认为一个软件没有bug。整个软件行业都认为错误只是整个过程的一部分。这就是创建如此多的工具,框架和方法来检测错误的原因。
测试的目标是尽快捕获那些讨厌的错误。检测到较早的错误,它们要修复的成本越低。如果需要花费5分钟来修复开发人员的计算机上的错误,则可能需要花费数百万美元才能达到客户方面。
在我们承接的任何企业中,我们都将不可避免地犯错误。就像软件一样,我们越早发现它们越好。在将进一步的资源用于某个原因之前测试我们的假设是明智的。
一种有效的测试方法是在较小的范围内尝试一些东西。例如,如果我们假设我们可以以全职摄影师的身份学习,那么在退出我们的全职工作之前尝试将其作为一个侧面的喧嚣是个好主意。
我们也有可能对自己有错误的假设。典型的错误是对我们利益的假设。通过现代媒体,很容易获得浪漫的成功观,而不会看到那些已经实现它们的人投入的努力。这种倾斜的观点可能会导致我们在某些领域假设虚假利益。找出我们是否喜欢某事的唯一方法是在全押之前测试水域。
在我们检查它们之前,假设只不过是未经证实的想法在我们头脑中旋转。测试是将假设提炼为经过验证的真理的好方法。测试的关键是尽可能少地提交资源,然后尽早发现错误。
应用学习模式
软件工程中的设计模式是针对重复出现的问题的通用,可重用的解决方案。它不是一段代码,而是一个可以在编写自己的代码时应用的构思模板。
让我们将Facade模式作为设计模式的具体示例。
软件系统可以包含多个子系统的复杂混乱。如果我们在设计中不小心,那么子系统的组件之间将会发生混乱的通信。Facade模式告诉我们使用“facade”来隐藏子系统的复杂性。其他子系统只是与该外观进行对话,而不是该特定子系统的各个组件。
Facade模式不是一种新模式。它最初是在1994年出版的题为“设计模式:可重复使用的面向对象软件的元素”的书中描述的。然而,它今天仍然非常相关。
优秀的软件开发人员在软件中研究设计模 他们理解设计模式可以提供一种结构化的方法来解决他们遇到的问题。更重要的是,他们知道何时应用哪种模式。
研究摆在我们面前的慷慨捐助将使我们免于因错误而发现相同想法的痛苦。应用模式来解决问题就像解决魔方一样。当您知道必须采取的步骤时,问题突然变得容易解决。
有明显的方法来学习如何使用指南或课堂培训课程等模式。然而,模式随处可见,有时隐藏在明显的视线中。我最喜欢学习模式的方法之一是阅读在各自领域取得成功的人的传记。
模式绝不是可以普遍应用的千篇一律的解决方案。它们就像棚子里的工具。经验和洞察力将告诉我们,并非每项任务都可以用锤子解决。
不要爱上你的工作
伟大的软件开发人员实践了一个非常重要的区别:他们喜欢他们所做的事情,但他们不会爱上他们所做的工作。
为了在任何事情上都要体面,包括软件开发,必须有一定的激情门槛。我们需要热情的火力推动我们超越世俗高原的挑战性驼峰。
尽管有激情,但优秀的开发人员并不依赖于他们所创作的作品。这种类似禅宗的分离提供了多种祝福,特别是当我们的工作需要我们创新时:
- 对其他人的建设性反馈更开放
- 评估替代解决方案时更客观
- 在下一个版本或迭代中尝试完全不同的方法的机会更高
- 尽管知道他们被丢弃的风险很高,但他们更愿意尝试激烈的想法
从个人经验来看,我不得不承认,从我生产的工作中疏远自己并不容易。当我在工作数天或数周后丢弃原型时,它确实会受到伤害。
沉没成本谬误可以解释我们工作的依恋。这意味着我们投入的东西越多,放弃它就越难。
与我们所建造的东西脱离的概念可以在生活的各个方面都有所帮助。分遣队阻止我们长时间保持某种东西,特别是当它不再适用于我们目前的事业时。
也许我们正在紧紧抓住那个半死不活的低利润方面的喧嚣,这已经耗尽了我们的时间。或许是时候重新评估我们的整个投资组合。
对我们工作的依恋类似于站在森林里,紧紧抓住我们曾经雕刻过的木偶。创造更美丽的木偶有无穷无尽的机会。制作新产品的第一步是放弃旧产品。
让开发人员尝试一下
如果您是软件开发人员,请尝试将您已经在专业上做的事情应用到您生活的其他方面。您可能对已经拥有的丰富的生产力工具感到惊讶。
如果您不是软件开发人员,那就像一个书呆子一样有机会!细分这些概念并重新定位它们以实现您的目标。