===============================
内容有点长,大家姑且当做励志小说来看吧,对这些经历不感兴趣的可以直接看最后“如何自学Android”部分
===============================
- 大学
目前为止可以说我的大学是我这辈子过的最爽的时期,大一开始就逃课,好点的理由是我对大学那些课程完全没兴趣,其实本质上是因为高考太压抑了,大学之后没人管了,开始无止境的放纵自己。毫不夸张的说大学四年上的课应该没有逃的课多。逃课最直接的影响就是挂科,从大一挂到大三,专业课数学分析特么每年都挂,后来听说补考考不过要重修,还得交钱,这特么让家里人知道还了得,于是发愤图强,最终补考每门都以优秀的成绩过了。
相信英语四级应该是大学必考吧,英语四级这辈子我都忘不了,我考了三次才过,每次考试说是裸考都褒奖了,大学英语全是吃高中的底子,第一次没过,少了十几分,第二次他妈睡觉睡过了,就没有去考,现在想想当时的自己真是脑残,终于在第三次勉强过了。现在想想幸亏当时过了,之后毕业找工作时英语四级是最低要求。做编程这行,英语真的挺重要的,大学的时候一定得想办法把四级给过了。
现在想想大学和编程唯一相关的课程就是C语言了,但是对于我们专业是属于全校公开课,最终这门课虽然考过了,但是连i++ 和++i我都弄不明白,可想而知你们应该能猜到我是怎么过的。
由于高中就开始打篮球,大学时毫无疑问就入了学院篮球队,而且担任队长,所以大一、大二过来基本就是一大半是在篮球场度过的,也是因为篮球征服了我现在的老婆。大二下学期周围的人都在玩Dota,于是也开始了游戏之路,篮球也基本放弃了,那时候玩的疯狂,记得最长的一次和同学在网吧连续包夜两星期,不过白天是回来睡觉的,不然估计早猝死在网吧了。
转眼间大四了,这一年终于在我老婆的监督下不再挂科了,而且在毕业前的最后一次评比竟然拿到了三等奖学金,真是受宠若惊啊,后来钱也被狐朋狗友们拿去腐败了。周围的同学都在准备考研,我却唯独对考研没兴趣,自始至终都没有为考研花过一分钱,买过一本书。后来证明我的决定是正确的,周围的小伙伴放弃的放弃,考不上的考不上,考上的后面也没见混的有多好,当然如果能考上好的学校还是很有帮助的。
- 毕业
三月份的时候一家IT测试培训机构来做宣讲会(具体什么名字我就不说了,免得认为是广告),听完之后就说培训之后包就业,培训地点在大上海的最中心,当然是自费,但是可以工作之后分期付款。那时候哪知道测试是干嘛的,更不懂IT是干嘛的,回来就查了下这个机构确实存在,网站也有的,知道不是骗子遍决定来上海试一试。当时下定决定要来上海培训之后,几个狐朋狗友毫不犹豫的跟着我一起来了,总共应该是7个人,决定之后没几天便毅然而然的背着大包小包来到上海,我们之中一部分是一次性付费,另一部分是分期。后来证明我们当时来上海的决定是正确的。
- 培训之路
培训的日子还是蛮轻松的,一周就上四天课,朝九晚五,毕竟大家家庭都不富裕,家里辛苦攻读了四年大学,毕业还要再交钱去培训,打心里大家都很愧疚。一开始卯足了劲要好好学习,但是坚持了没多久就有点放松了,但是好歹也是都有学习的。
培训的时候算是接触了点编程吧,课程有C语言、Oracle、Linux,然后其他都是软件测试的理论,其实都是非常基础的东西,算是带你入行吧,Orace就学习一些基本SQL语句,Linux就学了几个命令,但是起码知道原来电脑可以干这么多事,之前还一直以为电脑就是用来看电影、聊天、打游戏的呢。现在回头看给我一周的时间我可以看完整个培训课程,但是当时的培训周期要四个月。
- 第一份工作--SunNet
- 真正接触编程
三个月的时间顺利转正,之后的某一天偶然得知公司一开发人员工资比我高2000,其实也就比我早毕业一年而已,才知道原来开发和测试工资差距这么大,于是当时就下定决心要转行做开发,所以说起我从测试转行开发的原因是因为钱,一开始说因为兴趣坚持下来的都是扯淡。。。
- 编程之路
但是web开发远没有学习一门语言这么简单,后来才知道web开发涉及到html, css, javascript, ajax, database等,范围太广了,于是为了效率,我只能每一项掌握住基础,于是网上搜索找到 w3school 在线教程 这个好东西,里面的东西都是基础的,我把教程整理到手机里,每天上下班的地铁上,吃饭的时候,回家的时候等等利用一切时间来学习,也是差不多大概2周的时间掌握了html, css, js的一点基础,接下来准备正式学习.NET的时候,被我们老大知道我正在学习开发,我们老大叫Aaron,是一位典型的程序员,比较胖,人品超好,知道后不建议我学习.NET,说.NET出来都十来年了,已经很成熟了,很多人在学校都有.NET教程,现在学习已经比别人晚了。现在移动开发刚崭露头角,也没多少人会,建议我直接学习移动开发。真是一句点醒了我啊!!
- 移动开发
这次有经验了,知道了iPhone开发首先肯定得有一门编程语言的,了解到是Objective-C,于是又从公司借了一本OC的书(公司书很多,老大每月都会买来好多书,虽然看的人很少),又花了将近一周的时间来了解了基本语法,因为之前学了C#,这次没完全看完的情况下想直接上手实践。正打算学习的时候,才知道iOS开发必须得在mac上才可以,也就是说我得自己有台mac电脑,虽然当时公司是有的,但是回家的时候不能继续学习练习,肯定影响效率的,一台mac对于当时的我简直是奢侈品,虽然现在也依然是奢侈品,但当时根本不可能买得起。于是只有放弃iPhone开发转向Android(后来才知道有虚拟机这东西。。。)
- Android学习之路
那个时候的测试任务仍然很重,于是我只能挤出时间来做这个项目,基本是每晚以及周末都会自动加班来完成这个项目,现在看来那个项目真是太简单不过了,快的话一周都不要就可以搞定了,但在当时我摸爬滚打了一个多月总算搞定了。
做完这个项目自己有了点信心,但当时自己的主要任务还是测试,自己开发的时间是少之又少,于是下定决心离职找一个专门做Android的工作。说明原因之后老大很理解,也是建议我想做开发的话就放手去找一个专门做开发的职位,这样进步会比较快。
第一份工作能遇到我的老大Aaron,真是我的福分!
- 薄荷
12年5月中入职薄荷,你们以为我到了薄荷之后Android之路就一帆风顺?错了,路更艰难。我是薄荷入职的第一位Android工程师,薄荷在那时候只做iOS平台的App,事实证明这种做法不可取,包括BOSS后面也亲自说投资人来投资的时候一看数据这么少,后面做了Android平台之后用户数据才慢慢上来,毕竟还是Android用户基数大。
来薄荷的第一个任务是做联想TV的一个视频App,很蛋疼,折腾联想的SDK,遥控器等,好歹App功能比较简单,试用期间完成的还不错,就这样顺利转正了。转正之后做了第一个Android App,叫减肥食物库,功能与页面全部Copy iOS版的App。这个时候一大堆没做过的东西全部涌来了,网络库、http、api对接、组件定制等等,那个时候没有像现在各种资料、开源库一大堆,公司也没人能给指导,只有硬着头皮慢慢来,为了能把进度赶上去,上线前夕曾经连续在公司通宵三天三夜,累了就在公司趴一会,这辈子就经历过这一次,虽然项目最终也拖延,但总算在接受范围之内上线,这在当时是第一个试水Android平台的App,可惜的是上线之后表现不好,没有达到预期的效果。
- Ruby、Rails
学习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的这段时间,他让我接触了不一样的世界,心态完全变了,变得更开放,更乐于分享。
- 回归Android
回归Android开发的我一个人开发新的App,单枪匹马,经过之前的一系列挫折,突然感觉再没有更困难的了,一个人摸索架构、克服难题,App一推出便一直快速疯狂的增长,目前薄荷App总用户数已经破千万,公司也顺利融资,业务发展越来越好。
- 后话
- 总结
1. 如果你是非科班毕业想要转行编程,看了我的经历你一定很有信心与动力,我能,你一样能,何况我中间走了这么多弯路;
2. 如果你接触过一些数据结构、编程语言之类的,想要学习编程,想题主这种,你更应该有信心,你比那些非科班的人已经多了一些基础,你要做的只是坚定信念,坚持走下去;
3. 不要感慨上天的不公平,一路走来很悲催,走了太多的弯路,遇到了太多的困难,都是我这辈子难以忘记的坎坷,但同时我是幸运的,我的前任老大Aaron以及现任CTO都深深的影响着我后来的职业发现,我在薄荷的一些小伙伴们对我的帮助,我女朋友无数个日夜的理解与支持,上帝在给你制造坎坷的时候总会对你有些眷顾;
4. 如果你准备或已经在做开发的人员,没有信心或动力,又或是对未来迷茫的时候,姑且当做一篇励志小说来看,你要做的就是做好你当下在做的事,相信你的付出一定能有所收获;
- 建议
1. 每天花1小时看书,难的不是1小时,难的在坚持;
2. 最好不要挂科,因为挂了你还是得花时间补回来;
3. 英语对编程来说很重要,试着习惯英语阅读;
4. 数据结构和算法要学好,这算是对编程来说最重要的课了,以后不见得能用得上,但用的时候起码你有印象;
5. 大三或者大四一定要去实习,对于编程来说经验还是比较重要的,实习经历比你那些理论要有效的多;
6. 找个女朋友吧,不是说工作了你就找不到了,而是工作之后从事编程很少有时间和精力去接触别的女孩,所以可以的话在毕业前找个可以同甘苦的女朋友吧;
7. 第一份工作很重要,因为你会受一些周围同事、公司氛围的影响,我为自己遇到Aaron、Vincent而感到幸运,他们俩是我目前为止最尊重的两个人;
- 如何自学android编程
1. Android学习之路 前面说过我的这篇博客是Android新手必备资料;
2. 书不在多,适合你就好,这里推荐一本Android和两本Java书籍吧;
《第一行代码》:郭霖大神的著作,我是看过郭神博客过来的;
《Thinking In Java》:Java经典书籍,不必说;
《Effective Java》:Java进阶必备书籍;
3. 有些人一开始看书也有困难,没关系,那就去网上看视频,结合视频和书一起看,边看边敲,推荐下Mars老师视频,包括java基础以及Android篇都有: Java4Android.zip_免费高速下载
极客学院的视频: Android安卓开发环境搭建
口味不同的人可去各大网站自行搜索适合自己的教学视频。
4. 多去混GitHub,目前最流行的开源社区,多参与开源项目,慢慢试着读牛人们的代码,时机到的时候自己也可以为开源社区贡献力量,可以这样说在GitHub上认真混一年,比你在大学四年学的东西要多的多;
5. 关注一些Android界不错的博客:
我(stormzhang)的博客: Storm's Blog
Trinea的博客: Trinea
代码家的博客: 代码家
6. 善于利用搜索引擎,从用Google做起,学会英文关键字搜索,有问题第一时间想到去搜索而不是去请教别人;
7. 关注我的微博和微信公众账号,我也会在上面分享一些最新动态与技术前沿信息,忙起来的时候偶尔会暂停,望理解,账号均是: googdev
大家都有了以上相同的教程,但是人和人之间的区别在于:别人有颗更强大的内心,可怕的是比你聪明的人比你还要更努力!!
当你下定决心,准备前行的时候,剩下的只有坚持了。。。
===============================
我是华丽的分割线
===============================
我是很少在知乎上正经回答问题的,没想到这个回答引起这么多人关注,引起了很多人的共鸣,收获了这么多点赞,这里针对很多人的私心以及评论做点补充吧:
1. 回答中提到了培训之路,很多人要推荐培训机构,其实一方面当时没有经验,也比较迷茫,迫不得已才去培训试一试的,后来过来后其实培训学不了什么东西,我后来转行Android完全是自学,和培训一点关系都没,所以不推荐去培训,最终得靠自己;
2. 有人问我单独开发的app是什么,我现在公司名是薄荷科技,app也叫薄荷,你可以去各大市场搜索“薄荷”,排名第一的应该就是,从架构到实现一直都是一个人在做,总用户现在差不多过千万了,当然现在已经不是一个人在开发了,现在带领一个小团队在做,你可以下载体验下,不过现在依然有很多不足之处,我们一直在努力改进;
3. 文中提到我学习了很多语言,很多人比较疑问,是都需要学这些语言么?当然不是,我是因为走了不少弯路,有些语言为了工作不得不去学的,不过后来证明学的这些东西对自己是有很大帮助的,但是如果你确定了方向建议你直奔主题,现在社会需要一门精而不是门门通的人才,现在有很多“全栈工程师”的概念,其实都是在建立在一门精的基础上才去别的领域发展的,所以不要妄想一开始就成为“全栈”,还有如果你对当前做的事很抵触,觉得一直纠结在功能上,但是又没法去改变的时候,不妨竭尽全力把当前做的事做好,后面你会发现有事情做自己不知不觉总是会进步的;
4. 很多人找到我博客,搜索到我被Facebook邀请,具体见这篇博客 被Facebook邀请的前因后果 , 虽然这算是对自己技术能力的一个认可吧,但是在技术上远没有大家想象的那么牛逼,我一直在努力提升自己的技术,但是仍然有很多需要学习的,自己也一直在坚持学习,现在也一直想靠自己的技术来改变自己的生活,起码不拼爹(主要是拼不了),但是后来才感觉到技术并不是一切,千万别陷进无止境的技术坑里,有很多事情比技术更重要,这个就等待大家自己慢慢发掘领悟吧。。。
之前我写的一篇文章《我是如何自学Android,资料分享》,讲了怎么入门学Android;
最近知乎上有网友问我怎么自学Android,其实说实在的,我学的也一塌糊涂,当然在学习过程也积累了一些知识,对于以前没接触过Android的朋友,或者刚入门Android 的朋友,这篇文章作为入门,那是再合适不过了,希望对刚入门Android的朋友有帮助,接下来,就不罗嗦啦。
本文主要有以下几个步骤:
1. Java 基础;
2. 搭建Android 开发环境;
3. 了解Android 运行原理以及一个工程项目结构;
4. 如何系统学习Android;
5. 推荐一些实用的资源
6. 总结
首先呢?当然要有Java 基础;
我大学的专业就是Java,但由于没学好,刚开始学Android 的时候,挺吃力的,后来又去补Java 基础去了;
因为Android SDK 是基于Java 开发的,使用的语言是Java,如果有了Java 基础,学Android 就会事半功倍;比如在Android 中要使用到的接口,抽象类,类型转换,继承,覆盖,匿名内部类,多线程,这些都是Java 语言的,如果以前没有基础过,学Android 会很郁闷的;
当然如果你有C++ 基础,当然也可以基于NDK 开发,可以不使用Java;
对于没有Java 基础的朋友,我推荐一些资料:
Mars 的Java4Android:Java4Android.zip_免费高速下载
极客学院推出的Android 专题:Android安卓开发环境搭建
搭建环境
Android 开发IDE选择,有Eclipse,IntelliJ IDEA,Android Studio(基于IntelliJ IDEA 社区版开发的),Eclipse 和 Android Studio 是免费的;
对于初学者我推荐使用Eclipse,因为Eclipse 成熟,遇到问题,搜索也容易找到答案;以后可以尝试不同的IDE;
搭建环境的步骤:
- Eclipse安装;
- Android SDK安装(Android 开发工具包);
- ADT安装(Eclipse 的插件,使Eclipse 能够开发Android);
- 创建AVD(在电脑创建一个虚拟手机);
详细步骤:Android开发之旅:环境搭建及HelloWorld
在这里会有很多工具,可能刚入门的会比较模糊,可以参考:Android 开发,各种工具
如果最终虚拟的手机屏幕能够显示主界面,则表示成功;
了解Android 运行原理,一个工程的项目结构
-
项目结构推荐慕课网的视频教程:Android 项目结构介绍
- Android开发之旅:HelloWorld项目的目录结构
系统学习Android
有了上面的学习,对Android 也有了初步的认识,接下来可以系统地学习Android 啦,网上资料也很多啦,书籍也很多,视频也很多,我觉得首先要《官方API Guide》;然后手上准备一本书,可以当做字典,不会可以看看;如果看官方文档,有难度,看书进度太慢,可以看视频,跟着视频学,做一下东西,有什么不会的问题,可以Google 搜索;
如果说到细的知识点,比如四大组件,UI,多媒体处理,信号连接,数据存储,我在这里就不多介绍了;主要介绍了一些学习资料;
官方文档
Android API:Android API| Android Developers
书推荐
视频教程
博客推荐
网站推荐
总结
-
当然Github 上有很多开源的项目,多看看源码,自己才能快速提升;《Android开源项目分类汇总》,这里几乎汇总了github 上所有的开源项目,可以自己找些慢慢学;
-
然而学习是乏味的事,坚持到最后是不易的;
-
要善于利用搜索引擎,遇到不会的问题,要使用Google 搜索;对了,作为一个开发者,要学会自备梯子;
-
还有学Android,要时刻关注Android 的最新动态,比如最新发布的Android 5.0 棒棒糖版,去了解他的新特性;