极客晨星,专注6-16岁少儿编程教育.
《动手玩转Scratch Jr编程》,这本教材里面的讲解十分生动,很受孩子们的欢迎。
还有《父与子的编程之旅——与小卡特一起学 Python》这本教材用很多形象的卡通来解释抽象的概念,非常深入浅出,不过本这教材后面稍微有些深奥,比较适合大一点的孩子。
编程的本质是编写(广义上的)计算机可执行的指令(集合)。现在“编程”被集中在“软件工程”的需求中,产生的一个结果就是“工程化”,而“工程化”就是整个生产体系开始逐步分化以及逐步专业化,从而出现了这个领域中的各种针对性专业,比如“前端工程师”、“测试工程师”、“算法分析师”、“.NET软件工程师”。回到学习上,就变得很明确了。开发的需求需要各种技能,各种技能都是相关的,而一个项目所需要的技术在一定期限内是大致有限的。
以下是开发需要掌握的知识技能:嵌入式、架构、网络等 -> C;计算机视觉、机器学习 -> Matlab, Python;计算机图形学 -> C++;计算生物 -> perl;网站后端 -> perl, python, ruby, php, scala;编程语言 -> haskell;软件分析 -> java,C++
编程需要熟悉以下东西,可以边学边做,定期训练,经常思考,长期积累:语法。
基础理论(数学、数据结构、算法等)。
设计方法(编程原则、设计模式、框架设计等)。
库(核心、基础、UI、扩展、游戏引擎等)。
计算机相关(操作系统、网络、图形学等)。
领域知识(游戏设计、网站设计等)。
开发工具(编辑器、IDE、自动部署等)。
项目管理(进度管理、分工协作、Bug管理、版本控制等)。
最普遍也是最重要的能力:创造力。
具体的学习建议上而下地给出学习建议:那么我的建议是两个选择:
1.从C语言开始,然后学习算法,走科班路线,书籍的推荐的话:首先推荐《C Prime Plus》第五版,当C作语言的入门,这是一门面向过程的语言。看完指针那章后打住,思考下是想和哪方面接触:
(1).如果选择和软件层打交道,就要和面向对象语言打交道,推荐Java入门,第一本书看《 Java程序设计语言 》,然后看《数据结构与算法 Java描述》,然后再看《Java编程思想》,最后看《算法导论》。感觉有所领悟了,就去学针对你的其他语言吧。
(2).如果继续和底层打交道,那么继续看《C Prime Plus》,然后看《数据结构与算法C描述》。
2.从网页制作开始,然后学习网站工程,走产品路线,这是产品中最好入门
一个学习的误区与结果有句名言,“最好的程序员和最差的产出差n倍”。计算机科学基本上是由数学和机械类学科衍生而来,最大的特征就是两道门槛:能不能做出来、这个方法(算法或者设计)效率有多高。所以钻研是一种必要的学习习惯。
不必太担心学错,因为要到达工程的级别,你学过的八成知识都不会被作为工具使用,而它们的只是实现了它们的历史使命——成为你现有某个实用知识的中间点/桥梁、为你以后的学习效率做了一次铺垫。实际一点地说,对于一个“毕业了”的程序员,学习一门新的编程语言,可能只需一周,而熟悉需要三周,熟练地用于开发是三个月,精通只需一年。这也是大概而已,严谨地说,不同的语言所关联的知识点的数量是不一样的。这也不影响举例,因为在这之前,一个大学生在学习他们的第一门语言,通常是C/C++,用了一个学期,还可能挂科呢。别想速成。这要能速成,那么专业人士不就该喝西北风去了?
最后重申的一点,就是软件开发本身就是一个学习的过程,只是产出的代码具备不同的价值而已。软件的特殊性已经导致了难以重复地写出两段相同的代码,一般只会改写重写,或者重用原来的代码(就是复制、黏贴或者引用、调用)。