Como você se apresenta em uma conversa: “sou programador” ou “sou desenvolvedor rails”? Como você se relaciona com as ferramentas que utiliza? A princípio, podem parecer a mesma coisa, ou até, uma distinção inútil, mas carrega um sentido profundo.
A primeira linguagem, framework, ambiente, é sempre difícil. Começar normalmente dói. E por isso, nos tornamos adoradores das ferramentas as quais temos os primeiros contatos. Se aprendi primeiro PHP, me torno um defensor ferrenho de PHP, mesmo quando os defeitos estão claros na frente de todos. Não estou julgando, não se preocupe, estamos no mesmo barco :). Isso é totalmente normal e compreensível, afinal, não foi fácil atravessar as barreiras, chegou a hora de colher os frutos, né?
No geral, isso não é um problema, muita gente vai passar uma boa parte da carreira fazendo coisas muito parecidas (talvez usando frameworks diferentes mas muito próximos, ou apenas novas versões do mesmo, por exemplo), e é normal. Por mais animados que ficamos com cada novo lançamento, cada nova plataforma, o mundo dos negócios não é assim. Não podemos mudar de ferramenta todo mês. Não podemos refazer a aplicação de 12 anos, que atende o negócio, só por que existe uma lib “melhor”.
Mas eventualmente acontece. Começamos novos projetos, mudamos de lugar, a empresa evolui, e nos encontramos em um ambiente totalmente diferente. É muito cômodo voltar aos padrões de sempre. A grande velocidade no início do desenvolvimento pode parecer um grande benefício, já que você sabe onde tudo está, como usar o que você precisa e entregar.
No entanto, muitas vezes esquecemos que cada projeto é um projeto (o que é particularmente comum em estimativas: “quanto tempo você demorou quando fez uma tarefa parecida?”). O que era funcional, e talvez até a solução ótima para o antigo projeto, não é para o novo. E só vamos perceber isso lá na frente, depois de muito trabalho feito. Por isso é muito importante aprender mais sobre as ferramentas, conhecer as entranhas do framework, entender as decisões dos desenvolvedores e tomar uma decisão consciente.
Muitas vezes esquecemos do que rotineiramente utilizamos. Qual foi a última vez que você leu a implementação do seu container? E da sua ORM? Você já implementou um roteador HTTP? Pode parecer desperdício, ou até desnecessário, já que talvez essas técnicas logo vão ser antiquadas e esquecidas. Sim, concordo. Mas o conhecimento continua. A técnica pode ser antiquada, mas você sabe por quê? Você sabe quais as diferenças na prática ou só ouviu falar?
Pode não ser muito prático para todos implementar um webserver (como apache ou nginx), um sistema operacional, ou um banco de dados. Mas por que não fazer pelo menos com a camada mais próxima de você? Apesar do conselho bem conhecido “não use um framework próprio em um projeto de produção”, que eu concordo, não existe razão para você não escrevê-lo.
Escrevi incontáveis frameworks e libraries, sobre muitos pontos os quais eu utilizava. Nenhum deles foi para a produção, e eu nunca quis que fossem. Mas todos foram extremamentes para que eu aprendesse as nuances, as diferenças entre as opções, e inclusive, para me tornar agnóstico a eles, não sendo um defensor ferrenho de nenhum, mas entendendo que ferramentas são ferramentas, não religião.