为了深刻理解我的技巧(编程),我应该掌握哪些编程概念?[关闭]


13

从重要性的角度出发,如果可能的话,可能的话,了解编程的最重要基础是什么。算法,迭代,递归等?

请注意,我放在哪里等是我的问题所在。我最近在互联网上看到一则帖子,说10个程序员中有9个无法喘息

http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

我想对自己实际上在编程时要完成的工作有深刻的了解,并对我可以使用的基本工具进行详尽的理解。基本上,我希望能够用风的所有颜色绘画。


3
杰夫·阿特伍德(Jeff Atwood)的帖子实际上并不是关于深入的编程知识的,而是关于许多人缺乏一些有关编程的基本知识的现实,以及缺乏这些基本知识如何阻止他们发展重要的编程技能的现实。
罗伯特·哈维

2
我不明白为什么这个问题被关闭了。这个问题已被加注5次,并且有很多有用的答案。我想了解的是这种信息-只是因为没有简单的答案并不意味着该信息没有很高的价值,所以programmers.stackexchange.com可能需要重新评估其结束问题的标准。
罗克兰

@LachlanB我投票决定重新开放...需要另外4票才能成功
Michael Brown

我认为这是一个很好的问题,但是任何合理的答案对于该网站的格式来说都太长了。任何好的大学课程都将涵盖这些概念,并且这样的课程需要花费几年的时间专门研究和实践,然后再花几年的时间在实际项目上工作,这一事实应明确说明答案为何不适合此处。
乔治,

Answers:


18

此列表是一个开始...您在问一个大问题!

  • 如何阐明和写下客户的需求(“要求”)。这本身就是一门艺术。如果可以这样做,您的编程工作将会更好。
  • 如何估算和制定计划。人们会要求您估算一下,请做好准备。
  • 如何建设性地审查他人的代码。
  • 设计模式。这是一个很大的。但是不要为此而过度使用它们。
  • 了解错误,问题和功能请求之间的区别
  • 与框架/库保持同步。您不必使用它们,但是您需要知道它们的功能以及其优点/缺点。如果某件事看起来太难了,那么可能(希望)有一种更简单的做事方法。
  • 如何在流程图中记录复杂的算法,或者只用英语写出来。不要指望有人会花2天的时间对您的代码进行反向工程。
  • 如何组织您的代码结构,以便其他任何人都可以理解它
  • 如何注释您的代码
  • 如何编写单元测试
  • 知道引擎盖下发生了什么。例如,调用网络服务-它实际上在做什么?
  • 如何将逻辑抽象为类。
  • 如何重构代码
  • 了解很多编程语言的要旨。您会惊讶于可以从其他领域中学到什么
  • 如何告诉其他程序员该写些什么。
  • 如何向管理层解释您在做什么以及原因。
  • 就像彼得说的,如何调试。我同意他所说的一切,真正的程序员会调试,而不仅仅是猜测。
  • 如何治疗疯子。有很多。
  • 如何完成工作。如果您无法完成工作,世界上所有的理论都不会对您有帮助。

我在这里按照相似的方式(内容相似)回答了另一个问题:

提示,准则,渲染专业代码时要记住的要点?


1
+1:完成工作!几年前,我发了言,说这是工程师的定义特征-他们把事情做好了。有时它不是很漂亮,有时您必须回去重做它,但是最终,他们把事情做好了!
彼得·罗威尔

@PeterRowell:您可能会觉得这很有趣:brandonsavage.net/when-to-write-bad-code
Marjan Venema

不幸的是,这个问题并不是真正符合网站问答机制和格式的问题,但是并不能最小化您的回答价值。如果您想扩展它并为每个观点添加一些解释,它将为我们的社区博客撰写出色的博客文章。
yannis 2013年

@MarjanVenema:是的,我完全同意他的看法。上世纪80年代,我的任务是为新编辑器编写规范,并在开始编码之前获得批准。我凝视着那该死的黑屏超过一个星期,试图弄清楚如何描述我不理解的东西。我的经理对我缺乏进步表示不满。经过三天的周末,他在办公桌上吃了一份草稿。他问发生了什么事,我说我在周末写了那本编辑器,然后只是写了一份我工作的规范。我确实重写了一些代码,但这主要是重构/清理。
彼得·罗威尔

1
@YannisRizos-我想写一个关于这个的博客。您想给我发送任何指导原则的电子邮件,还是我应该写点东西?
罗克兰

22

在“ ” 的标题下出现的内容很容易占用您50%或更多的时间。

了解如何调试。

这意味着学习科学方法。我的意思是真正学习。然后以残酷的自尊心来运用它。了解如何准确陈述您所知道的是真实的,您所知道的不是真实的以及您不知道的那些事情。你草率的项目分配给错误类别的任何时候,你只是做你生命中的很多困难。

学会说“我认为”而不是“我知道”。当您“认为”某件事是正确的(或错误的)时,您只会说“我知道”,然后您就可以证明它!

许多错误是微不足道的,但是很难看清,因为您“知道”代码应该是什么……除非不是。找一个朋友解释一下。要求他们成为“专家白痴”:一个不知道您的代码,但您知道的人,不能让BS过去。如果在向他们描述的过程中突然停下来说:“这样您就可以……看到……看到……谢谢。”不要感到惊讶。

不重要的错误需要大量技术。在阿拉斯加的Wolf Fence是一个可以迅速发现大多数与计时无关的错误的经典之作。阿拉斯加某处有一头狼。建造一道篱笆,将状态削减一半。狼在哪一边?切成两半。泡沫,冲洗,重复。在代码中精心选择的位置执行此操作20次,可以将错误(狼)的区域减少到1/1048576。杀死那只狼。

提示:查找handwaves -物理,心理,或任何其他形式。一旦您(或您的同事)退缩/转移/最大程度地减少了对一部分代码的关注,便会变得很疯狂。因为即使您已经花了数小时/天的时间来寻找d * mn东西,但仍然找不到它,但是您仅仅知道该bug 的区域仍然无法找到……这是该bug发生概率最高的位置。没有人得到“再见”,没有人(包括机器,操作系统,编译器或)得到任何形式的“应有的尊重”。有个错误。期。句子结尾。现在去杀死d * mn东西。

我知道没有一所学校将调试作为自学课程。IMNSHO,这可能是他们(大学/教授)没有教您成为程序员的唯一最明显的证据,而是教您成为……的他们。苛刻?也许。真正?你自有主张。现在证明这一点。


您可能对Sent Squeeze感兴趣,这是Kent Beck描述的一种使用测试和重构进行调试的技术:三河研究所的Kent Beck,Hit'em High,Hit'em Low:回归测试和Saff Squeeze(摘要:有效地隔离缺陷,从系统级测试开始,逐步进行内联和修剪,直到您有最小的显示缺陷的测试为止。)听起来很像Wolf Fence,使用测试和IDE重构功能。
约尔格W¯¯米塔格

1
很好的答案-任何人都可以编写代码,真正的程序员可以调试。
罗克兰

@JörgWMittag:我非常喜欢自动回归测试。我最初是在80年代中期将其用于搜索引擎项目的,对于那些看起来很无辜的代码进行了“微小”更改之后,这些东西会掉下来,我感到震惊(震惊)。(注意:这是200,000 + C的SLOC,并且内存管理问题是我们生存的祸根。)
Peter Rowell

3

恐怕对于任何人来说,无论是结论性还是权威性的回答,这都是一个很大的问题,尤其是考虑到您想要优先列表时。那里有很多程序员,他们从事非常不同的工作-当然,基本原理保持不变,但是保持活跃在内存中所需的内容却可能完全不同,并且确实有很多任务可以使您保持漂亮的状态。高层次而无需深入。

尽管您似乎真正地在担心如何成为一名更好的开发人员,而不仅仅是一个千篇一律的交易。我感到很佩服,可以分享一些帮助我学习编程的知识。

几乎所有的编程都归结为算法和数据结构。反过来,它们又是一个更大问题的示例-我们如何将现实世界中的事物和过程建模为计算机可以理解的表示形式。如果您只是入门,那么使用高级编程语言(如Java,Python等)可能会很有用,以熟悉实现数据结构和算法。

到了某个时候,在研究了数据结构和算法之后,您可能会开始提出一个令人讨厌的问题:“但是,从告诉计算机要做什么到实际执行计算机,我们应该如何做呢?” 然后,您可以研究计算机的实际计算方式-内存和CPU如何共同执行指令,操作系统如何抽象化硬件,以便您编写一个程序(例如,打开文件)而无需编码为特定的低级代码硬盘驱动器接口。

这可能是一个很好的起点-算法和数据结构如何模拟现实世界中的问题以及计算机如何实际执行计算。了解后者对于掌握像C这样的低级语言非常有用,C比OO和脚本语言使用的烟雾和镜像少得多:)


2

YAGNI:“始终在真正需要它们时执行它们,而永远不会仅仅在预见到需要它们时就执行。”

以我的经验,通常“程序员”会预见将来会发生许多情况,并通过添加代码来预期它们来“改进”代码!在大多数情况下,他们添加的代码只会膨胀代码,并增加代码的复杂性。


1

关于成为一名程序员,最重要的一点是,编写代码是一种磨练,而像工人一样的“蓝领”态度对待产生要付给您的酬劳的行为会使您比任何深奥的学习走得更远。

学会进入区域。我的意思是说,当您只专注于任务时,就可以保持精神状态,您可以开始将很多事情放在脑海中,以及它们如何立即互操作。一旦习惯了随意进入区域,就开始担心其余的问题。除非您可以像处理某种代码那样处理代码,否则其余的几乎没有用。

编辑:

如果您不相信这一点,并且对我投了反对票,那么我相信您不知道您是否有决心在20年内做到这一点。我知道我这样做是因为我接受这一点。;)


0

最近的一个问题,以某种方式与此问题相关,“ 答案” 链接到“ 此博客”该博客从不同角度讨论了相同的问题。

对于任何开发人员来说,最重要的概念可能就是“谦虚”。一旦您接受了您并不了解的一切,您就可以探索解决方案。大多数在编程方面写博客的人都处于最高百分位,问题是许多人仍无法控制自己的自恋倾向。这就是为什么他们写博客的原因。忽略那些怨言

链接的博客实际上只不过是a之以鼻-在每个行业中,抱怨最近的毕业生毫无用处是普遍现象,要使他们变得有用和富有生产力需要花费数年的时间。也许问题在于这些自称为大师的人实际上期望过高,并且忘记了一旦他们无法解决FizzBu​​zz的问题。并不是每个人都可以进入前十个百分位,按照定义,一半的程序员低于平均水平……


我同意人们非常热衷,但是我认为您上面链接的帖子的重点是那些不知道如何解决FizzBu​​zz的人们正在申请编程工作,这与只是一个初学者和需要总结的人不同。围绕编程习惯用法展开讨论。我确实同意您关于谦卑的观点,而且许多人似乎不知道那是什么。
RuslanD
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.