65.9K
CodeProject 正在变化。 阅读更多。
Home

编程的不舒适真相

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.85/5 (9投票s)

2018年12月12日

CPOL

5分钟阅读

viewsIcon

5240

没有人会告诉你的编程真相

引言

我熬夜写完了代码。是的,是在纸上。你能想象吗?现在,我们甚至可以在浏览器里使用编译器了。

那是在2004年。我当时在学C++。那是我学的第一门语言。

在最初的几堂课里,我感觉很棒。所有这些初学者都会学的东西,比如变量、语句,还有那个最令人安慰的 `printf` 函数,它可以让你的程序“说话”。

直到我遇到了循环和嵌套循环的概念。它们把我打倒在地,结果我熬了通宵在纸上练习这些概念。

但我现在可以告诉你,这一切都是值得的。当你学习任何一门新语言或框架时,一开始你都会学得很快。

如果你学过 HTML 或 Python,开头总是很容易的,而且你每天都在学到新东西。当你看到自己进步时,感觉很好;而当你卡壳时——你知道,这感觉糟透了。

但是,高级概念需要更多的时间来消化。下图代表了学习任何编程语言或框架的典型学习曲线。

Programming Learning Curve

平坦的曲线代表了你在学习编程的高级概念时。这时,学习编程语言变得痛苦。非常痛苦!

痛苦对于学习很重要

如果你是一名初级开发人员,你就会知道,一开始,你会轻松搞定基础的东西和简单的问题,但当面对困难问题时,你的学习曲线就会变得平坦。

对于初级开发人员来说,当没有人可以帮助他们时,这种痛苦会加剧。他们会感到孤独,甚至 Stack Overflow 上的开发者也会因为他们提出的问题(在资深开发者看来是幼稚的问题)而斥责他们。

大多数人在这个痛苦的时刻就会放弃。但依我看,这是黄金时刻。当你开始在学习中感受到痛苦的那一刻。因为痛苦代表着持久的学习

这就是我在学习 C++ 高级概念时感受到的痛苦。有很多障碍。我的同学们无法提供帮助,家里的电脑也出了故障。

唯一有效的方法就是练习,即使我没有电脑,所以我会在纸上练习,然后再在电脑上验证我的程序。

我克服痛苦的坚持至今仍在回报我。在那之后,当我遇到循环或嵌套循环时,我再也没有跌倒过。

痛苦给你新的视角

另一个痛苦的时刻是,当我用 Visual Basic 6 编写一个真实世界的应用程序时。我仍然记得,每当我需要修改代码时,我都会抓耳挠腮。

这是 VB6 的原因吗?这是因为代码结构糟糕。过程式编程会导致糟糕的代码结构。VB6 是一门过程式编程语言。

但我见过有人像使用过程式编程语言一样使用 JAVA/C#。我本人也曾陷入这种陷阱。因为每门面向对象的编程语言允许你以面向对象的方式编写代码,但并不强制你这样做。

糟糕的代码结构带来的痛苦促使我创造出良好的代码结构,这让我学习了面向对象编程。如果我没有抓耳挠腮,我至今仍会像使用过程式编程语言一样使用 C#。

我学习 OOP 不是为了学习另一门编程语言。我学习它是因为我想写出好的代码结构。现在我创建的代码结构更容易实现更改。

所以,依我看

如果你感受不到糟糕代码的痛苦,你就不会追求高质量的代码。

为什么没有人告诉你真相?

只有一个原因:“成就感”。你知道为什么许多书籍和可汗学院的编程教程都以“hello world”之类的入门内容开始吗?因为“hello world”很容易,它会给你一种成就感。

如果他们告诉你真相,直接把难的东西扔给你,会发生什么?你会停止阅读或观看。他们不希望这样。

他们的宣传口号很高,比如“24小时学会 Python”或“21天学会 PHP”。我读过很多编程书,所以我知道。学习一门语言需要的时间远不止24小时或21天。

Truth About Programming

我不是反对基础知识或“Hello World”这类内容。我知道你必须从基础开始,然后循序渐进。但许多编程书籍和教程只是开始和停留在基础知识上。

一个经典的例子是面向对象设计的书籍和教程。它们从面向对象编程语言的基础开始,比如类和对象的定义和语法。但我们都知道,这与面向对象设计无关。

面向对象编程和面向对象设计之间存在区别。为了区分 OO 编程和 OO 设计,马丁·福勒(Martin Fowler)的《UML精粹》(UML Distilled)一书中有一个短语。

知道如何使用锤子并不能让你成为建筑师。

但不幸的是,许多书籍和教程犯了一个错误,将基础的 OO 编程内容包含在 OO 设计的书籍和教程中。

他们这样做是因为 OO 设计很难,并且在自己的项目中应用更难。因此,不可能获得成就感。所以,他们加入了这些“凑数”的内容,只停留在基础和容易的部分。

历史

  • 2018年12月12日:初稿
© . All rights reserved.