大学四年软件工程专业的学习经验总结

大学四年软件工程专业的学习经验总结

说在前面

前段时间,在大学四年软件工程专业的学习回顾里,总结了四年的学习路程,从C到C++、到Java、面向对象、设计模式、到C#、Unity、WPF以及PHP、微信公众号、微信小程序等各方面,我都有涉猎;但是毕竟是对学习历程的一个回顾,虽然有体会夹在其中,但是更像是一个故事,经验、反思分布不够集中,所以今天想抛开经历,对自己的学习经验做一总结和反思;虽然算不上技术大佬,但是对编程也算略有思考和感悟如果对大家的专业学习、职业规划能有一点微小的帮助,我就觉得很开心啦~。

目标全栈

坦白的说,我为自己设定的目标就是成为一名“全栈”工程师。为啥是“坦白”呢?因为大家对“全栈”的理解似乎略有不同,为了避免遭到“攻击”,不表态似乎是最好的选择。但是,我选择坦白,并不是为了从宽。试想,连自己的追求都不敢说出来的人,又怎么有实现它的勇气和毅力呢?

在V2EX上有一个何为全栈的讨论,基本上覆盖了大家对“全栈”的所有认识吧: 全栈=全干、只懂皮毛、一瓶水不满,半瓶水晃荡、打杂;甚至有的V友以追求“全栈”为耻; 当然,也有V友认为,全栈意味着能力——将Idea转化为Product的能力、意味着自由——不需要求人写前端或者后端、意味着控制——前后端融会贯通,一脉相承;

我自然是支持和认同后者的,但是并不反对前者,因为前者说的就是事实。甚至和以前自己的情况十分吻合——只懂皮毛;

兼听则明,偏信则暗。有一本书叫做:《Web全栈工程师的自我修养》,正是这本书让我意识到我在追求全栈的道路上,走偏了合理的全栈之路应该是“一专多长”。而自己不知不觉之间,走向了它的反面;

走偏,是说路没走好,并不是说终点选错了。这让我觉得我还能再抢救一下,这也是我选择读研的主要目的——不是为了学历,而是我需要时间重新回到正确的道路上来,学校无疑比公司更能给我时间;

我相信,走到“一专多长”反面的人,不会只有我一个,否则,大家怎么会对全栈有“只懂皮毛”的认识呢?对于此,我承认“只懂皮毛”是所谓“全栈”的常见形态,但是这是全栈的“半成品”啊,是不能代表“完整形态”的全栈的;就像斗破里的焚决,刚开始是黄阶低级的功法,但是它的完整形态会厉害,对不对?只是需要时间进化嘛;另外也希望走在“错误”道路上的人,及时止损,为“全栈”正名;

所以,第一条经验便是:如果追求“全栈”,请务必规划好发展道路,切莫弄巧成拙、浅尝辄止,成为他人“笑柄”;“一专”后方可某“多长”;可参考做法有:

  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. 博主的前车之鉴;

说在最后

接下来的时间里,我会修正自己在大学期间所犯的关于“全栈”的错误;希望自己的“血泪”教训能为大家提供前车之鉴,自己的一些微小经验可以帮到大家~

  • 85
    点赞
  • 256
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值