Como eu fui de C ++ para Python: uma mudança conceitual

asya f Blocked Unblock Seguir Seguindo 10 de janeiro Foto por Pop & Zebra no Unsplash

Introdução

As pessoas dizem que codificar em Python é tão fácil que até uma criança de 6 anos pode fazê-lo. Esse foi o pensamento que eu tinha em mente quando comecei a codificar em Python no trabalho. Eu tinha sido um desenvolvedor de software em tempo integral por 4 anos na época, escrevendo principalmente em C ++ no Linux, usando intensamente a biblioteca QT. No entanto, escrevi um código Python ruim no começo.

Já faz 3 anos desde que fiz essa mudança e acho que é um bom momento para resumir o progresso que fiz durante esse tempo. Ao olhar para trás, não mudei apenas a minha linguagem de programação principal, mas também mudei o meu ambiente de trabalho e a forma como penso no código.

Não vou entrar nos detalhes e diferenças entre C ++ e Python, pois há inúmeros recursos on-line , mas descreverei minha própria experiência. Espero que este post seja útil para pessoas que estão passando pela mesma transição que eu.

Saltando de C ++ para Python (Foto por Erik Dungan em Unsplash )

C ++ está mergulhando, Python está mergulhando

O C ++ parece mergulhar nos mistérios mágicos do mar – é lindo, mas requer mais aprendizado e prática, e no geral, a distância que você percorre não é tão grande assim. Python é um pouco como snorkeling – você vê a beleza assim que você enfia a cabeça na água, mas não sobe muito mais. Você continua nadando em águas rasas e pode percorrer uma longa distância com facilidade. A partir dessa descrição, fica claro que cada um desses idiomas deve ser usado no lugar e na hora certos.

Mergulhando no C ++ e sobrevivendo

C ++ é mais rigoroso e penaliza mais duramente seus erros. Não é uma sessão de codificação efetiva se você não recebeu uma falha de segmentação surpreendente pelo menos uma vez. Portanto, requer uma compreensão mais profunda do computador, do compilador e da linguagem. Quando você vai mais fundo, você pode realmente ver e ficar impressionado com coisas bonitas, como o processo de compilação e gerenciamento de memória.

Como programador C ++, eu me importava mais com ajustes de sintaxe e exemplos estranhos. Eu sempre soube onde eu aloquei memória e como eu estava lançando isso. Os programas que escrevi eram mais independentes, pois preferia saber o que estava acontecendo dentro do meu código. A idéia principal era que o código que alguém escreveu era menos confiável, mais propenso a erros e poderia aumentar seu uso de memória.

Minhas principais ferramentas do dia-a-dia eram o Vim com inúmeros plugins para escrever código, GDB para depuração e Valgrind para analisar meu uso de memória e erros. Eu compilei com o g ++ e escrevi meus próprios Makefiles . Naquela época, eu não achava que uma IDE me beneficiaria, mas preferiria desacelerar as coisas e me fazer perder contato com meu código. Em retrospecto, confiei muito no compilador para encontrar meus erros de tipo .

Foto de Jakob Boman no Unsplash

Natação superficial em Python

Uma das primeiras coisas que você precisa aprender ao migrar para o Python é como deixar ir – você não sabe o que está acontecendo, onde a memória é alocada e liberada, e está tudo bem. Você também é encorajado a usar o código que foi escrito por outras pessoas, compactado em bibliotecas, pois economiza seu tempo e ajuda você a codificar mais rápido. Isso não significa que você precisa escrever um código que seja lento e confie em bibliotecas não-funcionais e não-funcionais, mas o foco é definitivamente diferente.

Quando comecei a codificar em Python, escrevi primeiro o código C ++ em Python. Funcionou, mas eu não obtive nenhum benefício da linguagem. Minha codificação melhorou quando comecei a escrever de uma maneira mais “Pythonica” e comecei a usar bibliotecas e conceitos mais avançados, como geradores , decoradores e contextos .

Como desenvolvedor de Python, tenho a tendência de procurar primeiro pela biblioteca que resolve o problema em questão. O Python tem um ecossistema e uma comunidade de bibliotecas ricas que o suportam. Existem bibliotecas para fazer praticamente qualquer coisa. Aqui estão alguns úteis que eu uso diariamente: NumPy para cálculos numéricos, OpenCV para visão computacional, json para ler arquivos json, SciPy para cálculos científicos, sqlite3 para bancos de dados.

Minha ferramenta diária é o PyCharm (sim, um IDE) com o plugin IdeaVim . Eu comecei a usá-lo principalmente devido ao fato de que é um depurador poderoso, que é muito mais amigável do que o depurador padrão do Python, pdb . Eu também uso pip para instalar bibliotecas que eu preciso. Eu não monitore meu uso de memória a menos que eu realmente precise.

Foto por Channey em Unsplash

Algumas dicas práticas

Se você é um desenvolvedor de C ++ e considera começar a codificar em Python, aqui estão os meus conselhos para você:

  • Livrar-se de velhos hábitos – Pare de usar o compilador C ++ como um depurador. Não otimize demais o uso da memória. Evite escrever código semelhante ao C ++. E por todos os meios, tente não confiar em tipos.
  • Obter novos hábitos – Comece a usar bibliotecas. Escreva código Pythonic (mas não exagere). Mantenha as coisas legíveis. Use conceitos mais complexos, como geradores / decoradores / contextos. Experimente o PyCharm.
  • Use bibliotecas comuns de C ++ e Python – Algumas bibliotecas C ++, como OpenCV e QT, possuem uma interface Python. É fácil começar a usar a mesma biblioteca no Python em vez de aprender uma nova biblioteca do zero.
  • Não esqueça suas origens – às vezes o Python é muito lento ou não é ideal para a tarefa. É quando o seu conhecimento em C ++ entra em ação. Existem muitas maneiras ( SIP , ctypes etc) de usar o código C ++ dentro do Python.

Linha de fundo

Não importa o que as outras pessoas digam, mudar para uma linguagem de programação diferente, especialmente para uma linguagem que é fundamentalmente diferente da que você está acostumado, não é fácil. Aproveite o tempo para aprender, cavar, descobrir. Mas o mais importante, entenda que não apenas a linguagem deve mudar, mas também seu estilo de codificação e metodologia de trabalho.

Boa sorte!