我学习CS历程,也包含基础知识的总结以及编程实现的整理。
每一阶段里面, 都有很多个性化选项, 仅供参考
入门
夯实基础 你可以跳过这些而直接进入下面的进阶实践环节,并根据自己需要查漏补缺。 但是这些都是非常重要的基础,任何时候,只要有时间,就可以去学习了解。
进阶与实践
CS入门
现在的入门课基本都是用Python语言。
- 计算机科学导论,优达学城
- CS50x 哈佛,语言包括C,Python,SQL和JavaScript加CSS和HTML
- CMU 15213: Introduction to Computer Systems (ICS)
面向对象编程语言
一般而言,建议先学Java 或 Python,再学C++。 这三种语言都基本掌握后,再根据自身的职业需求,选择其中一个语言(或者其他语言)进一步深入练习。
面向初学者程序员的在线资源:
面向有经验的程序员的在线资源:
- 数据结构,伯克利大学 CS 61B,Java
- 计算机程序设计,Udacity,Python
- 抽象编程,斯坦福 CS106B,C ++, 最新作业 http://web.stanford.edu/class/cs106b/
- 《数据结构与算法分析:C++描述》, Mark A. Weiss
测试你的代码
了解如何捕获错误,创建测试和破解软件.
操作系统
- CMU 15213: Introduction to Computer Systems (ICS)
- CS162 UC Berkeley: Operating Systems and Systems Programming
逻辑推理和离散数学
计算理论
- Introduction to the theory of computation, Michael Sipser
计算机网络
- Computer Networking A Top-Down Approach, James F. Kurose, Keith W. Ross
数据库
- SQL
- A First Course in Database Systems, Jeffrey D. Ullman, Jennifer Widom
编译器
算法和数据结构
了解基本数据类型(堆栈,队列和袋子),排序算法(快速排序,合并,堆栈),数据结构(二叉搜索树,红黑树,哈希表)和Big O.
- 算法简介,麻省理工学院,2011秋季
- 算法,普林斯顿大学,Part1
- 算法,普林斯顿大学,Part2
- 算法:设计和分析,斯坦福大学
- 算法,第4版,by Robert Sedgewick and Kevin Wayne
分布式,并行和大数据
加密与区块链
安卓开发
iOS开发
网页开发
参与项目
- 尝试课堂以外的项目:创建和维护网站,构建自己的服务器或构建机器人。
- 参与大型系统(代码库)的一小部分,阅读并理解现有代码,跟踪文档和调试
- Version control with Git
- GitHub®:关注github热门开源项目的issue
- 与其他程序员一起工作
- 参与开源项目:
- 尝试提出一个issue
- 针对一个issue,尝试给出解决方案,并提交 pull request
- 参与公司实习
- 参与开源项目:
其他编程语言
根据实际需要自行选择一种或多种学习, 一些在线资源:
JavaScript
- Bento JavaScript Learning Track(Bento)
- Egghead.io
- 学习如何编程:JavaScript - Epicodus Inc.
- 学习:查询
CSS & HTML
- Bento CSS Learning Track(Bento)
- Bento HTML Learning Track(Bento)
- 用破折号建立个人网站
- 使用Webflow构建响应式网站
- 使用骨架构建SaaS着陆页
- 建立动态网站
- 在1小时内编写个人启动页面:实用HTML和CSS简介
- 学习如何编程:CSS - Epicodus Inc.
- 从头开始学习HTML5编程
Ruby
- 学习如何编程:Ruby - Epicodus Inc.
- RubyMonk - 交互式Ruby教程
Haskell
- C9:功能编程基础知识 - Erik Meijer
- CIS 194:Haskell简介 - Brent Yorgey
- CS240h:Haskell的功能系统 - Bryan O’Sullivan
- edX:功能编程简介 - Erik Meijer
- 亚琛大学:功能编程 - JürgenGiesl
Lua
PHP
- 学习如何编程:PHP - Epicodus Inc.
GO
参考资料
Guide to technical development from Google education OS Free Programming Books