Como ser Programador Senior
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
Planes de estudios en universidades de Argentina
Otras referencias
Arquitectura de Computadoras (Hardware)
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:
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.
Lenguajes de Programación
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
Algoritmos y estructuras de datos
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.
Diseño de software con Objetos
- 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
Diseño de Sistemas
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.
Programación Funcional
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.
Ingeniería de Software
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.
Uso de un frameworks
Uso de repositorios de dependencias de código
Maven, NPM, PIP, apt-get
Aplicaciones web
- HTML, CSS, JavaScript
- Front-end
- Back-end
- HTTP, WebSocket
- API REST
Bases de datos
- 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.
Pruebas y testing
- Unit, System, Integration, Dev-env.
Metodologías Ágiles
- Scrum.
- Continuous integration.
Libros:
- Learning Agile: Understanding Scrum, XP, Lean, and Kanban, by Stellman, Grene.
Sistemas concurrentes, paralelos y distribuídos
- 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.
Redes de computadoras
IPv6, TCP-UDP, HTTP, DNS, Routers, etc.
Libros:
- Computer Networks, Tanenbaum.
- Computer Networking: A Top-Down Approach, Kurose, Ross.
Sistemas operativos
- 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.
Uso de herramientas
- IDE,
- SCMs, Git,
- Debuggers,
- Issue tracking software
Uso de documentación
- Buscar en Google
- Leer documentación técnica
- Leer Stack Overflow
Codigo legacy
Libros:
- Working Effectively with Legacy Code, by Michael Feathers
Administracion de Proyectos
- Project management
- Gantt charts
Seguridad
- 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
Cloud Computing
- "Serverless"
- Escalabilidad
- Contenedores
- AWS, GCP, Azure, otros.
- SLA
Matemáticas
- Algebra
- Análisis
- Probabilidad y estadística
- Numeros aleatorios
- Espacios vectoriales
- Métodos numéricos
Parsers y Compiladores
Libros:
- Compilers: Principles, Techniques, and Tools, by Aho.
- Engineering a Compiler, by Keith Cooper.
Modelos y Simulaciones
- 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.
Teoría de la Computación
- Maquinas de turing
- Lambda Calculo
- Verificación Formal de Programas
- Computabilidad y Complejidad
Logica e Inteligencia Artificial
Enunciados y predicados
Libros:
- Lógica para matemáticos, Hamilton.
Aspectos legales, profesionales, y éticos
- "Unintended Acceleration"
- "Diesel Emissions"
- GDPR
Interacción con personas
Libros:
- Soft Skills: The software developer's life manual, John Sonmez
Entrevistas laborales
Libros:
- Cracking the Coding Interview
- System design interview, by Alex Xu.
- Programming Interviews Exposed: Coding Your Way Through the Interview, Mongan