Categories
Artigos

Verdades sobre as diferenças entre academia e indústria

Sinto-me um pouco impostor em escrever isso, já que saí da academia sem realmente sair, trabalhando como Engenheiro em um instituto de pesquisa em parceria com empresas. Mas minha rotina atual é muito mais voltada à Engenharia e desenvolvimento (especificamente no meu caso, de software) que a atividades de pesquisa, então acho que posso dar algumas dicas para estudantes (de graduação ou pós-graduação) que estão prestes a enfrentar um pouco da realidade agora.

Verdade #1: o mundo real usa Word e não LaTeX – ou, como se preparar para o mercado

Se você não é estudante de exatas, não vai entender o meu ponto. Mas aqueles que acostumaram a escrever artigos, teses, relatórios etc usando LaTeX, podem se preparar: fora da academia, ninguém sabe o que é isso. Você vai usar Word e passar mais tempo ajustando a posição das figuras que escrevendo texto de fato.

O que leva a um outro ponto, mais profundo: quantas das suas habilidades estão adequadas ao mercado? Como eu sou Engenheiro, minha visão é pragmática: o mercado é a realidade. O mercado não aceita o futuro do pretérito, e não deveria ser de um jeito de outro. O mercado é.

Eu tenho que escrever documentos em Word o tempo todo, e gasto cada segundo desse processo me odiando. O que eu não faço é reclamar e desejar que eu poderia usar LaTeX. Eu tento fazer o serviço bem feito, e aprendendo a me guiar melhor.

Nunca é cedo ou tarde demais para olhar para fora; pesquise vagas de emprego na sua área e veja se você consegue se candidatar para alguma hoje. Se não, o que falta?

Verdade #2: ninguém liga para que linguagem de programação você usa

Se você está terminando a faculdade ou algum curso de pós-graduação hoje, é provável que tenha implementado alguma coisa em alguma linguagem de programação, e talvez esteja orgulhoso das suas habilidades em Python, ou R, ou Matlab. Mas você sabe o que acontece? Gerentes usam Excel e querem ver relatórios e apresentações (voltando ao ponto anterior: você consegue criar uma planilha ou apresentação razoável em algumas horas?), e não sabem o que é Python.

É claro que você deve aprender programação. Mas você deve aprender programação, e não linguagens de programação. Se você precisa analisar dados para um relatório, então o produto a ser produzido é um gráfico, e não o seu programa. Se você consegue fazer o gráfico sozinho em Python, então crie o programa que analise os dados e siga em frente. Mas se a sua equipe já usa R para analisar os dados automatizados de algum sensor, o quão preso você está em Python?

No vídeo abaixo, Chris Lattner, criador de compiladores e linguagens de programação, é bem direto: clientes não ligam para o programa que você criou, eles ligam para o problema que o seu programa resolve.

Chris Lattner falando sobre habilidades de programação e como o que importa é o resultado e não o programa

O meu projeto profissional principal usa Python, mas isso é uma decisão da nossa equipe de desenvolvimento, e não do nosso cliente. Ultimamente tenho pensando muito em passar para uma linguagem compilada e estaticamente tipada para facilitar a documentação, e tenho plena confiança de que nosso cliente não liga. Se o programa produz sempre o mesmo resultado, o que a linguagem de implementação importa?

Para um projeto secundário, estou colaborando com um colega que já fez grande parte do trabalho usando Julia, uma linguagem nova para mim. O que fiz? Estudei um pouco de Julia e fiz o que tinha que fazer. Meu trabalho é resolver problemas de engenharia, não filosofar sobre Python. Mas se no futuro, quisermos passar para outra linguagem não deve ser difícil.

Em outro clipe do podcast do Lex Fridman, Charles Hoskinson fala que a sua companhia usa uma linguagem acadêmica (Haskell) porque é mais voltada para a pesquisa que eles fazem, mas que os programas podem ser portados para outra linguagem mais tarde.

A não ser que você seja da área de programação (onde você vai provavelmente vai ser contratado para uma linguagem específica que já é usada em um time), escrever programas para resolver problemas é uma habilidade que o mercado (ver ponto anterior) procura; programar em Python não é. Se você está procurando vagas em algum projeto de análise de dados, talvez linaguagem X ou Y seja um requerimento (novamente, porque é o que a equipe já usa, não porque alguém liga); o quão difícil é você criar um projeto no GitHub mostrando essa habilidade?

Verdade #3: o mundo real usa unidades feias (e sistemas desatualizados, e planilhas bagunçadas)

Surpresa: fora da academia, ninguém sabe o que é kelvin. Catálogos de tubos estão em polegadas, não em milímetros. Determinadas indústrias usam sistemas de unidade próprios.

O que não é surpresa: não é você quem vai mudar isso.

Acostume-se à bagunça da vida real, onde algumas coisas estão em litros e outras em galões. Você vai receber planilhas onde está tudo misturado (e nada vai estar documentado, é claro).

Ah: e você também vai usar sistemas desatualizados, com softwares que vão fazer você ficar com raiva, já que você sabe que existem versões mais recentes melhores. Novamente, o mercado entre em cena: a sua futura empresa tem muito mais incentivos em manter tudo funcionando do que pagar para atualizar todas as licenças, ou todos os servidores. É você que tem de ser flexível.


Já virou clichê de millenials como eu reclamar da geração que está terminando seus estudos agora. Não vou fugir desse clichê: estou notando sim um idealismo maior nos estudantes universitários de agora do que na época de quando eu estava na faculdade, achando que tudo deveria ser mais fácil.

Isso é perigoso.

O tal mercado que tanto falei não aceita estudantes arrogantes – aceita pessoas que trabalham duro e se adaptam. Quem você vai ser no mercado de trabalho?

Categories
Artigos

O melhor curso de programação para engenheiros (e que ninguém conhece)

Eu aprendi a programar na faculdade, e nos semestres finais eu só fazia os trabalhos com cálculos implementados em computador. Ao longo de minha carreira, utilizei diferentes linguagens, técnicas, e métodos, mas a programação sempre fez parte do meu trabalho.

Se você estuda Engenharia, você precisa aprender a programar.

Quando eu comecei no meu emprego atual, eu me deparei com um desafio que eu não tinha enfrentado antes: desenvolver programas não seria apenas um meio para outro objetivo (como escrever teses ou preparar aulas), mas é o trabalho; meu papel aqui é desenvolver, manter, testar e documentar softwares de Engenharia que outros pesquisadores e pesquisadoras usam. Eu precisava subir de nível na minha habilidade.

O caminho que escolhi é o projeto Open Source Society University, que prescreve um “caminho” para cursar Ciências da Computação com apenas cursos online. Eu não tenho essa pretensão, e nem acho que é possível. O meu objetivo é trazer conceitos mais rigorosos, efetivos e eficazes do mundo do desenvolvimento de software para a Engenharia.

E já no primeiro curso, o mais básico, surpreendi-me positivamente, e agora acho que todo estudante de Engenharia deve começar o quanto antes o curso online e gratuito How to Code: Simple Data, que usa o meu novo livro preferido de programação (também online e gratuito) How to Design Programas (2 ed.)

Esse não é um curso sobre uma linguagem específica, tanto que usa uma linguagem não muito popular chamada Racket. É sobre projetar programas, como um projeto qualquer de Engenharia: com requisitos, critérios de sucesso (como você sabe que o programa está correto? Você testa todas as suas partes). É sobre seguir um método, rigoroso e sistemático. Tanto no curso quanto no livros, os autores enfatizam a importância de documentar o que você está fazendo, com muitos exemplos.

Minha dica é essa: siga esse curso, tentando fazer todos os exercícios, e então busque traduzir os conceitos na linguagem que você usa nos seus projetos (provavelmente uma das minhas recomendadas). A qualidade dos programas que eu escrevo e o meu entendimento sobre eles aumentou exponencialmente.

Fora que programas em Racket é divertido.

Categories
Artigos

Linguagens de programação que todo pós-graduando deve saber: a Tríade da Ciência de Dados

Se você está iniciando em uma carreira de pesquisa, você vai ter de tratar dados experimentais ou numéricos e apresentar seus resultados. Não há escapatória além de aprender a programar, e isto vale para todas as áreas; John MacFarlane, por exemplo, é professor de filosofia e um grande nerd.

Para mim, existem três linguagens básicas que você deve saber e estudar continuamente, e vou apresentar na ordem em que acho que devem ser estudadas. Também, como eu sou o Fábio, eu vou dar dicas de livros, que ainda são muito superiores a simples tutoriais para realmente aprender algo.

Python

Se você está começando, este é um excelente primeiro passo. Python é uma linguagem simultaneamente fácil de aprender e poderosa; é bastante geral, e tem bibliotecas para processamento de arquivos, interfaces web e cálculo numérico e matricial.

Eu uso Python regularmente para meus projetos de Engenharia desde 2011. No meu mestrado, criei scripts para pegar os arquivos que o sensor de pressão da minha bancada escrevia e criar gráficos de pressão x tempo para cada teste que eu havia feito. No meu doutorado, criei dois programas que resolviam as Equações de Maxwell para duas geometrias diferentes de ímãs permanentes e calculavam o campo magnético gerado por cada uma. Atualmente, mantenho alguns programas de simulação de poços de petróleo e cálculo de propriedades de óleos.

Uma boa introdução geral é este livro, enquanto este aqui é excelente e mais voltado para área de dados.

R

Você pode usar Python para praticamente qualquer tarefa, mas sempre há benefícios em conhecer mais linguagens. Bjarne Stroustrup, criador da linguagem C++, diz que um salto fundamental para alguém que sabe programar é passar de uma para duas linguagens: o conhecimento de uma alimenta o estudo da outra.

Acontece isso comigo ao estudar R, uma linguagem voltada à Estatística. Embora eu não use muito scripts em R em si, o conhecimento que tenho da linguagem me faz pensar melhor na organização das tabelas de dados, e em como posso juntar todas as simulações que faço em uma única tabela que é filtrada e transformada (e.g. calcular a média de todas as linhas da tabela mestre que correspondem a uma mesma condição de pressão) para diferentes tarefas. Esse conhecimento me acompanha mesmo quando escrevo os programas em Python.

Estes dois livros são excelentes e fundamentais para começar a estudar dados de maneira mais séria.

Julia

Julia é uma linguagem bem mais moderna que as outras, e bastante focada na rapidez de execução. Novamente: ao estudar e praticar Julia, eu posso tanto escrever scripts nessa linguagem como pensar em como acelerar meus programas em Python e R. Se você já tem um sistema que quer otimizar, sugiro fortemente aprender Julia; o ecossistema de bibliotecas está crescendo rapidamente.

Uma boa introdução a Julia é este livro online.


Se você quer aprender mais sobre alguma dessas linguagens, diga aqui nos comentários!

Categories
Artigos

O que fazer com dados errados/faltantes/desorganizados? Parar de reclamar!

Não quero parecer mais velho e experiente do que sou, mas eu tenho certa experiência de Engenharia. Depois de me formar, há 11 anos, completei um Mestrado e um Doutorado, fiz estágio de Pós-Doutorado, trabalhei como professor, e atualmente sou engenheiro em um projeto de pesquisa. Participei de muitos projetos diferentes, com empresas diferentes, com assuntos e contextos diversos.

Sendo professor e pesquisador, interajo com muitos alunos e alunas, engenheiros e engenheiras menos experientes que eu, e é muito comum ouvir variações do tipo:

  • “Onde consigo esses dados?”
  • “A empresa X compartilhou os dados de maneira muito desorganizada”
  • “Os dados de medição e calibração estão num arquivo PDF, como vou usar isso no meu script?”

Engenheiros e engenheiras, pesquisadores e pesquisadoras: trabalhar com dados errados/faltantes/desorganizados não é um impedimento ao seu trabalho, é o trabalho.

A vida de Engenharia não é a vida dos livros-texto, onde as tabelas são bonitinhas. Os dados passam por mãos humanas, onde há algum erro (mesmo que sejam obtidos de um sensor de maneira automática, alguém programou aquele sensor).

Seja cuidadoso ao digitar seus dados manualmente. Muitos erros bobos aparecem quando se transferem dados de uma fonte para outra .

[…]

Muito da visualização envolve coletar e preparar dados. Raramente, você consegue os dados na forma como você precisa, então espere dar uma arrumada nos dados antes de visualiza-los.

Nathan Yau, Visualize This (Tradução livre minha)

Quer outra citação?

Para se tornar um cientista de dados, você precisa de dados. Na verdade, como um cientista de dados, você passará uma embaraçosa grande fração do seu tempo adquirindo, limpando e transformando dados.

Joel Grus, Data Science do Zero

Nesta bela tarde de segunda-feira, pegue uma xícara de café, abra o Excel com aquele arquivo desorganizado que você recebeu de alguém (ou use Tabula para extrair tabelas de PDFs), e confira os detalhes:

  • As unidades estão certas?
  • O separador decimal (ponto ou vírgula) está correto?
  • Os dados estão numéricos (1 em vez de “1”)?
  • Há linhas com colunas faltantes? Por quê? Adicione uma coluna de observações.
  • Valores nulos (de valor numérico 0) ou negativos são isso mesmo, ou algum sinal de erro do sensor?

Repito: ninguém vai fazer isso para você. Você precisa pensar sobre os dados – e sobre o que você quer fazer com eles.

Categories
Artigos

Por que deixei meu emprego de professor

Vou fazer um anúncio quase 2 meses atrasado: eu deixei o meu emprego anterior de Professor Substituto em uma universidade estadual, e voltei à minha universidade (e cidade) de origem para trabalhar como pesquisador em um novo projeto.

Os anúncios são vários, mas a base é uma só: eu me sentia sem futuro.

Eu amei ser professor, fui muito feliz no meu ambiente de trabalho, e acho que tenho talento. Não pretendo abandonar o ensino, e um de meus projetos para 2023 é justamente reavivar meu canal de aulas no YouTube, modernizando os vídeos e criando verdadeiramente os meus cursos de Engenharia Mecânica. Mas a vida de professor substituto não é fácil: eu tinha uma caga horária de 17 horas-aula semanais, com 5 disciplinas por semestres, o que exigia mudar o assunto na minha cabeça várias vezes por dia, corrigir dezenas de provas e trabalhos por mês, e estar sempre revisando e preparando aulas.

O sinal de alerta veio quando percebi que, nas aulas, estava falando de tudo no passado: eu estudei, quando eu participei de tal projeto… eu comecei a me sentir perigosamente fora da Engenharia Mecânica como ela está ocorrendo agora. Em outras palavras: como todo bom professor, eu queria praticar e pesquisar em paralelo com o ensino – mas eu só ganhava por hora dentro de uma sala de aula.

Eu também comecei a me sentir desolado com a vida de concursos acadêmicos. Participei de alguns, não fui aprovado em nenhum, nem de perto. Sinceramente, comecei a questionar se era isso mesmo que queria, se estava disposto a caminhar nessa jornada de virar professor efetivo (ainda não tenho essa resposta). O que estava claro é que não era atuando a semana inteira como professor substituto que eu ia conseguir mudar isso.

Eu comecei a planejar a possibilidade de participar de algum projeto de pesquisa, ou mesmo de procurar um emprego de engenheiro, e a sorte me lançou as duas coisas ao mesmo tempo: um anúncio de vaga CLT, de Engenheiro, mas em um ambiente de pesquisa, com meus antigos colegas, com o meu orientador de sempre. Apliquei, e consegui.

Não sei o que é do futuro; minha prioridade agora é fazer um bom trabalho neste projeto e honrar a oportunidade dada. Estou trabalhando muito para me atualizar na Engenharia – que era o que eu queria. Estou feliz e animado com os próximos passos.

E você, leitor, teve alguma grande mudança de emprego e vida nesse ano? Quer promover essa mudança? Comente aqui embaixo!

Categories
Artigos

Integridade acadêmica é coisa séria

Como professor recém-retornado às aulas presenciais, eu vejo constantemente alunos e alunas olhando o celular nas aulas. Eu acho ruim, mas não me ofendo. Eu estou lá na frente falando, e não posso forçar ninguém a aprender.

Durante o período de aulas remotas, até pegar bem a melhor maneira de avaliar, também apliquei “provas” online, com questionários cronometrados e questões misturadas, mas eu sabia que os alunos estavam trocando informações pelo WhatsApp (alguns até tiveram coragem de confirmar – anonimamente). Novamente: eu não concordo, mas não posso fazer muita coisa, a não ser utilizar maneiras mais inteligentes de avaliação.

Como professor, eu coloco alunos em primeiro lugar. Recentemente, atendi um aluno sobre uma questão de seu TCC, com o detalhe de que ele não era meu orientando e o trabalho não era da minha área. Como falei, eu procuro ao máximo auxiliar meus estudantes. Eu proporciono horários de atendimento, atendo fora desses horários, não me importo de negociar prazos para entregas de trabalhos, e procuro criar tarefas que realmente estimulem a criatividade e o pensamento analítico, sem a pressa de realizar uma prova.

É por tudo isso que eu tenho tolerância zero para plágios de trabalhos.

Todo semestre eu preciso me estressar com isso, então aqui vai um recado para todos os estudantes que lêem esse blog: copiar um trabalho de outra pessoa e colocar o seu nome é um crime.

Pessoalmente, eu não me importo que alunos e alunas discutam entre si as dificuldades e procedimentos para resolver os trabalhos. Honestamente, acho que, se fizerem isso e depois sentarem para escrever a sua versão, aprenderão bastante. É assim que artigos científicos são escritos. Mas você deve consultar o seu professor para verificar se ele ou ela estão OK com isso.

Mas o que eu não posso admitir é ter de ler 2 trabalhos, com parágrafos e mais parágrafos em comum, figuras idênticas, mas com nomes diferentes. A cereja do bolo: essas pessoas copiam trabalhos de um semestre anterior, não percebem as mudanças que ocorrem entre os enunciados de lá e do presente trabalho, e então entregam um plágio de um trabalho que não foi pedido. Nota zero, automaticamente.

Eu certamente não ajudo esse tipo de estudante em nada ao ter uma memória de elefante e uma cópia organizada de todos os trabalhos já recebidos por mim.

Categories
Artigos

Algoritmo para uma boa aula

Antes da aula:

  1. Estudar os livros da disciplina;
  2. Tomar notas;
  3. Rever apresentações, gráficos, vídeos de semestres anteriores;
  4. Criar o que precisa ser criado;
  5. Ir para a academia pensando em como tornar a aula melhor.

Durante a aula:

  1. Cumprimentar os alunos e alunas;
  2. Revisar a aula anterior;
  3. Começar de leve;
  4. Resolver algum exercício numérico;
  5. Passar outro exercício para alunos tentarem resolver juntos;
  6. Discutir os resultados;
  7. Contar alguma história da minha carreira;
  8. Fazer a chamada.

Após aula:

  1. Tirar dúvidas de quem vier falar comigo;
  2. Fazer upload de todos os materiais no Moodle;
  3. Registar a chamada;
  4. Refletir sobre como melhorar na próxima vez.

Repetir.

Categories
Artigos

Bibliotecas Python essenciais para Engenharia Mecânica

Preciso ainda falar que acredito muito em usar ferramentas computacionais dentro da sala de aula para resolver problemas reais de engenharia?

A minha linguagem de programação é Python, simplesmente porque venho usando há mais de 10 anos (!). Entretanto, algumas bibliotecas são essenciais para o tipo de trabalho que faço, e todas ou já estão disponíveis ou são facilmente instaláveis no pacote Anaconda (pesquise pela documentação sobre como instalá-las):

  1. NumPy – para trabalhar com arrays e matrizes, como ao resolver sistemas de equações lineares
  2. SimPy – para algoritmos de “Cálculo Numérico”: achar raízes e pontos de ótimo, integração numérica, funções especiais (e.g. funções de Bessel, bastante usadas em Transferência de Calor)
  3. pandas – para ler arquivos em tabelas e manipular; é basicamente a funcionalidade do Excel em Python
  4. CoolProp – para calcular propriedades de fluidos
  5. PYroMat – idem acima, mas especificamente para modelos de gases ideais (e propriedades mais relevantes para análise de reações de combustão)
  6. Matplotlib – para gerar gráficos de todas as análises que você vai fazer usando as ferramentas acima

Essas são o conjunto mínimo viável; se você é estudante de Engenharia Mecânica, deve aprender agora a utilizá-las, e o YouTube está cheio de tutoriais (eu aprendi basicamente lendo as documentações e pesquisando como resolver os erros que apareciam).

Como um bônus, vale a pena começar a mergulhar em scikit-learn e estudar um pouco de Aprendizado de Máquina.

Categories
Artigos

Equipamentos que uso para dar aulas presenciais

Há alguns meses, no meio da pandemia e com aulas remotas, eu compartilhei que equipamentos eu usava para ministrar aulas online. A pandemia não acabou, mas a época de aulas remotas sim, então este é um update de como tenho feito agora, em sala de aula.

Eu sou professor de Engenharia; minhas aulas têm muitas equações, muito gráficos, alguns vídeos e fotos de equipamentos. Assim, eu tento equilibrar o uso do quadro negro e o uso de slides; em algumas aulas, eu apenos escrevo e resolvo exercícios no quadro-negro, em outras só discutimos o que aparece nos slides, mas mais comumente equilibramos os dois:

Aliás: eu adoro escrever em giz (muito melhor que caneta)

Para escrever em si, minha universidade fornece o giz, mas para me lembrar do que devo escrever, eu geralmente levo uma cópia dos meus livros-texto, um caderno de anotações e o meu iPad Air 3a geração.

Para projetar slides, fotos e vídeos, uso o meu laptop Samsung com um passador de slides Logitech R400 e um Adaptador USB-C (tipo C) para HDMI e VGA UCA09 da Geonav (algumas salas não têm o projetor de fácil acesso, mas apenas um cabo VGA).

Estudantes: como tem sido a volta das aulas presenciais?

Categories
Artigos

5 livros de engenharia que uso nas minhas disciplinas

Por nenhum motivo em particular, aqui vão os 5 livros básicos que uso para preparar as minhas aulas:

  1. Incropera – Fundamentos de Transferência de Calor e de Massa – a maior referência; mostra todos os tópicos relevantes (e que aparecem na prática de projetos reais), desenvolve a teoria com rigor, e mescla exercícios leves e pesados. Um clássico justificado.
  2. Termodinâmica de Çengel e Boles – já falei sobre esse autor aqui, que escreve livros super didáticos mas levemente fáceis. O livro de Termodinâmica, porém, é bastante completo e tem exercícios mais avançados que os das outras disciplinas. Uso como referência sempre que quero desenvolver melhor algum tópico mais “básico” nas minhas disciplinas mais aplicadas.
  3. Motores de Combustão Interna de Franco Brunetti – bastante mal escrita, notação confusa, exercícios errados… mas um livro texto muito atualizado sobre motores e que engloba muitos tópicos importantes. Eu costumo complementar a discussão teórica com exemplos e explicações do livro do Çengel e acima e com o maravilhoso Internal Combustion Engine Fundamentals do Heywood (mas a edição que tenho é bastante antiga)
  4. Refrigeração e Ar Condicionado de Stoecker e Jones – esta é um problema; o livro é muito bom, une teoria e prática, mas preciso desesperadamente achar um livro de refrigeração atualizado (os fluidos discutidos neste livro nem podem ser mais usados, por exemplo)
  5. Geração de Vapor do Bazzo – o único livro-texto sobre o assunto; sério: para preparar a minha disciplina eu pesquisei ementas de disciplinas similares em todo o Brasil e todas usam esta bibliografia. Existem outros livros, mas são de referência e não para ensino. Apesar de antigo, não chega a ser desatualizado e é muito bom e completo.