本帖最后由 wjl 于 2013-5-25 16:27 编辑 写在前面的话 写点东西给学弟学妹吧,本来这篇帖子是发在csdn的,但是仔细想想,还是在我们自己的软院平台发一份吧。算是给学弟学妹做点事情。下面的书单是是我今天花了大半天的时间整理出来的,90%以上的书籍都自己验证过的,确实是好书。而且我们软院也都有对应的课程。文章中提到的书籍我觉得都是很经典的,但是有一部分被大家忽略的好书。比如下文提到的“sicp”,“how to design program","编码”等等。 既然都来软院网了,肯定要结合咱们软院的实际情况说上几句。 我心目中的软院: 当初自己也是名落孙山,幸好科大收留。对科大是心存感激。来科大的学生绝大部分都是调剂过来的,而且一般都是考名校被刷调剂的。以我自己和身边的同学为例。暑假补课的室友加上现在实习时的室友一共六个人一志愿分别是 科大cs、复旦cs,上交(非cs),清华cs,北大(非cs)刷下来的。后来成功调剂科大软院,我不觉得科大生源有问题。这一年很多人特别是非计算机专业的同学进步都是非常神速的,这得益于科大软院(suzhou)这边的课程设置,非常有利于跨考过来的学生。既来之则安之,好好学习,这一年你会学到很多。科大软院有非常好的资源,很多人在抱怨科大软院招这么多人,如果有这种想法,那你就大错特错了。你不觉得这是别人不可比拟的吗?以后自己工作、创业、立足社会的时候。你会发现校友的资源还是很重要的。我们软院每年大概500+的学生,将来在社会上很多行业特别是it行业都会有我们的校友同学,那个时候你就体会到这种得天独厚的优势了。 那些让我印象深刻的课程: 1.cmu的著名课程 "CSAPP",中文名全称是《深入理解计算机系统》,对于这门课用再多的溢美之词都不为过。特别是这门课的实验,非常的棒。最著名的要数“二进制炸弹”了,如果来科大你不选这门课,不做这门课的实验,我觉得你就白来了。 2.保健哥的课一定得听,我们11级的时候保健哥一共开设了三门课“信息安全”,“形式化方法“,”编译工程“。我选了”信息安全“、”编译工程。“形式化方法”为旁听,听保健哥讲课是一种享受。当然课后也非常的痛苦,比如上“编译工程”课的时候看“龙书”看的都快吐了。这些课信息量都挺大的,会学到很多东西。“函数式”编程就是从保健哥的课上听来的。 3.外教Alexander的数据挖掘,这门课让我印象深刻绝对不是这门课挂了很多人。这是一门非常有趣、有挑战性的课程。之所以说它有趣是因为其内容,这门课其实讲了很多“机器学习”的内容,说它具有挑战性是因为是全英文授课,而且数学要求较高。但是现在学弟学妹们莫怕,我在下面的书单中列出了很多优秀的参考书,以及视频大家学起来会轻松很多。(ps:把你们考研用的那些数学书扔了吧!) 后悔没选的课: 随机过程,我后悔没有选随机过程。我非常不明白为什么12级的同学没有足够的人选这门课以至于停开?(我是听说,求证)如果这是真的,我只能说你们太不识货了。当然这个也可能和我的个人经历有关。 我在科大选的课: 基础英语、实用英语 自然辨证法离散数学、算法分析与设计、形式化方法(旁听) 编译工程、并行计算、信息安全、数据挖掘 linux内核分析、程序设计与计算机系统(就是上文提到的csapp) 网络程序设计、javaee(全称忘了) 先就不对每门课展开分析了。日后有机会再写吧。 在软院作业自己写、实验自己做考试就不会挂科。我个人认为软院最大的特色就是课程的实验多而且质量好,一定要自己做,否则你这门课就白选了。 13级别的学弟学妹们现在你们似乎应该好好学一门编程语言吧。特别是暑假要来补课的同学,好好学学c语言吧。否则到时候会很辛苦的。下面是我整理的一系列课程的参考教材 =============================================================================================================== 0.000 计算机科学导论 教材: 1.《编码:隐藏在硬件背后的语言》 2.《通灵芯片》 3.《D is for digital:What a well-informed person should know about computers and communications》 扩展阅读: 《图灵的秘密:他的生平、思想及论文解读》 计算机数学基础 0.001 微积分 教材: 1.推荐看MIT的公开课《微积分重点》 2.《什么数学:对思想和方法的基本研究》 3.《微积分和数学分析引论》 0.002 线性代数 教材: 1.推荐孟岩的博客 《矩阵系列》 google 关键字 “孟岩” “矩阵” 即可进入博客 2.推荐MIT的公开课《线性代数》 3.推荐书籍《线性代数》作者Gilbert Strang,只有看电子版的了。没引入 0.003 概率论 教材: 1.推荐MIT的《概率导论》 2.《深入浅出统计学》 3.《统计思维:程序员数学之概率统计》 ps:关于数学分析、随机过程、等高级课程就不错赘述了。 0.004 计算机科学基础之离散数学 教材: 1.《离散数学及其应用》 0.005 计算机科学基础进阶之组合数学 教材: 1.《组合数学》 0.006 计算机科学基础高级之具体数学 教材 :1.《具体数学》 ps:这本书难度比较大,科大博士的必修课。之所以推荐这本书是因为如果不读完这本书怎么可能有机会去领略Knuth的神作《计算机程序设计艺术》系列呢?尽管大神knuth在TAOCP卷一中写道有高中的数学知识就能看懂,但是以我的个人经验来看似乎做不到。 计算机编程基础 0.007a 程序设计基础 教材: 1.《Little Scheme》 2.《How to Design Program》 0.007b 程序设计原理 教材: 1.《计算机程序设计的构造和解释》英文名称《The Structure and Interpretation of Computer Programming》简称“sicp”江湖上人称“魔法书” 2.《Concepts, Techniques, and Models of Computer Programming》 ps:如果你读sicp不做里面的习题简直就是暴殄天物,浪费了。推荐MIT的公开课“计算机科学及编程导论”尽管他们用python取代了scheme。 0.008 C语言程序设计基础 教材: 1.《C语言的科学和艺术》 2.《C程序设计的抽象思维》 3.《C语言程序设计》K&R 进阶教材: 1.《C专家编程》 2.《C语言接口与实现:创建可重用软件的技术》 0.009 汇编语言程序设计 教材: 1.《汇编语言》作者:王爽这可能是本书单中唯一一本中国人写的教材 面向对象程序设计 C++程序设计 教材: 1.《Thining in C++》 2.《C++ Primer》 3.《Effective C++》 4.《深入探索C++对象模型》 ps:C++的经典教材太多了说不定我可以列出20本来,但是初学者还是先打好基础吧。 JAVA程序设计 市面上有很多培训机构的java视频,有些视频讲的真心不错,可以找些看看。 教材: 1.《Thinking in Java》 2.《Effective Java》 3.《Practical Java》 4.《深入理解Java虚拟机》 5.《Java并发编程实践》 计算机核心专业课 数据结构与算法: 教材: 1.算法:C语言实现(第1~4部分) 基础知识、数据结构、排序及搜索 2.算法:C语言实现(第5部分)图算法或者 3.《算法》第四版(java描述)(本书红黑树讲的奇好比CLRS好百倍) 4.《算法引论:一种创造性的方法》(一本被大家忽略的好书,正如序言说的,如果你没时间请直接看第五章) 5.《编程珠玑》 6.《编程之美》一本很好的习题册 算法分析与设计 教材: 1.《算法引论:一种创造性的方法》 2.《算法导论》 程序设计与计算机系统 教材: 1.深入理解计算机系统 计算机网络 教材: 1.《Head First Network》 2.《Tcp/IP详解卷一:协议》 3.《计算机网络:自顶向下方法》 操作系统(可以拆分成两门独立的课程) 教材: 1.《现代操作系统》 2.《操作系统:精髓与设计原理》 3.《莱昂氏UNIX源代码分析》 4.《现代体系结构上的UNIX系统--内核程序员的SMP和Caching技术》 5.《计算机系统设计原理》 6.《UNIX编程艺术》 7.《鸟哥的Linux私房菜》 make your hands dirty,学一学怎么用操作系统吧,各种名目,shell^_^听国外读书的朋友讲,学完的之后国外的学生就可以写出一个微型的操作系统内核。 Linux/Unix编程实践: 1.《UNIX环境高级编程》 2.《UNIX编程环境》 3.《Linux/Unix编程实践教材》(这本更适合初学者) 数据库 教材: 1.数据库系统导论 2.数据库系统概念 计算机体系结构教材: 1.《计算机体系结构:量化研究方法》 软件工程: 邹欣老师在中科大授课时候用的讲义,当时我震惊了。http://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html 1.《人月神话》 2.《代码大全》 3.《UNIX编程艺术》 4.《梦断代码》 5.《程序员修炼之道:从小工到专家》 数据挖掘与机器学习 数学基础要好,特别是统计学,线性代数可能还需要更高级的随机过程知识 教材: 1.《Machine Learning in Action》 2.《集体智慧编程》 3.推荐斯坦福“机器学习公开课” 4.《统计思维:程序员数学之概率统计》 网络编程:(软院有设置这门课) 1.《TCP/IP详解:卷一》 2.《UNIX网络编程(卷1):套接字联网API》 3.《UNIX网络编程.卷2:进程间通信(第2版)》 4.《Java并发编程实践》5.《HTTP权威指南》 编译原理(软院有设置这门课) 本人学本科学了一遍编译原理,在科大又学了一遍可以说所有课程里面最折磨人的莫过于《编译原理》这门课了。 教材: 1.《编译原理》:江湖上人称“龙书” 2.《编译原理》:江湖上人称“虎书” 3.还有一本江湖上人称“鲸书”的 4.《编程语言实现模式》一本更“practical”的书籍 5.《程序员的自我修养:编译、链接、与库》近年来中国人写的又一好书。 一门优秀的编译原理课程,在学完之后学生就可以做出来一个简单的编译器。在科大的时候我们正好五次实验最终实现了一个简单的编译器。 设计模式:(软院有设置这门课) 不推荐初学者看GOF的《设计模式》 教材: 1.《大话设计模式》中国人写的不错的书籍,C#描述 2.《深入浅出设计模式》Head first 系列 3.《敏捷软件开发原则:模式与实践》c++/java 描述 4.《重构:改善既有代码的设计》 5.《重构与模式》 6.《重构与手册》 7.好了最后看GOF的《设计模式》吧。 最后大家读一读《数学之美》吧,非常棒的一本书。 图形、网络安全、等其他领域的课程日后再说 其他话题 1.编程语言之争: 很多在校大学生冥茫到底该学习哪门语言,哪门语言更好。其实语言无好坏,“尺有所短寸有所长”。这就好比我问“到底是锤子厉害还是水果刀厉害”,如果是用来削苹果当然是水果刀厉害。如果是用来砸石头当然是锤子厉害。每门编程语言都有自己的应用场景,我的建议如下: 1.学好C语言 2.学一门传统的面向对象语言C++、C#、java都可以,按照自己的喜好来 3.学一门函数式语言,比如schme,F#,common lisp,ML等等。 这里我推荐学习scheme,因为“sicp”,“hodp”两本及其优秀的书籍都是用scheme来讲编程思想的 4.学一门动态语言比如pyton,ruby等等。 我个人比好喜欢python现在很多人都会说“编程语言不重要,重要的是思想”,其实我是不完全同意的。深入一门语言编程,但不拘泥于一门语言。 一个好的学院应该会有相关的课程包含这些不同编程范式的语言,比如读研的时候,我在数据挖掘课上学的python,在编译工程课上学的ML,在形式化方法课程学的F#,我们还有一门课时讲授动态语言ruby的。当然了,还有专门的实践课javaee平台,c#.net平台,等等。计算机专业是实践性非常强的学科,没有累计一定的代码量是不行的。10W行,没错,希望大家在本科四年能够累积10W行的代码量。没必要读研了。如果你读了本书单中的大部分书的话。 2.看英文书还是翻译的 大家看我推荐的书单就知道了,我都是写的中文名字。这并不代表我不推荐大家看英文原著。我的观点是,当你进入一个新领域第一本往往得看中文版翻译版的,因为看英文版的有很多术语你看不明白,这样进度会比较慢,打击自信心。反正我是这样的,我学任何陌生领域的第一本书看的都是中文翻译的,以后的书籍基本上就是如果翻译的好就看中文版的,典型的如《unix编程艺术》翻译的就非常好。翻译不好的就看英文版的,比如编译原理课程里面提到的“虎书”的java描述版就翻译的奇差,只能看英文版的。 3.有这些书单就够了吗? No,学好一门课程需要非常多的动手实践,计算机专业尤其如此。一门优秀的课程往往得配上非常好的实验课程。比如《深入理解计算机系统》这门课的实验就非常的棒,令我印象最深刻的要数“二进制炸弹”了。当时我们大家都在拆弹,拆的不亦乐乎。可见cmu的老师非常用心的设计了这些实验,但是中国的教育呢?很少有拿的出手的原创课程吧?大学老师们,你们用点心教学生吧!同学们你们用点心学吧。 如果您是工作一族那么读一读用红色标记的部分吧。 last but not the least书单中尚有漏网之鱼,日后补上。手头还有很多事要忙,就此搁笔。 重新排版了下,方便大家阅读。 以后要补充的内容。详细分析每门课,个选课的同学提供指导。 补充比较实际的资料,等你们13级找实习的时候会好很多。 补充: 我相信很多学弟学妹看了这个书单可能会产生一种感觉,学一门技术要看这么多书吗?答案是有必要!因为就算是一本极其好的书对一个知识点的阐述也都有不同的侧重点。举个很简单的例子,二分查找。有编程经验的人肯定知道“二分查找”为何物,任何讲数据结构算法的书都会讲,很多人认为自己就理解了。好了下面就检查一下你对二分查找的理解。所有问题都是围绕“二分查找展开”。 如果面试官这么问你: Q1:请描述一下二分查找的思想吧。 Answer:Alabla,很多人可以说出来。 Q2:请问二分查找的返回值是什么? Answer: Q3:请在纸上写出完整的二分查找代码吧。(递归、非递归版本) Answer:(你能保证你能写对?90%的程序员都写不对) Q4: 你能给你写的二分查找编写测试用例吗? Answer:(你能保证你能写设计出很好的测试用例?) Q5:你能证明你的二分查找是对的吗? Answer:(循环不变式?) Q6:我现在题目稍微做些改动:给定一个有序数组(升序)arr,求最大的i使得arr等于v,不存在则返回-1. Answer:你能写对吗? Q7:按照上题的叙述我现在要求最小的i使得arr等于v,不存在则返回-1。 还有很多。。。。 如何寻找这些问题的答案呢? 一本书肯定是不够的。你可以到这些书籍寻找答案: 任何一本讲数据结构算法的书籍查找二分查找的概念。 johua bloch的一篇博文《Extra Extra Extra:Nearly all the binarysearch and mergesort are broken》 或者 jdk1.5的 java.util.Arrays里面查找错误二分查找的源代码,jdk1.6中查找正确的源代码 《编程珠玑》寻找不变式的相关答案 《编程之美》寻找相关题目的变体 《代码之美》寻找为二分查找设计测试用例的答案。 不变式的设计也可以再go语言的类库中找到。 好了很恐怖吧。 补充内容 (2013-5-26 18:20): 可以将本书单扩散到13级的群里,让那些闲的蛋疼的童鞋觉得自己还有事可做。 |
[职场| 业界·前辈·经验谈] 给13级学弟学妹整理的书单
wjl
· 发布于 2013-05-25 15:00
· 17050 次阅读
转载文章时务必注明原作者及原始链接,并注明「发表于 软院网 RuanYuan.Net 」,并不得对作品进行修改。
wjl 发表于 2013-5-25 15:02 师兄可以在word里面编辑好复制过来~ |
看了学长这片帖子,压力真心很大,得努力看书了 |
vo_ 发表于 2013-5-25 15:11 发的第一篇帖子,重新整理的格式,以便学弟学妹阅读。 |
本帖最后由 wjl 于 2013-5-25 20:18 编辑 254863962 发表于 2013-5-25 19:42 我还是建议你现在把c语言的基础打牢,提高编程能力。刚才我已经给你写回复。如果你觉得 c 语言的基础算可以了。你可以试着去写 K & R《C语言程序设计》(此书有C圣经的美誉)课后的习题。 http://www.amazon.cn/C%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E8%AF%AD%E8%A8%80-%E5%85%8B%E5%B0%BC%E6%B1%89/dp/B0011425T8/ref=sr_1_1?ie=UTF8&qid=1369484010&sr=8-1&keywords=c%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1 本书连接。看看你能不能把绪论(第一章)里面的课后习题写完。学编程一定要多写程序否则学不好。 C++的书基本上都是大部头,我个人喜欢《Thinking in C++ 卷一》或者《C++ primer》我在书单里面有列。 |
wyc8842172 发表于 2013-5-25 20:49 我当初也是听说这门课没开起来我还以为是假的,看来12级的同学们真够。。不说了。愤怒!!! 13级的学弟学妹希望别错过了。 |
点评
我的乖乖 师兄这些书全看了? |
wjl 发表于 2013-5-25 16:54 师兄你真有眼光... |
wjl 发表于 2013-5-25 21:09 我问了几个同学为什么没选,大概是觉得这门课的分数不好拿。因为老师上课是板书,没有课件,最后也没有复习提纲,又觉得这门课程本身比较难吧。反正我个人觉得分数倒是无所谓,能学到知识才好。 |
顶顶顶!!!!!!来自: iPhone客户端 |
好贴啊 ···· |
neu小瑞ustc 发表于 2013-5-26 10:04 所以我们大家都来这里深造了啊~~~~~~~ |
科大的师兄就是体贴 |
wjl 发表于 2013-5-26 16:58 恩哪,实习一年更向学霸看齐 |
犀利啊 犀利啊 |
感觉我能看完十分之一就很不错了…… |