一点成长分享,关于学业和工作

2021-05-01

等待

今天是五月一号,想起去年五一,自己还在家中上网课,B站上看到BAT大佬的面试经验分享,感到深深焦虑,感觉自己又浪费了一年,什么都不懂,什么都不会,对于人生和学业充满了恐惧,年龄的增长没有显得更加成熟,反而因进步的缓慢而逐渐丧失前进的动力,与导师的沟通后,找到一点前进的方向,打算先进学校做院长的项目,且做且行。

时间推荐到去年的六月份,因为疫情的缘故,学校还在封闭管理,不能组织人员过多的聚集会议,于是进入院长的大项目组后所有事情都是通过网络会议进行,还是要说一个小插曲,线上的第一次沟通需要统计个人意愿,喜欢做哪个模块,我只深入学过一些java,而且还无实际项目经验,遂将自己的意愿全部填写为java,可事与愿违,python模块无人做,小组长推荐我去做python,简单考虑后答应了。现在想来不应该答应,什么都想做的结果就是什么都做不好。我最终还是接受了python端的任务。

自学过一点python,本以为熟悉基本的语法就够用了,现实却是残酷的,缺少了工程思想,代码改来改去,自认为是一坨shit,好在自己探索实现了项目功能的0到1,心里想着有时间重构,却一直拿不出时间,或者说懒。

19年刚考上研的暑假,曾参加了NK的暑期实训项目,和一群大三的学生一起做web培训项目,由于对java缺少系统接触,都是一知半解,讲师的水平现在看来可能也就那样,应该远远达不到互联网大厂的水平,但那时的我对一切充满了好奇,虽菜但喜欢。

发现

到了九月底,项目已经做了两个月有余,自己深知遇到了瓶颈,以为学到的东西和付出的时间不成正比,计划寻找实习,开始了刷题背八股的过程,python做的最多,却只能找java开发,一是因为python岗位太少,二是深度学习的理论知识过于肤浅,大多源于tf的官方文档,自己所作的不过是组合再生产。

断断续续找实习来到了十一月份,经历了不少的远程面试,最终拿到几家offer,与导师和院长进行了一番的沟通之后,感谢院长和导师同意我出来实习,自然在学校所作的东西也与我无干了。

新的开始

滴滴的实习比想象的要顺利,首先要要感谢我的学长和各个同事照顾,包括但不限于fangge、eric、weihong、xiaoxu等等,让我从java转向go的过程中少走了很多的弯路,融入同事的关系中变得更加自然,这里要特别感谢eric,是他让我对自身的不足有了更加充分的认识,基础扎实,为人谦虚、平易近人,任何问题都能给出答案,可见平常思考之深,更重要的是我从他身上学到了哪里需要提高完善,以及学习的方法,需刨根问题,或者向陆游所说的,”纸上得来终觉浅,绝知此事要躬行“。实习的过程中让我深刻认识到自己以前的知识多么的肤浅,没有经过深入的实践,总是想当然,源码看的远远不够。

func main() {
    fmt.Println("I start my practice here")
}

提升

这里我想谈一下我对学习语言的感悟,python我停留在使用,源码更是未怎么看,只停留在博客和在线资料截断,java虽然用得到最多,缺基本停留在刷题阶段,rt包源码几乎只看了面试考点,而底层的输入输出未曾深入了解,网络包更是停留在课本上,导致出了一堆笑话,可能同事也会想,我是怎么招进来的吧~

从公司接触go的项目开始,我逐渐理解了为什么都退件学习一门语言要去看它的源码,因为源码中不仅有该语言的编程思想,还融入了各种的工程设计模式,如代理模式、装饰者模式、责任链模式、工厂模式等等,尤其go1.14 之后的版本,采用了完全的自举编译,也就是说所有的一切都被包含在go的sdk中,在做工程的期间我看了net、io、buffer、bufio、database等的基础包,到现在也还在持续的学习源码包,收货颇丰,以前死记硬背的知识,和各种协议都在源码中找到了对应的部分、感叹设计之精巧、语言之优美。

这些编程思想具有通用的地方,我可以通过go的实现联想到java的实现,只要计算机的底层架构一样,那么编程的不同只是因为语言特性的不同而出现一些小的不同,这样不管我以后使用哪种语言都能够快速上手

这里举一个小栗子: 一次我和eric探讨web中的forward和client,我结合java中的一些似懂非懂的知识,说forward是协议中的标准,eric打开了rfc文档,仔细查找,结果当然是我自己套用了刻板知识。这个过程中我才发现自己以前对client和server根本没有清晰的认识,羞愧难当

再出发

在滴滴不知不觉也马上半年有余,感谢滴滴给我成长的机会,前一阵学校群里发了好多暑期实习的信息,我也顺手准备,将之前做的项目和知识进行了一番总结,查漏补缺。

令人可笑的是,我当初用java找到了go的实习,如今用go找go的岗位实习,却基本全军覆没,只拿到了华为的c岗、阿里云的java岗(B+)、以及字节的java岗位,如今的我已近对语言没有恐惧,因为底层的原理不外外乎io/netio、container、基本的数据结构,了解这些,就能cover大多数的需求,剩下的看源码都能够解决。

关于offer的选择,在滴滴留下来继续写go是一个选择,我还能有很多的时间自己做毕设,以及准备秋招,如果说阿里和字节二选一我倾向于字节,一是因为离我现在的地方近,二是因为我可以在这边把java的相关熟悉再去阿里面试,或者直接转正,毕竟暑期实习的工资都要比滴滴高不少,这样一来,我的周末能够完全自己控制做毕设相关的东西,字节的面试笔试相对来说要更加的难一些,我都是迷迷糊糊做出来的

关于刷题的经验我还是倾向于用go,不用去记住java的好多语法,一个slice能够解决很多问题,但要注意引用的问题,新建变量的时候要记得使用copy操作,或者从新append,先到这里,如果以后有新的情况,会做一些记录,语言的学习也会放在新开的文章中,敬请关注~