Faculdade ou estudo autoditada? Uma discussdão raza.
Frenquentemente vejo em podcasts, anúncios de cursos relacionados à área ou vídeos sobre o tema, discutirem se faculdade é necessária ou não para a programação. O problema é que as conclusões tomam como "programar" o desenvolvimento mobile ou web (os mais famosos atualmente na área tech) e esquecem as demais áreas. Então, nesse post irei dicutir sobre a pergunta, levando em consideração à Engenharia da Computação e Ciência da Computação como um todo.
Primeiramente, não podemos negar que grande parte dos Devs iniciam na área pensando no desenvolvimento WEB/Mobile. O que é natural, uma vez que utilizamos nossos celulares o dia inteiro e passamos horas em aplicações como YouTube, Twitch e Netflix. A vontade de criar essas aplicações surgem de forma natural. E, de fato! Muitos dos conceitos necessários para front/back conseguimos aprender sem um grande background multidisciplinar (no próximo parágrafo ficará claro o que quero dizer com "background multidisciplinar"). Portanto, apesar de ser importante entender como o computador está processando a sua aplicação, o background exigido para começar seus estudos é pequeno, logo, é tranquilo traçar um plano de estudos dessas tecnologias só com a linguagem e o framework que deseja aprender.
Entretanto, existem algumas áreas na tecnologia que, para começar, é necessário um background multidiscplinar maior que é difícil obter sozinho. E é nessas áreas que a faculdade começa a se tornar uma mão na roda. Quando falamos de Computer Graphics, Computer Vision, Machine Learning (e suas téncias como Reinforcement Learning e Deep Learning), Physics Simulations, estamos falando sobre modelos matemáticos renderizados por um computador para atingir um objetivo. Essas áreas demandam um profundo entendimento de Cálculo Diferencial, Métodos Números Computacionais (ou Cálculo Numérico, pode estar escrito no cronograma assim também), Cálculo Vetorial, Geometria Analítica, Álgebra Linear, Equações Diferencias, Teoria de Controle e, por ai vai. Outras áreas derivadas destas como Desenvolvimento de Jogos AAA ou Robótica, utilizam estas ténicas no seu limite para gerar produtos fora da curva. É claro que é possível estudar sozinho e aprender tudo isso por conta própria. Porém, é um caminho árduo que talvez leve um tempo longo para você se desenvolver. Fora que, qualquer dúvida ou maturidade para saber o que estudar e o que pular, você não terá assistência de um professor na área, que pode te auxiliar.
Diante disso, responder esta pergunta com um sim ou um não é muito razo. Isso porque é necessário saber se você possui uma base sólida, que te permita estudar conceitos complexos sozinho. Caso você deseja entrar nas áreas citadas no parágrafo 2, é necessário uma base matemática muito bem construída e uma capacidade de absorção em conceitos complexos e abstratos grande também (uma vez que você não terá um professor para tirar suas dúvidas). Não acredite em gurus ou vendedores quaisquer de cursos. Pesquise muito bem a área e trace seu cronograma de estudos baseado nos conteúdos necessários para você se desenvolver nela. E, claro, se você tiver dúvidas, um bom curso de CS vai te servir para criar uma base que permita você estudar qualquer outra tecnologia.