O que é um 'poliglota', você deve estar se perguntando... bem, segundo o dicionário, é a capacidade de conhecer várias línguas! Então como você se torna um 'poliglota'? É só conversar com Erik Schierboom e ficar por dentro!
Jonathan: Bem, olá a todos e bem-vindos ao podcast ou à transmissão ao vivo do Exercism. Meu nome é Jonathan e tenho o privilégio de ser o seu anfitrião hoje. E tenho comigo o Eric, que faz parte da equipe do Exercism e está envolvido há vários anos. Se você esteve no ecossistema do Exercism em algum momento nos últimos dois anos, é bem provável que tenha esbarrado com o Eric em algum lugar pelo caminho. Mas, Eric, é ótimo ter você no programa de hoje. Estou animado para descobrir um pouco mais sobre a sua história, como você acabou na tecnologia, e algumas das suas perspectivas sobre diferentes coisas no cenário de tech. Mas antes de mergulharmos fundo demais nesses assuntos, eu adoraria que você se apresentasse e nos desse um pouco de contexto, um pouco da sua história, de como você chegou onde está agora.
Erik: Claro. Sim. É ótimo estar aqui. Então eu sou o Eric, como você provavelmente já mencionou. Moro na Holanda. Nasci lá. Então vivi aqui a minha vida inteira. Quando eu... comecei a pensar em quando foi a primeira vez que eu de fato fiz algo com computadores. E acho que deve ter sido um NES. Jogando Mario. E isso me fisgou. Sim, era ótimo. E também muito frustrante, porque os jogos eram implacáveis naquela época.
Jonathan: você não tinha pontos de salvamento etc., era só tentar de novo e do início.
Erik: Bem, depende se você morava nos Estados Unidos ou no resto do mundo, porque na verdade havia duas versões diferentes. Mas sim, acho que você abre a fenda na frente e depois coloca os discos ou sei lá, os cartuchos. E eu amava muito, muito isso. Não tínhamos um NES, mas eu tinha alguns amigos que tinham. Então eu ia lá com frequência para jogar, e havia tantos jogos ótimos que eu joguei, e jogos frustrantes. Mas era uma coisa tão, tão boa. E isso meio que me fisgou. Acho que é assim que muitos programadores se fisgam, querendo ser programador só por querer criar um jogo. Pensei nisso. E, spoiler, nunca fiz isso. Não sou desenvolvedor de jogos. Ok. Não, não, não. Mas foi por isso que comecei a gostar de computadores. E aí meu pai sofreu um acidente antes de eu nascer. Então ele ficou paralisado abaixo dos ombros. Ou seja, ele estava numa cadeira de rodas. Mas ele estava sempre em casa. Então isso era ótimo. Eu tinha um pai que estava em casa 24 horas por dia. Era sempre ótimo chegar em casa. E ele também gostava de computadores. Então, em algum momento, acho que eu tinha uns 10 anos ou algo assim. Ele conseguiu esse computador nada chique. Acho que era um X286. Era em preto e branco e tinha o MS-DOS instalado. E dava para jogar. Tinha tantos jogos, e eu consegui alguns discos com amigos meus que me arranjavam jogos, e eles tinham que imprimir todas as folhas com as senhas para conseguir iniciar os jogos, porque era proteção por senha. Era tipo o manual. Você não consegue escapar disso hoje em dia. Mas naquela época dava. E eu adorava jogar esses jogos, mas também adorava tentar entender como aquilo funcionava. E eu quebrei o meu computador. Nem lembro quantas vezes. Então eu tinha um help desk, que era o pai de um amigo meu que era muito bom com computadores. E sempre que eu quebrava o meu sistema, eu ligava para ele, e ele, com muita boa vontade, vinha até a minha casa e me ajudava a consertar o sistema. Mas eu ainda lembro de entrar em pânico quando percebia que não conseguia sair daquele problema. Então aprendi muito com isso.
Jonathan: esse problema. Mas aprendi muito com isso. Num disquete, e eu lembro de economizar por anos para comprar essa coisa e depois colocar e simplesmente nunca, nunca carregar, naqueles disquetes pequenos. Então essa foi uma das minhas grandes frustrações. Acho que eu nunca passei do ponto de tentar descobrir como consertar. Mas os jogos vinham em disquetes e você tinha meio que um pequeno cartucho onde você os colocava e carregava, e todo esse tipo de coisa?
Erik: Nunca.
Jonathan: Sim.
Erik: Sim, às vezes você tinha vários disquetes. Então, sim, foi na verdade um ótimo período. E eu adorava o MS-DOS e simplesmente descobrir o que eu conseguia fazer. E depois descobri o que eu não conseguia fazer. Então, sim, era bem legal.
Jonathan: Sim, era bem legal. E ela então trabalhava em tempo integral? E o seu pai ficava em casa?
Erik: Não, minha mãe cuidava do meu pai em tempo integral. Então ele precisava de muito cuidado. Ele conseguia se locomover no começo com as mãos, e depois conseguia usar o queixo, porque as mãos começaram a piorar um pouco, então ele tinha menos controle. Mas ela cuidava dele em tempo integral. Então meus pais estavam sempre em casa. Para mim, era muito estranho ir à casa de outras pessoas cujos pais trabalhavam. Então era o fim do dia e os pais ainda não estavam em casa. Para mim, isso era muito estranho. Mas sim, é só uma situação diferente.
Jonathan: Para mim isso era muito estranho. Era só você.
Erik: Eu tenho, tenho uma irmã. Ela é três anos mais nova do que eu. Ninguém diria que somos irmãos. Somos tão diferentes. Mas eu costumava brigar muito com ela, e agora estamos muito bem. Então acabou bem. Ok. E ela não gostava de computadores, então não ficava invadindo o meu tempo de computador.
Jonathan: Mas a gente brigava muito por causa do computador. Ela queria jogar The Sims e eu queria jogar SimCity ou sei lá. Então estávamos sempre em conflito por esse lado.
Erik: Tchau. Com certeza gosto muito mais da escolha do SimCity. Mas não, ela nunca se interessou de fato por computadores. A única forma de conseguir interessá-la foi quando eu tinha um SNES, o Super Nintendo, e a gente tinha o Mario Kart. E ela gostava do Mario Kart, então jogávamos muito Mario Kart juntos. Claro que eu sempre ganhava, porque tinha muito mais prática, mas ela ainda gostava.
Jonathan: Então você ainda gosta de mexer com essas coisas? Sim, MS-DOS, se eu não me engano, é uma coisa bem de baixo nível. Sim. Então, então, provavelmente bem de baixo nível. Sim, com certeza. E aí, quantos anos você tinha quando estava mexendo nesse sistema?
Erik: Ok. Bem de baixo nível, sim. Com certeza de baixo nível. Sim, isso foi por volta dos 10, acho. E aí eu tinha um amigo que estava no meu time de futebol, basicamente. Mas ele já era um bom programador e conseguia de fato programar jogos. E ele fazia isso em Visual Basic. E eu fiquei completamente pasmo. Então ele vinha ao meu computador e mostrava que ia digitar alguma coisa, e eu não entendia nada daquilo. Mas depois de meia hora, ele tinha algo que andava pela tela, e aquilo era simplesmente mágico para mim. Eu ficava boquiaberto. Mas eu nunca tentei de fato programar naquele momento. Ainda achava que era difícil demais até para tentar. Então não fiz. Eu só ficava mexendo e jogando.
Jonathan: Então eu... eu vou só dar uma interrompida.
Erik: E depois, quando eu era um pouco mais velho.
Jonathan: Como foi que a conexão se fez entre "ah, eu consigo programar o jogo" e "eu consigo fazer isso de forma séria, se é que faz sentido, ou consigo seguir por esse caminho de um jeito mais sério"?
Erik: Sim, isso veio depois. Quando eu tinha mais ou menos, acho, 17 anos, eu tive que escolher que caminho seguir, basicamente. Então eu tinha duas opções na cabeça. Uma era estudar História e a outra era fazer TI. No fim, foi uma escolha bem simples, porque eu sentia que TI era algo que eu adoraria fazer um pouco mais do que só fazer História. Pode haver partes muito chatas em História, e eu não achava que haveria partes chatas em ciência da computação, mas há, claro. Então eu estava errado. Sim, sim. Não, bem, podemos entrar nisso em outro momento. Mas sim, existem partes chatas. Mas eu fiz a escolha naquela época. E era um tempo em que tudo estava em alta. Era o boom das pontocom. Quando visitávamos a minha escola, a escola onde eu ia estudar, que era uma universidade de ciências aplicadas. Eu podia escolher entre a universidade de ciências aplicadas e a universidade. Mas eu gostava das ciências aplicadas porque quero construir coisas. Não sou um grande teórico. Não sei como se diz, mas não sou bom com teoria. Então gosto de construir coisas. Sou muito prático. Então comecei fazendo a parte prática. E gostei muito. E era um período em que todas essas empresas ganhavam rios de dinheiro. E elas diziam: ei, quando você se formar, você ganha um carro, ganha isso, ganha aquilo. E aí, quando eu me formei, a bolha das pontocom estourou. Então estava tudo em frangalhos e foi bem difícil encontrar emprego. E naquele momento senti que talvez eu devesse tentar a universidade, porque a parte das ciências aplicadas tinha sido bem divertida. E foi lá que eu de fato aprendi a programar. Mas pensei: bem, talvez eu só adie um pouco a minha carreira e veja se consigo fazer a universidade. Então foi legal.
Jonathan: Então, o sistema educacional europeu, pelo que eu entendo, meio que te faz uma triagem rapidamente, em termos de habilidade prática versus universidade, talvez mais pelo caminho acadêmico. Isso é verdade na Holanda? Eles são bem bons em dizer "ei, você é realmente adequado a isso"? Eu sei que na Suíça, que é a minha referência, na verdade... se você é muito bom... na Holanda, dá para dizer: "ok, legal, vá fazer um aprendizado e se qualificar assim". E na verdade é... não é visto como algo menor nem maior do que ir à universidade ou sei lá. É só mais adequado às suas preferências, nesse sentido. Isso também é verdade na Holanda? E havia esse tipo de processo a passar durante o crescimento?
Erik: Eu não diria que era visto como igual. Ainda existe essa ideia de que ir à universidade e não fazer a universidade de ciências aplicadas é melhor, ou mais difícil, ou pelo menos mais prestigioso. Você também recebe um título diferente. Mas, para mim, isso não atraía muito. Era teórico demais. Eu queria aprender a programar, porque eu ainda não tinha aprendido a programar. Sabia que provavelmente ia gostar. Tinha visto pedaços de HTML, mas nunca tinha escrito uma linha de código. Mas eu tinha bastante certeza de que ia gostar muito. Quando comecei, no primeiro ano eu basicamente não escrevi uma única linha de código. Era só me apoiar em alguns colegas num grupo, porque um deles era um programador fantástico que sabia tudo. Ele fazia tudo, então eu nem tinha chance de fazer muita coisa. Mas no segundo ano, tomei uma decisão consciente: não vai funcionar assim. Nunca vou aprender a programar. Então mergulhei de cabeça e programei feito louco. Foi um mergulho profundo. Comecei com C, que é uma linguagem horrível para começar. Não vou entrar no que eu penso do C como linguagem de verdade, mas para começar, é uma linguagem muito difícil. Fazer uma lista encadeada talvez na lição dois ou três não é algo que você aprecie como estudante, se você não tem nenhuma base. Mas consegui programar e gostei tanto que comecei a programar muito no meu tempo livre. Então, a forma como eu quase me ensinei a programar, porque o jeito que eles ensinavam era muito, muito ruim, foi achar algo que eu mesmo gostaria de usar e então construí-lo, ou pelo menos tentar construí-lo, porque no começo você só fica tateando e não consegue fazer muita coisa realmente útil. Mas no fim, é só prática, prática, prática. Descobri que programar é uma habilidade que você adquire só fazendo. Você pode consumir toda a teoria que quiser e assistir, sei lá, 10 milhões de vídeos. Mas se você não dedicar tempo de verdade, acho que nunca vai ser um bom programador. É só fazer. E isso é um grande passo. Ainda lembro de conseguir ler código e ficar bem satisfeito com isso. Mas aí ter que escrever código, isso foi um passo enorme.
Jonathan: satisfeito com isso e ter que escrever código, isso foi um passo enorme. Nos últimos programas tenho perguntado quando a programação "clicou" para as pessoas e se houve um momento para você em que caiu a ficha e você pensou "nossa, tudo isso faz sentido". Você ficava tateando tentando apreender a teoria, ou houve um momento em que você pensou "ok, não, isso é direto"?
Erik: Acho que não tive um único momento eureka. Acho que tive vários. Vem em etapas. Acho que o primeiro programa de verdade que escrevi foi aquele em que você tem que adivinhar uma palavra. Tipo, qual é o jogo atual muito popular em que você...? Bom, é tipo Forca, mas digamos que seja Forca. Mas era em C, e eu consegui fazê-lo funcionar, então podia jogar o meu próprio jogo. Então eu meio que entendi um pouco do que estava acontecendo e depois você avança um pouco. Eu tinha algo que tinha a ver, acho, com mutexes. Tinha trens que não podiam se chocar. Então você podia usar um mutex para quando eles se cruzassem. E mutex é basicamente como uma placa que diz pare ou siga. Então foi muito divertido. Fiquei bem satisfeito. Então mostrei ao meu professor. E ele me disse: mas e se eu quiser ter tipo quatro trens? E eu fiquei: ah, ah, ah, nossa. Não pensei nisso. Então isso foi um despertar, e foi só uma frase simples. E pensei: ah, eu deveria ter levado em conta o fato de que poderia ser que ele perguntasse uma coisa dessas. Então passei o fim de semana tentando parametrizar o meu código para que você pudesse ter vários trens, e consegui. Eu improvisei. Não ficou bonito, mas funcionou. Então foi mais um momento em que pensei: ah, isso é muito legal. E eu consigo fazer esse tipo de coisa.
Jonathan: Legal. Dá para ver que você faz esse tipo de coisa. Então, por conhecer você, eu sei disso. E também por ter que aprender a programar, existe esse processo em que você só joga qualquer coisa, faz funcionar e depois refina. Foi essa a sua experiência também? Era tipo, só escreve, faz funcionar. Quem se importa com o resto? E depois refina.
Erik: Sim, sim, acho que no primeiro ano ou mais era só: se roda, eu ficava muito, muito feliz. Não existia esse negócio de estética ou algo assim. Era só: se roda, está bom. E eu exagerei completamente nos comentários do meu código, porque meu professor me disse que eu tinha que comentar o meu código. E a proporção de código para comentários era talvez de um para dez ou algo assim, era enorme. E... sim, o meu projeto mais antigo ainda está online, esse que eu publiquei, foi o meu primeiro projeto de código aberto. Você lembra do MSN Messenger, onde dava para enviar mensagem?
Jonathan: Ok, me soa familiar, mas não...
Erik: Você lembra do Winamp?
Jonathan: Sim.
Erik: Sim, o Winamp era um tocador de mídia. Isso foi na era do Napster. Você baixava MP3 e depois tocava no Winamp. O que eu queria fazer era: se eu estivesse tocando uma música, queria que ela fosse adicionada automaticamente ao meu nome no MSN Messenger. E eu era bem a fim de fazer programação Windows naquela época. Isso era Win32. Era muito antiquado, não é o que temos hoje, mas é bem baixo nível e também muito legal. Então eu fiz um plugin em C++, que era a minha linguagem favorita na época, mas eu também só conhecia três linguagens, então isso não dizia muito. Mas fiz um plugin. Se o Winamp estivesse tocando, ele pegava o nome por meio de APIs caprichadas do Win32 e então atualizava o nome que você tinha na janela do MSN. Assim todo mundo podia ver o que eu estava tocando. E eu coloquei isso online porque pensei que talvez outras pessoas gostassem. Acho que foi no SourceForge, que hoje ninguém mais usa porque acho que tiveram alguns problemas de privacidade ou algo assim. Mas outras pessoas no mundo de fato usaram, e eu fiquei tão espantado. Eu conseguia ver os downloads, sei lá, algumas centenas de downloads, e pessoas usando o software que eu escrevi. Essa foi a melhor sensação do mundo. E foi o meu primeiro programa de código aberto. Nunca tive realmente síndrome do impostor. Sentia que esse é o meu código. Se alguém acha ruim, tudo bem. Funciona, então eu estava feliz com ele. E posso aprender com os comentários dos outros. Nunca fui de ter síndrome do impostor, o que não surpreenderia quem me conhece.
Jonathan: Não me surpreende. Sobre a sua experiência com professores e docentes na universidade, houve algum professor específico que se destacou para você, na forma como ensinava, que acelerou o seu aprendizado ou que teve um impacto enorme em como você entendia programação e código? E o que eles fizeram especificamente que permitiu que você fizesse a ponte entre a teoria e a implementação prática? É uma pergunta bem grande. Você pode dividi-la em quantas partes quiser. Sim, sim.
Erik: Sim, sim. Sim, então eu tenho que separar entre a universidade de ciências aplicadas e a universidade. Falando da última primeiro, na universidade, acho que o nível geral das habilidades que alguém tinha para ensinar as pessoas era muito, muito baixo. Era uma régua muito baixa. E a minha sensação era de que muitas das pessoas que davam aula na universidade faziam isso porque precisavam, não porque queriam. Então, muitas vezes na universidade você quer fazer pesquisa, mas há um número de horas que você tem que passar ensinando. Senão, bem, faz parte do trabalho, mas elas não gostavam muito disso. Então eu queria aprender a programar mais depois de ter aprendido a programar. Peguei a especialização em programação lá, mas era tão ruim. Fiquei quase com raiva de que esse fosse o nível de conhecimento de programação que eles queriam me transmitir, era tão ruim, que acabei mudando para segurança. E eu não sou muito de segurança, mas a parte de programação era tão ruim. Eu sempre digo que, na minha carreira universitária, a única coisa que realmente aprendi foi como escrever artigos de verdade, como fazer pesquisa de fontes de verdade, para conhecer as suas fontes e não aceitar qualquer fonte. Isso eu aprendi nesses anos, mas não aprendi nada sobre programação.
Jonathan: Isso soa muito com História também, tipo como você interroga uma fonte, como você garante que o seu argumento se sustenta, tudo isso. Como as habilidades e o prazer da História...
Erik: muita coisa.
Jonathan: Como elas se manifestaram no seu código e no seu aprendizado de programação, se é que se manifestaram? Quais foram algumas das intersecções ali?
Erik: Essa é uma pergunta difícil. Bem, as duas envolvem ler muito. História é sobre ler. E programação também é sobre ler código. O número de vezes que você de fato escreve código é bem menor que o número de vezes que você lê código. Então também é bastante parecido com leitura. Pode ser um pouco como ser arqueólogo, se você entra num emprego novo e começa com esse sistema legado antigo no qual você tem que se orientar. Parece que você está espiando cada canto e recanto para ver o que está escondido ali. E às vezes saem esqueletos do armário, etc. Então parece um pouco uma exploração. Quer dizer, o que você gostava nisso? Não sei se há outra... qual era o prazer, se é que havia algum?
Jonathan: Obrigado. Onde estava o prazer na indústria para você?
Erik: Principalmente, bem, as histórias que os meus professores contavam. Então, piratas, eles contavam sobre serem arrastados por uma corda embaixo do navio e eram bem gráficos, etc. Eu gosto dessas coisas. Gosto muito disso. E eu amo os romanos e a cultura deles e como se espalharam, e era só... e também a política. Então as traições, etc. Eu amo isso. Também tive Latim no ensino médio. Não ligava nada para o Latim, mas amo as histórias que eles... então não gostava de ter que fazer Latim, mas as histórias que tínhamos que traduzir, essas eu gostava. Mas larguei depois de dois anos.
Jonathan: Essas eu gostava. Não, a razão pela qual eu perguntei isso, só sobre História, foi...
Erik: Sim, eu sei a história.
Jonathan: Eu já vi várias pessoas que gostam das áreas mais artísticas ou sociais, como diríamos? Talvez "artes" no enquadramento inglês incluiria artes e História e cairia nessa categoria. Mas tenho visto cada vez mais pessoas que gostavam desse tipo de espaço migrando para aprender a programar. E a razão do meu interesse é que claramente há... sobreposição, e tentar mapear isso um pouco tem sido uma parte enorme e interessante das conversas que tive com pessoas diferentes. E parece que, se você consegue ter uma visão geral e uma abordagem multidisciplinar entre as diferentes coisas que estuda, trazer isso para a programação é enormemente benéfico, porque você consegue aplicar habilidades diferentes no espaço da programação. E eu acho que, sim, isso é só, eu comentaria isso. Então é interessante que você amava História e agora tem, sei lá, experiência em mais de 30 linguagens de programação diferentes e mantém muitas delas. Bem, não necessariamente mantém, mas está profundamente envolvido em gerenciar todas elas no Exercism, que é o seu... Bem, sim, sim. Sim, pode falar.
Erik: Quanto é seu? Posso voltar um pouco ao que você acabou de dizer? Você mencionou que há muitos tipos diferentes de pessoas, com interesses diferentes, fazendo programação. Mas uma das razões pelas quais acho que isso acontece é porque a programação atrai tanto pessoas muito técnicas, porque bem, existem regras estritas, as linguagens são bem fixas. Há gramática, há sintaxe. É muita coisa que agrada a pessoas que gostam das coisas de um jeito específico. Por exemplo, se você é físico, você gosta de regras, gosta de leis, etc. E há coisas assim na programação, mas também é tipo uma arte. E às vezes as pessoas comparam com escrever um livro, e eu ainda acho... Esse é provavelmente um dos melhores exemplos. Não gosto da ideia de construir uma casa, porque ninguém, nenhuma casa seria construída se a gente construísse o nosso software como construímos uma casa. Mas é realmente ao mesmo tempo uma ciência e uma arte, eu sinto. Então o Jeremy mencionou isso recentemente nos conteúdos mais aprofundados: com um exercício bem simples, as pessoas conseguem chegar a centenas de soluções diferentes, mesmo que você pense "ei, deveria haver só um jeito de resolver isso". Mas sempre há mais de um jeito. E é isso que eu amava na programação: você pode ter algo que funciona, mas aí você pode explorar, sei lá, 20 outras opções e escrever e ver "ei, isso também funciona". É essa combinação de ser ao mesmo tempo uma arte e uma ciência que eu gosto muito, porque acho que é também a única forma em que consigo ser criativo. Não sou uma pessoa criativa de jeito nenhum. Tenho uma mão esquerda e uma direita, mas dá para ver, você não diria que sou habilidoso se eu fizesse algo em casa, tipo tarefas domésticas ou carpintaria ou sei lá. Não sou bom nisso, o que também acontece porque meu pai não conseguia me ensinar direito. É bem interessante.
Jonathan: Mas também, eu realmente não tinha interesse nisso. Na escola eu fiz arte. Então fiz música, toquei guitarra ou sei lá. E para mim, o referencial que tenho de criatividade sempre foi o desenho ou a música e coisas do tipo. E eu nunca tinha considerado o aspecto criativo do código. E agora que você menciona isso, como é que isso funciona para você? Você toca um instrumento ou...? Você gosta de música, eu sei que você gosta de música, mas eu só estou tentando fazer a ponte entre essas duas coisas.
Erik: Bem, hã... Eu toco, eu toco. Sim, então eu tentei aprender guitarra. Foi muito difícil para a minha esposa, porque a gente morava no apartamento de estudante dela e tinha talvez 20 metros quadrados. Então eu estava tentando aprender guitarra e a gente estava muito perto um do outro. Ainda me espanta que ela tenha aguentado. Mas eu não tenho...
Jonathan: É só
Erik: Não tenho nenhum talento nato para tocar um instrumento. Tive que trabalhar muito, muito, muito para chegar a um certo nível, que ainda era bem baixo. Eu conseguia fazer tempos, etc., que eu fazia bem. Mas em certo momento, meu professor de guitarra me pediu para improvisar e depois fazer solos, e eu fiquei completamente perdido. Não conseguia de jeito nenhum. Simplesmente não há criatividade musical em mim.
Jonathan: Simplesmente não há criatividade musical em mim. E com código? Diferente de você. Quando você chega ao código, digamos, você recebe uma tarefa do Jeremy ou um pedido de recurso no Exercism e é tipo "vamos fazer X, Y ou Z". Isso realmente te revigora mentalmente e você sente tipo "nossa, ok, legal, vamos explorar isso de verdade", e você curte esse processo? É realmente aí que você se sente vivo, num certo sentido?
Erik: Diferente de você. Ok. Sim, sim. Então é... é ter uma ideia e fazê-la virar algo; você é quase como um deus em miniatura, sabe, onde você começou com nada, você tem uma ideia e então existe algo. E é simplesmente mágico. Eu ainda fico muito, muito empolgado quando tenho um script. E tem todo aquele texto que está linha por linha, e aí você vê ele simplesmente fazendo coisas. E é tão divertido ver o computador trabalhando para você com base no que você disse que ele deveria fazer. Ainda gosto disso. E o aspecto criativo também está, com certeza, em explorar por qual caminho você vai tentar construir algo. E depois que você construiu, você provavelmente já ouviu falar do ciclo de refatoração, em que você tem algo que funciona e então começa a iterar para ver se consegue deixar melhor. E eu adoro refatoração. Tem um dos livros ali, onde está? Ah, não consigo ver porque está muito fora do quadro da câmera. Mas é o Refactoring, do Martin Fowler. E é uma das minhas melhores experiências lendo sobre software. Eu amo refatoração. É só o processo de você ter algo que funciona, mas poder deixá-lo ainda melhor ou mais bonito, mais rápido, qualquer que seja o seu critério. E é também por isso que eu realmente amava o Exercism, porque ele é feito para isso: você resolve os testes e então tem uma estrutura de testes, e você pode fazer o que quiser com o seu código. E enquanto estiver verde, ainda está funcionando. Então
Jonathan: Gosto muito disso. Então eu vou continuar voltando a diferentes linhas do tempo. Agora você fez a universidade, aprendeu a programar, basicamente disse "certo, estou comprometido com esse processo de aprender, vou mergulhar fundo nisso". E aí, o que aconteceu a partir do momento em que você realmente se comprometeu com isso e começou provavelmente a pensar em carreira? E essa é sempre uma grande parte do processo de estar na universidade: "o que vou fazer pelo resto da vida?". Como isso se deu? Qual era o seu pensamento a respeito? O que se abriu diante de você?
Erik: Claro. Eu nunca de fato pensei na minha carreira. Acho que nunca fiz isso na vida. A única coisa que realmente me importa é fazer algo que eu goste. E que seja perto de mim, para eu não ter que dirigir muito. Não gosto de dirigir muito. Mas não, nunca pensei de fato na minha carreira. E também tive muita, muita sorte. Basicamente nunca tive que me candidatar a uma vaga, exceto talvez uma ou duas vezes. Sempre tive amigos ou pessoas que me conheciam. O mesmo com o Exercism. O Jeremy me conhecia e eu não precisei me candidatar, passar por, sei lá, quatro ou cinco etapas diferentes de entrevista como você teve. Talvez até mais, no seu caso, aliás. Mas, hã, eu... Não, não, eu sei. Mas eu não tive nenhuma. Então foi a mesma coisa quando eu procurava emprego. Eu sempre trabalhava paralelamente enquanto estudava, até no ensino médio eu sempre tentava ganhar um pouco de dinheiro, porque meus pais não tinham muito dinheiro. Então eu tinha que ganhar a minha parte. Mas eu amo trabalhar. E acho que trabalhei talvez 20 horas num emprego de programação enquanto fazia a universidade, porque tínhamos tão pouco tempo de aula obrigatório na universidade que eu conseguia ganhar uma boa grana, e comprei essa coleção enorme de DVDs com isso.
Jonathan: Não vamos entrar nisso.
Erik: Não vamos entrar nisso. Sim, desculpa, na verdade eu já dei a maior parte, e fiquei com as que tenho lembranças muito, muito afetuosas, mas dei a maior parte. Eu cheguei a ter 400 ou 500 DVDs em certo momento.
Jonathan: 400 ou 500 DVDs em certo momento. Ah, que legal.
Erik: Era perto disso. Era perto disso. Sim. Mas eu... enquanto estava na universidade, um amigo meu, o mesmo que era o programador lá quando eu tinha 10 anos ou algo assim. Ele fez a universidade comigo. E ele estava num emprego e me perguntou: "ei, você quer entrar nessa empresa para ganhar um dinheiro extra?". Então eu entrei. E aí eu basicamente fiquei lá: quando terminei a universidade, eles me perguntaram se eu queria fazer um doutorado. Mas eu li isso como... você encontrou algo interessante no seu doutorado, o que foi pura sorte, aliás, eu fiz o trabalho, mas foi sorte. Mas eu li isso como um "queremos colocar os nossos nomes em algo que você vai escrever, para ganharmos uma publicação". Então eu não estava a fim disso. E eu não queria fazer quatro anos de coisas teóricas. E o mundo acadêmico todo não me atraía muito. Eu ficava muito mais confortável só fazendo coisas práticas dentro de uma empresa. Então eu simplesmente fiquei onde estava trabalhando. Era PHP e tínhamos um time ótimo. Acho que, exceto talvez pelo nosso time atual, nunca trabalhei num time tão diverso e tão competente. Mas éramos liderados por uma gestão que era muito ruim. Havia um ambiente de tech tão descontente ali. Simplesmente não era bom, mas ainda assim me diverti muito. Mas PHP não é a minha linguagem favorita. Então eu estava a fim de C#. Sou fã de C# desde quando ainda era C# 1.0. Então era bem cru naquela época. Eu encomendava livros dos Estados Unidos e tinha que pagar um imposto adicional, e no fim era bem caro, mas eu ainda usava muito, muito aquele livro. E aí eu disse: quero fazer C# como trabalho. Não só de lado. E me candidatei. Na verdade, também era para a universidade, mas não era fazer pesquisa nem nada disso. Era tipo dar suporte e mais um pouco para as diferentes partes da universidade. E fiz C# por uns sete anos.
Jonathan: E eu fiz C# por uns sete anos. Me conta a história aí. Porque você começou como voluntário ou como contribuidor, certo? E a partir daí você foi construindo.
Erik: Sim. Sim, então, enquanto eu trabalhava na universidade, eles eram muito liberais em permitir que você estudasse coisas ou fosse a conferências, etc. Então, em certo momento, eu ouvi falar de algo chamado programação funcional. E pensei: ei, não sei sobre isso. Eu sabia que eles davam uma lição opcional na universidade, mas eu não fiz nada com isso. E pensei que talvez eu devesse aprender programação funcional, talvez seja divertido. E arrastei outro colega meu que quis entrar. Então fizemos um curso gratuito, um curso de Scala na Coursera. Hoje você tem que pagar se quiser fazer, mas naquela época não precisava. E era ensinado pelo Martin Odersky, que é o autor do Scala, que é uma linguagem funcional que também temos no Exercism. E me diverti muito aprendendo programação funcional, também foi uma boa luta mental às vezes, porque é uma forma muito diferente de pensar as coisas. Mas eu meio que persisti e gostei muito. E havia um fórum onde você podia discutir com outros alunos, por exemplo, exercícios que você não conseguia resolver. Mas algumas pessoas perguntaram: "que recursos eu posso usar se quiser aprender mais sobre Scala?". E alguém mencionou: "ei, tenta o Exercism, eles têm essa coisa incrível em que você faz vários exercícios diferentes, tipo pequenos quebra-cabeças". E eu pensei: "ei, isso parece bom". Então me inscrevi e fiz a trilha de Scala. E aprendi muito de verdade. E foi a minha... eu mergulhei os pés no mundo da programação funcional. Então pensei que talvez devesse mergulhar de cabeça. E fui para Haskell. E isso foi um mergulho realmente profundo para mim na época. Mas boa parte era o Exercism V1. Então as pessoas simplesmente comentavam o seu código, não havia um sistema formal de mentoria nem nada disso. Mas o pessoal de Haskell era absolutamente fantástico. Então eu basicamente aprendi Haskell com eles. Eu pesquisava muito no Google e encontrava soluções bem esquisitas, eu fazia umas soluções esquisitas, mas eles sempre tentavam me guiar para algo que fosse Haskell idiomático e bonito. E foi uma experiência tão boa que pensei: "ei, eu provavelmente deveria estar fazendo isso também com outras pessoas. Talvez eu também possa ajudar". Eu sempre gostei de ajudar. Então pensei: vou fazer C# e vou comentar o código de C# dos outros. Gostei disso. E aí vi que ei, a trilha de C# tem, sei lá, 40 exercícios e Haskell tem mais. Por que isso? Então tentei descobrir por quê. E ei, você pode enviar pull requests para o Exercism e adicionar novos exercícios. E foi isso que me deixou fisgado. E aí eu ficava fazendo exercícios todo fim de semana, adicionando. E quando terminei com C#, pensei: ei, F#. Vamos fazer F#. F# é funcional. E está no ecossistema da Microsoft. Então gosto dos dois. Vamos combinar as minhas coisas favoritas. E fiz F# e fiz a mesma coisa. Então eu era mantenedor de F#, construindo exercícios, e amava muito, muito isso.
Jonathan: Eu amava muito, muito isso. Você tem uma linguagem, tipo "ok, vou tentar Scala". Eu meio que peguei o jeito, e depois você foi para o mergulho profundo nela. Agora, o tempo que cada linguagem levava para você entendê-la diminuiu com o tempo? Porque agora você tem várias. Quer dizer, como isso se deu?
Erik: Sim, sim. Bem, funciona do mesmo jeito com línguas naturais. Se você aprende francês e conhece bem o francês, então pegar espanhol vai ser muito mais fácil, porque há muito conhecimento compartilhado, tipo vocabulário compartilhado, quase dialetos. Então é o mesmo com programação. Se você conhece C e vai para C++, há muitos conceitos novos, mas também havia muita coisa exatamente igual. Então toda a família parecida com C, que também é uma das coisas que eu gosto na programação: você tem tipo árvores genealógicas. Há um ramo Lisp, um ramo ML, um ramo parecido com C. E é quase como História, em que você tem essa genealogia numa árvore genealógica ou algo assim. Falei alto demais. Sim, isso é Haskell ou Prolog. Mas eu também amo esses casos fora da curva, porque têm ideias únicas. É isso que normalmente quero experimentar. Encontrar uma linguagem que faça algo de forma diferente, mesmo que todas as linguagens de programação compartilhem muito do mesmo conhecimento. Todas têm lógica Boolean, e a lógica Boolean é simplesmente fixa, é dada. Então funciona igual em todo lugar. Pode ser que você precise usar dois "e" comerciais, ou usar a palavra "and", ou algo assim, mas o básico continua igual. Então, uma vez que você tem esses fundamentos, você os conhece bem e consegue aplicá-los a outras linguagens mais facilmente.
Jonathan: É quase como História, onde você tem essa genealogia numa árvore genealógica ou algo assim. linguagens mais facilmente. Você aprende a programar e leva a sua própria experiência em consideração. Quais são alguns dos comportamentos e das coisas que as pessoas fazem para aprender a programar? E tenho certeza de que há intersecção em muitas disciplinas diferentes. Você mencionou que simplesmente se comprometeu e mergulhou de cabeça, e ficou lutando com aquilo até entender. Há outros comportamentos ou coisas que as pessoas fazem que você já viu e que te fazem pensar "sim, elas se colocaram numa posição de aprender"? Sim, muito bem.
Erik: Hã, então eu... Eu sempre tentei incentivar as pessoas a construir algo que elas gostariam de construir. Então, quando eu estava aprendendo PHP, construí algo que acompanhava os 250 melhores filmes do IMDB que eu já tinha visto. Eu assistia muitos filmes, então queria conferir cada um daqueles filmes, e aprendi muito de PHP e MySQL só construindo algo que eu queria construir. Porque aí você ultrapassa a barreira: se você bate num obstáculo, você quer não parar, mas continuar, quer consertar, quer fazer funcionar. E eu dei essa dica para várias pessoas que começaram a aprender a programar e funcionou bem para elas. E hoje em dia é tão diferente de quando eu estava aprendendo, com o Stack Overflow, etc. E há tanto conhecimento que você pode encontrar online. Também é difícil encontrar os recursos certos. E é aí que acho que o Exercism pode realmente brilhar, porque podemos ser quase porteiros: temos pessoas na nossa comunidade que sabem quais são os recursos certos. E isso é uma coisa que eu vejo as pessoas novas tendo dificuldade. E também há isso. Você quase nunca encontra recursos em que realmente se começa do zero. Normalmente o público do Exercism já conhece pelo menos uma linguagem. E aí você passa para outras linguagens ou se aprofunda naquela. Mas não é para pessoas que... não têm nenhuma base de programação. Então você não sabe o que é um laço for. Você não sabe o que são variáveis. Strings são algo completamente diferente na sua cabeça. Sim, eu sempre recebo olhares estranhos se a minha esposa me vê falando sobre strings. É uma coisa diferente aqui na Holanda.
Jonathan: Sim. Vou fazer algumas generalizações aqui. Nos últimos anos, é provável que cada vez mais pessoas tenham tomado consciência de código e programação. No passado, provavelmente havia um número menor de pessoas que sabiam navegar nesse espaço. Obviamente, à medida que essa indústria cresce e cresce a um ritmo bem rápido, há obviamente muitas opiniões e pessoas ainda abrindo caminho, tentando descobrir onde se posicionam em certas coisas e certos temas. Esse conceito todo de "a colina em que você morreria" é basicamente: qual opinião você sustenta e defenderia de verdade, de forma saudável, obviamente. Mas qual é a única coisa que você defenderia e gostaria de... fincar o pé e dizer "não saio daqui" e você tem que defendê-la? Qual seria? Ok.
Erik: Eu tenho muitas dessas opiniões, mas acho que a que eu gostaria de explicar aqui é que você deveria aprender mais linguagens do que já conhece. Então experimente linguagens novas que você não conhece e experimente linguagens muito diferentes das que você já conhece. É muito fácil, por exemplo, se você conhece C#, ficar só no C#, e tudo bem. Mas se você conseguir achar tempo e vontade para experimentar outra coisa, por exemplo, F# ou sei lá, tentar Kotlin, só faça algo diferente e veja quais são as diferenças. Você vai ser um programador muito melhor. Tenho absoluta certeza, 100% de certeza, de que aprender F# me tornou um programador de C# melhor, mesmo que sejam linguagens diferentes e tenham filosofias diferentes. Mas há tanta sobreposição entre linguagens hoje em dia. Quando as linguagens ainda eram bem jovens, por exemplo, Lisp não parece nada com C. Então as linguagens funcionais eram muito diferentes das imperativas. Mas linguagens modernas como C#, como Java, como Kotlin, como Rust, por exemplo, elas se inspiram em outras linguagens também, inclusive nas funcionais. Então, quando eu estava na universidade, era sempre aquela piada recorrente: programação funcional é ótima, mas ninguém faz. Mas isso já não é verdade. Mesmo que você não trabalhe numa linguagem funcional, as linguagens funcionais estão em todo lugar. JavaScript tem muitos conceitos funcionais. C# tem pattern matching avançado, tem LINQ, tem tanta coisa funcional. E o que você vê é que as linguagens estão pegando conceitos emprestados de todo lado. Então não é tão claro qual linguagem é funcional e qual é só imperativa. Hoje é mais uma mistura. Mas eu ainda acho que há muito a ganhar se você começar a aprender uma nova linguagem. Algumas pessoas dizem: aprenda uma nova linguagem por ano. Eu tento fazer isso. Imagino que isso possa ser chato para algumas pessoas e que elas fiquem sobrecarregadas. Mas tente pelo menos uma linguagem diferente e tente que seja uma linguagem um pouco fora da sua zona de conforto. E eu prometo: você aprende coisas, vai aprender muito e se torna um programador melhor no geral. E também para a linguagem com que você já trabalha.
Jonathan: e também, você já trabalha com. Obviamente as pessoas criam novas linguagens para atender a uma necessidade específica. E você está dizendo que o imperativo e o funcional meio que estão se fundindo um pouco. Você já vê uma situação em que as linguagens vão desaparecer e ficaremos com algumas linguagens centrais? Ou isso é ingênuo?
Erik: Não, não, acho que as pessoas têm opiniões fortes demais para isso. Então sempre haverá novas linguagens. Haverá novas linguagens todos os dias, o que é bom. Mas haverá uma peneira. As populares, no fim, provavelmente vão perseverar. Então não vejo Java ou C# desaparecendo tão cedo. Mas, por exemplo, C ou C++ sempre foram linguagens enormes. Mas agora vemos Rust, que é tipo uma nova abordagem para tentar resolver os mesmos problemas, mas com mais segurança. Segurança embutida. E é uma linguagem fantástica que eu deveria, na verdade, estudar mais. Mas é interessante ver que Rust está lentamente abrindo caminho no mesmo espaço, as pessoas estão começando a usá-la no lugar de C ou C++, o que é uma coisa muito boa, na minha opinião. Mas, por exemplo, no Linux, agora você pode escrever os seus drivers em Rust. Então, dá para ver, sempre haverá C++. Mas eles agora dão suporte a escrever drivers em Rust. Então foi um passo bem grande. Então acho que ainda haverá linguagens, porque não dá para criar uma linguagem que sirva para todos os propósitos. E é também uma das razões pelas quais acho que você deveria aprender várias linguagens, porque situações diferentes pedem linguagens diferentes. Então você pode tentar... e é como tratar um... o que é mesmo? O martelo como se fosse uma serra. Não sei qual é a expressão.
Jonathan: A expressão? É tipo: ok, você precisa de uma serra, mas só tem um martelo. O que você vai fazer? Ok.
Erik: Sim, sim, algo assim. É uma nova... acho que é com um prego e um martelo, algo assim, mas não sou bom com provérbios em inglês, então não vou te incomodar com a versão em holandês. Mas é basicamente: se você só conhece C# e talvez haja a tentação de usar C# para tudo, mas pode haver linguagens melhores para fazer programação de sistemas ou, sei lá, IA, do que C#, mesmo que você consiga fazer isso em C#, não significa que você deva. Então, se você conhece mais linguagens, provavelmente estará mais apto a fazer uma boa escolha, mais adequada ao domínio em que você trabalha.
Jonathan: Ok, então é divertido e é bonito. Em relação à comunidade do Exercism, que recomendação você daria à comunidade do Exercism esta semana que você sugeriria fortemente que eles experimentassem? E pode ser qualquer coisa; pode ser, sei lá, dê uma caminhada. Tente fazer uma parada de mãos. Não sei. Ela... ok, e você pode ter mais de uma se quiser. Você pode... eu já sei o que vou dizer. Então você pode ter três recomendações.
Erik: Então é divertido e é útil. Eu já sei o que vou dizer. Ok. Ok, a primeira que me vem à cabeça é dar uma olhada na aba Dig Deeper que agora temos. Então começamos... adicionamos o novo recurso Dig Deeper, onde você pode, depois de resolver um exercício ou pelo menos depois de iterar sobre ele, ver abordagens, que são as diferentes maneiras pelas quais um exercício pode ser resolvido. E é basicamente como todo mundo aprendia no Exercism V1, em comparação com os comentários adicionados: olhando o código dos outros e vendo como eles resolveram. Foi assim que eu aprendi muito de Haskell, além dos meus próprios comentários. Só vendo "ah, dá para fazer assim". E aí você tentava por conta própria e dizia "ei, nossa, isso é muito elegante e dá para fazer mais coisas com isso", e então aplicava a outros exercícios. Então poder encontrar essas diferentes formas de fazer as coisas remete quase à arte da programação, à forma como você pode resolver as coisas de maneiras diferentes. Então existem essas abordagens diferentes. Eu escrevi artigos e abordagens sobre inverter uma string. Essa é uma das perguntas básicas de entrevista que você recebe em entrevistas de TI. Como você inverte uma string? Em C#, há algumas formas idiomáticas diferentes, mas elas são diferentes e têm características de desempenho diferentes, e uma delas é muito focada em desempenho, mas é menos legível. Então eu gosto do fato de que, no site, depois de resolver de um jeito, você pode dizer "ei, existem outros jeitos também". E esses são os benefícios de fazer daquele jeito. E esses são os trade-offs. E é isso, não só por você poder ver a abordagem diferente, mas também porque tentamos escrever um documento de introdução em que ajudamos você a escolher entre elas. Então sempre há trade-offs em TI. Nunca há uma solução que seja, quase nunca, simplesmente a melhor. Você sempre pode escrever as coisas de um jeito diferente. Então, muitas vezes, sim. A solução mais legível nem sempre é a de melhor desempenho. Então ajudar você com os trade-offs, entender os trade-offs e fazer uma escolha entre abordagens diferentes. É também algo que tentamos fazer com a aba Dig Deeper. E eu tenho escrito isso no meu tempo livre agora. Me divirto tanto só escrevendo essas informações e compartilhando com as pessoas. Então eu realmente incentivaria as pessoas a experimentar escrevê-las ou só ler as abordagens. Sei que não todos os exercícios têm. Acabamos de começar esse recurso há uma semana. Então vai ficar bem limitado a alguns exercícios de C#, mas vamos expandir muito isso. E aceitamos PRs da comunidade para esse tipo de coisa. E eu ajudo com prazer a escrever e a levar isso até o fim, e você pode compartilhar o seu conhecimento da sua linguagem. Acho que isso é uma coisa que as pessoas sempre gostam. Se elas gostam de uma linguagem, gostariam que os outros também gostassem. Então as abordagens são uma ótima forma de mostrar o que a sua linguagem pode fazer. Vá conferir. Sim.
Jonathan: Vá conferir. Você tem mais alguma para esta semana?
Erik: Hã, bem, correndo o risco de parecer uma pessoa muito voltada ao Exercism, eu gosto muito do fórum do Exercism. Uma coisa que descobri na minha carreira é que é muito difícil encontrar uma comunidade de pessoas com mentalidade tech que seja quase um espaço seguro, onde você possa discutir as coisas sem que outras pessoas te façam sentir estúpido, ou sem chegar a discussões ou ser combativo. Então eu gosto muito de como nós, com o fórum, tentamos tornar isso um lugar muito seguro e feliz para as pessoas, mas também um lugar onde você encontra programadores muito bons. Pessoas muito habilidosas, com grandes insights sobre as suas linguagens ou sobre o espaço da programação. E eu curto muito só ler o que as outras pessoas escreveram. Há um tópico sobre quais são os seus livros favoritos de programação. E eu já coloquei alguns livros na minha lista curta de livros para ler, porque é só... sim, você não encontra todos os livros. Mas outras pessoas já leram. Você pode usar a sabedoria da multidão. Basicamente,
Jonathan: das pessoas... e então podemos usar a sabedoria da multidão, basicamente, nesse tópico, e tenho certeza de que vai haver ouro de verdade que podemos extrair dali. Mas, quer dizer, você sabe, isso é bem legal. Eric, acho que se você quiser ter mais uma recomendação, fique à vontade, mas senão vamos começar a puxar as coisas um pouco mais para o fim, mas qualquer pensamento ou comentário adicional... sim, vamos continuar compartilhando.
Erik: mhm Ja, das kommt in das Video. Não, não exatamente. Eu estava tentando encontrar uma terceira.
Jonathan: E eu estou sempre tentando encontrar uma terceira. Nesse caso, demais. Mas Eric, muito obrigado por este tempo. Foi muito legal só ouvir a sua história, ouvir como isso atravessou para a tecnologia. Gostei especialmente de ouvir um pouco sobre História e talvez isso seja algo sobre o que você possa pensar e compartilhar um pouco mais, sobre como História e programação e tudo isso se sobrepõem em algum momento. Mas muito obrigado. É ótimo ter você no time e eu definitivamente aprendi e vou continuar aprendendo muito com você. Um grande salve para você, porque você passou de 100.000 pontos de reputação no site do Exercism. Eu sei que você vai dizer que a razão de ter feito isso é que você trapaceou, mas ainda assim, vamos considerar uma conquista notável de qualquer forma. Então muito obrigado. E sim, se você está ouvindo isso e ainda não conhece o Exercism, vá conferir o Exercism e tenho certeza de que vai encontrar o Eric em algum lugar nesse espaço. Mas Eric, obrigado. Eu realmente agradeço. E vou pausar esta gravação e podemos conversar depois disso, mas obrigado pelo seu tempo. E espero que você tenha se divertido tanto quanto eu. Foi ótimo.
Erik: Não me importo, vou aceitar. Ótimo. Curti. Curti. Muito obrigado.
Ouça, aprenda e se inspire com os membros da nossa comunidade.