Answers:
学习了Clojure之后,我开始意识到函数式编程的用处,而我的Java编码风格也因此受到了很大的影响。与流行的看法相反,功能编程语言并不是进行某些功能编程的绝对前提。
可以将相当多的函数式编程元素整合到诸如Java之类的命令性语言中,即使它并不总是惯用的,它在某些问题上也可能非常有益。例如,匿名类大致等于闭包,如Wikipedia中所述。惰性评估应该是一种规范,而不是不寻常的事情。不变性几乎不会被过度使用。只是克服了(几乎)过时的想法,即由于GC和堆消耗,构造新对象而不是对现有对象进行变异很昂贵-在99.9%的情况下,这根本不相关。实际上,并行处理甚至可以使效率参数发生相反的变化:创建新的不可变对象比更改现有的对象便宜,因为您摆脱了锁定。
即使您拥有一支精湛的团队和该团队的主管管理人员,您的工作仍然不安全。高层管理人员仍然可以做一些愚蠢的事情,例如解散整个董事会。
简而言之:政治很重要,有时是影响您的政治,您无法控制。
我了解到,软件测试的目的是发现错误。这不是要验证系统是否正确。
有重要的心理因素在起作用:如果您的目标是证明程序是“正确的”,则您会倾向于进行已知会通过的测试。但是,如果您的目标是发现错误,那么您将偏向于真正将系统推向极限的测试。
您使用的语言甚至发生了重要变化。如果测试发现错误,则称其为成功。如果测试未通过(即程序通过),则将其称为不成功。我发现自己遵循“验证”思想,这产生了很大的不同。
我强烈推荐经典著作《软件测试的艺术》中对这种心理影响进行了更多讨论。作者迈尔斯(Myers)还建议,测试程序的任何人都不应成为作者,甚至不应属于同一管理链。如果您自己进行编码,则可以执行此操作,因此需要纪律。
无自我编程的真正价值。
从某种程度上说,我一直都知道自我和编程并不会混合在一起,但从来没有完全推理出后果。我必须从去年开始才意识到,您必须积极回顾并找出自己的做法中的错误的想法。我也在学习积极寻求对我的设计的批评(在UI和代码中)。
老实说,我仍然在学习如何放弃自我,在我的编程生涯的余下时间里,我可能还将学习如何做到这一点。
我了解了像Semirings这样的数学概念如何应用于算法。通过此操作,您可以显示除了使用不同的半环以外,某些算法是如何相同的。作为一名程序员,这对我来说并不奇怪,但是我的头被吓坏了。
除了弗兰克·希亚尔(Frank Shearar)提到的政治因素外,我最近还发现了令我振奋的QUnit和JSCoverage。又一个月。从来没有想到会是可能的单元测试的JavaScript 与代码覆盖率,但它是... :-)
在上一个编程年中,我最要感谢的三项内容如下(重要性和感激力从高到低排列):
一种函数式编程范例,使我可以用其他通常更优雅,更简洁的方式来表达代码中的思想和算法。由于功能性编程思想,我感到我的整体编程技能在很短的时间内得到了很大的提高。
(我个人感谢TomášPetříček的出色著作《真实世界的函数式编程》。)
既依赖注入和单元测试都告诉我,对象组合可以说是创造复杂的(面向对象)系统的最佳方式(而这个类继承不是为我所用想象的那样重要)。两者都教会了我,并使我思考如何最好地组成系统以及如何编写易于使用但仍然足够灵活以重用的组件。
所有这些因素加在一起,使我编写的错误通常比以前少了,因为我正在编写的代码比以前发布的代码更容易理解和出错。
在快速发展的软件行业中无论发生什么变化,学习曲线始终如一。“如果只有一种学习方式而不花时间学习。”
学习了基本的Python(有时使用它来编写快速脚本)
在VM中安装了ArchLinux(以前在VM中安装过Ubuntu,现在我的PC很快!)
从MATLAB开始(特别是用于绘制图形和快速数值检查)
从SVN切换到Mercurial(分支和合并!)