学习编程≠学习一门编程语言

原文链接:
https://phpocean.com/blog/article/learning-programming-is-different-from-learning-a-programming-language/80

本篇札记是对该文章的简单翻译,掺杂了自己理解后的意译,非专业,仅供自己日后回顾~

你很可能是在学习一门编程语言,而不是在学习编程本身。

别为“计算机科学不是学习计算机”这句话而感到惊讶,相反,计算机科学是学习如何自动化解决问题。

解决问题是计算机科学的目的,但解决问题不等于编程。这是为什么很多CS的学生不理解他们为什么要学习算法和数学的原因。

如果你此前上过CS的课程,你不会为我所说的而感到惊讶。想必你已经注意到编程这件事其实和编程语言没有特别强的关联。你可以问问自己:为什么在这些课程中普遍使用的是伪代码?

然而,大多数喜欢自主思考程序员们都会落入这样的陷阱。我们总是在学习编程语言数十年后才真正意识到我们真正应该做的是什么:编程。我自己就是一个受害者。

我花了超过十年的时间一点点地学习不同的编程语言。我学得越多,越难以简单地去创建程序。此前我总以为是自己没有找到合适的工具。然而,事实是当我甚至不知道自己真正要做什么时,却忘记应该去弄明白要做的事,而不是寻找所谓正确的工具。

对于编程语言,神奇的是它们总是在演变。几乎每一天,编程语言都在改变。要赶上这样的变化真的很难。大多数优秀的程序也不过只使用了某种编程语言很小的一部分。

一开始就学习编程语言,那么你所遇到的问题就像在学习木艺之前就去学习如何使用锯子、锤子和各种切割工具。木艺需要专注力、想法、可行性分析、测量、测试、顾客行为分析。第一流的木工相比锤子和钉子对这些要素更感兴趣。当然,在他对于要解决的事进行科学调研时,他也将会花时间去检查钉子、染料、木头等工具的质量。

学习编程和学习一门编程语言有何区别?

编程是只设置一次指令就可以让系统自由地运转。我们将这个原理运用在每天的每件事中。
我们教育孩童、训练士兵、服务顾客。我们或发出指令让他人在某种给定的形式下自由生活,或接收来自他人的指令。你的父母无需每一步都遵照你的指令或指使你在生活中的每一步。然而他们早已在生活的诸多方面对你进行了塑造。

大多数学校和教育网站都会教授一门编程语言的语法。他们会加入一些设计范式(虽然你会忽略什么是真正的设计),一些数学计算,教你变量是如何被声明的以及如何使用它们,数据的类型以及如何声明或者创建。

但这并没有教你推理论证。虽然有了这些方法,迟些时候你将会发现推理论证的技巧。但这将会让你觉得自己耗费了大量时间来学习编程。

我们通过编程来解决问题,而编程语言是辅助我们编程的工具。

它们就像工具箱一样。我们称其为框架。框架帮你组织自己的想法。

如果你正在学习编程然而你仍然无法设计和编写出一个切实可用的应用程序,这意味着你更多地是在学习一门编程语言,而非编程本身。

多少次我们发现学习编程的人仍困惑如何创建出一个自己的程序。对于程序员来说,一个程序就是一个待解决的问题。他应在涉及任何编程语言之前,通过批判性分析来解决它。当你有了解决一个问题的思路,那么你就可以使用任何一种编程语言来实现。

让我们来考虑“求平方”这个问题。对一个数求平方,就是将这个数乘以它自身。
这个解决问题的思路可以用多种语言来实现,如:

  • C语言
  1. function square(int *x){
  2. return x*x;
  3. }
  • PHP
  1. function square ($x){
  2. return $x * $x;
  3. }
  • JavaScript
  1. function square(x){
  2. return x*x
  3. }
  • Scheme(一种Lisp语言)
  1. (define (square x) (* xx) )

你会发现在具体实现时,只有语法的差异。解决这个问题的方法是一样的。这就是为什么你几乎可以使用任何一种你更熟练的语言来搭建任何一种软件的主要原因之一。

编程让我们更容易触碰一门语言的核心。

通常这是人类语言的问题。人类的语言充满局限和谬误。因为机器无法感知这样的似是而非,因此我们无法使用人类语言来对机器下指令。

当你在学习编程时,你将会学习一些新的术语和工具,以助你用一种计算机或者其他程序员能够理解和赞同的方式来书写你的逻辑。

通常,你会从一种简单的,类似于人类语言的符号开始学习,我们称之为“伪代码”。伪代码是人类语言到计算机编程语言的良好过渡。使用伪代码可以避免让你浪费时间在具体的某种语言上,这样你可以着力于如何推理解决问题。通过这样的方式,你可以发现组建一门编程语言的核心。你会理解什么是解决问题真正需要的,什么是编程语言的核心目的。

于是,你在不知不觉中就学会了编程。