El siguiente es un plan de estudios de bases y fundamentos para aprender programacion. NO ESTÁ EN ORDEN.
En general puede llevar de 15 a 25 años aprender (a fondo) todo lo de esta lista.
Uno de los problemas más comunes al empezar a aprender programación es enfocarse solo en los lenguajes y no enfocarse en los fundamentos y conceptos de base.
La mejor forma de aprender es haciendo, pero hay que saber decidir qué hacer. No hace falta ser experto en cada cosa.
Knowing is not enough; we must apply. Willing is not enough; we must do – Johann Wolfgang von Goethe
- https://www.info.unlp.edu.ar/licenciatura-en-informatica-plan-2021/
- https://www.info.unlp.edu.ar/licenciatura-en-sistemas-plan-2021/
- https://futuros-estudiantes.dc.uba.ar/plan-de-estudios/
- https://www.fi.uba.ar/grado/carreras/ingenieria-en-informatica/plan-de-estudios
- https://www.famaf.unc.edu.ar/academica/grado/licenciatura-en-ciencias-de-la-computaci%C3%B3n/
- https://dcc.fceia.unr.edu.ar/es/lcc
- https://teachyourselfcs.com orientado a la programación funcional, no de objetos.
- https://roadmap.sh/backend orientado a la programación backend web.
- https://roadmap.sh/frontend orientado a la programación frontend web.
Citas:
- People who are really serious about software should make their own hardware – Alan Kay, Steve Jobs.
- Hay solo dos problemas difı́ciles en computación: coherencia de caché, ponerle nombre a las cosas, y los errores de +/- 1.
Temas:
- Jerarquía de memoria y latencia
- Localidad de referencias
- Punto flotante
Articulos:
- What Every Programmer Should Know About Memory: https://people.freebsd.org/~lstewart/articles/cpumemory.pdf
- Latency Numbers Every Programmer Should Know: https://gist.github.com/jboner/2841832
Libros:
- “Computer Organization and Architecture”, William Stallings.
- “Computer Organization and Design: The Hardware/Software Interface”, David A. Patterson, John L. Hennessy.
- “Structured Computer Organization”, Andrew S. Tanenbaum.
- “Optimizing software in C++ An optimization guide for Windows, Linux, and Mac platforms”, Agner Fog. 16
- “Handbook of Floating-Point Arithmetic”, Jean-Michel Muller.
Citas:
- There are only two kinds of languages: the ones people complain about and the ones nobody uses. – Bjarne Stroustrup
Temas:
- Imperativos,
- Objetos,
- Funcional
- Conceptos de lenguajes
- Expresiones regulares
Citas:
-
I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships. — Linus Torvalds 17
-
Shortly after the wall fell in 1990, an American and a Russian who had both worked on development of weapons meet. The American asks: “When you developed the Bomb, how were you able to perform such an enormous amount of computing with your weak computers?”. The Russian responses: “We used better algorithms.” – Dinitz Algorithm, Yefim Dinitz
Temas:
- Recursion, búsqueda binaria.
- Eficiencia, Big Oh
- Arrays, Listas, Árboles, Grafos, Hashtables
Libros:
- Introduction to Algorithms, by Cormen.
- The Algorithm Design Manual, by Skiena.
- Data Structures and Algorithms in Java, by Mark Weiss.
- Patrones de Diseño en Objetos
- SOLID
- Refactoring
Articulos:
Libros:
- Design patterns: elements of reusable object-oriented software, by Erich Gamma.
- Refactoring, by Martin Fowler
- Object-Oriented Analysis and Design, by Grady Booch.
- Clean Architecture, by Robert C. Martin.
- Head First Design Patterns
- Head First Object-Oriented Analysis and Design
Citas:
- Show me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won’t usually need your flowcharts; they’ll be obvious. – Fred Brooks.
- A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable – Lamport
Temas:
- Arquitectura de Software
- SLA
Libros:
- Clean Architecture, by Robert Martin.
- Computer Systems: A Programmer's Perspective, Bryant O'Hallaron
- System design interview, by Alex Xu.
- Designing data-intensive applications, by Kleppmann, Martin.
- Principles of Computer System Design (Volume 1), by by Jerome H. Saltzer, M. Frans Kaashoek. Volume 2 PDF 25
- Distributed Systems: Concepts and Design, by Couloris.
Libros:
- Introduction to Functional Programming (using Haskell), Bird.
- Thinking Functionally with Haskell, Bird.
- Algorithm Design with Haskell, Bird.
- Programming in Haskell, Hutton.
- Structure and Interpretation of Computer Programs, Abelson, Sussman.
Citas:
- Knowing is not enough; we must apply. Willing is not enough; we must do – Johann Wolfgang von Goethe
Temas:
- "Especificación, desarrollo, validación y evolución del software"
- Interacción con el producto y negocio
Libros:
- Software Engineering, Ian Sommerville
- Mythical Man-Month, The: Essays on Software Engineering, by Frederick Brooks.
- The Pragmatic Programmer: your journey to mastery, by David Thomas (Author), Andrew Hunt.
- MVC
Maven, NPM, PIP, apt-get
- HTML, CSS, JavaScript
- Front-end
- Back-end
- HTTP, WebSocket
- API REST
- Normalización, 1FN,
- Transacciones,
- ORM.
- Modelo entidad-relacion, SQL
- NoSQL, KV.
- Kafka, MQs.
Libros:
- Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design, Hernandez Michael.
- Database design and relational theory: normal forms and all that jazz, Date C J.
- Database system concepts, Silberschatz.
- An advanced course in database systems: beyond relational databases, by Dietrich, Urban.
- Unit, System, Integration, Dev-env.
- Scrum.
- Continuous integration.
Libros:
- Learning Agile: Understanding Scrum, XP, Lean, and Kanban, by Stellman, Grene.
- Multiples CPUs, threads, procesos
- Tolerancia a fallos,
- SLA
- Programación de tiempo real
Libros:
- Concurrent Programming: Principles and Practice, Andrews.
- Principles of Computer System Design (Volume 1), by by Jerome H. Saltzer, M. Frans Kaashoek. Volume 2 PDF 25
- Distributed Systems: Concepts and Design, by Couloris.
IPv6, TCP-UDP, HTTP, DNS, Routers, etc.
Libros:
- Computer Networks, Tanenbaum.
- Computer Networking: A Top-Down Approach, Kurose, Ross.
- Uso de Windows
- Uso de Linux
Libros:
- Modern Operating Systems, Tanenbaum.
- Operating System Concepts, Silberschatz, Galvin.
- Operating Systems, Stallings.
- Operating Systems: Three Easy Pieces, by Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau
- Sistemas operativos distribuidos, Tanenbaum.
- IDE,
- SCMs, Git,
- Debuggers,
- Issue tracking software
- Buscar en Google
- Leer documentación técnica
- Leer Stack Overflow
Libros:
- Working Effectively with Legacy Code, by Michael Feathers
- Project management
- Gantt charts
- Software vs Hardware
- Pentesting
- OWASP
- Capa 8
- Privacidad, protección de datos personales, GDPR
Libros:
- Cryptography and Network Security: Principles and Practice, Stallings.
- Everyday Cryptography: Fundamental Principles and Applications, Keith Martin
- "Serverless"
- Escalabilidad
- Contenedores
- AWS, GCP, Azure, otros.
- SLA
- Algebra
- Análisis
- Probabilidad y estadística
- Numeros aleatorios
- Espacios vectoriales
- Métodos numéricos
Libros:
- Compilers: Principles, Techniques, and Tools, by Aho.
- Engineering a Compiler, by Keith Cooper.
- C++, Simula
- Simulación por eventos discretos
- Queue theory
Libros:
- Performance Modeling and Design of Computer Systems: Queueing Theory in Action, by Mor Harchol-Balter.
- Fundamentals of Queueing Theory, Gross Harris.
- Maquinas de turing
- Lambda Calculo
- Verificación Formal de Programas
- Computabilidad y Complejidad
Enunciados y predicados
Libros:
- Lógica para matemáticos, Hamilton.
- "Unintended Acceleration"
- "Diesel Emissions"
- GDPR
Libros:
- Soft Skills: The software developer's life manual, John Sonmez
Libros:
- Cracking the Coding Interview
- System design interview, by Alex Xu.
- Programming Interviews Exposed: Coding Your Way Through the Interview, Mongan