Na Invillia, toda quarta-feira, ao meio dia, paramos uma hora para nos nutrir com as dicas, how-tos, boas práticas e tendências selecionadas por nossos especialistas em Product, Agile, Back e Front, Mobile, Quality, Security e Data. Uma troca de experiências e espaço de conexão vital para quem adora o novo. E essencial para que a inovação nunca pare. Se a tecnologia está no sangue, a gente faz questão de deixá-la circulando cada vez mais_
NA VEIA_ Programação universal: versatilidade nas linguagens para diferentes técnicas, necessidades e soluções.
7 minutos de leitura
No artigo de hoje, compartilhamos os principais aprendizados da incrível edição sobre programação universal, apresentada por Alexnaldo Carvalho dos Santos, nosso especialista no assunto.
O que é ser programador universal?
Novas linguagens de programação surgem a cada dois anos, e com isso – nova sintaxe e suas dificuldades –, é comum se perguntar qual linguagem deve-se realmente utilizar para se tornar um especialista e trabalhar no dia a dia com programação?
A ideia do programador universal se refere à capacidade do profissional escolher livremente uma linguagem dentro de uma diversidade de opções, ou seja, utilizar um mecanismo mais adequado para a resolução de um determinado problema. Isso porque, quando acreditamos que somente uma linguagem pode resolver tudo evidentemente só será possível chegar ao mesmo tipo de resultado. Além disso, as diferentes linguagens trazem novos conhecimentos, oferecendo a possibilidade de se trabalhar com muitas opções.
Quem programa em uma só linguagem encontra quantas soluções?
Há um modelo de programador tradicional que se sente mais confortável com determinada linguagem e que não deseja fazer este “job rotation” porque acredita que vai ter que aprender muito para trabalhar com nova linguagem. Entretanto, quando se trabalha com uma só linguagem, perde-se oportunidades de ingressar em um novo trabalho ou projeto, limitando e restringindo sua capacidade de atuação e evolução.
É possível, no entanto, mudar de linguagem com segurança quando o programador tradicional tem uma visão da sintaxe daquela linguagem porque o programador universal pensa de um modo diferente: ele pensa muito mais nos conceitos envolvidos no processo do que na sintaxe em si, ou seja, utiliza a sintaxe como meio e não como um fim.
O que se aprende primeiro: lógica de programação ou linguagem de programação?
Evidentemente que aprendemos alguns conceitos ao mesmo tempo mas, normalmente, a ordem é aprender primeiro a lógica de programação e, em seguida, a linguagem, ou seja, primeiro o conceito e depois a prática.
Há diversas formas de resolver o mesmo problema se possuirmos diversas possibilidades de ação. Por isso, é aconselhável que o programador dê um passo atrás e tente voltar ao modelo inicial para entender o processo, percebendo que as diferentes linguagens têm muito mais em comum do que se supõe.
A lógica de programação é a capacidade de pensar na solução de um problema, sendo que a linguagem de programação é a ferramenta utilizada para resolvê-lo. Se misturar as duas coisas, não será possível discernir quando se está pensando e quando está utilizando somente a sintaxe da linguagem. Isso porque, muitas vezes, quando se passa muito tempo em determinado projeto utilizando só uma linguagem, a tendência é resolver a solução com aquilo que já está à sua disposição (o que está pronto).
No entanto, ao se tornar um programador sênior ou especialista, e tomar decisões sobre arquitetura e linguagem, o programador com o vício de acreditar que sua linguagem vai resolver todo o tipo de problema pode cair numa “cilada”. Afinal, quando estamos acostumados com determinada arquitetura e plataforma, somos “tendenciosos” a utilizá-las, levando até mais tempo para o desenvolvimento, pois ela pode não ser a mais rápida ou a mais eficaz.
Por isso, conhecer mais de uma linguagem, ajuda a tomar melhores decisões para a solução de problemas, além de ajudar a entender que, na linguagem que normalmente não se trabalha, já existe uma solução que só precisa de adaptação.
A ideia da universalidade é que se consiga analisar a situação, o problema e pesquisar a situação para encontrar a solução em outra linguagem. Retirar a visão de que se deve programar e ser especialista em apenas uma linguagem, pois o mercado está diversificado e exigente e, inevitavelmente, em algum momento será necessário aprender nova linguagem, sem o receio de migrar.
Este “job rotation” portanto, estimula o conhecimento para o raciocínio com relação aos problemas para a obtenção da solução, afinal se a lógica de programação é fraca, pouco importa a linguagem que se utilize, o programador vira mero espectador do fascinante mundo da programação.
Preocupações do programador
Neste universo, há dois tipos de preocupações: a preocupação do programador tradicional focada na sintaxe (o programador tradicional acredita que conhecer profundamente a sintaxe da linguagem é a solução de todos os seus problemas) e a preocupação do programador universal com foco no conceito (o programador universal está preocupado com conceitos para o desenvolvimento da linguagem).
De que adianta, afinal, ter um dicionário com todas as técnicas para se criar uma função ou classe e não saber distinguir conceitualmente as suas utilizações?
A programação está muito mais relacionada ao conceito, sendo que a linguagem é apenas um meio para aplicação e solução. Além disso, as linguagens são mais parecidas do que se imagina e o desafio é comparar a sintaxe entre duas linguagens para fazer a portabilidade.
Na prática, muitas diferenças nas linguagens de programação existem para facilmente adaptá-las às plataformas-destino e algumas para “fisgar” o programador, o que significa que muitos conceitos aplicados na linguagem são para facilitar a sua funcionalidade/prática, ou seja, apesar da sintaxe não ser a mesma em todas as linguagens, o conceito por trás é fiel com algumas mudanças e formas de implementação.
Portanto, pouco importa a linguagem que se vai utilizar, é necessário somente buscar na linguagem aquela sintaxe, como implementá-la e resolver determinado problema naquela linguagem.
Assim, ao entender o significado e proposta, fica mais fácil compreender o que muda entre as linguagens e como os conceitos são aplicados distintamente, se tornando um programador universal, ao invés de simplesmente utilizá-las indiscriminadamente.
Quais são os pré-requisitos para se tornar um programador universal?
Primeiro focar no conceito e esquecer um pouco da sintaxe, afinal, a sintaxe é o meio, a ferramenta e não é o seu fim. O que há de sólido no aprendizado de programação é o conceito de programação, pois em qualquer linguagem, é possível migrar de projeto – com conceitos parecidos, mas implementações distintas. Quando se busca soluções pelo conceito, é necessário saber pesquisar: mesma estrada com características diferentes.
Fundamentos de um programador universal
Para se tornar um programador universal é fundamental: fortalecer os conceitos de lógica de programação, sabendo diferenciar variáveis por valor e por referência, nomeando conceitos e funções independentemente da linguagem; dominar as estruturas de dados (lista, pilha, fila, árvore binária, lista encadeada etc.); dominar os operadores lógicos AND, OR, NOT e suas precedências; dominar os controles de fluxos (IF, ELSE, SWITCH); dominar os laços de repetição (FOR, WHILE, REPEAT); e dominar o conceito de funções.
Dentro destes fundamentos, também é imprescindível dominar a principal arquitetura de sistemas (ou seja, entender como o SOLID funciona e quais são seus benefícios); dominar os 4 pilares da programação orientada a objetos (dentre as quais abstração, encapsulamento, herança e polimorfismo); conhecer padrões de projetos (GOF – Singleton, Memento, Facade, Proxy etc.) e dominar a prática de testes unitários e instrumentais.
Alternar a linguagem não te torna um exímio programador porque não existe aprofundamento na sintaxe, mas à medida que se começa a desenvolver num projeto novo, em 30 ou 60 dias é possível desenvolver bastante conhecimento, dado que a sintaxe de toda a linguagem é fixa e limitada e a proposta vai alternar a sua capacidade de solução de problemas.
Como aprender outra linguagem de programação
Para virar um programador universal e se fortalecer é necessário comparar na linguagem destino a sintaxe dos comandos similares, ou seja: o que você já conhece na linguagem A tente aplicar na linguagem B notando suas semelhanças.
Além disso, é importante pesquisar, fazendo um “overview” dos principais elementos da plataforma-destino para entender quais problemas a plataforma busca resolver e quais tipos de projetos são criados.
Também é necessário observar o código-fonte de algum projeto na linguagem para se familiarizar com os conceitos, e treinar essas questões de sintaxe que mudam, mas são pontuais, ajudando a solidificar o conhecimento.
Cuidado com as armadilhas!
É importante saber diferenciar a sintaxe exclusiva da linguagem, percebendo o que elas têm em comum e o que possuem de diferencial, visando facilitar o desenvolvimento e sua implementação, afinal ninguém quer “reinventar a roda”, a menos que este seja o objetivo. Um código pode ser complexo, mesmo de origem confiável, por isso, se você souber fazer do modo mais simples, faça! A busca pelo conhecimento nos torna críticos em três dicas:
- Antes de começar a programar, já tenha a solução lógica em mente (como resolver aquele problema?);
- A linguagem de programação é o meio para resolver um problema, e não o fim (aprender tudo sobre sintaxe não é pensar em resolver problemas!);
- Programação é uma maratona e não uma corrida de 100 m.