在过去的12个月中,您学到的最重要,最有用或最有意义的事情是什么?[关闭]


14

编码社区中的很多人都在谈论持续改进,深思熟虑的实践等等,但是当他们谈论当前的实践时,就像是“从宙斯的腰部完全形成”一样,因为您不知道如何做。他们的观点随着时间或最近学到的东西而改变。

尽管我时不时地去演讲,看书或与某人交谈,然后他们打开了更多的书,我发现我从这些见解中学到了很多东西。

那么,如果您不得不在过去的12个月中选择一件事情,那么您会学到什么呢?

Answers:


18

我了解到,只需要一位烂经理来破坏整个项目,但是之后需要很多优秀的程序员来清理混乱。


马丁,我投票赞成,因为您的消息使我在这个多雨和寒冷的星期六早晨微笑,但您未回答问题;)

添加了“我知道了...”
马丁·威克曼

+1,因为我是本月的那些程序员之一。上周70个小时以上==“我该死了”。
丹·雷

我认识那个!应该引用!“只需要一位烂经理来破坏整个项目,但是随后需要很多优秀的程序员来清理混乱。”
阿米尔·雷扎伊

12

学习了Clojure之后,我开始意识到函数式编程的用处,而我的Java编码风格也因此受到了很大的影响。与流行的看法相反,功能编程语言并不是进行某些功能编程的绝对前提。

可以将相当多的函数式编程元素整合到诸如Java之类的命令性语言中,即使它并不总是惯用的,它在某些问题上也可能非常有益。例如,匿名类大致等于闭包,如Wikipedia中所述。惰性评估应该是一种规范,而不是不寻常的事情。不变性几乎不会被过度使用。只是克服了(几乎)过时的想法,即由于GC和堆消耗,构造新对象而不是对现有对象进行变异很昂贵-在99.9%的情况下,这根本不相关。实际上,并行处理甚至可以使效率参数发生相反的变化:创建新的不可变对象比更改现有的对象便宜,因为您摆脱了锁定。

有关在纯Java中执行FP的更多信息,请参见此处此处此处此处


我同意+1。令人遗憾的是Java对函数式编程的支持如此差。
乔纳斯(Jonas)2010年

我已经在FP(我的第一份工作涉及LISP)一个长期的利益,我认为这是非常令人兴奋的是,在过去的几年中,它终于成为OO旁边一个相当“共同”范式等
FinnNk

Java 7至少应该有更好的闭包。而且,使用诸如lambdaj之类的聪明库可以弥补语言本身的不足之处。
乔纳斯·普拉卡

我希望对Java / JVM中的尾部递归有更好的支持。
乔纳斯(Jonas)2010年

1
@Helper方法:我的答案的前两个链接是有关FP with Java的文章。我不知道有关该主题的任何书籍。我认为“获取它”的最佳方法是学习一些实际的FP语言,然后开始在Java代码中使用更多不变的对象。
乔纳斯

10

即使您拥有一支精湛的团队和该团队的主管管理人员,您的工作仍然不安全。高层管理人员仍然可以做一些愚蠢的事情,例如解散整个董事会。

简而言之:政治很重要,有时是影响您的政治,您无法控制。


我给您一个虚拟的+1,因为马丁已经用类似的答案让我微笑了;)您读过《行尸走肉》吗?这是一本关于您在说什么的书

(我将虚拟向上投票转换为真实投票)

9

我了解到,软件测试的目的是发现错误。这不是要验证系统是否正确。

有重要的心理因素在起作用:如果您的目标是证明程序是“正确的”,则您会倾向于进行已知会通过的测试。但是,如果您的目标是发现错误,那么您将偏向于真正将系统推向极限的测试。

您使用的语言甚至发生了重要变化。如果测试发现错误,则称其为成功。如果测试未通过(即程序通过),则将其称为不成功。我发现自己遵循“验证”思想,这产生了很大的不同。

我强烈推荐经典著作《软件测试的艺术》中对这种心理影响进行了更多讨论。作者迈尔斯(Myers)还建议,测试程序的任何人都不应成为作者,甚至不应属于同一管理链。如果您自己进行编码,则可以执行此操作,因此需要纪律。


8

从客户交付开始就进行测试驱动的开发,以了解它如何影响代码质量,并且仅在Eclipse的JUnit启动器中运行。它产生了更好的产品。


请注意,我没有找到将“重新运行最新的单元测试”绑定到密钥的方法。这使它有点乏味。

5

无自我编程的真正价值。

从某种程度上说,我一直都知道自我和编程并不会混合在一起,但从来没有完全推理出后果。我必须从去年开始才意识到,您必须积极回顾并找出自己的做法中的错误的想法。我也在学习积极寻求对我的设计的批评(在UI和代码中)。

老实说,我仍然在学习如何放弃自我,在我的编程生涯的余下时间里,我可能还将学习如何做到这一点。


3

这是我对自己问题的回答:

大约一年前,它单击自动接受测试,而不是我们的测试人员本来可以手动完成的测试的自动化版本。专注于针对单一规格的测试,而不是试图一次通过尽可能多的命中,这使测试更加简单,易于阅读,并且有助于鼓励增量交付。


3

我了解了像Semirings这样的数学概念如何应用于算法。通过此操作,您可以显示除了使用不同的半环以外,某些算法是如何相同的。作为一名程序员,这对我来说并不奇怪,但是我的头被吓坏了。


1
你有一个例子吗?
Mark C 2010年

编程元素一书中有一个示例,该示例使用一个函数来计算幂和一些斐波那契东西,这些函数可以在O(log n)时间内计算fib。我认为可以在以下位置找到示例cpp-next.com/archive/2010/03/eop-ch3-preview,但是该网站响应时显示内部服务器错误。
Peter Stuifzand


2

在上一个编程年中,我最要感谢的三项内容如下(重要性和感激力从高到低排列):

  • 一种函数式编程范例,使我可以用其他通常更优雅,更简洁的方式来表达代码中的思想和算法。由于功能性编程思想,我感到我的整体编程技能在很短的时间内得到了很大的提高。

    (我个人感谢TomášPetříček的出色著作《真实世界的函数式编程》。)

  • 依赖注入单元测试都告诉我,对象组合可以说是创造复杂的(面向对象)系统的最佳方式(而这个类继承不是为我所用想象的那样重要)。两者都教会了我,并使我思考如何最好地组成系统以及如何编写易于使用但仍然足够灵活以重用的组件。

    (如果我不得不提到好的教学资源,我会说Roy Osherove的“单元测试艺术”。)

所有这些因素加在一起,使我编写的错误通常比以前少了,因为我正在编写的代码比以前发布的代码更容易理解和出错。


2

在快速发展的软件行业中无论发生什么变化,学习曲线始终如一。“如果只有一种学习方式而不花时间学习。”


在我看来,总有新的东西要学习,这是该行业的一大吸引力。IT系统通常都是关于如何最好地处理不断增加的复杂性的,我喜欢在这个方向上发现新的理论和概念。另一方面,这有时可能会令人沮丧,因为不得不跟上最新技术的感觉就像是一场持续的比赛。
stakx 2010年

1

我了解到,将公司出售给新公司确实可以改善您的工作。我的组织是在5月从我们的旧公司购买的,情况似乎一直在好转。新公司在我们的新办公室里几乎没有花任何钱,没有花任何钱,用21世纪的设备代替了我们已经过时的开发机器,在管理项目方面表现出了灵活性,总的来说,我们所有人都感到宾至如归。

这有点让人沮丧地被卖掉(有点像一个农奴主,因为他与换手的土地有关,所以有了一个新的封建主),但是最终结果却比我预期的要好得多。


0

我会说在Visual Studio 2010中使用Microsoft单元测试。

我发现调试特定的测试方法真的很容易。

我可以在测试项目中的任何时候运行,以查看业务层应用程序是否运行正常。测试过程保证了我的团队为我们的网站访问者部署完整的解决方案时不会出现问题。


0
  • 学习了基本的Python(有时使用它来编写快速脚本)

  • 在VM中安装了ArchLinux(以前在VM中安装过Ubuntu,现在我的PC很快!)

  • 从MATLAB开始(特别是用于绘制图形和快速数值检查)

  • 从SVN切换到Mercurial(分支和合并!)



-1

我必须开始维护Python Web应用程序-所以我认为这也是学习Vim的好时机。现在,我将Intellij的IdeaVim插件用于Java和Flex开发,我坚信它使我的打字更快,更高效。


1
真的--1?您想为我解压-人们不认为VIM具有启发性或有用性吗?
沃森
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.