今天是高考的日子,首先祝愿所有高考学子都能金榜题名、旗开得胜。
这篇文章,想讲讲我的一些经历故事,如果你想入行编程、或者在一两年编程经验的迷茫时期。相信这篇文章可以给你带来帮助。
回想7年前,我高考发挥失常,最后只能上了个普通二本,查到分数的那天,天是灰蒙蒙的,就像是我看不见的未来。
后来大学学的是当下比较吃香的编程专业。其实大学期间并没有什么将前后端和移动端分的特别清楚,开的课每个方向都是学的,C/C++、HTML/HTML5、JSP、SqlServer/MySQL、数据结构与算法、Java开发、Android 开发、微信小程序开发、框架应用。这些都是大学必开课程。
那么重点来了,在刚入大学时期,在如此庞大的编程世界里,面对这么多不同方向的编程语言。记住一句话:一定要有自己专精的一门语言,或者说是一个方向。这是在你大学时期最重要的任务
下面进行分析,为什么宁愿放弃一两门学科,都要把一门语言底子学扎实、学精通?
这是编程行业的性质所决定的。以我个人为例,我在大学主修的是Android移动应用端开发。并不是学校的主修辅修,在学校没有人会告诉你:大学学编程,一定要偏科。可以毫不夸张的说,在我的二本院校里,我的同学中,至少80%的人,出了校门根本找不到工作。
不要以为编程行业吃香,工资高,市场需求大,学了编程专业就可以轻松找到工作,轻松拿高薪。那我只好泼你一盆冷水,告诉你,不可能,完全瞎j8扯淡。
市场需求虽说没有前几年互联网爆发期那么大,但依旧是很缺编程人才的。注意,我说的是人才。何为人才?就是在某一领域有着显著成就,或者在所有领域都有所涉足的人。方为编程行业的人才。
你能在大学三年时间成为一个市场需要的人才吗?
你可以。你可以成为我所说人才的前者,也就是,在某一领域有所精通的人。本科三年在校时间,足够让你成长为满足市场工作需求的人才。但你绝对成为不了后者,这里不多做论述,等你了解到编程世界到底有多庞大,自然也就懂了。
下面讲不同工作年限对应的学习方法
以下思路按照我个人所学Android移动应用开发为例。
按照我上诉的思路来执行的话,我相信你可以在大学毕业后找到一份对口的offer。年薪应该是8w-20w不等
假设本科23岁毕业,那么工作的前3年对你来说就是打基础的阶段。在这3年时间里面,你要积累足够的技术底子,打磨自己的技术实力,成为某一个技术细分领域的牛人。
我自己依然记得当年这样的场景:蹲在出租房里面每晚每晚的啃技术文档,在公司连续打地铺干通宵的场景。
只有真正经历过贫穷,经历过苦难的人,才会越早就懂得努力才自己这一生唯一的出路和唯一的机会。忘了谁说的了,大概就是这个理。
学习方法
这个阶段我建议的学习方法是:多敲代码、学会用百度
程序员入岗初期都要有的,必经之路,踩坑期。
你会遇到各种各样的bug,也会有学校没有学过的知识。你会无助,抓脑。都是正常的。要知道,每个人都有自己的工作,别人花时间教你,就得花同样的加班时间来完成自己的工作。没有人有那个义务,帮你debug,教你怎么工作。所以,除非实在找不到问题所在了,再去找老人帮你解决,而且,要虚心,也要记得感恩。
总结一下,初级程序员必备技能,学会用百度,学会自己解决问题,多敲代码,基础要扎实。
按照我的思路走,相信这个时候你已经成功升职为一名中级程序员了。你的年薪应该是20w-40w
当你积累足够的技术实力,例如超过10万行代码以后,你应该形成了自己的思维方法论和自己独立的学习技巧,任何新的技术在你眼中都能迅速的看到技术的本质,快速吸收成为你的知识体系的一部分。
你只要前一个阶段打的基础足够牢固,这个阶段你一定会开始蚕食别的领域,这是一定的。逐渐的不再满足于纯技术领域的探索,而是开始探索技术背后的事情:什么技术在什么样的场合能够发挥最大的价值;技术团队应该怎样构建;技术在公司未来的价值?创业公司对技术的需求?支撑技术的产品,怎样学习做产品?支撑产品背后的运营体系是怎样建立的?商业社会对技术、产品、运营等的是怎样的认知,商业社会有什么的特定规律?也许还有更多…
在这个阶段,积累技术对你来说简直是小菜一碟,你更需要磨练的是思考能力,形成自己的思维方法和知识体系,这将是你帮助你一生的武器。
学习方法
这时的你已经不能仅限于自己能解决自己工作中的问题就行了。所以学习方法不能在依托于百度。技术博客,是你的成长阵地。例如掘金、博客园、简书、CSDN、安卓巴士、云栖社区都是很优质的技术平台,你可以在上面和各种大牛交流学习经验技术。在这个阶段,我建议的学习方法有:
1.坚持写技术博客:中级工程师不只是一味的去做事、学习,其实更多的需要对知识的总结与归纳,而写博客是最好的手段,坚持写博客其实就是对你知识体系的回顾与总结。不说别的,就说一些IT界业内的大牛一般都有自己的博客,那些博客文章才是你知识沉淀的最好见证。
2.GitHub:在GitHub上参与开源项目,GitHub堪称程序员必备,聚集了全球各个领域的程序员,在上面你可以直接阅读Google、Facebook顶级公司的开源项目,可以一睹顶尖工程师的风采,在这里你绝对打开了另一扇世界大门,你可以阅读大牛源码,并试着贡献自己的代码。GitHub并不仅是一个名片,更是进阶必备神器!
3.阅读Android源码: 理解一些高级概念Java语言进阶了,同样关于Android你也需要进阶,并不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理。
如果你坚持了我上述的思路,相信你已经是一名高工了。你的年薪应该是40w-60w
这个阶段,最关键的是了解自己。知道自己擅长什么,自己的优势在哪里,怎样才能够最大化自己的价值,同时也知道自己有什么重大缺陷。
未来是扬长避短还是不断避免自己的缺陷,这些需要提前想清楚。一旦想清楚,想透了,就剩下行动。你可以选择避开做自己不擅长的事情,不勉强自己,不让自己处于对自己不利的环境。当然,你也可以选择不断补短,把自己的不擅长点变成自己最擅长的。这个需要结合自己的情况来慎重选择,最终看你要走什么样的一条路,是打算做技术专家、管理者、还是技术结合产品,还是创业者。
学习方式:系统学习
为什么我会提系统两个字呢?先说一下新手和专家的区别,大家常常认为新手和专家的区别在于经验上,这样说也不能说是错的。因为确实这个经验是很重要的,但这个经验不是指实施某项技术获得了一个过程和记录,而是指通过实施某项技术促进了思维的改变。
如果思维没有改变,那么一个声称拥有十年经验的开发人员,实际上只是一年的经验重复了九次。
新手往往都不是特别想要学习,也不知道自己的行为是对是错,只是想实现一个立竿见影的目标。如果给新手提供一个与情境无关的规则(或者叫指命)让他们去执行,他们就会变得能干起来。
而专家更关注情境,更关注系统,而且喜欢说“具体情况具体分析”。他们往往更关注事物之间的联系,把自己看做系统的一部份,能分清和认识到系统的边界。
新手往往不把自己看做系统的一部份,所以学习Android开发也变成了一项孤立的事件,学习的模块也变得孤立起来。虽然花时间学习了很多组件或者技巧,但是却没有理清过这些模块或问题之间的关联。
然而,现实中的问题都是不是孤立的,理解系统,学会用系统思维才更有利于你去解决问题。
系统学习Android的资源和方法
如果你缺一份全套系统的学习资料和方法,我将自己7年的Android开发经验架构师成长学习笔记,整理在了我的石墨文档、以及我的GitHub中,有兴趣的小伙伴可以点击下面入口获取我的一手架构师学习笔记,以及我整理的历年大厂Android开发岗面试真题合集(皆无偿分享)。
通道:【石墨文档】Android架构视频+BATJ面试专题PDF+学习笔记
也可以关注后私信我【学习】,都可以。
架构师这个词,在我大学期间也觉得遥不可及。从来没有想到过自己有一天也会戴上这个头衔。其实,只要按照我上述的思路,按部就班,脚踏实地的不断的学习、进阶,并不难的。只看你有没有这个心罢了。
并不要觉得自己离架构师的路有多少,千里之行始于足下。不要觉得自己的年纪已经成长不到架构师就要到35岁退休了,学习最好的时候,就是现在。
最后,赠与大家一句诗,共勉!