Herramientas de usuario

Herramientas del sitio


informatica:programacion

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion [2021/03/31 09:35] – [Clasificación] tempwininformatica:programacion [2024/08/28 15:42] (actual) – [Programación] tempwin
Línea 3: Línea 3:
 proceso por el cual una persona desarrolla un programa, valiéndose de una herramienta que le permita escribir el código (el cual puede estar en uno o varios lenguajes, como C++, Java y Python, entre otros) y de otra que sea capaz de “traducirlo” a lo que se conoce como lenguaje de máquina, que puede "comprender" el microprocesador2​.  proceso por el cual una persona desarrolla un programa, valiéndose de una herramienta que le permita escribir el código (el cual puede estar en uno o varios lenguajes, como C++, Java y Python, entre otros) y de otra que sea capaz de “traducirlo” a lo que se conoce como lenguaje de máquina, que puede "comprender" el microprocesador2​. 
  
 +===== Paradigmas de programación =====
 +
 +Estilos o enfoques de programación.
 +
 +  * **Programación imperativa**: se dice cómo hacer un proceso.
 +  * **Programación declarativa**: se dice qué proceso hacer.
 +
 +==== Paradigma imperativo ====
 +
 +=== Programación estructurada ===
 +
 +  * Secuencia
 +  * Sentencias de selección / control
 +  * Sentencias de repetición
 +  * Funciones
 ===== Lenguajes ===== ===== Lenguajes =====
  
Línea 13: Línea 28:
 ==== Clasificación ==== ==== Clasificación ====
  
-Por paradigmas:+Hay dos formas principales de programación:
  
 +  * **Programación Imperativa**: se centra en **cómo ejecutar** el programa, define el control de flujo así como los cambios de estado del programa.
 +  * **Programación Declarativa**: se centra en **qué ejecutar**, define la lógica del programa, pero no detalla el control de flujo.
 +
 +Por **paradigmas**:
 +
 +  * Imperativa
 +    * Estructurada
 +    * De procedimientos (//Procedural//)
   * [[informatica:programacion:poo|Programación orientada a objetos]]   * [[informatica:programacion:poo|Programación orientada a objetos]]
   * Programación dirigida por eventos (//Event-driven//)   * Programación dirigida por eventos (//Event-driven//)
   * Programación declarativa   * Programación declarativa
   * Programación funcional   * Programación funcional
-  * Programación lógica +  * Programación basada en autómatas
-  * Imperativa +
-    * Estructurada +
-    * De procedimientos (//Procedural//)+
  
   * [[https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms|Comparison of programming paradigms]] (Wikipedia)   * [[https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms|Comparison of programming paradigms]] (Wikipedia)
 +
 +Por **nivel de abstracción**:
 +
 +  * **Bajo nivel**: lenguajes que están muy cerca del hardware. Difíciles de usar, pero son muy eficientes.
 +  * **Alto nivel**: están cerca del lenguaje humano. Fáciles de aprender y usar, pero menos eficientes.
 +
 +Por **características de implementación**:
 +
 +  * **Compilado**: el código se traduce a un lenguaje máquina, que es el lenguaje que entiende el hardware.
 +  * **Interpretado**: el código se ejecuta directamente por un intérprete, sin necesidad de compilarlo previamente.
 +  * **Estático**: los lenguajes requieren que el tipo de datos de las variables se declare explícitamente.
 +  * **Dinámico**: los lenguajes dinámicos permiten que el tipo de datos de las variables se determine en tiempo de ejecución.
 ==== Elementos ==== ==== Elementos ====
  
-  * Variables +  * **Palabras reservadas**: palabras con un significado especial en el lenguaje y no se pueden utilizar para otros fines. 
-  * Constantes +  * **Operadores**: símbolos que se utilizan para operaciones matemáticas, lógicas o de comparación. 
-  * Bucles +  * **Variables**: contenedores que almacenan datos. 
-  * Condicionales +  * **Constantes**: valores que no cambian durante la ejecución del programa. 
-  * Funciones+  * **Estructuras de control**: instrucciones que controlan el flujo de ejecución del programa: 
 +    * **Bucles** 
 +    * **Condicionales** 
 +  * **Funciones**: bloques de código que se pueden reutilizar.
  
 ==== Tipos de datos ==== ==== Tipos de datos ====
Línea 70: Línea 105:
  
 Además de las normas de nombrado, los lenguajes de programación tienen una serie de palabras reservadas que no se pueden utilizar en las variables (ni en funciones u otros identificadores). Siguiendo con Python, algunas de las palabras reservadas: ''for'', ''while'', ''if'', ''for'', ''from''... Además de las normas de nombrado, los lenguajes de programación tienen una serie de palabras reservadas que no se pueden utilizar en las variables (ni en funciones u otros identificadores). Siguiendo con Python, algunas de las palabras reservadas: ''for'', ''while'', ''if'', ''for'', ''from''...
 +===== Cómo empezar a programar =====
 +
 +Técnicamente, para empezar a programar es necesario:
 +
 +  * Un ordenador
 +  * Un editor de texto
 +  * Un intérprete o compilador
 +
 +No es obligatorio, pero sí facilita mucho la programación usar un **IDE** (Entorno de Desarrollo Integrado, por sus siglas en inglés). Es un programa que combina un editor de texto, un intérprete o compilador y otras herramientas de desarrollo en un solo lugar.
 +
 +Además de los requisitos técnicos, se requiren las siguientes habilidades:
 +
 +  * **Pensamiento lógico** para resolver problemas.
 +  * **Capacidad de abstracción**
 +  * **Capacidad de aprendizaje**: La programación es un campo en constante evolución, por lo que es importante estar dispuesto a aprender cosas nuevas.
 +
 +Algunos consejos para empezar a programar:
 +
 +  * Empieza con un lenguaje sencillo: Hay muchos lenguajes de programación disponibles. Para empezar, es recomendable elegir un lenguaje sencillo, como Python o JavaScript.
 +  * Encuentra un proyecto para trabajar: Trabajar en un proyecto te ayudará a aprender los conceptos básicos de la programación.
 +  * No tengas miedo de cometer errores: Todos cometen errores cuando están aprendiendo a programar. Los errores son una parte normal del proceso de aprendizaje.
 +  * Sé paciente: Aprender a programar lleva tiempo y esfuerzo. No te desanimes si no lo entiendes todo a la primera.
 +
 +
 ===== Buenas prácticas ===== ===== Buenas prácticas =====
  
Línea 79: Línea 138:
  
   * [[https://www.youtube.com/watch?v=7EmboKQH8lM|Clean Code - Uncle Bob / Lesson 1]]   * [[https://www.youtube.com/watch?v=7EmboKQH8lM|Clean Code - Uncle Bob / Lesson 1]]
 +  * [[https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29|Summary of 'Clean code' by Robert C. Martin]]
 +  * [[https://moderatemisbehaviour.github.io/clean-code-smells-and-heuristics/|Clean Code: Smells and Heuristics]]
 +
 +===== Libros =====
 +
 +==== Lenguajes ====
 +
 +  * **Effective Java**, de Joshua Bloch
 +
 +==== Metodologías ====
 +
 +  * **A Philosophy of Software Design**, de John Ousterhout
 +  * **Clean Code: A Handbook of Agile Software Craftsmanship**, de Robert C. Martin
 +  * **Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software**, de Eric Freeman y Elisabeth Robson.
 +  * **The Pragmatic Programmer: From Journeyman to Master**, de Andy Hunt
 +  * **Refactoring: Improving the Design of Existing Code**, de Martin Fowler
 +  * **Code Complete**, de Steve McConnell
 +  * **Implementation Patterns**, de Beck Kent
 +  * **TheArt of Readable Code: Simple and Practical Techniques for Writing Better Code**, de Dustin Boswell
 +  * **Refactoring to Patterns**, de Joshua Kerievsky
 +  * **Growing Object-Oriented Software, Guided by Tests**, de Steve Freeman y Nat Pryce
 +
 +===== Metodologías / disciplinas =====
 +
 +Metodologías de desarrollo de software.
 +
 +  * Extreme Programming (XP): pone más énfasis en la adaptabilidad que en la previsibilidad.
 +  * Test-Driven Development (TDD): unión de escribir las pruebas primero (//Test First Development//) y Refactorización (//Refactoring//).
 ===== Recursos ===== ===== Recursos =====
  
   * [[http://progra.usm.cl/apunte/materia/introduccion.html|Introducción a la programación]]   * [[http://progra.usm.cl/apunte/materia/introduccion.html|Introducción a la programación]]
informatica/programacion.1617176128.txt.gz · Última modificación: por tempwin