以前有人留言说想看个人所谓奋斗史,前天的这篇调查「以产品思惟去作微信公众号」也显示这部分人比例还很多,今天忽然想到我在2年前在知乎回答过一个「如何自学Android编程」的问题,今天特意去从新看了一遍,2年多的时间再次看这篇文章勾起了我很多的回忆,很感谢当初的回答,记录了我人生的一个阶段,给我留下了人生一笔宝贵的财富。虽然可能有部分人看过,可是我以为仍是有必要搬到这里,给那些还在迷茫的人一些激励。javascript
想自学android编程,从何入手。2000年本科入学,期间学过c c++ 数据结构,以后就再也没有用过。本人数学专业出身。求大牛们指点迷津。css
泻药。我想我是有资格来回答你的问题的,我算是完全的从编程白痴一步步学习过来的。html
以前写了一篇博客「Android学习之路」被疯狂转发,带起了一阵学习Android的大风,我不晓得具体影响了多少人,可是这篇博客已经成为Android新手学习必备的资料。不少人问我是怎么一路过来的,姑且借这个机会说说个人故事吧。java
内容有点长,你们姑且当作励志小说来看吧,对这些经历不感兴趣的能够直接看最后「如何自学Android」部分。android
大学上的是全国二流本科,专业主要就是数学专业。大学的总结就是:逃课、挂科、篮球、泡妞、Dota。c++
目前为止能够说个人大学是我这辈子过的最爽的时期,大一开始就逃课,好点的理由是我对大学那些课程彻底没兴趣,其实本质上是由于高考太压抑了,大学以后没人管了,开始无止境的放纵本身。绝不夸张的说大学四年上的课应该没有逃的课多。逃课最直接的影响就是挂科,从大一挂到大三,专业课数学分析特么每一年都挂,后来据说补考考不过要重修,还得交钱,这特么让家里人知道还了得,因而发愤图强,最终补考每门都以优秀的成绩过了。程序员
相信英语四级应该是大学必考吧,英语四级这辈子我都忘不了,我考了三次才过,每次考试说是裸考都褒奖了,大学英语全是吃高中的底子,第一次没过,少了十几分,第二次他妈睡觉睡过了,就没有去考,如今想一想当时的本身真是脑残,终于在第三次勉强过了。如今想一想幸好当时过了,以后毕业找工做时英语四级是最低要求。作编程这行,英语真的挺重要的,大学的时候必定得想办法把四级给过了。web
如今想一想大学和编程惟一相关的课程就是C语言了,可是对于咱们专业是属于全校公开课,最终这门课虽然考过了,可是连i++ 和++i我都弄不明白,可想而知大家应该能猜到我是怎么过的。面试
因为高中就开始打篮球,大学时毫无疑问就入了学院篮球队,并且担任队长,因此大1、大二过来基本就是一大半是在篮球场度过的,也是由于篮球征服了我如今的老婆。大二下学期周围的人都在玩Dota,因而也开始了游戏之路,篮球也基本放弃了,那时候玩的疯狂,记得最长的一次和同窗在网吧连续包夜两星期,不过白天是回来睡觉的,否则估计早猝死在网吧了。ajax
转眼间大四了,这一年终于在我老婆的监督下再也不挂科了,并且在毕业前的最后一次评比居然拿到了三等奖学金,真是受宠若惊啊,后来钱也被狐朋狗友们拿去腐败了。周围的同窗都在准备考研,我却惟独对考研没兴趣,自始至终都没有为考研花过一分钱,买过一本书。后来证实个人决定是正确的,周围的小伙伴放弃的放弃,考不上的考不上,考上的后面也没见混的有多好,固然若是能考上好的学校仍是颇有帮助的。
又一转眼毕业了,去参加了学校几个招聘会也是醉了,全是没听过的小企业,一去参观都是各类厂房,根本不须要任何学历,是我的出点力均可以干的那种,要么就是各类电话销售。。。那时候真的有点急了,大学四年,毕业一份像样的工做都找不到,回去怎么面对乡亲父老。
三月份的时候一家IT测试培训机构来作宣讲会(具体什么名字我就不说了,省得认为是广告),听完以后就说培训以后包就业,培训地点在大上海的最中心,固然是自费,可是能够工做以后分期付款。那时候哪知道测试是干吗的,更不懂IT是干吗的,回来就查了下这个机构确实存在,网站也有的,知道不是骗子遍决定来上海试一试。当时下定决定要来上海培训以后,几个狐朋狗友绝不犹豫的跟着我一块儿来了,总共应该是7我的,决定以后没几天便毅然而然的背着大包小包来到上海,咱们之中一部分是一次性付费,另外一部分是分期。后来证实咱们当时来上海的决定是正确的。
这里并非宣传你们去培训,只不过被工做所逼,学校很差,大学也没学啥真本事,稍微有点出路都不会去培训!
培训的日子仍是蛮轻松的,一周就上四天课,朝九晚五,毕竟你们家庭都不富裕,家里辛苦攻读了四年大学,毕业还要再交钱去培训,打内心你们都很愧疚。一开始卯足了劲要好好学习,可是坚持了没多久就有点放松了,可是好歹也是都有学习的。
培训的时候算是接触了点编程吧,课程有C语言、Oracle、Linux,而后其余都是软件测试的理论,其实都是很是基础的东西,算是带你入行吧,Orace就学习一些基本SQL语句,Linux就学了几个命令,可是起码知道原来电脑能够干这么多事,以前还一直觉得电脑就是用来看电影、聊天、打游戏的呢。如今回头看给我一周的时间我能够看完整个培训课程,可是当时的培训周期要四个月。
7月份拿到毕业证书就直接来了上海,四个月的时间对于我来讲实在太漫长了,我等不及了,因而在课程还有最后一个月的时候我提早出来单独找工做,当时培训老师说工做后的工资大可能是3500左右,我以为我学的比别人好,因此必需要比别人高,作好了长期准备面试的过程。没想到面试第一家就直接录取了(后来才知道原来是公司的测试怀孕在家,急需测试),公司名叫SunNet,中文名山诺,工资4000。收到offer的时候欣喜若狂!
以后便在SunNet正式入职,工做就是测试,可是就在SunNet我才真正的接触了什么是编程。SunNet是一家小型外企,总部在休斯顿,上海这边主要是研发部。研发人员总共不到10人,主要业务是以web为主,使用语言是.NET。固然个人职责就是web测试了,工做却是没什么难点,主要测试就我一个,一进来就有好几个项目等着我测试,还好本身是数学专业,逻辑思惟能力还不错,加加班总算能按时完成任务。
三个月的时间顺利转正,以后的某一天偶然得知公司一开发人员工资比我高2000,其实也就比我早毕业一年而已,才知道原来开发和测试工资差距这么大,因而当时就下定决心要转行作开发,因此提及我从测试转行开发的缘由是由于钱,一开始说由于兴趣坚持下来的都是扯淡。。。
因为在公司个人主要任务仍然是测试,任务也挺多,基本天天要9点能到家。下定决心以后只能利用业余时间来学习,因为公司主要业务是.NET,很天然我一开始学习的方向即是.NET,后来才了解到.NET是基于C#的,学习.NET以前必需要先学习C#,因而像公司借了一本C#学习资料,就这样学习了大概两周吧,还仔仔细细作了一大堆笔记。以后以为语法学的差很少了,便又借了本.NET的书开始学习web开发。
可是web开发远没有学习一门语言这么简单,后来才知道web开发涉及到html, css, javascript, ajax, database等,范围太广了,因而为了效率,我只能每一项掌握住基础,因而网上搜索找到 w3school 在线教程 这个好东西,里面的东西都是基础的,我把教程整理到手机里,天天上下班的地铁上,吃饭的时候,回家的时候等等利用一切时间来学习,也是差很少大概2周的时间掌握了html, css, js的一点基础,接下来准备正式学习.NET的时候,被咱们老大知道我正在学习开发,咱们老大叫Aaron,是一位典型的程序员,比较胖,人品超好,知道后不建议我学习.NET,说.NET出来都十来年了,已经很成熟了,不少人在学校都有.NET教程,如今学习已经比别人晚了。如今移动开发刚崭露头角,也没多少人会,建议我直接学习移动开发。真是一句点醒了我啊!!
听了老大的建议,因而放弃了.NET,开始准备学习移动开发。那时候是12年初,整个移动互联网也是刚起步阶段,iPhone4仍是很是火的时候,毫无疑问我把目标锁定在了iPhone开发上。
此次有经验了,知道了iPhone开发首先确定得有一门编程语言的,了解到是Objective-C,因而又从公司借了一本OC的书(公司书不少,老大每个月都会买来好多书,虽然看的人不多),又花了将近一周的时间来了解了基本语法,由于以前学了C#,此次没彻底看完的状况下想直接上手实践。正打算学习的时候,才知道iOS开发必须得在mac上才能够,也就是说我得本身有台mac电脑,虽然当时公司是有的,可是回家的时候不能继续学习练习,确定影响效率的,一台mac对于当时的我简直是奢侈品,虽然如今也依然是奢侈品,但当时根本不可能买得起。因而只有放弃iPhone开发转向Android(后来才知道有虚拟机这东西。。。)
Android学习之路
几经波折,终于才肯定本身的方向,这期间已经耽误了很多时间,走了很多弯路了,可是仍然阻挡不住我转行开发的脚步。公司关于Android的书居然没有,因而我本身亲自买了一本Android书籍,叫「疯狂Android讲义」,做者是李刚!!不说这本书有多好吧,这本书比较厚,很是厚,因此讲的一些基础比较细,新手按照上面的彻底能够看懂,如今不知道这本书内容更新了没,以前内容对于如今来讲有点老。这个时候应该是12年的3月份,提及来也巧,这个月公司恰好接了个移动端项目,iOS有人来作,可是公司上下没有会Android开发的,其余人都有本身的项目在忙,老大看出个人兴趣,就问我想不想试一下,我固然欣然赞成了,只此就开始正式的边作边学习Android。
那个时候的测试任务仍然很重,因而我只能挤出时间来作这个项目,基本是每晚以及周末都会自动加班来完成这个项目,如今看来那个项目真是太简单不过了,快的话一周都不要就能够搞定了,但在当时我摸爬滚打了一个多月总算搞定了。
作完这个项目本身有了点信心,但当时本身的主要任务仍是测试,本身开发的时间是少之又少,因而下定决心离职找一个专门作Android的工做。说明缘由以后老大很理解,也是建议我想作开发的话就放手去找一个专门作开发的职位,这样进步会比较快。
第一份工做能遇到个人老大Aaron,真是个人福分!
12年4月底离职以后,我便开始在家里准备面试,投简历,因为本身的基础很薄弱,以前的Android经验也很是少,那时候说是招聘Android职位,可是不少公司面试基本全是Java内容,并且我能感觉到工做内容和Android相关的也比较少。来薄荷面试的时候感受很好,包括CTO、CEO的面试都感受不错,果真没几天就收到offer,来之不易的机会,很是珍惜。
12年5月中入职薄荷,大家觉得我到了薄荷以后Android之路就一路顺风?错了,路更艰难。我是薄荷入职的第一位Android工程师,薄荷在那时候只作iOS平台的App,事实证实这种作法不可取,包括BOSS后面也亲自说投资人来投资的时候一看数据这么少,后面作了Android平台以后用户数据才慢慢上来,毕竟仍是Android用户基数大。
来薄荷的第一个任务是作联想TV的一个视频App,很蛋疼,折腾联想的SDK,遥控器等,好歹App功能比较简单,试用期间完成的还不错,就这样顺利转正了。转正以后作了第一个Android App,叫减肥食物库,功能与页面所有Copy iOS版的App。这个时候一大堆没作过的东西所有涌来了,网络库、http、api对接、组件定制等等,那个时候没有像如今各类资料、开源库一大堆,公司也没人能给指导,只有硬着头皮慢慢来,为了能把进度遇上去,上线前夕曾经连续在公司通宵三天三夜,累了就在公司趴一会,这辈子就经历过这一次,虽然项目最终也拖延,但总算在接受范围以内上线,这在当时是第一个试水Android平台的App,惋惜的是上线以后表现很差,没有达到预期的效果。
这个App试水表现很差以后,公司决定暂停Android业务,主攻iOS平台。个人位置就变得很尴尬,CTO找我谈话但愿我能转作Ruby,Android业务会暂停,咱们后端的api所有是基于Ruby语言的,虽然当时内心有点不情愿,可是没办法,为了避免丢掉工做我只得硬着头皮作下去,因而就开启了个人Ruby之旅。
学习Ruby以及Rails是我目前为止遇到的最大的困难。Ruby是一种动态语言,Ruby On Rails是一种流行快速开发web的框架。学习ruby不一样地方在于要学习Linux,代码基本全是在终端进行,没有IDE,没有编译检查,习惯各类命令行。这对于一个刚开始进行开发的人来讲真的是太困难了。那个时候从心里也有抵触,学习领悟能力也超差,我能感受到公司领导层对我已经不是很满意了,如今想一想那时候公司没能开除我真是得感谢咱们的CTO,一个颇有耐心、勇于给新人机会的人。中间遇到很是大的困难,还好获得薄荷ruby工程师小伙伴们的帮助,一直鼓励我,遇到问题老是不厌其烦,在基础、经验、能力不行的状况下,我总得克服这种困难,让别人看出个人态度。因而学习Ruby、Rails的那段时间我天天都是作最后一班公交车回去,我记得好像是11:40. 这个状态持续一个月,包括周末,从未间断。
这一个月我在公司的主要任务就是学习,没有给安排任何事情,偶尔帮同事修修电脑,调下电话线,为此我很是感谢薄荷,感谢个人CTO Vincent,恐怕这在任何一家公司都不能这样给一我的单独的学习时间吧。一个月以后,学习的终于有点转机,开始实际作Rails项目,作后台,写api,虽然效率很低,代码很烂,可是在作Ruby的过程跟着咱们CTO学了很多设计上的东西,面向对象的思想,设计模式等都在这个阶段接触的,自此我已经习惯各类终端操做,熟悉一些Linux基本命令,喜好Ubuntu,参加了Ruby Conf 2012大会,喜欢Sublime,接触Git,GitHub,搭建了本身的Blog。我感谢作Ruby的这段时间,他让我接触了不同的世界,心态彻底变了,变得更开放,更乐于分享。
作ruby的这段时间非常快乐,付出了这辈子最艰辛的努力,换来了点小小成果,我喜欢ruby语言,到如今为止都认为ruby是最优雅的语言。可是Android在我内心一直都有一个位置,从未放弃过。直到13年5月的时候,这个时候Android份额近乎疯狂的增加,公司不得不开始注意Android市场,因而公司打算推出Android版app,因而做为公司惟一的Android程序员,CTO再次征求个人意见,问我想继续作ruby仍是作Android,虽然我更喜欢ruby语言,可是从心底我更喜欢客户端开发,和语言无关,客户端是用户最能感知的一部分,作出的东西更有成就感一点,我就在等待着这个机会,这一刻我绝不犹豫的选择继续作Android。
回归Android开发的我一我的开发新的App,单枪匹马,通过以前的一系列挫折,忽然感受再没有更困难的了,一我的摸索架构、克服难题,App一推出便一直快速疯狂的增加,目前薄荷App总用户数已经破千万,公司也顺利融资,业务发展愈来愈好。
因为一我的一步步过来,我深知这其中的不易,以后本身一直坚持写博客,除了本身的积累外,还但愿帮助更多的人,因此如今大家能够看到无论是个人GitHub,博客,微博仍是微信公众帐号都很乐于分享,但愿本身走过的这些弯路大家能少经历,虽然最终我也到达了终点,可是若是能有直路可直达最好不过了。
上面啰啰嗦嗦的叙述个人这些陈年经历,看似和题主的问题无关,其实有很大关系:
1.若是你是非科班毕业想要转行编程,看了个人经历你必定颇有信心与动力,我能,你同样能,况且我中间走了这么多弯路;
2.若是你接触过一些数据结构、编程语言之类的,想要学习编程,想题主这种,你更应该有信心,你比那些非科班的人已经多了一些基础,你要作的只是坚决信念,坚持走下去;
3.不要感慨上天的不公平,一路走来很悲催,走了太多的弯路,遇到了太多的困难,都是我这辈子难以忘记的坎坷,但同时我是幸运的,个人前任老大Aaron以及现任CTO都深深的影响着我后来的职业发现,我在薄荷的一些小伙伴们对个人帮助,我女友无数个日夜的理解与支持,上帝在给你制造坎坷的时候总会对你有些眷顾;
4.若是你准备或已经在作开发的人员,没有信心或动力,又或是对将来迷茫的时候,姑且当作一篇励志小说来看,你要作的就是作好你当下在作的事,相信你的付出必定能有所收获;
评论里有人说是在校生,想要给点建议,那就以一个反例的身份给出过后的一些建议吧:
1.天天花1小时看书,难的不是1小时,难的在坚持;
2.最好不要挂科,由于挂了你仍是得花时间补回来;
3.英语对编程来讲很重要,试着习惯英语阅读;
4.数据结构和算法要学好,这算是对编程来讲最重要的课了,之后不见得能用得上,但用的时候起码你有印象;
5.大三或者大四必定要去实习,对于编程来讲经验仍是比较重要的,实习经历比你那些理论要有效的多;
6.找个女友吧,不是说工做了你就找不到了,而是工做以后从事编程不多有时间和精力去接触别的女孩,因此能够的话在毕业前找个能够同甘苦的女友吧;
7.第一份工做很重要,由于你会受一些周围同事、公司氛围的影响,我为本身遇到Aaron、Vincent而感到幸运,他们俩是我目前为止最尊重的两我的;
最后才应该是题主最须要的:
1.「Android学习之路」前面说过个人这篇博客是Android新手必备资料;
2.书不在多,适合你就好,这里推荐一本Android和两本Java书籍吧;
「第一行代码」:郭霖大神的著做,CSDN博客专家;
「Thinking In Java」:Java经典书籍,没必要说;
「Effective Java」:Java进阶必备书籍;
3.有些人一开始看书也有困难,不要紧,那就去网上看视频,结合视频和书一块儿看,边看边敲,推荐下Mars老师视频,包括java基础以及Android篇都有:
Java4Android.zip_免费高速下载
极客学院的视频
慕课网的视频
口味不一样的人可去各大网站自行搜索适合本身的教学视频。
4.多去混GitHub,目前最流行的开源社区,多参与开源项目,慢慢试着读牛人们的代码,时机到的时候本身也能够为开源社区贡献力量,能够这样说在GitHub上认真混一年,比你在大学四年学的东西要多的多;
5.关注一些Android界不错的博客:
个人一些好基友的博客,他们既是 Android 牛人,也是活跃在社区,乐于分享帮助他人,推进技术进步的有为青年. http://stormzhang.com/link/
6.善于利用搜索引擎,从用Google作起,学会英文关键字搜索,有问题第一时间想到去搜索而不是去请教别人;
7.关注个人微信公众号:AndroidDeveloper「googdev」,目前应该算是国内最有影响力的我的Android公众号了,我会常常分享一些Android方面的原创干货,但愿能继续干着本身喜欢的事,帮助更多的人。
你们都有了以上相同的教程,可是人和人之间的区别在于:别人有颗更强大的心里,可怕的是比你聪明的人比你还要更努力!!
当你下定决心,准备前行的时候,剩下的只有坚持了!