那就像一边吐血一边奔跑的马拉松,真是可悲。
——诸星团在你被视为弱者的时候,只要不断锤炼,不陷于自卑自怜,总能成为强者。
——中文男足
一.关于我的情况
也许真正不热爱技术、不热爱代码的我
仅仅为了谋生的而学软件开发的我面目是可憎的吧
然而告别了那个18岁志得意满的少年,转眼自己已经23岁,
到了该认清现实的时候了。
心里也有一些小目标,不甘心就这样一直当家里蹲,这篇博客就当我的技术成长之路的记录,列了未来要学习技术的清单,以一个月为单位,慢慢推进,整个过程时长两年。
二.能力矩阵
只列出了个人技术目标清单,更多的可以移步百度查阅完整的表。
该表只是个人目标。
2.1核心能力
目前能力 | 2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | |
---|---|---|---|---|---|
数据结构和算法 | |||||
Linux | – | – | |||
C++ | – | – | |||
身体素质 | – | – |
2.2重要能力
目前能力 | 2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | |
---|---|---|---|---|---|
计算机网络 | – | – | |||
操作系统 | – | – | |||
内存底层原理 | – | – | |||
编译原理 | – | – | |||
后端组件 | – | – | |||
前端 | – | – | |||
脚本 | – | – | |||
分布式 | – | – |
2.2应掌握能力
有迫切的需求。。。。。。但还是恰饭重要,饭都恰不起了,谁还有心思弄这个。
你还不够强你还不够强你要提升自己你要提升自己你还不够强你还不够强你要提升自己你要提升自己你还不够强你还不够强你要提升自己你要提升
**
不要浪费时间在看别人博客
不要三心二意!!!
不要刷意义不明的题目或比赛
除了休息,不要躺着
不要被外来信息干扰!!!
不要放弃希望!!
不要放弃希望!坚持你的路线走下去!!
**
三. 推进程度
研一上半学期有五个月,9.6日开学,正式开始工作在9.16
2021.9.16-2021.10.4 - 第一个月
第一个月目标:
1.算法基础刷完,算法提高刷完动态规划、数据结构。
2.linux入门,完成acwing上课程和作业。
3.leetcode一天两道,30分钟内练习,本月结束写够30道题。
4.C++primer学习,每天看书。
第四周 :9.29 - 10.7
目标:1.本周刷完算法基础课第一遍,每天刷一章。
2.学习人工蜂巢算法。
3.C++primer前六章,每天一章,带课后题。
4.这周linux基础课跟上直播进度
10.7国庆后的进度和总结:
1.算法基础课基本完成,有少量题目仍未完成。
2.C++primer未开始,进度被打乱,和导师开会之后没有稳住阵脚,
在看文献和入门科研以及工作技能提升上面摇摆不定,
导致目标不够明确,效率低下,没有做出决断。
有一天完全在划水!寝室不能呆下去!
目标要足够明确!!
第五周:10.7 - 10.14
目标:1.C++primer看完前五章
2.巩固算法基础课内容。
3.跟上linux课,达到直播进度。
// 4.科研上,10.6开始看深度学习,初步入门深度学习。
总结:C++primer看完了五章,算法基础没有巩固,科研没有开始,
再次生了一场病,这回病得不轻,吓得爸妈差点跑来北京,北京多风寒冷,气候干燥,
一开始没有照顾好自己,要深刻吸取生病的教训,一定要保护好身体。
虽然不断受到外面干扰,而且是反复强烈的干扰,还是坚持住了方向,不能放弃希望,
下周苦一苦,必须开始科研了,算法也一定要复习了,
加油啊,研一一定要撑过去啊。。。
第六周:10.14 - 10.21
目标:1.C++primer 第六章函数、第七章类
2.linux基础课结束跟上
3.完成导师的任务。
4.python数据处理学一半。
5.算法复习啊,再不复习就忘了!
总结: c++学完了函数,第七章类还没开始,linux也只学了一课,
导师那里也是什么也没做,直接装死了,倒是吧numpy和pandas学完了
入门机器学习任务量比较大,这几天有点坚持不下去了,一定要坚持下去啊,,,
第七周:10.22-10.29
这是十月的尾声,进步一两个月看不出来,需要至少半年的积累才能初见成效。
目标:1.把C++类看完,linux基础课必须结束(必)。
2.机器学习实战(三个章节),并总结 (压力略大)
3.找老师讨论,累了看论文找方向。
11月20日补:
一个月没更,因为在找小论文的方向和准备课程考试,同时有一些生活上的小小琐事导致一直没更,计划变动的有些大。。。
目前的计划是周一至周五搞科研和学术,周六周日学一些工作上的东西,实在腾不出手来,
两个月了,能不能下个月坚持下来至关重要。。。。。
研一上半学期工作目标:
- linux能熟练掌握,深入内核,系统编程网络编程。
- 掌握算法提高课,leetcode积累200道题目。
- 在github,公众号上找4-5项目,完全弄懂。
- 组成原理达到面经水平,结合项目理解
- 会使用数据库,能增删改查,配置相应环境。
- 入门科研,能够开展科研,一定文献阅读量。
- C++ primer 第一遍,精过
- linux基础
- 系统编程
- 网络编程
四.他人的路线
参考:奇跡の山
最差的路线
从录取后傻乎乎和大家一起玩,不清楚自己能力与局限,看到什么热门就去学,学了一阵觉得难又退缩了。
(1)研一下学期看大家找实习,自己也去找,结果啥offer都没。
(2)研二
1.在lab搬砖一年,虽然做的事情自己不太感兴趣,但想到毕业证还是咬牙忍忍
2.选了个放羊导师无项目做,又盲目和大家一起打游戏
(3)研三开始焦虑到处投简历,被大厂连环丑拒,最后只好找一家小公司先干着
提升阶段
在有了牢固的基础知识以及熟练掌握各类神器工具之后,后面需要开始进阶学习,并不断的动手提升自己。
首先是基本的进阶,就是一些常见的算法与编程。建议可以通过在各类编程平台上动手练习(例如leetcode),一是锻炼自己的算法思维以及语言的熟练度;其次是学习其它大神的写代码规范**。如果能够坚持一到两年,每天至少一道题的话,会有很大的提高,这个过程是量变到质变的过程**。
其次是阅读学习一些优秀项目的源码,如果能够将一个项目理解到一行行代码程序的话,才是真正的学习到其精华,并且能够加深对其的认识。例如,我们都学过操作系统,知道操作系统基本的线程管理、内存管理、I/O系统等。但都是理解在文字概念的层面,如果能够深入内核源码,去细细品味每一个子模块,每一个数据结构的话,对个人的技术来说是很大的提升。例如,在博主大四的时候,便开始阅读Linux内核文件系统与内存管理相关的源码。当然,当你第一次看这么庞大的项目的时候,一定是一脸懵逼,不知所云。所有人都会经历从不会到会再到精通的过程,没有人第一次看就能直接看懂的。我们要做的是,坚持不懈。在别人看电视剧的时候,我们在看源码,在别人玩游戏的时候,我们还在看源码,在别人逛淘宝的时候,我们还在看源码。所以当别人在最后抱怨太难放弃的时候,你基本已经上道了。
进阶学习
要想在相关领域内学习到最前沿的技术,个人认为有两个最佳的渠道。一是各类开源社区,二是各类计算机顶会的论文。
首先从开源社区谈起,随着我国互联网的发展,越来越多的大公司开始倡导去IOE,因此随之而来的是各种开源项目的不断崛起。而且越来越多的企业开始使用开源软件作为底层服务软件,并且为了更够更加匹配公司的实际业务环境,越来越多优秀的开发者加入到开源社区当中来。
因此,为了学习到这些新技术的发展方向,要时长关注各类社区的动向,最好能参入其中。首先,若想了解到更多的未来发展方向,可以订阅社区的mailing list,看社区中的大牛经常会提出什么讨论,新的patch等。
其次,再不断的学习相关源码的时候,试着做一些优化,可以向社区提patch,来参与其中。对于大家来说,这个刚开始不容易上手,可以选择先从文档和注释做起,比如有一些文档写的不够全面、不够规范,或者有一些必要的地方缺少注释说明,这些都可以作为一个贡献去向社区提request。
在逐渐的更加熟悉后,可以经常关注该项目的github issues,看是否有一些bug需要解决,可以尝试帮着社区解bug,其次也可以针对一些该项目缺少的功能,自己进行开发,向社区做贡献。这是一个很好的学习路径。
其次是各类计算机顶会。各大公司和名校的最新research都会发表在一些好的计算机会议上。要经常关注每年的会议,精读自己感兴趣领域的最新研究。例如,博主是学存储方向的,因此经常会关注一些系统和数据库方面的会议,例如FAST、OSDI、VLDB、USENIX ATC等。例如,经常阅读这些顶会的论文,你将会发现,如今LSM Tree、用户态软件栈、Open Channel SSD、RDMA、NVDIMM等,都是目前近几年无论在企业界还是学术界都特别关心的技术。通过阅读学习这些优秀的论文,一是能够学习到其中精妙的系统设计,二是能够学习到很多表达的技巧(包括presentation、做PPT、画各类图等),这些积累都是特别重要的财富。
其次,无论是参与到开源社区中,还是精读论文,都需要有一个良好的英语基础。无论是阅读、写作、还是听力和口语都是必须的。因此,每天留出额外的时间去学习英语是必不可少的。博主本人在这方面就有些缺失,因此目前仍在不断努力加强中。
核心竞争力
确立了目标与学习计划是远远不够的,态度决定一切。最主要的还是脚踏实地,一步步地去学习。当然,学习的过程中难免会遇到很多困难,最主要的还是坚持不懈,勇敢的去战胜困难。要向优秀的人看齐,不要被外界的东西所打扰。例如,书还没看两页,就去打游戏了。刚配了一个环境,遇到点困难就放弃了,转身去看电视剧了。这样是万万不能的。
要有坚定和果断的意志。以博主本人硕士期间的生活举例,通常周中晚上都是12点、1点睡觉,早上一般都是7点吃过早饭就坐在实验室了。中途从不玩手机、不打游戏、不看剧、不逛淘宝的。但是周末喜欢出去疯玩两天,周末除了特殊情况需要加班加点赶论文外,一般情况周末是不去实验室的。因此,可以做到劳逸结合。但个人非常喜欢技术,曾经,修改一个开源项目,自己琢磨到半夜,在遇到问题真的很难过,但在自己的坚持下,当新的功能可以完全跑起来的时候,半夜回去躺下都激动不已,难以入眠。