不管使用哪种编程语言或操作系统,或者他们开发的环境如何,每个程序员都应该知道什么?

一些背景知识:

我有兴趣成为最好的程序员。作为此过程的一部分,我试图了解我不知道的内容,如果这样做的话,将会使我受益匪浅。尽管“每个开发人员都应该知道的n件事”周围都有很多列表,但是我还没有找到类似的东西,而不仅限于特定的语言。

我也希望此信息对其他人感兴趣并从中受益。

#1 楼

如何吞下自豪感并承认错误而不亲自面对。

评论


这是每个人不论其工作如何(...性别,宗教,文化,社会地位...)都应该做的事情,您不觉得吗? ;)

– Manrico Corazzi
08-09-25在12:00

哦,是的。但是我们程序员(至少我是这样)有一种比大多数人更公开的自豪感:-)

–吉利根
08-09-25 at 12:02

我希望我能两次投票赞成你。

– JoshReedSchramm
08-09-25在15:27

我认为这是我在大学中学到的一件事。在高中时,我一直是聪明的孩子之一。如果我没有上大学,我会以为我很聪明,并且有很大的自我。去大学学习,和真正熟练的人交流,这让我看到自己是多么愚蠢。

– Kibbee
08-09-27在1:45

尽管这确实是事实,但问题并不总是否认或自负,而是公开承认犯错误的潜在后果,至少不是没有先进行某种自我防御/破坏控制的情况。有时候,这是一种文化上的事情。 :)

–以拉
09年12月1日14:00

#2 楼

如何像用户一样思考,而不像技术怪胎程序员那样思考。

评论


我总是很讽刺的是,业内大多数人似乎缺乏的东西可能是最重要的技能之一:沟通技能。

–吉利根
08-09-25 at 12:11

无法同意这一点。这应该是#1。

–查尔斯·罗珀(Charles Roper)
08-09-25在15:16

我实际上不同意。那就是你雇用人的目的。您将永远无法像用户一样思考,但是您肯定可以让人们告诉您用户对建议的看法并采取行动。只是不要问用户他们的想法!那是最糟糕的选择。

– Asmor
08-09-25 at 20:29

您可能会雇用其他人来做到这一点,但是如果您的开发团队能够理解用户的想法,那么在正确之前,您将拥有更少的参数和迭代。另外,如果开发人员可以像用户一样思考,他们知道他们将提供哪些新功能

–琼·加洛韦(Jon Galloway)
08/09/26在12:24

用户很可能是一名极客程序员,但也不太可能同时实现了代码的极客程序员。如果应用程序具有非常微妙和复杂的语义/行为,那么编写代码的人可能是唯一可以理解如何使用应用程序的人。

–鲁本
08年12月25日在7:21

#3 楼

何时寻求帮助,何时不寻求帮助。

评论


如此真实。最近,当我问某人时,答案突然浮现在脑海。 :(

–kevindaub
08年12月25日在1:45

那么,答案是什么?)

–chester89
09年4月11日在14:39

首先问你的橡皮鸭。如果他不能帮你,那就问别人。

–迪恩·拉瑟(Dean Rather)
2010-2-11在5:59

之所以投票,是因为当我刚开始时,我一直不停地问他们一些简单的东西,却没有意识到自己让其他开发人员感到烦恼,我应该弄清楚自己,直到我得到一些帮助。

– eviljack
2010年5月13日在12:12

我总是问自己一个问题:“如果我要问他们,我的同事会怎么说?”。通常,这可以帮助我进一步解决问题,然后才真正提出问题。

–雾霾
2010-09-16 20:11

#4 楼

如何阅读别人的代码。

评论


附录:如何编写其他人可以阅读的代码

–麦克·罗宾逊(Mike Robinson)
09年1月15日在19:02

附录2:六个月后如何阅读自己的代码

–内森·库普(Nathan Koop)
09年9月4日在16:33

@Nathan Koop:最好是“如何编写代码,以便六个月后可以自己阅读”。

–布朗博士
09年12月18日在13:13

六个月后,它已经成为别人的代码了。从某种意义上说,您已经发展了,变得更好了,并且它可能也应该是其他人一开始编写的,因此应这样对待。

– MPelletier
2010-1-26的14:05

附录3:6分钟后如何阅读代码。

– mpen
2010-4-22在4:54

#5 楼

熟悉版本控制系统。它不一定是每个,但是应该知道可应用于所有这些概念的基本概念。

评论


那个版本控制不是软件

–jrhicks
09年10月31日19:57

我要补充一点,集中式SCM(例如,subversion,CVS)和分布式SCM(例如,git,mercurial,bazaar)之间有足够大的区别,因此学习其中的每一个很重要。

–直觉
2010年4月15日在21:19

#6 楼

这是我的10个位:


如何谦虚。我们都在这里学习。您可能比其他人更聪明,但是有很多人都比您聪明。
如何学习/消费信息。我不认识你,但我会永远学习!书籍,互联网等等!
什么是词典,如何使用词典,以及如何快速找到首字母缩写词。
交易的基本工具是什么以及它们的作用(IDE,CVS等) al)。
了解通用术语及其含义:设计模式,可用性,测试(ha!),堆栈等。
对OOP有一定的了解。
在这里具有“能力”至少一种语言,没什么好奇怪的,只知道如何识别变量和方法等。从这里您可以学习FAST。
理解人们最终会使用软件并希望使他们感到高兴。


评论


这必须是八进制帖子。

–连面
08-09-25 at 16:26

关于第一点……。“不要那么谦虚,你不是那么好”。

–马格努斯
08-09-25 at 16:36

@TheOtherScott,很好听,但我实际上是在说2位:D;)

–Rob Cooper
08-09-25 at 17:21

关于第3点:www.acronymfinder.com

–贾斯珀·贝克斯(Jasper Bekkers)
08年12月16日在17:42

@ jasper / intuited:只需在Google中键入首字母缩写词,它就会拉一个或另一个……答案通常还是在前10个结果之一中。点击获取更多信息!

– mpen
2010-4-22在4:57

#7 楼

也许它太微妙了,但我认为它是“知道要解决的问题”。很多程序员(和普通人)都花了很大的精力来解决根本不是很重要的事情。或者他们创建了一个解决方案,需要大量的额外工作,而这并不是完全需要的。

评论


达成共识,担心只有少数用户会遇到而不是更多核心功能的附带用例场景,这太常见了!我仍然很难学习这一点...

–伊恩·罗宾逊
08-09-27在1:40

我应该在前任队长的主页上链接到您的答案。你是对的。

–阿米尔·阿拉德(​​Amir Arad)
08-10-14在12:16

我喜欢您说“很多程序员(和普通人)” :-)

–fingerprint211b
2010-4-27的22:06

#8 楼

如何放松。这是生产力的秘诀。

最终,意志力和咖啡因还不够。我们持续不断的收缩非常有害。

这很重要。

评论


收缩是什么意思?

–鸡蛋
09年7月21日在14:56

@Egg:有时候,当我工作时,我会变得完全放松,非常有生产力。在糟糕的日子里,我使用肾上腺素和咖啡因,身体感到极大的紧张。如果我密切注意,我实际上会收缩一些肌肉。我一直在别人身上发现这种紧张感。不幸的是,它可能导致各种问题,例如倦怠和心脏病,并且还可能导致生产力的净损失,因为它只能在有限的时间内冲刺。那就是我在说的收缩。

–布莱恩·麦凯(Brian MacKay)
10-4-20在11:46

@Egg,他的意思是未使用的肌肉收缩。

– Harpo
2010-09-16 20:12

说到咖啡和收缩,您是否知道咖啡会收缩向大脑供血的动脉。这会使大脑醒来。毕竟咖啡不是一件好事。 tl; dr喝水

–雷诺
2011年1月19日上午10:48

#9 楼

基本数据类型和算法理论。诸如Big O表示法,数组,队列等之类的东西。

评论


如果您所做的只是为Web内容管理系统设计模板,那么对您完全没有帮助。

– xmjx
08-09-25在12:07

好吧,如今在库/框架中实现了标准算法,但我同意一些类似硬算法的思想很有用,但不是很常见

–ŁukaszSowa
08-09-26 at 0:14

仅仅因为它们已经被实现并不意味着您不必了解何时使用什么,复杂性保证等。这是算法背后的重要内容。

–格雷格·罗杰斯(Greg Rogers)
08-09-26在20:54

与格雷格·罗杰斯(Greg Rogers)达成协议。您可能需要实现算法,但是您可以更好地了解它们的复杂性和权衡。例如。一些算法占用更多内存,但速度更快。

–grom
08年11月17日在4:26

如果您不了解它们,则不会知道要使用哪个。算法非常重要。

–伯纳德
09年1月2日于16:52

#10 楼

如何为正确的任务选择合适的工具,而不是参加有关他最喜欢的编程工具的傻瓜大战。

评论


+1,以使这个不停留在42 :)

–CharlesB
2010年6月5日8:08

#11 楼

好吧,这是我的.02 $:


学习永无止境。不管您认为自己有多好,总会有比您更好的人,而且总有您可以改善自己的地方。如果停止学习,您不可避免地会沦为程序员。看书。阅读博客。与其他程序员交谈。
尝试学习多种语言。其中至少有一个是面向对象的。另外,您应该对与所学语言有关的各种技术有所了解(例如,如果您学习Java,那么如果您对Spring有所了解,那将是很好的,依此类推。)。
重构。迟早您将需要这些知识。
学习如何处理遗留代码。
编写单元测试。了解有关TDD的信息。
学习团队合作。
编写简洁易懂的代码。俗话说:“编写代码,好像要维护它的人是一个精神病连环杀手,知道您的住所。”
学习如何同时保持懒惰和纪律。优秀的程序员同时具备这两种素质。看起来很奇怪,它们彼此并不矛盾,而是互补的。



评论


那是您的.02美元或.02美分?大声笑! :-D

–雾霾
2010-09-16在20:15

“编写您的代码,好像要维护它的人是知道您的住所的精神病连环杀手。” +1

–本
2010-12-21在7:56

#12 楼

您无法测试产品的质量。

评论


因此,“质量保证”专业人员的名称错误。

–ZeroBugBounce
08-9-26 at 1:47

从技术上讲,质量检查和测试不是同一回事,尽管就您的观点而言,我不确定大多数组织是否实际实践了差异。

–高杰夫
08-09-26在12:02

最近遇到-并坚持认为:“测试的结果不是质量,而是知识”。

–peterchen
2010-4-13的11:07

richdiet:SQA专家James Bach认为SQA / QA中的“ A”应代表“协助”。我非常同意他的意见和你的发言。

–Kimball Robinson
2010-4-27 21:43

#13 楼

每个程序员都应该了解设计模式。

评论


我还要补充一点,他们还需要了解并非并非所有事情都可以变成给定的设计模式。

–蟑螂
08-09-25 at 12:48

我还要补充一点,并不是每个程序员都应该了解设计模式。遥远的地方有语言,它们的其他功能是如此强大,以至于思想直接从程序员那里流到工作程序中。在这些语言中,故意的模式是一种误导。

–阿里
08-09-25 at 20:20

设计模式仅针对设计人员,而非“程序员”-程序员将需要知道,当他/她成为“设计师”时

–自动字节
08-09-26 at 19:58

有两种类型的人..喜欢编码的人和喜欢谈论编码的人。第二组必须有设计模式。

–比约恩·雷彭(Bjorn Reppen)
08-09-28在21:13

这种模式是克服语言限制的一种方式。程序员应该理解它们仅仅是因为他应该理解并能够克服其语言的弱点。

–tomjen
09年5月16日在19:28

#14 楼

我对此有些迟,但是我将结合Edsger Dijkstra的知识:


除了数学上的偏爱之外,
还非常精通
母语是一个合格的程序员最重要的资产。


如果你不能写一个好的段落,很可能你就不会写还是不错的代码。

评论


但是,我对某些程序员在自然语言编写中使用的可怕的拼写,语法和标点感到惊讶。您会认为每天使用对拼写错误和无效语法的零容忍度的系统都会产生有益的影响...

–谢杜多
09年6月23日在13:07

@cheduardo,这是因为在大多数语言中,一旦编译或运行程序,就会告诉您任何拼写,语法或标点错误,然后可以轻松地进行纠正。逻辑错误不是这样。

–英沙拉
09年11月5日在20:41

@Inshallah:除非您执行if(BlowUpTheSystem = 1)之类的操作。当然,给定适当的单元测试,您可能仅节省时间。但是时间很重要。

–直觉
2010年4月15日在21:30

同意..嗯...减去“母语”部分,我们中的某些人(不幸地?)使用我们的非母语进行的交流更好/更清晰。

– sjobe
2010-4-27在22:03

#15 楼

对于任何给定的技术,操作系统或语言,不要太过情感地归属,依附或对它们有宗教信仰-没有一个是完美的-从长远来看,您可能最终希望自己可以根据自己的想法创建自己的菜谱像每个不同的人一样

像汽车一样思考-您以前可能没有驾驶过特定的汽车,但是它们都具有钥匙,方向盘,油门和制动器-您应该能够上车并迅速开车一旦您弄清楚了什么在哪里。像对待OS和语言一样对待OS和语言,即使您对任何给定实例的细节都感到困惑,也要专注于学习其基本概念。以及各种技术的共性,这将有助于您保持洞察力。例如,要意识到,虽然进化树正在活跃地分支并且充满了死胡同,但随着时间的流逝,技术趋向于反复地围绕“最佳实践”和“规模经济”进行融合(例如,注意Mac与Mac并没有什么不同)如今,PC机盖下...)。

最后,请记住,无论您对它有多大的乐趣,技术本质上都代表着您的思维和想象之间的不完美镜头。实际产生。尽力,学会,保持适应...

#16 楼

如何用C.
编程

评论


哈哈。当杰夫需要他时,杰夫在哪里? ;)

–凯文·费尔柴尔德(Kevin Fairchild)
08-09-26 at 13:40

更不用说汇编语言了。

–Ferruccio
08年9月27日在1:35

更不用说X。

–阿里
08-09-28在16:20

拧紧...二进制

–鸡蛋
09年7月21日在15:28

杰夫!!!!人们在您的网站上说屎:P

– AndreiRînea
10-10-15在11:22

#17 楼

停止学习的那一天应该变成不再是程序员的那一天。

评论


如果我有一个愿望,那就是圣诞老人是我的父亲。

– Pete Karl II
08-10-13在16:46

因为圣诞老人...?

– Robert Venables
09年1月11日在16:34

停止学习的日子应该是死亡的日子。 :)还是+1

–ShdNx
09年7月29日在18:58

因此,要永远生活,您必须一直学习吗?现在有一个我可以支持的想法!

– canadiancreed
09年12月23日在22:02

#18 楼

单元测试和调试。

评论


第一个消除了对第二个的需要。 ;-)

–phjr
08-09-25在16:28

否,当单元测试失败时,需要调试。两者在一起。

–赞·山猫
08-09-25在19:15

不能对此施加足够的压力。

– fastcodejava
2010-4-22的3:53

#19 楼


正则表达式


它们有什么用?

什么时候不使用它们

如何编写可读的正则表达式

如何调试它们




之前提到过,但我认为这应该是自己的答案。

评论


我越来越多地使用它,并且在这里和那里捡东西,但我仍然不是业余爱好者。

–alexp206
08-09-26 at 0:29

我完全同意。当您不理解它时,它看起来很奇怪且很困难,但是当您理解它时,它比一吨子字符串/ indexof函数调用要容易得多,否则将需要执行相同的操作。我将确保您的模式得到很好的注释。

– Kibbee
08-09-27在1:41

有些人遇到问题时会认为“我知道,我会使用正则表达式”。现在他们有两个问题。 -“ Jamie Zawinski”:jwz.livejournal.com,在comp.lang.emacs中

–比约恩·雷彭(Bjorn Reppen)
08-09-28在21:11

使用基本上围绕它们构建的编辑器是学习讨厌的坚韧不拔的好方法。我的经验是vim(它使用了与事实上的标准PCRE几乎可比的等效物),但是我给人的印象是,同样的规则适用于emacs世界。

–直觉
2010-4-15的21:27

有些人面对正则表达式时会认为“我知道,我会引用杰米·扎温斯基”。现在他们有两个问题(其中一个是他们一开始可能不知道自己在做什么)。

–研究员
10-10-24在20:38

#20 楼

没有人想要使用软件。他们想解决问题。

评论


究竟。当我听到开发人员试图向最终用户解释数据库,以回答他们为什么无法完成某件事时,我感到非常恐惧。他们不需要知道我们如何做事。他们只是希望它能工作。这就是应该的方式。

–凯文·费尔柴尔德(Kevin Fairchild)
08-09-26 13:43

我喜欢相信人们可以编写使用乐趣的软件。

– Nikolai Ruhe
09年12月3日在21:15

完全同意。但是,这也适用于API。没有人愿意学习新的API,因为它真是太好笑了。我们需要API的功能,而不是它代表的代码。

–俱乐部
10年7月28日在10:44

凯文(Kevin),我希望我们的“实现程序员”(测试人员的后缀)会读懂。我也坐在办公桌后面,希望当他开始谈论循环和最终用户的if语句时,世界将吞噬他。

–雾霾
2010-09-16 20:21

#21 楼

Coffee和IntelliSense是您最好的朋友。

评论


希望我能给我超过1票赞成!

–黛娜
08年12月7日在21:48

我希望多喝咖啡! ñ_ñ

– Rulas
08年12月11日在15:48

我想我比其他任何事情都同意这一点。

– Unkwntech
09年6月8日在1:49

我几乎从不喝咖啡,除非我绝对需要在X个小时内完成一个项目,这是:一天的用完小时数+ X> 8。

–俱乐部
10年7月28日在10:40

咖啡不会给您任何能量。它只是从您的内部储备中挤出了一部分。不好/不健康。

– AndreiRînea
10-10-15在11:23

#22 楼

如何观察大的复杂对象并将其分解为小的简单对象,当再次组合在一起时,它们仍然可以完成相同的任务。

#23 楼

永远不要信任用户(特别是如果应用程序是公开的!),他们通常会尽一切力量以一种或另一种方式破坏您的应用程序。

使其具有未来的可扩展性–您永远都不知道何时您想在几年后对其进行扩展,并意识到重新编码不良创建的代码将花费多少精力。

评论


这太笼统了。一些实用主义也是很好的。

–马夫
2010-4-13在11:09

#24 楼

程序员不是一无所知,应该始终尝试学习新的语言/技术等。

#25 楼

良好的UI设计和通信(也称为图形)设计的基础。

我看到太多的应用程序和项目被不良的设计或易用性所破坏。只需学习基础知识,就可以改变世界。加上视觉问题解决技术(即,如何在视觉上传达概念)是一个刺激性的挑战,应使您对新的观察方式睁开眼睛,这反过来又会对您的代码产生影响。

一本值得推荐的书是罗宾·威廉姆斯(Robin Williams)的《非设计师的设计书》

这是乔尔·斯波斯基(Joel Spolsky)所说的:


哇!每个人都必须进行一些图形设计,并非每个软件团队都拥有专业设计师。这本出色的薄书将带您了解页面布局,字体等的基本原理。好消息是,您可以在水变冷之前在浴中阅读它,第二天,可以看到对话框,PowerPoint和网页将开始看起来更好。


评论


其次,我还要对“日常用品的设计”表示赞同。 amazon.com/Design-Everyday-Things-Donald-Norman/dp/0385267746

–八十一团结
09年11月26日在17:19

#26 楼

每个程序员都应该知道如何快速学习。很多时候您开始工作,并会被要求开发从未使用过的技术。在要求您编写具有生产质量的代码之前,他们可能会给您一个星期左右的时间(如果您很幸运的话)。

评论


我开始了我的第一个编程工作,并在一周之内编写了最终可以上线的代码。幸运的是我是一个快速学习者,并且拥有过编程经验。在6个月内,我重组了客户端与服务器的连接,将性能提高了三倍。这是我以前从未使用过的语言。

–雾霾
2010-09-16 20:24

#27 楼

版本控制。并引用我的女朋友:“我不仅要你洗碗,我要你喜欢它!”

#28 楼

需求变更,您的代码将不得不进行调整,而您可能不得不适应它。

这里有几个与此主题相关的问题。

#29 楼

在我脑海中:


很少有编程问题需要除加,减,乘和除之外的数学运算。如果您想使用微积分解决问题,请在进行此操作之前进行详尽的研究。
每当您发现猜测某事应该如何工作时,您就做错了。心灵感应不是您的工作。
给您提供规范的人很少了解他想要的一切,直到您将其弄清楚为止。
成为优秀程序员的一半以上来自与人打交道。与您的团队进行互动,管理您的经理以及对最终用户进行罚款是工作的一半。
编写好的代码要被人们阅读,就像被编译器要阅读一样。
最好实践和实际现实之间的冲突比程序员想的要多,但比经理所想的要少。当他们看起来有冲突时,由您来描述和理解冲突,然后屈服于实践。如果从长远来看,微妙而聪明的解决方案要比丑陋的,残酷的解决方案更好,那么它就更好了。
好的工具不能使优秀的程序员成为可能,但是糟糕的工具会使我们同样糟糕。
从不看不起一种技术,但总是在寻找最好的选择。
您知道的语言越多,使用的语言就越好。
不要被慢速所打扰。面向编程的思想逐渐渗透到您的日常生活中。即使我们不在计算机旁,我们也都受到带宽限制的困扰,由于任务切换而导致性能下降,并且需要从备份存储中加载内容。计算机应该模仿人类的思想,类似物无处不在。


评论


10号让我发笑。很多次我会在工作中处理问题,但直到晚上10点才躺在床上,我最终想出了答案!

–雾霾
2010-09-16 20:27

#30 楼

阅读别人的代码不会破坏您的大脑,而是弄清楚为什么您不会那样做(如果更好或不是,这是另一个问题)。

这使您可以编程gedankenexperiment,有时您会发现有人实施了更好的方法!就像这样更好。

该答案自然扩展为阅读您自己的代码,因此扩展为使用版本控制和DIFF,从而扩展为42。