A importância de um bom ambiente de desenvolvimento. Algumas dicas

Todos os programadores já passaram por diversas situações durante a sua carreira. Por vezes, existe muita complexidade em utilizar determinadas ferramentas. Para exemplificar, o Node.js não funciona, não deteta, o Docker não funciona. "Na minha máquina não funciona e na máquina do meu vizinho funciona." Muitos dos problemas podem ser derivados de más configurações do sistema e do ambiente de desenvolvimento.
Quem nunca usou o Powershell para escrever comandos no Windows que atire a primeira pedra. Não é errado o fazer, mas será que é assim muito prático ? É a questão que quem vai configurar o ambiente deve refletir.
Esta situação pode ter duas visões distintas.
Considere este exemplo:
Uma empresa utiliza para desenvolvimento um ambiente Windows Server 2019, com Node.js e MongoDB. Um programador que não tem muitos conhecimentos e que trabalhou com ambientes Open Source ou Linux vai achar um ambiente um bocado estranho, mas a vida é mesmo assim. Ele tem que se adaptar. É o primeiro dia de trabalho e tem de configurar o seu ambiente de desenvolvimento. Ele segue as instruções da empresa e tenta instalar as dependências e depara-se com um erro não documentado pela empresa. As dependências pedem-lhe o Visual Studio 2017 e o Python para compilar o sistema. Ele comunica à empresa que está com dificuldades em configurar e pede suporte. A empresa fica surpreendida porque tal não tinha acontecido antes. Então toca a instalar o que falta e instalação concluida.
Estas situações devem ser documentadas e comunicadas para quem na próxima vez for instalar repetir os mesmos passos.
Este exemplo é para demonstrar que por vezes somos colocados a ambientes de desenvolvimento pela própria empresa. O primeiro dia de trabalho é duro e demora muito tempo para meter as coisas direitas. 
Pense sobre isto. Será que existe uma maneira de configurar isto sem estar a perder tempo com instalações ? A resposta é sim, existe. Usando o Docker.
A empresa define um conjunto de dependências necessárias para o sistema funcionar. As dependências necessárias podem ser distribuídas pela empresa através de uma imagem do Docker e o programador pode a criar a partir da imagem da empresa em que exporta um volume para a diretoria onde será desenvolvido o software. O programador poderá então desenvolver o sistema dentro de um container pré-configurado pela empresa e não haverá problemas de compilação das dependências e sem necessidade de instalar software extra.
Isso poupa bastante trabalho e torna o computador em que se está a desenvolver mais leve e limpo. Imagine-se, 2 horas à espera da instalação do Visual Studio 2017. Dá para ir tomar um café, ver uns vídeos no YouTube. Pelo Docker isso seria simplificado e se calhar esperava-se menos tempo. O tempo que ele perde a configurar, se essa imagem do Docker existisse, tornava as coisas muito fáceis.
Agora considere a faceta pessoal.
Um programador está a desenvolver uma API para si próprio. Como não se encontra numa empresa, ele pode escolher as ferramentas, pode escolher a linguagem e o ambiente que se sente mais à vontade. Portanto, ele tem poder de escolha. O ambiente de desenvolvimento varia de sistema operativo para sistema operativo. Há quem prefira Windows, há quem prefira Linux, há quem prefira MacOS.
Normalmente o que é visto, é programadores a usarem ambiente Linux. O Linux e o MacOS nesse aspeto é favorável. Eles andam muito próximos.
Mas quando se fala em Windows já é diferente. Normalmente pode-se instalar uma máquina virtual Linux e desenvolver, mas existe um atalho. O "Windows Subsystem for Linux" (WSL). O Windows permite correr comandos Linux através desta ferramenta acabando por criar um par perfeito para desenvolvimento. Instala-se o Ubuntu e toca a andar de mota. Espere, não é assim como parece. É preciso instalar o Node.js mas a versão que o apt dá é depreciada e as ferramentas de agora não funcionam nessa versão. E agora ?
Agora, é necessário arranjar uma maneira de instalar o Node. Descobrindo as maneiras diferentes o objetivo está concluido.
"Ontem funcionou e agora não funciona".
Provavelmente são as variáveis de ambiente e têm sempre que o WSL é configurado de serem configuradas.
E agora ?
Há terminais personalizáveis como por exemplo o Oh My Zsh em que se pode instalar plugins e modificar ao nosso gosto. Nesses casos é recomendado usar este terminal, porque permite integrar várias ferramentas diferentes como por exempo o gestor de pacotes "asdf".  Com ele, consegue-se criar ambientes por projeto, ou seja o Node.js que é utilizado num projeto pode ser diferente do Node.js usado noutro projeto. Quem diz Node.js diz Python por exemplo. Desta forma resolve-se o problema do Node.js. Quanto o Docker, a solução vai depender do sistema operativo utilizado. Mas integrar o Docker no ambiente é bom porque permite subir uma base de dados customizada sem necessidade de instalar o SGBD. Desta forma o ambiente de desenvovimento torna-se quase perfeito.
Para concluir, o ambiente de desenvolvimento por vezes pode ser imposto pela empresa em que se trabalha mas para projetos de cunho pessoal, é um ambiente à escolha do programador. Não precisa de ser de uma determinada forma. Pode ser ao gosto.

Referência utilizada:

Vídeo da Full Cycle: 

https://www.youtube.com/live/btCf40ax0WU?si=dJBxs09i0J-fDMP_