准备考社区网格员考试题应该买什么书籍看

新手关于如何看编程经典书的一些疑惑?
昨晚翻了萧大的151个答案,看了很多,收获也有些,总结如下:1.《csapp》2.《sicp》3.《算法导论》4.脚踏实地学2+年小白问题来了:1.学了这些如何实践到现实的项目中去,小白的意思是,如何应用到现在的Web开发,移动开发,类似做出一个Demo中去,小白太菜,描述不好,囧。2.很多公司要求参与过什么项目,学了这些能做出什么?3.这几本书学习的先后顺序?我在想提问的方式和语气是不是欠妥,不妥求见谅。
按投票排序
很多学计算机的朋友,都有类似的困惑:我学了计算机专业,怎么还是做不出网站、软件、APP?很多人误以为是教材不接轨,因此崇拜国外教材,其实不是那么回事。我尽量详细地答一下,顺便也讲讲计算机科学到底是干什么的。假如有个同学,受过基本的语文训练,初学写作,梦想成为金庸那样的小说家。他现在想知道,如何提高创作能力,并练习写第一篇小说。这时,有个中文系的大学生路过,面对这位略有稚气的同学,给出了高票答案:我不认为学生写小说有啥意义。学生,就要沉得下心。你看我懂文学理论,要写小说的时候,哪怕不会组词,有本辞典就能写了。所以你不要浪费时间去搞那些,你要先把文学的本质理解透彻,达到我的境界,就能“会当凌绝顶”。所以你现在应该学习《深入理解现当代诗歌》、《文本的结构和意义的生成》以及《音韵导论》,然后脚踏实地学习2+年,这些才是语言的内功。这位同学当场被这些华丽的书名击倒,跑到知乎恭恭敬敬提问:我想写小说,大师给我推荐三本经典,我应该按什么顺序学?学了这些,我能写出什么?不用觉得滑稽,初学者被高大上的书目击倒是正常的,这三本书也确实都是入门经典。但是我们要先搞明白,它们入的是什么门。CSAPP 《深入理解计算机系统》这是 CMU 的“计算机科学导论”的教材。是操作系统入门。(这门课程要求学生有编程基础)SICP 《计算机程序的构造和解释》这是 MIT 的6.001课程的教材。是编程语言入门。(这门课在好几年前就改成Python了)CLRS 《算法导论》这是 MIT 的6.006课程的教材。是算法分析入门。那么操作系统、编程语言、算法分析又属于什么呢?我们系统地看看,计算机科学到底是干什么的。CS大体可以分成这么几个大领域:硬件、系统、软件、网络、计算理论、计算方法。硬件 —— 数字电路、集成电路、存储器、各种硬件设计和验证方法等。系统 —— 计算机架构(指令集、串/并行、网格、云端之类)、嵌入式、实时系统等。软件 —— 操作系统、虚拟机、编程语言、软件设计/开发/验证的工具和方法论等。网络 —— 计算机网络的架构、协议、组件、路径算法、性能分析等。计算理论 —— 可计算性、形式语言和自动机、密码、逻辑、算法分析等。计算方法 —— 数值计算、符号计算、并行计算、计算机图形学、人工智能、机器学习等。你可以按这个提纲,逐个了解一下CS是干什么的。但现在可以先看着这些词,大概感受一下。我们再说那三本书:操作系统和编程语言,是软件领域中小领域,而算法分析是计算理论中的小领域,这是那三本书在计算机科学中的位置。它们作为所谓“经典”,入的就是这几个门。现在你知道这几本书是干什么的了,那么你的问题来了:做网站、做APP又属于这里面的哪个位置?答案是,哪个也不属于。你看整个计算机科学,研究的都是非常底层或基础的东西,与你说的“现实中的产品开发”,基本上是没有关系的。即使有些名称看着和开发有关,其实也不是一回事。比如这里所说的“编程语言”,就好比语言学,是研究各种语言结构的,而不是教你用语言写作的。你要认识到这一点,这不是教材好坏的问题,而是分工不同。就像天文学不是教你制造望远镜的,机械动力学不是教你开挖掘机的。那么问题又来了,你现在就想学习做网站、做APP,这是什么?怎么学?哪家强?实际上,国内大学极少有独立的CS专业,都是加个“与技术”,全称叫“计算机科学与技术”。顾名思义,这就包括计算机科学、计算机技术两部分。你想学的这些,就属于那个“与技术”。你想学的是技术方向,别人推荐的却是科学方向的经典,这个就是你困惑的根本原因。说到这里,我想题主应该已经理解了:计算机科学是干什么的,那三本书是干什么的,以及为什么学完了还是做不出来网站和APP。接下来,我想你会问这两个问题:1、如果我想搞技术,那么学习科学部分还有没有必要?我的观点是,这不是有没有必要的问题。这两者之间的区别,是追求的目标不同:科学追求尽量深入,探索原理;而技术追求尽量封装,提高效率。各种高级技术都是力求隐藏细节,以提高效率。而你选择学习内容的标准,就看它能否显著提高你的生产力。有些技术高度依赖底层细节或原理,造成了效率瓶颈,就应该学。但具体到Web、APP开发,最能提高你生产力的,就是那些前/后端框架和脚本,学完了你马上就能做产品,而不是《计算机程序的构造和解释》什么的。当然,上边有些朋友告诉你,你要学挖掘机,一定要先学机械动力学,否则你就没有内功,永远不可能成为挖掘机高手,机械动力学才是真正的知识,只是现在社会太浮躁,没人愿意花时间学。然而,我并没否认机械动力学的价值,它能让你把挖掘机分析得头头是道,甚至设计制造挖掘机。但是,如果你的目标是开挖掘机,那你就不该这样入门,因为这是两回事。说了这么多,希望你明白了。2、我现在应该如何提高技术水平?学技术的关键思路是两点:一个是模仿,一个是边实践边学。比如说学挖掘机,首先你要知道基本操作,然后看别人是怎么开的,最后自己上去开。遇到问题,比如跑偏了,你研究一下,挖掘无力,你再研究一下,弄明白了就继续开。具体到你说的做网站为例,首先你可以看看《Head First HTML5》和《Head First PHP & MySQL》,或者用Codecademy,学会基本操作。然后找一些作品,比如WordPress,和它的一些经典模板,去看别人是怎么做的。然后,你就可以自己设计一个小网站,尝试把它做出来。不用等什么都学会了再开始做。做的过程中,你遇到什么障碍,再有针对性地去学习和解决。这种边实践边学习的模式,才是学技术的正确思路,这跟搞理论研究的思路是不一样的。最后,再跟你说两个题外话。第一,这几本书,就是大学教材而已,没有那么神。我们以前搞OI,初三就把《算法导论》的习题做得滚瓜烂熟,也就算是入个门,从地下室来到地面的水平。只是有人刚来到地面,就跟你大谈“会当凌绝顶”、“程序员世界的高富帅”什么的,这个不至于的,没必要激动。第二,我面试过一个前端,问他最喜欢什么书,他说TAOCP,连QQ签名都是“只盼TAOCP出第五卷”。我问这对前端有何帮助,他说这是内功。后来考查写代码,他写不出来,说这个不是内功,而他擅长内功。我说那你先证明一下辗转相除法吧,他又强调他擅长的是计算机内功,而不是数学。但其实这个证明,就是TAOCP第一卷、第一章的第一道例题。
没时间,晚上再说,先随便说几句。这些都是计算机的基础学科,学好了基础,迁移技术和往高处爬都很容易。说实话,我不认为学生做个网站有啥意义,我要做网站的时候找个东西看一下就好了,我要做windows程序找个最佳实践和几个例子看看就好了,你把每种api都会背了,也只是一种经验*n而已。学生,就要沉得下心。以学算法为例,第一步完成之后,也就是大致的算法你都知道优劣和实现了,那你以后一辈子的光景,都不必为这些分析啊性能啊最佳数据结构之类的问题发愁困惑。这个境界,只要把算法导论上的算法看看熟就好了,甚至公式证明习题你都完全可以不看,一点关系都没有。我去年说过,7天就够了,结果被一堆喷子围攻。。。哎,我就是7天的嘛没人信,每天十几个小时手写了一本本子诶,人非各种挑刺,很没意思啊,7天真的可以让你算法入门的啊。。。。然后第二层,就是那些喷我不做习题不看证明的人其实也没达到的境界,设计算法,手机屏幕太小先不展开讲了。其实编程高手的能力无非是对特定问题像语言,算法,平台,库,底层设施等知识的理解程度高以及对设计和思想的透彻理解。简单说来就是越深入理解,越能掌控全局。如果你只想做泛泛之辈,随便怎么玩都行。像你只会算法,那只能说是算法强,没有平台知识,不能解决平台问题,所以说算法平台这些东西你本来就逃不掉,必须学好。番外讲两个小故事,一个是fb发布的php编译cpp的工具,php社区用户不行,所以用着拙劣的语言也写不出堪用的工具,而写得出的人压根不会用php,这个东西的出现完全是因为巧合,世上本不会有这样的工具。喷子要说了扎克伯格就用php造fb,比你牛逼多了,是呀,你赶紧去学php造下一个fb吧。还有一个是前几年手机游戏刚火爆,很多公司ios的游戏用cocos2d,安卓就重写一份,其实把objc的运行时弄到安卓上再写几个基础库函数就好了,何必重写。。。。。其实还可以自己弄一个何必用cocos2d,我说就月旬就可以写出来结果又被无知的人在知乎轮了。。。码畜会说unity包办一切,其实unity这种工具你不改是不能做得更快更好的,渲染器那么糟糕,当然你如果就只是想普普通通,怎样都行。所以你学好这些cs学生本应该学好的专业课,以后就少了一个喷我的程序员。你应该感到庆幸的是这些书都是我用人肉看出来的,我看了很多别的坑爹书,不希望有人再看烂书误入歧途。我从事的领域不够多,所以推书也不够全,以本科基础为主,但这足够让你打下坚实的基础了。看了这些书,腰还是会疼,走路还是会费劲,一口气也上不了5楼,但是我保证一个人会在思想上有巨大的转变,获得极大的自信,看老师同学和csdn的眼光会变得非常微妙,虽然还只能是屌丝但已经成为了程序员精神世界的高富帅。不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但,你好好看书,那就是体验会当凌绝顶的感觉哟欢迎实践过的同学现身说法
我在北大教SICP,这本书还是很有意思的,能开阔眼界。不过真的蛮难懂,备课很费劲。我觉得要做个好程序员,没什么一定之规,不会算法也可以,只会算法也可以,似乎就没有什么是一定要掌握的。如果你对现实要解决的问题和需求了解得很透彻,哪怕连快速排序都不会写,哪怕只会用VB和C,也一样能够靠写程序过上很好的日子。这是个人的经验之谈。但是作为一个程序员而言,我已经老了,我说的也许过时了。我觉得不少软件的开发用不到什么高深的技术和算法,只要界面过得去,有别人没想到的功能就可以了。当然还要会营销,那就不是程序员的事情了。
作为一名认真读过《csapp》《sicp》《算法》的结构工程师,转型为Android开发的人。
这三本书给我留下很深的印象,优点可自行豆瓣或者亚马逊,不表。
第一.csapp给我打下了很好的计算机软硬系统框架基础知识。我基本上从计算机系统小白了解到16进制运算--&位运算--&机器码--&指令集--&条件判断机制--& 分阶储存机制--&进程,线程机制--&通讯机制...看完这本书的一个很显著的能力提升是对代码优化的能力,如果接着学习《算法》会深有体会,有时候少写一个内嵌判断可以减少一个数量级的运算量。顺便增加了C语言知识。
第二.作为一本的优秀的导学教材,如果自觉自己哪方面的知识欠缺,可以直接翻看csapp的相关参考书籍,顺藤摸瓜,是一个很好的看书技巧。
《SICP》我看的是Lisp语言版的,让我惊奇的是编程语言可以是这样的。基本上不需要花时间去学习语法,就可以循序看懂代码。这本书,我没看完,我知识的储备和编程实践经验欠缺导致,这本书的后1/3部分,我很难再理解,暂时放弃。这本书跟caspp是较为互补的,csapp侧重硬件部分,而sicp基本上都是软件部分。特别是语言的部分打开了一个很好的视野,元语言的部分,让我知道如何在一门语言的基础上写另外一门语言。此后,我不再拘泥于编程语言。
《算法》第四版,我看了将近一个月。如果说,前两本书让我见识到了计算机过往惊奇的发展历程,这本书则让我看到了计算机未来惊叹的无限可能,这正是吸引我持续学习的动力所在。
关于现实的例子部分可以看我另外一个回答:。
在知乎上,能明显的感觉到,越来越多的非计算机专业的人都在朝着互联网行业发展,自学编程,可能多数人都曾被各大牛软工无意间晒的薪水亮瞎了双眼。作为其中一名,我最深的体会是,兴趣应该是第一位的。自学的过程中,我花费了2000+小时用于看书,编程,调试...甚至我工作后,每天早上7点起床,看书2小时(这个习惯很好),九点半上班到晚上十一点下班,十二点睡觉,几乎不感觉到累。
我以前做结构工程师的时候,工作时间一周40小时,稍微一加班就觉得违愿。
最后来点现实的忠告:25岁之后自学编程,其实是一条九死一生的道路。
需要具备以下加分条件若干才有可能成功:
1.兴趣驱动。
2.有靠谱的领路人(此法效率最高)。
3.高于平均线的自学能力。
4.英语能力良好,可无碍阅读开发文档。
5.具备一定的经济基础能力,可支撑一年以上无收入生活。
如果是奔着提高收入去转行的人,我更推荐去看《富爸爸 穷爸爸》系列,看完那个更能直接改变你的经济情况。
以上。---------------------------------------------------------原文------------------------------------------------------------------很多人都对工科有一种很大的误解:看到工程师用X工具造出来了Y产品,就以为X工具很厉害,自己去学会了X工具同样可以造出来Y产品。
现实是:你确实可以通过教程或者模仿,采用X工具做出Y产品。但是,如果稍微偏离了教程,就一头雾水。
原因是:支撑工程师用X工具能造出来Y产品的实际上是隐藏在X工具之前的A~W基础理论知识;脱离了X工具,工程师可以用其他工具应用A~W,同样可以造出Y产品。举个例子:现在做电子产品结构设计MD的大部分都是用PROE三维软件画图再交给模具厂开模生产,看起来就是会用PROE就能做结构设计一样,但是我敢打赌,如果你真是仅仅只是会PROE,没有其他任何的机械设计基础,即使你PROE用的人件合一,没有任何一家靠谱公司会录用你的。
道理其实很简单,但是社会的浮躁使得越来越少的人愿意花几倍于学习X工具的时间去学习A~W这些真正的知识。再加上某些培训机构鼓吹教程和模仿的便捷,从几年前的三维设计室内设计到今天的JAVA培训,时代的悲哀总是存在。
CSAPP&深入理解计算机系统&正如它的前言所说,“如果你研究和领会了这本书的概念,你将成为少数的牛人,这些牛人知道事情是如何运作的,也知道当事情出现故障时如何修复。”这是一本适合有编程语言基础,真正有志于编程的导学教材。初次读完全本含练习题不含家庭作业,预计花费时间120个小时到200小时左右。
我一直是“学习编程”的传教士,我鼓励人们无论因为什么目的都应该学习编程,哪怕只有一点点。但我经常遇到的困难就是人们往往认为编程是一件需要花费时间的学习的技能,需要很多基础知识。好吧,我承认编程唯一需要的基础知识就是——英语。如果你不会英语我真的很难保证你会精通编程,但并不表示完全学不了。如果题主已经有了我上面所说的基础,那么可以接着往下看。上面的网站是一个自学编程的网站,使用它仅仅需要英语而已。可以从HTML&CSS学起,然后javascript,并用上面的例子学习创建一个主页。完成这些之后可以在PHP,Python或者Ruby中选一个学习(我个人推荐python),整个过程大概40学时左右,也就是你大学一个学期的一门课的量。然后使用这三门语言中的任意一种语言下的web框架(PHP的我不太清楚,python可以用Django,Ruby可以用Rail),按照官方文档的例子+模板完成一个个人博客,去万网购买一个一年期的域名(大概70块钱),再直接租一台小型的虚拟主机(一个月10块-20块不等),将这个网站放到虚拟主机上并向外服务,最后在上面转载10+篇以上编程相关的技术文章(总计要200学时左右,相当于大学一个学期的5门课)。然后去微软的office模板中心去下载一个看起来炫酷一点的简历模板,写上自己做这个网站用到的技术,并且在项目经验上写上使用XX语言1年,建有自己的网站,期望岗位是研发。最后将这份简历给20家公司投过去(网投就可以),等待面试通知。之后随便选一家公司,但记住在面试的最后阶段,一定要底气十足的要求薪资8K,13薪,5险一金,以及补助若干,如果对方比较主动,可以要1W。正式入职之后你的编程学习之路才正式开始,工作中需要用到什么技术就去买什么书,看什么网站,不会的地方就问同事。希望我的答案能帮助到你。
1.学了这些如何实践到现实的项目中去,小白的意思是,如何应用到现在的Web开发,移动开发,类似做出一个Demo中去,小白太菜,描述不好,囧。一般你见到的web项目都是苦力项目,极少有那些会用到这些知识的,譬如说阿里做的那个数据库什么的。但是数据库怎么能算web项目呢,顶多算web公司搞的项目。2.很多公司要求参与过什么项目,学了这些能做出什么?基本没有3.这几本书学习的先后顺序?随便什么顺序
我同时支持了 和
同学的答案。1、古话说的好,学而不思则罔,思而不学则殆。学编程,关键是灵活运用自己的知识储备;知识储备越多(即要多学),原理理解越透彻(要多思考),能找到的解决方案就越多。只是学很多,却没理解,那就不可能把知识储备转化成解决方案;头脑很好,逻辑严谨,却没有足够的知识储备,同样经常会陷入找不到解决方案的尴尬境地。2、小马过河,牛说河水很浅,刚过蹄子,松鼠说它兄弟前几天刚被淹死:谁在撒谎?都没撒谎。个人情况不同而已。你要结合它们自身的情况以及语境,再对比自身情况,找到其中蕴含的信息。事实上,只要你有一定的逻辑基础、有解决问题的能力,那么哪怕仅仅是看了本《XX语言入门》,你也真就能入门。我当初是在高中刚毕业,还没见过电脑是啥样时,到同学打短工的打印店里趁着看了一下午公认坑爹的《QBasic语言入门教程》,然后回家思考了一个月,编程就入了门。等到了大学,没上过几次机,就可以用QBasic/C写一些字符动画格式的小游戏了。——当然,能这么做的前提是:在此之前,我已经有了动画原理、电视机原理、几何(主要是坐标概念)之类知识储备。然后,算法与数据结构方面的教材,就更加开阔了我的眼界——一点都不夸张:国内本科通用的那本数据结构教材,我只花了一下午就看完了,之后没有再翻开第二遍。不需要了。(当然,那本本科教材比较浅,加上之前做游戏已经有过很多思考,自然学一遍就够了。以后当然还得找别的书看)————————————————————————总之呢,如果你处于“学了一门语言,却不知道如何用它来解决问题”的阶段,这说明你只是学了些死知识,还没学会用它们来思考。那么建议看推荐的那几本书入门——若即便这样都还入不了门,那数学、逻辑等方面就需要补一补了(或许拆一些机械小玩具、自制并搞懂收音机之类东西的原理也能有所帮助)。而如果你处于“学了一门语言,简单问题能解决,稍难的问题两眼一抹黑”,这就说明你已经有了一定的“程序员的思考能力”,但知识储备不足,那么建议看推荐的那些书提高。
反正已经这么乱了,也不妨多我一个答案再来添堵。我一直认为程序员有三种。一种是像E.W.Dijkstra、王垠、 这种大师,信手拈来,九浅一深。第二种是Martin Fowler、
、这种高手,身经百战,内功精湛。第三种就是
V大这种行者,技艺娴熟,洞悉万物。做Web和App开发的那不叫程序员,说到底还不是在不停地做重复劳动?做OI、OJ、OK、OL的也不叫程序员,说到底还不是把老的算法抄来反复练习?程序员比他们多出来的就是对本质的思考。你想做Web、做App的话,要掌握的是领域和建模相关的理论技术。这样子才可能抽取需求完成设计建模,进一步转为代码实现。至于代码实现,随便看某一个框架入门教程就够你用了。于是我也非常不负责任的推荐你一本用来学习建模的书:嗯,估计你可能不太看得懂里面的图画,建议你再参考一下:---------------------
下面正式回答题主的问题
------------------------小白问题来了:1.学了这些如何实践到现实的项目中去,小白的意思是,如何应用到现在的Web开发,移动开发,类似做出一个Demo中去,小白太菜,描述不好,囧。前文已经回答过了。2.很多公司要求参与过什么项目,学了这些能做出什么?学了这些能做的东西还是比较多,比如一个OS的demo,一个虚拟机demo,一个Scheme解释器。很多公司要求参与过项目,也不是像一两个小的demo那样子的;而且像v大那样子没学过做Web也没写过App的不一样还是进了M$RA。3.这几本书学习的先后顺序?这几本书的先后顺序没啥可探讨的,我倒是觉得,你可以先通过做Web、App来尝试一下(说不定你突然觉得Android平台的生态圈太脑残了自己撸一个rOS或者YuOS出来呢。这样子你提到的那三本书应该都有用了。
先解释一下这几本书都是干什么的。《csapp》,底层。有三个部分:一、汇编和反汇编,对破解感兴趣的人可以看看,之后再看看雪的那几本书。二、计算机体系结构,处理器流水线,内存和性能优化。三、linux C,不过讲的也是不够全面,直接看《apue》好了。《sicp》,讲函数式语言编程思想,即函数式语言的“设计模式”。(设计模式是针对OO来说的,但是函数式语言我实在找不到一个对应的词)。《算法导论》,算法。链表、堆栈、图、树,贪心、动态规划、回溯、分治、递归。这些词汇本身稍微懂编程的人应该都知道。这几本书对web开发有什么用?你第一个问题是“如何应用到现在的Web开发”,我的意思是,如果这些知识对web开发有用,那么你自然而然的就会找这些书看,而不是靠人推荐。从字面上来看,这些书常人也能看出来,不是教你如何编程的书。比如说你要用php+mysql开发一个项目,你就应该去找《php 与 mysql web开发》这种教人php语法和库的书。我承认写php也要懂底层,要懂zval容器机制,才能够多快好省,但这些知识的量,跟写出一个OS所需知识的量远远没办法比。如果你不需要自己动手写一个OS,而又学了这么多的知识,不是浪费还是什么?再比如算法,php的库里面内置了asort,用于给数组排序,你自己实现的,不仅代码难懂,效率上还会起反作用。现在的一般条件下,没有什么项目需要如此苛刻的时间和空间复杂度,算法这种东西短期还是作用甚微的。假如你懂得php而不会sql,你就应该花一个星期了解一下如何编写sql语句,学习e-r模型如何设计表。而不是看《帆船书》里面讲的如何自己编写一个数据库服务,再用这个你自己写的数据库去实现你的应用。计算机是一层一层的,最下面是硬件,上面是OS,之后是各种库和框架,再上面才是你的应用。编写一个工具,和用一个工具开发应用,是两类人干的事情,也是两种不同的事情。那么这些书有什么用?如果你是非从业者,只是玩玩而已,那么请跳过这一节,你做好你的应用就行了。对于从业者,干到一定年头之后,可能竞争力下降,竞争不过那些精力旺盛,成本低,又年轻的新人。这个时候就需要往脑力劳动发展,大致有这么几个方向,技术型有算法工程师和架构工程师,管理型有项目管理师之类的。当你退出编程一线,就需要以上那些东西了。很多人开始只是想开发一个App,不小心看了数据结构算法,然后又想学OS和网络,然后又不得已转成了架构和项目管理。最后退休前才发现,其实只想做一个App而已。所以入行之前先想清楚你需要什么,上了贼船就下不来了。学了这些能做出什么?《csapp》还是属于实践性比较强那一类,我就简要说说里面的lab吧。lab2:反编译一段c语言程序,找出过关的密码。类似CrackedMe,这种程序你可以在吾爱破解上面找到成千上万个。lab3:还是反编译,利用缓冲区溢出,显示指定信息。这个在当今用处不大了,一部分东西不是C写的而无从下手,另外,C语言程序员基本有了安全意识,知道要检查边界值什么的。lab9:写一个基本的bash,也就是linux里那个命令行。你可以体会一下管道过滤器模型。lab10:写一个基本的代理服务器,需要用到套接字,文件读写,线程,中断之类的东西,相当于把最后面那几章糅合起来。这几本书学习的先后顺序?这几本可以简要归结为“底层”和“算法”两类。对于前者,顺序不重要,可能很多本讲的东西都差不多。我们当时这方面的课程,后一门课讲前一门课的一部分东西,参考前一门课的教材。你看到讲的内容都重复的时候就可以终止了。对于后者,真心不建议你一上来就看《算法导论》。我的建议是先找一些比较薄,比较易懂的书,比如普林斯顿的《算法》,或者阿苏外耶的《算法设计技巧与分析》。另外,就是刷各种OJ了,算法理解得再好,不能写成代码,那就是玩具,成为不了真正的工具。解题写代码的过程比你啃书要快乐一万倍。最后,再啃那本《算法导论》,知乎上一上来就推荐这本书的,不是显摆B格,就是估计为难你的。计算机的世界,最重要的一点就是讲究“权衡”。如果你是在职的程序员,先把你的工作做好,先把你的技术使用熟练,有一份稳定而且自己满意的收入之后,再研究这些有的没的。如果你是在校生,不用跑知乎上面来问了,课表已经给了你答案。最后额外补充一个东西:如何学习编程我们都知道,从无到有的过程是非常困难的,就像如何从有机物演变为第一个生命体一样。我觉得光回答完你的问题还不够,需要一种切实可行的方法论来引导你如何编程,然后你就不会跑知乎上问如此别扭的问题了。1、实践别看《csapp》这么高大上,他不过是底层方向入门的课用的教材罢了。我们当时做的事情不过是安装linux、学会使用shell和vim,摆弄gcc和gdb,最后,还是写代码。跟我们后来的web开发课程,安装mysql,配置apache,了解ssh库的使用,反复调试ajax,强不到哪里去。还有算法,你以为光看书就行了嘛?我们基本不是lab就是OJ,小作业也有代码。你打竞赛的话,基本是这东西,而且没有ide检查,对代码质量要求更高,基本相当于在白板上面写代码。在编程这件事情上面,一定要遵从实践派的思想,上机多接触代码,之后多反思,很多东西不用刻意去记就会了。你光看书背书,知识都记住了,写出来的代码根本就编译不过,还调试不出来哪里错了。2、举一反三实际开发过程中,经常要切换库或者语言。一切命令式支持面向对象的语言都是共通的,只要你有举一反三的思维。比如,熟练C++之后,一个星期熟练Java,之后用一些Java自己的特性独立做出一个项目。其实这些都不用重新买书去看,互联网资源很丰富,看看教程和文档就够了。换个语言和库能有多难的事。3、现学现用业务才是软件的灵魂。你的软件要服务于各行各业的人,适用于不同领域。比如,做医疗仪器的软件要懂医疗行业,做机床的控制软件要懂制造业,等等。再比如,你的软件要用到一些新的库,或者要用到一些新的算法,怎么办,谁也不是天生就会的,花时间去了解,然后马上投入实践。4、教材如果你要看书的话,尽量找国外的书。教程的话,哪里的无所谓。主要是因为国内的书,特别是作为教材出的书,都是为了出书而出书,很少有像教程那样真正打算教会别人而出书的。
其实吧,很多人都在撒谎,他们没告诉你在读那些经典著作之前他们都读了什么入门的东西。毕竟国内大学生的英文水准根本就达不到流利阅读英文作品的地步,就算是浅显如CS著作也是难读。更不要说,这些人在读大学之前就学了很多相关东西了,已经比普通人早,和转行进来的人隔着两层距离。
我的情况应该是从
所说的计算机技术入门,现在往计算机科学方向走。我赞同
的答案,原因无他,新人先踏上计算机技术容易走歪路,什么歪路?被所谓“技术”的创作者、狂热信徒们进行宣传轰炸,先觉得其神乎其神,入了教,接下去觉得这东西真的比安利还好啊!于是成了组织中“坚定”的一员同时展开对其他新人小白的洗脑灌输:你知道XXX吗?你看垠神年轻时因为接触了一些“计算机技术”后写得文章(早年博文还可以在搜索引擎上搜到),连他这般大智慧的人都会受影响,我认为仅有非常少的新人能在这条路上保持坚定清晰的“技术为我用、技术为我驭”的头脑。以及我对现在的媒体资讯有种本能上的畏惧,看看这些标题吧:问题来了,一个学习计算机不久的学生凭什么在这些信息中保持清晰、理智的判断力?有没有人因此而认为银弹真的存在了?我相信大有人在。如果只是兴趣爱好做Web开发,那只要能把网站架起来足矣。如果是以此作为职业,做到深处,会不会遇到性能瓶颈?需不需要对运作中的一部分数据做独立的缓存策略?如果是并发场景,遇到Race Condition了?不懂PV原语、信号量怎么办?Endpoint并发上不去发现瓶颈在一部分计算上,如何将这部分计算做成异步而保证I/O的畅通?是不是要懂MQ、消费者/生产者模型、Pub/Sub模型?如何让用户连上服务器后保持连接直到有消息返回(典型的站内通知场景,此处不用WebSocket)?用长轮询技术?它是怎么做到同时挂住成千上万个连接的?在我的理解中一个线程处理一个连接,这么多连接数服务器根本吃不消啊?什么,有个I/O多路复用技术?为什么这框架号称高并发,超擅长处理I/O密集型应用,但我写的程序效率却还不如以往的那些呢?听说Node.js这个解决方案很不错,可以用JavaScript做服务端应用,它为什么单线程还那么快?又听说最近有个国人的解决方案叫fib.js很火,能够用同步的方式编写异步应用,想了解背后的技术?什么,协程?这特么不是山寨版的线程么,为什么在一个线程中跑那么多协程有时会比同时跑多个线程要快多了,同时程序运行所需的空间也小多了?什么是内核态、用户态、栈帧?如果您看到这里还是对我写的东西无感,我觉得您对核心竞争力也无感。学而不思则罔,思而不学则殆。如果您和我一样,也是从计算机技术入门,我假设您对我之前说的媒体银弹宣传导向认可并且已经具备了一定的免疫力,那么我想说,其实“银弹”还是有的,例如:哈希表的查找速度比线性表要快链表的插入删除操作速度比线性表要快(根据场景而论,请看评论区)在有序线性表中查找元素存在问题的最好的解决方案是二分查找法最近访问过的数据,不久之后很可能再次被访问一旦访问了某个存储单元,不就之后其附近的存储单元也会被访问
上来怒答一发。如果单纯要做一个网站,或者一个APP,题主说的这三本书都没有什么卵用还不如去看W3C,包你两个星期学会做网站。然而做出来一个能看的web项目仅仅是计算机门学科所有内容的九牛一毛,甚至连一毛都不到。它只是冰山浮在水面上的一角。真正的计算机科学(包括技术)关心的是以下几个问题:0. 正确性,如果这个都不能保证回家玩儿蛋去吧1. 抽象,如何将复杂的底层软硬件抽象成简单易用的接口,同时尽量避免程序员在使用这些接口时犯错2. 效率,如何尽量提升程序的速度和空间利用,从而能提升用户响应速度,和在有限的硬件资源下提供尽量多的服务3. 稳定性,如何不让你的程序跑着跑着就挂掉呢?我们在学政治课的时候都学过两个名词:生产资料和生活资料,打个不恰当的比方,计算机科学是负责“生产资料”的,关心的是如何研究出满足上述四点的工具;而技术则是负责“生活资料”的,他们负责利用现成的工具来给普通人提供服务。题主讲的这三本书,都是讲“生产资料”的,和真正做应用其实没有太大关系。想要在公司里打工,知其然即可;而想要成为一个项目的中坚力量,则必须知其所以然
你看看周芷若同学,基础知识不好,直接速成九阴真经,遇到杨过的后人,还不是被虐成狗。
杀鸡不用牛刀啊这些书都是高手写的我实在很讨厌程编程的各种大部头很多都是翻译过来的,文理不通,看着非常别扭。比如说,外国人常常说In fact,翻译过来就是“事实上”,但是我们正常人会这样说话吗。我们喜欢说“其实”我很早以前曾经自己写了一本ASP的书,名字叫ASP七日速成汤。没拿去印刷就扔在网络上给大家下载,看过都说哎呀早看到这本书早就入门计算机了。虽然ASP过时了。但是里面还是讲了不少计算机基础的东西,你可以找来看看,应该还能搜得到。我觉得书这东西出来就是用来读的,必须要搞笑生动让人容易理解,搞那么多艰深的术语真心没必要。但是你这个情况,又和书的关系不是那么大。关键是你的定位啊老兄我看了你要达到的目标,根本和这些书八竿子打不着。你这个情况,我给你个建议你先别看书去找个编程培训班(我保证你本地一大把,很多都是包你找工作的),选一个方向,学几个月你就差不多有基本水平了,而且还有你说的“项目经验”。因为这些培训班都是跟公司很做的,常常接一些外包项目,就需要你们这样嗷嗷待哺的学生来打工,不用给你工钱你还要交学费內说实话,如果不是接触游戏开发,算法这个东西用的机会实在是不多。一般被这种培训班揠苗助长以后 ,你差不多会倒腾了,但是你会发现你只是学了些实战技巧,隐藏在实战技巧下面的兵法,你还不了解,但是那时候你入门了,看书就能看的进去了。这时候去看,吸收就快得多,很多平时的疑问也很容易就迎刃而解。大部分书,我都是当做字典用的,完全没耽误我成为一个合格的程序员。最后,编程这玩意,真的还是要热忱的。小弟9岁的时候就在小霸王学习机上写程序写到11点,不玩里面的卡带游戏你敢想象吗?但是到了现在我也没多牛叉,因为这条路稍微走走还行,走精真的不容易。希望你能成功
兄弟你缺的是自信。
他只是推荐了几本名气比较大的书。当然,我不是说这几本书不好。即便如此,我也不建议你看这几本书,因为对你来说用处不大。那个建议从PHP开始的答案就更扯了,这三本书他可能一本都没仔细看过,就跑来告诉你里面讲了什么了。PHP这门语言实在太复杂,上手太难,不建议从PHP开始。想想我以前花了大概2个月,也没能上手PHP。同样是没人指导的情况下,Erlang一下午就上手了。我觉得你最想看到的答案是像下面这样的。这几本书都很好,从哪本看起都没问题。能看完很好,但不看也没啥问题。只要能学习轮子哥那种精神,即便有一个足够好用的轮子,也要自己用奇葩的方法造一个方的轮子出来,就可以了。
看了上述牛人和非牛人的回答,我觉得陷入了华山剑宗和气宗之中啊
csapp太细致了 而且很底层 现在也没深入去看 SICP真是受益匪浅(我是被《黑客与画家》洗脑以后看的此书)算法导论这本书可以用很多"看法" 因为算法这个东西即是前沿领域的刀锋 也是构建软件工程的基石 算法导论里面不但详解了各类算法 也举出大量论证 更多的是介绍算法和设计算法的思想
所以名为导论
当然你也可以抛开学术性的考究 单单作为掌握算法的工具 也是极佳
以前看到过一个比喻 把编程思想比喻成武学内功 把编程技巧比喻成外功 而使用的编程语言则是各门武学
照这个比喻 上面这些书可以看成内功心法 教给你的是编程思想 在遇到问题和需求时如何用计算机的思路来hack之
这些书无一不是经典 全是出之大师之手 读之 相当于能站在大师的视角来理解计算机 这也是吾等”普通人“所希冀的 至于谈到公司为何要招项目经验丰富的人 这个可以当做另外一个话题了 自己也是刚毕业参加工作 公司的项目和以前学校做的玩具差距还是很大的
在接触到真正的产品项目和涉及的面越来越广的时候 就发现了 编程是很琐碎的或者应该说做编程项目是很琐碎的
因为很多时候光有编程思想也是写不出好项目的 很难直述 举例来说吧 java在表现多态的时候,实例变量和实例方法表现不一致rails里验证boolean不为空不能使用presence: true, 而要使用inclusion: [true, false]图片的路径最好不要出现ad(就算是广告O(∩_∩)O~
有些人会装adblocks之类的插件)等等 这些大概都算不上什么编程思想 只是一些语言和工具使用时的一些细节技巧和经验吧 但离开这些细节也不行 有时候想当然的写出一段代码 但是就是不能正常运行
很大可能就是被些细节和坑给绊住了 我坚信很多大牛前辈都是从无数坑趟过来的 一些项目的解决方案 也是一种经验的积累 所以就算你编程理解和思想上不差一些经验丰富的前辈 但是工作效率和可靠程度肯定是比之不如的 答案写得比较乱(理科生) 希望对题主有些帮助
萧井陌和vczh说的这些书虽然很好,但是短期你是用不到的。他们的路子是都是让你预备进BAT或以上级别的牛公司。你想做什么产品,就去读那方面的好代码。撸一些框架(熟悉常见的开发套路),然后读一些开源的产品(1w-10w行规模的),不失为一条迅速找工作的好方法。为避免误会补充一下,那些书还是要看,早一天晚一天的问题而已。
打个比方,计算机系统(底层的硬件和作为基础架构的操作系统和平台)是身体的话(A部分),算法和数据结构是灵魂(B部分),结合起来是一个有机的生命,要做出伟大的事,活出美好的生活(C部分)。CSAPP针对的是A部分,解释这个身体(计算机系统)在现实中是什么样的(但没有涉及硬件部分)。如同开车,对引擎工作原理的了解有助于成为一个更好的司机,程序员了解了这部分内容后有助于写出更好的程序。CLRS针对的是B部分。SICP则针对C部分,讲怎么用计算过程中的各种抽象方法来解决问题(前3章和第4章的大部分);但同时也有A部分的内容,不过是在相较于CSAPP更抽象的层次描述了计算机系统(第4章第一节,第5章),拿这部分与CSAPP对比着看,很有意思。这些东西当然都很有营养,但不是光有营养就能让人成为一个运动健将的。成为运动健将需要多在场地中训练,但是肯定也离不了这些营养,营养不良的练的再多不也是废柴么。

我要回帖

更多关于 襄阳社区网格员考试题 的文章

 

随机推荐