为农三载
接触编程到现在已经算是三年有余了。我希望能通过这篇文章来总结我这些年来自己的思考和感悟。
我记得当时报专业的时候,软件工程是放在比较后面的,也不知道怎么就真的到这个专业来了。但当时我还算是有点底子,会那么一两门编程语言,大概能够了解这专业以后是做什么的。况且当时被高中大牛同学带入了前端这个领域,对前端未来的发展还是很有信心的。当时是处于javascript摒除了糟粕的时期,es6也是在当时刚提出。Javascript的灵活性也给了它足够的能力去创造不同的框架,引导我们以完全不同的方式去设计软件结构,想象空间实在太大。Js不论是学、是写还是设计结构,都是让人异常愉悦的。SPA的概念也是让人欲罢不能,很有未来感。所以其实这个意外选到的专业也并不那么让我意外,相对来说我的进入条件算是好的。
一、学习方式
首先谈一下学习方式。在我短暂的人生中总共经历过两种学习方式,其一是先把所有会用到的东西都学会了,指望着能够靠着这些知识过活好一段日子。放在以前,这种学习模式是没毛病的,技术的变化和日子过得一样慢。但是再看看当下的环境,以及我们这个行业。很明显能感受到想要用这种思想活下去是有多吃力了。那么在这样的时代背景下我该怎么办呢。于是一种全新的学习方式开始出现,同时也是我所所认为的最优解。即学习只需要学习到能够了解大体框架,掌握核心概念并且遇到问题了之后知道该用什么关键词去查询即可,这之后一定要尽快开始实践,然后不断遇到障碍,不断解决,靠这种方式来进行剩余知识的学习。同时到github中去看一看一些已经成型的项目的结构设计,实现,再对比自己的进行改进。
有的人会说如此的学习方式可能会致使一些知识的缺漏,没办法对知识有完全的掌控权。那么我会叫这种冲突为科学家思想与工程师思想的冲突,到底是先将理论基础打好了再进行实践呢,还是在实践中构建起自己的理论基础呢。孰优孰劣历史已经是足以证明了,做基础研究大名鼎鼎的贝尔实验室、施乐实验室们渐渐销声匿迹,取而代之的是在生产线上进行研发的英特尔们。之所以会有这样的结果,归结到底还是因为科学家思想是低效的。当然我并非完全否定这种思想,本质上是两种方向。作为工程师,最重要的任务就是将各项新技术通过合理的设计来进行组合,而不是去创造新技术,所以相对来说快速地学习实践来迭代自己的知识会显得更加重要。
二、学校教学
学校的教学呢,课程安排得无可厚非,不糟糕,仅此而已。就像我上面提到的,这个时代的技术更新实在是太快了,学校如果选择去教那些新兴技术,确实不太稳妥,谁知道那些技术什么时候会消失呢?那么学校也就只能着眼于类似软件工程,数据结构,项目管理之类的理论性课程,而这些课程必然要求你有足够的编程能力,那么就再排一些编程语言课,教些看起来不是很新很酷的技术。这就导致很多人认为大学中的教法不太行,不贴近生产。学校的教学方式有问题吗?当然有问题,但是学校没办法啊,它也很绝望,但我也是个好青年,课还是要上的。那么我就要自己来解决这些个问题。首先让我们来思考一下,学校给了我们什么。首先是这些理论科目,不得不说,收益颇丰。但是相比之下学校教给我们的工具就实在是不够用了,光学学校教的东西肯定就不行。所以有时间还是得自己去拓宽自己的视野,学点又酷又新的技术,做点项目。就像这篇博客中对自学以及眼界所做的阐述一样,我们在学校功课之外还得注重眼界的拓宽以及自学的能力。还好之前已经订好了前端这个大方向,所以用起力来也不致于迷茫。
三、对实习的理解
我们在学校学习的除了一些特定工具之外就是理论,学会了却不知道如何组合使用,如何在生产环境中进行创造。培训机构本质上也是如此,告诉我们快去学这个新工具,以后会用到;那还有个设计模式,到时候做大项目的时候有用。但我永远不会知道以后是什么时候,仅仅只是掌握了一坨工具的用法而已,我并不知道如何正真地在项目中去整合它。那么有的人会觉得其实自己尝试着去做一个虚拟项目也是可行的,也可以学会真正在生产环境中是怎样去编写代码的,流程是如何的。我觉得尝试虚拟项目,通过大量阅读文档资料去模仿真正的软件生产流程其实是没问题的,但是难度会比较大。因为这涉及到的问题就不再只是这样做能否达成目的,而是我们能否坚持去做完这个项目。深入学习一项知识意味着要啃硬骨头,必定是要离开自己的舒适区。就算我们再爱创造,再喜欢某个技术方向,这个过程也一定会伴随着痛苦。自制力不是特别强的很可能会放弃。毕竟在OW面前还谈什么编程:-)
那我们再来看一下企业给我带来了什么。首先,在企业中我可以直接地参与到产品的开发中去。也意味着可以去阅读一些已经成型的项目代码,了解软件结构设计的best practice,尝试在企业生产流程中进行协作开发,有实在无法解决的问题还有人可以问。这简直就相当于一大个support team每天和我坐在一块上班啊,不要太爽。(当然能自己解决的一定还是要自行解决,免得影响同事的工作效率。但是该问还是要说,毕竟交流也是另一种创造)那么在企业实习除了能给我们提供上面所说的「诗和远方」,更加显而易见的还是些个「眼前的苟且」。包括优雅的工作环境或者每个月的补贴,这些条件或多或少都能起到一些「兴奋剂」的效用,对于学习还是有帮助的,硬骨头也不至于啃得那么痛苦。
新问题又出现了,什么样的实习经历才算得上有用的实习?这也即是如何选择实习公司的学问。那么真正有用的实习经历应该是什么样的?我觉得真正卓有成效的实习经历在简历中的体现一定不是在「实习经历」这一栏,它甚至可以让你从简历中删去实习经历,省下的空间好塞下你的技术栈,以及你的作品,你的开发经历。实习应当着重于内在的提升。所以说光去思考实习经历有没有用,就好像是去问医生感冒吃药有没有用的同时又不告诉他你到底吃的是腹泻药还是感冒药一样,没有找对关键问题。实习经历的关键在于从实习中获得的东西,而非经历本身。
对于实习,我的结论就是,只要能力足够支持你去加入一些优秀的公司的时候,就一定要加入他们,不要以打基础的借口继续留在学校。而优秀的公司并非一定是BAT这种体量的公司,有几个大牛的小公司一样能让你提升得很快,而且小公司招人难度大且流失严重,有一部分的门槛是放得很低的。加入这些公司的性价比还是很高的。以上就是我对实习的体会以及结论,并不一定准确,若有偏颇,望请指正。
四、职业道路的选择
关于职业道路的选择,短时间来说是前端这个方向,但如果按一辈子的时间来规划就有点不尽合理了,毕竟技术变化极其迅速,十年之后还有没有浏览器都难说了,所以对未来的规划不会定的太长,否则也只是自high而已。一边工作一边关注新技术,再在自己觉得有潜力的技术上去规划,去投入时间。我觉得这才算是比较好的状态。前端呢,如今之所以这么有潜力,主要还是因为个人设备的算力足够充裕,所以相对来说性能就不再那么重要,那么js就开始借助cordova啊,electron啊或者react-native之类的工具变得哪哪都能用,一门语言,所有平台,这样就搞得java特别尴尬了,宣传口号和市场都给人抢去了。当然js并非性能不行,它也有自己的优势,不然哪来这么大市场。高效的异步处理、灵活的语法既是它成为通用语言的结果也是原因。而且前端工程化现在也已经相对成熟了,较大的前端应用也可以高效的进行。es一年一更的标准也在不停地扫清这个领域前行的障碍,所以短期还是很看好这一块的。但是还是像之前说的,不能拘泥于前端这的知识,新生事物也还是可以搞一搞的,万一哪天起床就发现前端消失了呢?到了那个时候要还是毫无准备就完蛋了……
参考资料:
https://www.cnblogs.com/xiaozhi_5638/p/4485805.html