出于某种原因,我注意到我最终在工作中使用了很多有限状态机。特别是,当我实现自定义TCP /串行协议时,它们非常有用并且产生非常强大的输出(在我看来)。
我在CS课上的日子远远落后于我。因此,我对那里学到的东西的回忆是模糊的。如果人们正在利用我已经忘记的其他概念,我很好奇。
没有“正确”的答案。投票包含您最常使用的概念的答案。我们最终会得到最常用的概念。对我来说,这将是一个要研究的东西清单。
-Robert
答案 0 :(得分:32)
争取 low coupling, high cohesion 。
low coupling, high cohesion http://www.codeodor.com/images/from_spaghetti_code_to_better_code.jpg
(我从上面链接的网站上偷了这张图片)
答案 1 :(得分:30)
保持简单。如果可能的话,让它更简单。
答案 2 :(得分:19)
答案 3 :(得分:18)
模型视图控制器模式是我使用的模式比任何其他模式更多。
答案 4 :(得分:14)
答案 5 :(得分:13)
复制和修改现有代码。
答案 6 :(得分:12)
我认为,将问题分解为更小的子问题是我经常做的事情,即使没有真正考虑它:
不过,也许这不是一个“概念”...如果我记得一些算法课程我们被教导“分而治之”的事件^^
如果你想要更具体的东西,我会选择:
答案 7 :(得分:12)
面向对象的编程和数据结构
答案 8 :(得分:11)
不要重复自己。
答案 9 :(得分:9)
复杂性。
答案 10 :(得分:8)
时间/空间复杂性。
答案 11 :(得分:7)
并发和并行计算。多年来我一直没碰过它,但每过一年它就变得更有意义了(每个核心数都翻了一倍)。
答案 12 :(得分:5)
<强>抽象强>
Aho和Ullman在 Foundations of Computer Science
的介绍中写道但从根本上说,计算机科学是一门抽象科学 - 为思考问题创造了正确的模型,并设计了适当的机械化技术来解决问题。
答案 13 :(得分:5)
单身人士,模板和战略模式。
此外: YAGNI - 你不需要它 吻 - 保持简单,愚蠢
答案 14 :(得分:4)
“Google”概念;)
答案 15 :(得分:4)
估计空间/时间复杂度并使用适当的数据结构来获得更简单/更快的代码。将某些问题建模为图表也偶尔会有用。
答案 16 :(得分:4)
答案 17 :(得分:3)
如Knuth先生所说,避免过早优化:
“我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源。” (来自维基百科)
答案 18 :(得分:2)
垃圾进,垃圾出。
答案 19 :(得分:2)
“计算机科学中的任何问题都可以 用另一层解决 间接。“ - David Wheeler,首席 EDSAC项目的程序员 20世纪50年代初
如果应用得当,这会导致合理的泛化,如抽象数据类型,带虚拟方法的可重用类等示例中所示。
如果应用不当,会导致过度间接的实现,由于过度泛化而导致大量的运行时间开销,例如:英特尔432架构。
答案 20 :(得分:2)
“调试代码的难度是编写代码的两倍。因此,如果您尽可能巧妙地编写代码,那么根据定义,您根本无法对其进行调试。”
答案 21 :(得分:2)
封装或信息隐藏
答案 22 :(得分:2)
需求分析和关系数据库。
答案 23 :(得分:1)
解决问题......
答案 24 :(得分:1)
面向对象编程
答案 25 :(得分:1)
我脑子里最重要的一句话来自我的操作系统教授 - 我在操作系统方面表现不佳。尽管如此...
“没有魔力。”
他的意思是,如果计算机可以做到这一点,计算机程序员可以弄清楚它是如何完成的。当有人挥动魔法“高科技”魔杖时,仔细观察,你就会看到启发式。
当我必须努力完成某些事情时,它让我有勇气找到办法。
当我在媒体或营销材料中看到一些“神奇”的技术时,它让我持怀疑态度并挖掘真相。
答案 26 :(得分:1)
我很惊讶没有人提到封装。
答案 27 :(得分:1)
软件中存在的故障越长,检测和纠正的成本就越高 正确纠正的可能性越小
答案 28 :(得分:1)
这些是我认为对我的职业生涯最有用的大学课程/概念
答案 29 :(得分:1)
耦合和凝聚力。
它本质上是分而治之的范式,是所有软件的基础。
您正在寻找正交概念和正交软件实体,即具有松散耦合和高内聚力的实体。
在Basic中使用了gosub吗?你正在使用C&amp; C.
答案 30 :(得分:1)
这不是特定于CS的,但请记住,生成简单或简洁的结果都是很好的目标。如果你能够简单地生成简单的和,那么你很可能会产生高质量的作品。
答案 31 :(得分:1)
理解和利用语言库(来自标准或第三方,如Boost)为我提供的数据结构和算法。不要重新发明轮子,并了解那些比你自己更好的轮子。
答案 32 :(得分:0)
数据管理和规范化的关系模型。
答案 33 :(得分:0)
软件工程的基本定理:任何软件工程问题都可以通过增加一个间接层来解决。
(我认为它已由A. Koenig以此形式制定)
但是,太多的间接层次很难理解: - )
答案 34 :(得分:0)
“首先使它工作,然后使其工作/快速/。”
当然,您不能将自己锁定在缓慢的设计中,但是如果您以后发现需要重新设计,那么可能会浪费大量时间来尝试优化永远不会成为整个解决方案瓶颈的例程。优化后的模块,您的优化工作可以说是浪费了。
答案 35 :(得分:0)
存在哪些数据结构,它们的空间/时间特征以及每种数据结构应该用于哪些情况。编写快速,可维护的代码没有比使用适当的数据结构更好的方法了。
顺便说一句,即使您可以证明数据结构是设计模式,我打算将其视为与设计模式不同。
答案 36 :(得分:0)
建模
小而硬的功能的正式验证。
Lambda表达式(C#:p)
并发“理论”
设计模式
在编写代码之前编写规范。
答案 37 :(得分:0)
数据绑定,你必须一直使用它......以多种不同的方式......
答案 38 :(得分:0)
我经常每天应用计算机科学概念为我开发的Java Web应用程序编写自己的自定义splay树和光线跟踪算法。
答案 39 :(得分:0)
矢量。我在工作中使用MATLAB进行一些编程,并定期将标量操作移植到矢量实现中。有时它会很有趣 - 有时候感觉就像在与埃舍尔聊天时想象一个超级立方体平移着莫比乌斯带。
答案 40 :(得分:0)
时间和空间估计。这件事需要多长时间才能运行?不只是大O符号,而且还有一些关于是否会花费数秒或数小时的想法。还会占用多少空间?我可以加载到RAM中的1兆位数据,我可以在RAM中处理一些工作的数据,还是需要磁盘和/或分布式系统的100 GB数据?
我在Google采访了很多刚毕业的工程师候选人。我要说的是,大约50%的人无法告诉我计算机中有多少内存,或者估计解析一百万个网页需要多长时间。如果没有一些关于问题有多大的基本直觉,你就无法解决问题。
答案 41 :(得分:0)
我相信我们都会进行FSM的日常活动。 OOP为FSM建模,MVC也是如此。
事实上,OOP / MVC等是表达FSM的模式。
是否存在我们不构建FSM的任何应用程序?
考虑一个简单的应用程序 - 排序。嗯,这也是一个FSM!
这应该是事实上的问题:是否存在我们不构建FSM的任何应用程序?
答案 42 :(得分:0)
适当级别的抽象
答案 43 :(得分:-1)
算法分析
算法简介:Cormen,et al。
计算机程序设计的艺术:Knuth(整个系列)