我们不仅是程序员, 而且是个 (与时俱进的) 学习者. 鲜见的是有多少人认为他们是在学习编程的呢. 原翻译传送门 is here https://github.com/reng99/blogs/issues/1
你可能在学习编程语言而不是编程本身
别对学习计算机科学 (CS) 不是研究计算机这种言论感到惊讶. 相反的, 学习 CS 是对自动解决问题的研究. 解决问题的是计算机科学, 而不是编程. 这就是为什么许多 CS 的学生似乎不明白自己为什么要学习算法和数学.
如果之前你有去上过 CS 的课程, 你就不会对我这里说的话感到惊讶. 因为你会注意到编程和编程语言没有多大的关系.
但是, 大多数自我思考的程序员会掉入这么一个陷阱: 在我们意识到自己正真要做的是编程事情的时候, 我们已经花了很长的时间来学习编程语言了. 我自己就是一个受害者.
我花了十几年的时间学习各种编程语言. 我学的越多, 发现建立简单的东西就越难. 我总有那么种感觉是我没找到合适的工具. 但是, 问题出在当我还没有意识到我要做的工作时, 忘了寻找适合的工作而不是寻找适合的工具.
而且奇怪的一点是: 编程语言总是在不断发展的. 编程语言几乎每天都有所变化, 我们很难跟上其步伐. 可是, 大多数优秀的程序只是使用了编程语言的一小部分.
学习编程语言的问题就好比在学习木工之前去学习如何使用木工锯, 锤子和各种切割机器. 木工需要注意: 想法, 可行性分析, 测量, 测试和用户行为. 老木工对上面提到的注意点更感兴趣, 而不是锤子和钉子. 在对工作科学研究的期间, 他还会花时间去检查钉子, 着色板和木材等的质量.
学习编程和学习编程语言有什么区别呢
程序设置系统只需指令它一次就可以自由运行. 我们每天都在做这件事情. 我们告诉我们的孩子, 士兵和顾客. 我们给予他们或者我们自己接受到给定的指令去自由 / 独立地生活. 比如, 您的父母不需要每天都关注你并且对你人生要走的下一步做指导. 他们本来可以在你生活的方方面面为你设定好.
很多学校和教育网站都会教你编程语言的语法. 他们会添加些设计模式(当你忽略设计的时候), 一些数学计算, 如何声明变量并使用它们, 数据类型以及如何声明 / 创建它们等的内容.
这些并不能教会你推理. 通过上面的途径, 你会学到些推理的方法, 但是过不了多久, 你会意识到自己浪费了或者花了很长时间去学习编程.
我们是通过编程解决问题, 而编程语言只是协助我们的工具. 编程语言就像一个个的工具盒, 我们称它们为框架. 它们帮助我们组织自己的想法.
如果你正在学习编程, 但是你还不能够设计并且编码出一个实实在在的应用, 那么说明你更多的是在学习编程语言而非编程.
有多少次我们碰到想知道怎么创建程序的人(程序员). 对于他们这些程序员来说, 创建程序就是解决一个问题. 他们在使用编程语言的时候就通过批判的分析解决了这个问题. 但是当你解决了这个问题, 你是可以使用多种编程语言去实现的. 我们以平方数为例. 某数的平方就是这个数字乘以本身. 我们可以用各种语言来实现它, 如下:
- # c
- function square(int * x) {
- return x * x;
- }
- # PHP
- function square ($x){
- return $x * $x;
- }
- # JavaScript
- function square(x){
- return x * x
- }
- # In Scheme (a Lisp dialect)
- (define (square x) (* x x))
以上, 你可以看到在实现的上面只有语法的不同, 结果是一样的. 这也是你可以使用任何语言, 这种语言使你轻松构建任何类型软件的一个重要原因.
通过编程发现语言更容易
问题通常是人类语言. 人类语言充满了限制和错误, 是不能用来指导机器工作的, 因为机器接收不到.
学习编程的时候, 你将学习一种新的术语和工具来帮助你编写逻辑方式, 这种逻辑方式是被计算机和其他程序员理解并且认同的.
通常, 你将从简单且类似人类语言的符号开始, 称之为伪代码. 它是从人类语言到计算机编程语言的良好过渡工具. 这通常为了防止你浪费时间在语言上面. 这样你可以关注在推理上面. 如此, 你会发现组成一个良好的编程工具 (语言) 的核心部分. 你了解什么才是正需要的, 了解编程语言的核心目标. 通过了解, 你会不知不觉下意识去学习这种语言了.
后话: 翻译得不好得地方还请看官指出, 欢迎多多交流 @~@! 原文 Learning programming is different from learning a programming language
来源: https://juejin.im/post/5bfff223e51d4510a36fd8fe