# Technical Documentation: DevCaress/guia-entrevistas-de-programacion
> ℹ️ **Provenance:** Hybrid Fusion: `DevCaress/guia-entrevistas-de-programacion` (README + 10 In-Tree Chapters) · [CodeWiki Reference](https://codewiki.google/github.com/DevCaress/guia-entrevistas-de-programacion) · Recency: Active (< 180 days)
## 1. Project Overview & Quickstart (DevCaress/guia-entrevistas-de-programacion)
# Guía para entrevistas técnicas como Ingeniero de software
## Navigable website
This guide is now published as an Astro static site. The README preserves the historical index, while the browsable content lives in `src/content/guide/**/*.mdx`.
Visit the guide at [caress.dev/guia](https://caress.dev/guia).
### Local development
Use Node.js `>=22.12.0`.
```bash
npm install
npm run dev
```
### Validation
```bash
npm run build
npm run test
npm run test:e2e
npm run verify:content
npm run check:links
```
`npm run verify:content` compares the README sections and references against the migrated MDX files. `npm run check:links` validates URL syntax; to verify external availability over the network, run `npm run check:links -- --fetch`.
### Add content
Each new section must be added as an `.mdx` file in `src/content/guide/` and include `title`, `description`, `category`, `sidebar.order` and `references`. Original references should be defined in the frontmatter, while custom examples can be added using `examples` or as MDX code blocks within the content.
## Contributing
Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) for the local setup, branch and commit conventions, content rules, and required validation.
- Suggest a new topic or resource with the [content suggestion issue template](.github/ISSUE_TEMPLATE/content_suggestion.yml), or report a problem with the [bug report template](.github/ISSUE_TEMPLATE/bug_report.yml).
- Open focused pull requests using the [PR template](.github/pull_request_template.md). Link the related issue with `Closes #` when applicable.
- For content changes, run `npm run verify:content` and `npm run check:links`; run `npm run check:links -- --fetch` to verify that reference websites respond.
- Project skills are available in `.claude/skills/`: `create-content` for new guide pages, `create-commit` for focused Conventional Commits, and `create-pr` for preparing draft pull requests.
## Índice
- [Guía para entrevistas técnicas como Ingeniero de software](#guía-para-entrevistas-técnicas-como-ingeniero-de-software)
- [Índice](#índice)
- [Buenas prácticas](#buenas-prácticas)
- [Principios SOLID](#principios-solid)
- [Principios DRY, KISS, YAGNI, GRASP y LoD](#dry)
- [Clean Code](#clean-code)
- [Clean architecture](#clean-architecture)
- [Buenas prácticas en...](#buenas-practicas-en)
- [Angular](#angular)
- [C++](#c)
- [Dart](#dart)
- [Django](#django)
- [Flutter](#flutter)
- [Java](#java)
- [Javascript](#javascript)
- [PHP](#php)
- [Python](#python)
- [React.js](#reactjs)
- [Typescript](#typescript)
- [Vue.js](#vuejs)
- [Algoritmos y estructuras de datos](#algoritmos-y-estructuras-de-datos)
- [Complejidad algorítmica](#complejidad-algorítmica)
- [Algoritmos](#algoritmos)
- [Estructuras de datos](#estructuras-de-datos)
- [Practicar algoritmos y estructuras de datos](#practicar-algoritmos-y-estructuras-de-datos)
- [Visualizar algoritmos](#visualizar-algoritmos)
- [Visualgo](#visualgo)
- [Patrones de diseño](#patrones-de-diseño)
- [Diseño de sistemas](#diseño-de-sistemas)
- [Bases de datos](#bases-de-datos)
- [ORM's](#orms)
- [Arquitectura de Software](#arquitectura-de-software)
- [Frontend](#frontend)
- [React Clean Architecture](#react-clean-architecture)
- [Vue JS Clean Architecture](#vue-js-clean-architecture)
- [Backend](#backend)
- [Clean Architecture Express JS](#clean-architecture-express-js)
- [Clean Architecture Java](#clean-architecture-java)
- [Clean Architecture PHP](#clean-architecture-php)
- [Clean Architecture Python](#clean-architecture-python)
- [Preguntas más frecuentes](#preguntas-más-frecuentes)
- [Preguntas de Frontend](#preguntas-de-frontend)
- [Preguntas de Backend](#preguntas-de-backend)
- [Control de Versiones](#control-de-versiones)
- [Workflows](#workflows)
- [CI/CD](#cicd)
- [Contenedores y Orquestación](#contenedores-y-orquestación)
- [IA para desarrolladores](#ia-para-desarrolladores)
- [Authors](#authors)
## Buenas prácticas
### Principios SOLID
- [SOLID en C++ con implemetación y ejemplos - Inglés](https://medium.com/@aleksandra_shershen/solid-principles-implementation-and-examples-in-c-99f0d7e3e868)
- [SOLID en C++ - Inglés](https://nexwebsites.com/blog/solid-design-principles/)
- [SOLID en Java con Ejemplos - Inglés](https://www.javaguides.net/2020/01/solid-principles-in-java-with-examples.html)
- [SOLID en Java - Inglés](https://medium.com/@shavi22/solid-principles-in-java-cf9f5b167600)
- [SOLID en Javascript Vanilla - Inglés](https://github.com/ryanmcdermott/clean-code-javascript#openclosed-principle-ocp)
- [SOLID en Python - Inglés](https://realpython.com/solid-principles-python/)
- [SOLID en React.JS - Inglés](https://medium.com/docler-engineering/applying-solid-to-react-ca6d1ff926a4)
- [SOLID en Vue.JS - Inglés](https://medium.com/@moein.mirkiani/solid-principles-in-vue-29ecc988f968)
*********
### DRY
- [Demystifying Software Development Principles: DRY, KISS, YAGNI, SOLID, GRASP, and LoD](https://levelup.gitconnected.com/demystifying-software-development-principles-dry-kiss-yagni-solid-grasp-and-lod-8606113c0313)
*********
### Clean Code
- [Clean Code en Java - Español](https://github.com/alansastre/java-clean-code)
- [Clean Code en Java - Inglés](https://github.com/JuanCrg90/Clean-Code-Notes)
- [Clean Code en Javascript - Español](https://github.com/andersontr15/clean-code-javascript-es)
- [Clean Code en Javascript - Inglés](https://github.com/ryanmcdermott/clean-code-javascript#openclosed-principle-ocp)
- [Clean Code en Python - Español](https://github.com/sryvcr/clean-code-python-es)
- [Clean Code en Python - Inglés](https://github.com/zedr/clean-code-python)
**********
### Clean architecture
## Buenas prácticas en:
### Angular
- [10 Best Practices for Building Scalable Angular Applications — With examples](https://medium.com/@mattias.trnqvist/10-best-practices-for-building-scalable-angular-applications-with-examples-efdfe2a5b4e8)
- [Angular Optimization and Best Practices](https://www.tatvasoft.com/blog/angular-optimization-and-best-practices/)
- [Angular coding style guide](https://angular.io/guide/styleguide)
### C++
- [Collecting the best C++ practices](https://medium.com/@Code_Analysis/collecting-the-best-c-practices-4b867006849f)
- [Boost Your C++ Coding Skills: 5 Tips For Faster, Better Code](https://programminggyan.com/5-cpp-tips-for-faster-better-code/)
### Dart
- [Effective Dart: Design](https://dart.dev/effective-dart/design)
### Django
- [Django Best Practices 2022](https://www.linkedin.com/pulse/django-best-practices-2022-akshata-murudkar/)
- [Django Model Best Practices: Tips and Tricks for Clean and Efficient Code](https://medium.com/@schopade333/django-model-best-practices-c5c8a142dfc)
- [The 4 Clean Code Principles in Django](https://betterprogramming.pub/clean-code-principles-in-django-b0563a4e12f5)
### Flutter
- [Flutter Best Practices](https://itnext.io/flutter-best-practices-part-1-e89467ea4823)
- [The Dart Way: Best Coding Practices](https://articles.wesionary.team/the-dart-way-best-coding-practices-6ac693736090)
- [10 Best Practices Every Flutter Developer Should Follow](https://somniosoftware.com/post/top-10-flutter-best-practices)
### Java
- [Java Best Practices (recomendado)](https://github.com/in28minutes/java-best-practices)
- [Java Best Practices](https://www.developer.com/languages/javascript/java-best-practices/)
- [10 best practices in Java](https://medium.com/@alexthedev/10-best-practices-in-java-dc0b06dda858)
### Javascript
- [Guidelines For Writing JavaScript Code Examples](https://developer.mozilla.org/en-US/docs/MDN/Writing_guidelines/Writing_style_guide/Code_style_guide/JavaScript)
- [JavaScript Best Practices by W3.org](https://www.w3.org/wiki/JavaScript_best_practices)
- [JavaScript Best Practices by W3Schools](https://www.w3schools.com/js/js_best_practices.asp)
- [Airbnb JavaScript Style Guide()](https://github.com/airbnb/javascript)
- [30 JavaScript Best Practices for Beginners](https://code.tutsplus.com/24-javascript-best-practices-for-beginners--net-5399t)
### PHP
- [PHP Programming Best Practices and Coding Styles](https://medium.com/techlaboratory/php-programming-best-practices-and-coding-styles-e43234446fd3)
- [PHP Best Practices](https://phpbestpractices.org/)
### Python
- [Code Style in Python](https://docs.python-guide.org/writing/style/)
- [Python Best Practices to Follow in 2023](https://aglowiditsolutions.com/blog/python-best-practices/)
### React.js
- [10 Best Practices for Writing Clean React Code](https://www.turing.com/kb/writing-clean-react-code)
- [React Best Practices – Tips for Writing Better React Code in 2022](https://www.freecodecamp.org/news/best-practices-for-react/#tips-to-help-you-write-better-react-code-the-cherries-on-top)
- [React best practices and patterns to reduce code](https://devsmitra.medium.com/react-best-practices-and-patterns-to-reduce-code-3170f1913b26)
- [React Best Practices Every Developer Have to Follow in 2023](https://technostacks.com/blog/react-best-practices/)
### Typescript
- [TypeScript best practices by AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/typescript-best-practices.html)
- [TypeScript Best Practices 2021](https://medium.com/@warkiringoda/typescript-best-practices-2021-a58aee199661)
### Vue.js
- [12 VueJS Best Practices](https://learnvue.co/articles/vue-best-practices)
- [Vue Patterns](https://learn-vuejs.github.io/vue-patterns/patterns/#component-declaration)
## Algoritmos y estructuras de datos
### Complejidad algorítmica
- [¿Qué es la complejidad algorítmica y con qué se come?](https://medium.com/@joseguillermo_/qué-es-la-complejidad-algorítmica-y-con-qué-se-come-2638e7fd9e8c)
- [Introducción a Big-O Notation](https://medium.com/nowports-tech/introducción-a-big-o-notation-95ecca8bd866)
- [Analysis of Algorithms | Big-O analysis](https://www.geeksforgeeks.org/analysis-algorithms-big-o-analysis/)
### Algoritmos
- [Algoritmos en C](https://github.com/TheAlgorithms/C)
- [Algoritmos en C++](https://github.com/TheAlgorithms/C-Plus-Plus)
- [Algoritmos en Go](https://github.com/TheAlgorithms/Go)
- [Algoritmos en Java](https://github.com/TheAlgorithms/Java)
- [Algoritmos en Javascript](https://github.com/TheAlgorithms/JavaScript)
- [Algoritmos en PHP](https://github.com/TheAlgorithms/PHP)
- [Algoritmos en Python](https://github.com/TheAlgorithms/Python)
- [Algoritmos en Typescript](https://github.com/TheAlgorithms/TypeScript)
### Estructuras de datos
- [Data Structures using C | What are the Data Structure in C and How it works?](https://www.mygreatlearning.com/blog/data-structures-using-c/)
- [C++'s Built-In Data Structures](https://www.codecademy.com/learn/c-plus-plus-for-programmers/modules/cpp-built-in-data-structures/cheatsheet)
- [Top Data Structures & Algorithms in Java That You Need to Know](https://medium.com/edureka/data-structures-algorithms-in-java-d27e915db1c5)
- [JavaScript Algorithms and Data Structures](https://github.com/trekhleb/javascript-algorithms)
- [Discovering PHP Data Structures: Arrays, Linked Lists, and Binary Trees](https://medium.com/@london.lingo.01/discovering-php-data-structures-arrays-linked-lists-and-binary-trees-501566f83bad)
- [Efficient data structures for PHP 7](https://medium.com/@rtheunissen/efficient-data-structures-for-php-7-9dda7af674cd)
- [Python Data Structures](https://www.geeksforgeeks.org/python-data-structures/)
### Practicar algoritmos y estructuras de datos
- [CodeWars](https://www.codewars.com/)
- [LeetCode](https://leetcode.com)
- [HackerRank](https://www.hackerrank.com/)
- [CoderByte](https://coderbyte.com/)
- [Exercism](https://exercism.org/)
## Visualizar algoritmos
### [Visualgo](https://visualgo.net/)
En esta web podrás ver como funcionan de manera visual los siguientes algoritmos:
- Sorting
- Bubble Sort
- Selection Sort
- Insertion Sort
- Merge Sort
- Quick Sort
- Random Quick Sort
- Counting Sort
- Radix Sort
- Linked List
- Stack
- Queue
- Doubly Linked List
- Deque
- Hash Tables
- Linear Probing
- Quadratic Probing
- Double Hashing
- Separate Chaining
- Binary Heap
- Binary Search Tree
- AVL Tree
## Patrones de diseño
[Patrones de diseño Español (Recomendación personal)](https://refactoring.guru/es/design-patterns)
[Patrones de diseño en Javascript](https://www.patterns.dev/posts)
- Patrones Creacionales
- Singleton
- Factory Method
- Abstract Factory
- Builder
- Prototype
- Patrones Estructurales
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
- Patrones de comportamiento
- Chain of Responsibility
- Command
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Interpreter
- Visitor
## Diseño de sistemas
- [System Design Questions + Solutions DB](https://systemdesign.io)
- [System-design-interview](https://github.com/checkcheckzz/system-design-interview)
- [System Design Interview Questions and Answers [2025]](https://www.geeksforgeeks.org/system-design/top-10-system-design-interview-questions-and-answers)
- [A Beginner’s Guide to System Design](https://medium.com/@sentalkssane/a-beginners-guide-to-system-design-76d64689788b)
- [11 Most-Asked System Design Interview Questions (+ answers)](https://igotanoffer.com/blogs/tech/system-design-interviews)
- [Top 50 System Design Interview Questions for 2025](https://dev.to/somadevtoo/top-50-system-design-interview-questions-for-2024-5dbk)
- [System Design Interview Questions](https://www.interviewbit.com/system-design-interview-questions)
- [System Design CheatSheet for Interview](https://medium.com/javarevisited/system-design-cheatsheet-4607e716db5a)
## Bases de datos
- [20 ejemplos de consultas SQL básicas para principiantes: Una visión completa](https://learnsql.es/blog/20-ejemplos-de-consultas-sql-basicas-para-principiantes-una-vision-completa/)
- [Top 50+ Database Interview Questions And Answers](https://www.softwaretestinghelp.com/database-interview-questions/)
- [Top 50 Database Interview Questions and Answers (2024)](https://www.guru99.com/database-interview-questions.html)
- [Choosing the Best Database: SQL vs NoSQL](https://medium.com/codex/choosing-the-best-database-sql-vs-nosql-a816a7ec09fc)
### ORM's
- [¿Qué es un ORM?](https://wildpasco.medium.com/qué-es-un-orm-backend-bee59674e1d0)
- [Introducción a Mongoose para MongoDB](https://www.freecodecamp.org/espanol/news/introduccion-a-mongoose-para-mongodb/)
- [The Ultimate Guide To Get Started With Sequelize ORM](https://levelup.gitconnected.com/the-ultimate-guide-to-get-started-with-sequelize-orm-238588d3516e)
## Arquitectura de Software
- [La guía definitiva de la arquitectura de software](https://medium.com/@ktufernando/la-guía-definitiva-de-la-arquitectura-del-software-f419db9c6bf7)
- [Entendiendo a la arquitectura limpia](https://nescalro.medium.com/entendiendo-a-la-arquitectura-limpia-7877ad3a0a47)
- [Los 10 patrones comunes de arquitectura de software](https://medium.com/@maniakhitoccori/los-10-patrones-comunes-de-arquitectura-de-software-d8b9047edf0b)
- [Arquitectura Hexagonal](https://medium.com/@edusalguero/arquitectura-hexagonal-59834bb44b7f)
- [Domain Driven Design: principios, beneficios y elementos - Primera Parte](https://medium.com/@jonathanloscalzo/domain-driven-design-principios-beneficios-y-elementos-primera-parte-aad90f30aa35)
### Frontend
- [Arquitectura Hexagonal en el FrontEnd](https://softwarecrafters.io/react/arquitectura-hexagonal-frontend)
- [Arquitecturas frontend: "Enfoque "modular simple](https://codigoencasa.com/arquitecturas-frontend-enfoque-modular-simple/)
- [A Comprehensive Guide to Modern Frontend Architecture Patterns](https://medium.com/@johnadjanohoun/a-comprehensive-guide-to-modern-frontend-architecture-patterns-eb39debbd503)
- [Alejándonos de ReactJs y VueJs en frontend usando Clean Architecture](https://xurxodev.com/frontend-clean_architecture/)
- [La Arquitectura Hexagonal: un enfoque para desarrollar aplicaciones robustas en React, Angular y Vue con ejemplos de código](https://dev.to/dennysjmarquez/la-arquitectura-hexagonal-un-enfoque-para-desarrollar-aplicaciones-robustas-en-react-angular-y-vue-con-ejemplos-de-codigo-l4l)
- [A Definitive Guide to Front-end Clean Architecture](https://eduardo-ottaviani.medium.com/a-definitive-guide-to-front-end-clean-architecture-3a62418becb4)
- [Introducción a la arquitectura de microfrontends con un ejemplo en React.](https://www.paradigmadigital.com/dev/introduccion-arquitectura-microfrontends-ejemplo-react/)
- [MicroFrontEnd](https://devjaime.medium.com/microfrontend-4eecf1498cd1)
- [A Comprehensive Guide to Micro Frontend Architecture](https://medium.com/appfoster/a-comprehensive-guide-to-micro-frontend-architecture-cc0e31e0c053)
- [Microservices vs. Micro Frontends: What's the Difference?](https://dev.to/pavanbelagatti/microservices-vs-micro-frontends-whats-the-difference-33je)
#### React Clean Architecture
- [Clean Architecture With React](https://betterprogramming.pub/clean-architecture-with-react-cc097a08b105)
- [Clean Architecture: Applying with React](https://dev.to/rubemfsv/clean-architecture-applying-with-react-40h6)
- [React Clean Architecture](https://github.com/eduardomoroni/react-clean-architecture)
- [Clean Architecture: Typescript and React](https://paulallies.medium.com/clean-architecture-typescript-and-react-8e509098abfe)
#### Vue JS Clean Architecture
- [Clean Architecture with VueJS](https://www.linkedin.com/pulse/clean-architecture-vuejs-ahsan-riaz/)
- [Clean Architecture VueJS](https://github.com/thanhchungbtc/vue-shopping-clean-architecture)
- [Vue Clean Architecture Github](https://github.com/smotastic/vue-clean-architecture)
- [Separating business logic from UI frameworks (React, Vue, Svelte, Angular, etc.) using clean architecture pattern](https://github.com/shamscorner/bloc-vue-3-clean-pattern)
### Backend
#### Clean Architecture Express JS
- [Clean Architecture en Node y Express](https://www.linkedin.com/pulse/clean-architecture-en-node-y-express-odannys-de-la-cruz/?originalSubdomain=es)
- [Clean Architecture in Node.js](https://medium.com/@ben.dev.io/clean-architecture-in-node-js-39c3358d46f3)
- [Node.js Clean Architecture](https://github.com/panagiop/node.js-clean-architecture)
#### Clean Architecture Java
- [Clean Architecture en la vida real JAVA](https://medium.com/@soyjuanmalopez/clean-architecture-en-la-vida-real-9da710e5ad4a)
- [Clean Architecture with Spring Boot: A good idea?](https://medium.com/@viniciusromualdobusiness/clean-architecture-with-spring-boot-a-good-idea-d6f97e450130)
#### Clean Architecture PHP
- [Clean Architecture with PHP](https://medium.com/unil-ci-software-engineering/clean-architecture-with-php-22de915a6c50)
- [Clean Architecture with Laravel](https://dev.to/bdelespierre/how-to-implement-clean-architecture-with-laravel-2f2i)
#### Clean Architecture Python
- [Understanding clean architecture in Python — Deep dive on the code](https://medium.com/@surajit.das0320/understanding-clean-architecture-in-python-deep-dive-on-the-code-17141dc5761a)
- [Python Clean Architecture](https://github.com/pcah/python-clean-architecture)
- [Clean Architecture in Django](https://medium.com/21buttons-tech/clean-architecture-in-django-d326a4ab86a9)
- [Django Clean Architecture](https://github.com/jacob-y/django-clean-architecture)
## Preguntas más frecuentes
- [Kill Your Tech Interview (recomendado)](https://www.fullstack.cafe)
- [Angular Interview questions](https://github.com/sudheerj/angular-interview-questions)
- [Django Interview questions](https://github.com/Ujjawal-Anand/django-interview)
- [Java Interview questions](https://github.com/Devinterview-io/java-interview-questions)
- [Java Spring Interview questions](https://github.com/altafjava/spring-interview-questions-answers)
- [Javascript Interview questions](https://github.com/sudheerj/javascript-interview-questions)
- [PHP Interview questions](https://github.com/Devinterview-io/php-interview-questions)
- [Python Interview questions](https://github.com/Devinterview-io/python-interview-questions)
- [React Interview questions](https://github.com/sudheerj/reactjs-interview-questions)
- [SQL Interview questions](https://github.com/kansiris/SQL-interview-questions/tree/master)
- [Cracking the SQL interview](https://github.com/xoraus/CrackingTheSQLInterview)
- [Vue Interview questions](https://github.com/sudheerj/vuejs-interview-questions)
### Preguntas de Frontend
- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/introduction/)
- [52 Frontend Interview Questions - JavaScript](https://dev.to/m_midas/52-frontend-interview-questions-javascript-59h6)
- [Front-end Developer Interview Questions](https://github.com/h5bp/Front-end-Developer-Interview-Questions?tab=readme-ov-file)
- [11 senior front end developer interview questions and answers](https://anywhere.epam.com/en/blog/senior-front-end-developer-interview-questions)
- [15 Frontend Developer Interview Questions (2023)](https://4dayweek.medium.com/15-frontend-developer-interview-questions-2023-91c7a9a628c1)
- [Frontend Interview Questions [Top 250+]](https://frontendinterviewquestions.medium.com/frontend-interview-questions-top-250-92ba361cbbbd)
### Preguntas de Backend
- [Top 100 back-end developer interview questions and answers 2023](https://www.turing.com/interview-questions/back-end)
- [Top 18 backend developer interview questions answered](https://anywhere.epam.com/en/blog/top-18-backend-developer-interview-questions-answered)
- [Backend SWE interview questions](https://github.com/tamhoang1412/backend-swe-interview-questions)
## Control de Versiones
- [La guía para principiantes de Git y Github](https://www.freecodecamp.org/espanol/news/guia-para-principiantes-de-git-y-github/)
- [Git Avanzado: Comandos Avanzados Además de los Básicos](https://kinsta.com/es/blog/git-avanzado/)
- [Comparing Git workflows: What you should know](https://www.atlassian.com/git/tutorials/comparing-workflows)
### Workflows
- [Cinco Git Workflows para mejorar nuestros proyectos](https://www.babelgroup.com/es/Media/Blog/Abril-2021/Cinco-Git-Workflows-para-mejores-proyectos)
- [Git feature branch workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow)
- [Gitflow workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)
- [Forking workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow)
## CI/CD
- [Introducción a CI/CD](https://medium.com/@diego.coder/introducción-a-ci-cd-be79d0beafad)
- [Comprensión de la CI/CD by AWS](https://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/strategy-cicd-litmus/understanding-cicd.html)
- [What is CI/CD?](https://www.freecodecamp.org/news/what-is-ci-cd/)
- [What is a DevOps pipeline?](https://resources.github.com/devops/pipeline/)
## Contenedores y Orquestación
- [¿Qué son los contenedores?](https://www.hpe.com/mx/es/what-is/containers.html)
- [¿Qué es un contenedor? by Microsoft](https://azure.microsoft.com/es-mx/resources/cloud-computing-dictionary/what-is-a-container)
- [Contenedores y Orquestación (Recomendado)](https://medium.com/@villamorosjuan/contenedores-y-orquestación-transformando-la-gestión-de-aplicaciones-en-producción-0f2ebbd8aac5)
## IA para desarrolladores
- [The Ultimate List of AI Concepts in AI for Absolute Beginners | And Let Me Know What You Want to Read About Next](https://medium.com/ai-for-absolute-beginners/the-ultimate-list-of-ai-concepts-in-ai-for-absolute-beginners-and-let-me-know-what-you-want-to-3edf24ce7c01)
- [25 Essential AI Concepts Every AI Developer Must Master](https://dev.to/devscriptor/25-essential-ai-concepts-every-ai-developer-must-master-4ddn)
- [Awesome AI-Powered Developer Tools](https://github.com/jamesmurdza/awesome-ai-devtools)
- [Best AI tools for developers to use in your next coding project](https://pieces.medium.com/best-ai-tools-for-developers-to-use-in-your-next-coding-project-794fce6bfa42)
- [What is MCP? A Beginner’s Guide to Smarter AI](https://medium.com/h7w/what-is-mcp-a-beginners-guide-to-smarter-ai-bdd996f8b02e)
- [Understanding Model Context Protocol (MCP): A Beginner’s Guide](https://medium.com/@sailakkshmiallada/understanding-model-context-protocol-mcp-a-beginners-guide-70060304742d)
- [MCP Introduction](https://modelcontextprotocol.io/introduction)
- [MCP for beginners by Microsoft](https://github.com/microsoft/mcp-for-beginners)
## Authors
- [@devcaress](https://www.github.com/devcaress)
## 2. In-Tree Documentation Chapters (DevCaress/guia-entrevistas-de-programacion)
## File: README.md
# Guía para entrevistas técnicas como Ingeniero de software
## Navigable website
This guide is now published as an Astro static site. The README preserves the historical index, while the browsable content lives in `src/content/guide/**/*.mdx`.
Visit the guide at [caress.dev/guia](https://caress.dev/guia).
### Local development
Use Node.js `>=22.12.0`.
```bash
npm install
npm run dev
```
### Validation
```bash
npm run build
npm run test
npm run test:e2e
npm run verify:content
npm run check:links
```
`npm run verify:content` compares the README sections and references against the migrated MDX files. `npm run check:links` validates URL syntax; to verify external availability over the network, run `npm run check:links -- --fetch`.
### Add content
Each new section must be added as an `.mdx` file in `src/content/guide/` and include `title`, `description`, `category`, `sidebar.order` and `references`. Original references should be defined in the frontmatter, while custom examples can be added using `examples` or as MDX code blocks within the content.
## Contributing
Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) for the local setup, branch and commit conventions, content rules, and required validation.
- Suggest a new topic or resource with the [content suggestion issue template](.github/ISSUE_TEMPLATE/content_suggestion.yml), or report a problem with the [bug report template](.github/ISSUE_TEMPLATE/bug_report.yml).
- Open focused pull requests using the [PR template](.github/pull_request_template.md). Link the related issue with `Closes #` when applicable.
- For content changes, run `npm run verify:content` and `npm run check:links`; run `npm run check:links -- --fetch` to verify that reference websites respond.
- Project skills are available in `.claude/skills/`: `create-content` for new guide pages, `create-commit` for focused Conventional Commits, and `create-pr` for preparing draft pull requests.
## Índice
- [Guía para entrevistas técnicas como Ingeniero de software](#guía-para-entrevistas-técnicas-como-ingeniero-de-software)
- [Índice](#índice)
- [Buenas prácticas](#buenas-prácticas)
- [Principios SOLID](#principios-solid)
- [Principios DRY, KISS, YAGNI, GRASP y LoD](#dry)
- [Clean Code](#clean-code)
- [Clean architecture](#clean-architecture)
- [Buenas prácticas en...](#buenas-practicas-en)
- [Angular](#angular)
- [C++](#c)
- [Dart](#dart)
- [Django](#django)
- [Flutter](#flutter)
- [Java](#java)
- [Javascript](#javascript)
- [PHP](#php)
- [Python](#python)
- [React.js](#reactjs)
- [Typescript](#typescript)
- [Vue.js](#vuejs)
- [Algoritmos y estructuras de datos](#algoritmos-y-estructuras-de-datos)
- [Complejidad algorítmica](#complejidad-algorítmica)
- [Algoritmos](#algoritmos)
- [Estructuras de datos](#estructuras-de-datos)
- [Practicar algoritmos y estructuras de datos](#practicar-algoritmos-y-estructuras-de-datos)
- [Visualizar algoritmos](#visualizar-algoritmos)
- [Visualgo](#visualgo)
- [Patrones de diseño](#patrones-de-diseño)
- [Diseño de sistemas](#diseño-de-sistemas)
- [Bases de datos](#bases-de-datos)
- [ORM's](#orms)
- [Arquitectura de Software](#arquitectura-de-software)
- [Frontend](#frontend)
- [React Clean Architecture](#react-clean-architecture)
- [Vue JS Clean Architecture](#vue-js-clean-architecture)
- [Backend](#backend)
- [Clean Architecture Express JS](#clean-architecture-express-js)
- [Clean Architecture Java](#clean-architecture-java)
- [Clean Architecture PHP](#clean-architecture-php)
- [Clean Architecture Python](#clean-architecture-python)
- [Preguntas más frecuentes](#preguntas-más-frecuentes)
- [Preguntas de Frontend](#preguntas-de-frontend)
- [Preguntas de Backend](#preguntas-de-backend)
- [Control de Versiones](#control-de-versiones)
- [Workflows](#workflows)
- [CI/CD](#cicd)
- [Contenedores y Orquestación](#contenedores-y-orquestación)
- [IA para desarrolladores](#ia-para-desarrolladores)
- [Authors](#authors)
## Buenas prácticas
### Principios SOLID
- [SOLID en C++ con implemetación y ejemplos - Inglés](https://medium.com/@aleksandra_shershen/solid-principles-implementation-and-examples-in-c-99f0d7e3e868)
- [SOLID en C++ - Inglés](https://nexwebsites.com/blog/solid-design-principles/)
- [SOLID en Java con Ejemplos - Inglés](https://www.javaguides.net/2020/01/solid-principles-in-java-with-examples.html)
- [SOLID en Java - Inglés](https://medium.com/@shavi22/solid-principles-in-java-cf9f5b167600)
- [SOLID en Javascript Vanilla - Inglés](https://github.com/ryanmcdermott/clean-code-javascript#openclosed-principle-ocp)
- [SOLID en Python - Inglés](https://realpython.com/solid-principles-python/)
- [SOLID en React.JS - Inglés](https://medium.com/docler-engineering/applying-solid-to-react-ca6d1ff926a4)
- [SOLID en Vue.JS - Inglés](https://medium.com/@moein.mirkiani/solid-principles-in-vue-29ecc988f968)
*********
### DRY
- [Demystifying Software Development Principles: DRY, KISS, YAGNI, SOLID, GRASP, and LoD](https://levelup.gitconnected.com/demystifying-software-development-principles-dry-kiss-yagni-solid-grasp-and-lod-8606113c0313)
*********
### Clean Code
- [Clean Code en Java - Español](https://github.com/alansastre/java-clean-code)
- [Clean Code en Java - Inglés](https://github.com/JuanCrg90/Clean-Code-Notes)
- [Clean Code en Javascript - Español](https://github.com/andersontr15/clean-code-javascript-es)
- [Clean Code en Javascript - Inglés](https://github.com/ryanmcdermott/clean-code-javascript#openclosed-principle-ocp)
- [Clean Code en Python - Español](https://github.com/sryvcr/clean-code-python-es)
- [Clean Code en Python - Inglés](https://github.com/zedr/clean-code-python)
**********
### Clean architecture
## Buenas prácticas en:
### Angular
- [10 Best Practices for Building Scalable Angular Applications — With examples](https://medium.com/@mattias.trnqvist/10-best-practices-for-building-scalable-angular-applications-with-examples-efdfe2a5b4e8)
- [Angular Optimization and Best Practices](https://www.tatvasoft.com/blog/angular-optimization-and-best-practices/)
- [Angular coding style guide](https://angular.io/guide/styleguide)
### C++
- [Collecting the best C++ practices](https://medium.com/@Code_Analysis/collecting-the-best-c-practices-4b867006849f)
- [Boost Your C++ Coding Skills: 5 Tips For Faster, Better Code](https://programminggyan.com/5-cpp-tips-for-faster-better-code/)
### Dart
- [Effective Dart: Design](https://dart.dev/effective-dart/design)
### Django
- [Django Best Practices 2022](https://www.linkedin.com/pulse/django-best-practices-2022-akshata-murudkar/)
- [Django Model Best Practices: Tips and Tricks for Clean and Efficient Code](https://medium.com/@schopade333/django-model-best-practices-c5c8a142dfc)
- [The 4 Clean Code Principles in Django](https://betterprogramming.pub/clean-code-principles-in-django-b0563a4e12f5)
### Flutter
- [Flutter Best Practices](https://itnext.io/flutter-best-practices-part-1-e89467ea4823)
- [The Dart Way: Best Coding Practices](https://articles.wesionary.team/the-dart-way-best-coding-practices-6ac693736090)
- [10 Best Practices Every Flutter Developer Should Follow](https://somniosoftware.com/post/top-10-flutter-best-practices)
### Java
- [Java Best Practices (recomendado)](https://github.com/in28minutes/java-best-practices)
- [Java Best Practices](https://www.developer.com/languages/javascript/java-best-practices/)
- [10 best practices in Java](https://medium.com/@alexthedev/10-best-practices-in-java-dc0b06dda858)
### Javascript
- [Guidelines For Writing JavaScript Code Examples](https://developer.mozilla.org/en-US/docs/MDN/Writing_guidelines/Writing_style_guide/Code_style_guide/JavaScript)
- [JavaScript Best Practices by W3.org](https://www.w3.org/wiki/JavaScript_best_practices)
- [JavaScript Best Practices by W3Schools](https://www.w3schools.com/js/js_best_practices.asp)
- [Airbnb JavaScript Style Guide()](https://github.com/airbnb/javascript)
- [30 JavaScript Best Practices for Beginners](https://code.tutsplus.com/24-javascript-best-practices-for-beginners--net-5399t)
### PHP
- [PHP Programming Best Practices and Coding Styles](https://medium.com/techlaboratory/php-programming-best-practices-and-coding-styles-e43234446fd3)
- [PHP Best Practices](https://phpbestpractices.org/)
### Python
- [Code Style in Python](https://docs.python-guide.org/writing/style/)
- [Python Best Practices to Follow in 2023](https://aglowiditsolutions.com/blog/python-best-practices/)
### React.js
- [10 Best Practices for Writing Clean React Code](https://www.turing.com/kb/writing-clean-react-code)
- [React Best Practices – Tips for Writing Better React Code in 2022](https://www.freecodecamp.org/news/best-practices-for-react/#tips-to-help-you-write-better-react-code-the-cherries-on-top)
- [React best practices and patterns to reduce code](https://devsmitra.medium.com/react-best-practices-and-patterns-to-reduce-code-3170f1913b26)
- [React Best Practices Every Developer Have to Follow in 2023](https://technostacks.com/blog/react-best-practices/)
### Typescript
- [TypeScript best practices by AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/typescript-best-practices.html)
- [TypeScript Best Practices 2021](https://medium.com/@warkiringoda/typescript-best-practices-2021-a58aee199661)
### Vue.js
- [12 VueJS Best Practices](https://learnvue.co/articles/vue-best-practices)
- [Vue Patterns](https://learn-vuejs.github.io/vue-patterns/patterns/#component-declaration)
## Algoritmos y estructuras de datos
### Complejidad algorítmica
- [¿Qué es la complejidad algorítmica y con qué se come?](https://medium.com/@joseguillermo_/qué-es-la-complejidad-algorítmica-y-con-qué-se-come-2638e7fd9e8c)
- [Introducción a Big-O Notation](https://medium.com/nowports-tech/introducción-a-big-o-notation-95ecca8bd866)
- [Analysis of Algorithms | Big-O analysis](https://www.geeksforgeeks.org/analysis-algorithms-big-o-analysis/)
### Algoritmos
- [Algoritmos en C](https://github.com/TheAlgorithms/C)
- [Algoritmos en C++](https://github.com/TheAlgorithms/C-Plus-Plus)
- [Algoritmos en Go](https://github.com/TheAlgorithms/Go)
- [Algoritmos en Java](https://github.com/TheAlgorithms/Java)
- [Algoritmos en Javascript](https://github.com/TheAlgorithms/JavaScript)
- [Algoritmos en PHP](https://github.com/TheAlgorithms/PHP)
- [Algoritmos en Python](https://github.com/TheAlgorithms/Python)
- [Algoritmos en Typescript](https://github.com/TheAlgorithms/TypeScript)
### Estructuras de datos
- [Data Structures using C | What are the Data Structure in C and How it works?](https://www.mygreatlearning.com/blog/data-structures-using-c/)
- [C++'s Built-In Data Structures](https://www.codecademy.com/learn/c-plus-plus-for-programmers/modules/cpp-built-in-data-structures/cheatsheet)
- [Top Data Structures & Algorithms in Java That You Need to Know](https://medium.com/edureka/data-structures-algorithms-in-java-d27e915db1c5)
- [JavaScript Algorithms and Data Structures](https://github.com/trekhleb/javascript-algorithms)
- [Discovering PHP Data Structures: Arrays, Linked Lists, and Binary Trees](https://medium.com/@london.lingo.01/discovering-php-data-structures-arrays-linked-lists-and-binary-trees-501566f83bad)
- [Efficient data structures for PHP 7](https://medium.com/@rtheunissen/efficient-data-structures-for-php-7-9dda7af674cd)
- [Python Data Structures](https://www.geeksforgeeks.org/python-data-structures/)
### Practicar algoritmos y estructuras de datos
- [CodeWars](https://www.codewars.com/)
- [LeetCode](https://leetcode.com)
- [HackerRank](https://www.hackerrank.com/)
- [CoderByte](https://coderbyte.com/)
- [Exercism](https://exercism.org/)
## Visualizar algoritmos
### [Visualgo](https://visualgo.net/)
En esta web podrás ver como funcionan de manera visual los siguientes algoritmos:
- Sorting
- Bubble Sort
- Selection Sort
- Insertion Sort
- Merge Sort
- Quick Sort
- Random Quick Sort
- Counting Sort
- Radix Sort
- Linked List
- Stack
- Queue
- Doubly Linked List
- Deque
- Hash Tables
- Linear Probing
- Quadratic Probing
- Double Hashing
- Separate Chaining
- Binary Heap
- Binary Search Tree
- AVL Tree
## Patrones de diseño
[Patrones de diseño Español (Recomendación personal)](https://refactoring.guru/es/design-patterns)
[Patrones de diseño en Javascript](https://www.patterns.dev/posts)
- Patrones Creacionales
- Singleton
- Factory Method
- Abstract Factory
- Builder
- Prototype
- Patrones Estructurales
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
- Patrones de comportamiento
- Chain of Responsibility
- Command
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Interpreter
- Visitor
## Diseño de sistemas
- [System Design Questions + Solutions DB](https://systemdesign.io)
- [System-design-interview](https://github.com/checkcheckzz/system-design-interview)
- [System Design Interview Questions and Answers [2025]](https://www.geeksforgeeks.org/system-design/top-10-system-design-interview-questions-and-answers)
- [A Beginner’s Guide to System Design](https://medium.com/@sentalkssane/a-beginners-guide-to-system-design-76d64689788b)
- [11 Most-Asked System Design Interview Questions (+ answers)](https://igotanoffer.com/blogs/tech/system-design-interviews)
- [Top 50 System Design Interview Questions for 2025](https://dev.to/somadevtoo/top-50-system-design-interview-questions-for-2024-5dbk)
- [System Design Interview Questions](https://www.interviewbit.com/system-design-interview-questions)
- [System Design CheatSheet for Interview](https://medium.com/javarevisited/system-design-cheatsheet-4607e716db5a)
## Bases de datos
- [20 ejemplos de consultas SQL básicas para principiantes: Una visión completa](https://learnsql.es/blog/20-ejemplos-de-consultas-sql-basicas-para-principiantes-una-vision-completa/)
- [Top 50+ Database Interview Questions And Answers](https://www.softwaretestinghelp.com/database-interview-questions/)
- [Top 50 Database Interview Questions and Answers (2024)](https://www.guru99.com/database-interview-questions.html)
- [Choosing the Best Database: SQL vs NoSQL](https://medium.com/codex/choosing-the-best-database-sql-vs-nosql-a816a7ec09fc)
### ORM's
- [¿Qué es un ORM?](https://wildpasco.medium.com/qué-es-un-orm-backend-bee59674e1d0)
- [Introducción a Mongoose para MongoDB](https://www.freecodecamp.org/espanol/news/introduccion-a-mongoose-para-mongodb/)
- [The Ultimate Guide To Get Started With Sequelize ORM](https://levelup.gitconnected.com/the-ultimate-guide-to-get-started-with-sequelize-orm-238588d3516e)
## Arquitectura de Software
- [La guía definitiva de la arquitectura de software](https://medium.com/@ktufernando/la-guía-definitiva-de-la-arquitectura-del-software-f419db9c6bf7)
- [Entendiendo a la arquitectura limpia](https://nescalro.medium.com/entendiendo-a-la-arquitectura-limpia-7877ad3a0a47)
- [Los 10 patrones comunes de arquitectura de software](https://medium.com/@maniakhitoccori/los-10-patrones-comunes-de-arquitectura-de-software-d8b9047edf0b)
- [Arquitectura Hexagonal](https://medium.com/@edusalguero/arquitectura-hexagonal-59834bb44b7f)
- [Domain Driven Design: principios, beneficios y elementos - Primera Parte](https://medium.com/@jonathanloscalzo/domain-driven-design-principios-beneficios-y-elementos-primera-parte-aad90f30aa35)
### Frontend
- [Arquitectura Hexagonal en el FrontEnd](https://softwarecrafters.io/react/arquitectura-hexagonal-frontend)
- [Arquitecturas frontend: "Enfoque "modular simple](https://codigoencasa.com/arquitecturas-frontend-enfoque-modular-simple/)
- [A Comprehensive Guide to Modern Frontend Architecture Patterns](https://medium.com/@johnadjanohoun/a-comprehensive-guide-to-modern-frontend-architecture-patterns-eb39debbd503)
- [Alejándonos de ReactJs y VueJs en frontend usando Clean Architecture](https://xurxodev.com/frontend-clean_architecture/)
- [La Arquitectura Hexagonal: un enfoque para desarrollar aplicaciones robustas en React, Angular y Vue con ejemplos de código](https://dev.to/dennysjmarquez/la-arquitectura-hexagonal-un-enfoque-para-desarrollar-aplicaciones-robustas-en-react-angular-y-vue-con-ejemplos-de-codigo-l4l)
- [A Definitive Guide to Front-end Clean Architecture](https://eduardo-ottaviani.medium.com/a-definitive-guide-to-front-end-clean-architecture-3a62418becb4)
- [Introducción a la arquitectura de microfrontends con un ejemplo en React.](https://www.paradigmadigital.com/dev/introduccion-arquitectura-microfrontends-ejemplo-react/)
- [MicroFrontEnd](https://devjaime.medium.com/microfrontend-4eecf1498cd1)
- [A Comprehensive Guide to Micro Frontend Architecture](https://medium.com/appfoster/a-comprehensive-guide-to-micro-frontend-architecture-cc0e31e0c053)
- [Microservices vs. Micro Frontends: What's the Difference?](https://dev.to/pavanbelagatti/microservices-vs-micro-frontends-whats-the-difference-33je)
#### React Clean Architecture
- [Clean Architecture With React](https://betterprogramming.pub/clean-architecture-with-react-cc097a08b105)
- [Clean Architecture: Applying with React](https://dev.to/rubemfsv/clean-architecture-applying-with-react-40h6)
- [React Clean Architecture](https://github.com/eduardomoroni/react-clean-architecture)
- [Clean Architecture: Typescript and React](https://paulallies.medium.com/clean-architecture-typescript-and-react-8e509098abfe)
#### Vue JS Clean Architecture
- [Clean Architecture with VueJS](https://www.linkedin.com/pulse/clean-architecture-vuejs-ahsan-riaz/)
- [Clean Architecture VueJS](https://github.com/thanhchungbtc/vue-shopping-clean-architecture)
- [Vue Clean Architecture Github](https://github.com/smotastic/vue-clean-architecture)
- [Separating business logic from UI frameworks (React, Vue, Svelte, Angular, etc.) using clean architecture pattern](https://github.com/shamscorner/bloc-vue-3-clean-pattern)
### Backend
#### Clean Architecture Express JS
- [Clean Architecture en Node y Express](https://www.linkedin.com/pulse/clean-architecture-en-node-y-express-odannys-de-la-cruz/?originalSubdomain=es)
- [Clean Architecture in Node.js](https://medium.com/@ben.dev.io/clean-architecture-in-node-js-39c3358d46f3)
- [Node.js Clean Architecture](https://github.com/panagiop/node.js-clean-architecture)
#### Clean Architecture Java
- [Clean Architecture en la vida real JAVA](https://medium.com/@soyjuanmalopez/clean-architecture-en-la-vida-real-9da710e5ad4a)
- [Clean Architecture with Spring Boot: A good idea?](https://medium.com/@viniciusromualdobusiness/clean-architecture-with-spring-boot-a-good-idea-d6f97e450130)
#### Clean Architecture PHP
- [Clean Architecture with PHP](https://medium.com/unil-ci-software-engineering/clean-architecture-with-php-22de915a6c50)
- [Clean Architecture with Laravel](https://dev.to/bdelespierre/how-to-implement-clean-architecture-with-laravel-2f2i)
#### Clean Architecture Python
- [Understanding clean architecture in Python — Deep dive on the code](https://medium.com/@surajit.das0320/understanding-clean-architecture-in-python-deep-dive-on-the-code-17141dc5761a)
- [Python Clean Architecture](https://github.com/pcah/python-clean-architecture)
- [Clean Architecture in Django](https://medium.com/21buttons-tech/clean-architecture-in-django-d326a4ab86a9)
- [Django Clean Architecture](https://github.com/jacob-y/django-clean-architecture)
## Preguntas más frecuentes
- [Kill Your Tech Interview (recomendado)](https://www.fullstack.cafe)
- [Angular Interview questions](https://github.com/sudheerj/angular-interview-questions)
- [Django Interview questions](https://github.com/Ujjawal-Anand/django-interview)
- [Java Interview questions](https://github.com/Devinterview-io/java-interview-questions)
- [Java Spring Interview questions](https://github.com/altafjava/spring-interview-questions-answers)
- [Javascript Interview questions](https://github.com/sudheerj/javascript-interview-questions)
- [PHP Interview questions](https://github.com/Devinterview-io/php-interview-questions)
- [Python Interview questions](https://github.com/Devinterview-io/python-interview-questions)
- [React Interview questions](https://github.com/sudheerj/reactjs-interview-questions)
- [SQL Interview questions](https://github.com/kansiris/SQL-interview-questions/tree/master)
- [Cracking the SQL interview](https://github.com/xoraus/CrackingTheSQLInterview)
- [Vue Interview questions](https://github.com/sudheerj/vuejs-interview-questions)
### Preguntas de Frontend
- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/introduction/)
- [52 Frontend Interview Questions - JavaScript](https://dev.to/m_midas/52-frontend-interview-questions-javascript-59h6)
- [Front-end Developer Interview Questions](https://github.com/h5bp/Front-end-Developer-Interview-Questions?tab=readme-ov-file)
- [11 senior front end developer interview questions and answers](https://anywhere.epam.com/en/blog/senior-front-end-developer-interview-questions)
- [15 Frontend Developer Interview Questions (2023)](https://4dayweek.medium.com/15-frontend-developer-interview-questions-2023-91c7a9a628c1)
- [Frontend Interview Questions [Top 250+]](https://frontendinterviewquestions.medium.com/frontend-interview-questions-top-250-92ba361cbbbd)
### Preguntas de Backend
- [Top 100 back-end developer interview questions and answers 2023](https://www.turing.com/interview-questions/back-end)
- [Top 18 backend developer interview questions answered](https://anywhere.epam.com/en/blog/top-18-backend-developer-interview-questions-answered)
- [Backend SWE interview questions](https://github.com/tamhoang1412/backend-swe-interview-questions)
## Control de Versiones
- [La guía para principiantes de Git y Github](https://www.freecodecamp.org/espanol/news/guia-para-principiantes-de-git-y-github/)
- [Git Avanzado: Comandos Avanzados Además de los Básicos](https://kinsta.com/es/blog/git-avanzado/)
- [Comparing Git workflows: What you should know](https://www.atlassian.com/git/tutorials/comparing-workflows)
### Workflows
- [Cinco Git Workflows para mejorar nuestros proyectos](https://www.babelgroup.com/es/Media/Blog/Abril-2021/Cinco-Git-Workflows-para-mejores-proyectos)
- [Git feature branch workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow)
- [Gitflow workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)
- [Forking workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow)
## CI/CD
- [Introducción a CI/CD](https://medium.com/@diego.coder/introducción-a-ci-cd-be79d0beafad)
- [Comprensión de la CI/CD by AWS](https://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/strategy-cicd-litmus/understanding-cicd.html)
- [What is CI/CD?](https://www.freecodecamp.org/news/what-is-ci-cd/)
- [What is a DevOps pipeline?](https://resources.github.com/devops/pipeline/)
## Contenedores y Orquestación
- [¿Qué son los contenedores?](https://www.hpe.com/mx/es/what-is/containers.html)
- [¿Qué es un contenedor? by Microsoft](https://azure.microsoft.com/es-mx/resources/cloud-computing-dictionary/what-is-a-container)
- [Contenedores y Orquestación (Recomendado)](https://medium.com/@villamorosjuan/contenedores-y-orquestación-transformando-la-gestión-de-aplicaciones-en-producción-0f2ebbd8aac5)
## IA para desarrolladores
- [The Ultimate List of AI Concepts in AI for Absolute Beginners | And Let Me Know What You Want to Read About Next](https://medium.com/ai-for-absolute-beginners/the-ultimate-list-of-ai-concepts-in-ai-for-absolute-beginners-and-let-me-know-what-you-want-to-3edf24ce7c01)
- [25 Essential AI Concepts Every AI Developer Must Master](https://dev.to/devscriptor/25-essential-ai-concepts-every-ai-developer-must-master-4ddn)
- [Awesome AI-Powered Developer Tools](https://github.com/jamesmurdza/awesome-ai-devtools)
- [Best AI tools for developers to use in your next coding project](https://pieces.medium.com/best-ai-tools-for-developers-to-use-in-your-next-coding-project-794fce6bfa42)
- [What is MCP? A Beginner’s Guide to Smarter AI](https://medium.com/h7w/what-is-mcp-a-beginners-guide-to-smarter-ai-bdd996f8b02e)
- [Understanding Model Context Protocol (MCP): A Beginner’s Guide](https://medium.com/@sailakkshmiallada/understanding-model-context-protocol-mcp-a-beginners-guide-70060304742d)
- [MCP Introduction](https://modelcontextprotocol.io/introduction)
- [MCP for beginners by Microsoft](https://github.com/microsoft/mcp-for-beginners)
## Authors
- [@devcaress](https://www.github.com/devcaress)
---
## File: src/content/guide/algoritmos-y-estructuras-de-datos/algoritmos.mdx
---
title: "Algoritmos"
category: "Algoritmos y estructuras de datos"
section: "Fundamentos"
sidebar:
label: "Algoritmos"
order: 320
references:
- label: "Algoritmos en C"
url: "https://github.com/TheAlgorithms/C"
- label: "Algoritmos en C++"
url: "https://github.com/TheAlgorithms/C-Plus-Plus"
- label: "Algoritmos en Go"
url: "https://github.com/TheAlgorithms/Go"
- label: "Algoritmos en Java"
url: "https://github.com/TheAlgorithms/Java"
- label: "Algoritmos en Javascript"
url: "https://github.com/TheAlgorithms/JavaScript"
- label: "Algoritmos en PHP"
url: "https://github.com/TheAlgorithms/PHP"
- label: "Algoritmos en Python"
url: "https://github.com/TheAlgorithms/Python"
- label: "Algoritmos en Typescript"
url: "https://github.com/TheAlgorithms/TypeScript"
---
Esta seccion reune recursos y criterios de estudio sobre Algoritmos. Usa las referencias para profundizar y agrega ejemplos propios conforme avance la guia.
---
## File: src/content/guide/algoritmos-y-estructuras-de-datos/complejidad-algoritmica.mdx
---
title: "Complejidad algoritmica"
category: "Algoritmos y estructuras de datos"
section: "Fundamentos"
sidebar:
label: "Complejidad algoritmica"
order: 310
references:
- label: "¿Qué es la complejidad algorítmica y con qué se come?"
url: "https://medium.com/@joseguillermo_/qué-es-la-complejidad-algorítmica-y-con-qué-se-come-2638e7fd9e8c"
- label: "Introducción a Big-O Notation"
url: "https://medium.com/nowports-tech/introducción-a-big-o-notation-95ecca8bd866"
- label: "Analysis of Algorithms | Big-O analysis"
url: "https://www.geeksforgeeks.org/analysis-algorithms-big-o-analysis/"
- label: "Big-O Cheat Sheet"
url: "https://www.bigocheatsheet.com/"
- label: "freeCodeCamp — Big O Notation"
url: "https://www.freecodecamp.org/news/big-o-notation-why-it-matters-and-why-it-doesnt-1674cfa8a23c/"
- label: "Khan Academy — Asymptotic notation"
url: "https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/asymptotic-notation"
- label: "GeeksforGeeks — Time Complexity and Space Complexity"
url: "https://www.geeksforgeeks.org/time-complexity-and-space-complexity/"
- label: "MDN — Algorithm (Glossary)"
url: "https://developer.mozilla.org/en-US/docs/Glossary/Algorithm"
- label: "Introduction to Algorithms (CLRS), MIT Press"
url: "https://mitpress.mit.edu/9780262046305/introduction-to-algorithms/"
- label: "VisuAlgo — Visualizacion de algoritmos"
url: "https://visualgo.net/en"
---
import Callout from '../../../components/Callout.astro';
import CodeExample from '../../../components/CodeExample.astro';
La **complejidad algoritmica** mide como crece el consumo de recursos de un algoritmo (tiempo de ejecucion y memoria) a medida que aumenta el tamano de la entrada, que solemos llamar `n`. No nos dice cuantos segundos tarda un programa en una maquina concreta, sino como se comporta cuando los datos crecen: si duplicar la entrada duplica el trabajo, lo cuadruplica o lo dispara sin control.
Entender esto es clave porque te permite comparar dos soluciones sin depender del hardware, del lenguaje ni de micro-optimizaciones, y anticipar si un algoritmo seguira siendo viable con un millon de elementos. Es uno de los temas mas preguntados en entrevistas tecnicas.
## Que medimos: operaciones, no segundos
El tiempo de reloj depende de la CPU, del lenguaje, de la carga del sistema y hasta del compilador. Por eso, en lugar de medir segundos, contamos **operaciones basicas** (comparaciones, asignaciones, accesos) en funcion de `n`. Lo que nos interesa es la **tasa de crecimiento**: como escala ese conteo cuando `n` se vuelve grande.
Por ejemplo, recorrer una lista de `n` elementos hace del orden de `n` operaciones. Que cada iteracion cueste 3 o 5 instrucciones internas no cambia la idea central: el trabajo crece de forma proporcional a `n`.
## Notacion Big-O
**Big-O** describe la cota superior asintotica de un algoritmo: cuanto crece su costo en el **peor caso** cuando `n` tiende a infinito. Escribimos O(n), O(n^2), O(log n), etc. Para obtener el Big-O de un algoritmo se aplican dos reglas practicas:
- **Se ignoran las constantes**: O(2n) se simplifica a O(n), y O(n / 2) tambien es O(n). Las constantes no cambian la forma de la curva.
- **Se conserva solo el termino dominante**: O(n^2 + n + 100) se simplifica a O(n^2), porque para `n` grande el termino cuadratico domina a todos los demas.
Big-O (O) es la cota superior (peor caso). Big-Omega (Ω) es la cota inferior (mejor caso) y Big-Theta (Θ) es la cota ajustada, cuando el mejor y el peor caso crecen igual. En la practica y en entrevistas casi siempre se habla de Big-O, asumiendo el peor caso.
## Grafico de tasas de crecimiento
Este grafico compara como escalan las complejidades mas comunes. Mientras mas empinada es la curva, peor escala el algoritmo cuando crece la entrada `n`.
La siguiente tabla vuelve tangible esa diferencia: muestra el numero aproximado de operaciones para distintos tamanos de entrada.
| Notacion | Nombre | n = 10 | n = 100 | n = 1000 |
| --- | --- | --- | --- | --- |
| O(1) | Constante | 1 | 1 | 1 |
| O(log n) | Logaritmica | 3 | 7 | 10 |
| O(n) | Lineal | 10 | 100 | 1000 |
| O(n log n) | Linealitmica | 33 | 664 | 9966 |
| O(n^2) | Cuadratica | 100 | 10 000 | 1 000 000 |
| O(2^n) | Exponencial | 1024 | ~1.3 x 10^30 | enorme |
## Complejidad temporal (tiempo)
La complejidad temporal describe como crece el numero de operaciones en funcion de `n`. Estas son las clases mas comunes, de la mejor a la peor.
### O(1) — Constante
El costo no depende del tamano de la entrada: siempre hace la misma cantidad de trabajo. Acceder a un indice de un array o leer una clave de un objeto o `Map` es O(1).
```js
function firstElement(items) {
return items[0];
}
```
### O(log n) — Logaritmica
En cada paso se descarta la mitad de los datos, asi que el numero de pasos crece muy lentamente. El ejemplo clasico es la busqueda binaria sobre un array ordenado.
```js
function binarySearch(sortedItems, target) {
let low = 0;
let high = sortedItems.length - 1;
while (low <= high) {
const mid = Math.floor((low + high) / 2);
if (sortedItems[mid] === target) return mid;
if (sortedItems[mid] < target) low = mid + 1;
else high = mid - 1;
}
return -1;
}
```
### O(n) — Lineal
El trabajo crece de forma proporcional a `n`: un solo recorrido de la entrada. Buscar el maximo de una lista es O(n).
```js
function findMax(numbers) {
let max = numbers[0];
for (const value of numbers) {
if (value > max) max = value;
}
return max;
}
```
### O(n log n) — Linealitmica
Es el mejor costo posible para ordenar por comparaciones. Algoritmos como merge sort o el `sort` nativo del lenguaje son O(n log n): hacen `log n` niveles de division y `n` trabajo en cada nivel.
```js
function sortAscending(numbers) {
return [...numbers].sort((a, b) => a - b);
}
```
### O(n^2) — Cuadratica
Aparece con bucles anidados que recorren la entrada dentro de otro recorrido de la entrada. Comparar cada elemento con todos los demas para buscar duplicados de forma ingenua es O(n^2).
```js
function hasDuplicate(items) {
for (let i = 0; i < items.length; i++) {
for (let j = i + 1; j < items.length; j++) {
if (items[i] === items[j]) return true;
}
}
return false;
}
```
### O(2^n) — Exponencial
El costo se duplica con cada elemento adicional. La version recursiva ingenua de Fibonacci recalcula los mismos valores una y otra vez, generando un arbol de llamadas que crece exponencialmente. Es inviable incluso para entradas moderadas.
```js
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
```
La complejidad factorial O(n!) es aun peor que la exponencial. Aparece al generar todas las permutaciones de una entrada o en soluciones de fuerza bruta al problema del viajante. Con solo 15 elementos ya supera el billon de operaciones.
## Complejidad espacial (memoria)
La complejidad espacial mide cuanta **memoria adicional** necesita un algoritmo mas alla de la entrada. Se suele reportar el **espacio auxiliar**: las estructuras nuevas que creas, mas la memoria del stack por la recursion. La entrada en si no siempre se cuenta.
### O(1) espacio
El algoritmo usa una cantidad fija de memoria extra sin importar el tamano de la entrada, tipicamente unas pocas variables.
```js
function sum(numbers) {
let total = 0;
for (const value of numbers) {
total += value;
}
return total;
}
```
### O(n) espacio
La memoria extra crece con la entrada, por ejemplo al construir una nueva estructura del tamano de `n`.
```js
function double(numbers) {
const result = [];
for (const value of numbers) {
result.push(value * 2);
}
return result;
}
```
### La recursion tambien cuesta memoria
Cada llamada recursiva pendiente ocupa un marco en el call stack. Una recursion lineal como la siguiente usa O(n) de memoria en el stack, aunque no cree ninguna estructura de datos explicita.
```js
function sumTo(n) {
if (n === 0) return 0;
return n + sumTo(n - 1);
}
```
A menudo se puede cambiar tiempo por memoria y viceversa. La memoizacion, por ejemplo, guarda resultados ya calculados en una tabla: convierte el Fibonacci exponencial O(2^n) en uno lineal O(n) en tiempo, a costa de O(n) de memoria. Elegir el balance correcto depende del problema y de las restricciones.
## Mejor, peor y caso promedio
Un mismo algoritmo puede comportarse distinto segun la entrada concreta. Tomemos una busqueda lineal:
- **Mejor caso** — el elemento buscado esta en la primera posicion: O(1).
- **Peor caso** — el elemento esta al final o no existe: O(n).
- **Caso promedio** — en promedio se recorre la mitad de la lista: O(n).
Cuando alguien dice "la complejidad de este algoritmo es O(n)" casi siempre se refiere al **peor caso**, porque es la garantia mas util: nos dice que tan mal puede ir como maximo.
## Como analizar tu codigo
Algunas reglas practicas para estimar el Big-O de un fragmento de codigo:
- **Bucle simple** sobre la entrada: O(n).
- **Bucles anidados** sobre la entrada: se multiplican, dos niveles dan O(n^2).
- **Dividir el problema a la mitad** en cada paso: aparece un factor log n (como en la busqueda binaria).
- **Operaciones consecutivas**: se suman y luego se conserva el termino dominante (O(n) + O(n^2) es O(n^2)).
- **Recursion**: dibuja el arbol de llamadas; su tamano total es la complejidad temporal, y su profundidad, el costo de memoria en el stack.
Indica siempre la complejidad de tiempo y de espacio de tu solucion, y aclara que estas describiendo el peor caso. Si tu primer enfoque es O(n^2), menciona en voz alta si existe una version O(n log n) o O(n) usando una estructura auxiliar como un hash set. Justificar el analisis suele valer tanto como llegar a la respuesta.
---
## File: src/content/guide/algoritmos-y-estructuras-de-datos/estructuras-de-datos.mdx
---
title: "Estructuras de datos"
category: "Algoritmos y estructuras de datos"
section: "Fundamentos"
sidebar:
label: "Estructuras de datos"
order: 330
references:
- label: "Data Structures using C | What are the Data Structure in C and How it works?"
url: "https://www.mygreatlearning.com/blog/data-structures-using-c/"
- label: "C++'s Built-In Data Structures"
url: "https://www.codecademy.com/learn/c-plus-plus-for-programmers/modules/cpp-built-in-data-structures/cheatsheet"
- label: "Top Data Structures & Algorithms in Java That You Need to Know"
url: "https://medium.com/edureka/data-structures-algorithms-in-java-d27e915db1c5"
- label: "JavaScript Algorithms and Data Structures"
url: "https://github.com/trekhleb/javascript-algorithms"
- label: "Discovering PHP Data Structures: Arrays, Linked Lists, and Binary Trees"
url: "https://medium.com/@london.lingo.01/discovering-php-data-structures-arrays-linked-lists-and-binary-trees-501566f83bad"
- label: "Efficient data structures for PHP 7"
url: "https://medium.com/@rtheunissen/efficient-data-structures-for-php-7-9dda7af674cd"
- label: "Python Data Structures"
url: "https://www.geeksforgeeks.org/python-data-structures/"
---
Esta seccion reune recursos y criterios de estudio sobre Estructuras de datos. Usa las referencias para profundizar y agrega ejemplos propios conforme avance la guia.
---
## File: src/content/guide/algoritmos-y-estructuras-de-datos/practicar-algoritmos.mdx
---
title: "Practicar algoritmos"
category: "Algoritmos y estructuras de datos"
section: "Practica"
sidebar:
label: "Practicar algoritmos"
order: 340
references:
- label: "CodeWars"
url: "https://www.codewars.com/"
- label: "LeetCode"
url: "https://leetcode.com"
- label: "HackerRank"
url: "https://www.hackerrank.com/"
- label: "CoderByte"
url: "https://coderbyte.com/"
- label: "Exercism"
url: "https://exercism.org/"
---
Esta seccion reune recursos y criterios de estudio sobre Practicar algoritmos. Usa las referencias para profundizar y agrega ejemplos propios conforme avance la guia.
---
## File: src/content/guide/algoritmos-y-estructuras-de-datos/visualgo.mdx
---
title: "Visualgo"
category: "Algoritmos y estructuras de datos"
section: "Visualizacion"
sidebar:
label: "Visualgo"
order: 350
references:
- label: "Visualgo"
url: "https://visualgo.net/"
---
En esta web podrás ver como funcionan de manera visual los siguientes algoritmos:
- Sorting
- Bubble Sort
- Selection Sort
- Insertion Sort
- Merge Sort
- Quick Sort
- Random Quick Sort
- Counting Sort
- Radix Sort
- Linked List
- Stack
- Queue
- Doubly Linked List
- Deque
- Hash Tables
- Linear Probing
- Quadratic Probing
- Double Hashing
- Separate Chaining
- Binary Heap
- Binary Search Tree
- AVL Tree
---
## File: src/content/guide/buenas-practicas/clean-architecture.mdx
---
title: "Clean Architecture"
category: "Buenas practicas"
section: "Arquitectura"
sidebar:
label: "Clean Architecture"
order: 40
references:
- label: "The Clean Architecture — Robert C. Martin (blog original)"
url: "https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"
- label: "Clean Architecture: A Craftsman's Guide to Software Structure and Design"
url: "https://www.oreilly.com/library/view/clean-architecture-a/9780134494272/"
- label: "The Dependency Rule explained"
url: "https://khalilstemmler.com/wiki/dependency-rule/"
---
**Clean Architecture** es una propuesta de Robert C. Martin (Uncle Bob) para organizar el codigo en capas concentricas, de forma que la logica de negocio quede aislada de detalles como el framework web, la base de datos o la UI. No es un framework ni una libreria: es un conjunto de reglas sobre **hacia donde pueden apuntar las dependencias**.
---
## Las capas
De adentro hacia afuera:
1. **Entities** — reglas de negocio globales de la aplicacion (objetos y logica que existirian aunque cambiaras de framework o de base de datos).
2. **Use Cases** — reglas de negocio especificas de la aplicacion; orquestan las entities para cumplir un caso de uso concreto.
3. **Interface Adapters** — controladores, presenters y gateways que traducen datos entre los use cases y el mundo exterior (HTTP, CLI, etc.).
4. **Frameworks & Drivers** — la capa mas externa: framework web, ORM, driver de base de datos, UI. Aqui vive todo lo que es "detalle", no negocio.
## La regla de dependencia
> Las dependencias del codigo fuente solo pueden apuntar **hacia adentro**.
Una capa interna nunca debe conocer nada de una capa externa. Las **Entities** no saben que existe una base de datos; los **Use Cases** no saben si los datos llegan por HTTP o por CLI. Cuando una capa interna necesita algo de afuera (por ejemplo, persistir datos), define una **interfaz (puerto)** en su propia capa, y la capa externa la implementa. Esto se apoya en el **Dependency Inversion Principle** (la "D" de SOLID).
## Violacion de la regla
```js
// El caso de uso depende directamente de un detalle: el ORM y el framework HTTP
const UserModel = require("../infra/orm/UserModel"); // Sequelize
class RegisterUserUseCase {
async execute(req, res) {
// logica de negocio mezclada con validacion HTTP y con el ORM
if (!req.body.email.includes("@")) {
return res.status(400).json({ error: "email invalido" });
}
const user = await UserModel.create({ email: req.body.email });
return res.status(201).json(user);
}
}
```
Este caso de uso no se puede probar sin levantar Express ni sin una base de datos real, y no se puede reutilizar si mañana el registro llega por un job en background en vez de HTTP.
## Aplicando Clean Architecture
```js
// --- Entities: reglas de negocio puras, sin dependencias externas ---
class User {
constructor(email) {
if (!email.includes("@")) {
throw new Error("email invalido");
}
this.email = email;
}
}
// --- Use Cases: define el puerto que necesita, no la implementacion ---
// UserRepository es una interfaz (puerto) que vive en esta capa
class RegisterUserUseCase {
constructor(userRepository) {
this.userRepository = userRepository; // depende de una abstraccion
}
async execute(email) {
const user = new User(email);
await this.userRepository.save(user);
return user;
}
}
// --- Interface Adapters: implementa el puerto y traduce HTTP <-> caso de uso ---
class SequelizeUserRepository {
async save(user) {
await UserModel.create({ email: user.email });
}
}
class RegisterUserController {
constructor(registerUserUseCase) {
this.registerUserUseCase = registerUserUseCase;
}
async handle(req, res) {
try {
const user = await this.registerUserUseCase.execute(req.body.email);
return res.status(201).json(user);
} catch (err) {
return res.status(400).json({ error: err.message });
}
}
}
// --- Frameworks & Drivers: composicion, el unico lugar que conoce Express y Sequelize ---
const useCase = new RegisterUserUseCase(new SequelizeUserRepository());
const controller = new RegisterUserController(useCase);
app.post("/users", (req, res) => controller.handle(req, res));
```
Ahora `RegisterUserUseCase` se puede probar con un `UserRepository` falso en memoria, sin Express ni base de datos real, y `SequelizeUserRepository` se puede reemplazar por cualquier otra implementacion sin tocar la logica de negocio.
## Errores comunes
- **"Capas" que son solo carpetas**: crear carpetas `entities/`, `usecases/`, `adapters/` no basta si el codigo de adentro sigue importando cosas de afuera (por ejemplo, un use case que importa directamente el modelo de Sequelize).
- **Sobre-ingenieria en proyectos pequeños**: para un script o un CRUD trivial, el costo de las capas e interfaces puede superar el beneficio. Clean Architecture rinde cuando la logica de negocio es compleja o el proyecto va a vivir mucho tiempo.
- **Confundir Clean Architecture con "usar controladores y servicios"**: tener un `UserService` no es Clean Architecture si ese servicio sigue dependiendo directamente de Express o del ORM.
## Resumen
- La regla central es una sola: **las dependencias apuntan hacia adentro**, nunca hacia afuera.
- Las capas internas (Entities, Use Cases) definen **puertos**; las capas externas los implementan.
- El beneficio principal es poder **probar la logica de negocio sin infraestructura real** y poder **cambiar frameworks o bases de datos** sin reescribir el negocio.
- No es gratis: aplica el nivel de capas segun la complejidad y vida esperada del proyecto.
---
## File: src/content/guide/buenas-practicas/clean-code.mdx
---
title: "Clean Code"
category: "Buenas practicas"
section: "Calidad de codigo"
sidebar:
label: "Clean Code"
order: 30
references:
- label: "Clean Code en Java - Español"
url: "https://github.com/alansastre/java-clean-code"
- label: "Clean Code en Java - Inglés"
url: "https://github.com/JuanCrg90/Clean-Code-Notes"
- label: "Clean Code en Javascript - Español"
url: "https://github.com/andersontr15/clean-code-javascript-es"
- label: "Clean Code en Javascript - Inglés"
url: "https://github.com/ryanmcdermott/clean-code-javascript#openclosed-principle-ocp"
- label: "Clean Code en Python - Español"
url: "https://github.com/sryvcr/clean-code-python-es"
- label: "Clean Code en Python - Inglés"
url: "https://github.com/zedr/clean-code-python"
---
Esta seccion reune recursos y criterios de estudio sobre Clean Code. Usa las referencias para profundizar y agrega ejemplos propios conforme avance la guia.
---
## File: src/content/guide/buenas-practicas/dry.mdx
---
title: "DRY — Don't Repeat Yourself"
category: "Buenas practicas"
section: "Principios"
sidebar:
label: "DRY"
order: 21
references:
- label: "Demystifying Software Development Principles: DRY, KISS, YAGNI, SOLID, GRASP, and LoD"
url: "https://levelup.gitconnected.com/demystifying-software-development-principles-dry-kiss-yagni-solid-grasp-and-lod-8606113c0313"
- label: "The Pragmatic Programmer — DRY Principle"
url: "https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/"
- label: "DRY: Don't Repeat Yourself — refactoring.guru"
url: "https://refactoring.guru/extract-method"
---
**DRY** significa *Don't Repeat Yourself* (No te repitas). El principio establece que cada pieza de conocimiento o logica debe tener una unica representacion dentro del sistema. Cuando la misma logica aparece en varios lugares, un cambio de requisito obliga a actualizar todos esos puntos, lo que introduce inconsistencias y errores.
DRY no trata solo de evitar copiar y pegar codigo. Tambien aplica a configuracion, documentacion, esquemas de base de datos y cualquier otra forma de conocimiento duplicado.
## Violacion del principio
```js
function calculateStandardPrice(price) {
return price * 1.21;
}
function calculateReducedPrice(price) {
return price * 1.10;
}
function calculateSuperReducedPrice(price) {
return price * 1.04;
}
const total1 = calculateStandardPrice(100);
const total2 = calculateReducedPrice(50);
```
Cada funcion repite la misma logica de multiplicacion. Si la formula cambia (p. ej. redondeo), hay que actualizarla en tres sitios.
## Aplicando DRY
```js
const VAT_RATES = {
standard: 1.21,
reduced: 1.10,
superReduced: 1.04,
};
function calculatePrice(price, type = "standard") {
const multiplier = VAT_RATES[type];
if (!multiplier) throw new Error(`Unknown VAT type: ${type}`);
return price * multiplier;
}
const total1 = calculatePrice(100, "standard");
const total2 = calculatePrice(50, "reduced");
```
La logica de calculo existe en un solo lugar. Cambiar las tasas o la formula solo requiere una modificacion.
---
## File: src/content/guide/buenas-practicas/grasp.mdx
---
title: "GRASP — General Responsibility Assignment Software Patterns"
category: "Buenas practicas"
section: "Principios"
sidebar:
label: "GRASP"
order: 24
references:
- label: "Applying UML and Patterns — Craig Larman"
url: "https://www.pearson.com/en-us/subject-catalog/p/applying-uml-and-patterns-an-introduction-to-object-oriented-analysis-and-design-and-iterative-development/P200000009412"
- label: "GRASP Patterns — Wikipedia"
url: "https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)"
---
**GRASP** (*General Responsibility Assignment Software Patterns*) es un conjunto de nueve principios definidos por Craig Larman para guiar como asignar responsabilidades a clases y objetos en el diseno orientado a objetos:
1. **Experto en Informacion** — asigna la responsabilidad a la clase que tiene la informacion necesaria para cumplirla.
2. **Creador** — la clase B debe crear instancias de A si B contiene, agrega o registra objetos A.
3. **Controlador** — un objeto no-UI coordina los casos de uso del sistema.
4. **Bajo Acoplamiento** — minimiza las dependencias entre clases para facilitar el cambio.
5. **Alta Cohesion** — cada clase tiene responsabilidades fuertemente relacionadas entre si.
6. **Polimorfismo** — usa polimorfismo en lugar de condicionales para manejar variaciones de comportamiento.
7. **Indireccion** — introduce un intermediario para desacoplar componentes.
8. **Fabricacion Pura** — crea una clase artificial para mantener alta cohesion y bajo acoplamiento.
9. **Variaciones Protegidas** — encapsula los puntos de variacion para que los cambios no se propaguen.
## Ejemplo: Experto en Informacion
```js
// Violation — OrderService knows too much about Order's internals
class OrderService {
calculateTotal(order) {
return order.items.reduce((sum, item) => sum + item.price * item.qty, 0);
}
calculateDiscount(order) {
const total = this.calculateTotal(order);
return total > 100 ? total * 0.1 : 0;
}
}
// Applying Information Expert
// Order owns the data, so it handles the calculations
class Order {
constructor(items) {
this.items = items;
}
getTotal() {
return this.items.reduce((sum, item) => sum + item.price * item.qty, 0);
}
getDiscount() {
return this.getTotal() > 100 ? this.getTotal() * 0.1 : 0;
}
getFinalPrice() {
return this.getTotal() - this.getDiscount();
}
}
const order = new Order([
{ price: 60, qty: 2 },
{ price: 10, qty: 1 },
]);
console.log(order.getFinalPrice()); // 117
```
`Order` concentra toda la logica sobre su propio estado. `OrderService` queda libre de conocer la estructura interna de los items.
--- METRICS ---
- Files Extracted: 11
- Estimated Token Budget: ~19471 tokens
- Recency Window: Active (< 180 days)
- Canonical Reference: https://codewiki.google/github.com/DevCaress/guia-entrevistas-de-programacion