软件工程师课程
得到高研究校友读书会96期第2/3篇文章
编辑 北京3期郭灵
大家好,我要分享的主题是“软件工程师的学习秘籍”。
首先三个标签做一下自我介绍
到高研院北京6期2班学员
一名高级软件工程师
一家创业公司北京的技术负责人
也是一名“死磕侠“,我决定要做一件事情时,会和自己死磕。比如我决定了早起,现在每天就是六点起床,决定了每天写晨间日记,就会在早上有文字输出;这些刚开始时都非常不适应,后来跟自己死磕,习惯成自然,自己也就慢慢喜欢上了,现在这些都是我生活的一部分。
【正文】
为什么我来给大家分享呢?
刚刚小单给大家分享了大学学习相关的内容,我特别羡慕他现在的大学生活。接下来作为社畜的我,分享一下工作中我高效学习的秘籍。
不知道大家从学校走向工作岗位后,有没有一种学不过来的感觉,常常会因为知识太多,应接不暇而焦虑呢?
我做软件工程师已经六年多了,从一个小白开发成长为了公司研发团队的核心骨干,帮助公司项目解决了很多技术难题;刚开始的时候,我从事的是金融保险相关的业务网站的研发工作,期间有做过运维、架构等,也主导过APP、小程序的研发工作,在去年十一月份左右我跳槽了,在新公司,主要负责前端的研发工作。不知道大家感觉到没有,虽然我还是在IT行业内,但是,我已经在“跨界”了。原先,我做的大多是电脑应用程序的开发工作,后来去做手机App、做微信小程序的开发、再到现在的全面负责前端的开发,这中间的用到的技术也是完全不同的。对我而言,没有办法从已经有的经验中去调取知识点,拿来就用,而是要现学。
对于软件工程师而言,工作之后啊,面对的一个巨大的挑战就是自己的学习能力。
而学习能力对于软件工程师而言,就是底层的能力。就像这个“竞争力金字塔”里展示的一样。
从这个“金字塔”中可以看出,学习能力决定着我们是否能快速地帮助客户解决问题、也决定着我们在行业中的影响力。我想这一点,是每个行业都相通的。
对于软件工程师而言,最基本的要求就是,要写一手漂亮的代码,最好掌握几门编程语言,得非常熟悉自己使用的开发工具,例如写代码的编辑器(常见的大概有五六种吧)、数据库得会、主流的缓存工具也要掌握…这每一项拆开,都是一门非常庞大的学科,开这几十、上百讲的课程都不为过。说实在的,如果真的要投入进去学,还是蛮枯燥的。
买课和买书是我常用的两种获取知识的手段
如果我们想通过看书来掌握一项新技能时面临什么样的挑战呢?
专业书籍,不说别的,光是厚度,就足够让人望而却步了。很多人买了大部头之后,啃不动,只要拿来垫电脑了。我记得HTML5这本书我也买过,每次只能看第一章,因为看两页就困得不行。
看书不行,买课呢?对于一个已经工作了若干年的软件工程师而言,跟着课程学习见效也太慢了,可能还没等你学成呢,你搞不定的工作就被别人接手了。慢慢地,你自己就滑向了被淘汰的边缘。
学习能力如此重要,普通学习方法的学习效果却打问号,怎么办呢?今天给大家讲讲,我是如何打造自己的学习能力的。
我是如何破局的呢?
通常情况下,我们都是从基本原理入门,然后逐步深入,最后再做出一个东西对吧?工作后,如果我们想要快速掌握一项软件开发的技能,就不能再用这种学习模式了。
我的方法是,不按常理出牌,反其道而行之。
在自我介绍时,我说过自己的职业背景,刚开始是做后端的,大家可以简单理解为写程序做数据处理的,后来主导开发APP,这个里面不仅涉及后端的数据处理,还涉及移动端的开发技能,更关注的是移动端的数据呈现、不同设备的兼容性等相关的内容。
当时,我面临的最大的挑战是,我完全没有移动端开发的相关经验。拿到这个研发需求时,真是两眼一抹黑。我如果再找相关的资源从头开始学肯定来不及,deadline是悬在脑袋顶上的刀,时间不等人,它随时可能会掉下来。
给大家举一个我学习app开发的例子来具体说说我的解决方法吧,这一套组合拳+大招,也就是我的学习秘籍。
我先进行了调研,现阶段,开发一款App,有两种模式:
就是专业的那种ios和安卓的开发。
这种的,就是要求开发人员得要熟悉ios和安卓开发语言、开发工具,这我肯定是不行了,放弃!
混合型框架的开发
就是我把移动端APP用到的所有页面做好,然后嵌入到一个“壳”中,这个“壳”是现成的,最后打包完了,用户连这个壳带我们的页面一起装到自己的手机上即可,这个难度比较小,就果断用这种方案了。
方案选好之后,就需要找能用的移动端写H5页面的框架了,目前呢,像滴滴、饿了吗、有赞、淘宝等研发团队,都已经有成熟的开源解决方案了,我们当时选了饿了吗开源的一款移动端解决方案。
找到解决方案之后,我开始使用了我的组合拳里的第一招:
组合拳的第一招
不是先深入到这个解决方案的底层,完全掌握了再用,而是,以写一个简单的小功能为目标,让程序在本地运行起来。
做软件开发的人都知道,我们学一项编程相关的技能时,无论前端后端,大部分人写的第一个demo都是“Hello world”。此处也不例外,在搭建好环境之后,先写第一个Hello world,这是一个好的开端,标志着自己推开了一闪新世界的大门。
一般而言,官方会提供很详细的说明文档,里面有架构相关的、API相关的说明,我先会结合官方文档快速梳理一下,Hello world是如何输出到我的屏幕上的。这是我做后续事情的基础。
花一点时间梳理清楚基本的原理之后,就可以着手写一个简单的小功能了,一般的APP都会有登录相关的功能吧,我们可以在Hello world的基础上进行扩展,写一个最简单的登录功能出来,这个登录功能可能只支持录入用户名和密码和一个【登录】的提交按钮。这里,切忌铺开来做,不用把第三方登录啊、手机验证码登录啊之类的功能考虑清楚了再做,只用你新学的知识,做一个最简单的登陆功能。
我们找的饿了吗的开源解决方案里面,提供了大量的组件,这些组件,就像是积木一样,我们可以用它们搭建出来任意想要的页面效果,这个登录功能也不例外,我们可以用这些积木,美化一下,然后就可以拿给领导看了。告诉领导,看,框架我搭起来了,例子我也写出来了,可以让大家伙儿在我的这个基础上开展工作了。
我媳妇儿是做项目经理的,她跟我说他们圈儿里有个MVP最小可行产品的概念跟我这个有异曲同工之妙。而她这个心理学半仙儿觉得,这样做最大的好处,是给自己和项目组成员以最快速的正向反馈,做起来,用起来,解决了万事开头的难,才能有充足的信心继续走下去。
直面挑战
然而生活的真相是万事开头难,第一步难,第二步也难。挑战才刚刚开始!
下面给大家介绍我组合拳里的第二招!
组合拳的第二招
当我把这个小功能交给大家时,内心也在忐忑不安,刚刚学到一点点能让程序跑起来的知识远远是不够的,我不知道接下来面对的是什么。
此时,到了整理相关的学习资源,整装出发的时候了。我会买上面提到的那种大部头的书及相关的课程,然后以最~快~速~的方式,把书和课程的索引装入自己的大脑,快速浏览书里面的内容和课程都讲了什么内容,等我遇到问题时,我会以最快的方式调取到这部分储备好的资源,结合第一个“武功秘籍”,辅助自己解决问题。
对,没错,这就是我的第二招:速读速记,只是将知识点在脑子里过一遍,等用到的时候再细究原理。
我上大学时的专业是电子信息工程,出来后,如果是找本专业的工作,我很可能是一个硬件工程师,类似于做芯片的。但是我出了校门之后成了一名Java程序员,后来因为误打误撞,学了前端的知识、学了微信小程序、学了手机APP的开发、还学习了PHP语言,这些知识我现在掌握且运用的还不错。这些没有一个是我想学,然后一头扎进去学,就学会了的,而是,每次我都会有一个具体的任务,在任务中明确了学习目标,通过学习解决问题,不断成长的。这也是我今天想跟大家分享的重点,是我的武功秘籍。
举个例子
在2018年的时候,机缘巧合我第一次接触到了微信小程序的开发,我在刘润老师的进化岛上面认识了几个朋友,有一个朋友是做儿童教育的,想要通过小程序将线下的预约业务转到线上进行,找合适的开发者。当我得到这个信息之后,以最快的速度熟悉了一下微信小程序的开发工具,然后将手中的一个在线预约的小程序模板改为了最小的demo,截图发给了他,我顺利拿到了这个活儿。活儿是拿下来了,后面的开发其实困难是非常大的。我也是通过这套组合拳,边学习边开发边发现问题边解决问题。把这个儿童教育的工作完成了,我也对小程序的开发入门了。
上面几招只是教大家如何在一个专业里入门,想要精通应该怎么做呢?
制胜大招:
夯实基础,探究原理
不知道大家有没有意识到,上面我没有提到如何学习底层的原理。计算机编程相关的,如果你搞不清楚底层原理的话,光在应用层面晃荡的话,学到的都是一些花拳绣腿。我们在工作中,把程序运行起来,写出最简单的功能不算什么。逐步进行深入开发时这些远远不够,这时候,你就该去夯实基础了,要去了解核心原理了。
计算机相关的那些“大部头”书,和相关的课程在此时就可以隆重登场了,你可能需要学习网络相关的基础原理、浏览器原理相关的,因为已经开始在项目中用了,你对应用层面的东西已经有了基本的了解,现在看那些“大部头”书籍、听大佬开设的相关课程时,你就知道它们都在说什么了。同时,我们也会去看开源方案中的源代码,把握住我们涉及到的每一处的底层逻辑是什么。
软件工程师解决问题的能力从何而来?大招就是能通过自己的学习,夯实基础,打通计算机底层的奇经八脉。这样在遇到问题时,才能有一副火眼金睛。
与你有关
我们在做软件开发时,并不是按部就班地先学习书本上的知识,然后再去项目里面使用这些知识的,在很多短平快的项目中,这种学习完全没有什么价值,也会让我们错失很多良机。
我们都是先有一项具体的开发任务,带着任务去学,边用边学,边学边用,用起来之后再去补充细枝末节的底层知识,最终把这个知识图谱给一点点填充起来的。以前,大家都知道的一个概念是学以致用,学校里面老师也是这么教的,但是,我今天想说的是,先用起来再说,先跑起来再说,用中去学,学以致用,效果会更好。
之前,有人在社区中问,如何才能提高自己的写作能力?极客时间的创始人坚强老师的回答是,先写100篇试试,那想学写作的人,应该做的就是,先写起来,哪怕是每天一句话的输出,有做到吗?我看到这句话时,当即决定,开始我的写作输出的练习,从2020年下半年开始,我已经在极客时间的“部落”和“写作平台”中进行了大量的输出。看了一下我的数据,光我自己统计的已知数据,有400多篇的内容了。
在经过了一段时间的输出之后,我买了吴军老师的写作课,也买了极客时间的写作课专栏,来进行自我打磨,现在虽然算不上写得多好,但是,乐在其中,并且,也成了极客时间的社区签约达人,获得了一笔小的收入。
【感受与总结】
今天来这儿分享,对我而言也是一个不小的挑战,当众演讲是我给自己定的一个小目标,我平时也会看很多演讲相关的内容,但都抵不上我真正自己上台分享一次。
所以,爱学习的你们,不管内心想学什么,先动起来再说。想学习写作的,可以找一个秘密基地,开个账号,写起来;想提高分享能力,可以积极参加像精读社这样的活动,打磨自己。
以上就是我今天要分享的全部内容,对你有什么启发?
我的秘籍,希望也能成为你的秘籍。谢谢!
2020年【猫头鹰读书会】视频号开启,马上关注精彩不断!
声明:本公众号所发稿件、图片、视频均用于学习交流,文章来自网络或者益友投稿,版权归作者所有,如涉及作品内容版权和其他问题,请及时与我们联系删除。