Algumas reflexões sobre software e criatividade.

Ronny Chan Blocked Desbloquear Seguir Seguindo 10 de janeiro Foto conservada em estoque de Pexels por Tim Gouw

Eu venho estudando japonês há cerca de 5 anos e, recentemente, também aprendi coreano. Como parte do meu ritual diário, faço flashcards Anki para memorizar novo vocabulário para promover o uso do idioma. Todos os dias, ou pelo menos, com o melhor de minha capacidade, eu apresento cerca de 100 flashcards no meu trajeto, revendo palavras antigas e Kanji , e aprendo sobre 20-30 novos para rever no dia seguinte.

Não é assim que o campo do software deve funcionar.

Aprender vocabulário cru é essencial para fazer o trabalho real em uma língua, como ler ou escrever material nativo. O vocabulário constitui a base de uma linguagem natural e, sem esses primitivos, é impossível alcançar uma compreensão de qualquer idioma. Mas no software, fora de alguns campos de nicho, trabalhamos principalmente em abstrações, não em primitivos.

No entanto, da mesma maneira que eu luto pelas minhas cem ou mais cartas (às vezes quando trapaceio, sento por cerca de três horas e termino minha carteira de cerca de mil cartas), sempre que eu navego em estratégias para encontrar um trabalho no campo da Ciência da Computação, mais ainda, mais de Engenharia de Software, que eu escolhi, há muitos que exaltam as virtudes de serviços como Leetcode e Hackerrank.

Desde cedo amei fazer coisas. Artes e Ofícios foi minha aula favorita na escola primária. Eu cresci com LEGOs e com o velho Thinkpad, e não tenho vergonha de dizer que devo muito do meu interesse em programação devido ao Minecraft , fazendo com que os plugins do Bukkit sejam divertidos; muito divertido que, eventualmente, passei mais tempo no Eclipse do que o próprio Minecraft.

Mas o Leetcode e o HackerRank representam o lado da Ciência da Computação que, e admito que nunca fui grande nisso, francamente eu descubro a mágica que é a arte da programação.

Eu não estou tentando minimizar a importância de entender os custos de algum algoritmo arbitrário. Construir essa base é a razão pela qual eu me coloquei no desafio da Universidade. Mas mesmo assim não encontro gozo enquanto passo por mais uma prova indutiva sobre alguma propriedade de algum algoritmo planejado; ainda assim eu entendo a necessidade de aprender essas coisas.

Sem saída para minha criatividade na escola, volto-me para outro interesse que toma outro grande; um que muitos de meus colegas em meus cursos de Ciência da Computação podem desprezar o santo pedestal sobre o qual as virtudes de uma educação STEM são pregadas à congregação. Em vez de criar programas, eu faço redações neste livro e leio trabalhos de outros pensadores.

No meu tempo livre, recorro à melhoria ou à criação de projetos paralelos, aprimorando minhas habilidades e aprendendo novas ferramentas para fazer mais coisas à medida que vou, de maneira que uma educação formal por si só não ensine. Combinado com o conhecimento das palestras e conjuntos de problemas que tanto desprezo, sou um programador melhor e encontro mais prazer no ato de criar.

Mas nem o HackerRank nem o Leetcode trazem prazer e iluminação. Como uma falha de minha própria personalidade, e admito que é definitivamente meu próprio problema, não acho prazeroso em quebra-cabeças essencialmente inúteis para problemas resolvidos. Eu não estou muito interessado em saber qual é a maneira mais rápida de classificar alguma lista, ou qual é a maneira mais rápida de verificar se uma string é um anagrama. Uma maneira melhor de expressar esse pensamento talvez seja, pelo menos para mim, algoritmos por causa de algoritmos é entediante . Eu poderia até mesmo ser capaz de ampliar esta afirmação, programar por uma questão de programação é entediante.

Tendo tido o que equivale a uma vantagem inicial em comparação com muitos de meus colegas, muitas vezes me perguntaram sobre amigos como “Como eu começo a aprender [X idioma]?” Ou “Como […] você sabe disso? muito sobre tudo? ”. Antes de você se levantar contra Dunning-Kruger e declarações como “lol este estudante de segundo ano acha que ele é gostoso porque fez minecraft plugins”, deixe-me ser claro que não sei absolutamente nada além do que aprendi fazendo as coisas que amo . Há tantas coisas que eu não sei, e espero que meus quatro a seis anos que pretendo ficar nesta coleção de construções incompatíveis na frígida Toronto me ensinem ao lado de outras coisas.

Acho particularmente difícil responder à primeira questão porque, bem, nunca aprendi uma linguagem de programação por si só. Todas as línguas que aprendi eu fiz por necessidade fora de algumas exceções. Eu peguei o Java por causa do Minecraft . Python porque eu queria reutilizar o código de raspagem de um plug-in do XBMC no Snowflake . C # e jQuery básica, porque o C ++ me intimidava e eu precisava usar o CEF para o Battlelogium , quando o Electron não era uma coisa. Então, quando foi, JavaScript, TypeScript e React, porque a programação de gráficos me intimidava quando eu precisava de uma interface do Snowflake , sobre o background de HTML e CSS que eu aprendi porque você era uma merda se tivesse um website na 3ª série era uma piada, e eu era uma criança estranha no caso de você não ter notado já). Então, finalmente, superei meu medo de C ++ para consertar alguns bugs que estavam me incomodando quando eu estava pirateando jogos de DS no meu 3DS , mas só depois de superar meu medo de programação de baixo nível aprendendo Rust com seiri , que nasceu de tédio e frustração com o estudo e com a disfuncionalidade da minha própria ferramenta hackeada que supostamente substituiria um iTunes defeituoso e inchado.

Com exceção do seiri, com o qual eu escolhi Rust arbitrariamente, todas as outras línguas e conceitos que aprendi, aprendi não por interesse, mas por necessidade. Sem um objetivo inicial de algo que eu quero criar, não tenho força de vontade para mergulhar em algo por uma questão de aprendizado. Se eu tivesse escolhido outro idioma para o seiri , talvez eu não tivesse vindo a amar o sistema de tipos do Rust. Sem o Snowflake, eu não teria aprendido tantos conceitos que hoje considero garantidos em meus cursos e projetos. Sem Minecraft, eu não teria começado nessa jornada; talvez eu estivesse tendo biologia hoje, tendo tido um interesse passageiro em genética depois de assistir a um documentário do Discovery Channel.

Através da necessidade, cheguei a ver os frutos do meu trabalho e, eventualmente, a beleza na arquitetura, acho gozo e vício. Eu sempre odiei matemática, mas nunca fui tão sensacionalista para um curso como fui para o CSC324, ou melhor, para a turma onde você aprende Monads and Endofunctors, ou pelo menos é como se eu estivesse entusiasmado. A teoria dos tipos, não o cálculo, nem a teoria dos grafos, ou qualquer que seja a base da matemática moderna e da ciência da computação, é o único tópico de matemática em que tenho interesse, puramente porque a teoria dos tipos é o estudo de como organizar e arquitetar objetos. É o estudo de como fazer as coisas.

Mas a necessidade do HackerRank e Leetcode não é imediatamente óbvia, e enquanto eu ouço histórias de pessoas ruminando problemas, não posso deixar de sentir uma pontada de tristeza e incerteza. O pensamento de que eu também terei que passar por isso sozinho, mexendo em centenas de problemas inúteis que nunca resultarão em algo de que eu possa me orgulhar, se eu quiser ser capaz de me sustentar na sociedade de hoje . Este foi o caminho que escolhi, mas não foi para o que me inscrevi. Eu não acho nenhum prazer nisso, e o prazer foi o que me empurrou para buscar esse campo. Da mesma forma, nunca fui bom em concursos de programação, nem os achei agradáveis. Eu não me importei. Eu estava feliz por poder continuar fazendo coisas.

Eu sei que essas cerca de mil palavras que eu passei uma hora em vez de fazer o dever de casa coreano são as divagações de uma criança ingênua. Na idade adulta, é preciso fazer coisas que eles podem não gostar. Mas ainda me entristece que muitos dos meus colegas brilhantes nunca encontrem prazer da mesma forma que eu, porque para eles, a programação é simplesmente o ato da regurgitação. Não há necessidade de criatividade fora daquilo que é necessário para resolver quebra-cabeças artificiais, o que, não me entenda mal, é uma ótima coisa para se ter, mas é diferente da criatividade necessária para criar . A programação pode ser muito mais do que resolver algoritmos para seguir um teste predeterminado. Um bom aplicativo, classe ou função pode ser uma coisa de beleza e engenho humano da mesma forma que uma sinfonia, uma peça ou apenas alguns compassos de música podem ser. Nenhum compositor profissional é julgado por sua capacidade de resolver problemas teóricos inventados, mas pelas obras que compuseram. No entanto, por que nós, como programadores, nos concentramos tanto em quão bem somos capazes de classificar uma lista de uma determinada maneira e não pelos programas que produzimos?

Eu não programo por programação. Eu não sou bom em programação; Eu sou bom em fazer as coisas, para o meu próprio bem e para os outros; Muitas vezes aprendo o que for necessário para fazê-lo. Mas aprender por aprender é, talvez, pelo menos neste campo, algo que desprezo. Às vezes acho que estou no campo errado, quando todos ao meu redor se destacam nos problemas enlatados que eles lançam em você em palestras. Parece de fato que um impulso para a criação não é tão relevante quanto um impulso para análise e memorização. Esta é uma questão lamentável? Para mim, sim, mas para outros que se destacam em análise e memorização, não deveria ser.

Eu gostaria de enfatizar que este ensaio, ou discurso retórico, se você insiste, é puramente meus próprios pensamentos sobre o assunto com um ponto de vista ferozmente pessoal. Lamento o fato de que adoro fazer coisas em vez de aprender em prol da aprendizagem, ambas posições igualmente respeitáveis; mas o fato é que aquele a quem eu pertenço não é tão procurado no ambiente de hoje. Talvez eu olhe para trás e não veja nada a não ser as divagações de uma criança sobrecarregada, estressada e ingênua. Talvez minhas opiniões não mudem mesmo quando eu encontrar um emprego que eu ame, e tenha que fazer todas as coisas contra as quais me reuni aqui para obtê-lo. Talvez o campo mude, como esse campo constantemente faz. Eu espero, pelo meu próprio bem, que isso aconteça.