rt,题主从小学起开始自学编程,但总觉得每每会了入门了一门语言却很难有所提升,总感觉无论怎么学都跟大佬们相差了很大距离。由于没有老师,9 年来学会的东西很多,从前端到后端,从嵌入式到计算机软件,各类流行技术、框架,语言等等都有进修。
始终觉得自己学的越多,越觉得自己菜的到家。
今日浴室奇想,醒觉算法也许可以让我停滞的修为有所提升。但因为此前没有怎么接触了解过如何去体系化学习算法,想找些书看。有些编程基础,请问我应该找哪本书看会更适合呢?
1
wujieyuan 2020-05-28 22:44:48 +08:00
学许多语言有什么用, 关键要看自己的需求,需要什么就学什么, 啥都会一点还不如只精通一门
|
2
hdbzsgm 2020-05-28 22:47:56 +08:00
统计学习方法 李航
|
4
em70 2020-05-28 22:54:03 +08:00 1
提升语言能力的途径不是算法而是项目,9 年你做过多少有价值的产品? 有多少用户因你而受益?
|
5
nguoidiqua 2020-05-28 23:20:31 +08:00 5
学再多都没用的,技术不是学术,得去用、去练才能掌握。只是看看原理做做题目,而没有运用到实践中去,那是不能真正融会贯通的。
能够熟练运用书本上的知识了,才能谈提高。这个时候就需要去挑战自己能力的边界,去解决那些自己感觉棘手的问题,这个过程你可能要经过各种思考、尝试、查找资料,当你解决完一个又一个以前解决不了的难题之后,你的水平也就提高了。 总之,要带着问题去学习,不要泛泛而学。与其考虑该看什么该学什么,不如好好想想你学编程是想干什么或是解决什么问题。找到这个目标之后,一路打过去就行了,然后再向另一个更高的问题出发。 |
6
sudoy 2020-05-28 23:30:48 +08:00
Learn by doing bro! 我也是自己学的,边学边应用到工作中,写出 bug 了再去 StackOverflow 搜,还可以上 V 站请教大佬
|
7
hackzx OP 谢谢楼上的各位前辈给的建议。
我学编程也就是爱好吧,因为喜欢什么而去学什么。 当然希望以后毕业也能投身到自己热爱的事业中去,我学习的方法也和 @sudoy 一样,一边做项目,一边学习,至今也做了许多项目,也都因为小和对自己写的菜的认识,也都没有开源。 在网上也经常听说各位前辈也有一年经验干了两三年,没办法进步的事。想找算法书也是希望能有所提升 |
8
lbfeng 2020-05-28 23:44:51 +08:00 1
coursera 上有 princeton 的算法课。看视频和里面的教材。
|
9
hackzx OP 其实写了那么多年代码,一直觉得自己都是在应用层逻辑上舞刀弄枪,只会用别人写好的库,遇到无解问题基本完蛋。这才是我感触最深,觉得自己与大佬相差甚远的重点。
|
11
zouzou 2020-05-28 23:56:28 +08:00
编程是手艺活,系统点的话,大学里有专业叫计算机科学与技术,照着里面的课程学。
|
12
Mistwave 2020-05-28 23:57:13 +08:00 via iPhone
算法 第四版 中译本也是相当好的
就是上面所说的 Princeton 的算法课教材 |
13
KousukeSakurako 2020-05-28 23:57:28 +08:00 via Android
@hackzx 同感,目前正在学习数据结构和算法,以及离散数学
|
14
sudoy 2020-05-29 00:04:56 +08:00
@hackzx 我目前也都使用别人现成的库,尤其是 python 我想用的库都有人写好,MIT license 免费用,而且写的人水平还很高。但是你可以学一学自己造个轮子啊,找个简单但是你认为写的很好的库依葫芦画瓢
|
15
ZztGqk 2020-05-29 00:10:23 +08:00 via iPhone
看了下描述,建议先看一下 SICP,B 站有课程。
|
16
Hieast 2020-05-29 00:35:07 +08:00 6
算法就是指解决问题方法的清晰描述,我认为分布式网络的一致性算法、传输层的拥塞控制算法甚至量子计算机专用的退火算法都属于宏观上的算法,但是通常所指的算法是使用通用程序语言求解一般数学问题的方法。
计算机解决一个应用问题的方法就是 1. 把应用问题建模成一个已有算法的数学问题 2. 实现该数学问题的算法 3. 把应用的参数传到算法里。 业务架构师工作重点在第一步,算法工程师工作重点在第二步,开发工程师重点在第三步,这就是为什么很多人感觉自己只是调包侠。 实话说恰饭的话用不上算法,会用顺序选择循环把参数传到合适的包里就能恰上饭了,但是既然你想学,那就说说我的看法。 钢铁直男的学法是先学离散数学,熟悉计算机领域数学问题的描述方法,然后啃「算法导论」,能啃完前四部分应该就超过大部分人了。 不那么头铁的方法是找资源更丰富的课程学习,我推荐学堂在线邓俊辉的数据结构,直接送上书的地址,视频、助教、示例代码、OJ 功能齐全。不要担心没有提升,我也没学完就找到工作了,后面就研究怎么恰饭了。就我观察 99% 的人是学不完的。学多少是能力,学不学就是兴趣啦,加油,祝你能打通。 https://cloud.tsinghua.edu.cn/d/902db8d098bc4479b82e/files/?p=/%7Edeng/ds/dsacpp/dsacpp.pdf |
17
impl 2020-05-29 00:41:13 +08:00
如果是小白入门的,可以看算法图解 grokking algorithms
|
18
RangerWolf 2020-05-29 00:42:40 +08:00 1
不知道楼主有系统学习过一些基础课程, 比如 数据结构、计算机系统?
个人感觉好好学完之后,水平上升了一个层次 PS: 我也是自学 另外, 学完这些之后假如您还不需要立即找工作,比如正在读书。 建议找一两个你喜欢的开源项目,先看看人家的代码。如果你能有一些 commit 被合并进去, 以后找工作肯定是一大亮点 |
19
CoderGeek 2020-05-29 01:25:06 +08:00
基础在学校的时候容易学 年轻有精力 考试生啃都可以 后面就会越来越理解 2333
|
20
HeapOverflow 2020-05-29 02:36:09 +08:00
每个语言每个框架都有做出来比较大的 project 吗?光学那么多东西又不用,学的再多有何用?
|
21
djs 2020-05-29 03:16:06 +08:00 via iPhone
楼主数学基础怎么样呢,我现在在看程序员的数学,补充一些然后再学习算法之类的
|
22
findex 2020-05-29 03:21:07 +08:00 via iPhone
编程是一辈子的事。算法其实都不难。关键在于理解。
自学一下计算机原理。然后按照计算机的思路,用数学逻辑方法找最优解的时候就能体现出算法的魅力。不外乎编程语言。 有理论基础,学算法的时候会快很多。 Python 是节约时间,快速解决问题。这是一个解决问题的工程师思路。更好的解决问题,优化算法等,这是另一个思路。 计算机科学才刚刚开始,感觉永远学不完。我也是自学而来的。不要有太大心理压力。也别被什么老板吹牛而被动敬畏。回过头来看看,那些都是毛毛雨。真正厉害的,不用吹,看看历史对他们的评价比自吹自擂更让人信服。 |
23
ranio 2020-05-29 03:54:38 +08:00
语言是相通的,算法是灵魂。伯克利,斯坦福,MIT 的算法课找个对胃口的刷。
|
24
hehheh 2020-05-29 04:31:42 +08:00
算法做做 leetcode 其实挺好的,做 300,400 道,把最起码的二叉树,图搜索,dfs,bfs,stack 弄清楚其实就够了。我觉得对我的提升挺大的
|
25
bojue 2020-05-29 07:54:17 +08:00 via iPhone
计算机基础学科的学习:现代操作系统,算法和数据结构,编译原理,网络
|
26
wuweidong0107 2020-05-29 07:58:06 +08:00
跟算法一点关系都没,你的问题是你没有也不知道怎么建立知识体系。
|
27
hanxiV2EX 2020-05-29 08:10:07 +08:00 via iPad
学数学吧
|
28
MrCurly 2020-05-29 08:12:28 +08:00 via iPhone
老哥大学还没毕业?
|
29
QingchuanZhang 2020-05-29 08:13:38 +08:00
|
30
pkm 2020-05-29 08:58:16 +08:00 via iPhone
《算法竞赛入门经典》《算法竞赛入门经典训练指南》《挑战程序设计竞赛》 配合 codeforces.com 食用
|
31
busfool 2020-05-29 09:04:14 +08:00 via iPhone
找个老师教教吧 然后找份工作
|
32
ifxo 2020-05-29 09:17:30 +08:00
学算法需要精通数学吧,不过觉得很难的,不用学那么多语言,就学一门,各个方面都精通了,怎么可能越学越菜呢,多跟大佬交流下
|
33
monkeyWie 2020-05-29 09:21:02 +08:00
直接刷 LeetCode 吧
|
34
gaigechunfeng 2020-05-29 10:07:17 +08:00
绝对是人才!我虽然本科,研究生都是计算机专业。但真正开始写代码都读研了。
非常后悔大学 4 年都浪费,没有好好学习。 楼主这么早就学习编程,而且还很喜欢这行的话,绝对未来可期。 |
35
Ariver 2020-05-29 10:13:15 +08:00
直接刷 leetcode.
|
36
hackzx OP 十分感谢楼上前辈们的建议,我想我也有了大致的认识。❤️
|
37
hackzx OP 目前大一,电子科学与技术专业。下星期三就参加转计算机科学与技术专业考试。
请问有转专业成功经验的前辈们指点些建议吗? |
38
Coverlove 2020-05-29 10:54:53 +08:00 1
lz 可以啊,年纪轻轻就有 9 年编程学习经验了。我虽然是计算机专业出身,但真正走向编程之路是大三下的实习阶段,现在有些后悔了。后生可畏啊
|
39
24bit 2020-05-29 11:06:34 +08:00
数据结构与算法分析 - xx 语言描述
|
40
wysnylc 2020-05-29 11:08:38 +08:00
下次我就简历加上十年编程经验
|
41
namelosw 2020-05-29 11:16:25 +08:00
大部分工作中其实很少用到算法,如果用的话一般也只是过度设计而已。
找了很多算法入门的资料,其实没有太好的,只能反反复复看一看,最后从适合自己,或者自己感兴趣的入手。 基本上分几类,严肃点的就是 CLRS,如果 CLRS 太复杂就从 Princeton 开始。另外 Amazon 前 CTO 写比较有意思,书名好像也叫算法导论,不过好像有人也翻译成引论,那本书主要专注于数学归纳法相关的算法,可以解决很多问题。 还有就是课,比如 MIT 的 OCW 有 Erik Demaine 教的算法和高级算法和数据结构感觉不错。 还有就是科普向的书,比如上面说的 Grokking algorithms,可以入门试试。 还有就是一些旁门左道,比如我最近发现一本 Common Lisp 的算法书,打算试试。 最后就是一些各领域的不同风格算法,比如分布式算法,比如 persistence data structure 的算法 - CMU 有一本 Okasaki 之类额。 |
42
LoNeFong 2020-05-29 11:18:39 +08:00
看山是山,看山不是山,看山是山, 反复横跳,很正常的
|
43
keshawnvan 2020-05-29 11:50:34 +08:00
极客时间上的数据结构与算法之美
|
44
121121121 2020-05-29 12:07:01 +08:00
刷 acm 的题目
|
45
HerrDu 2020-05-29 13:59:17 +08:00
编程学明白了?
|
46
HerrDu 2020-05-29 14:00:28 +08:00
高纳德 出过一个系列的书,你先慢慢看着。
|
47
Meli55a 2020-05-29 23:19:27 +08:00
兄弟,非得干这一行吗?
|
48
irgil 2020-05-29 23:29:56 +08:00 1
我只推荐我看过的,
先看算法第四版,有公开课。 然后看 csapp,也有公开课。 两个都要做课后作业 。 然后学习 mit 6.828 。 其次你还是学生,好好学线性代数、微积分、运筹学,很有帮助。 |
49
ChanKc 2020-05-30 00:05:28 +08:00 via Android 1
Introduction to Algorithm 。不过这个的前置课程( prerequisites )是数据结构,线性代数(有涉及矩阵乘法)和高等数学(有涉及到无穷级数)
|
51
geemaple 2020-07-08 20:58:04 +08:00
《算法技术手册》/ Algorithms in a Nutshell
《 STL 源码剖析》/ The Annotated STL Sources 《算法心得:高效算法的奥秘》/ Hacker's Delight, 2nd Edition 《数学之美》 《编程之美 : 微软技术面试心得》 |