【发布时间】:2010-09-12 04:26:10
【问题描述】:
软件开发社区总是乐于接受新想法来改进我们开发软件的方式,在我看来,我们的创新比其他工程学科或专业更多。
但是,如果我们相对年轻的行业未能从成熟的专业中学习,这似乎是不幸的。软件开发之外的人一定发现了一些伟大的想法,我们可以从中受益。
您能否描述您已成功(或未成功)应用于您的软件开发的其他职业使用的任何想法、技术或流程?
【问题讨论】:
软件开发社区总是乐于接受新想法来改进我们开发软件的方式,在我看来,我们的创新比其他工程学科或专业更多。
但是,如果我们相对年轻的行业未能从成熟的专业中学习,这似乎是不幸的。软件开发之外的人一定发现了一些伟大的想法,我们可以从中受益。
您能否描述您已成功(或未成功)应用于您的软件开发的其他职业使用的任何想法、技术或流程?
【问题讨论】:
精益开发是一个显而易见的选择,取自Toyota 的制造负责人,以对抗强大的美国工业的规模经济。它非常适合敏捷软件工程框架
【讨论】:
这可能有点牵强,但是在打乒乓球时,我了解到,当你获得一些基本技能后,你的大部分错误都来自于试图比实际打得更好——去打满贯你真的没有技巧制作。玩保守的游戏并让其他玩家过度发挥自己会更安全。
在编码时,我尽量不要比自己聪明。 (由人们运行架构设计有助于实现这一点)。实现复杂的数据结构来管理脏读和缓存过期很快就被拒绝了,因为该功能是针对一部分用户的,不值得内存或开发人员资源。
我相信 Fred Brooks 会将此称为第二系统综合症。
【讨论】:
Eliyahu Goldratt 有一本书叫《目标》,这是一本关于优化工厂的新颖商业书籍。它对如何确定现实(或至少质疑你自己的概念)以及瓶颈问题进行了很多很好的讨论,这在整体可扩展性问题时非常有用。
【讨论】:
心理学就是其中之一。它不仅仅是激励你自己和你的队友,而是使用技术来了解客户真正想要什么,而不是他要求什么。可用性是软件开发的另一个重要因素,它是一个以人为本的因素。
软件可能是一项技术职业,但开发应用程序是一项人类活动。
【讨论】:
就我个人而言,我发现数学和科学背景在故障排除和调试时非常有用。使用科学的方法,对自己进行严格的学术研究,保持健康的怀疑态度,并始终回到“这个理论真的能最好地解释观察到的证据吗?”这个问题。极大地帮助追踪根本原因,而不是被虚假线索所跟踪。
【讨论】:
我差点在中学教 ICT。我学到了很多:
【讨论】:
设计模式最初由建筑师(即设计实际建筑物的人,而不是软件架构师)使用。
【讨论】:
古老的木工说法“测量两次,切割一次”一直适用于我从事的开发项目。努力在第一时间把事情做好是有好处的。
【讨论】:
作为一名顾问,我学会了微笑并为用户提供他们所要求的一切......
我无法在优秀的公司中提及我模仿过这种行为的职业。
【讨论】:
KISS(Keep It Simple, Stupid)原则在这里适用,就像以前一样在我的机械工程研究中。就编码而言,开发人员和其他人阅读代码所花费的时间很可能多于编写代码。因此,对给定问题进行尽可能简单的设计会很有帮助。这个领域的过度工程甚至会让最初的开发人员在 36 个月后摸不着头脑,说:“我到底为什么要这样做?”
只要我的 0.02 美元。
【讨论】:
清单!它们不仅适用于飞行员:
【讨论】:
虽然不完全是一种职业,但我认为我们还需要从创意类型中汲取灵感。例如,作家通常会将自己锁定一段时间以不间断地进行写作。 Paul Graham 在Hackers and Painters
【讨论】:
在某种模糊的意义上,建筑教会我从效率的角度思考。当您在工地上收拾工作包、拖运木材、拖着电源线穿过杂乱、未完工的房间和走廊时,通常会摔断背部,将一大堆木材和胶合板变成房子时,您很快就会了解到,您的一举一动make 必须做一些有用的事情。当您身后有一个小企业主老板时尤其如此,每次您从a点走到b点而没有随身携带任何东西时,他都会大喊他是如何赔钱的。
在编程中,它通常可以相同。但是,您不是在节省背部,而是在尝试节省时间。这采用易于维护和可重用代码的形式。每次你创建一个新函数来做一些与另一个函数非常相似的事情,或者你创建一个可以很容易地从更通用的东西继承的新类时,但几乎相同,你在剥夺自己的时间和金钱,同样多就好像一个成帧者需要来回走 6 次才能完成他或(很少)她可以一次完成的事情。在这两种情况下,回报都是更少的时间花在一份愚蠢的大工作上,以及一个更快乐、更富有的老板。
【讨论】:
我花了 14 年时间从事工业工程类型的效率研究。这教会了我如何采访人们以获取信息,尤其是在他们不合作的情况下,以及如何从采访以外的来源获取信息(在收集需求时非常有用)以及如何进行分析思考,尤其是如何真正理解来自企业的数据视角和用户视角。这在设计数据库时特别有用。当您不得不从设计不佳的数据库中提取数据时,就像我在做分析员时必须使用的一样,您会了解哪些有效,哪些无效。与普通程序员不同,我使用了数以千计不同数据库的数据。
【讨论】:
数不胜数,它们以各种方式关联,使问题有点修辞,因为编程本质上是逻辑和数学的混合体,旨在与任何其他领域进行交互,以提供解决方案/真正实现任务自动化生活情况。但要提供这一点,您必须实现该领域逻辑的大部分内容才能使某些东西变得有用。
所以软件开发不是目的,它可能是一个解决方案,或者每个问题的解决方案都包含来自领域本身的概念。
我不知道我的回答是否涵盖了这个问题,因为在我看来它有点太笼统了。
【讨论】:
戴尔制造厂的一段视频启发了基于队列的分布式内容聚合系统的架构。队列上的消息代表工作项,工作表、任务、零件等从一个站点传递到另一个站点。
每个站点代表一个特定的工作原型,每个站点在将消息转发回路由以进行后续调度之前更新工作表。
系统在第一次发布后 7 年仍在生产中,每小时处理大约 3 万个作业。
第一次看到系统“呼吸”是一个激动人心的时刻。
【讨论】:
好奇心和毅力。
【讨论】:
任何类型的建筑活动 - 我总是对巨大的建筑(桥梁和建筑物)感到惊讶,而不是对伟大的软件。因为你总是有更多的软件测试机会(单元、压力、用户接受度和大量的质量检查),但想象一下你可以为一个伟大的结构做多少 良好的物理和数学背景肯定会提高你的编程技能
【讨论】: