请选择 进入手机版 | 继续访问电脑版

鹅厂大佬掏心掏肺的分享:我的编程能力从什么时候开始突飞猛进?

[复制链接]
密战 发表于 2021-1-2 12:11:06 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
写作这些年来,认识了许多优秀的小同伴,好比说鹅厂的小北,他在知乎上的一篇回复非常火,借这个时机,分享给我在 CSDN 上的小同伴们,值得读一读,你一定会大有所获。
以下是正文。
啃完一本本书, 做完一个个lab
没有突飞猛进, 一切都是量变最终累积成质变!
但是会有那样一些时间节点,你会显着感觉到自己的编程本领确实有提高不少,可以或许实现更多的想法.
不外诚实说,就编程本领上确实没有“突飞猛进”的感觉,都是逐渐的进步,量变引起质变嘛。
我们都是平常人,不大概像张无忌一样因跌落悬崖,意外得到《九阳神功》,以后开挂,走上顶峰。
只有靠不停的看书、coding、学习优秀开源项目,构建自己的盘算机知识体系,而且在特定的范畴不停专研,这样才华成为一个优秀的工程师。
下面聊聊我自己的编程学习之路吧。我在大学之前完全没有编程履历,高考后,填的专业前几个也是清一色的传统工科,被软件工程登科纯碎是意外。
其时甚至很担心完全没有编程底子的我,上大学会不会跟不上。
厥后大一,第一门编程语言就是学的C语言,怎么说呢,老师讲的,书上写的我都能看懂,但是一让我写一个大的步伐,我就摸不到头脑,不知从何下手,学了半学期,也只能写写课后习题,算算水仙花数什么的。
而且其时对盘算机缺乏系统认识,即便我知道指针就是变量所在,也很难明确它到底有啥用。甚至分不太清数组和指针的区别,以至于会出现对函数局部变量取所在返回这样现在看来很低级的错误。
大一上考完C语言后,我便在心里冷静念想,这辈子再也不写C了,只是没想到的是,厥后这成了我最爱的一门语言。
大一下开始学习数据布局与算法、数字逻辑这些盘算机核心课了,别的,还学了一门其时我看来非常牛逼的语言—Java。为啥说我其时以为它牛逼呢?因为刚履历过C语言的摧残,发现Java丰富的类库,各种方便的工具类。再也没有指针了,酿成了对象引用。
Java我学得很认真,其时还看过马士兵的Java Se教程。自己也用Java写了不少好玩的东西,好比联机五子棋、HTTP服务器等等。这让我第一次感受到编程这么有趣,俗话说兴趣是最好的老师。
在学java的时候喜欢在网上搜资料,但总以为各种博客上的知识过于零散,为了学好Java,我在知乎搜索各种书单,先后看了《Java编程思想》《Java核心技能卷》《Java并发编程》好几本书(不是全看哈,大部分主干章节大一暑假在家自学了安卓,并写了几个app玩,但发现自己不太喜欢客户端,于是大二开学就开始学 Java 背景开辟,从 Servlet 到 SSH SpringBoot,根本上都过了一遍,厥后越来越以为这条路就是在学各种框架,总以为不太对劲。
同时,大一暑假有大四学长学姐在学校广场摆摊卖书,我也买了些,此中有一本就是被称为盘算机神书的CSAPP。大二在上一些无聊的课时,我总把这本书带着,每节课大概会翻个几页,当时候看到汇编、内存管理、存储器条理我是真的云里雾里,因为还没学操纵系统,C语言也学得很差。所以断断续续的看了几章,说不上学到了什么,但让我对这种枯燥的底子知识第一次产生了兴趣,有一种想彻底搞懂它们的想法。为了看懂这本书,又去看了王爽那本《汇编语言》,重学了C语言,由于已经学了汇编,指针对我再也不是问题了,同时看完了《c和指针》、《C专家编程》、《C陷阱与缺陷》,C语言使用得也愈加的熟练。
大二上那段时间,学院里突然刮起全员学呆板学习的风气,虽然不至于全部,但是真的是许多人都在学,于是我也不破例的参加了,先后看了点吴恩达的视频和西瓜书。跟着写了手写数字识别这种入门必做的项目,但是厥后总以为对呆板学习、深度学习提不起兴趣,原因之一就是我以为无法完全掌握每一步,相识每一步背后的原理。这让我学得不安心。于是ML的学习之路也止于大二。
大二是学习内容最丰富的时间,其时室友用 Python 写了抢课脚本,感觉很好玩。然后又跑去学Python,学爬虫。写了一堆爬虫,什么爬豆瓣影戏、知乎回复、抢课脚本,玩了一段时间也没太大兴趣了。
时间来到了大二下,按照课程安排,开始上操纵系统了。于是我又在知乎搜索“操纵系统怎么学”,顺着一堆回复,我发现原来还能跟着别人写一个 mini OS,这对我吸引力太大了。于是我买了一本《操纵系统真象还原》,这本书真的非常仔细,把写 OS 需要用到的前置理论知识、汇编、内联汇编全都给你讲清了。我一路跟着书写,写到了汇编开机打印出我的名字,再到厥后进入C语言写内核各个模块,写到内存管理我就中断了,没有继续写下去,这也算个遗憾吧。其时真的对这个入迷了,为了写Min os我还去看了Linux0.11的部分代码。把我的QQ签名改成了 jmp 0x7c00

(这句汇编就是将跳转到0x7c00这里,BIOS开始引导操纵系统。
于是就这样,我越来越喜欢偏底层一点的东西,所以决定走 Linux C/C++ 门路,然而现在看来确实太年轻了,Linux C/C++ 在鹅厂许多多少也是用来写业务滴。。。
大二下在知乎、牛客网搜索学习门路,我大概清楚了需要看些什么书。于是开始了非常标准的 Linux C/C++学习之路。前前后后看了《C++ Primer》、《APUE》、《UNP》、《深度探索C++对象模子》、《STL源码分析》、《C++设计与演化》、《Linux内核设计与实现》、《Linux内核完全注释》、《effecitve C++》 、《effective modern C++》、《步伐员自我修养》、《Linux高性能服务端编程》、《Linux多线程服务端编程》(知乎陈硕大佬写的)…,顺便还看了点muduo源码,自己模仿着基于epoll写一个reactor模子的web服务器,跟着知乎Milo大佬写Json库,总之,这段时期是写了一些小”轮子“的。
看的书越多,实在你越能找到自己的方向,大三上我就给自己学习定位:深入C++语言(多线程)+ 存储(学习redis、leveldb)+ 网络编程(学习muduo,各种网络编程模子)+ 学习分布式(mit 6.824、ddia、google三大论文等)根本上是沿着上面几个方向去展开学习的,有的看书,有的论文,也有的看博客看源码。总之,知识面在大三不停扩充,自己开始关注C10K、C100K这样的背景服务器开辟高性能、高并发的管理方法。值得一提的是,大三上我们学院有门System Programing的课,讲义就是使用的CSAPP,因此我之前大二草草看完的书,得以再次翻开,这一次我把附带的是个实验也挨着挨着做了,收获良多,有位运算各种奇技淫巧,有Bomb lab刺激的打怪通关、也知道了buffer overflow attack… 尚有实现根本的内存管理等等。印象最深的便是做bomb lab,一个个 phase 的通过真的很让人兴奋,我险些是连着把这几个phase过掉的,固然头发也没少掉。
再到厥后,我拿到了微信实习offer,然后顺利转正。在我大三下拿到实习offer后,我开始做一些国外盘算机课程lab,一方面有钱拿,而且还不低,靠这个我在大三下就实现了经济独立,另一方面这些lab很有意思,对提高底子和编程本领很有资助。现在我开了一个公众号「编程指北」分享编程学习方法、技能相关的一些东西,感兴趣的同学可以去关注下~在这里摆列一些我做过的以为有意思的lab:第一个是文件系统这个玩意挺有意思的,就是要让你自己去设计一个文件系统,好比文件、数据块、目次等等,而且你要提供创建、读写、删除、随机读、随机写等等接口,然后通过 Linux 的 VFS(虚拟文件系统) 机制挂载到 Linux 内核中,然后就可以用系统调用 open、read、write 这些来在你的文件系统上举行读写。VFS 是Linux一个机制,它规定了 IO 接口,然后你去实现这些接口,你就可以挂载在上面。通过这个东西我深入的学习和相识了文件系统,报酬也是非常值的。

第二个是SVC
就是版本管理系统,类似 SVN 和 GIT的,但是相对 GIT 做了许多简化,核心的就是创建分支、分支归并、回滚、commit 这些,通过这个我又去详细相识了 GIT 的实现原理,而且自己写了一个简单版本的 GIT,受益匪浅,也赚到了几千大洋。

第三个是操纵系统的锁实现
这个就是让你基于硬件的原子指令 xchg、cmpxchg 这些实现一个锁,这个需要内联汇编、汇编等知识,简直是硬核!!!做完这个也解开了我对锁实现的一些疑惑。

Web Proxy
这个就更有意思了,要求用 C++ 写一个署理服务器,类似 Nginx 的署理功能,固然,相比 Nginx 弱鸡许多,
但是麻雀虽小,五张俱全,而且老外最有意思的是要求署理服务器对一些图片和 HTML 恶作剧,就是署理服务器随机的在原始服务器,返回的响应里 插入一些图片和文字,因为那天是愚人节。。。不得不说老外照旧很有趣的。

尚有模仿实现 TCP 可靠传输的
这个就更硬核了,人家老外老师就是给力,直接做了一个网站,这个网站你可以通过 TCP 毗连上去,然后你需要运行几个节点,相互发消息,他们之间的消息都会颠末老师的网站,所以通过网站上是可以控制丢包率的,也能控制节点的拓扑布局,要求就是让你基于这种不可靠的信道,做出可靠数据传输!这简直就是翻版 TCP 嘛,超时重传、ACK、滑动窗口啥的都给我上!就是像下面图中一样,圆圈就表现你可达的范围,差别节点形成各种网络拓扑,可以调治网络 丢包率 Loss chance。

固然也有许多写算法的,数据布局实现的,图搜索的,也有做呆板学习、深度学习的,反正各个方向都有。
做这些 lab 真的实实在在的提高了我的编程实践本领,也算是查验了前期看那么多书照旧有效果滴。(顺便还让我大学期间就月入上万。。。所以写了这么多,再点次题吧,我认为自己编程本领突飞猛进就是在看完一本本大黑书、做完一个个lab、写下一行行代码之后。附上大学期间买的一些书,结业的时候大部分都卖了,因为实在未便携带:这是带去图书馆自习室的书(常占位置)



买这些书花了我不少钱,各人都知道盘算机这些书一本就是五六十、七八十起步。大学四年光买书就花了几千块。不外我一直认为这也是我花的最值的一笔投资。下面就是我自己整理的电子书,绝不是在网上那种打包下载的,而是自己需要学到某个方向的时候去网上挨个找的,最后汇总而成。这部分我是会不停把它完善的,当成自己的小电子书库,不多,但贵在精

想要获取这些电子书,访问下面这个链接。
https://codechina.csdn.net/mirrors/itwanger/JavaBooks
最后真心想说一句,滴水穿石非一日之功,学习盘算机照旧需要沉下心来好好啃书、看源码、写“轮子”(注意不是在大学疯狂去写web应用做crud)。逐渐构建起属于自己的盘算机知识体系,然后选择一个专业方向不停专研。固然了,多刷题也可以提高编程本领,所以在这里也推荐一份我看过的谷歌大佬开源的刷题条记:
Github 疯传!史上最强!BAT 大佬「LeetCode刷题手册」电子书开放下载了!
各人以为有资助的话,也可以帮我点个赞,笔芯~ 记得关注二哥哟。
最后,贴一下原文链接吧:
https://www.zhihu.com/question/356351510/answer/1578302782
                                                                    
                                                沉默沉静王二                                           
                                       
                CSDN认证博客专家                                        博客之星                Java 大牛                            微信搜索【沉默沉静王二】,复兴关键字【Java】白嫖1000本英华电子书。我的微信:qing_geee 有任何问题欢迎私聊咨询。
来源:https://blog.csdn.net/qing_gee/article/details/112019648
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )