应driphp.com Eric群主再三邀请,给大家做一个分享,同时也是对自己工作的总结。
先简单介绍下自己,我是David,和群主是大学同班同学,曾将和群主一起创业。我大三开始自学JAVA、Android ,大三结束后在某创业公司实习半年,后来通过校招到某一线Andorid OS 厂商工作。到现在工作也一年多了,今天打算把自己看到了,经历的觉得有用的东西分享给大家。在编程届我还是个小学生,所以今天的分享如果有不对的地方,还请各位大牛指正。
一、关于自学和入门
我有两个同事,他们大学学的是机械、化学,但是他们的编程能力是在我这个科班出身的之上的,为什么?
自学和勤奋
虽然我是计算机专业,但是大家都了解学校教给你的是远远不够的,只能靠自学。首先给自己定一个方向,毕业后是想做服务端、客户端、前端还是算法或者其他自己感兴趣的方向。这里要强调一下,兴趣真的很重要,因为你会发现有时候自学编程真的很枯燥,如果没有兴趣真的坚持不下来。我给自己选择的是Android 应用开发,因为自己买的一千左右的Andorid手机就有像iphone一样的体验,这个系统太神奇了。而且Android app开发当时这个方向很火,很新。同时Android是Google大大的开发的系统,底层代码又是开源的。
看到开发Android需要JAVA语言基础,于是开始从网上找了JAVA资料,我的启蒙老师是韩顺平(现在连名字都记不清了,现百度的。但是真的很感谢这个人。他的教学视频质量很多,就算像我一样很差的人也能轻松入门)。韩老师的课程讲的比较基础,而且是带着你一行一行的敲。于是那一段时间,除了上课的时间我就抱着电脑到实验室去看视频,一边看一边敲。先是讲JAVA语法,后面开始有实战项目。
入门的时候推荐大家看视频而不是书,视频有更好的带入性和互动性。买本几百页的书估计看十分钟就睡着了。而且目前国内像慕课网,极客学院、51CTO之类的Online教育网站视频质量都很高。看视频的时候要开始做笔记,可以开一个CSDN博客,把自己的总结写上去,时不时还会有人给你点赞。这里推荐一下CSDN这个平台,有人推荐程序员要搭建一个个人blog,但是我觉得个人blog可能互动性不如CSDN。你在写博客的同时也能看到大牛们的博客,CSDN上面的博文质量很高,而且每天都会有大牛讲各种前沿的技术分析,酷炫的自定义控件、深入剖析某个框架,牛人很多。
看过视频之后可以自己做个小项目,可以比着市面上比较流行的项目去做,也可以以参加比赛的目的去做。同时自己也可以买几本对应语言的比较经典的书籍。JAVA的话,推荐《Thinking in JAVA》、《疯狂JAVA系列》、《JAVA核心技术》、《Effective java》。看书应该能够给你更多的时间去思考,书里也会有比较深入的东西,更注重的是理论。
其实,对于入门来说也没有什么捷径,就是勤奋和坚持。每个人都要经历这个过程。
二、关于找工作
基础打好了,就可以去找工作了。找实习的时候需要先对自己的找的方向面试问题大概了解一下。找实习的时候主要是看你的基础还有自学能力。包括语言语法,简单的性能优化,项目中遇到实际问题,通过算法题考察你的思维敏锐度。这种东西其实面多了,总结总结自然就会了,来回来去都是那些东西。也可以提前看看前辈的面试经验贴。算法这个需要长期的积累,校招还是很看重的,当时面某团,一面问的JAVA和Android技术轻松应对,二面问的很复杂的算法当场就跪了。算法要多刷题,好像没啥捷径。推荐Leetcode。找实习大厂不好进,除非你的基础特别好,或者学校特别好。
关于实习的选择:最重要的是看能不能学到东西,而不是工资。当时我拿到了两个实习offer 工资差了大概1000块。但是我选择了工资少的那个。因为这个团队的人经验都很丰富,而且公司运作了4年了,有技术积累。后来我觉得我的选择是对的,团队里面有2个技术大牛,各种博客之星各种github开源大牛。可想而知天天坐在这种人身边,和这种人一起写代码自己的提高也很快。
关于校招:去年9月开始边工作边校招。北京所有的大公司基本都走了一遍但是没有一个公司收留我。总结失败的经历是因为自己的基础知识比较差,平时对计算机基础关注较少,可以说是因为大一大二的时候没有好好上课。而项目方面对内存、性能优化以及底层的实现了解的也比较少。当时很沮丧,就放弃了。又回到了之前实习的公司继续工作,开始有点混日子了,瞬间没有目标了。突然有天和某个HR聊起来,他的一句话:“在互联网圈里混,你这学历也不行,现在你公司也不行。以后不好混啊!”是啊,进个大公司对自己发展还是有很多好处的,无论是眼界还是技术的沉淀。于是继续边实习边学习,那段时间自己很勤奋,主要精力放在了基础知识、Volley,ImageLoader开源框架的理解、性能内存优化以及JAVA语言深入理解。于是在16年年初通过学长的推荐,面试过了一线的Android os厂商。
三、我学到了什么?
1. 严谨和标准
严格的代码review,每个commit 都需要经过师父的review和QA同学的验证。
经常因为类命名被骂。因为代码结构被骂。的确,代码写完后还会有团队里其他人在看,好的代码结构和命名是很有必要的。
2.独立深入思考问题的能力
最近发现无论是技术还是管理上面牛的人做事情都特别冷静,能够安静的思考问题。无论是遇到多么复杂的问题,无论环境多么嘈杂。
记得有个BUG,自己2周才解决,写了4行代码,但是看了将近几千行。从Android framework 到selinux ,虽然很煎熬,但是学到了很多。独立分析问题的能力是一个优秀的程序员必须具备的。但是,作为初级RD,如果你遇到了一个问题很久没解决,一定要向他人求教,也许有时候他人的一句话,就能解决这个问题。
解决了一个小BUG,是否就这样完事儿了?要深入去理解。为什么我加这一行就能解决。
最近在慢慢开始看Android framework的东西。虽然很枯燥,但真正看懂的时候你会发现Android的设计很奇妙的。我喜欢深入去剖析某个东西。准备面试的时候看了Volley源码,给自己加了很多分。
3.做一个有追求的程序员
遇到问题不要只想着打补丁的方式去解决,比如遇到一个NullPointException,不要只做一个判断,然后catch住。也许只有你觉得这能解决这个问题。只是你觉得?可能并没有cover到所有的case.而且如果有其他人解决的时候会很难理解你的做法。如果一个项目到处都是这种补丁,可想是有多么糟糕。你做的就是应该去找到为什么会抛出这个exception,然后正面的去解决。遇到问题不要规避,正面应对。
追求极致。做个靠谱的工程师。自己发现的BUG,你会不会解决?自己写的代码是否经常review?是否经常关注用户对自己做的功能的反馈。优秀的程序员和普通的程序员也许只差一点,责任心。
4.勤奋
很高兴在这个团队,并没有很多天生丽质的大牛,学校都一般。组里技术最好的几个人永远都是最晚走的,周末也经常在公司学习。我们leader也是以勤奋出名,当时在新版本上线时候也经常一个人为了解决一个问题待到两三点。目前他已经不写代码了,但是写了N年代码让他变得冷静,逻辑性强,在管理层也做的风生水起,目前已经实现财富自由,还不到30岁。如果你也像我一样不聪明,目前资历一般,那就勤奋起来吧。下班别人都走了,咱们可以在公司总结一下今天学到了什么,看看github上面有什么好玩的,看看最近热门的博客。年轻的时候就应该是自己多沉淀的时候。
5.语言表达能力
遇到问题,该怎么优雅的向他人请教?团队大了就经常涉及到和其他组的人沟通。能否把问题表述清楚?能否让其让人乐意帮你?发邮件的时候,能否考虑全面,用最少的文字将问题说清楚。现在我每次发重要的邮件还是需要师父去review。这还是很需要功夫去磨练的。平时多听听大牛是怎么讨论问题的。也可以多读书,多写写博客。毕竟我们不会写一辈子代码。
6.英语
这个就不多说了,目前看到的官方教程全是英文的,源码注释也是英文的。这个感觉不用刻意去学,只要多看多积累就好了。之前commit message用中文,现在都换成英文。注释啥的也都换成英文去。
7.给自己留下点什么。
Github多刷刷,博客多上上,知乎多水水。一来是自己积累知识,二来提升自己的知名度,名气大了在这个圈子里面就好混了。
8.多总结,多沉淀
无论再忙也找给自己找时间去总结,去思考。工作多年的程序员也会有很大的差别,在大公司的也有很多渣渣。
9.热爱编程,热爱生活。
你写的代码不仅仅能够给你高工资,还能给亿万用户带来便利。
四、关于DriPhp
群主是个很有分享精神的人,大学的时候也建立的很多学习小组,都是考试之前突击的那种,最后小组里面的人都没挂科,哈哈!所以在这里要感谢群主能给我们这么一个平台,每日一问,日积月累。
就暂时分享这么多,一时不知道写什么了? 以后欢迎各位大牛们在群里多多做分享,多多讨论!希望各位都能够成为改变世界的程序员,加油!