3

偶尔,我们会经历一次颠覆我们假设的软件学习体验,我们会从全新的角度看待软件开发。对于我们中的大多数人来说,我怀疑最明显的一个是向核心 OOP 的过渡。您还经历过哪些此类地震,您建议我们如何利用您的经验来质疑我们的假设?

编辑:也许对你学到的东西有一些建议,以及它如何改变你的编程?

4

9 回答 9

12

不是最近的,但我是作为一个业余爱好者开始编程的。我成为了这方面的专家,通过自学学会了我需要知道的一切。我上大学是为了获得计算机科学的 2 年学位,在我的课程中航行,并且完全没有学到任何新信息。这太容易了,在为留言板做出贡献并看到其他人挣扎之后,我自我评估自己至少与任何 10 年的老手一样是一名优秀的程序员。

于是我得到了我的第一份编程工作。当我去敲定我的第一行代码时,那些实际上会被其他人使用的代码,这对我打击很大:我写代码很烂

只是有机会看看其他人的代码,听他们谈论 DLL、版本控制、将程序集放入 GAC、设计模式、测试驱动开发,所有这些在大学里从来没有人费心提及的外国概念我意识到我对编程几乎一无所知。大学和自学并没有让我为真正的交易做好准备。事实证明,我可以编写代码来做任何我想做的事情,但我根本不是一个高水平的思想家,而且我编写的任何代码都非常糟糕。

好吧,6 个月的实际经验解决了这个问题,帮助消除了一些坏习惯,让我对代码的实际外观有了很好的感觉。所以,我在这里,自我感觉良好,但我遇到了一个我无法解决的问题:我有一个对象嵌套在另一个对象的 5 层深处,我希望它通知最外面的对象它的状态已经改变。我想不出一个明显的方法来做到这一点,所以我咨询了一位同事,他借给我一本关于 Java 设计模式的书。我读了这本书,它让我大开眼界,发现我错过了多少:有一个我以前从未见过的设计模式世界,为我从未想过的问题提出了优雅的解决方案。

然后它又一次打击了我,一直以来我都错过了很多东西,我根本不是一个高水平的思想家,而我为解决 GoF 书中描述的相同问题而写的 hack 让它变得平淡无奇很明显:我不擅长写代码

又过了 6 个月,我成为了设计模式的大师。我在抽象工厂中生活和呼吸,长篇大论地抱怨为什么 MVC 远远优于 MVP,向我床边的 Martin Fowler 的金色偶像祈祷。所以,无论如何,我想通过学习一些额外的语言来提升我的简历。我在列表中添加了 Python、C#、Perl,但我真的很厌倦一遍又一遍地学习相同的东西,只是语法上的细微变化。我决定看一种奇怪的语言,我偶然发现了一些 Haskell 的片段。由于不知道该语言是什么,我阅读并发现了一个完整的编程范式,称为函数式编程。只是为了好玩,我学习了一种函数式编程语言(我选择 OCaml 而不是 Haskell 和 Lisp),它完全改变了我对编程的看法。

在运行了那个小实验之后,它再次击中了我:我不擅长写代码

这个函数式编程世界是如何在我不知道的情况下存在的?为什么没有人早点告诉我这件事?想一想,我曾经为自己能够抽出几十个 Java 类而感到自豪,实际上是 1000 行代码创建抽象工厂、具体工厂、访问者等的层次结构。当我精通 OCaml 时,我的应用程序中的行数下降了 20:1。数十个潜在的 Java 层次结构分解为几个 OCaml 联合,所有这些都适合单个屏幕。从那以后,我一直在乘坐函数式编程火车。

这里的教训很简单:如果你认为自己是最好的程序员,那你就糟透了。“我知道要知道的一切”的心态是幼稚的,会限制你成为真正优秀程序员的能力。

于 2009-01-05T01:13:44.363 回答
6

测试驱动开发?

于 2009-01-04T21:26:03.560 回答
2

不知道这些是否算作范式转变,但是...

是去年我还在上大学的时候大开眼界。

于 2009-01-04T21:20:44.770 回答
2

我们可以了解到,许多花哨的名称只是赋予旧式想法的名称,这些想法经过了一些修饰和形式化。

于 2009-01-04T21:27:59.263 回答
1

闭包,lambda 函数...

于 2009-01-04T21:14:23.723 回答
1

对我来说,依赖注入和控制反转。

于 2009-01-04T21:26:53.090 回答
1

映射减少

于 2009-01-04T23:28:47.757 回答
0

3GL 到 4GL ;)

于 2009-01-04T21:10:41.297 回答
0

类型推断。在对 Java 繁琐、官僚的类型规范装置感到非常沮丧之后,发现 SML 并看到静态类型几乎可以毫不费力地让我大开眼界(这让我对 Java更加沮丧......)。请注意,从那以后我就没有使用过类型推断语言(通常,要么我没有选择语言,要么我选择了 Python),但是看到可以做什么已经极大地影响了我对做什么态度......

于 2009-01-04T23:21:23.653 回答