纸上得来终觉浅,绝知此事要躬行——半年工作总结,一年学习总结
转行工作差不多半年了,而学习js的时间,则是一年多。一年的时间里,真的学习了很多东西,在这里要感谢一下徐高阳老师和JavaScript社区的各位小伙伴。
学习知识的总结
2017.08-2018.03:脱产阶段学习
- 学习编程先导课-JavaScript编程入门(在花了
超值的199买了入门课程后,开课前补看的) - 学习JavaScript编程入门(认真的完成了每节课的作业,上完课后获赠了《Head First HTML5 programming》)
- JavaScript编程入门结课后按徐帅的推荐开始看犀牛书
- 参加了JavaScript社区的十月每日一学,连学三十天活动
- 学习编程幼儿园—快速攻破编程学习障碍课程
- 学习Web与网络基础先导课
- 学习JavaScript进阶先导课
- 学习Web与网络基础课
- 学习JavaScript进阶课
- 向徐帅请教找工作建议,徐帅建议从前端入手
- 学习HTML5和CSS3(以前学过一次html和css但没有学5部分还有3部分)
- 学习bootstrapUI框架
- 学习VUE课程
- 学习vue文档基础部分
- 准备简历,重点梳理自己学过的知识和完成的作业及项目写到简历上
2018.03-2018.09:工作阶段学习
- 学习使用原生接口写页面交互,重点学习了DOM知识及相关API
- 学习小程序开发,结合徐帅在JavaScript社区里关于小程序的描述及vue的思想来学习小程序开发文档
- 学习Chrom插件开发,重点看了几篇网上的Chrome开发指南
- 学习用原生CSS写样式,边用边学,但一开始重点学习了CSS布局相关知识
- 学习使用Postman测试后端提供的接口
- 学习跨域相关知识
- 学习http请求相关知识、axois库及辅助库qs
- 学习使用chrome开发工具排查接口及样式问题
- 学习自适应布局,小程序中通过rpx
- 了解mpvue, wepy
- 学习使用图形界面给后端搭好的服务器放静态页面
- 学习jquery
- 学习vue文档router部分和vuex部分
- 学习给站点js嵌入广告
- 学习给站点检查sdk及排查木马植入
- 学习如何防御DDOS
- 学习如何防御http劫持攻击,了解IIS的配置方法
- 学习防盗链相关知识,顺道学习了NoSQL和了解redis
- 学习svn操作
- 学习小游戏开发文档,公司后来取消了开发需求
- 学习小程序打包编译及埋点原理
- 实践使用vue-cli起项目,并拆分可复用组件
- 学习elementUI
- 学习UEdit
- 学习Ramda
- 深入学习promise
- 实践封装API
- 学习eslint,后来开发任务重就一直没打开检测
- 学习async/await
- 学习webpack相关知识
- 了解微信第三方开发平台
- 了解grunt、gulp、npm等前端自动化手段
- 学习写windows的cmd自动化脚本
- 此外工作过程遇到的很多问题也在微信群还有JavaScript社区找到了答案。比如大师兄的模仿网易云音乐转碟的css文章;于鑫关于import/export的文章;大师姐的风格的要素等几篇文章;学习JavaScript社区家树的箭头函数的几篇文章;至于徐帅的就太多不列举了~有时间的话,每一篇都值得看^o^。
学习心得
先援引陆游的一句诗:“纸上得来终觉浅,绝知此事要躬行。”
在实战中进步
从去年开始就一起学习的同学应该可以看得出来,在工作阶段里我学习的很多东西其实在先前的课上很多是已经学习过的,比如postman,再比如vue组件抽离。
编程有其知识的属性,但更多的是技术。而技术是需要实践的,未经实践的技术很难说被我们真正掌握了。这里可以从两个角度来说,一个是未经过充分的实践,编程的知识并没有在大脑里形成足够鲜活的有效的记忆链接。另一个则是,没有形成肌肉记忆,不能形成一种条件反射式的应用直觉。所以,要想真正掌握一个东西就要把它用起来。
要用就需要给自己找需求,找那种需要技术去解决问题的需求。尽管跟着例子、跟着demo敲这个也是一种提高熟练度的方法,但这种方法对大多数人大多数时候并不能形成其应用技术的思维习惯。换言之,这不是最有效的技术应用场景。
在我看来,最有效的场景是工作!你永远不知道会有什么新需求新挑战在等着你。没有工作条件的朋友,最好能把尽快找到工作,并在工作中实践为目标。这里的工作不单只给别人打工,创业、解决社会一些问题也是。总之,就是能用技术解决问题的需求。
找不到这类需求的同学也不用急,没有新需求的话,我们找别人实现过的需求来自己做也是差不多的,只是这类需求可能少一些刺激与挑战,毕竟没有时限以及属于明确可以实现了的需求。
先举几个例子,比如为了练习vue全家桶(vue-cli,vue-router,vue-vux),可以使用cnode提供的接口,来自己模仿写一个cnode社区出来。比如为了练习小程序,可以使用豆瓣电影提供的接口,自己写一个小程序的电影资讯小程序出来。还比如,可以自己起一个express及mogodb,模拟豆瓣接口提供的数据,自己把数据拔到自己的接口上,在实现一样的接口逻辑。
值得一提的是,经过这种方式的学习,你最终收获的不仅仅是技能,还有简历上多出的项目也就是你的作品哦。
在路径上努力
路径通往目标,弄清楚自己的发展方向很重要。我并不认为什么都学一些不好,但人的时间确实是有限的,特别是当你有某个有期限的目标时。学习要有主次,而主次权重是和你的具体目标相关的。这就好比打牌,大家手里的牌数是一样的,但是出牌顺序的不同牌局的结果自然也不同,时间也是一样的。
举个转行的小例子吧,如果某个同学是想转行成为一名工程师,想在这条道路上取得一定成就。而且刚好认同我上面提到的在工作中积累是最快的(上面不是这么表达,但意思是一样的),那么他就会以尽快找到工作为目标,如果他想找前端他应该开始收集html、css、vue、elementUI等就业市场,或者说大多数用人公司希望能应聘者具备的技能,而不是将时间一半分给vue一半分给node。
诚然,熟悉后端的前端会有加分,但加分项就是加分项,总是在基本项之后考虑。当然,有少数公司比较看重综合性和成长性,但我们这里关注的是行业的一般状态或者说大多数招聘公司。如果不是对自己的运气特别自信,还是按大概率的事件来决策比较好。
同样的道理,对于工作中的同学也适用。结合自己的中期规划,学会逆向思考。从你想到达的地方,倒退出到当前自己的脚下的路径,一步一个脚印,踏踏实实往前走。边走边调整目标、方向、路径。路自然就越走越明朗。
在交流里学习
编程属于工程学科,所谓的工程学科意思是你不需要从零开始造汽车,大部分时候我们要做的只是组装工作。
老板给你提了一下需求,大多数时候是希望你尽快保质完成,而不是希望你独立完成每一个细节。这是市场竞争决定的,大多数创业公司考虑业务发展的第一要素还是在于又快又稳。这个时候,使用已有的技术实现方法就是优选,除非解决问题的技术方法还没出现需要你们去开拓。
那这种技术实现已经出现了没有?如果出现了已经出现了几种?在已知技术的前提下,我们看技术文档同时做一些适当测试当然是必不可少的,但问题在于你怎么知道有什么新技术呢?
最近看到了一个对“沟通能力”的解释,就是用信息换信息的能力。这个形容真的好,我们在解决工程问题的时候,很多时候并不是技术手段的问题,而是思路的问题。
萧伯纳说:“你有一个苹果,我有一个苹果,我们交换一下,一人还是一个苹果;你有一个思想,我有一个思想,我们交换一下,一人就有两个思想。”思路和思想也是一样的,虽然我们有github、有各大技术app,但他们和技术交流并不冲突。以前是你有一个解决技术问题的思路,我有一个解决技术问题的思路,我们交流一下我们等于每人具备了两个解决技术问题的思路。现在是你逛github、逛技术论坛、看技术app有100个解决技术问题的思路,我也做类似的事情也有100个解决技术问题的思路。如果假设我们关注的方向不同,那么我们一交流,就等于我们每人具备两百个解决技术问题的思路。如果,我们交流的人再多一点呢?
嚯嚯,很吓人对不对?
就我个人而言,这不是空谈。半年来,我有好多次工作遇到问题的时候,跑到群里、跑到JavaScript社区里找思路。JavaScript社区的好,谁用谁知道^o^。
工作心得
软技能
在成为程序员前,我在前公司工作了近六年。离开时,有种悲壮的伤感,觉得过去十年的积累(因为做的是对口专业的工作)一朝尽弃。
后来在学认真学习js的过程,我发现自己大学所积累的东西并没有完全白费,很多知识是互通的。框架、模块化等等工程思想并没有局限在一门特定的学科中。
再后来在工作中进一步发现,过去工作中所积累的东西也并没有完全白费。一方面虽然继电保护、潮流计算这些专业知识凉凉了,但是故障分析与处理、负载均衡这些专业知识背后的软技能却是可移植的,姑且叫bug分析与处理、访问量负载均衡等等。可移植本质上是因为电力系统和计算机系统甚至互联网这个系统还是具备抽象上的可比性,所以自然也存在可借鉴的地方。
另一方便,处理业务上的软技能,比如项目管理、汇报工作、不同专业间沟通、了解客户需求这些则根本不存在所谓的移植一说,他们直接就是伴随一生的技能。
你可能不禁要问,这些和编程工作有关系嘛?
有啊!在敲代码之前,我们是不是要先通过沟通明确好需求?在明确好需求后我们是不是要设计好程序的流程及结构?
在我看来,代码只是用编程语言把我们要解决问题需求的思想方法表达给计算机去实现罢了。徐帅之前说的:“代码只是最后一步。”正是这个意思。
任何工作都分软技能,编程工作的软技能就是这些沟通和思想的东西。而硬技能则是写出让计算机能按预期工作的代码。
那么软技能如何培养比较好呢?自然是工作和交流,当然还有贯穿其后的不懈的学习与思考。
从这个角度而言,无论你是不是在从事编程工作,软技能的积累都已经开始了,无论何时认真对待自己的工作,总不会白费的^o^。
硬技能
硬技能也就是我们敲代码的能力了。
在提高代码能力的路上,我自己也才刚刚上路,需要学习提高的地方也还很多,这里就浅薄的谈谈近半年的一点小体会。
先说句废话:“电脑是没有脑子的”。
计算机和互联网本质就是机器,再说一句废话,机器是”死”的,是不会变通的,所以我们的代码最终都必须遵守一些”死”的规范,这样”死”的机器才会去执行。在遵守这些”死”的规范之上,才会有我们发挥的空间。
小到编程语言的词法,中到api文档,大到各种协议。遵守他们是代码正常工作的前提,这些知识都需要掌握,掌握好他们能避免绝大多数bug的出现。
初学入门编程容易忽略这些最基本的东西,但是当工作后才发现,它们又非常重要。是整个工程的基础,而且掌握了他们其他的东西也自然不在话下。
在掌握好基础后,还需要掌握一些常用的数据处理方法及典型算法,以及对一些常用库的掌握,比如ramda、vaild、moment等。更甚至可以试着尝试函数式编程等等这些提高我们开发效率的高端技能。
提高开发效率对程序员是很重要的一件事情,因为它能让老板更开心,让自己更轻松或者更高产。而老板开心自己高产意味着收入的提高啊!!!
当然,也不能单纯的以开发效率来考虑代码质量。语义性、健壮性、可扩展性、易维护性等也很重要。
语义性,更多的是为未来的自己或者其他合作的同事节约时间,最差不要人家或者自己以后看不懂吧。。。
健壮性,则是保证生产环境的代码别动不动就当机,服务崩掉或者出现预期外结果。给别人打工就要对工作负责,给自己打工就要为客户负责啊。
可扩展性和已维护性要说的就多了,以目前个人浅薄的水平理解的话,就是在语义明确的基础上,合理设计架构,使得维护或者更新升级的时候,代码改动范围及影响范围限制在一定范围内。
这貌似的设计模式要考虑的问题,徐帅又说函数式编程秒杀一切设计模式。而我又还没看,就不继续妄议了,同学们感兴趣的话可以研究下。
写在最后
决定我们的不是我们怎么想,而是我们怎么做。
想学编程?
想换一份工作?
想过另一种人生?
选择只属于去选择的人。
写了好多,希望能对大家有所帮助。^o^
纸上得来终觉浅,绝知此事要躬行——半年工作总结,一年学习总结
https://www.hanwei.ink/2018/09/14/summarize-for-recent-year/