Apple WWDC Student Challenge: como se dar bem?

Como todos nós do universo da maçã sabemos, Apple anunciou de surpresa um desafio para estudantes de todo o mundo comemorando essa nova edição virtual da WWDC que assistiremos de casa esse ano por causa do Covid-19. Nem eu mesmo imaginava que a Apple manteria um “Scholarship” esse ano sem poder presentear os alunos com um ingresso gratuito do evento e demais outros grandes presentes aos 350 selecionados.

Pra quem não sabe, Apple todo ano levanta um desafio a ser implementado em Swift a todos os alunos do mundo aspirantes a desenvolvedores iOS, cujo objetivo na maioria das vezes é fazer um Swift Playground que entretenha um usuário por no máximo 3 minutos. O prêmio dado aos 350 vencedores é um ingresso gratuito do seu maior evento de tecnologia do ano, estadia dada pela Apple, vários brindes e a chance de conhecer outros profissionais de várias partes do mundo e conhecer de perto os engenheiros da Apple nessa semana fantástica de aprendizado e novidades.

Infelizmente a maçã não conseguirá dar a seus vencedores a viagem a California tão esperada dessa vez, mas a boa notícia é que pelo quarto ano seguido, o projeto requerido a concorrer o ingresso será novamente um Swift Playground, e o prêmio será aquela jaqueta fantástica e tradicional com o tema do evento vindo junto com pins decorativos, além do prestígio de ter sido selecionado pela Apple dentre tantos outros participantes e aprender melhor uma nova tecnologia com Swift . Nesse artigo eu tenho como objetivo compartilhar toda a minha jornada que tive por 10 dias em 2019 pra fazer o meu projeto, minhas expectativas, o que aprendi, e boas dicas pra arrasar no seu projeto, como um bom treinamento pra um futuro evento físico em 2021.

Sobre o Swift Playgrounds

Swift Playgrounds Logo
Swift Playgrounds Logo

Pra quem ainda não conhece, o Swift Playgrounds é uma das novidades mais inovadoras que a Apple nos presenteou durante os últimos anos. Ele nada mais é do que um projeto menor e mais simples(não é um app) que te permite proporcionar uma experiência pequena ao usuário de forma a ensinar a ele algum conceito, seja ele o manuseio de alguma feature no Mac, algum conceito matemático, ou de computação ou até uma lição da vida real.

A infinidade de ideias que podem sair de um Playground é inacreditável! Muitos colegas meus aproveitaram o projeto pra fazer algo ensinando matemática, como um amigo que fez um playground ensinando múltiplos e divisores, um outro amigo que aproveitou para ensinar teorias da aleatoriedade com chaotic movements, e até muita gente que utilizou ele pra mostrar como podemos utilizar as tecnologias Apple para tornar o mundo mais acessível a todos.

Algo importante que esqueci de mencionar é que o Swift Playgrounds é feito para rodar principalmente em iPads(não em iPhones) ou em Macs, com os últimos updates do MacOS Catalina. Com isso agora o desafio tornou-se acessível a uma gama bem maior de desenvolvedores, pois até ano passado era preciso ter um iPad para rodar Playgrounds do tipo Book, e agora qualquer um com um Macintosh ou Mac Mini podem participar também.

“Ok, Alvarez, mas o que é esse Book que você mencionou acima? Não entendi, qual a diferença dele para um Playground normal?”. Que bom que perguntou, gafanhoto, porque essa é a parte mais interessante! Há dois tipos de playground que podem ser feitos: Um playground normal, aquele que você muito provavelmente já deve ter utilizado quando aprendia o básico da linguagem Swift(segunda opção de projeto do Xcode), onde você é livre pra apresentar cenas, sprites e elementos gráficos como você quiser sem o ciclo de vida de um projeto normal, e também o tão conhecido Playground Book. O Playground Book é a mais perfeita analogia com um livro infantil educativo. Você com certeza quando era pequeno já teve aqueles livros que ensinavam a contar, ler, somar ou subtrair, tudo puxando cordinhas, virando a folha ou demais interações com os dedos. O Playground Book funciona exatamente assim, porém com uma

abordagem digital e ensina qualquer faixa etária de pessoa leiga no assunto. O Playground Book possui exatamente a hierarquia de um livro: é dividido em capítulos, cada capítulo é dividido em páginas e cada página possui uma cena, onde você pode criar o que quiser.

“Espera ai, mas eu já posso interagir com os outros aplicativos com o toque do dedo, o que difere esse dos outros?”. No Playground Book você não só interage com o toque, como também pode interagir diretamente com partes do código que fazem a cena funcionar. Cada cena do playground é divida em duas páginas na UI:

Foto ilustrativa disponível emhttps://www.apple.com/swift/playgrounds/

a da esquerda possui as instruções do funcionamento da cena e a segunda corresponde a cena em si. Assim por exemplo, se permitir, você pode mexer nas variáveis que computam a cor da cena, talvez a velocidade de algum personagem, até a aparência de um personagem da cena. Isso torna o Playground uma ferramenta extremamente eficaz para ensinar programação. Observe que na imagem acima, o funcionamento da cena é definido pela chamada sequencial dos métodos moveForward e collectGem

O link para baixar o template básico de um Playground Book encontra-se abaixo no site da Apple.

Minha jornada de 10 dias

Participar da WWDC foi um grande desejo que eu tinha desde que comecei a aprender iOS. Cheguei a submeter projetos duas vezes, uma em 2018 e outra em 2018, mas devido a ter bastante ocupações com trabalho e faculdade na época da minha primeira tentativa em 2018 acabei não mandando um projeto completo..Em 2019, que era meu último ano elegível como estudante assumi bem maior determinação e comecei a me planejar um eventual Swift Playground com muita antecedência.

Começou tudo no dia que eu estava trabalhando e de repente todos da mesa começaram a comentar que a Apple finalmente havia anunciado seu desafia anual do Scholarship. Corri no site e vi aquela linda logo do evento anunciando o desafio para os estudantes em 2019.

Logo oficial do evento de 2019
Regras e termos do desafio 2019

A minha primeira reação foi um susto, pois aparentemente a Apple havia reduzido drasticamente o prazo para a submissão dos playgrounds no ano de 2019: dessa vez haviam dado apenas 10 dias..

Imagine, eu não mexia decentemente em um Swift Playground já tinha um ano e na verdade eu nem havia conseguido fazer rodar em um iPad, pois no ano anterior eu tinha apenas feito um projeto normal no Xcode e passado tudo para o playground no último dia sem testar quase nada(muito provavelmente o projeto não rodou no iPad Pro do avaliador). Eu tinha 10 dias para pensar em uma ideia, aprender a mexer em um playground, relembrar o funcionamento do Spritekit(fortemente recomendado para criar as cenas) e depois fazer de fato o projeto para submeter no dia 24/03/2019.

No mesmo dia, após sair do trabalho corri para o laboratório da Apple Developer Academy para consultar os mentores a respeito de possíveis ideias e estudar novamente e Swift Playgrounds. Eu queria na verdade fazer um projeto que ensinasse o funcionamento por trás do Blockchain, o qual estava trabalhando na época e gostaria de poder ensinar tal tecnologia tão complexa para uma pessoa leiga através de um playground, quem sabe até de forma que uma criança pudesse entender. Pra quem não sabe o Blockchain em poucas palavras é um sistema totalmente descentralizado em que blocos de informações precisam do consenso da maioria dos nós da rede para ser inserido na cadeia(daí o nome)

Meu maior impasse na verdade foi que subestimei a simplicidade que um playground deveria ter. Quando falei com os mentores, insisti que deveria ser algo extremamente complexo e demorado, onde o usuário poderia ter um milhão de interações, muitas animações ocorreriam, e ele sairia um completo profissional após concluir o meu Playground. Daí fui advertido que a experiência não poderia durar mais do que 3 minutos, e que o que a Apple de verdade valorizava era a simplicidade para criar coisas lindas e eficientes.

Decidi então que meu projeto seria feito em 3 cenas distintas de forma a ensinar conceitos bem básicos com relação ao Blockchain:

  1. Cena I: Hash
Escrever uma mensagem de tamanho variável em um papel
O hash da mensagem é mapeado no envelope de tamanho fixo

A primeira cena ensina o conceito de Hash com a analogia em envelopar uma carta de correio. Independente do tamanho, o hash sempre terá um tamanho fixo e independente do quão duas mensagens são similares a saída sempre será completamente diferente.

Observe que o usuário que atribui o valor na variável message, que corresponde ao conteúdo do papel a calcular o hash.

2. Cena 2: Mineração

Escrever uma mensagem e calcular o hash pelo nível de dificuldade

A segunda cena já explica o processo de mineração, onde o usuário escreve uma mensagem para calcular o hash e um nível de dificuldade que corresponda ao número de zeros que o hash deve ter para ser aprovado.

Dessa forma o hash será calculado através tanto da mensagem quanto de uma variável contada a partir de zero, o nonce. O nonce vai sendo acrescido em uma unidade até que a saída atenda à dificuldade correspondente.

3. Cena 3: Cadeia de blocos

Minerar e inserir

Já a terceira e última cena consiste em fazer o mesmo procedimento de mineração da cena anterior, mas dessa vez calculando o hash também a partir do bloco anterior de forma a proporcionar um encadeamento do bloco com os anteriores.

Fiz a experiência de forma bem simples para que o usuário entenda como o Blockchain funciona dentro de 3 minutos.

A forma que utilizei para conseguir aprender o Swift Playgrounds, Spritekit e aprimorar minha ideia dentro de 10 dias foi justamente ir brincando com a ferramenta fazendo animações e sprites bem simples de modo que o projeto fosse funcionando e testado aos poucos. Sempre cedia meu projeto para que colegas do laboratório brincassem com ele e eu visse quanto tempo estava levando a experiência, se a mesma obedecia os 3 minutos. No início, devido a eu colocar textos muito grandes e complexos no markup(página da esquerda), causava bastante esforço para o usuário entender o funcionamento e acaba atrasando, por isso eu mantinha o texto o máximo resumido e simples.

Ao final de 10 dias, indo toda noite para o laboratório e utilizando inclusive as minhas madrugadas, no dia 24 de março eu consegui finalizar as 3 cenas eliminando todos os bugs. Submeti sem muita esperança, pois eu sabia que o mundo inteiro estava concorrendo ao prêmio e a Apple possuía critérios muito rígidos.

O resultado do desafio estava marcado para o dia 15/04/2019 e minha ansiedade era quase impossível de conter. Levaram o dia inteiro para retornar, sendo que normalmente o resultado saía de dia mesmo, mas às 9 da noite me deparei com o emocionante email:

Tudo havia dado certo ;). O link do vídeo completo demonstrativo do playground pode ser encontrado aqui.

Dicas importantes

Aqui vão as dicas importantes para arrasar no seu Playground do jeito que a Apple gosta:

  1. Design e animações

Como vocês devem imaginar, eu não sou um designer nem nenhum profissional de UX. Quase não entendo do assunto e quase não mexi no Sketch. Isso de fato não foi um problema porque consegui ajuda de pessoas da área no laboratório e não coloquei muitas animações.

Minha dica é: se você não tiver quem o ajude na parte do design, não se preocupe, porque para a Apple o design não precisa ser o mais perfeito do mundo, basta apenas ter uma boa apresentação, que pode ser feita de forma simples e que mostre bem como sua ideia funciona. O objetivo é auxiliar o usuário de forma que ele consiga completar a experiência dentro de 3 minutos. Faça sprites bem simples no Sketch ou no Figma e aproveite pra aprender sobre o assunto.

Obs: As cartas que eu fiz no meu playground tal como o botão de minerar e as correntes foram feitas no sketch em pouquíssimos passos

2. Ideias de temas de projeto

Existe alguma receita de bolo para o sucesso da minha ideia? Infelizmente gafanhoto, os critérios de aprovação da Apple são uma incógnita gigante. Projetos de temas completamente distintos tanto são aprovados como reprovados e eu não tenho como dizer como os avaliadores pensam. Eu imagino que cada avaliador tenha seu próprio critério, mas qualquer coisa que eu afirme aqui seria teoria da conspiração.

Poréeeem…eu já usei bastante tempo no Youtube observando os projetos aprovados nos últimos anos e conhecendo a filosofia da empresa, consigo ter uma noção do que eles gostam de ver, portanto vou enumerar temas que eles gostam:

I- Educação: como falei anteriormente, os Swift Playgrounds são a ferramenta perfeita para ensinar programação e conceitos da ciência de forma simples e intuitiva. Se você domina bem um assunto específico desse domínio, não perca a chance de tirar ele do papel e criar uma boa solução para compartilhá-lo! Pegue aquele algoritmo complicado, aquela fórmula da matemática e pense numa boa analogia para ensinar o usuário! Analogias podem ser qualquer coisa do dia a dia que o usuário entenda e que se relacione com seu tema

II- História de vida: Não sei exatamente o porquê, mas percebi que a Apple valoriza bastante candidatos que expõem sua história de vida em seus projetos. Se você tem alguma parte da sua vida que merece ser contada como uma boa lição e que a tecnologia possa ilustrar de forma eficiente, não perca tempo e conte pra eles! Criar seu próprio personagem e inseri-lo no playground é algo muito interessante

III- Acessibilidade, inclusão e pautas sociais: Como sabemos, a Apple é bastante reconhecida pelo seu apreço à acessibilidade e a utilização da tecnologia para facilitar a vida de muita gente. Imagine utilizar o framework de acessibilidade do iOS para mostrar em seu playground uma ideia que possa revolucionar a forma como um grupo de pessoas interage com a tecnologia? Compartilho aqui que uma das ideias que tive foi fazer um playground sem nenhuma UI que funcione apenas com Voice Over.

3. Use e abuse das tecnologias Apple

Todo ano a Apple lança novas tecnologias para serem utilizadas pelos desenvolvedores: ARKit, MLKit, CoreML, RealityKit, HomeKit. CryptoKit e muitas outras. O que a gigante mais gosta de ver de um ano pro outro é como essas tecnologias ajudaram os devs a inovar a forma como se interage com seus apps e ainda aproveitar todos esses cenários para outras inovações.

Resumindo, aproveite a experiência que você pensou e tente dar uma pitada de inovação nela: mostre como seu joguinho pode ser melhor aproveitado através de realidade aumentada, como o machine learning pode te auxiliar a detectar um padrão, como o CryptoKit pode auxiliar num novo meio de segurança. Muita coisa divertida pode ser feita através dos frameworks disponíveis, não desperdice o conhecimento fazendo uma coisa tradicional e repetitiva.

4. O playground não é um projeto ágil!

Já adianto a vocês uma coisa: a Apple muito provavelmente não olha o seu código. O projeto que fiz não seguiu nenhum padrão de projeto e nem se dividiu em camadas. Criei apenas as estruturas de dados que precisei para que ele funcionasse. Nada de perder tempo com MVVM, VIPER e outras arquiteturas complexas para um projeto que deve ser feito em poucos dias. Também não perca tempo com Scrum, Trello(só se for te ajudar) e demais frameworks de raciocínio

5. Cuidado com os 3 minutos

Não tente acrescentar elementos desnecessários à sua experiência e não encha seu markup de texto. Insira só o que importa. Dê seu playground para outras pessoas testarem antes de submeter e reduza o que puder. De preferência alguém que você imagine que demoraria a entender o seu playground

Formulário de submissão

Na hora de submeter o seu playground, terá de preencher um formulário sobre você e seu projeto com alguns conteúdos importante que podem fazer a diferença no seu resultado. Aqui vão explicações sobre cada um dos campos e dicas de como preencher:

Dados pessoais

Dados pessoais

Esses são seus dados pessoais, preencha de forma verdadeira e depois selecione o que te habilita como elegível a essa competição

Sobre seu Playground

Aqui você deverá inserir o zip com o seu arquivo .playground gerado no seu projeto, e selecionar o sistema que utilizou nesse playground e se utilizou algum outro software open source(como um cocoa pod por exemplo).

Embaixo você deve escrever sobre como você fez o seu projeto. Conte sobre os frameworks que utilizou, se usou UIKit, SpriteKit, AR, etc. Conte como essas tecnologias foram importantes para que as suas features funcionassem. Não conte detalhes pessoais sobre você, essa seção é completamente objetiva.

Beyond WWDC

Essa seção é opcional no formulário, porém é muito recomendado preenchê-la, pois contará na avaliação dos candidatos(não se sabe se como critério de desempate). Aqui você deve contar um pouco da sua história de vida e o que te motivou na ideia do seu playground, por que fez ele? Aqui é a chance de se apresentar de forma pessoal à Apple e de cativá-la. Contei um pouco da minha história de vida, e do quanto eu dedicava meus projetos para ensinar conceitos novos a seus usuários. Mostre seu perfil e por que a Apple deve te selecionar

Mas atenção, tome cuidado com possíveis exageros..Não "implore" à Apple pelo prêmio, nem passe a impressão de desespero, mostre que quem ganha com isso são eles e não você.

Apps on the Appstore

Essa seção é totalmente irrelevante na seleção de ganhadores. Isso serve só porque na semana do evento os apps que você inserir aqui ganharão destaque na Appstore, mas caso ainda não tenha nenhum, não se preocupe, pois isso não acarretará na decisão deles.

Conclusão

Essas foram minhas dicas para mandar bem no seu projeto de submissão à WWDC, mesmo não sendo aquele evento presencial, servem também a eventuais Scholarships verdade, e espero que ano que vem o Tim Cook faça o evento tradicional da forma que estamos acostumados. Aproveitem ;)

Quem quiser me acompanhar no Linkedin:

iOS developer- WWDC19 scholarship winner- Blockchain enthusiast

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store