石头经过高考后20天的思考,终于将自己的专业金融经济改成了计算机,这个决定由衷的让我一阵窃喜。从事了20多来年计算机出版和市场推广的我,看到象石头一样的少年,成为新一代程序员,心里非常自豪又能给下一代孩子们做学习计算机技术的引路人,推荐一些好书了。
对于刚高考完的孩子们,既然选择了计算机专业,这个暑假当然还是先好好玩玩,打游戏、学车、上网看各种电影和同学出去毕业旅游等等。
在休息娱乐之余,我建议孩子们选一门语言(推荐Python和JavaScript),网上找本完整的电子书或去京东当当买本纸书(同样我推荐图灵出版的Python基础教程和JS方面的书及人邮社计算机分社出版的几本Python和JS书都不错)。推荐这个网站,可以从零开始学python:https://docs.python.org/3/ 。
JavaScript现在已经无处不在了,可能会在你手机上的某个app里,在你浏览的网页里,在你IDE中的某个进程中运行的。自己照着搭建环境,对着书一个字一个字敲代码,运行,出问题自己解决,解决不了先谷歌,不行再来网上问,然后就可以编你想编的程序了,做个小软件运行起来找到成就感。等有了一定的编程经验,你就知道该进一步学什么了。以下这些前端技术书可以先入为主:
- Head First HTML and CSS
- HTML & CSS
- CSS 权威指南,CSS 禅意花园,精通 CSS
- JavaScript DOM编程艺术,JavaScript 高级程序设计,JavaScript 权威指南,JavaScript 模式
学习JS,可以参考这里的文章:http://limu.iteye.com/blog/1267475 。
如果想学PHP(python这样的类PHP语言), 那么下面是一个简单的思路,开始是学习HTML, 应该从页面入手, 自己体察细微变化, 再去研究什么是块元素, 什么是内联元素。做一些展示性的变化,可以学习CSS。CSS也不要上来就挨个介绍属性, 而是以完成展现任务为目的。
而后, 可以接触PHP, 做个简单留言板, 接触到PHP的一些东西和数据库相关东西。做一些用户注册、登录,理解Cookie和session是怎么回事. 在手写一些数据库操作函数以后, 选一个库开始使用。引入模板( php smarty 模板)的概念,简单的逻辑和展示分离。
这时候, 可以学习jQuery, 做些Ajax相关东西, 了解一下json,也应该重视代码质量了, 可以看看art of readable code之类的书,在有人引导的前提下, 可以看看开源项目等(drupal, zendframework, wordpress)。
从大一开始,跟着学校的通识课教学,自己从计算机这个学科体系里的基本知识入手,实践乃是第一必修课,参考http://www.udacity.com/ 和 https://www.coursera.org/ 的现有网上课程(包括很多计算机相关的基础课、中级乃至高级课程)同,这些网上课程非常丰富,在暑假可以抽着空学习一下。
计算机基础学科和数学基础课程
推荐看这里的课程,每周1天,6周就够, https://www.coursera.org/course/cs101 ,了解下计算机基本原理,懂点简单的编程,并具体实践操作,从实践中体验计算机的魅力。以下是新同学要学习的一些计算机基础课程:
- 编程语言(如C、C++、JAVA、python 等)
- 数学基础(一阶逻辑系统、集合论、图论、线性代数、微积分、概率论)
- 数据结构与算法
- 软件理论入门(形式语言、自动机)
- 体系结构(数字电路、CPU设计、操作系统、编译器、网络协议)
掌握一门常用的编程语言和编程技术:能了解你用过的所有的程序内部大致是怎样的,能用你熟悉的语言编写大部分的程序,至少不能是对任何一个程序满头雾水。
《C程序设计语言》(第2版新版)。原著即为C语言的设计者之一Dennis M.Ritchie和著名的计算机科学家Brian W.Kernighan合著的 一本介绍C语言的权威经典著作。 我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。
C++ Primer 中文版第四版和第五版。两个版本是因为 C++11 的变动相当巨大,谓之新语言不算过分,但是 C++11 的普及还需要相当的时间,看两个版本能知道什么是 C++11 新特性,也能看到语言发展。这本书读起来会给你耳目一新的感觉,前面有很小的篇幅介绍了C++的基本语法,后面会紧接着就贴合STL进行讲解。
JAVA最经典的书《Java编程思想》,一定要看一下,早一点接触大师的经典著作,起点就会高很多了。
数学类的课程如离散数学等一定要学好。无论是算法设计还是工程应用。线性代数和概率统计,同样重要,特别是线性代数体现了很多计算机的思维方式,相比于图论这些内容,离散数学更重要。当然先修高等数学是必不可少的,概率统计应该在高数学完后立刻学,不该拖到大三。线性代数,概率与统计和离散数学,这三门课是本科时期最重要的三门数学课,如果你想在计算机科学的道路上走远点,那这三门可是必修的。
- 高等数学:大一上下;
- 线性代数:大一上;
- 离散数学:大二上下,大三上;
- 概率统计:大三上
硬件类课程
- 数字逻辑设计:大二上;
- 数字逻辑设计实验:大二下;
- 微机原理,微机实验:大二下;
- 计算机体系结构和组成原理:大三上
深入理解计算机系统:这本书实在太重要了,太重要了,太重要了(重要的事说三遍)。本书构建了计算机的三观,让你知道计算机的底层实现,书中有相当的篇幅介绍处理器流水线结构,写得也很有意思,大一这学期就要看。
计算机体系结构这门课是理解计算机内部的构造,指令体系的设计,流水线以及硬软件接口,学完该课程应该能自己模拟一个CPU或者Cache,其中的成就感是无法描述的。这门课在UC Berkeley是大一学的,从理解课程的角度,大一学生完全没有问题的。
计算机组成原理,这是一门硬件基础课,学完后你能清楚的知道如何从用最简单的数字元件,最终构成整个计算机系统。
数据结构或算法导论
有了之前面课程基础,再学数据结构和算法相关的,就没那么抽象了,边学边实践,继续以项目实践为方法,从数学理论的角度比较系统的学习相关的经典理论,站在理论的高度上去理解计算机科学,并加于实践、深入。推荐这门课https://www.coursera.org/course/algo ,学这门课程同时结合C、Java或C++等语言来做项目,理论联系实践。
- 计算概论:大一上;
- 程序设计实习:大一下;
- 数据结构与算法:大二上;
- 数据结构与算法实习,大二上;
- 算法设计与方法:大二下
- 算法导论(MIT那本教材)
数据结构与算法分析by Weiss,相当好的算法和数据结构入门书,大一新生如果没学算法,请看这本书。学过一学期算法,也请看这本书。其实这本书侧重数据结构,代码风格有点老,但带新人入门是绝对没问题的。
MIT开设的《Introduction To algorithm》,中文版叫《算法导论》。数据结构仅仅是算法的一部分,国内的数据结构课程回避了很多本质的东西,仅仅是对一些常见的数据结构的罗列,学起来总有些不痛不痒的感觉。《Introduction To algorithm》虽然有些章节夹杂着很多很让人讨厌的“数学”,但却能从本质上带你领略这门十分必要而且有趣儿的课。
计算机网络、编译原理或操作系统
信息时代,互联网、移动互联网时代,学计算机要懂操作系统,要懂网络之间的通讯、协议,以实践为第一方法,通过项目实践来学习。
《计算机网络》重点推荐潘爱民翻译的Andrew S.Tanenbaum的这本,此书讲明白了网络之道,即计算机网络通信的主要原理;第二本是W.Richard Stevens的《TCP/IP详解卷一:协议》,此书讲明白了网络之术,即TCP/IP协议簇的工作过程;第三本是Douglas E.Comer的《计算机网络与因特网》,此书尝试在更广泛意义上解答“计算机网络和因特网是如何工作的”这一基本问题,解释了协议是如何使用硬件和应用是如何使用协议来满足用户的需求。
- 操作系统(原理和实现)
- 计算机网络(原理和协议栈实现)
- 编译原理(推荐使用:龙书,虎书)
- 编译实习
操作系统与编译原理:编译原理看上去很枯燥难懂,特别是对词法,语法的分析等。虽然将来只有一少部分人会从事这方面工作,但是对于你理解各种编程语言会获益匪浅,训练的是基本的素质和能力,一般学完这课之后,能够自己实现编译器。
操作系统可以说是《算法导论》的实验课,最好能在学习期间自己实现一个小型的操作系统,或者操作系统各分系统的Demo。编译原理可能是普遍本科生觉得难的一门课,但是作为CS本科生或者未来的软件科学家,这是基础中的基础,学完之后所有的语言在你看来应该没有太大的区别,这门课应该是离散数学+算法导论的实验课。
人工智能和机器学习
2016年是科技圈热闹的一年,AR、VR、人工智能、大数据…这些名词高频出现,不断刷爆朋友圈、微博、科技头条。人工智能的软硬件开源热潮、机器学习技术的进一步发展、无人机市场的逐步成熟、虚拟现实/增强现实的持续火热、谷歌量子计算机的重大进展等。然而许多人并未真正了解过这些”新“科技名词。
上海科技大学的虞晶怡(正)教授,主持领导建设计算机视觉与成像技术实验室(虞晶怡教授研究组)imaging science方向。推荐这个视频“我要制造像人眼一样的VR技术”,大家可以先做个了解。 http://v.qq.com/x/cover/ztfhaflplr7o77p/y0311jg7iq7.html
增强现实(Augmented Reality)是一个技术名词,将真实世界信息和虚拟世界信息“无缝”集成的新技术,真实的环境和虚拟的物体实时地叠加到了同一个画面或空间同时存在。
作为一种在现实世界叠加虚拟图像的技术形式,不脱离现实世界,从专业程度上讲,AR比娱乐性较强的VR更适合于工业实操、培训、维修制造、仓储物流、医疗等领域。
人工智能的技术代表是机器学习,把机器学习与人的工作协同起来,才属于是真正的人工智能,所以这也是增强现实技术在工业领域应用的意义所在。
推荐机器学习课https://www.coursera.org/course/ml ,通俗易懂,通过实践能收获很大的网上课程。继续强调实践动手(编程)能力,通过实践深入理解并掌握相关的理论知识。
- 机器学习、人工智能、机器学习导论
- 人工神经网络、调参实践
- 概率图模型:原理与技术 Probabilistic Graphical Models
概率图模型:原理与技术这门科(https://www.coursera.org/course/pgm ),不管你是做图像分割、语言识别、还是搞生物信息学的,都大大有益。当然,这门课程绝对不是浮躁的人能学得来的,课程作业保证你累死累活的,不过若能努力坚持并完成里面的编程、测试作业,那成就感不用说,学完后,你的计算机科学水平估计超过国内99%以上的学生,甚至超过许多国内计算机系的教授水平。走工业界的话,在大数据(海量数据)分析时代,你应该很容易、有很多机会大展身手。
还有几本经典的计算机畅销书,请大家一定收藏好,必读的好书。
最后一点小建议:
可以参考酷壳博主coolshell.cn陈皓叔叔(请左耳朵耗子同意用这样的称呼他的博客内容)所写的这篇经典文章:程序员技术练级攻略,去享受编程和技术所带来的快乐吧:http://coolshell.cn/articles/4990.html 。
我的作者July创业办了一个七月在线,他是CSDN人气第一博客“结构之法,算法之道”作者,免费的比如算法公开课看看:https://www.julyedu.com/video/play/17 ,实战coding直播(刷leetcode):https://www.julyedu.com/video/play/27 。
上面是一个普通程序员的书架,祝愿石头在上海科技大学计算机专业的学习道路上能坚持努力,不断学习,同样希望此篇文章给那些选择了计算机和软件工程专业的同学们提供一点选书的参考意见。祝孩子们未来学业有成!