我们偶尔会通过软件学习体验来颠倒我们的假设,并且我们从全新的角度来看待软件开发。对于我们大多数已经存在一段时间的人来说,我怀疑的最明显的一个是向硬核OOP的过渡。你经历过其他类似的地震,你会如何建议我们用你的经验质疑我们的假设?
编辑:也许有一些关于你学到了什么的建议,以及它是如何改变你的编程的?
答案 0 :(得分:12)
不是最近的,但我开始编程作为业余爱好者。我成了一名高手,通过自学了解了我需要知道的一切。我上大学是为了获得我的2年计算机科学学位,在我的课程中航行,并且没有学到任何新信息。这太容易了,并且为留言板做出了贡献并且看到其他人挣扎,我自我评价自己至少是一个优秀的程序员,就像任何一个10年的老将一样。
然后我得到了我的第一份编程工作。当我开始敲击我的第一行代码时,那些实际上会被其他人使用的代码,它真的让我很难受:我很难写代码。
只是有机会查看其他人的代码,听听他们谈论DLL,版本控制,将程序集放到GAC,设计模式,测试驱动开发,所有这些其他外国概念,这些都没有人提到过在大学让我意识到我对编程无所不知。大学和自学没有为真正的交易做好准备。事实证明,我可以敲除代码来做我想做的任何事情,但我根本就不是一个高级思想家,无论我发现什么代码都是非常糟糕的。
嗯,一个好的6个月的实际经验解决了这个问题,帮助调整了一些不良习惯,并让我对代码实际上应该是什么感觉很好。所以,我在这里,对自己感觉良好,但我遇到了一个我无法解决的问题:我有一个嵌套在另一个对象内5层深的对象,我希望它通知最外面的对象它的状态已经改变了。我无法想出一个明显的方法,所以我咨询了一位同事,他向我提供了一本关于Java设计模式的书。我读了这本书,它让我看到了我失踪的多少:有一个我以前从未见过的设计模式的整个世界,提出了我从未想过的问题的优雅解决方案。
然后它再一次打击了我,这一次我一直都错过了这么多,我根本不是一个高级思想家,而且我为了解决GoF书中描述的相同问题所写的黑客甚至显而易见:我很难写代码。
又过了6个月,我是设计模式的大师。我生活和呼吸抽象的工厂,长期抨击为什么MVC远远优于MVP,在我的床边旁边祈祷马丁福勒的金色偶像。所以,无论如何,我想通过学习一些其他语言来提升我的简历。我在列表中添加了Python,C#,Perl,但是我只是在语法上进行了微妙的改变而一遍又一遍地学习相同的东西。我决定看一个奇怪的语言,然后我遇到了几个Haskell的片段。我不知道该语言是什么,我读到并发现了一个称为函数式编程的完整编程范式。仅仅为了测试,我学习了一种函数式编程语言(我选择了OCaml而不是Haskell和Lisp),它完全改变了我对编程的看法。
在进行了那个小实验之后,它又一次击中了我:我很难写代码
如果没有我对它的了解,这个功能性编程的范围是如何存在的?为什么没有人能早点告诉我这件事呢?想一想,我曾经为能够抽出几十个Java类,几千个代码行创建抽象工厂,具体工厂,访问者等等的等级而感到自豪。当我熟练使用OCaml时,我的应用程序中的行数减少了20:1。数十个可能的Java层次结构崩溃成几个OCaml联合,所有这些都适合单个屏幕。从那以后,我一直在使用函数编程培训。
这里的教训很简单:如果你认为自己是最好的程序员,那就太糟糕了。 “我知道应该知道的一切”心态是天真的,会限制你成为真正优秀程序员的能力。
答案 1 :(得分:6)
答案 2 :(得分:2)
不知道这些是否会被视为范式转换,但......
去年,当我还在上大学的时候,是不是让人大开眼界。答案 3 :(得分:2)
我们可以了解到,很多花哨的名字都只是老式的想法所给出的名字,这些想法已经过一些修饰和形式化。
答案 4 :(得分:1)
关闭,lambda functions ...
答案 5 :(得分:1)
依赖注入和控制反转对我来说。
答案 6 :(得分:1)
答案 7 :(得分:0)
3GL到4GL;)
答案 8 :(得分:0)
类型推断。在被Java笨重,官僚主义的类型规范装置令人难以置信的挫败之后,发现SML并看到静态类型几乎可以毫不费力地让人大开眼界(让我甚至更多对Java感到沮丧......)请注意,我没有使用类型推断语言(一般来说,要么我不选择语言或选择Python),但看到可以做的事情已经极大地影响了我的态度关于 完成了什么......