16年上半年在帮老师,帮外面随便做点东西以便得到些生活费养活自己。下半年去外面公司待了一段时间,然后选择回来帮自己做个东西,历时三个月,独自完成安卓及IOS版本app的开发部分。
开发过程与问题
我之前没了解过安卓和IOS开发,一开始对整个项目也没什么概念,脑袋中只知道要做个电商app,中间就是遇到各种问题,后来一步一步的做下去解决掉。我做的是电商app。整个过程学习占了大部分时间,修复Bug,还有重构代码。三个月大多数时间都只做这三件事。
学习安卓,看郭霖的《第一行代码》,再看点极客学院的安卓视频,这是快速做东西的号搭配。《第一行代码》我看了好几遍,我买了好几本安卓书,这本写的最好,我看的最多。极客学院的安卓视频,教的很浅,但是时间短,所以可以在短时间内知道一些安卓技术,然后结合第一行代码,不同就翻阅,google就可以做东西了。
学习IOS,看小码哥的ios视频,不懂就看。ios开发的我没遇到好书,关于Objective-C的,买本Objective-C的参考书就好了。
Android开发知识点
想要做一个完整的Android app,必须要会的东西。
- Gradle 用来对安卓项目打包编译,项目的依赖,签名配置等。一个自动构建工具 (必须)
- Activity,Fragment,ViewPager,ToolBar,BottomBar,Recyclerview。(必须) 这些要会用,理解的越深越好 (不同的App需要的组件可能不一样,我觉得这几个大部分的app都会用到吧)
- Android的事件机制,事件的传递拦截等。
- 布局控件,RelativeLayout,LineerLayout。一些布局的属性都要掌握 (必须)
- 网络通信(我用的是Volley)(必须,一般app都要和后台通信吧)
- 自定义简单的控件 (有些内置的控件,可能无法满足需求,需要自己定制简单的控件)
个人感觉会了上面的这些东西,做出一个App一般是足够的。
Android可能遇到的问题
- ViewGroup和View的关系,经常出现childView alredy have a parent.you need to remove it's parent first.
- Fragment的生命周期要理解的很深才行,不要以为看了google的官方文档上面的Fragment生命周期就以为懂了,后来不断的遇到问题,专门研究下会好点。
- 布局过程也要深入了解下, 各种wrap_content,match_parent里面是怎么回事,布局文件里面的属性到底是怎么回事,要明白。
// 额外的工具库,让app变得更加强大
- ButterKnife,这个很好用,用于绑定视图,可以少写不少代码
- GSON 将JSON数据转换为JAVA的模型,或将模型转换为JSON数据传输给服务器
- EventBus 这个库说的是可以更方便的进行android组件之间的通信,可是我基本没怎么用到
- SmartTabLayout 这个可以自己换成其他的库,用于页面滑动,增强版的ViewPager。
- 推送通知用的阿里的云推送
- 分享用的 ShareSDK
两个多月,知识点学到了这些。这是做出一个完整的app需要的知识点。
IOS知识点
做完了Android开发之后,学习IOS,我的建议是先不要入门直接用Swift,当初我也是新手,徘徊要选Objective-C还是Swift得时候,听说Swift是更加现代化的工业级标准语言,吸收了Python还有现代流行语言特性,学起来更简单,我就首先学习的Swift,但是新手直接用Swift会出问题的。
- Swift2.x和Swift3.x的版本不同,虽然是小的不同,但对刚学的新手,会让新手产生迷惑
- Xcode的版本一直在变,我按照苹果官网给出的实例敲代码都无法运行,因为苹果官网给的实例程序是基于Swfit2.x好Xcode7.2的。 仅仅是一些小的版本差异,在Xcode8上就不能用。这对新手都比较致命,直接打击自信心。
- Swfit的库并不多,资料也不是很多,在我搜很多资料的时候,大部分都是Objective-C的,而且从书店买的书大部分都是Objective-C的,基于Swift3.x版本的书几乎没有。
- 我在用Swift的时候无法使用阿里百川的电商SDK接口,因为百川电商SDK用的是Objective-C开发的,大公司的IOS产品都是基于Objective-C开发的。
...
基于以上几条,如果新手学习IOS开发,现在我的建议是先学Objective-C,虽然会多写几行代码,但是资料多,有头绪,Swift3.x的碰到了问题,资料就很少。
做出一个IOSapp需要掌握的知识点:
- 掌握UIViewController。
- 掌握常见的视图,几乎所有的视图都是以UI开头的,UIView,UILabel,UIButton,UIImageView,UITable,UIScrollView等等。
- 掌握几种常见的视图创建于加载的方式。从代码创建会麻烦,可以从XIB文件创建视图,从Xib初始化视图和从代码初始化视图调用的初始化方法不同。
- 掌握Foundation框架,几乎绝大部分代码都要用到这个框架里的东西,里面的东西就是在我们熟悉的类型前面加上NS,代表NextStep公司的意思,了解了这,记住NSString,NSArray,NSNumber等等就容易了。
- 掌握自动布局,这个很重要,会自动布局才能在不同的手机屏幕下做适配。
- Objective-C的语法知识,刚开始会用起来比较怪,后来就好了。
//额外的库
- MJRefresh 表视图的增强工具
- MJExtension 类似于Java的GSON,数据转模型的。
- Masonry 很好用的代码自动布局库
- AFNetworking 网络通信用的库
- YPTabBarController 页面滑动效果用到的
- Toast 类似于安卓的Toast,在屏幕的某个地方提示一条消息,类似于AlertView。
如果你曾先学习的是Objective-C,那么两个星期应该可以做出一个IOS app。一个星期用来学习Objective-C,一个星期用来动手写代码。
后台
我后台使用的是Laravel框架,优雅,简单。主要用了Laravel的以下几个功能
- 掌握Request
- 掌握Route,在路由文件里定义各种路由,由控制器处理
- 数据库的控制部分,Laravel有ORM还有普通的数据库操作,我觉得普通的数据库操作就够了。
- 中间件
- Laravel的View部分,这个给非技术人员写一些页面以便非技术人员增删改查数据。这个要涉及前端了,好在我之前做过一段时间的前端。
Laravel是一个简单的优雅的后台框架,很好用,很好学。如果你的服务器用的是Nginx的话,那么还要做一些额外的配置。
整个App基本上就这么多东西,历时三个月从小白到一个人写后台,android ,ios端。创业团队……
Android与IOS对比
Android的官方文档非常全,语言只有好用的Java。IOS的缺点是Objective-C用起来很奇怪,Swift的资料又不多,苹果的官方文档又是过时的。
Android要适配多个版本的机型,刚开始app就不兼容低版本的Android app,后来7.0版本的App又有些不兼容……,而IOS的不管几s基本上没问题,除了IOS的操作系统版本变化,我只用了IOS 10的系统,其它的没用。
Android的控件很多,用起来有些麻烦,刚开始会经常崩溃,IOS的控件只有几个,但是每个控件都封装的很好,每个控件都提供了很多功能。
我觉得IOS学起来,开发起来更容易。
但Android用起来会更广泛,Java也比较通用,Android开始开源的,我觉得android做精的话,会更有趣一些。
总结
迫不得已,未毕业之际,加入一个创业团队,自己又不是科班出身,认识的搞IT的又少,只能扯开膀子自己干,学了三个月的时间,自己知识面上宽了不少,解决问题的能力强了不少,同时也意识到了一些问题。
做IT这一行,知识是学不完的,绝大部分问题都是类似的,你愿意去找总能找到问题的解决方案,但是因为绝大部分问题解决方式都类似,Google,*,所以自身的进步只在知识点上,解决问题就那几种方法。
知识是学不完的,知识也都是类似的,但知识的深度也是无止境的。 有句话说过:知识的广度和深度是相辅相成的,知识的广度促进你往更深的方向挖掘,知识的深度又可以让你融汇贯通到更广的领域。
现在知识点不够精是我的不足,但我不是那种蜻蜓点水到处学一点的人,我所学的东西都有做出成品出来。而且我是短时间内边学边做的。
路漫漫,东西做的不够精致,等于没做,在一个创业公司,东西做的不好,对自己也是致命的,不完完善优化……