Baseada e adaptada da matriz de habilidades criada pela comunidade de Desenvolvedores iOS, este projeto visa documentar e mapear o perfil do profissional desenvolvedor Android.
Da esquerda para direita, a matriz representa o quão proeficiente o profissional desenvolvedor Android se encontra, incluindo diferentes tópicos e habilidades.
Junior | Pleno | Senior | |
---|---|---|---|
Ability | Consegue desenvolver um aplicativo de notícias, que utiliza uma API Rest. | Consegue construir um aplicativo de chat em tempo real. | Consegue convencer e estabelecer padrões de design para o time atuando de forma parcial. |
Code Integration | Usa git em sua forma mais básica: git clone, git commit, git push, git branch. | Conhece os fundamentos do Gitflow, e consegue opinar sobre o processo. | Conhece as técnicas de CD/CI e saberia automatizar builds sem dificuldade. |
Paradigms | Conhece os fundamentos de Orientação a Objetos. | Domina os paradigmas orientados a objeto e reconhece e cria soluções usando o paradigma funcional. | brings value from other platforms and paradigms |
Dependencies | Sabe utilizar e procurar bibliotecas de terceiros. (Github, Android-Arsenal e etc) | knows why apps can't use SPM, but Carthage is an option | knows why it is essential to own/reduce dependencies |
Platform | uses Array, Dictionary and Set | knows Value/Reference types and Equatable/Hashable | knows the details of method dispatch of both Swift and Obj-C |
API/Client-Server | Confortável para utilizar bibliotecas de networking como OkHttp e Retrofit. | making a WebSocket-based real-time chat is feasible | building a video chat is an achievable challenge |
Reference | Utiliza apenas Stack Overflow como referência de código. | Com frequência, implementa soluções baseada em textos da documentação oficial da plataforma. | asks platform developers and can reverse engineer |
Memory | Conhece os termos vazamento de memória, e sabe reconhecer quando eles podem acontecer. | knows NSPointerArray and why structs increase binary size | has a strategy to reduce out-of-memory crashes |
UI | Consegue construir uma interface básica, sem se atentar muito aos princípios de Material Design e aos impactos no desempenho do app. | has reasons to make UI in code | can take layout and diff calculation to non-main thread |
Multithreading | Embora possua conhecimento sobre Threads, com frequência ainda executa processamentos desnecessários na UI Thread, usando APIs como AsyncTask, ThreadExecutors, Threads e Runnables. | asyncAfter is an enemy, and thread synchronisation is a problem | understands multithreading problems beyond the deadlock |
Attitude | Espera que outros desenvolvedores ensinem e guiem durante a maior parte do desenvolvimento. | discusses design with the team to share decision | takes responsibility for design decision made by teammates |
Design Patterns | understands Delegation, Target-Action and MVC idea | is proficient at Observer, Facade and Mediator patterns | knows the sweet spot between dependency injection and service locator |
Product Quality | the app is tested if it works on my phone | writes unit tests and tried TDD and UI tests | defines a maintainable test pyramid with non-overlapping coverage areas |