新手问题 非计算机专业程序员补习基础,求推荐书籍。

oatw · 2019年07月19日 · 最后由 1c7 回复于 2019年07月29日 · 1568 次阅读

各位大佬好!

我是一个菜鸟程序员,作为非科班出身,自学转行的半吊子,希望能系统的补习一下基础知识。

这两天在看算法方面的书籍,但是像《算法导论》这样的大砖头真心啃不动,于是先看了一遍《算法图解》,但又感觉太过入门, 不够系统,浪费了挺多时间。

希望有经验的大佬指条明路,推荐一些适合非科班选手入门+进阶的图书,能系统地补习一下基础知识。

个人理解至少需要补习的方向有:

计算机基础

数据结构+算法

设计模式

......

请大佬们帮补充方向+列书单,跪拜!

共收到 43 条回复

个人推荐APP

A Programmer’s Perspective,中文书名叫做《深入理解计算机系统》。

之所以推荐这本是因为在很多CS专业会把这本书作为其他课程的基础课,而且这本书可以说非常全面。

最近我又重新看了3分之2,又有一些新的收获。

第二章讲编码,三、四章讲汇编指令集和CPU结构,第五章结合三四章的内容讲一些程序优化。第六章讲存储体系和cache,第七章讲编译原理。第八章讲中断和异常处理,第九章讲内存管理。后面三章分别讲I/O、网络和并发。

这本书野心很大,将本来好几本书的内容整合到一本里,但是总体完成度很高。

可以一边读一边看国外的视频课程,做做习题。每章至少读三遍,完成这本教程以后,基础知识应该比较完整了。

这个时候再学别的很快,比如再去看《Understanding the Linux Kernel》时就会毫无难度,因为底层的东西几乎覆盖了。

adamshen 回复

非常感谢!

推荐一本操作系统的书,Operating Systems: Three Easy Pieces:http://pages.cs.wisc.edu/~remzi/OSTEP/

免费的,是UW-Madison CS本科生的教材,非常易读

heroyct 回复

很全面,多谢!

gaotongfei 回复

谢谢!

收藏。非科班的表示有用

yfractal 回复

前辈介绍的很具体,最后的总结也很有指导性。

算法引论这本书之前自己了解过一些,觉得很有启发性,但是一问算法,大部分人都推荐算法第四版还有算法导论这两本,前辈的分析让我肯定了对算法引论这本书的选择。谢谢!

jasl 回复

前辈您这指导相当生动接地气儿啦!(红黑树那段我笑出了声)

就像前辈说的,时间和精力真的是感觉越来越不够用了,可能看一个框架一个月能基本上手干活,但是看一个月算法可能门儿都没入,大多时候迫于工作出结果就选择了前者。所以,对于坚持这个事,我真不敢夸下海口。现在被逼得每次上大号都会多上十分钟,在里面看算法书。。。

但不管怎么说,我还是要挑战一下自己,不以面试为目标,也不以炫技为目标,就为了不给自己的程序员生涯留下遗憾。(决心表完了,嘿嘿~)

感谢前辈愿意花时间码字指导!(敬礼~)

https://teachyourselfcs.com

所有你需要的都在这里,只有一个页面。

levi0214 回复

非常全面!谢谢前辈!

谢谢推荐!

考一个全国计算机等级考试 3 级及以上的证。3 级考试应该有很多不同的方向,选一个自己感兴趣的。

1c7 回复

crash course 非常不错,很适合吃饭时看,有点像是介于纪录片和教学之间的一种东西。我当时连看了三四天看完了。

1c7 回复

厉害!膜拜中🙏

rocLv 回复

哈哈!这个思路挺新颖,一举两得。

记得大学时,我们学校报考的二级都是C语言,当时为了考的容易一些,特意跑到隔壁一个师范学校报了一个Access数据库,还嘚比嗖嗖地给一起考试的小姑娘传答案(后来坑蒙拐骗取了其中一个小姑凉。。。)

考二级的时候,内心的OS是,以后我可不要当程序员!结果兜兜转转还是做了程序员。。。

riskgod 回复

谢谢前辈!

oatw 回复

二级有点浅,理论上如果你考一个 4 级证书,相当于读了一个计算机本科

rocLv 回复

嗯。受教了,等我积累一段时间可以考虑试一试,还能多拿个证,挺好。

從另一個角度來說 建議看一下cracking the coding interview 回答一下入面的問題

深究才找參考書

编程语言不光光只是计算机专业学的,电子,自动化等专业也会学习如C语言,汇编,C++程序设计之类的语言,那以我们电子系专业而言,还有单片机原理,数模电,信号分析与线性系统等,那最后你走哪个方向才会深挖。我们同学有的做销售了,那就看鸡汤书籍,做应用工程师或者半导体了,数电模电书就要一直拿着翻了,做单片机那汇编语言,c语言就是常备书籍,做PC端就是C++,C#,更多是看网络解决方案,如登录stackflow, csdn等网站需求解决方案了。 所以关键不是你是否是计算机或者非计算机专业的,而是需要看你走哪个方向,细分,很多理论性的东西,会把你看得头晕目眩,最后工作中可能只用到那么10%,而且还不如有经验的同事告诉你怎么回事来得快。 所以找准你要走的方向,再去看看相关基础书籍,大部头,纯理论的东西没必要看太多,所谓纸上得来终觉浅,做过才晓得。也就是这个道理。 ruby这块坛子里很多人是我老师,吹牛逼我是老师了,哈哈。

bluesky0318 回复

不要说很多人,这样容易误伤,到底是谁,请指名道姓。😎

不推荐啃csapp,把配套的实验玩一遍(内存炸弹)

半本sicp治天下

zzz6519003 回复

都是好书。谢谢小姐姐~

bluesky0318 回复

谢谢大兄弟~

弱弱地说一下,其实我深挖的方向是web前端。。。挖了这些年有点挖厌倦了,毕竟前端能够创造出的价值非常有限。

bluesky0318 回复

半导体有可以玩的学习方法么

adamshen 回复

我说很多人都是我老师,厉害的人物,我只是个打嘴炮的,这个没有误伤谁呢。

oatw 回复

我也不熟悉互联网方面的技术,只是纯从这么多年学习经验来看的话,人的精力都有限吧,把一个细分领域做好,做到专业就难能可贵了,全面铺开而深入有点难度。

zzz6519003 回复

没有,身边做了很多年的基本上都是10y+的AE(应用工程师)或者模拟设计工程师,手边都会有一本模拟电路(清华版,绿色的)。10Y+的MCU开发工程师手边都是一般谭浩强的C语言基础。那我们写C++,C#的一般都是深入浅出MFC(侯俊杰)。这么多年也没发现更好的。

bluesky0318 回复

很多理论性的东西,会把你看得头晕目眩,最后工作中可能只用到那么10%,而且还不如有经验的同事告诉你怎么回事来得快。

这点不是特别同意,一个人很多时候不会学习他不知道的知识,因为他不知道他所不知道而又缺少的东西。有些东西不需细学,走马观花即可,大致有个印象,概念。至少等以后可能需要的时候,不是张口就问,而是自己知道该学什么来解决这个问题,一般情况都是有时间/缓冲来供你学习而解决问题的。经常问别人问题,那是新手才干的事情。

tinyfeng 回复

这个我肯定是同意你的说法的,有问题张口就问是很遭人讨厌的,有问题了,先自己想想是不是自己的问题,一般而言80%都是自己的理解问题,10%是文档说明没说清楚发生歧义,10%是别人的问题。10%是别人的问题的,也需要提问者拿出足够的证据从侧面证明是开发者的问题,这样开发者一下就能明白自己的问题是在哪,很高兴的去处理。 在这句“不如有经验的同事告诉你怎么回事来得快”是指,比如你看到同事在用某款软件时,非常快速的用一个快捷键搞定问题,你可以问他比去翻软件使用手册快,再比如对于多态,接口,虚拟继承理解不够深刻,拿出问题来问,资深程序师给出的理解会比书本给你的更深刻。 至于bug或者issue,回到第一段处理方式。

tinyfeng 回复

所以事实上,在做我们这个方向的软件的时候,是常常让各个模块把自己内部的数据信号拉出来的,这样在调设备或者芯片的时候,为区分是硬件问题还是软件问题留下足够的证据。不然扯起皮来没完没了。

oatw 回复

我一开始看公开课,其实是为学英语,学着学着就跑偏了…最后英语没学好(也就计算机方面的还凑合),却成了程序员。

算法导论是作为提升算法的一本必读书,很经典,不懂算法的程序员不是好程序员

1c7 回复

这个适合入门,增加认知

aldrich 回复

对,只是入门,一点都不深

如果要学算法,我个人推荐一本书,图灵出版社的《算法图解》,易懂,图多,有漫画有比喻。 在出中文版之前我就看了英文原版 《Grokking Algorithms: An illustrated guide for programmers and other curious people 》最近因为面试要刷新下数据结构和算法的相关记忆,去广州图书馆借了中文纸质版(免费的)又简单刷了一遍

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册