我们不仅是程序员,而且是个(与时俱进的)学习者。鲜见的是有多少人认为他们是在学习编程的呢。原翻译传送门is here

你可能在学习编程语言而不是编程本身

别对学习计算机科学(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

【译】需要学习的是编程,而不是编程语言相关推荐

  1. 你应当如何学习C++(以及编程)(rev#1)

    你应当如何学习C++(以及编程)(rev#1) By 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) JavaScript是世界上最受误解的语言,其实 ...

  2. 初学者,你应当如何学习C++以及编程-转

    Javascript是世界上最受误解的语言,其实C++何尝不是.坊间流传的错误的C++学习方法一抓就是一大把.我自己在学习C++的过程中也走了许多弯路,浪费了不少时间. 为什么会存在这么多错误认识?原 ...

  3. 你应当如何学习C++(以及编程)

    你应当如何学习C++(以及编程)(rev#1) By 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) Javascript是世界上最受误解的语言,其实 ...

  4. python网络编程要学吗_总算发现如何学习python网络编程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  5. 学习C/C++编程有什么条件,没基础能学C++开发吗?来了解一下吧!

    最近指导初学编程的小伙伴学习C/C++编程,但是在学习的过程中有小伙伴询问了不少的问题,下面小编就和大家分享一下学习C/C++编程有什么条件以及没有基础能否学习C++软件开发. 相信大家在学习编程之时 ...

  6. 从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用

    从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用 原文地址:http://blog.yundiantech.com/?log=blog&id=10 前面介绍了使用F ...

  7. 初学者值得一看:什么是编程/C语言,编程学习建议,编程解疑与误区注意

    文章目录 :star: 初学者值得一看:什么是编程/C语言,编程学习建议,编程解疑与误区注意 1.什么是编程语言 2.什么是C语言与我的强烈建议 - 先学C,而不是c++,java等 3.C语言的发展 ...

  8. 启发国内学子学习少儿机器人编程教育

    近几年,少儿编程十分火热,作为人工智能时代的新兴科目,少儿编程成为许多家长提升孩子思维与能力不二之选."双减"意见落地,除教培行业外,也受到了家长们的热切关注.我们都知道,&quo ...

  9. 学习(Java Web)编程技术要点及方向; 完成项目的要决

    本文亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理. 要Jar, 不要War:以小为主,以简为宝,集堆而成. 去繁取简 Spring Boot,明日之春. 集堆综合技术如 jHipster ...

  10. 读刘未鹏老大《你应当怎样学习C++(以及编程)》

    标签(空格分隔): 三省吾身 原文地址:你应当怎样学习C++(以及编程) 本人反思自己这些年在学校学得稀里糊涂半灌水. 看到这篇文章,感觉收获不少.仿佛有指明自己道路的感觉,当然真正困难的还是坚持学习 ...

最新文章

  1. Re: 求助:5道算法题
  2. ai怎么画循环曲线_AI插画设计,用AI制作一个只可爱的短腿柯基插画
  3. Java状态模式实现工作流_关于使用“状态模式”做工作流概要。
  4. html background缩放,background-size使用详解
  5. [渝粤教育] 广东-国家-开放大学 10259k2_经济学基础_21秋考试
  6. 【项目管理】管理良好沟通
  7. 微信小程序 【笔记003】小程序的事件处理
  8. js实现sleep休眠
  9. linux sort命令 性能,Linux sort 命令简单使用
  10. SpringBoot-从入门到放弃(二) 开发环境的搭建
  11. 什么软件能解答c语言的题,C语言课本习题及解答.pdf
  12. commons-fileupload文件上传
  13. linux 挂载windows共享目录 is not a valid block device
  14. Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单标识符
  15. vs2015编译ffmpeg
  16. eps如何建立立体白模_EPS 三维测图系统(垂直摄影)快速入门手册.pdf
  17. java script特效_javascript 常用特效(40种)
  18. Ubuntu完美安装QQ
  19. 宾馆如何实现WiFi无线上网短信认证?
  20. 安全需求可划分为物理安全、网络安全、系统安全和应用安全,下面的安全需求中属于系统安全的是(67),属于应用安全的是(68)。...

热门文章

  1. INDEX FULL SCAN和INDEX FAST FULL SCAN的区别
  2. HDU_1087-Super Jumping! Jumping! Jumping!
  3. SSRS配置2:加密管理
  4. 解决push的时候有时候会卡一下的问题
  5. Java配置环境变量及其意义
  6. STL与泛型编程(1)---模板
  7. ASP.NET之对称算法加密
  8. 祝贺中国队夺得第十届苏迪曼杯冠军!
  9. 使用redisson时关于订阅数的问题
  10. 在线预览任务调度的实现