Codificação como Arte: Método Ativo

http://wrkstrm.postach.io/post/coding-as-an-art-method-acting

Isso pode parecer estranho, mas minha experiência como ator é o estudo / projeto / trabalho mais relevante que fiz para me preparar como desenvolvedor.

Cheguei a essa conclusão depois de me candidatar a um cargo de Flatiron School Fellowship para ganhar mais experiência em Ruby on Rails. Até agora, wrkstrm tem uma base de código Objective C completamente nativa. Não há nenhum tipo de framework intermediário PhoneGap ou Xamarin que usa Javascript ou C # em meus projetos. Optei por não usar essas estruturas por razões estéticas e morais, em vez do simples fato de que elas ajudam a enviar aplicativos. Afinal, não sou um desenvolvedor pago. Ao programar, otimizo a diversão ou o prazer, em vez de praticamente. Durante o processo de inscrição, uma pergunta me pareceu estranha:

A capacidade de pensar de forma estruturada ou quantitativa para resolver problemas complexos é um elemento importante para ser um desenvolvedor de sucesso. Você pode nos dizer algo que demonstre suas habilidades nesse reino? (sinta-se à vontade para incluir qualquer coisa, desde notas de testes padronizados, áreas anteriores de estudo ou experiência de trabalho relevante)

Enviei uma resposta que explica minha experiência com o Student Managed Investment Fund da Bucknell University. No entanto, no início, escrevi uma resposta completamente diferente que gostaria de compartilhar de forma alongada.

Durante meu último ano no ensino médio, aprendi a agir em 3 meses. No final do meu 3º ano do ensino médio, um amigo me convenceu a fazer parte de uma pequena peça – 15 minutos e apenas 1 cena. Depois de voltar das férias de verão, o chefe do departamento de teatro me convenceu a fazer um teste para um pequeno papel em um projeto ambicioso que ele estava tramando. A peça teria cerca de 1,5 horas de duração e apenas 5 atores. Embora um ator estivesse no palco durante todo o show, eu estava fazendo um teste para um dos papéis coadjuvantes masculinos. Para a surpresa de todos, fui escalado para o papel principal. Até hoje, acho que não tive três meses mais difíceis na minha vida. Tive que memorizar 25 cenas, 5 papéis diferentes e toda a teoria da atuação do zero. Embora isso possa não parecer um desafio técnico ou quantitativo, Eu provavelmente deveria notar que estive simultaneamente matriculado em 3 cursos de Colocação Avançada: Cálculo, Física e Ciência da Computação. Por mais improvável que pareça, existem muitos paralelos entre atuar e programar.

Em primeiro lugar, atuar me ensinou a “respeitar o roteiro”, ou seja, não se desvie das palavras da página nem mude a intenção do dramaturgo. Além da programação, não trabalhei em um projeto que exigisse tanta atenção às palavras e à sintaxe. Como Jeff Atwood disse recentemente, “remova as imagens, gradientes e vetores até mesmo da página da web mais sofisticada e você descobrirá que a web é composta principalmente de palavras”. No nível mais óbvio, a pontuação e até mesmo a inflexão são fundamentais no palco. Durante a programação, um pequeno erro de pontuação não permitirá que o programa seja compilado. Em um nível mais profundo, descobri que o uso de diferentes estruturas ou linguagens exige que você compreenda os padrões recorrentes e a intenção do desenvolvedor (quais problemas ele estava tentando resolver?). Na verdade, tive uma grande discussão sobre isso durante o TechCrunch Disrupt NY com alguns dos principais contribuidores do Ember.js. Acontece que um dos principais commiters é um grande viciado em iOS enquanto o outro não entendia as partes mais peculiares do Objetivo C. Eu argumentei que o desenvolvimento nativo era melhor porque permitia tirar vantagem de padrões que não estavam disponíveis ou implementado desajeitadamente em linguagens da web. Em resposta, o que recebi foi uma demonstração de um controlador de visualização de tabela que estava sendo executado em velocidades quase nativas usando um UIWebView – sombras projetadas, alternância de rotação e tudo. Eu só acho que isso não é o ponto principal. Se você não está programando para iOS em Objective C nativo, está faltando alguma coisa. Você está criando aplicativos, mas está perdendo uma grande parte filosófica do que torna o iOS excelente. Em um jogo, você pode improvisar ou alterar uma linha para dizer a mesma coisa, mas não significa a mesma coisa. O dramaturgo pensou porque escolheu aquele verbo, adjetivo ou sinal de pontuação em relação à dinâmica de toda a peça. Nesse sentido, quando eu código para iOS, “respeito o script”. Não saio por aí inventando meus próprios padrões ou uso uma linguagem diferente.

Em segundo lugar, atuar me ensinou a enfrentar grandes problemas (“memorizar este roteiro”) dividindo-os em pequenas ações. Alguns diretores exigem que você seja muito acadêmico sobre o roteiro e solicite “Folhas de batida”. Por exemplo, na cena 5, linha 4: O que estou dizendo? O que meu personagem está pensando? Onde estou parado? O objetivo de uma folha de batida é documentar a intenção por trás de cada linha. Soa familiar? É o equivalente a compor a documentação de um método. Cada linha deve ser analisada em perspectiva de cada cena. Cada cena deve ser um único arco dentro da grande história da peça. Eventualmente, qualquer jogo pode ser resumido em uma frase. Esta frase deve ser levada em consideração ao executar cada linha. Para mim, isso é o equivalente a uma declaração de definição de aplicativo. Mais, quando comecei a programar, pensei que ser capaz de codificar classes e métodos enormes era um símbolo de honra. Assim como no meu primeiro dia de ensaio, também fui muito ambíguo sobre como fiz minhas falas em uma determinada cena. Desde então, aprendi que é melhor codificar pequenos métodos de propósito único e dividir classes enormes em classes menores. Como os métodos devem ser implementados? Como essas classes devem ser divididas? Depende do objetivo do programa. Assim como um ator pode dar seu toque a uma determinada função, um desenvolvedor pode colocar uma certa marca pessoal em seu código. O único requisito é que você seja consistente, deliberado e mantenha a perspectiva do projeto como um todo. Eu também fui muito ambíguo sobre como expressei minhas falas em uma determinada cena. Desde então, aprendi que é melhor codificar pequenos métodos de propósito único e dividir classes enormes em classes menores. Como os métodos devem ser implementados? Como essas classes devem ser divididas? Depende do objetivo do programa. Assim como um ator pode dar seu toque a uma determinada função, um desenvolvedor pode colocar uma certa marca pessoal em seu código. O único requisito é que você seja consistente, deliberado e mantenha a perspectiva do projeto como um todo. Eu também fui muito ambíguo sobre como expressei minhas falas em uma determinada cena. Desde então, aprendi que é melhor codificar pequenos métodos de propósito único e dividir classes enormes em classes menores. Como os métodos devem ser implementados? Como essas classes devem ser divididas? Depende do objetivo do programa. Assim como um ator pode dar seu toque a uma determinada função, um desenvolvedor pode colocar uma certa marca pessoal em seu código. O único requisito é que você seja consistente, deliberado e mantenha a perspectiva do projeto como um todo. um desenvolvedor pode colocar uma certa marca pessoal em seu código. O único requisito é que você seja consistente, deliberado e mantenha a perspectiva do projeto como um todo. um desenvolvedor pode colocar uma certa marca pessoal em seu código. O único requisito é que você seja consistente, deliberado e mantenha a perspectiva do projeto como um todo.

Espero que isso dê um novo significado ao termo “Método de Ação”.