前言

在过去五年中,我一直做Android相关的工作。在这期间,我与不同背景,不同水平的工程师进行过合作。有些工程师有非常丰富的经验,有些是刚走出校园的应届生,它们拥有的只是学校学习到的知识并利用业余时间进行App的开发。还有些工程师甚至不是CS专业,仅仅是自学的。在合作过程中,我目睹了不同类型工程师的工作交付内容和方式。

所以,如果你是一个Android软件工程师,可以尝试读一下这篇文章。

首先,很多人误认为移动开发非常简单,移动应用就是把根据后端的设计把一些界面组合在一起。真的是这样吗,其实这与实际情况差的很远。实际上,如果你看一下PlayStore上的应用,你就会发现app的质量分布其实是一个高斯分布,低质量的app很少,同时高质量的app也很少。

这里我定义一下平庸的App是什么?

在一个非常基本的层面上, 一个平庸的app与操作系统不能很好地兼容。首先,不遵循平台要求的 设计语言,这会使得用户感到困惑。第二,不考虑运行环境(内存、cpu、带宽、电量)实际上是有限制的。第三,在某些条件下不能工作(比如在弱网环境下)。现在的大部分软件都存在最后一个问题。

简而言之,以上三点就是构建一个好的移动应用的挑战。此外,App需要与公司的基础需求合理地整合,适应不断变化的业务需求。

所以如果我要寻找可以处理以上三个挑战的软件工程师,以下几点是我关注的:

  • 较好的软件工程和技术水平这包括:SOLID(面向对象设计)原则,clean code,应用架构和测试。数据结构和算法也很重要。但是我不在意面试者是否可以平衡二叉排序树。

  • 我关注面试者是否理解基本的数据结构(Lists, queues, trees, hash maps),是否理解 O 是什么,可以讨论时间和空间的交换,就是最基本的技能

  • 熟悉java语言(如果面试者非常熟悉其他的语言,我也不会拒绝)。

  • 理解并发因为App是响应式的,所以不可以在主线程中执行耗时任务。很多事情需要在其他线程执行,如果面试者不能处理并发编程,他们需要在工作和项目中学习。

  • 理解分布式系统随着移动应用变得越来越灵敏,需要设计为可以离线使用。这意味着如果网络有故障,相同的用户可能会面对不同的状态。因此,面试者需要了解CAP(Consistency,Availability,Partition Tolerance theorem)理论和分布式系统的共识模型。

  • 分析解决问题的能力面试者需要对事物的工作原理保持好奇,并且有大局观。

  • 较好的口头和书面表达能力在技术上,沟通交流非常重要。面试者清晰地表达自己的想法,同时合理的文档说明是非常重要的。其实,是否擅长写文档一定程度上也代表了代码能力。

  • 理解当前的技术环境和对设计与工程的影响。

我并不担心面试者是否对SDK本身理解多少。如果面试者理解以上的几点,即使他只是一个Android的用户,也可以快速地学习。也就是说,面试者同时拥有好的CS背景,了解android生态环境,还要知道以下的一些基本概念:

  • 可以画出Android的基本架构

  • 可以描述在点击Android studio的一个按钮之后具体发生了什么逻辑

  • 理解基本的Dalvik和ART 虚拟机

  • Android进程间通信原理

  • app的沙箱机制以及为什么要用沙箱

  • 权限系统(权限在底层是如果实现的)

  • 进程和应用生命周期

  • 还有一点是可以和面试者聊他擅长的话题,如果他擅长ui,就可以和他聊UI。

可以发现重要的是判断面试者是否知道核心的基础和概念,从而较好地处理分给他们的任务。一定不要雇佣只会使用一两个library的员工。工程师不仅在必要时会使用library,而且可以在提供解决问题的方法之前可以分析使用情景,预见可能的问题。

再次强调,一定不要雇佣只会使用一两个library的工程师。

当然,我这里描述的条件适用于senior 工程师。同样也需要雇佣一些junior工程师。但是一定要控制好两种工程师的比例。如果团队中有太多初级工程师,那么开发过程非常艰难,需要修改一个接一个的线上问题,直到可以代码达到维护性和测试性良好的程度。

最后

如果你是一个Android工程师,你可以看一下以下的文章以提高自己的技术水平:

软件工程技术Clean Code — by Uncle Bob Martin The Pragmatic Programmer — by Andy Hunt and Dave ThomasRefactoring  — by Martin Fowler Head First Design Patterns — by Elisabeth Freeman, Eric Freeman, Bert Bates and Kathy Sierra Patterns of Enterprise Application Architecture — by Martin Fowler (his blog is also worth following)

javaEffective Java, Second Edition  — by Joshua Bloch

并发Java Concurrency In Practice   — by Brian Goetz

数据结构和算法Introduction to Algorithms (a.k.a The Cormen book)  — by Charles E. Leiserson, Clifford Stein, Ronald Rivest and Thomas H. Cormen.or The Algorithm Design Manual  — by Steven Skienna

计算机文化Subscribe to ACM Queue Love the PapersListen to Software Engineering Radio and/or Software Engineering Daily

问题解决技巧How To Solve It — by G. Polya and John H. Conway

写作技巧On Writing Well  — by William Zinsser

值得follow的一些blogChet Haas’s blog . Specifically These series of articles he (Chet) wrote about Android developmentDan Lew’ s blogJake Wharton’s blog Jesse Wilson’ blog Cyril Mottier’s blog Chris Bane’s and

Roman Nurik’s blogs for UI related subjects.Listen to Android Backstage and The Fragmented Podcast. And finally do subscribe to Android Weekly , to read about the latest stuff in the Android development world

同时分享一下Android进阶资料以及架构师学习路线图

部分Android基础和进阶资料

文中所有的知识点我都放在GitHub上了,需要的可以自取。

一、Java 基础+进阶

  • JVM
  • Object
  • static
  • final
  • String、StringBuffer. StringBuilder
  • 异常处理
  • 内部类
  • 多态
  • 抽象和接口
  • 集合框架
  • 反射
  • 单例线程
  • volatile
  • synchronized
  • Lock
  • 引用类型
  • 动态代理
  • 元注解

Android 知识点汇总

  • Activity
  • Fragment
  • Service
  • BroadcastReceiver
  • ContentProvider
  • 数据存储
  • View
  • 进程
  • Parcelable接口
  • IPC
  • Window / WindowManager
  • Bitmap
  • 屏幕适配
  • Context
  • SharedPreferences
  • 消息机制
  • 线程异步
  • RecyclerView 优化
  • Webview

Android 扩展知识点汇总

  • ART
  • Hook
  • Proguard
  • 架构
  • Jetpack
  • NDK开发
  • 类加载器

学习路线图

需要高清的架构师学习路线图可以点击Android技术交流,人工审核务急。

寻找卓越的(Android)软件工程师,可解你燃眉之急相关推荐

  1. 下列不属于android布局的是( ),Android软件工程师笔试题(全选择题)【0-1年经验】...

    Android软件工程师笔试题,全选择题,适合0-1年经验的面试者. Android软件工程师笔试题 单选题(共35题) 1.退出 activity 对一些资源以及状态的操作保存,可以在生命周期的哪个 ...

  2. android软件开发考试,Android软件工程师笔试题(全选择题)【0-1年经验】

    Android软件工程师笔试题 单选题(共35题) 1.退出activity 对一些资源以及状态的操作保存,可以在生命周期的哪个函数中进行 A.onPause() B.onCreate() C.onR ...

  3. android的自我评价,2021年ANDROID软件工程师的自我评价

    <2021年ANDROID软件工程师的自我评价>由会员分享,可在线阅读,更多相关<2021年ANDROID软件工程师的自我评价(4页珍藏版)>请在人人文库网上搜索. 1.and ...

  4. 西安Android软件工程师,西安安卓软件工程师培训封闭班

    西安安卓软件工程师培训封闭班?本篇文章致那些从零开始学 Android 的或者正要学习还没有勇气出发的人, 希望通过本文的介绍能够让你在学习的道路中坚持下来. 安卓应该怎么学? 不要重复造轮子 初,我 ...

  5. android软件工程师/android中间件开发

    Android平台及中间件工程师 职责描述: 1 设计,集成和优化验证基于Android平台以下软件运行库 Multimedia: Video Middleware (OpenMAX, GStream ...

  6. android软件工程师请进(说说自己公司的软件人员配置)

    所在公司软件人员配置: 驱动工程师:6个       一般就是调试tp驱动,lcd参数,camera的效果等. 应用工程师:3个      一般是改改android的桌面--launcher ,做一下 ...

  7. android软件工程师应具备的素养

    作为一个移动互联网时代的Android工程师,应该了解,比以往的任何时候,Android平台的终端工程师都更需要开阔的视野和复合型的技术背景.     随着无线带宽的不断提高,移动互联网时代以电路域为 ...

  8. Android软件工程师-面试题

    1.    请描述下Activity的生命周期. 必调用的三个方法:onCreate()--> onStart() --> onResume(),用AAA表示 (1)父Activity启动 ...

  9. android面试软件工程师,华为ANDROID软件工程师面试经验

    面试过程: 首先他让我简单介绍一下自己,我介绍了本科和硕士期间分别是什么专业,具体学习了哪些方向的内容,又讲了一下中间的工作经历.然后他问我对算法有什么了解,能不能挑一种熟悉的算法解释一下原理.我正好 ...

最新文章

  1. 企业应用开发平台-GAP平台
  2. 如何判断网站是否启用HTTP2
  3. Kubernetes 1.2新功能解析:使用Deployment
  4. QT编程中遇到的问题总结
  5. msyql开启慢查询以及分析慢查询
  6. 文本以大写字母html,如何强制EditText以大写字母开始文本?
  7. java取下一天的零点
  8. 二十年后我发明了保姆机器人作文_【赏学堂】苹果五级作文班优秀作品赏析——温睿哲二十年后回故乡...
  9. string wstring
  10. Solr6 快速入门教程
  11. 汇编语言程序设计基础知识
  12. 机器学习实战课后习题(四)
  13. 论文写作课程心得体会
  14. CredSSP 加密数据库修正
  15. Holt-Winters 季节方法
  16. (小米系统系列三)刷机成功后卡在开机引导页,将电脑设置成热点,给手机提供验证网络的方法
  17. jquery easyui二次开发总结(二)
  18. PyTorch入门学习-4.自然语言分类任务
  19. Python通过机器学习实现对个人信用评估
  20. notepad++ 同时搜索多个关键字

热门文章

  1. mysql mediumint是什么类型_MySQL中数值类型中smallint、mediumint等区别是什么 - 晓雨网...
  2. 做一个简易计算器,用户输入两个数,实现加减乘除
  3. 黑天黑地黑国际,黑帽大会这 20 个黑客演讲依然很燃
  4. uni-app app 端 微信支付
  5. ocv特性_OCV是什么意思啊!!!
  6. 网络流量分析帮助企业提升OA应用性能(二)
  7. 目标检测算法——YOLOv5/v7改进之结合最强视觉识别模块CotNet(Transformer)
  8. 把点开活:互联网圈的说学逗唱
  9. 05_02_Mybatis||day02_Mybatis第二天||(总结篇,原文很详细)
  10. i.MX6ULL驱动开发 | 33 - NXP原厂网络设备驱动浅读(LAN8720 PHY)