0
点赞
收藏
分享

微信扫一扫

我学习Android的一些套路,flutter瀑布流自适应高度

以沫的窝 2022-01-26 阅读 52

除了编程基础,我们还需要补充哪些能力

  • 喜欢钻研的兴趣
  • 良好的英语理解能力
  • 善于思考和总结的习惯
  • 高效率的学习方法
  • 能够机智地利用Google搜索
  • 善于利用工具
  • 和现实事物关联类比的能力
  • 对待问题的态度

1.喜欢钻研的兴趣,尽管高级编程语言的出现让我们将精力更多的放到业务上,而不是编程细节。正所谓知其然知其所以然,钻研细节可以更好地帮助我们实现业务,做到了然于胸。

2.良好的英文理解能力。由于一些原因,我们接触到的一些技术的资料都是二手资料,而这些二手资料往往在知识传递的效果上有一些折扣,甚至是偏差。英语可以说是(安卓)编程提升的加速器。同时,英语好的话,可以辅助我们写出更具有自解释的代码。

3.善于思考和总结的习惯。真理越辩越明,同样技术越思考越清晰。对于一个技术通常我们需要抱有这样的疑问

  • 它是什么 一句话概括
  • 解决了什么问题 存在的意义
  • 怎样解决了问题 内部的实现
  • 它的缺点是什么 多角度分析

比如我们关于WebView的考虑点的总结

  • 是否支持js
  • 是否支持mixed content (https网页加载http图片)
  • 与js通信的问题,比如给方法增加JavaScriptInterface注解
  • 是否自身处理某些URL(协议不同,不让flipboard://showSection等)还是交给外部程序
  • 关于UA中是否加入特定的标识,比如Flipboard字样
  • 是否增加特定的header

有了思考,我们需要以文字的形式记录下来,这也应了那句老话,好记性不如烂笔头。建议以博客的形式总结出来。

4.高效率的学习方法。

  • 理清楚概念很重要
  • 做好控制变量法
  • 多动手实践,与理论结合
  • 抓住重点,剔除干扰因素

其实,任何复杂的事情都是由简单的事情组成,编程也是一样。在编程过程中,我们会接触到很多概念,这些概念很重要,对于概念的一知半解往往会使得我们越走越慢,学习起来原来越困难。因此对于编程中的概念要务必理解准确和深刻。

控制变量法:我们在初中做实验的时候,经常会用到控制变量法。在编程中红也是。当我们在解决问题时,也要做到控制一处修改。比如我们项目中需要修一个webview相关的bug,我们要想一想能不能脱离现在庞大而负责的项目,单独写一个简单的变量单一的sample来重现,做到快速和小粒度验证。

多动手实践与理论结合:很多时候,我们学习新技术的时候,我们应该先学会使用它,有了初步的认知之后,便于我们更好的理解和深入研究。比如关于GUI的东西,我们最好时不时做出一些东西,理论和实践要做到相辅相成。

抓住重点,剔除干扰因素:

  • 任何复杂的事情都是简单问题错综复杂交织在一起,进行拆分
  • 去除无关因素或者干扰因素
  • 补充了解问题必备的知识
  • 具象分析:看它的实现原理和运行机制 (比如通过分析源码,我们知道HandlerThread无非就是一个自带并初始化好了Handler的线程)
  • 抽象总结:从适度抽象的角度进行归纳

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,小程序,热更新,插件化。

t_genius.jpeg

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

什么时候需要横向拓展

  • 初学者
  • 工作业务量繁多,比如浏览器开发(普通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找工作越来越难,已经趋近饱和。
    erialEditText EditText in Material Design
  • 。。。

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

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

  • 越来越多的关于互联网寒冬的消息传出
  • 听见越来越多的人抱怨Android找工作越来越难,已经趋近饱和。
举报

相关推荐

0 条评论