O que é o pensamento histórico e como ele me ajuda a programar
Fala, galera. Escrevi um conteúdo no Medium e resolvi compartilhar com vocês aqui também. Pra quem quiser conferir o artigo na forma original, com algumas imagens que criei pra facilitar a compreensão da ideia e uma formatação mais agradável (pelo menos aos meus olhos), podem olhar neste link: https://igorstefano.medium.com/o-que-%C3%A9-o-pensamento-hist%C3%B3rico-e-como-ele-me-ajuda-a-programar-ec70700a440a. O corpo do texto está na íntegra abaixo. Valeu!
Às vezes me perguntam como eu pude sair da área das humanidades e mergulhar em uma área supostamente tão distinta como a programação. A resposta curta é: “acredite se quiser, mas muitas habilidades necessárias para ser um historiador são igualmente valiosas na programação”.
Admito que essa resposta acaba criando mais perguntas do que responde, então fica esse artigo para explorar a ponte entre o que a maioria das pessoas em ambas áreas vê como duas ilhas de conhecimento. Acredito que essa confusão tem origem na associação que as pessoas fazem da graduação de História com a licenciatura; a parte de pesquisa histórica não é muito visível para quem está do lado de fora.
Para quem não me conhece, meu nome é Igor, hoje sou desenvolvedor, mas antes disso me formei como bacharel e licenciado em História. Nas próximas linhas, vou falar o que senti na minha transição de carreira e o que vejo no dia-a-dia a respeito de pesquisa, comunicação e um conceito chamado pensamento histórico, e como cada competência interage num modelo mental que pode ser replicado para ambos os campos.
Soft Skills?
Um termo que está sempre em voga na área tech é o de soft skills, que poderíamos definir como habilidades não-técnicas que tornam nosso trabalho mais organizado e produtivo além de facilitar nossa convivência e o trabalho em grupo. Esse nome anglicizado não contaminou (até onde estou ciente) os historiadores, e um dos motivos para isso, me parece ser, que algumas coisas que são consideradas soft skills para devs são hard skills para trabalhar com pesquisa histórica.
Abaixo vou discutir no que se traduz cada habilidade do modelo mental, e da aplicação geral para cada uma das áreas. Vamos começar com uma que está no limiar entre soft e hard skill para programadores, mas que é indispensável para qualquer historiador que se preze.
Pesquisa
A habilidade de pesquisar - entenda-se, extrair informações com eficiência, embasar argumentos e/ou solidificar conhecimento - é importante para qualquer desenvolvedor, mas é crucial para um historiador.
Podemos expressar assim: enquanto um desenvolvedor experiente, dominando a linguagem e o problema, pode entregar um produto razoável sem novas pesquisas, para um historiador, isso é impossível. Um (bom) trabalho histórico exige montes e montes de pesquisa, entrar em contato com diversos pontos de vista sobre um mesmo assunto antes de escrever sobre o seu próprio. Ao longo deste processo, um bom historiador irá elencar internamente (em sua mente ou em suas anotações) os possíveis caminhos que sua pesquisa pode traçar.
Aproveito a oportunidade para lembrar que, uma vez que a maioria dos programadores não trabalha em projetos já resolvidos, a pesquisa acaba se tornando parte muito importante nessa área também. Muitas vezes, precisamos aprender mais sobre como os nossos sistemas funcionam por debaixo dos panos para resolver problemas incomuns, ou, ainda, quando estamos em início de carreira ou recentemente embarcamos em um novo projeto, faz muita diferença aprender como tudo funciona.
A reclamação principal sobre profissionais júnior vem daqueles que não têm a autonomia de pesquisar e tentar resolver problemas antes de pedir ajuda. Esse é o motivo que me leva a entender essa como uma habilidade no limiar entre as hard e soft skills para os programadores.
Comunicação
Vou classificar aqui a capacidade de comunicação como o conjunto de duas competências relacionadas mas distintas: comunicação verbal e comunicação escrita. Entenda a primeira como a competência usada ao conversar de maneira síncrona com pares e lideranças, ao passo que a segunda é usada em comunicações assíncronas (para desenvolvedores: e-mails, mensagens no Slack, escrita de documentação…).
Para quem está imerso no mundo da tecnologia, a ideia de melhorar a comunicação é amplamente discutida. Para falar a verdade, essa habilidade é vista como o supra-sumo das soft skills, exceto, em certos pontos de vista, pela aplicação ao escrever documentação, uma habilidade cuja valorização varia de acordo com o ambiente.
Pelo motivo que for, existe o clichê do “programador antissocial”, que só pensa em código, não sabendo conviver, quiçá conversar com outros seres humanos. Pode ter sido real algum dia, mas hoje é balela. A imensa maioria dos projetos de hoje é desenvolvida em equipe, então a capacidade de comunicação não é mais opcional. Ainda assim, não é uma coisa priorizada por indivíduos quando estudam para entrar na área e nem por instituições de ensino ao formar pessoas.
Uma boa comunicação é mais do que um jogo de combinação de palavras. É a capacidade de diminuir ao máximo possível o vão entre o que é dito por uma parte e o que é entendido pela outra. Na contramão do que é feito na área de tecnologia, na formação do historiador, a comunicação tem a maior prioridade possível. Além de provas escritas, outras avaliações comuns são seminários e monografias, que exploram a capacidade do aluno de comunicar ideias tanto de maneira verbal quanto escrita de maneira clara e embasada. E, claro, para um indivíduo que se forma e trabalha com pesquisa, esses conhecimentos continuam fazendo parte do dia-a-dia.
Pensamento histórico
Com esses dois conceitos, admitidamente mais comuns, fora do caminho, quero me voltar ao que vai ser novidade para a maioria dos que leem esse artigo e até nos traz o título do mesmo. Afinal, o que é pensamento histórico? E como diabos um conceito de humanas pode ajudar qualquer pessoa a programar? Pode vir como uma surpresa o meu ponto de vista: acho que bons desenvolvedores instintivamente desenvolvem pensamento histórico. Para explicar por que penso assim, vou explicar o que entendo por essa ideia e como ela se aplica na área de história.
Devo ser transparente e dizer que não existe um único conceito universal sobre o que poderia ser o pensamento histórico. Porém, posso trazer o conceito que ficou imbuído em mim, que seria o seguinte: a capacidade de organizar uma série de eventos cronologicamente, relacionando-os em diversas camadas a partir disso. Para o historiador, o pensamento histórico é uma soft skill que o impede de cair em contradições causadas por anacronismos (o equivalente da área a dividir por zero).
Toda pesquisa histórica busca responder alguma pergunta. Para respondê-la, um historiador vai interpretar o conhecimento que possui dos eventos naquele momento histórico, estabelecendo relações entre esses eventos. O evento A pode ter uma influência direta no evento B, que por sua vez indiretamente influenciou um evento C. A capacidade de abstrair essa linha do tempo é indispensável para uma leitura e interpretação válida nessa pesquisa.
Um desenvolvedor que ler o parágrafo anterior pode não entender como isso se aplica a ele. Vamos abstrair novamente essa habilidade, agora no que eu vejo como o ponto de vista de um bom desenvolvedor.
Todo programa gera, no sua compilação ou execução, uma linha do tempo. Um bom desenvolvedor tem a capacidade de entender como cada evento que forma essa linha do tempo interage um com o outro. A única diferença é: nós programadores temos algum grau de controle de como essa linha do tempo será formada.
Considere por um momento como são as nossas técnicas mais comuns para debugar o código: breakpoints num debugger ou print statements e similares. Em geral, nós tentamos entender como o que escrevemos está sendo interpretado, por quais caminhos o código passa e por quais precisa passar para que a lógica que estamos mirando se concretize.
Em geral, uma boa capacidade de pensamento histórico vai se traduzir, para um desenvolvedor, em depurações mais eficientes, bem como uma facilidade maior para arquiteturar soluções complexas, por ser capaz de pensar com antecedência a jornada que o programa - ou um usuário - vai realizar.
Modelo Mental
Nesta seção, vamos explorar brevemente qual é o modelo mental que me referi na introdução do artigo. Pensando num fluxo de trabalho de um historiador: considerando que já exista uma pergunta que precise ser respondida, ele deverá pesquisar - descobrir fontes, estatísticas, ler trabalhos de outros historiadores sobre o mesmo assunto - antes de escrever.
Ao escrever, precisará da crítica de um orientador ou de seus pares para melhorar o trabalho. Recebendo esse feedback, ele retorna à pesquisa e à escrita. Esse ciclo se repete até a conclusão deste trabalho. O pensamento histórico será aplicado na etapa de pesquisa e da escrita, garantindo a validade do que está sendo desenvolvido.
Modelo Mental - Historiador
Análise → Pesquisa → Escrita → Feedback → Pesquisa/Escrita (...) → Finalização
Comparativamente, um desenvolvedor pode ter um fluxo de trabalho muito parecido ao desenvolver uma feature. Sabendo o estado atual do sistema e qual é o estado desejado, ele irá pensar em como partir de um estado a outro, aproveitando o conhecimento que possui sobre a solução existente para pensar na melhor maneira de adaptá-la; você poderia pensar nisso da seguinte maneira (e já aplicando o pensamento histórico): que momento na linha do tempo do sistema precisa ser alterado?
Após desenhada a solução, partimos para a escrita do código, que posteriormente passará por um code review na maioria das empresas. Ao longo do processo de escrita, o programador pode precisar pesquisar por diversas informações, seja sintaxe da linguagem, seja soluções para problemas comuns. Dependendo do escopo da alteração, esse processo pode ser finalizado aqui ou se repetir.
Modelo Mental - Desenvolvedor
Análise → Pesquisa/Escrita → Feedback → Pesquisa/Escrita (...) → Finalização
Conclusão
Escrevi esse texto para que ficasse claro por que eu acho que existe uma relação mais próxima do que a maioria das pessoas acredita entre as ciências humanas e o desenvolvimento de software. Ao menos, uma intersecção grande o bastante para que a barreira entre ambas não seja intransponível. Isso dito, quero deixar claro que não é da minha pretensão dizer que qualquer pessoa que vem de uma área pode facilmente adentrar a outra.
No mais, agradeço pela sua leitura. Se tiver algum comentário, crítica ou sugestão, pode deixar aí embaixo. E também te deixo uma pergunta: como é o seu modelo mental ao abordar um problema?
Valeu!