寻找卓越的(Android)软件工程师( 译)

转载地址:https://juejin.im/post/58d2af185c497d0057df234e

在过去五年中,我一直做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 Thomas
Refactoring — 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)

java

Effective 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 Papers
Listen 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的一些blog

Chet Haas’s blog. Specifically These series of articles he (Chet) wrote about Android development
Dan Lew’s blog
Jake 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.

此文为译文,原文地址https://hackernoon.com/what-makes-a-good-android-software-engineer-206562e1fdb6#.g108jtz8i

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SWOT分析是一种常用的战略规划工具,可以帮助软件测试工程师识别自己的优势、劣势、机会和威胁,从而制定更有效的个人职业发展计划。以下是一个软件测试工程师的SWOT策略: 1. 优势(Strengths) - 技能和知识:软件测试工程师需要具备良好的技术能力和专业知识,包括测试方法、工具、编程语言等。 - 经验和能力:有丰富的测试经验和卓越的问题解决能力,能够快速识别和解决问题。 - 团队合作:具有良好的团队合作精神和沟通能力,能够与开发人员、产品经理等进行有效的沟通和协作。 2. 劣势(Weaknesses) - 缺乏经验:缺乏相关测试经验,需要不断学习和积累实践经验。 - 缺乏自信:有时候会缺乏自信,需要更多的自我肯定和鼓励。 - 技术不足:可能存在技术上的短板,需要不断提升技术能力。 3. 机会(Opportunities) - 学习机会:软件测试工程师可以通过培训、自学等方式不断提升自己的技能和知识。 - 行业发展:随着软件行业的不断发展,软件测试工程师的需求也在不断增加。 - 技术更新:随着新技术的不断涌现,软件测试工程师可以抓住机会学习新技术并应用于工作中。 4. 威胁(Threats) - 竞争压力:软件测试工程师市场竞争压力较大,需要不断提升自己的技能和能力以保持竞争力。 - 技术更新:随着新技术的不断涌现,软件测试工程师需要不断学习和更新自己的知识和技能。 - 经济衰退:经济不景气可能会导致公司缩减开支和裁员,软件测试工程师也可能受到影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值