电脑编程好学不,学电脑编程好学吗( 二 )


为了更好理解 , 可以将学习编程类比为学习厨艺:你为了烧得一手好菜买了一些关于菜谱的书 , 如果你只是想为家人做菜 , 这会是一个不错的主意 , 你重复菜谱上的步骤也能做出不赖的菜肴 , 但是如果你有更大的野心 , 真的想在朋友面前露一手 , 做一些独一无二的美味佳肴 , 甚至成为「大厨」 , 你必须理解这些菜谱背后大师的想法 , 理解其中的理论 , 而不仅仅是一味地实践 。但是如果你每天唯一的工作就是阅读那些厚重的理论书籍 , 因为缺乏实践 , 你只会成为一个糟糕的厨子 , 甚至永远成为不了厨子 , 因为看了几天书后你就因为枯燥放弃了厨艺的学习 。
总之 , 编程是连接理论与实践的纽带 , 是计算机科学与计算机应用技术相交融的领域 。正确的编程学习方法应该是:通过自顶而下的探索与项目实践 , 获得编程直觉与推动力;从自底向上的打基础过程中 , 获得最重要的通用方法并巩固编程思想的理解 。
作为初学者 , 应以后者为主 , 前者为辅 。
启蒙
「学编程应该学哪门语言?」这经常是初学者问的第一个问题 , 但这是一个错误的问题 , 你最先考虑的问题应该是「哪些东西构成了编程学习的基础」?
编程知识的金字塔底部有三个关键的部分:
算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个 maxSoFar 变量 , 之后对于每个数…
语法:我怎样用某种编程语言表达这些算法 , 让计算机能够理解 。
系统基础:为什么 while(1) 时线程永远无法结束?为什么 int *foo() { int x = 0; return &x; } 是不可行的?
启蒙阶段的初学者若选择C语言作为第一门语言会很困难并且枯燥 , 这是因为他们被迫要同时学习这三个部分 , 在能做出东西前要花费很多时间 。
因此 , 为了尽量最小化「语法」与「系统基础」这两部分 , 建议使用 Python 作为学习的第一门语言 , 虽然Python对初学者很友好 , 但这并不意味着它只是一个「玩具」 , 在大型项目中你也能见到它强大而灵活的身影 。熟悉Python后 , 学习C语言是便是一个不错的选择了:学习C语言会帮助你以靠近底层的视角思考问题 , 并且在后期帮助你理解操作系统层级的一些原理 , 如果你只想成为一个普通(平庸)的开发者你可以不学习它 。
下面给出了一个可供参考的启蒙阶段导引 , 完成后你会在头脑中构建起一个整体框架 , 帮助你进行自顶向下的探索 。
完成 Codecademy 的 Python 部分 。这只是热身部分 , 尽快完成它 , 因为你永远只是在浏览器里 , 你不会学到如何搭建开发环境 。在 Codecademy 这类的编程学习网站学到的那点儿东西 , 哪怕你只想做一个小的不能再小的项目 , 你都不知道该从哪儿开始 。
完成 MIT 6.00.1x(中文化)(如果你英语不过关 , 完成麻省理工学院公开课:计算机科学及编程导论 。MOOC 是学习编程的一个有效途径 。虽然该课程的教学语言为Python , 但作为一门优秀的导论课 , 它强调学习计算机科学领域里的重要概念和范式 , 而不仅仅是教你特定的语言 。如果你不是科班生 , 这能让你在自学时开阔眼界;课程内容:计算概念 , python编程语言 , 一些简单的数据结构与算法 , 测试与调试 。支线任务:
完成Python核心编程
完成 Harvard CS50 (如果你英语不过关:完成哈佛大学公开课:计算机科学 cs50。同样是导论课 , 但这门课与MIT的导论课互补 。教学语言涉及 C, PHP, JavaScript + SQL, HTML + CSS , 内容的广度与深度十分合理 , 还能够了解到最新的一些科技成果 , 可以很好激发学习计算机的兴趣 。支线任务:
阅读《编码的奥秘》
完成《C语言编程》
[可选] 如果你的目标是成为一名 Hacker:阅读 Hacker's Delight
PS:如果教育对象还是一个孩子 , 以下的资源会很有帮助:
5-8岁: Turtle Academy
8-12岁:Python for Kids
12岁以上: MIT Scratch 或 KhanAcademy
入门
结束启蒙阶段后 , 初学者积累了一定的代码量 , 对编程也有了一定的了解 。这时你可能想去学一门具体的技术 , 诸如Web开发 , Android开发 , iOS开发什么的 , 你可以去尝试做一些尽可能简单的东西 , 给自己一些正反馈 , 补充自己的推动力 。但记住别深入 , 这些技术有无数的细节 , 将来会有时间去学习;同样的 , 这时候也别过于深入特定的框架和语言 , 现在是学习计算机科学通用基础知识的时候 , 不要试图去抄近路直接学你现在想学的东西 , 这是注定会失败的 。