计算机科学与技术(CS)专业学生该如何系统地自学?
目前cs专业大一学生,因为兴趣选择了这个专业,学校课程太少,唯一能上关于计算机的课程就是计算机导论,每天看着老师照着ppt念着一些笼统的概念,下学期才能学习c语言,我自己已经通过自学掌握了c语言的一些基础,所以我想通过自学更多更快地掌握专业知识,可不知道该从哪学起,经常刷知乎,看到许多我不懂的知识就会感到自己的无知,不知从何学起,周围的同学室友只会整天lol、玩手机,对比之下常对未来感到迷茫,希望有经验的前辈传授一些自学的步骤或经验。
题主你好,在大批前辈赶来为你指点迷津之前,我查阅了一下我校CS专业大一大二的课程。专业直接相关的方面列举如下,英语课、统计学课、物理课等未予收录。这些课程网易公开课,iTunes U,coursera,edX等等地方都有丰富的课程资源;每个方面也有各自的经典教材。希望能抛砖引玉,也助楼主一臂之力。
离散数学(基础的逻辑运算、集合等)
算法与数据结构 (无数次听前辈强调这是CS专业万变不离其宗的核心要义)
软件工程(开发软件的范式和方法)
计算机结构(了解从电路构成到 CPU 指令等底层的构造)
更多类型的语言(面向过程,面向对象,函数语言,脚本语言等)
操作系统
网络(主要是 TCP/IP 这套东西)
数据库
信息安全
图形图像,多媒体
以上这些方面都有涉猎之后,其他的CS专业知识基本上都建立于此基础之上了。我校的高年级课程基本上也都以以上列举的这些为前提要求。另外关键是要上手,刷出题目来/写出代码来,实践起来,切忌只看书不实践。
欢迎各位前辈、同学补充更多信息,靠谱的课程资源、经典书籍等。
以下是Berkeley的cs专业的一些必修课以及我个人认为很有必要的课,希望可以帮助你选择自己学习的方向:
1. 数学类:
微积分
线性代数
概率论
离散数学
2. CS类:
程序结构与理解 Structure and interpretation of computer programs
数据结构 Data structure
机器结构 Machine structures
算法 Algorithms
人工智能 Intro to AI
操作系统 Intro to OS
编译器 Intro to compiler
数据库 Database
安全 Intro to security
机器学习 Intro to ML
(以上排序并不是严格的从简入难,一些讲cs的不同分支的课完全可以混着顺序上
学习方式有很多,上网上丰富的公开课、自己看书、看名校这些课的视频,都是很棒的选择。
(至于很多人提到的语言:比较受认同的观点是不必要特别去学语言,以上的这些cs核心知识比单纯的语言更加有用。个人建议是在学习这些知识的过程中慢慢达到精通一两门语言,会用四五门。其余的需要再pick up就是了。
除此之外,根据我个人的一些简单的经验,我建议尽量在有系统地学习的同时,思考一下自己学习cs,除了满足求知欲和兴趣之外,想要达成什么样的追求。常见的一些,比方说:工作、科研、创业、投身于cs相关的一些公益组织、留学,等等。其实这些都是需要在学习之外付出很多额外的精力的。
毕竟大学里前进的道路远远不只是学习好知识这一个方面,做好人生下一步的规划并为之努力是更重要的一部分。如果现在还不确定想做什么,那就去尽可能多体验多了解一些吧。日后不断改变自己的目标不要紧,但一定要有个目标啊。
加油吧。
有问题请尽管回复,我很乐意帮忙。
同CS狗,年级较你稍高。
同一直自学,但一样认真上课,切勿以自学为借口而逃避上课。
而且,每个人有自己的选择,LOL是一种,电视剧也是一种,我们认真啃书编码同样也是一种生活方式。
首要放正心态,正视他人的选择,找到适合自己的环境学习,然后刚开始不求精,只求广,就是在各方面都应该懂些,这样才能更好的知道自己的兴趣所在。
然后确定方向,切记切记,既然选择了就一直走下去,不要随意被他人改变,贵在坚持
还有就是要充分利用资源,不只是书本和教学视频,博文等等,更重要的是当被一个难题困住之后要及时解决,比如向老师请教。
最难得的是时刻保持谦卑,渴望的心,keep fool,keep hungry!
手机码字,共勉
GitHub - open-source-society/computer-science: Path to a free self-taught education in Computer Science! 从数学到UX Designer, 都是各大MOOC平台上的免费课程
首先,为题主的态度点赞,记得我上大学那会光顾着玩游戏,没有为自己的职业好好规划一下。
作为一个过来人,我说说我的看法: 看样子楼主要走开发这条路了,这样的话不论考研与否,首先要打好基础,学校开设的课程如c语音,数据结构,离算数学,操作系统,组成原理,计算机网络等,相信我这些都很重要,如果不考研的话,大三大四多关注一下业界,看看自己感兴趣的方向,是嵌入式还是服务器亦或是前端,再做相应分涉猎,这个网上资料还是挺丰富的,做的这些我相信以后找个满意的工作还是挺轻松的。
最近做了一张关于计算机科学与技术专业课程的 Concept Map,发现可以从数学课程开始构建这个专业的知识体系,我删除了部分自己不感兴趣的课程(网络、数据库、游戏等),从而作出了如下的课程安排,以下学习顺序与大多数高校的课程设置有很大不同,也并不适合完全没有编程基础的同学自学,但非常适合有一定编程基础且想要系统掌握该学科知识体系的同学,从而做到知其然也知其所以然。以下安排完全偏向计算机科学方向(技术基本被忽略了…需要的同学可以自行补充相关领域的技术知识)。
集合论
- Set Theory [Kenneth Kunen]
- Set Theory [Thomas Jech]
- 集合论:对无穷概念的探索 [郝兆宽]
图论
- Graph Theory [Adrian Bondy, U. S. R. Murty]
- 图论 [王树禾]
数理逻辑
- Logic for Applications (应用逻辑) [Anil Nerode, Richard Shore]
- A Mathematical Introduction to Logic (数理逻辑) [Herbert B. Enderton]
- 数理逻辑 [汪芳庭]
电工电子学
- 电工学简明教程 [秦曾煌]
拓扑学
- Basic Topology (基础拓扑学) [M. A. Armstrong]
- Topology (拓扑学) [James R. Munkres]
组合学
- Discrete Mathematics and Its Applications (离散数学及其应用) [Kenneth H. Rosen]
- Introductory Combinatorics (组合数学) [Richard A. Brualdi]
- Concrete Mathematics : A Foundation for Computer Science (具体数学:计算机科学基础) [Ronald L. Graham, Donald E. Knuth, Oren Patashnik]
计算理论
- Introduction to the Theory of Computation (计算理论引导) [Michael Sipser]
数字逻辑电路
- 数字电路基础 [阎石]
形式语言与自动机
- An Introduction to Formal Languages and Automata (形式语言与自动机导论) [Peter Linz]
- Introduction to Automata Theory, Languages, and Computation (自动机理论、语言和计算导论) [John E. Hopcroft]
可计算性理论
- Computability and Logic (可计算性与数理逻辑) [George S. Boolos]
计算复杂性理论
- Computational Complexity : A Modern Approach [Sanjeev Arora, Boaz Barak]
计算机组成原理
- Computer Organization and Design : The Hardware/Software Interface (计算机组成与设计:硬件/软件接口) [David A. Patterson, John L. Hennessy]
形式语用学
- Programming Language Pragmatics (程序设计语言:实践之路) [Michael L. Scott]
形式语义学
- The Formal Semantics of Programmin (程序设计语言的形式语义) [Glynn Winskel]
编译原理
- Compilers, Principles, Techniques and Tools (编译原理) [Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman]
- Modern Compiler Implementation in C (现代编译原理:C 语言描述) [Andrew W. Appel]
- Advanced Compiler Design and Implementation (高级编译器设计与实现) [Steven S. Muchnick]
微机原理
- 微机原理与接口技术 [孟虎]
计算机体系结构
- Computer Architecture : A Quantitative Approach (计算机体系结构:量化研究方法) [John L. Hennessy, David A. Patterson]
程序设计语言
- Thinking in Java (Java 编程思想) [Bruce Eckel]
- CLR via C# [Jeffrey Richter]
- The C Programming Language (C 程序设计语言) [Brian W. Kernighan]
- The Standard C Library (C 标准库) [P. J. Plauge]
- C Programming : A Modern Approach (C 语言程序设计:现代方法) [K. N. King]
- C Interfaces and Implementations : Techniques for Creating Reusable Software (C 语言接口与实现) [David R. Hanson]
- C++ Primer [Stanley B. Lippman]
- The C++ Programming Language (C++ 程序设计语言) [Bjarne Stroustrup]
- The C++ Standard Library : A Tutorial and Reference (C++ 标准库) [Nicolai M. Josuttis]
- STL 源码剖析 [侯捷]
- Effective C++ [Scott Meyers]
- More Effective C++ [Scott Meyers]
- Effective STL [Scott Meyers]
- Effective Modern C++ [Scott Meyers]
- Inside the C++ Object Model (深度探索 C++ 对象模型) [Stanley B. Lippman]
- Modern C++ Design : Generic Programming and Design Patterns Applied (C++ 设计新思维) [Andrei Alexandrescu]
- Python Cookbook [Alex Martelli]
- The Python Standard Library by Example (Python 标准库) [Doug Hellmann]
- Python 源码剖析 [陈儒]
数据结构与算法
- Introduction to Algorithms (算法导论) [Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein]
- The Art of Computer Programming (计算机程序设计艺术) [Donald E. Knuth]
- Data Structures and Algorithm Analysis in C++ (数据结构与算法分析:C++ 语言描述) [Mark Allen Weiss]
算法分析与设计
- Introduction to the Design and Analysis of Algorithms (算法设计与分析基础) [Anany Levitin]
- Algorithmic Puzzles (算法谜题) [Anany Levitin, Maria Levitin]
汇编语言
- 汇编语言 [王爽]
操作系统
- Modern Operating System (现代操作系统) [Andrew S. Tanenbaum]
- Operating Systems : Internals and Design Principles (操作系统:精髓与设计原理) [William Stallings]
- Understanding the Linux Kernel (深入理解 Linux 内核) [Daniel P. Bovet, Marco Cesati]
- Linux Kernel Development (Linux 内核设计与实现) [Robert Love]
- Programming Applications for Microsoft Windows (Windows 核心编程) [Jeffrey Richter]
线性代数
- 线性代数 [李尚志]
- 高等代数简明教程 [蓝以中]
- Linear Algebra Done Right (线性代数应该这样学) [Sheldon Axler]
- Introduction to Linear Algebra (线性代数导论) [Serge Lang]
- Linear Algebra and Its Applications (线性代数及其应用) [David C. Lay]
- Introduction to Linear Algebra [Gilbert Strang]
- Linear Algebra and Its Applications [Gilbert Strang]
数学分析
- 简明微积分 [龚昇]
- 数学分析新讲 [张筑生]
- Thomas’ Calculus (托马斯微积分) [George B. Thomas]
- 数学分析 [卓里奇]
- 数学分析习题集 [吉米多维奇]
- Mathematical Analysis (数学分析) [Tom M. Apostol]
- Mathematical Analysis [Vladimir A. Zorich]
- Principles of Mathematical Analysis (数学分析原理) [Walter Rudin]
概率论
- A First Course in Probability (概率论基础教程) [Sheldon M. Ross]
- An Introduction to Probability Theory and Its Applications (概率论及其应用) [William Feller]
- 概率论 [苏淳]
数理统计
- 概率论与数理统计 [陈希孺]
- 数理统计学简史 [陈希孺]
- 数理统计学教程 [陈希孺]
- Introduction to Mathematical Statistics (数理统计学导论) [Robert V. Hogg, Allen T. Craig, Joseph W. McKean]
- All of Statistics (统计学完全教程) [Larry Wasserman]
- 数理统计 [韦来生]
矩阵论
- 线性代数与矩阵论 [许以超]
- 矩阵论 [方保镕]
- Matrix Analysis (矩阵分析) [Roger A. Horn]
常微分方程
- 常微分方程 [阿诺尔德]
实变函数
- 实变函数论 [那汤松]
复变函数
- 复变函数 [严镇军]
- 复变函数论方法 [拉夫连季耶夫, 沙巴特]
随机过程
- 随机过程 [伊藤·清]
- Stochastic Processes (随机过程) [Sheldon M. Ross]
- Introduction to Probability Models (应用随机过程:概率模型导论) [Sheldon M. Ross]
回归分析
- 回归分析 [谢宇]
运筹学
- Introduction to Operations Research (运筹学导论) [Frederick S. Hillier]
偏微分方程
- Basic Partial Differential Equations (基础偏微分方程) [David Bleecker]
- Partial Differential Equations [Lawrence C. Evans]
实分析
- 陶哲轩实分析 [陶哲轩]
- Real Analysis [Halsey L. Royden]
- Real Analysis : Measure Theory, Integration, and Hilbert Spaces [Elias M. Stein, Rami Shakarchi]
复分析
- 简明复分析 [龚昇]
- Complex Analysis (复分析) [Lars V. Ahlfors]
- Complex Analysis [Elias M. Stein]
数值分析
- Numerical Analysis (数值分析) [Timothy Sauer]
最优化理论
- 最优化理论与方法 [袁亚湘]
- 最优化理论与算法 [陈宝林]
- 非线性优化计算方法 [袁亚湘]
- Nonlinear Programming (非线性规划) [Dimitri P. Bertsekas]
- Convex Optimization (凸优化) [Stephen Boyd, Lieven Vandenberghe]
- Numerical Optimization (数值最优化) [Jorge Nocedal, Stephen Wright]
多元统计分析
- 多元统计分析 [王静龙]
- 实用多元统计分析 [管宇]
- Applied Multivariate Statistical Analysis (实用多元统计分析) [Richard A. Johnson]
泛函分析
- 实变函数论与泛函分析 [夏道行, 吴卓人, 严绍宗, 舒五昌]
- Introductory Functional Analysis with Applications [Erwin Kreyszig]
- Functional Analysis (泛函分析) [Walter Rudin]
测度论
- 测度论讲义 [严加安]
- Measure Theory (测度论) [Paul R. Halmos]
数学模型
- Mathematical Modeling (数学建模方法与分析) [Mark M. Meerschaert]
- A First Course in Mathematical Modeling (数学建模) [Frank R. Giordano, William P. Fox, Maurice D. Weir]
机器学习
- 机器学习 [周志华]
- Computational Intelligence : An introduction (计算智能导论) [Andries P. Engelbrecht]
- 统计学习方法 [李航]
- The Nature of Statistical Learning Theory (统计学习理论的本质) [Vladimir N. Vapnik]
- 支持向量机:理论、算法与拓展 [邓乃扬, 田英杰]
- Machine Learning (机器学习) [Tom M. Mitchell]
- Machine Learning in Action (机器学习实战) [Peter Harrington]
- Pattern Classification (模式分类) [Richard O. Duda]
- Pattern Recognition And Machine Learning [Christopher M. Bishop]
- The Elements of Statistical Learning [Trevor Hastie, Robert Tibshirani, Jerome Friedman]
- Machine Learning : A Probabilistic Perspective [Kevin P. Murphy]
- Probabilistic Graphical Models : Principles and Techniques (概率图模型:原理与技术) [Daphne Koller, Nir Friedman]
电路分析
- 电路原理 [江缉光, 刘秀成]
- Introductory Circuit Analysis (电路分析导论) [Robert L. Boylestad]
信号与系统
- 信号与系统 [郑君里]
- Signals and Systems (信号与系统) [Alan V. Oppenheim, Alan S. Willsky]
数字信号处理
- 数字信号处理:理论、算法与实现 [胡广书]
- Digital Signal Processing : A Practical Guide for Engineers and Scientists (实用数字信号处理:从原理到应用) [Steven W. Smith]
- Discrete-Time Signal Processing (离散时间信号处理) [Alan V. Oppenheim, Ronald W. Schafer, John R. Buck]
数字图像处理
- Digital Image Processing (数字图像处理) [Kenneth R. Castlema]
- Digital Image Processing (数字图像处理) [Rafael C. Gonzalez, Richard E. Woods]
计算机图形学
- The Nature of Code (代码本色:用编程模拟自然系统) [Daniel Shiffman]
- Fundamentals of Computer Graphics (计算机图形学) [Peter Shirley, Michael Ashikhmin, Steve Marschner]
- Computer Graphics : Principles and Practice in C (计算机图形学原理及实践:C 语言描述) [James D. Foley, Andries van Dam, Steven K. Feiner, John F. Hughes]
- Physically Based Rendering [Matt Pharr, Greg Humphreys]
- OpenGL Programming Guide (OpenGL 编程指南) [Dave Shreiner]
认知神经科学
- Principles of Neural Science (神经科学原理) [Eric R. Kandel]
- Cognitive Neuroscience : The Biology of the Mind (认知神经科学:关于心智的生物学) [Michael S. Gazzaniga, Richard B. Ivry, George R. Mangun]
- The Quest for Consciousness : A Neurobiological Approach (意识探秘:意识的神经生物学研究) [Christof Koch]
- Theoretical Neuroscience : Computational and Mathematical Modeling of Neural Systems [Peter Dayan, Laurence F. Abbott]
- 视觉信息处理的脑机制 [寿天德]
- Neuronal Dynamics : From single neurons to networks and models of cognition [Wulfram Gerstner, Werner M. Kistler, Richard Naud, Liam Paninski]
神经网络
- Neural Networks : A Comprehensive Foundation (神经网络原理) [Simon O. Haykin]
- Neural Networks and Learning Machines (神经网络与机器学习) [Simon O. Haykin]
- Neural Networks for Applied Sciences and Engineering (神经网络在应用科学和工程中的应用) [Sandhya Samarasinghe]
- Neural Network Design (神经网络设计) [Martin T. Hagan]
- Parallel Distributed Processing [David E. Rumelhart, James L. McClelland]
- Deep Learning [Ian Goodfellow, Yoshua Bengio, Aaron Courville]
- Learning Deep Architectures for AI [Yoshua Bengio]
计算机视觉
- Concise Computer Vision : An Introduction into Theory and Algorithms [Reinhard Klette]
- Computer Vision : A Modern Approach (计算机视觉:一种现代方法) [David A. Forsyth, Jean Ponce]
- Computer Vision : Algorithms and Applications (计算机视觉:算法与应用) [Richard Szeliski]
- Multiple View Geometry in Computer Vision (计算机视觉中的多视图几何) [Richard Hartley]
- 计算机视觉中的数学方法 [吴福朝]
- Learning OpenCV : Computer Vision with the OpenCV Library (学习 OpenCV) [Gary Bradski, Adrian Kaebler]
其他
- Code : The Hidden Language of Computer Hardware and Software (编码:隐匿在计算机软硬件背后的语言) [Charles Petzold]
- Computer Science : An Overview (计算机科学概论) [J. Glenn *shear]
- Structure and Interpretation of Computer Programs (计算机程序的构造和解释) [Harold Abelson, Gerald Jay Sussman, Julie Sussman]
- Computer Systems : A Programmer’s Perspective (深入理解计算机系统) [Randal E. Bryant]
- Artificial Intelligence : A Modern Approach (人工智能:一种现代方法) [Stuart J. Russell, Peter Norvig]
- On Intelligence (人工智能的未来) [Jeff Hawkins, Sandra Blakeslee]
- Introduction to Data Mining (数据挖掘导论) [Pang-Ning Tan, Michael Steinbach, Vipin Kumar]
- Refactoring : Improving the Design of Existing Code (重构:改善既有代码的设计) [Martin Fowler]
- CUDA by Example : An Introduction to General-Purpose GPU Programming (GPU 高性能编程 CUDA 实战) [Jason Sanders, Edward Kandrot]
- The CUDA Handbook : A Comprehensive Guide to GPU Programming (CUDA 专家手册:GPU 编程权威指南) [Nicholas Wilt]
今年已经大三了,对于cs还是有一些体会的。
我曾经问过我的老师一个问题:cs的核心是什么,学习的重点应该放在哪里?他没有马上回答我,而是反问了一个问题:什么是计算机这碗饭的核心,什么知识使得你和电子、电气、自动化、软件这些专业的同学不一样?当然,也必须是 高等职业技术学院 之外的东西?
题主,现在我已经有了我的答案,这个问题我也送给你,希望你能够想一想。
我看了一下我们的培养计划,把大一大二我觉得比较重要的课程挑出来,供参考。
数学类:线性代数,微积分,离散数学(这是我觉得数学类里面最重要的)还有概率论与数理统计。觉得数学类的自学主要还是做题,先看书,然后做题,做题不会了再回去看书,然后再回头做题。
语言类:我们是用Python入门的,我个人也觉得Python比较容易上手,我觉得开始学习的时候Python太高级的特性不用去了解,了解一些基础的工具就可以,然后开始动手写代码,做到能够编写一些简单的程序,在其中加深了解函数,数组,列表等的用法。然后再学C语言,主要再加深对于数组,字符串,指针的理解。最后过渡到C++,深入了解一下面向对象,类,继承这些概念,然后用C++大量的练习代码(主要指数据结构和算法),然后可以再回过头看Python的高级特性。我觉得在本科阶段能够熟练使用C++和Python就足够了。
计算机专业课程类:数据结构,算法(这两个我觉得是最重要的),还有计算机组成原理。自学的方式:练题,把你学到看到的数据结构和算法全都实现一遍,同时也练编程语言和思维。
其实在实际编程的过程里面我说的那些数学类除了离散数学其他的用到的并不多,但是如果想在计算机方面有一些发展,那么我建议还是要打好数学的基础。
然后,不要只是看,一定要动手写,只有在实际动手的时候才会注意到一些细节,印象也更深刻。
有了问题要学会去搜索,争取自己找到解决问题的方法,快速定位问题也是能力。
网易云课堂上面有一些我上面提到的课程,我看过一些,也上过一些老师的课,希望题主能够利用上。(王宏志老师的算法课非常好,而且内容比我们上课时还多一些)
有什么问题也可以私信我,如果能提供帮助我也非常愿意,毕竟原来也走了很多弯路。
原来也有一个和你情况差不多的,我也说了好多,然后发现根本执行不下去,可能你们的学校内环境也不太好,怎么样坚持住自己的想法就变得尤其重要,希望你能成功。
最后说了这么多,也只是建议,而已,仅此而已。实际去做的时候说到底还是只能靠你自己,外界能够提供的帮助有限,非常有限。资源遍地都是,相信你也能找到更好的。执行才是最根本的问题。所以少想多做吧少年,只有动手的时候思路才会更开阔。
以上。
补一句个人意见也是请教大家的一个问题
我就是照这个搞得,我个人认为这个书单在保证最简的模式下涵盖了全部计算机的核心知识,而且恰都是实用且通用的。希望有前辈看后也能顺便指出我的知识结构中的漏洞。
——————
楼上的前辈们给的路线都是偏向工程的。
我可以给你推荐一个我亲自用过的书单,私认为很适合“计算机科学”这个专业的修行体系。如果你想省心的话,以下是最简模式。
第0层:理工基础
《数学复习全书》数一 《英语六级》
第一层:
《离散数学及其应用》《计算理论导引》
第二层:
《软件设计师教程》第四版
第三层:
《算法》||《算法导论》
if cpp
《数据结构算法与应用cpp语言描述》
第四层:(具体工程类)
《软件体系结构设计》等等。
对于普通大学生我非常建议以考带学,因为考试本身带给你一直继续的动力,目标明确,考察结构合理清晰,但不要为了考试而考试。
ps:第0层是一个理工类学生的基本素养,
英语几乎算是计算机的专业课了,此外数一中的前二者基本是现代数学体系的开始(分析与代数)而概率则是现代科学解决许多问题的根本原理。
第一层则是一个cs方向的基本理论素养,离散中已经涵盖了数门学科,如果有兴趣的话可以再单独掌握《组合数学》一些《运筹学》知识,就构成了完善的通用计算机科学基础。
第二层是cs的一个实用基础,特别是面对现代计算机工程领域的一个精简,推荐你另外考计算机四级数据库方向和ccna,这三个方向很重要是因为他基本代表了数据的存储(数据库)处理(计算机)和传输(网络),是每个cser都应该掌握的核心线。
第三层则是软件构建层面的部分,工程的基础部分,算法。
第四层则是工程的具体部分软工,软件体系结构,设计模式等等,自行决定具体便好
手机打字,见谅
下边也补一句
这个书单的另一个好处就是你三年搞完了还多出了考研能力,一个国家中级职称(工程师),一个四级计算机证,一个六级英语证,一个ccna证。基本本科找工作把这些证摔出去对大多数公司也是很强的说服力了
我想这张图应该对题主有用:
>
这是网易公开课的学习路径图,对哪个感兴趣就去学吧,计算机的很多知识都是相互关联的,不用纠结切入点,随便选一个,最后都能连成网。
我说一下我上过的课程顺序吧。
大一上:
c语言,高数上,线性代数
大一下:
c++,数字逻辑,高数下,汇编语言,概率论和数理统计
大二上:
java,数据结构,计算机组成原理,离散数学上
大二下:
操作系统原理,编译原理,软件工程概论,离散数学下,UML
大三上:
XML,数值分析,嵌入式操作系统(linux,android),J2EE,数据库系统原理,软件测试,云计算
大三下:
计算机网络基础,软件体系结构,多媒体技术,移动互联网应用开发技术,软件体统分析和设计,计算机视觉,VC++程序设计
有些是选修课,仅供参考
先把语言基础打好,c的话可以看 the c programing language和c primer plus,至少掌握一门面向对象语言,然后学离散数学,数据结构与算法。以后可以上操作系统,数据库,计算机网络,不要在大一时候学太多商业化技术(比如说web开发,app开发),虽然很容易激发兴趣,但是以后很可能会发现自己浪费了很多时间在写白菜代码。基础是万年不变的硬道理。基础扎实了学啥不容易?
1.学好英语
2.刷完伯克利61A 61B 61C,推荐再看看龙书
3.刷完leetcode
到这步差不多也知道要学什么更细的方向了
Ps:编程实践及其重要,每一个知识点都一定要编程实现一下,可以动手写一个操作系统、编译器之类的对整个计算机体系结构理解会加深很多,千万不要只看书
好多课程,比如说coursera,还有一大堆国际名校课程,比如说cs61a,还有网易云课堂,挺好的,
想做程序员的行政管理本科生
我也大一,这是我从一本书里截的图,希望能帮到你。
作者用类似金字塔的结构体现了本科四年的课程体系。电路和数学是基础,然后是各种数据结构、语言、组原、操作系统等等。
然后……其实我也很糊涂,,,Orz。还是看图吧,按这个学肯定没问题……就是太多
执行力特别重要!!!!!!
我只是来推荐些书的
有趣的科普(故事)书:
《世界是数字的》 《浪潮之巅》
《黑客与画家》 《线上幽灵》(这本纯属故事书~没什么科普,但是了解了社工的帅气)
轻松的科普书:
《编码》《程序员的数学》
科普书:
《C程序设计语言》《C Primer plus》
嗯,暂时就这些都是我看完了的,或者正在看的~
其实学计算机感觉自学能力和找资源的能力比较重要啦~几本几本都是次要的~
慕课也是一个不错的自学网站。
:转自知乎