Desenvolvimento

8 set, 2016

O que é um desenvolvedor iOS sênior para a Concrete Solutions?

Publicidade

*Este artigo contou com a ajuda de Daniel Astine, Erick Santos e Tales Pinheiro.

Recentemente, o nosso líder do capítulo de Android, Victor Nascimento escreveu esse ótimo artigo sobre o que é ser um desenvolvedor Android sênior para a Concrete Solutions. Alguns leitores pediram o mesmo para iOS, então aqui estamos nós! Este artigo, escrito a oito mãos, pretende dar algumas dicas e os principais passos para quem quer seguir carreira no desenvolvimento iOS, e mostrar o que é importante para nós aqui na Concrete Solutions.

Antes de começar, porém, ressaltamos que a leitura do artigo do “Capitão” Nascimento é muito importante, para não dizer obrigatória. Muitas das observações dele são válidas não só para Android e para iOS, mas para qualquer carreira em tecnologia e desenvolvimento de software e produto. Por isso, vamos acabar repetindo algumas das considerações dele, mas focando um pouco mais nas especificidades de iOS. Vamos lá?

1. Comecemos com as linguagens de desenvolvimento

São duas as linguagens usadas na plataforma (Swift e Objective-C), e o conhecimento profundo de ambas é indispensável para um desenvolvedor sênior. Apesar do foco atual estar em Swift, para evoluir dentro da linguagem, o conhecimento de Objective-C também é muito importante. Outro conhecimento que faz sentido para desenvolvedores iOS é referente à linguagem C e C++, que não precisa ser profundo, mas é importante ter uma ideia.

Neste contexto, entender Types e a diferença entre Value Types e Reference Types, Generic Types, enum, structs, class e optionals, assim como unwrapping desses em Swift, é indispensável. Bem como entender como é feito o gerenciamento de memória da plataforma, como o ARC atua, por exemplo, e como a má utilização das propriedades Weak e Strong podem afetar o desempenho de uma aplicação. Entender o uso e o melhor momento para usar Delegates, Notificações e Blocos/Closures também é importante.

Todo esse conhecimento é fundamental para tomar decisões de arquiteturas e para entender  os erros mais obscuros da linguagem, o que nos coloca em vantagem para analisar as inúmeras dependências que podem ser uma pedra no sapato posteriormente. Isso nos leva também a entender quando é o momento de usar um gerenciador de depêndencia, como o CocoaPods, e como fazer bom uso de seus frameworks.

Sobre arquitetura, é importante entender profundamente os problemas e limitações do MVC, que é aplicado pela Apple, mas também conhecer outras alternativas, como MVP, MVVM, VIPER etc. É preciso ser capaz de entrar em um projeto usando qualquer arquitetura ou pelo menos com habilidade para se adaptar rapidamente. Neste contexto, o conhecimento sólido dos cinco princípios do SOLID pode ser de grande ajuda.

2. Conhecer e entender a base do framework da Apple, o Foundation, bem como o GDC (Grand Central Dispatch)

O Cocoa Touch, o conjunto de frameworks que inclui, por exemplo o UIKit, também precisa ser entendido. Além disso, a manipulação de Storyboards deve estar de acordo com as últimas atualizações dispostas pela Apple, assim como o Auto Layout (inclusive programaticamente), transições de telas com Segues e a manipulação de diversas Storyboards, como também as transições entre elas. Entender o melhor momento para usar Storyboard, XIBs e até  mesmo saber criar Views, Layouts e navegações a partir de código também é essencial.

3. Saber sobre testes e qualidade é fundamental para qualquer desenvolvedor

A senioridade, neste ponto, traz obrigação para esse conhecimento. Ressaltamos que o teste é uma responsabilidade de todos os integrantes do time, mas o sênior deve conhecer os meios que a plataforma oferece para auxiliá-lo nesta questão, entender todas as formas de teste e diferenças entre elas (entre teste unitário e de instrumentação, por exemplo) e ser não só responsável mas precursor da cultura de qualidade. Esse quesito deveria ser óbvio, mas há uma grande quantidade de desenvolvedores que não se preocupam ou se preocupam pouco com a qualidade do software que está desenvolvendo. E isso não é aceitável para um desenvolvedor aqui na Concrete.

4. Entender os processos de build do projeto

Assim como conhecer atalhos para minimizar o custo do build, como a utilização da ferramenta Fastlane, por exemplo, é bastante importante. Os processos de submissão, a necessidade dos certificados, provisionning profile, certificado de Push e implementação do in-app purchase também devem ser conhecidos em sua totalidade, bem como saber navegar pelo iTunes Connect e distribuir o projeto em plataformas como TestFlight. Esse conjunto de conhecimentos é essencial para configurar CI e CD, por exemplo.

5. Um desenvolvedor sênior deve conhecer a fundo a metodologia com a qual trabalha

Seja Scrum, XP, Kanban ou qualquer metodologia ágil. Nem vamos citar aqui Waterfall ou RUP porque estamos falando especificamente da Concrete, e não trabalhamos com essas metodologias. Entretanto, é importante conhecer a diferença entre elas e saber argumentar a favor ou contra cada uma em um ambiente de trabalho.

6. Não basta ser bom tecnicamente

É preciso saber trabalhar em equipe, ter espírito de liderança, ser comunicativo, proativo, se destacar durante o trabalho em um produto. Tem um tweet do Ed Weissman, lembrado pelo Tales, que diz que a diferença entre um desenvolvedor júnior e um pleno é técnica, mas entre um pleno e um sênior é não-técnica. Por isso, se você está procurando chegar à senioridade não se esqueça também de evoluir seu lado de comunicação, interação e engajamento. Afinal, um ponto essencial do título “Sênior”, independente da plataforma em que você trabalha, é ajudar os outros desenvolvedores. É importante não só expressar sua opinião, mas também escutar as opiniões que lhe são passadas.

E é isso! Não se esqueça de dar uma olhada nos tópicos sobre integração e entrega contínua, controle de versão (GIT) e os protocolos de comunicação entre o aplicativo e o servidor que o Victor Nascimento escreveu no artigo dele. É igualmente importante ter esses conhecimentos em qualquer plataforma que você escolha para sua carreira em desenvolvimento de aplicativos ou softwares.

Se tiver qualquer comentário, deixe nos campos abaixo.

Até a próxima!