自学编程 9 年,想学算法,有可以推荐的书吗?

2020-05-28 22:24:24 +08:00
 hackzx

rt,题主从小学起开始自学编程,但总觉得每每会了入门了一门语言却很难有所提升,总感觉无论怎么学都跟大佬们相差了很大距离。由于没有老师,9 年来学会的东西很多,从前端到后端,从嵌入式到计算机软件,各类流行技术、框架,语言等等都有进修。

始终觉得自己学的越多,越觉得自己菜的到家。

今日浴室奇想,醒觉算法也许可以让我停滞的修为有所提升。但因为此前没有怎么接触了解过如何去体系化学习算法,想找些书看。有些编程基础,请问我应该找哪本书看会更适合呢?

6646 次点击
所在节点    程序员
51 条回复
wujieyuan
2020-05-28 22:44:48 +08:00
学许多语言有什么用, 关键要看自己的需求,需要什么就学什么, 啥都会一点还不如只精通一门
hdbzsgm
2020-05-28 22:47:56 +08:00
统计学习方法 李航
hackzx
2020-05-28 22:49:02 +08:00
@wujieyuan 话是这样没错,就是因为总觉得在一个语言上迟迟没有进步,才跑去学另一门语言的
em70
2020-05-28 22:54:03 +08:00
提升语言能力的途径不是算法而是项目,9 年你做过多少有价值的产品? 有多少用户因你而受益?
nguoidiqua
2020-05-28 23:20:31 +08:00
学再多都没用的,技术不是学术,得去用、去练才能掌握。只是看看原理做做题目,而没有运用到实践中去,那是不能真正融会贯通的。

能够熟练运用书本上的知识了,才能谈提高。这个时候就需要去挑战自己能力的边界,去解决那些自己感觉棘手的问题,这个过程你可能要经过各种思考、尝试、查找资料,当你解决完一个又一个以前解决不了的难题之后,你的水平也就提高了。

总之,要带着问题去学习,不要泛泛而学。与其考虑该看什么该学什么,不如好好想想你学编程是想干什么或是解决什么问题。找到这个目标之后,一路打过去就行了,然后再向另一个更高的问题出发。
sudoy
2020-05-28 23:30:48 +08:00
Learn by doing bro! 我也是自己学的,边学边应用到工作中,写出 bug 了再去 StackOverflow 搜,还可以上 V 站请教大佬
hackzx
2020-05-28 23:40:50 +08:00
谢谢楼上的各位前辈给的建议。

我学编程也就是爱好吧,因为喜欢什么而去学什么。

当然希望以后毕业也能投身到自己热爱的事业中去,我学习的方法也和 @sudoy 一样,一边做项目,一边学习,至今也做了许多项目,也都因为小和对自己写的菜的认识,也都没有开源。

在网上也经常听说各位前辈也有一年经验干了两三年,没办法进步的事。想找算法书也是希望能有所提升
lbfeng
2020-05-28 23:44:51 +08:00
coursera 上有 princeton 的算法课。看视频和里面的教材。
hackzx
2020-05-28 23:49:44 +08:00
其实写了那么多年代码,一直觉得自己都是在应用层逻辑上舞刀弄枪,只会用别人写好的库,遇到无解问题基本完蛋。这才是我感触最深,觉得自己与大佬相差甚远的重点。
hackzx
2020-05-28 23:51:22 +08:00
@lbfeng @hdbzsgm 十分感谢❤️
zouzou
2020-05-28 23:56:28 +08:00
编程是手艺活,系统点的话,大学里有专业叫计算机科学与技术,照着里面的课程学。
Mistwave
2020-05-28 23:57:13 +08:00
算法 第四版 中译本也是相当好的
就是上面所说的 Princeton 的算法课教材
KousukeSakurako
2020-05-28 23:57:28 +08:00
@hackzx 同感,目前正在学习数据结构和算法,以及离散数学
sudoy
2020-05-29 00:04:56 +08:00
@hackzx 我目前也都使用别人现成的库,尤其是 python 我想用的库都有人写好,MIT license 免费用,而且写的人水平还很高。但是你可以学一学自己造个轮子啊,找个简单但是你认为写的很好的库依葫芦画瓢
ZztGqk
2020-05-29 00:10:23 +08:00
看了下描述,建议先看一下 SICP,B 站有课程。
Hieast
2020-05-29 00:35:07 +08:00
算法就是指解决问题方法的清晰描述,我认为分布式网络的一致性算法、传输层的拥塞控制算法甚至量子计算机专用的退火算法都属于宏观上的算法,但是通常所指的算法是使用通用程序语言求解一般数学问题的方法。

计算机解决一个应用问题的方法就是 1. 把应用问题建模成一个已有算法的数学问题 2. 实现该数学问题的算法 3. 把应用的参数传到算法里。
业务架构师工作重点在第一步,算法工程师工作重点在第二步,开发工程师重点在第三步,这就是为什么很多人感觉自己只是调包侠。

实话说恰饭的话用不上算法,会用顺序选择循环把参数传到合适的包里就能恰上饭了,但是既然你想学,那就说说我的看法。
钢铁直男的学法是先学离散数学,熟悉计算机领域数学问题的描述方法,然后啃「算法导论」,能啃完前四部分应该就超过大部分人了。
不那么头铁的方法是找资源更丰富的课程学习,我推荐学堂在线邓俊辉的数据结构,直接送上书的地址,视频、助教、示例代码、OJ 功能齐全。不要担心没有提升,我也没学完就找到工作了,后面就研究怎么恰饭了。就我观察 99% 的人是学不完的。学多少是能力,学不学就是兴趣啦,加油,祝你能打通。
https://cloud.tsinghua.edu.cn/d/902db8d098bc4479b82e/files/?p=/%7Edeng/ds/dsacpp/dsacpp.pdf
impl
2020-05-29 00:41:13 +08:00
如果是小白入门的,可以看算法图解 grokking algorithms
RangerWolf
2020-05-29 00:42:40 +08:00
不知道楼主有系统学习过一些基础课程, 比如 数据结构、计算机系统?
个人感觉好好学完之后,水平上升了一个层次
PS: 我也是自学

另外, 学完这些之后假如您还不需要立即找工作,比如正在读书。 建议找一两个你喜欢的开源项目,先看看人家的代码。如果你能有一些 commit 被合并进去, 以后找工作肯定是一大亮点
CoderGeek
2020-05-29 01:25:06 +08:00
基础在学校的时候容易学 年轻有精力 考试生啃都可以 后面就会越来越理解 2333
HeapOverflow
2020-05-29 02:36:09 +08:00
每个语言每个框架都有做出来比较大的 project 吗?光学那么多东西又不用,学的再多有何用?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/676472

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX