原文载于睿思BBS:http://rs.xidian.edu.cn/
看过这篇文章后,自己也有一些感悟,随笔写一下:
- 我刚来西电的时候(17年),那时候客户端还是风头正旺,实验室很多同学都在搞客户端;不过很快,19年、20年开始,技术舆论大环境上都在唱衰客户端,前端跨平台开发越来越火。一面是all in 前端,一面是头条阿里等大厂重金招客户端;未来是怎样,无法罔下结论。
- 非科班出身,万事开头难。在西电这种全民计算机的氛围下,很多很多像我这样的人,之前学的是通信、或者电子信息、或者物理光电、甚至英语文学等等,靠自己自学技术,走上码农的不归路。但是万事开头难,一方面要兼顾自己的专业“无用”的专业课,一方面要挤出时间追求技术,中间经历的磕磕绊绊、迷茫无助,回头看,有心酸也有成就感;后来我去华为和百度写代码,也从未觉得自己比别人科班的差。这篇文章的作者很详细写了当时他的心路历程,很形象生动,值得一读。
以下是原文:
目录
前言
第一个阶段:直接上
第二个阶段:回头看基础
第三个阶段:做项目,广泛的看,看到的用
第四个阶段:回头细看基础
前几天机缘巧合,竟然又需要动手写一个安卓app,却发现读研三年没搞过,早已经忘得一干二净,当时学的时候比较新的api,现在都已经@Deprecated了。
那就起了点感怀历程的意思,翻出来旧硬盘,还真就找到了当年自己一点点写起来的小玩意,有点意思。又见网上不断有人问如何入门如何入门,干脆大言不惭,来分享一下当年入门时候的点点滴滴。名为回忆的碎碎念,其实就是一个躺在平台期闲的无事沾沾自喜的死胖子罢了,还望大家不要拆穿。认出我的朋友们也请不要戳破啦~
我是野路子出身,就靠自己埋头硬干。大一下学期(本科14级),受学长影响,自己开始学安卓。后面两三年一直做一些小东西,也靠这手参加了各种国创、互联网+之类比赛。大三下开始准备考研,也因为在这个方向遇到了困难吧,居然选择直接归零,开始学java web。读研之后更是想不到,又从一个稀奇古怪的方向从零开始,找工作最后又是一个新方向,这些也就不必说了。
现在回想起来,如果打算找java方向的工作,我觉得写安卓是一个很好的入门方式——当然,我说的还是原生的使用java开发的安卓,各种前端框架做的跨平台开发我并不懂,实际上这也是我当初逃离安卓的重要原因。面对着自己熟悉的东西有被淘汰的趋势,发展的方向自己一窍不通,又不想激流勇进时,最容易放弃了。
很多人认为安卓很简单——多半也认为前端很简单,我以前甚至也会去辩解安卓和前端不一样…其实深入了当然都是学问,但是安卓入门的确很快。所见即所得,这是前端入门的优势,安卓可以有;数据的交互、多线程的使用,这是接近后端的东西,安卓也有;安卓还特有的,对内存的优化、兼容性,等等。
下面这些就是自己的一个回忆吧。
我开发的第一个app是一个音乐播放器,2015年上学期,大一下。当时学长有意引导吧,让我试下一周写个播放器出来。可是我又不会java,又无人来教,那只能自己硬上。
万事开头难。对着java教材啃了一天,跑去问学长,对象到底是什么?和类什么关系?结果学长说,现在不要纠结这些东西,先学着,用的多了就懂了……
硬是看了两三天,把java基本语法学个差不多,边写边百度能写出来个函数没error了,觉得我行了,上!当时早呀,安卓开发主流还是eclipse+ADT,android studio才0.x还不是稳定版,搞好sdk、配好环境可能让我百度了几十页历史记录,被坑爹的wall搞的半死不活,甚至接下来几年一提起这事我都是愤青状态。不过想起来,当时自己可是一窍不通,就靠着百度搜索硬是搞定了,也是佩服当初这份铁头牛一样的朝气,现在是一点没有了。
开始写了就简单了,直接上手做,什么不会搜什么,要用什么搜什么,要做什么搜什么,总之遇到问题就搜,网上找答案。这样学起来很快的,也就一周,我就和学长得瑟,播放器出来了,能播放能暂停,自己还是有点厉害的嘛。虽说是万事开头难,可也有好处,第一步走出去了,后面的就顺了,起码自己心气有了、信心涨了——然后就该接受打击了。
这个打击相信很多初学者也会遇到,其实想起来,就是自己想的太简单,以为搞安卓学个java就行了,以为前端学个html+js+css就行了,而且自己学了点java还真搞出点东西之后,飘飘然下,一下子发现自己其实还是山底,一下心态就崩了。
我想给播放器加个本地歌单的功能的时候,发现自己要去学一个叫sql的东西,而且那玩意我看不懂,我甚至看不懂数据库是个啥。那天晚上我在礼仪广场那个晃啊,最后在旗杆前面台阶上坐着,趁着天黑没人瞧得见居然哭了,真是说不出口。不过好的是,自己崩溃完了,心一横,把这再学了!对,可能当时怕是以为把这也学了就都行了…
总的来说,这阶段就是一个字:干!动手写起来,才能慢慢上手,才能学会,死看书、刷视频,不顶用的,码起来才是硬道理。码个几百行就能入门,几千行就能熟练,上万行了在学生里就是不错的水平了。
这里还不得不提的,很多人是喜欢照着视频课程学的,我对此并不是不认可,只是我当时学的时候这些东西还没有现在这么极度火爆——当然也不是说没有,所以我一开始的习惯就是不看这些的,睿思当时就有学长上传的自己录制的安卓入门视频,我还看过。照着视频学,或者照着那种跟着做项目的书学,毫无疑问,对入门者极其友好,很快能对基本知识了解个七七八八,但问题是,既不会遇到/想到课程之外的问题,也难以学到课程之外的知识,也不会去找课程之外的方案。所以,脱离了新手期,这种学习方式往往就不容易得到很好的提高了,除非能学的时候真正自己去思考、去拓展。
自己直接动手做,遇到问题现搜现学,这个过程在最开始是很煎熬的,甚至可以说是低效的,它需要自己去试错、自己去辨别,可能搜到的全是垃圾,可能搜到的代码试了半天才发现跑不出来预期结果,也可能发现搜索一天没找到和自己遇到的问题一样的(顺便说一句,这种棘手的问题,往往是小问题,很初级的那种)。但是这样也有好处呀,能看到不一样的实现,了解到更多的知识点——虽然可能很多方案不好,不如视频里看到的直接有效还高大上,但这是你自己的。最可贵的,这个过程自己的搜索能力、解决问题的能力(运用百度的能力)是绝对会提高的,这东西有点虚无缥缈,但我很自信觉得这东西有用,这个过程有用。现在自己有时候也会帮助新手解决点问题,会在心里忍不住想,这个问题很容易搜到呀。
这个阶段快速的趟过去,问题解决了就好,方案能用就行,不必深究,要的就是个学会用。
很快我就发现了自己的问题:第一个阶段直接上手写了,java书才看了几天功夫,不太行呀,我还是相信要有个好基础的。
有了直接上带来的初步使用经验,这个阶段回头看java,学的就飞快了,已经用过了自然就知道看到的有什么用了。这时候就很推荐去看think in java这样的全面的经典书了(但是像当年很火的疯狂xxx系列的书,宛如字典,挨个的列api介绍,我觉得是万万看不得的)。
这个阶段走完,对java整体就有了一个朦胧的认知,起码知道干啥要用啥了。不过这个时期,也不必纠结于比较深的问题,向think in java书里设计到并发控制、泛型、反射这些东西,我当时也并没有认真看,也并不觉得有用,只是知道有这而已。
其实想起来,第一阶段就是把学习曲线压扁的过程,一上来就看think in java,一般人是真的顶不住,不如先自己随便搞搞,不去理会那些高深的东西——所以学长当时和我说,先不要纠结对象、类是什么,还是有道理的。这样第一阶段走完,既建立了信心,又掌握了入门,进入第二阶段就没那么容易快速放弃了。
我在这里停留了大概大二上一学期的时间,快速的把think in java里自己能看懂的东西看了一遍,走马观花,同时期一直在做着小的app。
遗憾的就是从这学期开始彻底不听课了(有意思的是我又怂的很不敢逃课,所以是节节不翘,节节不听)…这东西一旦开始后面想回头就难了,所以大一还能拿个奖学金的我,后面三年就只是局限于及格就好,虽然四年无挂科,但想起来荒废的时间,还是觉得太可惜了。西电人会把能做开发、焊板子的人认为是大佬,看作是一种成功,羡慕不已,自己也受此影响。觉得喜欢软件的路子,本专业知识就是可有可无了,搞好开发也不错,却想不到给自己多一个可能,当时更没有认识到,西电真正的牛人,自己只看到了人家开发这类技能搞得不错,却没有看到人家成绩也很优秀。前三年我都打算学开发、找工作,大三下就大转弯去考研了,那时候才后悔为什么没有上点心学习混个保研,所以还是不能断自己后路呀,多给自己留点可能吧,谁也难保自己以后会怎么选。
如果你真的决心、决心、决心、很确定的,要走一个和你专业不符合的路子,而且已经走了点觉得还行,赶紧转——至少要把目标专业的课程自学一下——最差也可以考研转。我现在最感激自己的就是考研果断转软件,没再抱着边读本专业研边自学的艰难的路。
已经踏过了前两个阶段的自己,已经是一个能完成相当任务的开发新人了,这时候就给自己拔高一下,去做几个项目吧。
这个时期,我做了自己成长最多的app,国创项目,团队有准专业的UI、有后端,我负责安卓,前前后后快两年。这期间是和UI、后端合作的,自己也就开始了解到了与别人的合作、对接。
其实做出来这个app,即使是当时的我,可能也就是两三个月的编码,能持续做两年,靠的是不断去改。那会儿公众号非常繁荣,而且是真的会推送一些知识、技巧的,不像现在一切归于卖课。每天上课的时候我就看公众号,看到这个东西似乎可以在项目里用到,而且比我现在用的实现要好,那ok,下课就去改;看到了一个新东西,自己没搞过,项目能用上最好,不能的话自己写个研究下。
在这个阶段,我没有学过计网、操作系统之类的课程,可是因为app开发的需求,这些已经有了一些应用,日后
这里就是一个盘的过程。把你项目里有棱有角的地方,自己一点点盘掉,遇到问题到解决问题,把不太好的改成比较好的,即为重构。等到全是晶莹剔透的包浆了,自己的修炼也就又大进步了。
项目怎么来呢?自己有点子了就立马开始写,不是要做成成功的产品,主要是为了练手;参加些竞赛,去做开发,不光多了项目经历、学点协作开发,还能多点奖项。另外,当时自己没能迈出的步子:西电很多工作室,既能得到项目锻炼,又能搞点小钱;有机会了去实习,实习经历对找工作就是大杀器。
这时候千万不要固步自封,千万不要沾沾自喜,多和人接触,看看别人多牛,就知道自己还差得多,还得赶紧学啊。还不得不说的是,不同学校之间差距很大,即使都是西电,不同院甚至同专业几个班,学习氛围都可能差别很大,多看看才见识到,自己一段时期就是沾沾自喜却不知道自己就是鸡头而已。
其实走到这个阶段,是因为自己迷茫了。
大概到我大二下、大三上这个阶段,安卓开发已经过了最初稀缺的阶段,到处都在唱衰市场饱和,前端跨平台开发又火热,我是既担心工作机会少,又不想把已学的扔个七七八八,去了解下跨平台框架。焦虑了就求进步,于是试图钻研ndk,研究安卓源码,争取做个系统开发,记得买了一本当时推荐度很高的书,剖析安卓系统源码的。然后是一点也看不懂啊,一路走来顺风顺水的我是一点也看不懂啊,光速放弃了。另外不得不说的,几年时间风水轮流转,等到我研究生秋招时候(2021届)安卓岗位居然要靠打出零基础的招牌来招人了,我甚至投某公司java后台的时候被hr沟通能不能转安卓,能就面试不能就直接把你挂了…
所以渐渐意识到,自己之前觉得学得快,那是自己都在表层游荡,并且在有了一定基础之后就开始刻意的回避自己不会的东西,鲜有提高了,所以瞄了眼深水区就觉得自己不是那块料了。
这时候不知道该怎么办,也刚好发现java很多东西自己就知道个概念,不会用,就回头再看think in java了,同期还看了effective java,啃了java并发编程实战里面比较简单的前几章。很奇妙的是,看的过程经常会有恍然大悟的感觉,或者似曾相识的感觉,因为我是先动手再看理论的嘛,所以没能让理论指导实践,反而是大量使用中揣摩到了一点点意思,这时候一看理论,就发现自己想的和理论里的对上了。所以一直觉得,大量的使用才能理解知识点,才能领悟。
其实在第三个阶段,如果自己能多走一步,找个实习,可能后来就大不一样了。没能如此,我相信不是能力问题,那只是托辞,就是自身的原因而已。现在马上研究生毕业了,回想自己身边人情况,不得不说,想找软开的工作,实习最顶用。