⼤学四年软件⼯程专业的学习经验总结
⼤学四年软件⼯程专业的学习经验总结
⽂章⽬录
说在前⾯
前段时间,在⾥,总结了四年的学习路程,从C到C++、到Java、⾯向对象、设计模式、到C#、Unity、WPF以及PHP、、⼩程序等各⽅⾯,我都有涉猎;但是毕竟是对学习历程的⼀个回顾,虽然有体会夹在其中,但是更像是⼀个故事,经验、反思分布不够集中,所以今天想抛开经历,对⾃⼰的学习经验做⼀总结和反思;虽然算不上技术⼤佬,但是对编程也算略有思考和感悟。如果对⼤家的专业学习、职业规划能有⼀点微⼩的帮助,我就觉得很开⼼啦~。
⽬标全栈
坦⽩的说,我为⾃⼰设定的⽬标就是成为⼀名“全栈”⼯程师。为啥是“坦⽩”呢?因为⼤家对“全栈”的理解似乎略有不同,为了避免遭到“攻击”,不表态似乎是最好的选择。但是,我选择坦⽩,并不是为了从宽。试想,连⾃⼰的追求都不敢说出来的⼈,⼜怎么有实现它的勇⽓和毅⼒呢?
在V2EX上有⼀个的讨论,基本上覆盖了⼤家对“全栈”的所有认识吧: 全栈=全⼲、只懂⽪⽑、⼀瓶⽔不满,半瓶⽔晃荡、打杂;甚⾄有的V友以追求“全栈”为耻; 当然,也有V友认为,全栈意味着能⼒——将Idea转化为Product的能⼒、意味着⾃由——不需要求⼈写前端或者后端、意味着控制——前后端融会贯通,⼀脉相承;
我⾃然是⽀持和认同后者的,但是并不反对前者,因为前者说的就是事实。甚⾄和以前⾃⼰的情况⼗分吻合——只懂⽪⽑;
兼听则明,偏信则暗。有⼀本书叫做:,正是这本书让我意识到我在追求全栈的道路上,⾛偏了。合理的全栈之路应该是“⼀专多长”。⽽⾃⼰不知不觉之间,⾛向了它的反⾯;
⾛偏,是说路没⾛好,并不是说终点选错了。这让我觉得我还能再抢救⼀下,这也是我选择读研的主要⽬的——不是为了学历,⽽是我需要时间重新回到正确的道路上来,学校⽆疑⽐公司更能给我时间;
我相信,⾛到“⼀专多长”反⾯的⼈,不会只有我⼀个,否则,⼤家怎么会对全栈有“只懂⽪⽑”的认识呢?对于此,我承认“只懂⽪
⽑”是所谓“全栈”的常见形态,但是这是全栈的“半成品”啊,是不能代表“完整形态”的全栈的;就像⽃破
⾥的焚决,刚开始是黄阶低级的功法,但是它的完整形态会厉害,对不对?只是需要时间进化嘛;另外也希望⾛在“错误”道路上的⼈,及时⽌损,为“全栈”正名;
所以,第⼀条经验便是:如果追求“全栈”,请务必规划好发展道路,切莫弄巧成拙、浅尝辄⽌,成为他⼈“笑柄”;“⼀专”后⽅可
某“多长”;可参考做法有:
1. 选择⼀门语⾔,做到精通,然后开始学习与其所处地位相对的其他语⾔;⽐如,先做到Java精通,然后了解HTML等前端语⾔;
2. 选择⼀个⽅向,做到精通,然后开始其他⽅⾯的学习;⽐如,先做到前端精通,然后学习后端相关知识;
百炼成钢
“⼀块再普通的铁,经过千百次锤炼,也有机会成为⼀块好钢”。
开学第⼀天,我们院长在欢迎仪式上为我们计算了⼀个式⼦:200*365*4=284800。就是说,如果每天写200⾏代码,那么⼤学4年,代码量就会达到近28万⾏;虽然,从代码量上来衡量技术⽔平就和从代
码⾏数来评估软件质量⼀样不可取,但是,也说明了编程学习中动⼿的重要性:28万⾏代码⾄少说明,⾃⼰对代码的感觉不会很差、动⼿能⼒不会很低;
但是,需要注意的是,“学⽽不思则罔,思⽽不学则殆”。
学习语⾔的过程中,离不开抄写代码;如果在抄写代码的时候,没有对代码的思考,那么实际上就没有任何收获——⽆⾮是⼿动版的“CV ⼤法”,不但没有效果,还没有效率;实在是万万不可取的做法;相反,如果在抄写代码的时候,能够思考当前代码的功能、前后代码的逻辑关联以及为什么如此关联,甚⾄预测接下来可能出现的代码,这样代码不但从⼿中⾛了⼀遍,还从⼼中⾛了⼀遍,既练习了⼿感,也增强了理解,⼀举两得;
⼤⼀上的寒假⾥,我从图书馆⾥借了⼀本关于C++的实验课书籍,然后对着书,将上⾯所有的代码过了⼀遍。很幸运,那本书的质量也很不错,回想起来,其封⾯⼀眼看上去就让⼈很舒服,如此看来,选择学习书籍也是讲究缘分的(跑远了)。特别是在指针的那⼀章中,敲代码的过程中让我对指针以及链表的逻辑有了更深的理解;那种恍然⼤悟的感觉,在仅仅学习理论描述的过程中是不会出现的。可以说,⼿敲代码时的思考就是为了那“恍然⼤悟”的⼀刻。
所以,第⼆条经验便是: ⼿敲代码不可避免,务必让代码从⼿中经过的同时,在⼼中也过⼀遍; 可参考的做法有:
1. 多思考:为什么当前代码块如此组织?当前代码有什么功能,它⽤到了那些语⾔特性?
2. 建⽴清晰的逻辑结构:代码前后之间的逻辑关联是什么样的,它是怎么完成的?
道术结合
道,就是理论,是规律;术,就是实践,是技巧;
当代码量积累到⼀定程度的时候,可能会遇到所谓的瓶颈,此时“抄代码”已经⽆法带来显著的提⾼,也就是在术的层⾯遇到天花板。这个时候,可以选择在道的层⾯扩展——要么扩展⼴度,要么扩展深度;
通过⼀节,建议向深度扩展,如果⼀味扩展⼴度,很有可能就会⾛进“多⽽不精”的错误道路;我在基本掌握了C++语法后,就没有再继续往深处探索,⽽是转向了Java。(贪⼼⼀时爽,⾯试⽕葬场);
简单学习了《整洁代码之道》后,我第⼀次意识到⾃⼰并没有养成什么好的编码习惯;所以,接下来的⼀段时间⾥,我把学习的⽬标转向了设计模式,从变量命名等细微之处⼊⼿,改变编程习惯,从⽽希望能更加优雅地组织代码;
虽然,刚开始学习的时候,因为没有多少实际项⽬的经验,理解起来很难,但是硬着头⽪学习完⼀遍
后也有了初步的理解;此时,再写代码时,就会发现那种“限制感”已经很淡了:理论的加持,使得实践过程更加流畅;
当然,道的层⾯的学习也会遇到“瓶颈”,此时就要靠术的扩展来打破天花板啦——参与实际项⽬的开发、加⼊开源社区等都是不错的选择;
所以,第三条经验便是:道术结合——理论同实践相结合,相互⽀持,共同提⾼; 可参考的做法有:
1. 理论⽅⾯的学习内容:设计模式、编码规范、JVM原理、经典框架、源码、多线程、⾼并发、分布式架构、微服务等;
2. 实践⽅⾯的内容:独⽴完成⼩项⽬、参与规模较⼤的商业项⽬、参与开源社区、维护开源项⽬等;
保持输出
计算机系统完成的主要任务可以抽象为:接收输⼊、存储、计算、输出结果;我们的学习过程也应该是这样;
实际上《如何⾼效学习》⼀书中,将⾼效的学习过程分为如下⼏个环节——获取、理解、拓展、纠错、应⽤和贯穿这五个步骤的测试;
所以,缺少了应⽤,只包含获取、理解的学习过程,是不完整的,⾃然效率也很低;对于编程来说,也是⼀样:获取是选择我们将要学习的内容、理解算是输⼊、扩展和纠错相当于计算和存储,⽽应⽤则属于输出;
通过“输出”,我们可以检测⾃⼰的对“输⼊”的掌握程度,可以加深我们对知识的理解,建⽴更加清晰的知识结构和长久的记忆;
所以,第四条经验便是: 持续输⼊,保持输出,留下曾学习过的痕迹; 可参考的做法有:
开发网站需要什么软件1. 写总结博客;
2. 做⼀些与当前学习内容相关的⼩项⽬;
学习⽅式
对于学习内容来说,只有想不到,没有不到;整体上来说,学习资源⼤体可以分为:视频、电⼦书、纸质书、交互式学习⽹站等;
学习⽅式因⼈⽽异,适合⾃⼰的就是最好的;当我学习⼀项新知识的时候,我会选择:⾸先是学习视频,然后学习纸质书,接下来是电⼦书和⽹站内容。
⾸先选择视频是因为视频教学往往很精炼,不利于掌握细节,但有助于建⽴⼀个⼤局观,对知识有⼀个较为全⾯、系统的了解,这样在深⼊学习的过程中,就不会有“迷失”在知识海洋⾥的感觉;当然,也不排除讲解和细致的视频课程,⽐如慕课⽹的实战课程⼀般都⽐较细致和深⼊。只是⾃⼰学习新内容时会先建⽴⼀个粗略的整体框架,然后再不断完善,此时讲解细致的视频反⽽不利于⽬标的实现;
选择纸质书,算是个⼈偏好吧,可能习惯了阅读纸质书吧,毕竟9年义务教育阶段⾥都是纸质书,所以对纸质书有⼀种莫名的信任;另外,阅读电⼦书也⽐较容易分神,费眼(讲的好像玩⼿机不费眼⼀样的);
学习完纸质书,基本上知识体系结构就已经建⽴了;在巩固所学知识的过程中,⽐较喜欢电⼦书——携带⽅便、查⽅便;⽽⼜不会长时间阅读,所以分神、费眼等缺点也就可以忽视啦;
值得⼀提的是⽹站内容,这⾥泛指⼀切互联⽹上的发布的⽂字学习资料,⽐如前⼈总结的博客、官⽅提供的⽂档,尤其是需要注意的是后者;**不管视频还是纸质书或者电⼦书,亦或是前⼈总结的博客,终究是别⼈加⼯过的输出!**它们或多或少总会有着个⼈的特点,不再那么“纯粹”,⽽最纯正的“输⼊”,便是官⽅提供的⽂档啦。
官⽅提供的⽂档,理解起来不会像其他形式的学习资料⼀样顺畅,甚⾄阅读起来也会存在⼀些问题,毕竟还是英⽂⽂档⾓度,⽽翻译过后的⽂档本质还会他⼈的输出,是经过加⼯的,但是,他保持了知
识原来的模样,如果要深⼊理解⼀项技术,学习官⽅⽂档是不可或缺的步骤;甚⾄⽐阅读源码还重要!
除了注意官⽅⽂档的重要性外,还需要注意的是书籍、视频教学内容的滞后性。也就是说,对于已经长久存在的技术、知识的学习,遵循上述的流程,倒也没有多⼤的问题,但是对于掌握最新的知识、框架来说,这条路却是⾛不通的!
因为,没有前⼈的经验可供参考,因为⾃⼰就是前⼈! 此时也就更能体现官⽅⽂档的重要性;
我们总会有做“第⼀个吃螃蟹的⼈”的时候,这很好,也很值得期待。所以对于⼤佬来说,⼀上来就学习官⽅⽂档反⽽是最有价值的途径,但是这需要积累经验,需要技术积累;怎么积累经验呢?⾃然就是多学习、巧学习、多思考、多积累啦;
所以,第五条经验就是:选择适合⾃⼰的学习⽅式,重视官⽅⽂档的学习,提⾼学习能⼒,升级学习⽅式; 可参考的做法有:
1. 提⾼英⽂阅读⽔平;多阅读官⽅⽂档;
2. 学习之前,谨慎挑选学习材料,做对的事⽐把事情做对更重要(个⼈见解);
⾃成⼀脉
学习能⼒,不是天⽣的,是需要培养的;⽽这⼀能⼒只有在不断的学习实践中才能得到提⾼和锻炼;即学习过程和学习能⼒是相辅相成的关系:学习能⼒需要在学习过程中得到锻炼和积累,学习能⼒反过来⼜会促进学习过程。如果只是进⾏学习过程,⽽不注意提⾼学习能⼒,那么⼆者之间的关系就被割裂,长久下去,前途堪忧;
如何更好滴在学习过程中锻炼学习能⼒?如何利⽤学习能⼒促进学习过程?个⼈拙见是:遵循基本法,体现知识的⼒量。《如何⾼效学习》就是⼀本关于如何学习的书籍,我们⼀直在进⾏学习活动,去从未学习过如何学习,是不是有⼀点讽刺?
所谓“遵循基本法”,就是说按照经过长期实践检验、有科学依据的学习⽅法进⾏学习活动; 我们应该学会站在巨⼈的肩膀上,然后把⾃⼰也变成⼀个巨⼈;
所谓“体现知识的⼒量”其实和前⾯的“基本法”在本质上是⼀致的,就是说应该充分利⽤有关专家潜⼼研究的结果,奉⾏“拿来主义”,指导我们的学习活动;。我们没有必要事必躬亲,有合适的理论,拿来⽤就好了嘛;
有了关于学习的合适的理论指导,再展开学习活动,必然事半功倍;
问题来了,这样的理论在哪⾥?它适合个⼈的“⼈情”吗?前者的话,就我个⼈来看,《如何⾼效学习》
这本书就很不错啦,也欢迎⼤家在评论中推荐;后者的话,就只能是骡⼦是马拉出来遛遛,看到底溜得动还是溜不动啦;
另外,磨⼑不误砍柴⼯,但是能不能把⼑磨好,也是⼀个需要注意的问题; 我的建议是:磨⼑⼀定要彻底。否则的话,不但把⼑给废了不说,还误了砍柴⼯。这⾥所说的不彻底就是对于⼀个理论,如果决定要贯彻,就100%接受,当然可以根据个⼈情况微调,但是枝⼲不能给废了。⽐如⼈家说有六⼤步骤,结果我们只做到了其中的三个,并且没有做⾃⼰的完善,效果就可能不如⼈意了。90%的六次⽅⼩于60%,就是这个道理;
当我们不断提⾼学习能⼒(别⼼急,时间是必要的元素;耐下⼼,半途⽽废还不如不出发呢)后,学习新的知识就会⼿到擒来;只是在我们的学习能⼒形成战⽃⼒之前,我们还得耐得住寂寞,守得住初⼼;
所以,第六条经验就是:在学习过程中注意培养学习能⼒,使⽤学习能⼒反哺学习过程; 可参考的做法有:
1. 注意学习、积累、总结关于提⾼学习能⼒的科学知识;
2. 不断实践,在实践中检验理论;
成也萧何败也萧何
⼤学四年,所得并不尽如⼈意:成绩⽅⾯,不拔尖;编码⽅⾯,不突出。不过,个⼈喜欢写代码甚于考⾼分(嗯,假装⾃⼰能考⾼分);
如果说,有什么出彩的地⽅(强⾏优点,hhh),那就是平衡吧:我没有因为对技术的喜爱⽽放松对成绩的要求。这使得我希望毕业后直接就业,⽽⾯试情况并不理想时,退⼀步拿到了保研的资格,为⾃⼰争取到了两年时间,让我有机会弥补“全栈”道路上的决策失误;但是,换个⾓度,也许正是因为我⼼分两⽤,才导致了直接就业的希望泡汤;从另⼀⽅⾯来看,这简直就是“多⽽不精”在学习成绩和编程技术两个⽅⾯的⼜⼀体现啊!(我:很不厚道地⼤喊:“全栈误我”!“全栈”:这个锅我不背!);
不过这也算是职业规划,乃⾄⼈⽣规划⽅⾯的⼩失误吧。不过,塞翁失马,焉知⾮福?事在⼈为嘛。
那么有没有两⼿都要抓,两⼿都很强的⼤佬?当然有,⽽且就在我⾝边。说不羡慕吧,那是假的;说羡慕吧,到也谈不上;因为,该⾛的路,不还得由⾃⼰⼀步步⾛吗?
所以,第七条经验就是: 华⼭派,你到底站剑宗还是⽓宗?或者全都要? 可参考的做法有:
1. 博主的前车之鉴;
说在最后
接下来的时间⾥,我会修正⾃⼰在⼤学期间所犯的关于“全栈”的错误;希望⾃⼰的“⾎泪”教训能为⼤家提供前车之鉴,⾃⼰的⼀些微⼩经验可以帮到⼤家~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论