饿了么4年 + 阿里2年:研发路上我学习Android的一些套路与思考

**5.机智地使用Google。**从事编程工作,使用Google是一种必须。虽然国内访问不了,但是对于聪明的程序员来说这不算问题。通常情况下,我都是讲想要搜索的知识点转成英文的形式,不包含中文。优先查看stackoverflow 和 google groups的内容。相比而言,中文的相关资源并不是很可靠,质量也普遍差一些。

**6.善用工具,**多使用终端,多尝试写一些脚本解决重复的工作。Python,Ruby,Shell脚本都可以帮助你写出很多利器。

  • 比如全文查找关键字工具 grep -E $1 --exclude-dir={.git,lib,.gradle,.idea,build,captures} --exclude={*.png,*.jpg,*.jar} . -R --color=always -n能找出Android工程下面的包含某个关键字的文件以及所在的行数。

  • 快速获取当前Activity的名称 adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp' --color=always

  • 快速检查json文件是否合法

  • https://github.com/androidyue/DroidScripts

7.和现实事物关联类比的能力

随着编程时间的增长,我们会原来越发现程序里的很多概念和现实生活中的事物是类似的。

  • 比如数据库的索引和现实生活中我们使用的字典索引。好处都是便于快速查找。不好的地方,索引多了会增加占用,增加,删除,修改同时连带索引修改会慢一些等。

  • 比如对象池和现实中餐厅的公共餐具是类似的。我们都需要回收的时候,清理脏数据,避免影响到下一次使用。

  • 比如KFC里面的餐具回收人员关于何时回收餐盘,和JVM的GC其实是类似的。一个对象不被其他对象持有,就可以回收。即一个桌子上没有人,只有餐具通常是可以回收的。

如何做到关联和类比

  • 了解编程中的具体概念,抓住问题的关键点和关键行为

  • 选择现实中习以为常的事物和行为进行类比,不要选择模糊不清的。

  • 提取共同点,检查是否match。

**8.对待问题的态度 对待问题的态度一定要积极。**不能得过且过。比如对待不容易/不能复现的问题,及时手头没有可以复现的机器,也要通过模拟/使用云设备 等方式尝试重现。

对于目前在做的只有自己已知的问题,不要隐瞒,尽量暴露出来,这样便于自己和他人更好的发现解决。

作为Android程序员,如何把握好技术的宽度和深度


对于Android来说,有太多的诱惑,比如React Native,小程序,热更新,插件化。

我理解的应该是先从宽度上拓展,然后在尽心深度研究。

什么时候需要横向拓展

  • 初学者

  • 工作业务量繁多,比如浏览器开发(普通App开发技术,HTML+Javascript等技术)

  • 自身兴趣

什么时候需要纵向深入

  • 中级和高级开发

  • 追求更深入的细节和思想

  • 工作内容需要

横向发展有哪些

  • ReactNative等技术

  • 简单的后台开发 Java/PHP/Python/Ruby

  • IOS等应用开发

  • 总而言之就是会的多

纵向发展有哪些

  • 系统源码

  • 各种技术的实现机制

  • 操作系统相关知识等

  • 总而言之就是学得精,知其然深知其所以然。

我个人比较倾向于多花点时间做深入研究,在这个过程中会慢慢形成一种透彻理解技术的能力,有了这种能力之后就能触类旁通,学习其他技术也会更加轻松。

另外,工作需要时影响你朝着哪个维度发展的重要因素。所以选择一个公司要谨慎。

  • 通常大公司,优秀的团队会有利于你进行纵向深入

  • 小公司,创业公司更多的会影响你进行横向发展。

如何从日常的工作中获取最大的收益


日常的工作中,我们都是在做公司的项目。我们想要做到最大化收益需要做到

  • 不要将自己的要求仅仅停留在功能实现(比如完成一个界面不代表你的收益做到最大,只是代表任务完成)

  • 要理解你所使用的技术的原理和本质。不要停留在API使用,否则无法增强你的竞争力。比如我们对于加载Bitmap都会用到LRUCache,我们则需要至少理解LRUCache的原理,如果可以的话,了解它的内部实现机制。

  • 项目中有好的地方,要去思考好在何处。思考这种技术的通用场景。

  • 在项目中思考更好的解决方法。做好两种方案的优缺点对比。比如你听了《Android Performance Pattern》中关于ArrayMap的讲解,也考虑到HashMap的空间占用问题,不要急于去替换。要做到对比(既要了解HashMap也要了解ArrayMap)同时结合业务场景来选择最适用的。

  • 如果在项目中遇到了问题,建议先解决,然后空余时间研究这个技术的原理和细节。后续的研究务必要做。

  • 善于做总结,将自己的经验和教训写成博客分享给他人。

日常的工作给我们提供了许许多多好的实践和不好的问题,是一块弥之珍贵的技术提升的源泉。

Android那么多库,我该选择哪些,怎么学,学到什么程度


库的存在是为了封装细节,简化调用者实现或者辅助我们更容易发现问题。比如ButterKnife利用注解简化了对于view的查找和类型转换等功能。

关于如何选择那些库

  • 确定这个库是否是必需的

  • 这个库能否带来开发效率的提升,降低代码的维护成本

  • 这个库的学习成本如何 比如rxjava其实学习成本会相对高一些。

  • 这个库的质量如何,不要仅仅看star,更要看issue的处理情况

Flipboard常用的库(部分)

  • LeakCanary A memory leak detection library for Android and Java.

  • Stetho Stetho is a debug bridge for Android applications, enabling the powerful Chrome Developer Tools and much more.

  • ButterKnife Bind Android views and callbacks to fields and methods.

  • Baber A custom view styling library

  • GoldenGate An Android annotation processor for generating type safe javascript bindings

  • MaterialEditText EditText in Material Design

  • 。。。

关于库,首先我们需要掌握其使用方法,同样也需要理解其运行机制。

对于初学者,大学生的建议有哪些


  • 越来越多的关于互联网寒冬的消息传出

  • 听见越来越多的人抱怨Android找工作越来越难,已经趋近饱和。

  • Android开发的红利期正在逐渐消逝,尤其是对于初级和中级开发人员

  • 关于现在加入Android开发队伍,我并不反对。

  • 仍然可以赶上红利期的有容器,机器学习和人工智能。

  • 但是无论选择哪一种技术,即便是Android,请具备好的基础和较强的编程能力和足够的爱好。不要仅仅追求物质。

一直想学,却很难坚持下去


  • 有意愿是很好的。

  • 如果很难坚持下去,可能的原因有没有学进去,或者自制力比较差

  • 关于没有学进去,可以参考上面提到的学习方法

  • 如果是自制力的话,可以通过自我监督和他人监督的方式来改善。

不知道去哪里学安卓,可以边学边工作么


  • 学习Android的途径有很多,可以是自学(视频网站,看书,博客)

  • 边学边工作通常是可以的,不过具体实施起来还要结合自身的情况,比如时间是否充裕,学习者的决心和自学能力。

春招做准备,数据结构和算法不懂怎么办


无论是春招还是秋招,对基础知识的掌握程度都是很重要的衡量标准,毕竟毕业生的实战经验比较少一些。

数据结构和算法应该是必不可少的一部分。建议还是要多多做一些准备工作。

呈现出最好的状态来面试春招。

自己有一个什么样的个人项目才有竞争力


如果这个项目是App

  • 首先有足够的用户量,比如月活达到上万的数量级

  • 界面和交互处理良好,符合Android UI/UE规范

  • 运行流畅和稳定,不存在低级的错误(比如卡顿等问题)

  • App能明显解决用户的痛点

如果这个项目是一个开源项目

  • 有足够的star(然而这个已经被玩坏了)

  • issue的处理情况

  • contributor的数量

  • 设计的思想是否优秀

  • 代码是否居然自解释性

  • 学习成本和维护成本尽量少

我该如何选择网络中鱼龙混杂的学习资料 pass


  • 使用Google和StackOverflow,Medium

  • 如果是博客文章,在自己能力可以理解前提下,尽量选择英文

  • 最简单判断一个文章的优劣可以先到文章的底部看评论(Good,Execellent,Awesome)以及Google+,Facebook,Twitter分享数量

  • 尽量选择内容整洁(说明态度认真)的文章

学习效果差的问题 pass


  • 长期看慕课和论坛,感觉效果很差

  • 感觉通过视频学习,进步很大,但是即使学习完了,感觉还是菜鸟

  • 视频也看了,书也读了,但是写起来还是很吃力,下一步如何熟练和进阶

产生这些结果的原因:

  • 通常的视频网站传授给大家都往往是立竿见影的技能。

最后

现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!

Android架构师之路很漫长,一起共勉吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值