WebGIS入门实战(12):如何在技术上持续快速成长(发展篇)(持续更新中)

本章将主要介绍一些学习经验和在技术上快速持续成长的有效方式。
WebGIS学习入门指引
再说一下 WebGIS 开发入门需要掌握哪些技术知识吧,避免新人还不清楚的情况。
需熟悉掌握前端的编程语言:JavaScript、HTML/CSS、熟悉jquery工具,然后掌握地图JS库任选其一,详细见第三章节。懂GIS的一些专业名词概念,比如 WMS、WFS地图服务差别,然后能独立做 WebGIS 系统或者Demo开发,比如 第六章节和第七章节的demo实战。有这个能力你是应届生肯定是可以进入一家GIS软件开发公司的。如果是社招无工作经验者(转行编程开发的那种),建议你编程技术掌握得更加熟悉一些,能做一个简单完整的WebGIS系统了(可以不含后端,模拟接口请求,但前端功能也要有一点复杂度),找工作一般都稳了。
如果是互联网前端,要求将不止是以上这些,会有更高的要求,比如ES6、三大框架之(Angular\Vue\React)、数据结构和算法基本过关等。
下边介绍本章主题内容,以下学习方式理论上适用于各个编程开发方向。
制定技术进阶目标,努力实现
从事技术方向,职业生涯路线一般有以下几种:
入门——>初级工程师——>中级工程师——>高级工程师——>资深——>专家(架构师)
入门——>初级工程师——>中级工程师——>高级工程师——>项目经理——>管理岗位
入门——>初级工程师——>中级工程师——>高级工程师(或跳过)——>测试工程师——>高级测试工程师——>管理岗位
入门——>初级工程师——>……——>放弃——>转行
不含中途出来创业的技术出身的牛人的路线,做技术的人未来的基本方向都是以上几种了。做前端开发,单纯写页面和开发业务功能的话,一般大于35岁的几乎没有(保守估计了),因为这类大龄程序员一般工资要得高,并且工作内容年轻人都可以做,优秀的毕业生都可以替换的岗位,前端开发就根本不会招这种大龄的程序员。前端开发人员95%都是在20~35之间的年龄。如果过了30岁你没混到高工以上,那你就肯定会被淘汰。没到裁员潮,优先裁掉的也可能是这些人。
可能在10年后的未来,由于AI技术的发展,前端的页面自动化生成普遍适用后,自动化编程代替较多的苦力重复代码编写工作了。所以,只要你选择了技术开发的方向,就一定要制定好自己的技术进阶目标(也可以说是职业生涯规划),并努力奋斗达到目标。不只是技术工作,所有工作都是这样,都面临着失业的风险,
被裁的人和被时代抛弃的都永远是那些没有适用时代发展的人,每个时代基本上都不会存在怀才不遇的现象(不针对个别),优秀的人总会有市场需求。阮一峰老师写的一本书《未来世界的幸存者》可以推荐看一下。
如何制定目标?
选择上边说的一两个可能的路线,并作出规划,1~2年时间成为中级开发工程师,2~4年成为高工(指高级开发或者高级测试、高级项目经理等),5~8年成为资深、专家或架构师。这个是标准的进度,根据个人的努力和天赋,可能时间不一样,级别越高,差别出入个1~2年还是可以的。
基础是基石,多读书
光有目标规划是不行的,需要努力,光盲目的努力也是不够的,需要了解自身,路子对,步子实,才能走的越来越稳,越来越快。计算机系统知识、网络技术、算法和数据结构等,就是开发人员的的基石,你越熟悉,未来学习任何新技术都会越容易。这些道理大家都懂,也不多说了,介绍一些经典好书,多看多学。
《算法导论(原书第3版)》
《学习JavaScript数据结构与算法》 JavaScript版本的,有中文版
《设计模式》
《代码整洁之道 Clean Code》
《重构 : 改善既有代码的设计》《图解HTTP》
《图解TCP/IP : 第5版》
以上电子书获取方式:gis616(添加备注webgis学习)
以上书籍是计算机编程开发人员都应该去学习了解的知识,也是行业内的有名的经典书籍,这些书籍如果初学者无法理解,看不懂,建议先记下,偶尔回顾一下重新阅读学习,直到读懂为止。懂了他们,你在技术学习上,会比不懂得人学得更快、更好。不懂这些的技术人员,将来必然遇到技术成长瓶颈,进步缓慢,或者对一些技术知其然不知所以然。
日常怎么去学习
短期计划要有
自律是最好的老师,大家都上过学,都复习被考过,都知道学习不容易,需多花时间,该学习的时候总得自律拒绝一些诱惑,比如游戏、刷抖音、刷微博、追剧等。将学习养成一种习惯,就如同每天刷朋友圈一样。
有职业生涯规划,也得有年度技术,半年度计划,月计划,周计划。每日计划可能太频繁,不适合坚持,可以指定周计划。举例一个每周学习计划:
·阅读一篇优秀博文并总结
·至少理解一道算法题
·至少阅读一篇英文技术文章
·至少写一个demo
以上周计划4个TODO实现3个就可以认为是成功执行了计划。根据自己的能力情况,认清自己不足的地方,制定适合的周计划即可,比如JavaScript初学者对JavaScript原型链搞不懂,可以制定这样的周计划,也可以是复习计划:
·JavaScript原型链理解
·JavaScript继承理解和模拟实现
·基于原型链的方式实现一个拖拽窗口封装
有计划的学习,强于有空再学。没时间 是一个借口词。学不动可能是基础不行,或者是不适合继续技术路线的方向。学不下的时候偶尔放松调整一下状态重新进入状态即可。
学会找资源
(1)多用StackOverflow
找资源也包括找问题解决方案,编程开发时,时常遇到代码异常,不懂得异常,首先思考,然后才靠搜索找解决方案,建议优先用stackoverflow网站来搜索自己的异常解决方案。
(2)掌握搜索引擎技巧,快速定位资源
找学习资源的话,要掌握基本的搜索引擎技巧,推荐了解个人之前写的文章《这些搜索引擎技巧,省下你的时间和精力》。
(3)善用Github
GitHub 仓库数量已破亿,有大量的开源框架,源代码可以随时阅读,也可以搜到别人分享的demo和解决方案。基本每个技术资源都有一个叫awesome-xxx的仓库,收集的是xxx技术的各种学习资源。比如 awesome、awesome-nodejs。找资源合集搜 awesome 关键技术名称 即可。
对于开源框架或者工具库的技术问题,在Github上对应的仓库Issues列表搜索,找一下是否有别人问过该问题,问题是否被解决了,一般都会有解决方案,如果没有此问题,也可以提issue,等待仓库维护人员回复解答,活跃的开源框架一般都回复的很快。
(4)经验、教程资源
对于某些技术的解决方案,可以搜索相关技术会议,找相关会议的PPT和视频,这种技术会议一般都是一个技术点的探索,或者是技术实践在项目上的使用分享,有些分享都比较有意义,有的可以借鉴学习实践思路,有的可以涨见识。国内外每年都有很多技术会议分享,关注对应的技术社区就可以了。教程资源的话,首先建议找对于技术的官方网站、官方文档需要多了解学习,初学者根据文档无法学习才选择视频教程,比如慕课网的视频教程也很多。个人对于学习能力判定:如果一个开发人员,学习一门新的编程语言或者框架技术,靠看视频才行的话,就是学习能力不行的表现。当然前提是几年工作经验以上,不含入门和初中级的开发人员,不含门槛较高如AI、算法等方向的开发。
能力的锻炼
能力分为三种能力,学习能力,即知识获取能力;编码能力,即用代码解决问题的能力;工程架构能力,即工程化建设等能力。
(1)学习能力锻炼
多思考、多总结,对于一个新的技术点,不能看了别人的文章,觉得看懂了就行了,有些必要的知识点需要自己去实践理解,不然你误以为的“懂了”只是一段时间的短浅记忆,等过一段时间后,你就会忘记,甚至记不起来了。比如 XSS(跨站脚本攻击) 和 CSRF(跨站伪造请求),这两个Web安全性的技术问题,你去找博客看,看着好像就理解了,实际上自己怎么去模拟攻击,以及模拟怎么预防攻击没有动手去做过,过一段时间后,就记不清,或者当面试官问了,自己也答不出也满意的答案,因为自己就是背书一样,简单的看看概念而已,没有学以致用,举一反三的深刻理解。
如果你已经不是刚入行编程开发,那就逐渐培养自己可以根据官方教程文档就可以快速入门的能力——根据官方技术文档,快速学习新技术的概念知识,通过demo实践理解,基本就可以入门了。技术无止境,学习都靠视频,谁给你出教程?越高级越深入的视频教程很稀缺。视频教程最多只能是用来快速接收一下技术点或者是项目实战,给经验不足的开发人员指引方向,本质上学习还是要做自己去实践的。视频学习是需要老师去引导你,文档学习是自己独立学习。所以,你要想快速成长,就要锻炼自己的学习能力,已通过文档能快速掌握一门技术为目标,看自己的学习能力能多久才能达到这个目标。
初学者可以先依靠视频或者别人给的文档教程,这样可以避免一些弯路,等到有能力再按照上边所说的锻炼自己的学习能力。要注意的是,视频教程覆盖的知识点一般都不会很系统和全面,文档和书籍的系统学习是有必要的。
(2)编码能力的锻炼
学习的过程,避免不了多写代码,多写demo。有能力了多写大一点的东西,或者封装轮子。我们鼓励去模仿封装轮子,目的是为了学习,而不是单纯为了造轮子而造轮子。有难度的东西,才会有进步的空间,越复杂的功能实现,越锻炼一个人的编码能力。好的编码能力分为两种:一是不管复杂简单的功能,都可以写得思路清晰,代码结构合理;另一种是真的好,采用了好的设计模式,实现代码精炼。总之,重要的标准就是好维护、易扩展、bug少。编码能力越好,开发效率必然高,bug也少,加班可能就少了。多阅读开源框架或者库的源码,看不懂的话可以降低级别,阅读一些小轮子的代码,比如jquery图片轮播,手机端下拉刷新、上拉加载等JS插件。再小级别的就是别人的demo源码。从别人的工程代码中,学到的不仅仅是源码,有些时候是项目代码结构、功能实现的逻辑思维、UI页面的抽离封装思想、设计模式等。当你能力提升后,你会发现别人代码的不足,有更好的实现方式。这时候,你就更应该找更高级别的开源库去学习了。前端的同学来说,掌握nodejs的话,学习源码可以找那种流行的小的npm模块。每周一个或者每月两个。
学习一些优秀的代码片段,如 30-seconds-of-css 和 30-seconds-of-code。学习大厂的编码规范,如 airbnb/javascript。有了解更好的写法,才会自觉的用更好的写法去实现。
代码地址:gis616(添加备注)
前面提到的《重构》和《设计模式》《算法和数据结构》等这些书籍中的基础理论支撑,会很大程度上帮助你去改善代码质量,也会帮助你提高编码能力,这样你才能解决各种难度的问题。
(3)工程架构能力锻炼
这部分包含软件工程化的能力,比如前端工程化中模块化、组件化、项目结构划分,业务代码解耦分离等能力,都属于工程架构能力。系统规模越大,业务越复杂,就往往需要工程化建设来解决问题,需要前端后端一起制定解决方案。
这些能力如何锻炼呢?熟悉了解前端框架的技术特点,也需要了解后端的技术点,比如微服务架构,前后端分离等。多阅读别人分享的架构和工程化的实践经验总结,自己有能力的时候动手尝试,或者关注大公司的技术分享,学习和了解别人怎么做工程化的。工作上有机会就实践,业余多学习了解,业界中多关注别人的经验分享,然后尝试实践。
如何充分的利用现有的环境资源来帮助自己成长
环境资源 指的是 公司 和 所在技术团队 能提供的资源。
不是每个人都可以进BAT,也不是进了BAT才能学到最好的。每一家公司,可能都是有你可以提升能力的空间,以及可以发挥你能力的用武之地。不管大公司小公司,只要你能学到东西,就会有所成长,也有待在这家公司的意义。当然,你需要去发现,去努力,充分的利用自己可以利用的资源,让自己的成长最大化。试想,别人在大厂都努力了,你在小公司还不努力,差距岂不是越来越大?
初中级或高级的开发工程师,在一家公司里,可以学习的是,这家公司的技术栈,软件工程化中的每个环节,如果有自己不了解不熟悉的,都是值得学习一下。有能力的人,可以去弥补或者提升公司某个地方的不足。也是一个学习+表现的机会。刚入行的同学或者是初级工程师,可以学习的东西就非常多了。可以学习公司的技术栈,公司业务框架的源码,组件插件的源码等。日常开发过程中,使用了框架或者工具库,要有好奇和学习的心去专研一下源码,看懂了,可能就可以有机会参与组件的维护工作,就把握住了机会。至少自己学懂了该公司的主要技术或者核心技术,如果比较优秀,还可以加上自己的理解,进行维护和改造。这种做法就是一边收工资,一边学习快速成长了。
相反的普通人的做法,不管在哪家公司,来什么工作任务,做完就行,或者是做更多的任务,但是每一家的公司的核心技术都没有去深入学习,而是简单的搬砖,这对于自己的技术成长是不够大的。除非你是表现较好被升为项目经理,你恰好也要往这个方向去发展吧。
为什么强调去学习所在公司的核心技术(框架或者库)?因为,工作时间占用了你一天至少8小时,如果你工作的时候不能进一步技术学习成长,你的业余时间学习的其他技术又不能用在工作上,本质上你的技术进步是不够快的。工作上做项目开发是最好的实践。一旦你有做技术选型或者作为主要开发人员的机会,你所掌握的技术能力就有发挥的余地了。另外,公司技术栈都不熟悉,你的工作效率会很高吗?工作完成度质量也会很高吗?那我表示怀疑。
有机会就多和前辈、技术较好的大牛面基,多问一些技术观点或者能得到经验分享。前提是自己有所准备,不会问一下很傻浪费别人时间的问题,这样才能持续的 “骚扰”,对方也能每次有时间都能分享和讲解。
我刚工作的时候就是这样子过来的,我学习了第一家公司的前端JS组件库源码,有问题的情况自己能修改,或者是自己业余能改造或者加入其他的东西,看源码学习的时候,项目开发的过程中,偶尔模仿着写一些东西。我甚至还学习了解了公司自己封装的一套Java框架,了解是如何做到快速开发的,封装了什么东西,前后端交互需要注意的地方有哪些技术要点等,我能深入了解也不多,毕竟Java不是很熟悉,后来走了前端开发方向。我还找了一个前辈作为学习目标,计划用多久可以达到当时他的能力,做到他能做到的事情。
培养自己的技术世界观
互联网前端,三大框架(库):Angular、Vue.js、React 都有各自的优缺点,都能做对方能做的应用,如果你想成为一个高级开发工程师或是技术负责人,是需要具备这类技术的辨识能力,也应该能了解不同技术点的应用场景,从而在技术选型上做出决策。每一种技术出现,都是为了解决某些痛点,使用新技术时,不是单纯因为它新而已,而是为了解决某些问题才去用。和软件架构一样,脱离了业务场景,解决不了业务问题,那这个架构就不是好架构。
培养自己的技术世界观,不只是要学习自己所专注方向上的技术,边沿技术方向也要了解,不只是公司技术栈的技术,一些技术趋势,技术雷达等,都需要时常的关注和了解,是一个量变到质变的过程,也是自身工程能力成长的过程。唯一的成长方式——不停的学习,不停的写代码
本章小结
本章节主要介绍了如何在技术上持续快速成长,介绍了目标规划、学习方式、能力锻炼等,目的是为了给没有方向、或目标不清晰的同学作为指引,希望对你们有所帮助。最后文章中有错误的地方欢迎指出,也欢迎留言讨论。
本章将主要介绍一些学习经验和在技术上快速持续成长的有效方式。
深入学习:gis616(添加备注Webgis学习)
(持续更新中.....)