一直没有写年底总结的习惯,今年想写,年前懒癌发做,元旦后也一直没抽时间,也好久没写文章了,掘金的活动能够算是一个动因吧,在这个比较重要的一年里,写一篇比较长的文章,也盘点一下平时思考过的一些东西。javascript
首先简单自我介绍,我是2019应届本科生,哈尔滨一所不知名学校软件工程专业,前端开发者。今年事后,多年的学生生涯也到此结束了,盘点一下大学已通过去的三年半,真的没白读。css
个人经历其实就是一个普通人的经历,上大学以前,对软件开发一无所知,不过我选择这个专业还真不是道听途说的“赚得多”,最初的认知来自于我是用的第一部智能手机。时至今日智能手机动辄10+128,也许不多有人能理解 RAM 512MB ROM 150MB的手机使用起来是一种什么样的感觉,那个时代获取root精简系统是多么重要。那个手机我用满了三年,也使我相信我能够作这个工做。而后一切就和我想的同样,我选择到了一个合适的学校的对应的专业。html
刚到大学的时候真的不懂,学校的课程设置的也不是很好,大一上学期只有c一门专业课,借着学校ACM校队举办的集训活动,学校c语言课上的基本内容在十一假期就学会了。而后我就在思考我应该作什么。当时没人指点我,我也不知道获取有效信息的渠道,我只知道我想要在大二结束前能本身写出android app,我只知道我须要先学会java(当时可不能用kotlin也没有flutter)。我买过很侮辱智商的从入门到精通系列的书,固然后来主要是靠看视频资料,懵懵懂懂的知道了面向对象是什么,开始拿起郭霖老师的第一行代码,正式开始学习开发android客户端,前先后后半年左右吧,算是能写本地应用了(不联网那种)。大二的时候申报大学生项目,我也跟着参与了一下,想作app须要后端开发,提及来惭愧,就像我如今看外行人同样,当时一个很外行的我是不管如何也不能理解,你看上去只有一个会联网的app,看不到的是不知在何处的某一台机器上运行着提供服务的另外一个应用。普通用户不用知道server端存在,这并非坏事,可是做为一个开发者,这但是极其不专业了。既然java能进行web编程,那我就用java写吧,省的再学其余编程语言了(naive)。ps:此时我还不知道我要学的那个东西叫后端。前端
java web学习这段路能够说是拐的很偏了,如今回来看这段经历,其实也是少不得的,一会还会再说。眼下,我就要开始学习java web了,当时主要的学习资料就是imooc上面的那些比较老的视频(当时就处在过期的边缘,如今真的不必看了),一边学一边还在想,jsp是否是写页面的吗,这不是前端吗,那我学这个干什么(根本不知道有后端),迷迷糊糊地就这么学着(当时我是抱着留后路的态度,android开发已然趋于平静,由于岗位的特殊性注定了机会不会不少,并且就是那一年小程序刚刚出现,多一种选择何尝不是好事)。后来跟着就是ssh(简单看过而已,没学),ssm,还有封装好的spring boot,这时其实我在java的路上走的已经比较远了,我也已经知道了web后端是什么,先后端分离是什么,我也考虑作一个java工程师,当时大概大三了,写app这个目标已经实现了,我要作java,我开始考虑技术的广度和深度。从jvm原理到框架源码,从javaSE基础到web框架熟练使用,从基础算法到分布式中间件,坑仍是很深的。其实这个时候,接下来学习java发展究竟如何,其实我是不肯定的,可是因为以前的积累,我已经相信了编程语言只是工具而已,解决问题的方式有不少,在须要的时候选择合适的就能够。而真正让我选择前端,大概是从node.js开始。vue
node.js据说过好久了,可是不知道是干什么的,以前也和不少不了解状况的人同样,js确定是前端框架了,后来使用hexo搭建博客,安装了node.js环境,不过并不知道为何要安装。说来惭愧,第一次知道node.js是由于一家培训机构的广告。不少学校都有那种,培训机构来学校作推广的课程,我第一次知道node.js,它是用来开发后端的,它主推的异步流程和我熟悉的多线程同步模型大相径庭(当时并不知道vert.x,Netty是什么,只是据说过)。培训机构我不喜欢可是也不排斥,可是我绝对不认同一点:不是全部的本科学生都没有自学能力,虽然这是大几率,可是否定全部人的论调就是会让我以为不舒服,换一门语言又不是不能写增删改查,试试就试试。我开始了解node.js,我知道学会js以后有机会学习前端,我顺便关注了一些前端话题(那个时候我还记得,当时正是vue做者尤雨溪老师和谷歌angular中国区布道者大漠穷秋老师在知乎大战的时候,没入前端门先认识了前端娱乐圈,ps:后面也真的是,每隔几个月必有大新闻)。学习node.js时候我已经彻底知道本身在作什么了,先后端分离的边界在哪,每一部分须要作的是什么,js语法什么的,已经不存在什么很大的问题了,知道想要学什么,寻找须要的东西去学习就能够了。在学习node.js时候要感谢咱们学校jser club腾哥的帮助,他是Node.js Foundation的成员之一,我是在他推荐后了解的egg.js(迄今为止我最喜欢的node.js web框架,无论阿里出品口碑如何,egg.js绝对是我心中至关优秀的框架,又免费广告了一波,天猪老师大概也不会看到),后来写第一个正式项目时候,参考了腾哥以前写的一个工程。node.js固然不仅有web一部分,各类其余功能我也了解过,我也知道它做为前端工程师的工具,发挥的做用是极其巨大的。时机差很少了,我正式开始学习前端了。java
前端的门槛在门里边,html,css,以及对于一个写过node人来讲的js,入起门来其实很容易。简单看了看基本经典的基本资料图书,以后就开始学习vue.js了,选择vue最主要是由于渐进性学习路线,能够从使用script标签引入开始学习,最后到webpack工程化的学习。学习vue主要得益于黄轶老师的音乐播放器视频(这里也不是广告,不过实名推荐,我心中目前最好的学习视频,没有之一),这个项目基本上涵盖了从零开始搭建完整vue工程的每个方面,吹爆。以后我使用vue和egg独立完成学校的一个大学生项目,这是我第一次使用vue,也是第一次使用egg,一上来就完成完整项目既是实战也是学习,此后算是正式入门前端。我和大多数前端都不同,我不是从html,css开始学起的,我也没有过写静态页面的常规练习,能够说是路子比较野了。我此时彻底坚信也印证了一点,软件工程理论真的是相通的,所谓的客户端开发也好服务端开发也罢,浏览器开发原生开发,它们各有各的特色,可是总能抽象出共通的东西来。再之后就是大三下学期了,从写js开始到入门前不到半年的我开始寻找实习了,机缘巧合吧,去了我第一家实习公司。以后面试了几家暑期实习,也经过了几家,最后选择了我如今的公司。在这段先后的时间接触的新东西很少,可是成长仍是有的,我的开发和企业开发自己有很大差距,创业型公司的实践模式和大型互联网公司的实践模式仍是有必定差异的,等等诸多不便细表。后面的故事就是由于工做时间缘由,我没参加秋招(算是小遗憾吧),拿到了如今公司的offer,目前待毕业入职状态(也可能还看机会)。node
整个大学就是这样的,如今回顾过去,有时候确实会想,是否是有些弯路不必走?有些东西学习了以后对我如今有帮助吗?若是让我从新选择一次我会怎么走?等等一系列问题,接下来也算是本身回答本身,作一个复盘。python
我是一个用情不专的人吗?我是一个看什么好就干什么什么都想作的人吗?我以为我不是,我作的每个决定都有本身的道理,我不能说本身是对的,可是绝对是符合我我的意志的。学习android开发是由于最初的兴趣点,并且时至今日大前端的发展我用js仍旧能够开发android也算是绕了一圈不忘初心了。java后端开发是我冷静思考事后选择的正路,按照我当时的见识和眼界,这是最合适的东西,并且也是常规选择,不能说没干正事。至于为何后来又变了,由于对我而言,放弃java学习前端的缘由之一是我对互联网公司的追求(互联网公司是个神奇的东西,至于我选择互联网公司的道理,一句两句话说不清楚,在此不展开了)。首先一个事实就是,后端语言多种多样,java只是其中之一,并且java普遍应用于传统软件行业,在互联网行业里面,java的应用多可是没有绝对优点,而互联网前端,js是绕不开的。若是我学习的是其余一门后端编程语言,我大概就不会改了,可是java,这是一个在传统行业大放异彩的东西,我要学习一个在互联网行业中有这么高地位的东西。另外一点也是最重要的一点缘由是如今前端工程师所发挥的做用愈来愈大,大前端的概念我的认为没那么夸张,可是是存在的。时至9012年要是还有人认为前端只是切图的,那他是绝对的外行了。若是是曾经的逐个静态页面分别开发的时代,我是不可能喜欢前端的。我以为如今的前端行业是真正的工程,它还在发展,它正在日渐完善,这里面有我想要的东西。react
答案是确定的,不但有,甚至一点也不能少。android客户端开发是用户端开发,其实web前端开发也是客户端开发,它们只是作同一件事的不一样方式,在实际开发中遇到的问题也有不少类似性,好比android中数据变化须要同步ui展现,而web中也须要作这个同步处理,而各类现代数据驱动的web开发框架,其中的一件重要的事就是实现了这个同步过程的自动化,这些东西我在android中理解了在web前端中也就懂了。更重要的一点就是,在那个时间点上,学习android编写的大量java程序,使我从迷迷糊糊到完全弄懂面向对象,而学校最先接触面向对象的课程是在半年多以后。还有一点算是很幸运也多是很不幸,我选择的编程语言java,它是教科书式的面向对象编程语言(至于为何说不幸,下面会说)。android
后来的java web学习真的是走了很多弯路,可是,它的不可替代性在于,经过这段学习我真正弄懂了前端后端都是什么,先后端分离是什么,为何要ajax异步请求,http请求与响应之间数据是怎么流动的......这些东西时至今日也是极其受用的。并且这段时期的大量编码真的是很巨大的成长,能够说,直到此时,我才开始具有成为开发工程师的基本条件。
以后的node.js,若是把它做为后端js的运行环境,可能大多数时候都只存在于我的项目中。可是当它做为前端工程师的基本工具时,它的地位能够说是很是重要了。其实不少时候咱们会须要一些小工具,它们能够用来自动化的解决遇到的重复性问题。这些东西其实任何一门编程语言均可以作到,可是要考虑运行成本,实际上更多时候由脚本语言来充当这个任务。对于其余工程师而言,python是一个不错的选择,可是对于前端工程师而言,js已是一门强大的编程语言了,node.js又可让它走出浏览器,天然成为了开发这类工具的绝佳选择。并且我先学习的node.js,ES6,typescript接触的都很是早,这对于现代前端开发是有很大意义的。
会
谈一谈我对技术工做的见解。曾经不短的时间里,我和不少人同样,认为做为一个开发者,技术就是所有,要不断学习新的东西,提高本身的编程能力。这些话不能说不对,可是如今看来,仍是眼界太窄。
我只是一个还没毕业初入职场的年轻人,我作的话只表明我的见解。我知道不少技术从业者,包括我在内,一直在心中存在一个矛盾:在公司大多数人在写业务,无非就是拧螺丝的工做,而我的成长须要提高技术能力,公司作的很low的工做我不想去作,他不会给我带来什么好处。这个观点不能说错,可是要考虑一个问题,开发工程师创造的价值在哪?要知道对于资本家而言,他们根本不会关注产品开发的过程,一切的收益都会以创造的商业价值为准。诚然,一些框架类库的开发提高了开发人员的工做效率,可是以后呢,高效的开发目的也是要节约开发维护的成本,要用更少的投入来创造更大的价值。从这个角度来看,一个商业化产品,不管是产品、设计、推广、开发、运营,每一各环节都只不过是其中之一而已,若是单纯只经过技术的角度来看一个产品,无异于管中窥豹。
这不表明技术不重要,并且术业有专攻,该作好的事本应该作到足够专业。我想说的是,这种看问题的方式,影响了一个开发工程师的眼界。其实咱们工做的时候只要可以抽象建模,全部遇到的问题最终都不过是UI和数据流的处理。可是咱们为何要去了解业务?为了可以建模,这只是其中的缘由之一。了解业务以后整个开发过程当中咱们能够不把本身当作一个只会写代码的,咱们能够从产品自己出发,思考为何要作?如何去作?带来的价值是什么?这个过程也是咱们思考本身工做意义的过程。
成为前端工程署以前,首先要是一个软件开发工程师,计算机网络,操做系统,算法数据结构等等东西,包括设计模式,软件工程理论等等在学校学的东西东西不能丢了。说它们没用只能说是由于太菜了,作的工做太low以致于根本不须要这些东西。学校教的有时候不够,加上本身学习的,这部分有一个简单的知识体系。
做为前端开发者,首先确定要学习html,css,javascript了,虽然我早期没写过大型静态页面,可是html,css至少是过关的,css3动画写的相对少一些,JavaScript的书我看过很多。本身不是一开始就从前端学起来的,和他们相比基础知识沉淀的时间不够长,,因此在学习的早期基础知识方面投入的比较多,我认为能用原生js思考问题很重要,用不用和会不会是两个概念。
框架工具在工做中主要使用的是vue,固然我以为技术老是用来解决问题而存在的,框架之争没什么意义。我本身比较喜欢写react,纯属我的喜爱问题,本身写东西我就使用react写了。
node.js仍是不能丢的,在前端中主要是各类自动化工具,辅助开发的。node.js作web开发在生产中可能没机会实践,可是若是是我本身写东西玩,我就直接用egg了。
typescript是一个很好的东西,不是跟风,怎么说呢,用的时候起初我真没感觉出来好,多写了不少类型接口定义,甚至一度以为本身是给本身找麻烦。但是当我一旦再回去写js时候,我惊奇地发现我曾经以为没那么糟糕的js原来这样难用(我用过java,熟悉静态类型,可是js些时间久了我以为动态类型也挺好的,直到赶上ts)。用了就很难回去,大概感觉它的到好处的人才会懂吧。
跨平台技术一直是你们的热点话题,目前我写东西主要用react native,由于它的生态相对完整,虽然至今没出1.0,可是有很多生产环境使用的案例,一些常见问题也都有比较成熟的解决方案。flutter是比较热门的,从设计理念来讲,它是更先进的,若是发展的好,可能将来真的会成为主流,目前还很年轻,观望中吧。
以微信为首的各类小程序也属于前端工程师的开发范畴,这类东西我写的很少,若是有须要的话会去学习。
我很乐意去学习函数式编程相关的东西,FP和OOP自己并非针锋相对的,两者也没有谁好谁坏,解决问题的方式不少,选择哪一种须要考虑的点也不少。在公司中天然要统一编程风格,若是是本身写东西,我很愿意适当的使用fp解决问题。对我来讲一个比较大的挑战多是有时候思想被OOP限制了,有些东西仍是要不断地去学习,包括响应式的Rx.js等等。
还有不少值得了解的,graphql,pwa,ssr,electron,webassembly等等,这些东西我会去找机会学习,有须要我也愿意主动去使用它们。要了解的东西不少,人的精力有限,对我而言两者之间的平衡点在于,这个东西是否值得。
目前的任务大概是作毕业设计,写论文。毕业设计中也能够学习react native,electorn等等东西,后面可能还会去了解一些docker等等工具,整个完成提高的可能不只仅是技术能力,还有对于产品设计,对于开发流程把控等等方面能力。而后我会去补充学习一些前面提到的值得了解的东西,随时保持一个比较新的状态。此外还有基础的沉淀。另外一方面就是技术的深度,包括各种工具的底层原理,公共类库的内部实现方式等,这方面的学习一方面能加深对于这些工具自己的认知,另外一方面经过阅读也能提高本身的能力。还有一些性能问题等实际生产中才会遇到的问题,这些东西也是工做以后的一些认识吧,有机会须要提高一下。最后仍是个人观点,技术只是一小部分,要提高本身的眼界。
其实也曾经问过本身,累吗?后悔吗?个人学校很普通,也没赶上相关爱好的组织,身边的同窗准备读研天然也没人和我同路。我本身坚持的动力大概来自于编故事的某乎社区。别人都行我为何不行,我就是想有一天也能够像他们同样轻描淡写的一句--这东西一学就会了,这东西看看文档就能上手,这东西很简单。我知道背后的不易,可是我以为我能够。不过真正到了今天,最后的我什么都不想说了,之后回首往事,我会很感谢今天的本身。(其实这里以前写了不少话,又删了)
最后感谢全部人,还有最爱的她。