Oddbean new post about | logout
 Olha quero aprender programação, não sei como começar, aí vem você escreve essas coisas. Como vou confiar nos ensinos se nem ao menos iniciei? Outra, como vou aprender se não posso pagar cursos? Outra onde aprendo de verdade? Outra, quais fontes são mais certo que eu aprenda  programação? 
 O fato de haver essa picaretagem não deve te desanimar, mas fazer com que você entenda  que nenhuma área científica hoje está livre de manipulação. A TI tem a vantagem de ser aberta e permitir, com pouco orçamento, aprender pessoalmente à revelia da academia. Minha formação como programador é auto-didata. Eu não fiz curso nenhum, porém, comecei em 1990. Eu vi quase tudo acontecendo pessoalmente. Desde a briga Token Ring x Ethernet e do Open Sistemes x Novell, até a chegada do linux. Trabalhei com super micros Cobra e Sid SMX 390. Então, eu tive a oportunidade de pegar o fio da meada. Mas não acho impossível que alguém consiga entender tudo por si só hoje. Ademais, há muita informação na internet, que é totalmente aberta. 

O importante são os fundamentos. Estude os fundamentos bem: estrutura de dados, lógica de programação, algoritmos, conceitos de OOP, versionamento de código, Banco de dados, Sistemas operacionais e redes de computadores. Hoje se consegue vasta documentação livre para estudar. Uma vez dominando minimamente estas disciplinas, se pode aprofundar em linguagens de programação. 

Só não pense que é simples e fácil, nem que é algo que precisa décadas pra começar. O campo é vasto, quando souber onde o galo canta, escolha uma área específica pra se aprofundar. 

Não se prenda a modinhas do momento. Em cajuzinhos do verão. Nunca vi isso funcionar por muito tempo.

Sobre fontes: Em relação aos fundamentos, prefira bons livros sobre estes assuntos. Há dezenas deles na internet, dentre alguns clássicos. Segue uma lista:

Lógica de Programação

"Lógica de Programação: A Construção de Algoritmos e Estruturas de Dados" de André Luiz Villar Forbellone e Henri Frederico Eberspächer

Estruturas de Dados

"Estruturas de Dados e Algoritmos em Java" de Robert Lafore
"Algorithms, Part I and II" de Robert Sedgewick e Kevin Wayne (também disponível como curso online gratuito no Coursera)
Algoritmos

"Introduction to Algorithms" de Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein
"Algoritmos: Teoria e Prática" de Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein
Linguagens de Programação

Python: "Python Crash Course" de Eric Matthes
JavaScript: "Eloquent JavaScript" de Marijn Haverbeke (disponível online gratuitamente)
Java: "Java: The Complete Reference" de Herbert Schildt
C++: "Programming: Principles and Practice Using C++" de Bjarne Stroustrup
Conceitos de Orientação a Objetos (OOP)

"Design Patterns: Elements of Reusable Object-Oriented Software" de Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides
"Head First Object-Oriented Analysis and Design" de Brett McLaughlin, Gary Pollice e David West
Desenvolvimento de Software

"Clean Code: A Handbook of Agile Software Craftsmanship" de Robert C. Martin
"The Pragmatic Programmer: Your Journey to Mastery" de Andrew Hunt e David Thomas
Versionamento de Código

"Pro Git" de Scott Chacon e Ben Straub (disponível online gratuitamente)
Banco de Dados

"Database System Concepts" de Abraham Silberschatz, Henry F. Korth e S. Sudarshan
"SQL For Dummies" de Allen G. Taylor
Redes de Computadores

"Computer Networking: A Top-Down Approach" de James F. Kurose e Keith W. Ross
Sistemas Operacionais

"Operating System Concepts" de Abraham Silberschatz, Peter B. Galvin e Greg Gagne