【问题标题】:Which Computer Science Concept Do you Value the Most?您最看重哪个计算机科学概念?
【发布时间】:2010-11-22 08:41:38
【问题描述】:

由于某种原因,我注意到我最终在工作中使用了很多有限状态机。特别是,当我实现自定义 TCP/串行协议时,它们非常有帮助并产生非常强大的输出(在我看来)。

我在 CS 课上的日子已经过去很久了。因此,我对在那里学到的东西的记忆是模糊的。我很好奇是否还有其他一些我已经忘记的人们正在利用的概念。

没有“正确”的答案。投票选出包含您最常使用的概念的答案。我们将简单地以最常用的概念结束。对我来说,这将是一份需要学习的东西的清单。

-罗伯特

【问题讨论】:

  • 如果您不直接使用有限状态机,则编译器的词法分析器会为您使用一个,而您的编辑器会在您使用正则表达式时模拟一个。
  • 这变成了一个过于笼统/高度主观的“最好的计算机开发实践是什么?”问题 - 应该关闭。
  • 这听起来也很熟悉:stackoverflow.com/questions/747292/…。我收集到人们“应用最多”的那些与他们建议你“应该知道”的那些并没有什么不同。
  • ...不知道为什么我写的是“熟悉的”而不是“相似的”。 =)
  • @d03boy - 然后是stackoverflow.com/questions/747292/…的副本

标签: computer-science


【解决方案1】:

【讨论】:

  • 我只希望每个软件开发人员都明白这一原则的重要性。
  • 可爱的卡巴拉生命树图。
  • 你用什么包来制作这张图? +1 用于提出解耦。
  • 图表是在黄色便签本上使用 Sharpie 记号笔完成的。
  • 但是当你放大 M 时,设计看起来像什么???很多时候,它只是包裹在类/方法/ESB中的同样混乱。 - 仍然是一个非常重要的原则 :)
【解决方案2】:

保持简单。如果可能,让它更简单。

【讨论】:

  • 这不是一个真正的计算机科学概念 imo。它在一般工程中更只是常识。
  • 当然这是一个很好的做法 - 但它不能回答问题 - 我不明白所有的赞成票
  • 这是 MIT SICP 的第一堂课——隐藏复杂性。你不会得到比这更多的 CS。
  • 恕我直言,这是程序员/团队可以做的最好的事情,以提高他们在所有领域的工作质量。
  • (或者换个角度看,这里的大多数其他答案只是“保持简单”的具体情况:低耦合、使用模式、利用现有代码、理解大 O、解决问题分成更小的部分/使用 OO 设计、DRY、降低复杂性、避免过早优化等。显然,它们不仅仅是“KIS”,但它们都牢牢地植根于这一基本原则)
【解决方案3】:

【讨论】:

    【解决方案4】:

    模型视图控制器模式是我使用最多的一种。

    【讨论】:

    • 或者,也许更一般地说,关注点分离。 MVC 实际上只是该概念的良好扩展。
    • 除了像这里的许多答案一样,它与计算机科学无关。
    【解决方案5】:

    【讨论】:

    • 澄清一下——Big O 不是复杂度类,而是具有数学意义的符号...
    【解决方案6】:

    复制和修改现有代码。

    【讨论】:

    • 多么真实,但表面上很有趣。
    【解决方案7】:

    我认为,将问题分解为更小的子问题是我经常做的事情,即使没有真正考虑过:

    • 有助于解决问题
    • 它还有助于获得更简洁的代码(例如,执行“单元工作”的更小的函数/方法)

    不过,也许这并不是一个真正的“概念”……如果我记得一些算法课,我们被教导“分而治之”^^


    如果你想要更具体的东西,我会选择:

    • 测试;这是我们刚离开学校时不会做的事情......而且我们通过艰难的方式了解到这绝对是我们必须做的更多、更好的事情!
    • 可能是一些设计模式
    • 在编码之前思考——也许是我们工作中最重要的事情^^

    【讨论】:

    【解决方案8】:

    面向对象的编程和数据结构

    【讨论】:

      【解决方案9】:

      不要重复自己。

      【讨论】:

      【解决方案10】:

      复杂性。

      【讨论】:

        【解决方案11】:

        时间/空间复杂度。

        【讨论】:

          【解决方案12】:

          并发和并行计算。我已经很多年没有碰它了,但是随着时间的流逝(每个核心数量翻倍),它变得越来越重要。

          【讨论】:

            【解决方案13】:

            抽象

            Aho 和 Ullman 在简介中写到 Foundations of Computer Science

            但从根本上说,计算机科学是一门抽象科学——创建正确的模型来思考问题并设计适当的机械化技术来解决它。

            【讨论】:

            • 遗憾的是我不得不一直向下滚动才能找到这个哈哈。到目前为止,我认为提供的许多答案都属于抽象概念,这只是说明了这个答案的重要性。
            【解决方案14】:

            单例、模板和策略模式。

            还有: YAGNI - 你不需要它
            KISS - 保持简单,愚蠢

            【讨论】:

            • 恕我直言,单例模式非常被过度使用(边界“邪恶”)。所以是的,你需要知道它以避免它,但“知道”不应该被解释为“使用”,因为 OP 想要这个问题是。
            • 虽然你是对的,但我(和我们大多数人)偶尔会使用作为单例的服务 - 尽管我通常使用 IoC 容器管理它们,但它仍然是模式在引擎盖下。
            【解决方案15】:

            “谷歌”概念;)

            【讨论】:

            • 你必须做出一个漂亮的任意精度的数学库,如果你在天文数字常规计算数字(10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000)的范围。 SPAN>
            • 您发现了一个错误。 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,00010,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,00010,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,00010,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 跨度>
            • 也许我照例执行二进制10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000;你永远不知道!
            • @Jon - 我不久前发现了这个错误,但感谢你让它变得更糟。 =)
            • 至少它只会破坏带有违规评论的帖子
            【解决方案16】:

            估计空间/时间复杂度并使用适当的数据结构来获得更简单/更快的代码。偶尔将某些问题建模为图表也很有用。

            【讨论】:

              【解决方案17】:

              【讨论】:

                【解决方案18】:

                避免过早的优化,正如 Knuth 先生所说:

                “我们应该忘记小的效率,比如说大约 97% 的时间:过早的优化是万恶之源。” (来自维基百科)

                【讨论】:

                  【解决方案19】:

                  需求分析和关系数据库。

                  【讨论】:

                    【解决方案20】:

                    封装或信息隐藏

                    【讨论】:

                      【解决方案21】:

                      “调试代码的难度是编写代码的两倍。因此,如果您尽可能聪明地编写代码,那么您显然不够聪明,无法调试它。”

                      【讨论】:

                      • 我喜欢这句话,但实际上它有很多废话,因为如果你考虑它并巧妙地做到这一点,你可以让你的代码更容易调试。
                      【解决方案22】:

                      “计算机科学中的任何问题都可以 用另一层解决 间接性。”——David Wheeler,首席 EDSAC 项目的程序员 1950 年代初期

                      如果应用得当,这会导致合理的泛化,如抽象数据类型、具有虚拟方法的可重用类等示例中所见。

                      如果应用不当,它会导致过度间接的实现,由于过度泛化而导致大量运行时开销,例如英特尔 432 架构。

                      【讨论】:

                        【解决方案23】:

                        垃圾进,垃圾出。

                        【讨论】:

                          【解决方案24】:

                          面向对象编程

                          【讨论】:

                            【解决方案25】:

                            这不是特定于 CS 的,但请记住,产生简单或简洁的结果都是好的目标。如果您可以制作出简单简洁的作品,那么您很可能会制作出高质量的作品。

                            【讨论】:

                              【解决方案26】:

                              了解和利用语言库(来自标准或第三方,如 Boost)为我提供的数据结构和算法。不要重新发明轮子,要了解有哪些轮子比你自己的更好。

                              【讨论】:

                                【解决方案27】:

                                问题解决...

                                【讨论】:

                                  【解决方案28】:

                                  耦合和凝聚力。

                                  它本质上是分而治之的范式,是所有软件的基础。

                                  您正在寻找具有松散耦合和高内聚性的正交概念和正交软件实体。

                                  在 Basic 中使用过 gosub?你正在使用 C&C。

                                  【讨论】:

                                    【解决方案29】:

                                    这些是我发现对我的职业生涯最有用的大学课程/概念

                                    • 数据库简介
                                    • DBMS - 它们的工作原理
                                    • 算法和数据结构
                                    • 面向对象的编程概念
                                    • 设计模式(主要是 MVC、应用分层)
                                    • 需求工程
                                    • 软件质量管理
                                    • 软件指标

                                    猜他们都是……我在这里没有提到具体的技术,只是提到了概念。

                                    【讨论】:

                                      【解决方案30】:

                                      软件故障存在的时间越长,检测和纠正的成本就越高 被正确纠正的可能性越小

                                      【讨论】:

                                        猜你喜欢
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2017-07-07
                                        • 1970-01-01
                                        • 2013-01-29
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2011-03-22
                                        相关资源
                                        最近更新 更多