您认为编程的第一原则是什么?


59

我一直喜欢问自己“这的首要原则是什么?” 在我学到了一些基本知识之后(例如编程)。这是一个鼓舞人心的问题,IMO,可能会迫使您考虑某些事物背后的最重要原则,尤其是诸如编程之类的技能。

那么,您认为编程的第一个原则是什么?我稍后再给出答案。


我们不谈论搏击俱乐部。
Job

Answers:


97
  1. 吻-保持简单愚蠢
  2. 干-不要重复自己
  3. YAGNI-您将不需要它

吻应该保持简单智能。第一次因为您设计得不够聪明和可扩展性而不得不重写大量代码时,您将同意这一点。:)

8
我认为KISS应该是“保持简单,愚蠢!”
丹尼斯C

实际上,我工作的一个博客张贴关于这两个怎么是两个最亲近的程序员心脏,以及如何在同一时间他们有点oxymorons作为很多时候,你需要选择一个对其他

10
我还要添加YAGNI。

3
@Programmin工具-我不认为“愚蠢”是多余的。我认为这表明我们倾向于“变得聪明”,这表现为不必要的复杂性。正如我所看到的,“愚蠢”试图通过帮助我们记住我们最初认为的“智能”通常不是这种趋势来提醒我们这种趋势。
codekaizen


29

尽可能地懒惰。


2
再次,IMO,太笼统了。这就引出了一个问题:“适度的懒惰确实有多懒?”,因为显然“马虎”是您也不希望成为的。

这是Perl的参考“懒惰,急躁以及傲慢”

所以我们在谈论另一种懒惰?我认为鲍勃的意思是“懒惰”,意思是“不要纠结于未整理代码”:D

2
太笼统了。以此类推,所有变量和函数均为1个字母,因为我太懒了,无法输入有意义的内容。假设我也必须维护它,那么也许你是对的,因为我将使其尽可能地易于维护。
凯尔·巴拉德

3
@Kyle:是的,这就是重点。“真正的懒惰”使您现在和将来都变得最轻松。事实证明与正确地做事是一样的。如果您现在少做点事,但以后再做更多的话,那么您就不会变得“越懒” :)

23

禅,第一部分:编程只是道路,而不是道路。

编程只是教计算机必须做什么的技术。要成功创建快速,可靠的软件,意味着要了解您的算法,最佳实践以及不一定与您的编程(语言)相关的所有其他内容。

禅宗,第二部分:如果您赶时间,请慢慢走。如果您真的很着急,请绕道而行。

听起来很傻,但不要让自己陷入妥协,以免(真的)在事后给您带来麻烦。我有一条规则:如果您是程序的核心,请尝试变得尽可能精确和良好。如果您使用的是软件深层的核心方法,请尝试加快编码速度。如果您要在这两个之上进行编码,您甚至可能会变得更加草率。

设计错误是最难发现和/或修复的问题,下一步是每个人都依赖的零件中的编程错误,然后是“实际展示的软件零件”。如果您需要在项目结束时修复设计错误,嗯,那不是很好... ;-)

禅宗,第三部分:新,知道你的路。

每天了解您的环境,工具和所依赖的东西,并对其进行排序,以便为您工作。最好使用自然的编程“环境”,甚至不必考虑它。如果您必须完成工作,请不要介绍“新奇的东西”,而要做好工作。可以在一个新项目中引入这些东西,也就是说,当您有时间准备和使用它时。


嗯,然后再说一遍:我在谈论编程时登陆了Zen Land :)

@part III-不要添加“花哨的新东西”,除非您为此而获得报酬!
杰森

+1为矩阵参考。我是一个好人的吸盘(那个和Zen。让我想起Python)

19

吻(保持简单,愚蠢)。

确实确实存在一个问题:“如何定义简单?” 还有“什么时候对手头的任务来说太简单了?” 这就是为什么仅了解编程的第一原理就不能成为优秀的程序员的原因。


我认为这是一个太笼统的规则。这就引出了一个问题:“实际上如何定义'简单'?”。

3
如果你很笨,那怎么会这么简单呢?
Steven A. Lowe

史蒂芬:那是个好东西

1
“这就是为什么仅通过了解编程的第一原理就不能成为一名优秀的程序员的原因”-喜欢它。

1
@Dima:您是对的,我的意思是质量和简单性(至少在这种情况下)都无法定义,但是如果我们训练有素,我们就可以在看到它时就知道。
2009年


16

不要重新发明轮子。


关于是否应该重新发明轮子的问题,正确的答案始终是“取决于”。因此,“不要重新发明轮子”只能走这么远。在大多数情况下(但不是每次),它可能是一种很好的启发式方法。

5
一些“轮子”需要重新发明。

告诉邓禄普。他发明了充气轮胎。如果不是他,那就重新发明方向盘,我们将经历一段坎y的旅程。
Kibbee

3
怎么样:只有在收益值得的情况下,才重新发明轮子
e.James

16

首先了解问题!


啊,终于有人了。你可以吻,yagni,干你想要的。如果您一无所有地编写某些程序,这将毫无用处。

@ e-satis:是的,那是我第一次回答时的想法。我滚动查看所有答案,令人惊讶的是之前没有人发布。
OscarRyz

好答案。当程序员不能正确理解问题的全部要求时,就会浪费大量的时间。
史蒂夫·沃瑟姆

问题是:您如何知道自己对问题的理解?
CamelCamelCamel 2011年

13

YAGNI-您将不需要它。YAGNI背后的想法是根据您的要求进行编程,而不是针对潜在的潜在功能进行编程。前提是通过遵守编程需求,(除其他事项外)您将减少代码膨胀,降低复杂性,避免功能蠕变并减少对可完成操作(以及可完成操作)的限制。未来。

我想它与模块化设计协同工作:将来的功能可以在不重新设计现有代码的情况下得到增强。


12

知道什么时候不编程。


这到底意味着什么?

那是什么时候?

有时您需要以不同的方式解决用户问题-不仅仅是编写解决方案。

人的判断和决策是一切的一部分;有时,试图自动进行判断毫无意义。
S.Lott

1
他的意思是,通过购买现成的应用程序,组件或库,可以更便宜,更及时地解决许多编程问题。
Gordon Bell

11

咖啡进来,代码出来。


3
以我

+1毫米,更像是“咖啡,代码+大量的洗手间?” :)我爱咖啡和茶,我都摇摆...
Darknight


7

构造软件设计的方法有两种:一种方法是使它变得如此简单,以至于显然没有缺陷,另一种方法是使它变得如此复杂以至于没有明显的缺陷。第一种方法要困难得多。

-查尔斯·安东尼·理查德·霍尔


6
  1. 区分因果(使用计算机)

  2. 区分事实和观点(与人合作)

  3. 尽可能简单,但不要更简单(设计)



5
  1. 理解为什么该程序会使某个人开心(否则,为什么您不与其他所有孩子一起玩耍呢?)。(这个人可以是你。)
  2. 开发业务领域的概念模型,该模型可以捕获所有必需的复杂性,而不再需要其他任何复杂性。
  3. 开发一个软件体系结构的概念模型,该模型可以捕获所有所需的复杂性,而不再仅此而已。
  4. 狠狠地排除所有其他复杂性。

说得好!无法同意
安东尼

5

我认为,最重要的原则是通过创建良好的抽象来降低复杂性

这包括

  • 了解要解决的问题,
  • 为此设计一个合适的解决方案
  • 实施它,
  • 最好以使代码易于理解和维护的方式,

还要确定停止创建抽象点并深入到实现技术(例如数据库系统,编程语言)的基本属性的位置,以防止产生可避免的额外复杂性。


4

着眼于观众的节目。这样一来,请勿假设您或其他人不会读取和维护您编写的任何内容。

一个必然的推论:通过正确地命名变量,函数和类,证明您了解要解决的问题!


4

直到您在测试中显示它,它才起作用


6
那是不对的,我已经编写了大量有效且未经测试的代码!:D

1
“我没有测试过,我只是证明它是正确的” :)
Daniel Daranas 09年

4

先考虑,再编码。

您远远没有您想象的那么聪明。问问题。学会珍惜您的同行。

调试时,第一个答案几乎总是错误的。

您编写的旨在扔掉的代码往往会成为更大流程的基石。切勿随意乱写任何东西。


3

任何问题都可以使用另一层间接解决。


实际上,具有太多的间接本身就是一个等待确定和解决的问题。所以..

通过另一层间接解决!=)
Erik Forbes

奇怪的是,它的真实性。看看春天……


3

原理:软件就是知识捕获

后果:许多知识表示技术都基于抽象。给我们分层,分层,封装,关注点分离。

用于过程表示的许多技术都建立在SequenceChoiceRepetition之上。



3

始终编​​写代码,就像将要维护它的人是知道您的住所的精神病连环杀手一样

另外,不要以为您对编程一无所知,请继续学习


2

我是通过研究数字电子学来进行编程的,所以我觉得基本的逻辑门(不是,或,或,异或)是编程的首要原则。



2

垃圾输入-垃圾输出如果数据不好,用户界面的好坏并不重要。


2

干,几乎所有其他东西都从中产生。KISS是平衡行为的另一端,可确保您不会将软件的优雅程度提高到疯狂的程度。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.