Voltar à comunidade

Tornar-se um programador poliglota

O que é um 'poliglota', ouço-te dizer... bom, segundo o dicionário, é a capacidade de conhecer várias línguas! Então como é que te tornas num 'poliglota'? Falas com o Erik Schierboom e ficas com a informação privilegiada!

Ver no YouTube
DURAÇÃO 57MIN

Jonathan: Bem, olá a todos e bem-vindos ao podcast, ou live stream, do Exercism. Chamo-me Jonathan e tenho o privilégio de ser o vosso anfitrião hoje. Estou acompanhado pelo Eric, que faz parte da equipa do Exercism e está envolvido há vários anos. Se passaste pelo ecossistema do Exercism em algum momento nos últimos anos, é muito provável que tenhas encontrado o Eric por aí. Mas Eric, é ótimo ter-te no programa de hoje. Estou entusiasmado por saber um pouco mais sobre a tua história, como acabaste no setor tecnológico e algumas das tuas perspetivas sobre várias coisas no mundo da tecnologia. Mas antes de nos aprofundarmos demasiado nisso, gostaria que te apresentasses e nos desses um pouco de contexto, um pouco da tua história, de como chegaste onde estás agora. Erik: Claro. Sim. É ótimo estar aqui. Sou o Eric, como provavelmente já mencionaste. Vivo nos Países Baixos. Nasci lá. Por isso, vivi aqui toda a minha vida. Comecei a pensar em quando foi a primeira vez que fiz algo com computadores. E acho que deve ter sido uma consola NES. A jogar Mario. E isso deixou-me agarrado. Sim, era ótimo. E também muito frustrante, porque na altura os jogos eram implacáveis. Jonathan: Não tinhas pontos de gravação, etc., voltavas a tentar do início. Erik: Bem, depende de se vivias nos EUA ou no resto do mundo, porque havia de facto duas versões diferentes. Mas sim, acho que abrias a ranhura à frente e depois punhas os discos ou o que fosse, os cartuchos. E adorava mesmo aquilo. Não tínhamos uma NES, mas eu tinha alguns amigos que tinham. Por isso, ia lá regularmente jogar e havia tantos jogos bons que joguei, e jogos frustrantes. Mas era uma coisa tão, tão boa. E depois isso deixou-me agarrado. Acho que é assim que muitos programadores ficam agarrados à ideia de serem programadores, só por quererem construir um jogo. Pensei nisso. O que, spoiler alert, nunca fiz. Não sou programador de jogos. Ok. Não, não, não. Mas foi essa a razão pela qual comecei a gostar de computadores. E depois o meu pai teve um incidente antes de eu nascer. Ficou paralisado abaixo dos ombros. Andava numa cadeira de rodas. Mas estava sempre em casa. Isso era ótimo. Tinha um pai que estava em casa 24 horas por dia. Era sempre bom chegar a casa. E ele também gostava de computadores. A certa altura, acho que eu tinha talvez 10 anos, ele arranjou um computador nada sofisticado. Acho que era um X286. Era a preto e branco e tinha o MS-DOS instalado. E podias jogar. Havia imensos jogos, e eu arranjei alguns, arranjei uns pais de amigos meus que me deram jogos, e tinham de imprimir todas as folhas com as palavras-passe, na ordem certa, para conseguires arrancar com os jogos, porque era proteção por palavra-passe. Era como o manual. Hoje em dia já não consegues safar-te com isso. Mas naquela altura conseguia-se. E eu adorava jogar esses jogos, mas também adorava tentar perceber como funcionavam. E avariava o computador. Nem consigo contar quantas vezes. Tinha uma espécie de apoio técnico, que era o pai de um amigo meu que era muito bom com computadores. E sempre que avariava o sistema, ligava-lhe e ele era muito generoso e vinha ajudar-me a consertar o sistema. Mas ainda me lembro de entrar em pânico quando percebia que não conseguia sair daquele problema. Mas aprendi muito com isso. Jonathan: ...esse problema. Mas aprendi muito com isso. Num disquete, e lembro-me de poupar durante anos para aquela coisa e depois metê-la lá dentro e simplesmente nunca, nunca carregava naqueles pequenos disquetes. Foi uma das minhas grandes frustrações. Acho que nunca ultrapassei o ponto de tentar perceber como arranjá-la. Mas os jogos vinham em disquetes e tinhas de... arranjavas um pequeno cartucho, punhas lá os jogos e fazias o upload, esse tipo de coisas. Erik: Nunca. Jonathan: Sim. Erik: Sim, às vezes tinhas vários disquetes. Por isso, sim, foi na verdade um período ótimo. E adorava o MS-DOS e andar a descobrir o que conseguia fazer. E depois descobria o que não conseguia fazer. Por isso, sim, era mesmo fixe. Jonathan: Sim, era mesmo fixe. Ela depois trabalhava a tempo inteiro? E o teu pai estava em casa? Erik: Não, a minha mãe tomava conta do meu pai a tempo inteiro. Ele precisava de muitos cuidados. Ao início conseguia mover-se com as mãos, e mais tarde conseguia usar o queixo, porque as mãos começaram a degradar-se um pouco e ele tinha menos controlo. Mas ela tomava conta dele a tempo inteiro. Por isso, os meus pais estavam sempre em casa. Para mim, era muito estranho ir a casa de outras pessoas cujos pais trabalhavam. Chegava ao fim do dia e os pais ainda não estavam em casa. Para mim, aquilo era muito esquisito. Mas sim, é só uma situação diferente. Jonathan: Para mim aquilo era muito esquisito. Eras só tu. Erik: Tenho, tenho uma irmã. É três anos mais nova do que eu. Ninguém diria que somos irmãos. Somos tão diferentes. Mas eu costumava discutir muito com ela, e agora damo-nos totalmente bem. Por isso, acabou bem. Ok. E ela não gostava de computadores, por isso não me invadia o tempo no computador. Jonathan: Mas muitas vezes discutíamos por causa do computador. Ela queria jogar The Sims e eu queria jogar SimCity ou o que fosse. Por isso, estávamos sempre em conflito nesse aspeto. Erik: Adeus. Prefiro claramente a escolha do SimCity, sem dúvida. Mas não, ela nunca teve realmente interesse em computadores. A única forma de a interessar foi quando tive uma SNES, a Super Nintendo, e tínhamos o Mario Kart. E ela gostava do Mario Kart, por isso jogávamos muito Mario Kart juntos. Claro que eu ganhava sempre, porque tinha muito mais prática, mas ela continuava a gostar. Jonathan: Então, ainda gostas de mexer nessas coisas? Sim, o MS-DOS, se não me engano, era uma coisa bastante de baixo nível. Sim. Por isso, era provavelmente bastante de baixo nível. Sim, sem dúvida. E depois, que idade tinhas quando andavas a mexer naquele sistema? Erik: Ok. Bastante de baixo nível, sim. Absolutamente de baixo nível. Sim, tinha uns 10 anos, acho. E depois tinha um amigo que estava na minha equipa de futebol, na equipa de futebol, basicamente, devo dizer. Mas ele já era um bom programador e conseguia mesmo programar jogos. E fazia-o em Visual Basic. E eu fiquei completamente espantado. Ele vinha ao meu computador e mostrava que ia escrever alguma coisa, e eu não percebia nada daquilo. Mas ao fim de meia hora já tinha algo que andava no ecrã, e era simplesmente mágico para mim. Fiquei de queixo caído. Mas nunca cheguei a tentar programar naquela altura. Continuava a achar que era demasiado difícil só para tentar. Por isso, não o fiz. Limitava-me a mexer nas coisas e a jogar. Jonathan: Então eu... estou só a meter-me. Erik: E depois, quando era um pouco mais velho... Jonathan: Como é que se fez a ligação entre "ah, consigo programar o jogo" e "consigo fazer isto a sério", se é que faz sentido, ou "consigo seguir isto de uma forma mais séria"? Erik: Sim, isso veio mais tarde. Quando tinha, acho, 17 anos, tive de escolher que caminho seguir, basicamente. Tinha duas opções em mente. Uma era estudar História e a outra era ir para Informática. No fim, foi uma escolha bastante simples, porque sentia que a Informática era algo que eu adoraria fazer um pouco mais do que só estudar História. Pode haver partes muito aborrecidas na História, e eu não pensava que houvesse partes aborrecidas na informática, mas há, claro. Por isso, enganei-me. Sim, sim. Não, bem, podemos falar disso noutra altura. Mas sim, há partes aborrecidas. Mas pronto, fiz a escolha na altura. E foi numa época em que estava tudo a crescer. Era o boom das pontocom. Quando visitávamos a minha escola secundária, a escola onde ia estudar, que era um instituto politécnico. Podia escolher entre o politécnico e a universidade. Mas eu gosto do politécnico, porque quero construir coisas. Não sou grande teórico. Não sei como se diz, mas não sou bom com teoria. Por isso, gosto de construir coisas. Sou muito prático. Comecei por fazer a parte prática. E gostei muito disso. E foi um período em que todas aquelas empresas ganhavam rios de dinheiro. E diziam: "Olha, quando acabares o curso, recebes um carro, recebes isto, recebes aquilo." E depois, quando acabei o curso, foi o rebentar da bolha das pontocom. Estava tudo em ruínas e foi na verdade bastante difícil encontrar trabalho. E nesse momento senti que talvez devesse tentar a universidade, porque a parte do politécnico tinha sido muito divertida. E foi aí que aprendi realmente a programar. Mas pensei: bem, talvez adie um pouco a minha carreira profissional e veja se consigo fazer a universidade. Por isso, foi bom. Jonathan: Então, pelo que percebo do sistema educativo europeu, és um pouco triado muito rapidamente entre o ensino mais prático e o mais ligado à universidade, talvez mais académico. É verdade nos Países Baixos? São bastante bons a dizer: "Olha, tu encaixas mesmo nisto"? Conheço a Suíça, que é realmente a minha referência: se fores muito bom nisto, podes dizer "ok, fixe, vai fazer uma aprendizagem e ganha competências por aí". E não é visto como inferior nem superior a ir para a universidade ou o que seja. É apenas mais ajustado às tuas preferências, nesse sentido. É também verdade nos Países Baixos? E havia esse tipo de processo por que passar enquanto cresceste? Erik: Não diria que era visto como igual. Ainda existe a ideia de que ir para a universidade e não para o politécnico é melhor, ou mais difícil, ou pelo menos mais prestigiado. Também podes obter um título diferente. Mas, para mim, isso não me atraía nada. Era demasiado teórico. Eu queria aprender a programar, porque ainda não tinha aprendido a programar. Sabia que provavelmente ia gostar. Tinha visto umas coisas de HTML, mas nunca tinha escrito uma linha de código. Mas tinha bastante certeza de que ia gostar muito. Quando comecei, no primeiro ano, basicamente nem escrevi uma única linha de código. Andava só à boleia de alguns colegas num grupo, porque um deles era um programador fantástico que sabia tudo. Ele fazia tudo, por isso eu nem tinha oportunidade de fazer grande coisa. Mas no segundo ano, tomei uma decisão consciente: isto não está a funcionar assim. Nunca vou aprender a programar. Por isso, entreguei-me de corpo e alma e programei como um louco. Foi um mergulho profundo. Comecei com C, que é uma linguagem horrível para começar. Não vou entrar no que penso do C como linguagem propriamente dita, mas para começar é uma linguagem muito difícil. Fazer uma lista ligada talvez na segunda ou terceira lição não é de todo algo que apreciarias como estudante, se não tens qualquer base. Mas consegui programar e gostei tanto que comecei a programar muito nos meus tempos livres. A forma como quase me ensinei a programar, porque a forma como eles ensinavam era mesmo má, foi arranjar algo que eu próprio gostaria de usar e depois construí-lo, ou pelo menos tentar construí-lo, porque ao início andas só aos trambolhões e não consegues fazer grande coisa que seja realmente útil. Mas, no fim, é só prática, prática, prática. Descobri que programar é uma competência que se adquire simplesmente a fazer. Podes absorver toda a teoria que quiseres e ver, sei lá, 10 milhões de vídeos. Mas se não investires mesmo o tempo, não acho que alguma vez sejas um bom programador. Simplesmente tens de o fazer. E isso é um grande passo. Ainda me lembro de conseguir ler código e de ficar bastante satisfeito com isso. Mas depois ter de escrever código, isso foi um passo enorme. Jonathan: ...satisfeito com isso e ter de escrever código, foi um passo enorme. Nos últimos programas tenho perguntado quando é que a programação "clicou" para as pessoas, e se houve um momento em que caíste em ti e pensaste "ó minha nossa, isto faz todo o sentido". Andavas aos trambolhões a tentar agarrar a teoria, ou houve um momento em que pensaste "ok, não, isto é simples"? Erik: Não acho que tenha tido um único momento de "eureka". Acho que tive vários. Vem por fases. Acho que o primeiro programa a sério que escrevi foi um em que tinhas de adivinhar uma palavra. Como aquele jogo muito popular agora em que recebes as... Bem, é tipo o Jogo da Forca, mas digamos que é o Jogo da Forca. Mas era em C e consegui pô-lo a funcionar, por isso podia jogar o meu próprio jogo. Comecei a perceber mais ou menos o que se passava e depois vais progredindo um pouco. Tive uma coisa que tinha a ver, acho, com mutexes. Havia comboios que não podiam chocar. Podias usar um mutex quando se cruzavam. E um mutex é basicamente como um sinal que diz "para" ou "segue". Foi muito divertido. Fiquei bastante satisfeito com aquilo. Mostrei-o ao meu professor. E ele disse-me: "Mas e se eu quiser ter, tipo, quatro comboios?" E eu fiquei: "Ah, ah, ah, uau. Não me tinha lembrado disso." Foi como que abrir os olhos, e era só uma frase simples. E pensei: "Ah, devia ter tido em conta o facto de ele poder perguntar uma coisa dessas." Então passei o fim de semana a tentar parametrizar o meu código para que pudesses ter vários comboios, e consegui. Desenrasquei-me. Não ficou bonito, mas funcionava. Foi outro momento em que pensei: "Ah, isto é mesmo fixe. E consigo fazer este tipo de coisas." Jonathan: Fixe. Consigo ver-te a fazer este tipo de coisas. Pelo conhecimento que tenho de ti, sei disso. E também, ao aprender a programar, há este processo em que escreves qualquer coisa, consegues pô-la a funcionar e depois refinas. Foi também a tua experiência? Era tipo: escreve, põe a funcionar, quem se importa com o resto? E depois refina. Erik: Sim, sim. Acho que no primeiro ano, se corresse, eu ficava muito, muito contente. Não havia tal coisa como estética ou algo assim. Era só: se corresse, estava bom. E exagerei completamente a comentar o meu código, porque o meu professor disse-me que tinha de comentar o 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, o que eu pus... foi o meu primeiro projeto de código aberto. Lembras-te do MSN Messenger, onde podias enviar mensagens? Jonathan: Ok, está-me a soar a algo, mas não é... Erik: Lembras-te do Winamp? Jonathan: Sim. Erik: Sim, o Winamp era um reprodutor multimédia. Foi na era do Napster. Descarregavas MP3 e depois reproduzias com o Winamp. O que eu queria fazer era: se estivesse a tocar uma música, queria que ela fosse automaticamente acrescentada ao meu nome no MSN Messenger. Na altura, gostava bastante de programação para Windows. Era Win32. Era muito antiquado, nada do que temos agora, mas era muito de baixo nível e também muito fixe. Construí um plugin em C++, que era a minha linguagem preferida na altura, mas também só conhecia três linguagens, por isso não dizia muito. Mas construí um plugin. Se o Winamp estivesse a tocar, obtinha o nome através de APIs Win32 daquelas complicadas, e depois atualizava o nome que tinhas na janela do MSN. Assim, toda a gente podia ver que música eu estava a tocar. E pus aquilo online, porque pensei que talvez outras pessoas gostassem. Acho que foi no SourceForge, que agora já não é usado por ninguém, porque acho que tiveram alguns problemas com privacidade ou algo do género. Mas, na verdade, outras pessoas no mundo usaram-no e eu fiquei muito espantado. Conseguia ver os downloads, sei lá, umas duzentas descargas, e as pessoas estavam a usar o software que eu escrevi. Foi o melhor sentimento de sempre. E foi o meu primeiro programa de código aberto. Nunca tive realmente síndrome do impostor. Sentia que este é o meu código. Se alguém achar que é mau, tudo bem. Funciona, por isso eu estava contente com ele. E posso aprender com os comentários das outras pessoas. Nunca fui de ter síndrome do impostor, e quem me conhece não se surpreenderia com isso. Jonathan: Não me surpreenderia. Quanto à tua experiência com professores na universidade, houve algum professor que se destacasse para ti, e pela forma como ensinava, que tenha acelerado a tua aprendizagem ou que tenha tido um impacto enorme na forma como entendias a programação? E o que fizeram especificamente que te permitiu fazer a ponte entre a teoria e a implementação prática das coisas? É uma pergunta bastante grande. Podes dividi-la em tantas partes quantas quiseres. Sim, sim. Erik: Sim, sim. Tenho de separar entre o politécnico e a universidade. Falando primeiro desta última, na universidade, acho que o nível geral das competências de quem tinha de ensinar as pessoas era muito, muito baixo. Era um nível muito baixo. E a minha sensação era que muitas das pessoas que davam aulas na universidade o faziam porque tinham de o fazer, não porque queriam. Muitas vezes, na universidade, queres fazer investigação, mas há um número de horas que tens de dedicar a ensinar pessoas. Bem, faz parte do trabalho, mas eles não gostavam nada disso. Depois de ter aprendido a programar, quis aprender mais. Por isso, escolhi a especialização em programação, mas era tão má. Quase fiquei furioso por aquele ser o nível de conhecimento de programação que queriam transmitir-me, que era uma coisa tão má, que acabei por mudar para segurança. E não sou propriamente da área da segurança, mas a parte da programação era tão má. Costumo dizer que, do meu percurso universitário, a única coisa que aprendi verdadeiramente foi a escrever artigos como deve ser, a fazer investigação de fontes como deve ser, para conheceres as tuas fontes e não aceitares qualquer fonte. Isso aprendi naqueles anos, mas não aprendi nada sobre programação. Jonathan: Isso soa muito também à História, como interrogas uma fonte, como te certificas de que o teu argumento é coerente, esse tipo de coisas. Como é que as competências e o prazer da História... Erik: ...muito à volta. Jonathan: Como é que se manifestaram na tua programação e na tua aprendizagem de programação, se é que se manifestaram? Quais foram algumas das ligações? Erik: É uma pergunta difícil. Bem, ambas envolvem ler muito. A História é sobre ler. E a programação também é sobre ler código. O número de vezes que escreves código é muito menor do que o número de vezes que lês código. Por isso, também é bastante parecido com ler. Pode ser um pouco como ser arqueólogo, quando tens um emprego novo e começas com aquele sistema legado antigo em que tens de te orientar. Parece que estás a espreitar para cantos e recantos a ver o que está escondido por lá. E às vezes saem esqueletos do armário, etc. Por isso, parece um pouco uma exploração. Quer dizer, o que é que gostavas nisto? Não sei se há mais alguma coisa... qual era o prazer, afinal? Jonathan: Obrigado. Onde é que estava o prazer na área para ti? Erik: Principalmente, bem, as histórias que os meus professores contavam. Tipo piratas, contavam que eram arrastados por uma corda por baixo do navio e eram muito explícitos, etc. Gosto dessas coisas. Gosto mesmo. E adoro os romanos e a sua cultura e como se espalharam... e depois também a política. As traições, etc. Adoro isso. Também tive Latim na escola secundária. Não gostava nada de Latim, mas adorava as histórias que... não gostava de ter de fazer Latim, mas as histórias que tínhamos de traduzir, essas sim, gostava. Mas desisti ao fim de dois anos. Jonathan: Essas sim, gostava. Não, a razão pela qual perguntei isso, só sobre a História, era... Erik: Sim, sei a história. Jonathan: Já vi várias pessoas que gostam das áreas mais artísticas ou sociais, como é que havemos de dizer? Talvez as artes, no enquadramento inglês, sejam as artes e a História e caiam nessa categoria. Mas tenho visto cada vez mais pessoas que gostavam desse tipo de área a passar para a aprendizagem de programação. E a razão pela qual me interesso é que há claramente... uma sobreposição, e tentar mapeá-la um pouco tem sido uma parte muitíssimo interessante das conversas que tenho tido com várias pessoas. E parece que, se tiveres uma visão de conjunto e uma abordagem multidisciplinar nas várias coisas que estudas, trazer isso para a programação é muitíssimo benéfico, porque consegues aplicar competências diferentes no espaço da programação. E acho que, sim, isso é... só queria comentar isso. É interessante que adorasses a História e que agora tenhas, sei lá, experiência em mais de 30 linguagens de programação diferentes e que estejas a manter muitas delas. Bem, não necessariamente a manter, mas estás muito envolvido em gerir todas essas no Exercism, que é o teu... Bem, sim, sim. Sim, entra. Erik: Quanto é que é teu? Posso voltar um pouco ao que acabaste de dizer? Mencionaste que há muitos tipos diferentes de pessoas, com interesses diferentes, a programar. Mas uma das razões pelas quais acho que é assim é porque a programação atrai tanto pessoas muito técnicas, porque, bem, há regras estritas, as linguagens são muito fixas. Há gramática, há sintaxe. É um monte de coisas que atraem pessoas a quem as coisas agradam de determinada forma. Por exemplo, se fores físico, gostas de regras, gostas de leis, etc. E há coisas assim na programação, mas também é como uma arte. Às vezes as pessoas comparam com escrever um livro, e eu ainda acho... provavelmente é um dos melhores exemplos. Não gosto daquela do construir uma casa, porque nenhuma casa seria construída se construíssemos o nosso software como construímos uma casa. Mas é realmente tanto uma ciência como uma arte, sinto eu. O Jeremy mencionou isto recentemente, na parte do Dig Deeper, que com um exercício muito simples as pessoas conseguem chegar a centenas de soluções diferentes, mesmo quando pensas "ah, só devia haver uma forma de resolver isto". Mas há sempre mais do que uma forma. E era isso que eu adorava na programação: podes ter algo que funciona, mas depois podes explorar, sei lá, 20 outras opções, escreves e vês "ah, isto também funciona". É esta combinação de ser ao mesmo tempo arte e ciência que eu gosto mesmo, porque acho que é também a única forma de eu conseguir ser criativo. Não sou nada uma pessoa criativa. Tenho mão esquerda e direita, mas notar-se-ia... não se notaria se eu fizesse algo em casa, como tarefas domésticas ou carpintaria ou o que fosse. Não sou bom nisso, também porque o meu pai não me podia ensinar. É muito interessante. Jonathan: Mas também, eu não estava mesmo interessado nisso. Eu fiz artes na escola. Fiz música, toquei guitarra ou o que fosse. Por isso, para mim, o enquadramento que tenho para a criatividade sempre foi o desenho ou a música e essas coisas. E nunca tinha considerado realmente o aspeto criativo do código. E agora que falas nisso, como é que isso se manifesta em ti? Tipo, tocas algum instrumento ou...? Gostas de música, sei que gostas de música, mas só estou a tentar ligar as duas coisas. Erik: Bem, hmm... Sim, toco, toco. Tentei aprender guitarra. Foi muito difícil para a minha mulher, porque estávamos... vivíamos no apartamento de estudante dela e tinha talvez 20 metros quadrados. Eu estava a tentar aprender guitarra e estávamos tão próximos um do outro. Ainda me espanta que ela tenha aturado aquilo. Mas não tenho... Jonathan: É só... Erik: Não tenho qualquer talento inato para tocar um instrumento. Tive de trabalhar mesmo, mesmo, mesmo muito para chegar a um certo nível, que ainda assim era muito baixo. Conseguia fazer tempos, etc., isso fazia bem. Mas, a certa altura, o meu professor de guitarra pediu-me para improvisar e fazer solos, e eu fiquei completamente perdido. Não conseguia de forma alguma. Simplesmente não há criatividade musical em mim. Jonathan: Simplesmente não há criatividade musical em mim. E na programação? Ao contrário de ti. Quando chegas à programação de forma nova, digamos que recebes um briefing do Jeremy ou um pedido de funcionalidade no Exercism e é tipo "vamos fazer X, Y ou Z". Isso revigora-te mentalmente e sentes tipo "uau, ok, fixe, vamos mesmo explorar isto", e gostas desse processo? É isso que te faz sentir vivo, de certa forma? Erik: Ao contrário de ti. Ok. Sim, sim. É... programar é ter uma ideia e fazê-la tornar-se algo. És quase como... um pequeno deus, sim, começas do nada, tens uma ideia e depois há algo. E é simplesmente mágico. E ainda fico muito, muito eufórico quando tenho um script. Há todo aquele texto, linha a linha, e depois vês aquilo a fazer coisas. É tão divertido ver o computador a trabalhar para ti com base no que disseste que devia fazer. Continuo a gostar. E o aspeto da criatividade está também, sem dúvida, já na exploração de que caminho vais tentar seguir para construir algo. E depois, uma vez construído, já deves ter ouvido falar do ciclo de refactoring, em que tens algo que funciona e depois começas a iterar para ver se o consegues melhorar. E eu adoro absolutamente refactoring. Há ali um dos livros... onde é que está? Ah, não o consigo ver porque está fora do enquadramento da câmara. Mas é o Refactoring, do Martin Fowler. É uma das minhas melhores experiências de leitura sobre software. Adoro mesmo refactoring. É o processo de teres algo que funciona, mas poderes torná-lo ainda melhor ou mais bonito, mais rápido, o critério que quiseres. E também é por isso que gostei tanto do Exercism, porque é construído para isso: resolves testes e depois tens um harness de testes e podes fazer o que quiseres com o teu código. E enquanto estiver a verde, continua a funcionar. Portanto... Jonathan: Gosto muito disso. Vou continuar a recuar a diferentes fases. Agora já fizeste a universidade, aprendeste a programar, disseste mesmo "pronto, estou comprometido com este processo de aprendizagem, vou mergulhar a fundo nisto". Então, o que aconteceu depois, a partir desse ponto em que te comprometeste a sério e começaste provavelmente a pensar na carreira? E isso é sempre uma grande parte do processo de estar na universidade: "o que vou fazer para o resto da vida?" Como é que isso se desenrolou? O que pensavas sobre isso? O que é que se abriu à tua frente? Erik: Claro. Nunca pensei realmente na minha carreira. Acho que nunca o fiz na minha vida. A única coisa que me importa mesmo é fazer algo de que gosto. E que seja perto de mim, para não ter de conduzir muito. Não gosto de conduzir muito. Mas não, nunca pensei realmente na minha carreira. E também tenho sido incrivelmente sortudo. Basicamente nunca tive de me candidatar a um emprego, exceto talvez uma ou duas vezes. Sempre tive amigos ou pessoas que me conheciam. O mesmo com o Exercism. O Jeremy conhecia-me e não tive de me candidatar, nem de passar por, sei lá, quatro ou cinco fases de entrevista como tu tiveste de fazer. Talvez até mais, no teu caso, por acaso. Mas, hmm, eu... Não, não, eu sei. Mas eu não tive nenhuma. Foi o mesmo quando andava à procura de emprego. Estive sempre... trabalhei sempre em paralelo enquanto estudava, mesmo na escola secundária, andava sempre a tentar ganhar um dinheirinho, porque os meus pais não tinham muito dinheiro. Por isso, tinha de ganhar a minha própria parte. Mas adoro trabalhar. E acho que trabalhei talvez 20 horas num emprego de programação enquanto fazia a universidade, porque tínhamos tão pouco tempo que éramos obrigados a passar dentro da universidade que eu conseguia ganhar bastante dinheiro... e comprei uma enorme coleção de DVDs com isso. Jonathan: Não vamos falar disso. Erik: Não vamos falar disso. Sim, desculpa, na verdade já dei a maior parte, fiquei com as que tenho memórias muito, muito queridas, mas dei a maior parte. Cheguei a ter 400 ou 500 DVDs a certa altura. Jonathan: 400-500 DVDs a certa altura. Ah, isso é divertido. Erik: Era perto disso. Era perto disso. Sim. Mas enquanto estava na universidade, um amigo meu, o mesmo que era o programador naquela altura em que eu tinha 10 anos ou algo assim. Ele fez a universidade comigo. E estava num emprego e perguntou-me: "Olha, queres juntar-te a esta empresa para ganhares um dinheiro extra?" E eu fui. E depois fiquei lá, basicamente. Quando acabei a universidade, perguntaram-me se queria fazer um doutoramento. Mas... eu interpretei isso como "encontraste algo interessante no teu doutoramento", que foi pura sorte, por acaso; fiz o trabalho, mas foi sorte. Mas eu interpretei aquilo como "queremos pôr os nossos nomes em algo que vais escrever, para termos uma publicação". Por isso, não estava para aí virado. E não queria fazer quatro anos de coisas teóricas. E todo o mundo académico não me atraía nada. Sentia-me muito mais à vontade a fazer coisas práticas dentro de uma empresa. Por isso, fiquei onde estava a trabalhar. E era PHP e tínhamos uma ótima equipa. Acho que, exceto talvez a nossa equipa atual, nunca trabalhei numa equipa tão diversificada e tão capaz. Mas éramos liderados por uma gestão que era tão má. Havia um ambiente tecnológico tão descontente ali. Simplesmente não era bom, mas mesmo assim diverti-me muito. Mas o PHP não é a minha linguagem preferida. Por isso, gostava do C#. Sou fã de C# desde quando ainda era C# 1.0. Na altura era bastante cru. Encomendei livros dos Estados Unidos e tive de pagar um imposto adicional, e no fim ficou bastante caro, mas mesmo assim usei muito, muito aquele livro. E depois disse que queria fazer C# a sério, num emprego. Não só como passatempo. E candidatei-me. Na verdade, era também para a universidade, mas não era fazer investigação nem nada disso. Era tipo... dar apoio às várias partes da universidade. E fiz C# durante uns sete anos. Jonathan: E fiz C# durante uns sete anos. Conta-me só a história aí. Porque começaste como voluntário ou como contribuidor, certo? E depois foste crescendo a partir daí. Erik: Sim. Sim, então, enquanto trabalhava na universidade, eram muito liberais a permitir que estudasses coisas ou fosses a conferências, etc. A certa altura, ouvi falar de uma coisa chamada programação funcional. E pensei: "Olha, não sei bem o que é isto." Sabia que davam uma lição opcional na universidade, mas nunca fiz nada com isso. E pensei que talvez devesse aprender programação funcional, talvez fosse divertido. E arranjei outro colega meu que quis juntar-se. Fizemos um curso grátis, um curso de Scala no Coursera; hoje em dia tens de pagar, mas naquela altura não. E era dado pelo Martin Odersky, que é o autor do Scala, uma linguagem funcional que também temos no Exercism. Diverti-me imenso a aprender programação funcional, que também foi um bocado de uma luta mental às vezes, porque é uma forma realmente diferente de pensar nas coisas. Mas perseverei e gostei muito. E havia um fórum onde podias discutir com outros alunos, por exemplo, exercícios que não conseguisses resolver. Mas algumas pessoas perguntavam: "Que recursos posso usar se quiser aprender mais sobre Scala?" E alguém mencionou: "Olha, experimenta o Exercism, têm uma coisa incrível onde fazes muitos exercícios diferentes, tipo pequenos puzzles." E eu pensei: "Olha, isto parece bom." Por isso, juntei-me e fiz o trilho de Scala. E aprendi mesmo muito. Foi assim que molhei os pés no mundo da programação funcional. Então pensei em mergulhar mais a fundo. E fui para Haskell. E aquilo foi um verdadeiro mergulho profundo para mim, na altura. Mas muito daquilo era o Exercism V1. As pessoas limitavam-se a comentar o teu código, não havia sistema formal de mentoria nem nada disso. Mas as pessoas do Haskell eram absolutamente fantásticas. Basicamente, aprendi Haskell com eles. Fiz imensas pesquisas no Google e encontrei algumas soluções muito estranhas; fiz algumas soluções estranhas, mas eles tentavam sempre guiar-me para algo que fosse Haskell idiomático e bonito. Foi uma experiência tão boa que pensei: "Olha, provavelmente devia estar a fazer isto por outras pessoas. Talvez também possa ajudar." Sempre gostei de ajudar. Então pensei: "Vou fazer C# e vou comentar o código de C# dos outros." E gostei. E depois vi: "Olha, o percurso de C# tem, sei lá, 40 exercícios, e o Haskell tem mais. Porque é que será?" Tentei perceber porquê. E: "Olha, podes submeter pull requests para o Exercism e adicionar exercícios novos." E foi isso que me agarrou. E passei a adicionar exercícios todos os fins de semana. E depois, quando acabei com o C#, pensei: "Olha, F#, vamos fazer F#. O F# é funcional. E está no ecossistema Microsoft. Por isso, gosto dos dois. Vamos combinar as minhas coisas preferidas." E fiz F# e fiz o mesmo. Fui mantenedor de F#, a construir exercícios, e adorei mesmo, mesmo. Jonathan: Adorei mesmo, mesmo. Tens uma linguagem, tipo "ok, vou experimentar Scala". Apanhei-lhe o gosto e depois mergulhaste a fundo nela. Agora, o tempo que levavas a compreender cada linguagem, foi diminuindo com o tempo? Porque agora tens várias. Quer dizer, como é que isso se desenrolou? Erik: Sim, sim. Bem, isso funciona da mesma forma com as línguas naturais. Se aprendes francês e sabes bem francês, então apanhar espanhol será muito mais fácil, porque há muito conhecimento partilhado, como vocabulário partilhado, quase dialetos. É o mesmo com a programação. Se sabes C e passas para C++, há muitos conceitos novos, mas também havia muita coisa exatamente igual. Toda a família de linguagens tipo C, que é também uma das coisas de que gosto na programação: há como que árvores genealógicas. Há o ramo Lisp, há o ramo ML, há o ramo tipo C. E é quase como a História, em que tens essa genealogia numa árvore genealógica ou algo do género. Disse isso demasiado alto. Sim, isso é Haskell ou Prolog. Mas também adoro esses casos mais atípicos, porque têm ideias únicas. É isso que costumo querer experimentar. Encontrar uma linguagem que faça algo de forma diferente, mesmo que todas as linguagens de programação partilhem muito do mesmo conhecimento. Todas têm lógica booleana, e a lógica booleana é algo fixo, é um dado adquirido. Por isso, funciona da mesma forma em todo o lado. Podes ter de escrever dois ampersands, ou podes usar and como palavra ou algo do género, mas as bases continuam a ser as mesmas. Por isso, quando tens essas bases, conhece-las bem, e podes aplicá-las a outras linguagens mais facilmente. Jonathan: É quase como a História, em que tens essa genealogia numa árvore genealógica ou algo do género. ...linguagens mais facilmente. Aprendes a programar e tens em conta a tua própria experiência. Quais são alguns dos comportamentos e das coisas que as pessoas fazem para aprender a programar? E de certeza que há ligações em muitas disciplinas diferentes. Falaste de te teres comprometido, de teres mergulhado a fundo e de teres lutado com aquilo até o perceberes. Há outros comportamentos ou coisas que as pessoas fazem e que já viste, em que pensas: "Sim, puseram-se numa posição de aprender"? Sim, muito bem. Erik: Hmm, então, eu sempre tentei incentivar as pessoas a construir algo que gostassem de construir. Quando estava a aprender PHP, construí uma coisa que registava os 250 melhores filmes do IMDB que eu já tinha visto. Andava a ver muitos filmes, por isso queria assinalar cada um deles, desses filmes, e aprendi muito de PHP e MySQL com isso, só por construir algo que queria construir. Porque assim atravessas a parte difícil; se encontras um obstáculo, queres... não parar, mas continuar, queres corrigi-lo, queres que funcione. E já dei essa dica a várias pessoas que começaram a aprender a programar e funcionou bem com elas. E hoje em dia é tão diferente de quando eu estava a aprender a lidar com o Stack Overflow, etc. E há tanto conhecimento que podes encontrar online. Também é difícil encontrar os recursos certos. É aí que acho que o Exercism pode realmente brilhar, porque podemos ser quase guardiões... temos pessoas na nossa comunidade que sabem quais são os recursos certos. E isso é uma coisa que eu vejo as pessoas novas a ter dificuldade em resolver. E também há isto: quase nunca encontras recursos onde realmente começas do zero. Normalmente o público do Exercism já sabe pelo menos uma linguagem. E depois passa para outras linguagens ou aprofunda essa linguagem. Mas não é para pessoas que... não têm qualquer experiência de programação. Que não sabem o que é um ciclo for. Que não sabem o que são variáveis. As strings são uma coisa completamente diferente na tua cabeça. Sim, recebo sempre olhares estranhos se a minha mulher me vê a falar de strings. É uma coisa diferente aqui nos Países Baixos. Jonathan: Sim. Vou fazer algumas generalizações aqui. Nos últimos anos, é provavelmente verdade que cada vez mais pessoas se deram conta da programação. No passado, havia provavelmente um número menor de pessoas que sabiam navegar nesse espaço. Obviamente, à medida que esta indústria cresce e cresce e cresce a um ritmo bastante acelerado, há obviamente muitas opiniões e pessoas ainda a tentar encontrar o seu lugar em certas coisas e certos temas. Todo este conceito da "colina por que morrerias" é basicamente: que opinião defendes que lutarias mesmo por ela, ou que defenderias de forma saudável, obviamente. Mas qual é a única coisa que defenderias e... quererias firmar e dizer "não me mexo deste ponto e tens de a defender"? Qual seria? Ok. Erik: Tenho muitas dessas opiniões, mas acho que a que gostaria de explicar aqui é que devias aprender mais linguagens do que as que já sabes. Experimenta linguagens novas que não conheces e linguagens muito diferentes das que já conheces. É muito fácil. Por exemplo, se sabes C#, fica só com C# e está tudo bem. Mas se conseguires arranjar tempo e vontade para experimentar outra coisa, por exemplo, F# ou, sei lá, experimentar Kotlin, faz só algo diferente e vê quais são as diferenças. Serás um programador muito melhor. Estou absolutamente 100% convencido de que aprender F# me tornou um programador de C# melhor, mesmo sendo linguagens diferentes e com filosofias diferentes. Mas há tanta sobreposição entre linguagens hoje em dia. Quando as linguagens ainda eram bastante jovens, por exemplo, o Lisp não se parecia nada com o C. As linguagens funcionais eram muito diferentes das imperativas. Mas as linguagens modernas, como C#, como Java, como Kotlin, como Rust, por exemplo, também se inspiram noutras linguagens, inclusive nas funcionais. Quando eu andava na universidade, a piada corrente era: a programação funcional é ótima, mas ninguém a usa. Mas isso já não é verdade. Por isso, mesmo que não trabalhes numa linguagem funcional, a programação funcional está em todo o lado. O JavaScript tem muitos conceitos funcionais. O C# tem pattern matching avançado, tem o LINQ, tem imensa coisa funcional. E o que se vê é que as linguagens estão a emprestar conceitos por todo o lado. Por isso, já não é tão claro o que é uma linguagem funcional e o que é apenas uma linguagem imperativa. Agora é mais uma mistura. Mas continuo a achar que há muito a ganhar se começares a aprender uma linguagem nova. Algumas pessoas dizem para aprender uma linguagem nova todos os anos. Tento fazer isso. Consigo imaginar que isso seja irritante para as pessoas e que fiquem sobrecarregadas. Mas experimenta pelo menos uma linguagem diferente e tenta que seja uma linguagem ligeiramente fora da tua zona de conforto. E prometo-te: aprendes coisas, aprendes muito e tornas-te um programador melhor em geral. E também na tua linguagem em que já trabalhas. Jonathan: ...e também na tua linguagem em que já trabalhas. Obviamente, as pessoas criam linguagens novas para dar resposta a uma necessidade específica. E estás a dizer que o imperativo e o funcional, os dois, estão a fundir-se um pouco. Vês alguma situação em que as linguagens vão desaparecer e vamos ficar apenas com um par de linguagens centrais? Ou isso é ingénuo? Erik: Não, não, acho que as pessoas são demasiado opinativas para isso. Haverá sempre linguagens novas. Haverá linguagens novas todos os dias, o que é bom. Mas haverá árvores a abanar. As populares, no fim, provavelmente vão resistir. Não vejo o Java ou o C# a desaparecer tão cedo. Mas, por exemplo, o C ou o C++ sempre foram linguagens enormes. Mas agora vemos o Rust, que é uma nova abordagem para tentar resolver os mesmos problemas, mas com mais segurança. Segurança incorporada. E é uma linguagem fantástica que eu, na verdade, devia conhecer melhor. Mas é interessante ver que o Rust está agora lentamente a entrar no mesmo espaço, com pessoas a começar a usá-lo em vez de C ou C++, o que, pessoalmente, acho muito bom. Por exemplo, no Linux, agora podes escrever os teus drivers em Rust. Tradicionalmente seria sempre C++, mas agora suportam escrever drivers em Rust. Foi um passo bastante grande. Por isso, acho que continuarão a existir linguagens, porque não podes fazer uma linguagem que sirva todos os propósitos. E é também por isso que acho que devias aprender várias linguagens, porque situações diferentes pedem linguagens diferentes. Podes tentar... é como tratar um martelo com... como uma serra. Não sei qual é a expressão. Jonathan: A expressão? É tipo: ok, precisas de uma serra, mas só tens um martelo. O que vais fazer? Ok. Erik: Sim, sim, algo do género. É um... acho que é com um prego e um martelo, algo assim, mas não sou bom em provérbios em inglês, e não te vou maçar com a versão holandesa. Mas, basicamente, se só sabes C# e há talvez 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 o C#, mesmo que consigas fazê-lo em C#, isso não significa que devas. Por isso, se souberes mais linguagens, provavelmente estarás mais bem preparado para tomar uma boa decisão, mais adequada ao domínio em que trabalhas. Jonathan: Ok, então é divertido e é bonito. Quanto à comunidade do Exercism, que recomendação darias à comunidade do Exercism esta semana, que sugeririas mesmo que experimentassem? Pode ser qualquer coisa, pode ser "vai dar um passeio". "Tenta fazer uma parada de mãos". Não sei. Está bem, podes, e podes dar mais do que uma se quiseres. Já sei o que vou dizer, por isso podes dar três recomendações. Erik: Então é divertido e é útil. Já sei o que vou dizer. Ok. Ok, a primeira que me vem à cabeça é irem ver o separador Dig Deeper, que agora temos. Começámos a... adicionámos a nova funcionalidade Dig Deeper, onde podes, depois de resolveres um exercício ou pelo menos depois de teres iterado sobre ele, ver abordagens, ou seja, as diferentes formas de resolver um exercício. E é basicamente assim que toda a gente aprendia no Exercism V1, em comparação com os comentários acrescentados: olhando para o código dos outros e vendo como o resolveram. Foi assim que aprendi muito de Haskell, para além dos meus comentários mentais. Só de ver "ah, podes fazê-lo assim". E depois experimentavas tu mesmo e dizias: "Ah, isto é mesmo elegante e posso fazer mais coisas com isto", e depois aplicavas isso a outros exercícios. Poder encontrar estas diferentes formas de fazer as coisas é um pouco voltar à arte quase da programação, à forma como podes resolver as coisas de maneiras diferentes. Existem estas abordagens diferentes. Escrevi artigos e abordagens sobre inverter uma string. Essa é uma das perguntas básicas de entrevista que apanhas em entrevistas de TI: como inverter uma string? Em C#, há algumas formas idiomáticas diferentes, mas são diferentes e têm características de desempenho distintas, e uma delas é muito focada no desempenho, mas é menos legível. Gosto que no site, depois de resolveres de determinada forma, possas dizer "olha, também há outras formas". E estes são os benefícios de o fazer assim. E estas são as contrapartidas. E é isso, não é só veres a abordagem diferente, mas também tentamos escrever um documento introdutório onde te ajudamos a escolher entre elas. Porque há sempre contrapartidas em TI. Quase nunca há uma solução que seja simplesmente a melhor. Podes sempre escrever as coisas de forma diferente. Muitas vezes, sim. A solução mais legível não é sempre a de melhor desempenho. Ajudar-te a fazer as contrapartidas, a compreendê-las e a escolher entre abordagens diferentes. É também algo que tentamos fazer com o separador Dig Deeper. E tenho escrito sobre isso nos meus tempos livres. Divirto-me imenso só a escrever esta informação e a partilhá-la com as pessoas. Por isso, incentivaria mesmo as pessoas a experimentarem escrevê-las ou simplesmente a lerem as abordagens. Sei que não são todos os exercícios que as têm. Começámos esta funcionalidade há uma semana. Por isso, estará bastante limitado a uns quantos exercícios de C#, mas vamos expandir muito. E aceitamos PRs da comunidade para este tipo de coisas. E ajudo com todo o gosto a escrever e a levar isto até ao fim, e podes partilhar o teu conhecimento da tua linguagem. Acho que é uma coisa de que as pessoas gostam sempre. Se gostam de uma linguagem, gostam que os outros também gostem. Por isso, as abordagens são uma forma muito boa de mostrar o que a tua linguagem consegue fazer. Vai ver. Sim. Jonathan: Vai ver. Tens mais alguma para esta semana? Erik: Hmm, bem, com o risco de parecer uma pessoa muito ligada ao Exercism, gosto mesmo do fórum do Exercism. Uma coisa que descobri na minha carreira é que é muito difícil encontrar uma comunidade de pessoas com mentalidade tecnológica que seja um espaço quase seguro, onde possas discutir as coisas sem que outras pessoas te façam sentir estúpido ou se criem discussões ou um ambiente belicoso. Por isso, gosto muito de como tentamos, com o fórum, fazer disto um lugar muito seguro e feliz para as pessoas, mas também um lugar onde podes encontrar programadores muito bons. Pessoas muito competentes, com grandes conhecimentos das suas linguagens ou do espaço da programação. E gosto mesmo de ler o que os outros escreveram. Há um tópico sobre quais são os teus livros de programação preferidos. E já pus alguns livros na minha lista de leitura, porque... sim, não te cruzas com todos os livros. Mas outras pessoas leram-nos. Podes usar a sabedoria da multidão. Basicamente, Jonathan: ...a sabedoria da multidão, basicamente, esse tópico. E de certeza que vai haver ouro puro a extrair daí. Mas, quer dizer, isso é mesmo fixe, Eric. Acho que, se quiseres dar mais uma recomendação, és bem-vindo, mas, caso contrário, começamos a arrumar um pouco as coisas. Mas, se tiveres mais algum pensamento ou comentário... sim, vamos continuar a partilhar. Erik: mhm... Ja, das kommt in das Video. Não, não propriamente. Estava a tentar encontrar uma terceira. Jonathan: E estou sempre a tentar encontrar uma terceira. Nesse caso, já é demasiado. Mas Eric, muito obrigado por este tempo. Foi mesmo fixe ouvir a tua história, ouvir como isso passou para o setor tecnológico. Gostei especialmente de ouvir um pouco sobre a História, e talvez isso seja algo sobre o que possas pensar e partilhar um pouco mais, sobre como a História e a programação e tudo isso se sobrepõem em algum momento. Mas muito obrigado. É ótimo ter-te na equipa e sem dúvida aprendi, e vou continuar a aprender, imenso contigo. Um grande elogio para ti, porque ultrapassaste os 100 000 pontos de reputação no site do Exercism. Sei que vais dizer que a razão pela qual o fizeste é porque fizeste batota, mas mesmo assim vamos considerá-lo uma conquista notável. Por isso, muito obrigado. E sim, se estás a ouvir isto e nunca te cruzaste com o Exercism, vai ver o Exercism e de certeza que encontras o Eric em algum ponto desse espaço. Mas Eric, obrigado. Agradeço muito. Vou pausar esta gravação e podemos falar depois disto, mas obrigado pelo teu tempo. E espero que te tenhas divertido tanto como eu. Isto foi ótimo. Erik: Não me importo. Fantástico. Diverti-me. Diverti-me. Muito obrigado.

Mais histórias da nossa comunidade

Ouve, aprende e deixa-te inspirar pelos membros da nossa comunidade.