优秀Android软件工程师的定义

2022-04-04 18:51:48
导读 大家好,我是本期栏目编辑小友,现在为大家讲解优秀Android软件工程师的定义问题。 在过去的五年里,我一直在做与安卓相关的工作。在此期间

大家好,我是本期栏目编辑小友,现在为大家讲解优秀Android软件工程师的定义问题。

在过去的五年里,我一直在做与安卓相关的工作。在此期间,我与不同背景和水平的工程师一起工作。有的工程师经验非常丰富,有的是刚出校园的应届毕业生。他们只有学校学到的知识,利用业余时间开发App。有些工程师甚至不是CS专业,而是自学的。在合作过程中,我见证了不同类型工程师的工作交付内容和方式。

所以,如果你是安卓软件工程师,可以尝试阅读这篇文章。首先,很多人误以为移动开发很简单,移动应用就是按照后端设计组合一些界面。真的是这样吗?其实和实际情况相差甚远。事实上,如果你看看PlayStore中的应用,你会发现应用的质量分布其实是高斯分布,低质量的应用很少,高质量的应用也很少。

在这里,让我来定义一下什么是平庸的App。

从最基本的层面来说,一个平庸的应用程序与操作系统的兼容性并不好。首先,它没有遵循平台要求的设计语言,会让用户感到困惑。其次,无论操作环境(内存、cpu、带宽、功耗)如何,其实都有局限性。三是在一定条件下(如网络环境较弱)无法工作。现在大部分软件都有最后一个问题。

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

因此,如果我正在寻找一个能够应对上述三个挑战的软件工程师,以下几点是我所关心的:

良好的软件工程和技术水平,包括:SOLID(面向对象设计)原理、干净代码、应用架构和测试。结构和算法也很重要。但是我不在乎面试官能不能平衡二元排序树。我关注面试官是否理解基本的数据结构(列表、队列、树、哈希图),是否理解O是什么,能否讨论时空的交换是最基本的技能。

熟悉java语言(如果面试官对其他语言非常熟悉,我不会拒绝)。

理解并发性因为App是被动的,所以不可能在主线程中执行耗时的任务。许多事情需要在其他线程中执行。如果受访者不能处理并发编程,他们需要在工作和项目中学习。

了解分布式系统随着移动应用变得越来越敏感,需要设计为离线使用。这意味着,如果网络出现故障,同一用户可能会面临不同的状态。因此,面试官需要了解分布式系统的CAP(一致性、可用性、分区容差定理)理论和共识模型。

解决问题的能力面试官需要对事情的运作方式充满好奇,并且有一个大的视野。

良好的口头和书面沟通技巧在技术上非常重要。对于面试官来说,清晰地表达自己的想法是非常重要的,同时,合理地解释文件也是非常重要的。其实你是否擅长写文档在一定程度上也代表了代码能力。

了解当前的技术环境及其对设计和工程的影响。

我不担心面试官对SDK本身了解多少。如果面试官明白以上几点,即使只是安卓用户,也能学得很快。也就是说,面试官也有很好的CS背景,了解安卓生态环境,也知道以下基本概念:

可以画出安卓的基本架构

你可以描述一下点击安卓工作室的一个按钮后会发生什么逻辑。

了解基本的Dalvik和ART虚拟机。

安卓进程间通信原理

app的沙盒机制,为什么要用沙盒?

权限(权限在底层实现)

和应用程序生命周期。

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

可以发现,判断面试官是否了解核心基础和概念很重要,这样才能更好地处理交给他的任务。

们的任务。一定不要雇佣只会使用一两个library的员工。工程师不仅在必要时会使用library,而且可以在提供解决问题的方法之前可以分析使用情景,预见可能的问题。

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

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

在过去五年中,我一直做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工程师。但是一定要控制好两种工程师的比例。如果团队中有太多初级工程师,那么开发过程非常艰难,需要修改一个接一个的线上问题,直到可以代码达到维护性和测试性良好的程度。

.dfma { position: relative; width: 1000px; margin: 0 auto; } .dfma a::after { position: absolute; left: 0; bottom: 0; width: 30px; line-height: 1.4; text-align: center; background-color: rgba(0, 0, 0, .5); color: #fff; font-size: 12px; content: "广告"; } .dfma img { display: block; }
免责声明:本文由用户上传,如有侵权请联系删除!