我学习Android的一些方法和想法。
Android需要打好哪些编程基础
- Java基础(Kotlin)
- OOP思想与设计模式
- Android基础
- 数据结构与算法
- JVM相关
如何把握技术的宽度和深度
对于Android来说,有太多的诱惑,比如React Native,小程序,热更新,插件化。
我理解的应该是先从宽度上拓展,然后在尽心深度研究。
什么时候需要横向拓展
- 初学者
- 工作业务量繁多,比如浏览器开发(普通App开发技术,HTML+Javascript等技术)
- 自身兴趣
什么时候需要纵向深入
- 中级和高级开发
- 追求更深入的细节和思想
- 工作内容需要
横向发展有哪些
- ReactNative等技术
- 简单的后台开发 Java/PHP/Python/Ruby
- IOS等应用开发
- 总而言之就是会的多
纵向发展有哪些
- 系统源码
- 各种技术的实现机制
- 操作系统相关知识等
- 总而言之就是学得精,知其然深知其所以然。
我个人比较倾向于多花点时间做深入研究,在这个过程中会慢慢形成一种透彻理解技术的能力,有了这种能力之后就能触类旁通,学习其他技术也会更加轻松。
另外,工作需要时影响你朝着哪个维度发展的重要因素。所以选择一个公司要谨慎。
- 通常大公司,优秀的团队会有利于你进行纵向深入
- 小公司,创业公司更多的会影响你进行横向发展。
如何从日常的工作中获取最大的收益
日常的工作中,我们都是在做公司的项目。我们想要做到最大化收益需要做到
- 不要将自己的要求仅仅停留在功能实现(比如完成一个界面不代表你的收益做到最大,只是代表任务完成)
- 要理解你所使用的技术的原理和本质。不要停留在API使用,否则无法增强你的竞争力。比如我们对于加载Bitmap都会用到LRUCache,我们则需要至少理解LRUCache的原理,如果可以的话,了解它的内部实现机制。
- 项目中有好的地方,要去思考好在何处。思考这种技术的通用场景。
- 如果在项目中遇到了问题,建议先解决,然后空余时间研究这个技术的原理和细节。后续的研究务必要做。
- 善于做总结,将自己的经验和教训写成博客分享给他人。
日常的工作给我们提供了许许多多好的实践和不好的问题,是一块弥之珍贵的技术提升的源泉。
Android那么多库,我该选择哪些,怎么学,学到什么程度
库的存在是为了封装细节,简化调用者实现或者辅助我们更容易发现问题。比如ButterKnife利用注解简化了对于view的查找和类型转换等功能。
关于如何选择那些库
- 确定这个库是否是必需的
- 这个库能否带来开发效率的提升,降低代码的维护成本
- 这个库的学习成本如何 比如rxjava其实学习成本会相对高一些。
- 这个库的质量如何,不要仅仅看star,更要看issue的处理情况
自己有一个什么样的个人项目才有竞争力
如果这个项目是App
- 首先有足够的用户量,比如月活达到上万的数量级
- 界面和交互处理良好,符合Android UI/UE规范
- 运行流畅和稳定,不存在低级的错误(比如卡顿等问题)
- App能明显解决用户的痛点
如果这个项目是一个开源项目
- 有足够的star(然而这个已经被玩坏了)
- issue的处理情况
- contributor的数量
- 设计的思想是否优秀
- 代码是否居然自解释性
- 学习成本和维护成本尽量少
如何选择学习资料
- 使用Google和StackOverflow,Medium
- 如果是博客文章,在自己能力可以理解前提下,尽量选择英文
- 最简单判断一个文章的优劣可以先到文章的底部看评论(Good,Execellent,Awesome)以及Google+,Facebook,Twitter分享数量
- 尽量选择内容整洁(说明态度认真)的文章
学习效果差的问题 pass
- 长期看慕课和论坛,感觉效果很差
- 感觉通过视频学习,进步很大,但是即使学习完了,感觉还是菜鸟
- 视频也看了,书也读了,但是写起来还是很吃力,下一步如何熟练和进阶
产生这些结果的原因:
- 通常的视频网站传授给大家都往往是立竿见影的技能。
- 学习中缺乏思考,无法做到触类旁通。只知道照葫芦画瓢
- 基础薄弱,概念没有搞清。导致做上层的东西举步维艰。
- 没有比较良好的辅助工具或者无法找到优秀的辅助内容。
如何提高核心竞争力
- 什么是核心竞争力。表现在学习技术的能力,对待问题的态度,解决问题的技术方案。别的行业其实也是这样的。
- 具体如何提高核心竞争力,我上面有提到,参考程序员需要具备其他那些能力。
- 这两个能力是相辅相成的,很难做出孰重孰轻的决断。