楼主: Warald
跳转到指定楼层
上一主题 下一主题
收起左侧

[转CS-吐槽] 趁着最近人气高,Warald召集大家讨论CS学习问题,分享资源!

   
🔗
moremeds 2012-3-5 05:32:24 | 只看该作者
全局:
关于编程语言,

我觉得最重要的还是动手吧。给自己设定一个小目标然后针对这个目标编一个小程序,我当时学java GUI的时候就是这样的,编了一个巨傻逼的计算器。读书的话,core java非常的好,初学的话上册就够了。正如前面的大神说的,如果想要深入还是要看thinking in java。另外,在具体做程序的时候,看文档的习惯非常的重要。熟悉api很关键,如果用的ide,比如eclipse,里面的代码提示可以帮我们找到相关的api。
. .и
编程起步的话,我觉得从java开始比较好。我觉得java算是一种高级的编程语言,里面面向对象的方面做的比较突出。而且比较规范,不像一些script语言随意性比较大。对初学者来说规范一些有好处。另外我是听一个大神说过,如果一个编程语言不能影响到你的思维,那么这个编程语言就不值得学习(似乎这样的意思)。我觉得我用java编程2年多了,感觉他对我的影响挺大的。参加数学建模的时候,我们提交的论文我就套用了java编程的结构,逻辑性显得特别好。

数据库我觉得最好的一本书就是 Database Systems: A Practical Approach to Design, Implementation and Management by Thomas M. Connolly and Carolyn E. Begg。这本书我从大二开始读,一直用到现在做毕业设计。不过我觉得数据库最重要的还是实践。读书再多都是理论上的,到头来还是不知道innodb和myisam之间的区别(说的就是我啊,惭愧)。. 1point 3acres

另外还有就是看看博客,上面有牛人已经贴出来很多了我想再提一个就是 36氪(36kr.com)里面有不少业界的动向,特别的好。

评分

参与人数 1大米 +100 收起 理由
modifiedname + 100

查看全部评分

回复

使用道具 举报

🔗
sela 2012-3-5 23:34:57 | 只看该作者
全局:
最基本的,蔡高厅,高等数学(数一)课程视频:http://v.youku.com/v_playlist/f726100o1p0.html
p.s. 对弱弱的转专业的学生学编程CS之类的start thing~~
回复

使用道具 举报

🔗
davidlu1001 2012-3-7 15:23:42 | 只看该作者
全局:
本帖最后由 davidlu1001 于 2012-3-7 16:24 编辑 . Waral dи,

1、编程语言:
   a) 个人感觉看着习惯、用着顺手很重要(当然也与对应的工作职位有关);
   b) 要想操作下面提到的"一个操作系统"(默认Unix/Linux),脚本语言非常有必要,推荐Bash,包括《sed&awk》,一行shell可以搞定的,也不需要十几行C/C++/Java;
   c) 要想深入学习并理解"一个操作系统",这时C是必须的,推荐K&R的;另外还有一个简单易懂的:《How to Think Like a Computer Scientist - C Version》. check 1point3acres for more.
   d) 觉得可以按个人兴趣和工作岗位对应一下,如果以后台开发为主,则C++/Java;如果以前台为主,则Python/Perl/PHP;如果SA/DBA,则Perl/Python;如果数据处理/统计分析/金融/生物,可以考虑Perl/C++;. 1point3acres.com
   e) 这里要单独提一下"正则表达式",可以做为一种工作生活技能,最好可以掌握——《精通正则表达式》(Mastering Regular Expressions 3rd)
   f) 实际工作中,很可能会遇到数据前台展示的情况,Web方面的东西可能在语言学习过程中会被忽略掉。就像前面同学提到的,可以从LAMMP入手,自己搭建起一个环境,然后使用些框架或模板,随便折腾,边学边实践,直接可以看到可视化的效果,对新人来说,是个不错的开始;相关资源推荐:http://coolshell.cn/articles/4795.html
   g) 对于纯粹的初学者,可以考虑多接触下Python,入门易、风格佳~~MIT原来用scheme授课的都换成python了,facebook/google都在使用了……推荐《Python核心编程》;
   h) 关于编程理论方面,推荐《程序设计方法》《计算机程序设计与解释》
   ——以上言论,只是个人工作感悟,不涉及各个语言优劣哈~~. ----
2、操作系统:. 1point3acres
   a) 严重推荐一本打基础的书籍:《深入理解计算机系统》(Computer Systems - A Programmers Perspective)
   b) 对于Linux/Unix不太熟悉的新人,《鸟哥的私房菜》系列,用来入门,是个不错的开始,主页是:http://linux.vbird.org
   c) 入门后,进阶可以看:《Unix环境高级编程》. 1point3acres.com
   d) 网络编程方面,推荐:《Unix网络编程》(第1卷)
   ——其他的没有深入看过,道听途说的就不推荐了。
3、数据库:
   a) Mysql做为LAMMP中的第一个M,因其开源以及易用性,在IT/互联网公司使用最为广泛。在应用实践方面推荐:《深入浅出Mysql》
   b) 实践:《Apache+MySQL+memcached+Perl开发高速开源网站》《PHP和MySQL Web开发》
   c) Oracle:《Database Concepts》、Thomas Kyte的《Expert One on One: Oracle》,中译本为《Oracle专家高级编程》
   c) 在海量数据处理方面,以Hadoop为代表的NOSQL至少需要了解下:《Hadoop权威指南》.google  и
4、数据结构:
   a) 《离散数学及其应用》(Discrete Mathematics and its Applications)
   b) 《算法导论》(Introduction to Algorithm)
   c) 《C算法 第一卷:基础、数据结构、排序和搜索》(Algorithms In C:Part 1-4 Fundamentals,data structures,sorting,searching)
   ——只折腾过很水的数学建模,这些书零散看过一些,只能说,对算法大牛无限膜拜~~~
5、附上一些经典的视频资源:
   UCB所有学期的所有有录像或者录音的课程的录像和录音都在这里
   http://webcast.berkeley.edu
   UCB的CS课和EE课的所有课程的资源列表,能够有的都有了
   http://inst.eecs.berkeley.edu/classes-eecs.html
   UCB的CS课和EE课的测验和考试的官方题库(这个比较少人知道吧),部分含solution。有兴趣的同学可以做一做……. .и
   http://hkn.eecs.berkeley.edu/exam/browse/
   斯坦福大学的“Stanford Engineering Everywhere ”免费提供学校里最受欢迎的工科课程. check 1point3acres for more.
   http://see.stanford.edu/default.aspx

   W大这个帖子灰常不错~~顶一个!
   做为一个EE专业却投身CS的人,在大学里也迷茫过,东西太多则不容易专注,也难以精深。当时什么都想学,操作系统折腾过、网络也试图深入过、数据库也YY过……早有这个帖子就好了,不至于走很多弯路。
   闻道有先后,术业有专攻。希望列出的一些东西可以实实在在帮助到需要的人~~

评分

参与人数 11大米 +174 萝卜 +4 收起 理由
Self_Learner + 3 很有用的信息!
鱼和花 + 1 赞一个
extrovert + 3 感谢分享!
红醋栗树 + 3 感谢分享!
checkmatel + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
cyisatree 2012-3-7 17:54:03 | 只看该作者
全局:
回复 63# davidlu1001


    哇,超详细的! 谢谢!!
回复

使用道具 举报

🔗
skyw932 2012-3-8 12:15:46 | 只看该作者
全局:
0基础,正在自学编程中,举几个对自己很有帮助的关于programming的书吧。
1.Java编程那些事儿 强烈推荐 这本就是我的入门书
2.Java.How.to.Program,7th.Edition 找到中文版的不太清晰,最后下了英文版的 因为讲得比较详细
以上在sina csdn都有下载
3.c++方面推荐一个网站. Waral dи,
英文原址:http://www.cplusplus.com/doc/tutorial/
国内翻译的:http://www.prglab.com/cms/

评分

参与人数 1大米 +100 收起 理由
modifiedname + 100

查看全部评分

回复

使用道具 举报

🔗
仙豆豆 2012-3-9 08:42:14 | 只看该作者
全局:
数据库不怎么需要吧

Data structure and algorithm:
1. 随便找本基础书, 以薄, 精 为准:
data structure:  数组,单向/双向链表, stack, 二叉树, BST, 队列, 循环队列, hash table, 图
Algorithm: merge sort, quick sort, binary search, 递归, BFS, DFS
.--
2. 看Crack coding interview 一遍 (or interview expose), (再进一步的话可以看Algorithm in C)

3. 做Mitbbs 待字闺中板块上的题目
. 1point3acres.com wwwyhx 发表于 2012-2-25 00:14


看到这个我想到原来学算法的时候 NP和P的搞了几个月 最后什么用都没有
回复

使用道具 举报

🔗
hitony 2012-3-10 21:16:51 | 只看该作者
全局:
作为6年计算机科班、系统结构方向,我说说我对计算机专业素养的理解吧,希望对大家有所帮助。

知之者不如好之者,好之者不如乐之者,计算机专业也不例外。本科我是被选到计算机专业,大一因为C语言老师的激励而喜欢这个专业,并决定做系统结构研究的。兴趣入门,比如《计算机文化》(第10版?)、《编码的奥秘》(我觉得旧版比新版小开本更好)。传记类的《ACM图灵奖演讲集:前20年 (1966-1985)》《ACM图灵奖 (1966-2006):计算机发展史的缩影》《IEEE计算机先驱奖:1980-2006》。更专业一些,推荐《深入理解计算机系统》(CSAPP),CMU流传着这个段子:15-213,给CMU门牌的课程。这里的15-213,即以csapp为课本的Introduction to Computer System,也是匹村的邮编。Believe it or not,我就是因为这本书,立志研究系统结构的,另一个原因是利用VHDL编写了自定义指令集的cpu和串口,并在带有FPGA的实验台上使两者通信成功!

1)Programming Language
入门当然是C,否则都不好意思说自己是学cs。我当年用的是C Prime Plus,很基础。我就不明白有人居然推荐C之父写的C bible——The C Programming Language,我做编译器从前端做到后端,到现在还不敢说能理解C,居然某人认为这是最快的入门方法?C bible绝对是好书,但是肯定是进阶和reference必备。C进阶还有各种C专家编程,C与指针,C陷阱了,可以提高。之后是C++,java,C#就看科研/项目需要了。我认识的很多msra实习生都从C++转到C#,说什么编码效率高云云。反正我因为做llvm,就是C++一条道到黑。还有个大牛跟我说,按照某语言排名榜的说法 c++快挂了;anyway,大牛没给出出处,在TAMU的C++之父还在弄STAPL,并行版的STL,我觉得C++肯定还不是五丈原的诸葛半仙。C++入门,我用的是C++ Prime,注意,不是C++ Prime Plus。C++之父写的C++程序设计语言,其实比较难懂,入门之后可以翻一翻。C++的进阶书更多,各种Efficient C++,侯捷老师的STL源码剖析啊。(不好意思,我也只是知道,没看。)而Java是不适合作为第一门语言的,几年前已经有美国名校教授写文章批过了。

脚本语言,顾名思义,就是执行冗余繁琐的事情。这些事情交给计算机,定时跑就行,什么python, shell, perl, awk,sed, ruby, ror等等。选一个顺手即可。记得豆瓣还是哪里的程序员自述,计算机科班教育不会开脚本语言课,但谁真正掌握了一门脚本语言,说明他是爱计算机的,所以我们会招聘他。书籍都不一一举例了,似乎是个脚本语言,O'Reilly都有入门到精通的书。That's it. 最后,要精通正则表达式哦。
. Waral dи,
函数式语言,比如lisp,coq,ML等等,是另一种思维方式。有一个笑话,前苏联克克勃苦心偷到了美国NASA的核心代码,交给上峰后被训了一顿;他很莫名其妙,瞅了一眼代码,全是()的组合,当场疯掉。后面介绍Compiler时也会涉及。事实上,我觉得,这才是计算机学生应该掌握的语言,MIT大二就开了scheme的课。法国“中科院”INRIA设计了Coq,被用于各种形式化证明。首届国家科学进步奖的两位获得者有吴文俊,贡献就是机器证明,另一位是袁隆平,解决咱们的口粮。可见吴有多么重要! ..

最后,我就很纳闷,有人居然推荐web作为语言的入门?亲,这说的是计算机科学学生的第一门专业课。我讨论的是计算机科学,是科学,不是工程;是本科,不是大专技校。学C,是为了后面的OS——linux。学web,你跟得上市场潮流吗?HTML/CSS/JS,你咋不是HTML5呢。不好意思,我很保守,不懂web编程,但请各位想做web的看看HTML5的发布会视频,演讲者一上来给出各种设计哲学,甚至包括了乔治奥威尔的1984,最后给出了HTML5的。这才是精髓,或是说web设计的精髓。看到自己做的webpage很有成就感,修改linux内核代码的成就感怎样?先抑后扬的感觉不是更爽!本科学习的原则,在我看来,是不要被外界所打动,夯实基础,做自己有兴趣的事情,举个俗透了的例子,如乔布斯学书法,去印度礼佛!

4)Data Structure & Algorithm
很多人推荐《算法导论》,我也不能免俗,但毕竟不是入门级别的。其实,学DS掌握基本概念就行,推荐清华大学严蔚敏老师的《数据结构》,网上也有视频。之后也正如大家所言,ACM吧,不是为了final,只是为了不惧怕编程,体验成就感(再回到PL,web语言可以acm?)一定题量后,需要加强算法,推荐Robert Sedgewick的书和《算法学:设计精髓》。最后,拜一下高德纳的TAOCP,所谓家居编码旅行吹牛必备利器。

2)Operating Systems. ..
与DS一样,操作系统也是门实践的学科。记得老师在课上说,当年他读书时,觉得银行家算法是这么优雅,为什么没有任何OS使用?原因就在于时间复杂度是O(n^3)。话不多说,直接读开源OS——linux的代码,比如0.11,一万行左右,市面上有0.11代码剖析。我的建议是,先自己理解,再对比学习,这样才能真正懂得。有了0.11的基础,恐怕将来对任何OS部分都不会感到陌生,此时读者可就不只是牛人了,而是大牛了(参考程序员的十层楼)。果然还是有推荐APUE,Unix编程艺术和UNP的。

当然,也可以拿实时操作系统练练手,比如uC/OS,代码短小精悍,和linux一样,pure C。.1point3acres

国内还有本“自己动手写操作系统”?.google  и

win方面,好像有window internals?
..
至此,还是要鄙视一下win——没有好用的终端,以图形界面赢得普通市场,取得商业成功而已,当然win的内核技术事实上是比linux强大。君不见,哪个知名IT公司没有自己的集群?集群需要图形界面吗?在我看来,不用终端,似乎lose my power of control;不爽,计算机是服务于人的,是被CSer控制的。顺便8g一下,盖茨对“计算”的理解,是初中生水平;Google的Page,是本科生。现在,我还不确定Facebook的Zack是什么水平,但至少和Page是平手。再拜一下Amazon,这是因为她的云平台,才有Dropbox等一路风生水起,可叹中国,国家垄断。

3)Database. 1point 3acres
不好意思,我db没学好。但db其实是很有意思的,可惜mysql已死。入门我就不推荐了,直接进阶吧——《数据库系统实现》. 1point 3 acres

4)Software Engineering
这简直是个人文学科,集计算机科学、管理学、心理学、社会工程学于一身。在此我不展开,经典书籍也有很多分类,比如编码类(Write solid code, refactor, 各类design pattern,代码大全第二版,程序员修炼之道,编程卓越之道,O‘Reilly“xx之美”系列,编程珠玑,各种“UML,XP编程、敏捷、需求,测试”书籍),故事类(dreaming code),管理类(各种Joel on software,“美国”创新工场YC创始人Graham的黑客与画家,peopleware,37single出的都是好书,甚至时间管理GTD的书籍)。其实,我觉得《编程卓越之道》是山寨csapp的;说YC是美国的创新工场,简直跟说巴黎是西方哈尔滨一样猥琐。同时敬礼图灵奖获得者、北卡教堂山的《人月神话》作者Brooks,但我推荐的是他另一本书《设计原本》。

搭车说一下,我不是鄙视web,如果想学web,应该学apache,linux sever管理之类的,再不济也得j2ee。如果真要学web,推荐http://www.pureweber.com/

5) Compiler及PL设计哲学
出来混,早晚都要还的。我本科学的最差的就是compiler,一个字,混。结果研究生做的都是compiler,即llvm,那些用iDevice的同学为什么觉得系统很流畅,闭源版本的llvm功不可没,当然还有iOS,基于freebsd——另一种linux发行版(b是伯克利的哦,他们有做工具、开源的传统)。有位北京intel研究院的实习师兄跟我说,intel之所以牛,是在于其编译器优化。所以说,学好OS和compiler,走遍天下都不怕。

可惜学到这门课,大家应该大三了。很多人如梦方醒,要面对出国保研考研工作公务员等等了,无心恋战。但从这门课起(包括以前的汇编),才能真正体现CSer与其它非计算机的区别。

《程序设计方法》《计算机程序的构造和解释》《程序设计语言概念》《程序设计语言原理》、甚至《自动机理论、语言和计算导论》《计算理论导引》才应是计算机专业学生应具有的素养。

当然,不能少了龙书虎书和鲸书(http://cse.seu.edu.cn/people/yan ... ID=8&TopicID=26)。很好笑吧,我也是几天前才知道鲸书,而虎书我本科时写编译器前端时参考过,只是不知道她的外号。编译是实践的一门学科,llvm从UIUC发芽,经过10多年的发展,成为apple主力支持的商业编译器,用于iOS,不可谓不是个奇迹。

6) Computer Architecture
海纳百川,系统结构就是这样一门学科,把之前低层的汇编、中间的OS、高层的PL熔于一炉。君不见,因为银河机,国防科大永远是中国计算机系的翘楚,虽然现在也开始浮躁了,清华华科上交(以及南大某并行实验室)还是难以望其项背。

系统结构可大可小。小的指指令集,大的可以包括计算机组成原理、编译(每个指令集都需要自己的编译器)。所以,我把帕特森和轩尼诗的两本扛鼎之作和盘托出——《计算机组成和设计:软硬件接口》和《计算机系统结构:量化的研究方法》。读不懂没关系,书读百遍,其意自现。

但还是那句话,计算机专业是很practical的,Dr. Brooks是因为领导IBM 360而成就的图灵奖,CA是很活跃的——GPGPU,多核众核,可重构计算等等。哈哈,说了这么多,之前所有其实都是为了CA铺路的——希望有志于出国读博的CSer做CA的研究。

Beyond curriculum
在即将飞跃之际,回首这六年,很高兴学计算机,不仅是因为与人相比,计算机其实很“简单”,照着程序执行,出现了意外也是可评估可能恢复并规避的——每个程序员都是折翼的天使,在计算机世界里构建属于自己的理想国,没有尔虞我诈,更是因为通过计算机专业的学习,更懂得如何获得更多的信息,以更开放的心态接受新鲜事物,而不是成为完全执着保守的左派。事实上,很多学计算机的人喜欢科幻,喜欢哲学,什么冯大师的《计算机和人脑》、《万里任禅游》,喜欢讨论技术背后体现的价值观,《我们的防火墙:网络时代的表达与监管》。
. 1point 3acres
计算机的博士学习,需要扎实的数学基础。而博士,更需要人文素养。在介绍SE时,其实更多的书目是偏人文方向的。是的,我认为中国缺少安贫乐道、少欲知足的精神,这与缺乏真正Ph.D.教育——五年时间在一个方向钻研——有关。以计算机专业而言,本科学位是B.E.,工科学士;研究生或是M.S.,科学大拿;博士是Ph.D.,哲学博士。博士毕业后,追求的不应该是过分的物质生活,反而应是研究领域精神上的快乐!

这也与人文素养的缺失有关,包括我在内,没几人读过千字文、三字经、弟子规、四书五经、春秋左传。另外,学计算机技术也是要读历史的,什么《数学之美和浪潮之巅》《激荡三十年》《沸腾十五年》《IT史记》《IT通史》《IT大败局》了,看看什么技术方兴未艾,什么如日中天,什么日薄西山。(同时推荐这个ted视频,http://www.ted.com/talks/simon_s ... inspire_action.html)我最近在读桑德尔的《公正》,讨论的是很贴近生活的道德标准评判。子曰从心所欲而不逾矩,庄子说逍遥游,佛家的观自在(即观音菩萨的别称),让我向往,让我思考,让我自由。

跑远了,期待一下量子计算机吧。那时的计算机基础课,可能完全不是上面这一套了。1)应该是量子力学了吧?

In sum,祝福所有CSer,这是门最好的学科。祝福所有飞友,心安处,即是家。南无阿弥陀佛!

不好意思,知者不言,言者不知。喷了一地口水,与我头像不符,常惭愧。

评分

参与人数 4大米 +253 收起 理由
chrisatcheng + 3 干货
EroicaCMCS + 100 涨姿势了
OliverHu + 50 好完备!求指导!求PM联系方式!
modifiedname + 100

查看全部评分

回复

使用道具 举报

🔗
davidlu1001 2012-3-13 19:30:03 | 只看该作者
全局:
回复 67# hitony
非cs科班出身的俺,看了后,很受用~~多谢!
回复

使用道具 举报

🔗
wumingshi 2012-3-15 16:57:47 | 只看该作者
全局:
这个帖子太好了!谢谢各位!
回复

使用道具 举报

🔗
seekfordream 2012-3-24 18:00:47 | 只看该作者
全局:
受教了. ----
.1point3acres
个人认为
《c语言程序设计现代方法》 白底兰花的第二版 非常适合入门
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表