
En informática , el código fuente , o simplemente código , es un texto plano legible por humanos que eventualmente puede controlar el comportamiento de una computadora . Para controlar una computadora, este código debe ser procesado por un programa informático , ya sea ejecutándose directamente mediante un intérprete o traduciéndose a un formato más comprensible para la computadora, como por ejemplo mediante un compilador . A veces, el código se compila directamente a código máquina para que pueda ejecutarse en el lenguaje nativo de la computadora sin procesamiento adicional. Sin embargo, muchos entornos modernos implican la compilación a una representación intermedia, como el código de bytes , que puede ejecutarse mediante un intérprete o compilarse bajo demanda a código máquina mediante compilación justo a tiempo .
Fondo
Las primeras computadoras programables, que aparecieron a finales de la década de 1940, [ 2 ] se programaban en código máquina (instrucciones simples que podían ser ejecutadas directamente por el procesador). El lenguaje máquina era difícil de depurar y no era portable entre diferentes sistemas informáticos. [ 3 ] Inicialmente, los recursos de hardware eran escasos y caros, mientras que los recursos humanos eran más baratos. [ 4 ] A medida que los programas se volvieron más complejos, la productividad de los programadores se convirtió en un cuello de botella. Esto llevó a la introducción de lenguajes de programación de alto nivel como Fortran a mediados de la década de 1950. Estos lenguajes abstraían los detalles del hardware y fueron diseñados para expresar algoritmos que pudieran ser comprendidos más fácilmente por los humanos. [ 5 ] [ 6 ] Como instrucciones distintas del hardware subyacente de la computadora , el software es, por lo tanto, relativamente reciente, datando de estos primeros lenguajes de programación de alto nivel como Fortran, Lisp y Cobol . [ 6 ] La invención de los lenguajes de programación de alto nivel fue simultánea con los compiladores necesarios para traducir automáticamente el código fuente a código máquina que puede ser ejecutado directamente en el hardware de la computadora. [ 7 ]
Algunas definiciones de código fuente lo consideran la forma de código que es modificada directamente por humanos, normalmente en un lenguaje de programación de alto nivel. [ 8 ]
El código objeto puede ser ejecutado directamente por la máquina y se genera automáticamente a partir del código fuente, a menudo mediante un paso intermedio: el lenguaje ensamblador . Si bien el código objeto solo funciona en una plataforma específica, el código fuente puede portarse a otra máquina y recompilarse allí. Para el mismo código fuente, el código objeto puede variar significativamente, no solo según la máquina para la que se compila, sino también según la optimización del rendimiento del compilador. [ 9 ] [ 10 ]
Organización
La mayoría de los programas no contienen todos los recursos necesarios para su ejecución y dependen de bibliotecas externas . Parte de la función del compilador es enlazar estos archivos de manera que el programa pueda ser ejecutado por el hardware. [ 11 ]

Los desarrolladores de software suelen utilizar la gestión de configuración para realizar un seguimiento de los cambios en los archivos de código fuente ( control de versiones ). El sistema de gestión de configuración también realiza un seguimiento de qué archivo de código objeto corresponde a qué versión del archivo de código fuente. [ 12 ]
Propósitos
Estimación
El número de líneas de código fuente (SLOC) se utiliza a menudo como métrica para evaluar la productividad de los programadores informáticos, el valor económico de una base de código, la estimación del esfuerzo para proyectos en desarrollo y el coste continuo del mantenimiento del software después de su lanzamiento. [ 13 ]
Comunicación
El código fuente también se utiliza para comunicar algoritmos entre partes, por ejemplo, fragmentos de código en línea o en libros. [ 14 ]
Los programadores informáticos pueden encontrar útil revisar el código fuente existente para aprender sobre técnicas de programación. [ 14 ] El intercambio de código fuente entre desarrolladores se cita a menudo como un factor que contribuye a la maduración de sus habilidades de programación. [ 14 ] Algunos consideran el código fuente un medio artístico expresivo . [ 15 ]
El código fuente suele contener comentarios : bloques de texto marcados para que el compilador los ignore. Este contenido no forma parte de la lógica del programa, sino que tiene como objetivo ayudar a los lectores a comprenderlo. [ 16 ]
Las empresas suelen mantener el código fuente confidencial para ocultar algoritmos considerados secretos comerciales . El código fuente y los algoritmos confidenciales y de propiedad exclusiva se utilizan ampliamente en aplicaciones gubernamentales sensibles, como la justicia penal , lo que genera un comportamiento opaco y una falta de transparencia en la metodología del algoritmo. El resultado es la evasión del escrutinio público sobre cuestiones como el sesgo. [ 17 ]
Modificación
El acceso al código fuente (no solo al código objeto ) es esencial para modificarlo. [ 18 ] Es necesario comprender el código existente para entender cómo funciona [ 18 ] y antes de modificarlo. [ 19 ] La velocidad de comprensión depende tanto de la base de código como de la habilidad del programador. [ 20 ] A los programadores experimentados les resulta más fácil comprender lo que hace el código a un nivel superior. [ 21 ] A veces se utiliza la visualización de software para acelerar este proceso. [ 22 ]
Muchos programadores de software utilizan un entorno de desarrollo integrado (IDE) para mejorar su productividad. Los IDE suelen tener varias características integradas, incluido un editor de código fuente que puede alertar al programador sobre errores comunes. [ 23 ] La modificación a menudo incluye la refactorización del código (mejorar la estructura sin cambiar la función) y la reestructuración (mejorar la estructura y la función simultáneamente). [ 24 ] Casi cada cambio en el código introduce nuevos errores o efectos en cadena inesperados , que requieren otra ronda de correcciones. [ 19 ]
Las revisiones de código realizadas por otros desarrolladores se utilizan a menudo para examinar el código nuevo añadido a un proyecto. [ 25 ] El propósito de esta fase suele ser verificar que el código cumple con los estándares de estilo y mantenibilidad y que es una implementación correcta del diseño del software . [ 26 ] Según algunas estimaciones, la revisión de código reduce drásticamente el número de errores que persisten después de que se completan las pruebas de software . [ 25 ] Junto con las pruebas de software que funcionan mediante la ejecución del código, el análisis estático de programas utiliza herramientas automatizadas para detectar problemas con el código fuente. Muchos IDE admiten herramientas de análisis de código, que pueden proporcionar métricas sobre la claridad y la mantenibilidad del código. [ 27 ] Los depuradores son herramientas que a menudo permiten a los programadores ejecutar paso a paso mientras realizan un seguimiento de qué código fuente corresponde a cada cambio de estado. [ 28 ]
Compilación y ejecución
Los archivos de código fuente en un lenguaje de programación de alto nivel deben pasar por una etapa de preprocesamiento a código máquina antes de que se puedan ejecutar las instrucciones. [ 7 ] Después de ser compilado, el programa se puede guardar como un archivo objeto y el cargador (parte del sistema operativo) puede tomar este archivo guardado y ejecutarlo como un proceso en el hardware de la computadora. [ 11 ] Algunos lenguajes de programación usan un intérprete en lugar de un compilador. Un intérprete convierte el programa a código máquina en tiempo de ejecución , lo que los hace de 10 a 100 veces más lentos que los lenguajes de programación compilados. [ 23 ] [ 29 ]
Portabilidad
Otra razón por la que muchos programas se distribuyen en código fuente, en lugar de como archivos binarios ejecutables , es que (a menudo) un único archivo de código fuente se puede escribir una sola vez y se ejecutará en una variedad de máquinas de usuario final diferentes (cada una con su propio compilador o intérprete localizado), a diferencia de un archivo de código ejecutable que generalmente solo funciona en máquinas casi idénticas. El código fuente se utilizó de esta manera para distribuir el sistema operativo Unix en sus inicios , y posteriormente para permitir que los programas escritos en lenguajes de scripting (en particular, el lenguaje de scripting del lado del cliente JavaScript ) se ejecutaran en una amplia variedad de máquinas.
Para este fin, los archivos de código fuente minimizados , ofuscados o descompilados (todos los cuales eliminan los comentarios del código original) son generalmente tan portátiles como los archivos de código fuente originales (que casi siempre incluyen comentarios), aunque son mucho menos útiles para la modificación y, por lo tanto, no cumplen con la definición de código fuente en la Licencia Pública General de GNU , versión 2 (GPL2).
Calidad
La calidad del software es un término general que puede referirse al comportamiento correcto y eficiente de un código, su reutilización y portabilidad , o la facilidad de modificación. [ 30 ] Por lo general, es más rentable incorporar la calidad a un producto desde el principio que intentar agregarla posteriormente en un proceso de desarrollo. [ 31 ] Un código de mayor calidad reduce el costo total del ciclo de vida tanto para proveedores como para clientes, gracias a una mayor fiabilidad y mantenibilidad . [ 32 ] [ 33 ]
La mantenibilidad es la cualidad del software que permite modificarlo fácilmente sin romper las funciones existentes. [ 34 ] Seguir las convenciones de codificación, como usar nombres claros de funciones y variables que correspondan a su propósito, facilita el mantenimiento. [ 35 ] Usar sentencias de bucle condicional solo si el código puede ejecutarse más de una vez, y eliminar el código que nunca se ejecutará también puede aumentar la comprensibilidad. [ 36 ] Muchas organizaciones de desarrollo de software descuidan la mantenibilidad durante la fase de desarrollo, aunque aumentará los costos a largo plazo. [ 33 ] La deuda técnica se incurre cuando los programadores, a menudo por pereza o urgencia para cumplir con un plazo, eligen soluciones rápidas y chapuceras en lugar de incorporar la mantenibilidad en su código. [ 37 ] Una causa común son las subestimaciones en la estimación del esfuerzo de desarrollo de software , lo que lleva a la asignación insuficiente de recursos al desarrollo. [ 38 ] Un desafío con la mantenibilidad es que muchos cursos de ingeniería de software no la enfatizan. [ 39 ] Los ingenieros de desarrollo que saben que no serán responsables del mantenimiento del software no tienen incentivos para incorporar la mantenibilidad. [ 19 ]
Derechos de autor y licencias
La situación varía en todo el mundo, pero en Estados Unidos, antes de 1974, el software y su código fuente no estaban protegidos por derechos de autor y, por lo tanto, siempre eran software de dominio público . [ 40 ] En 1974, la Comisión de Estados Unidos sobre Nuevos Usos Tecnológicos de Obras Protegidas por Derechos de Autor ( CONTU ) decidió que «los programas informáticos, en la medida en que incorporan la creación original de un autor, son materia apropiada para la protección por derechos de autor». [ 41 ] [ 42 ]
El software propietario rara vez se distribuye como código fuente. [ 43 ] Aunque el término software de código abierto se refiere literalmente al acceso público al código fuente , [ 44 ] el software de código abierto tiene requisitos adicionales: redistribución gratuita, permiso para modificar el código fuente y publicar obras derivadas bajo la misma licencia, y no discriminación entre diferentes usos, incluido el uso comercial. [ 45 ] [ 46 ] La reutilización gratuita del software de código abierto puede acelerar el desarrollo. [ 47 ]
Véase también
- Código de bytes
- Código como datos
- Convenciones de codificación
- Software gratuito
- Código heredado
- Código máquina
- Lenguaje de marcado
- Código ofuscado
- Código objeto
- Software de código abierto
- gestor de paquetes
- Lenguaje de programación
- Repositorio de código fuente
- Resaltado de sintaxis
- lenguaje de programación visual
Referencias
- ↑ Kernighan, Brian W. "Programación en C: Un tutorial" (PDF) . Bell Laboratories, Murray Hill, NJ. Archivado del original (PDF) el 23 de febrero de 2015.
- ↑ Gabbrielli y Martini 2023 , pág. 519.
- ^ Gabbrielli y Martini 2023 , págs .
- ↑ Gabbrielli y Martini 2023 , pág. 522.
- ↑ Gabbrielli y Martini 2023 , pág. 521.
- 1 2 Tracy 2021 , pág. 1.
- 1 2 Tracy 2021 , pág. 121.
- ↑ Stallman, Richard (febrero de 1989). "Licencia pública general de GNU" . GNU.
- ^ Lin y col. 2001 , págs. 238-239.
- ↑ Katyal 2019 , pág. 1194.
- 1 2 Tracy 2021 , págs. 122–123.
- ^ O'Regan 2022 , págs. 230–231, 233, 377.
- ↑ Foster 2014 , págs. 249, 274, 280, 305.
- 1 2 3 Spinellis, D: Lectura de código: La perspectiva del código abierto . Addison-Wesley Professional, 2003. ISBN 0-201-79940-5
- ↑ " Arte y programación informática " ONLamp.com Archivado el 20 de febrero de 2018 en Wayback Machine , (2005)
- ↑ Kaczmarek y otros. 2018 , pág. 68.
- ↑ Katyal 2019 , págs. 1186–1187.
- 1 2 Katyal 2019 , pág. 1195.
- 1 2 3 Offutt, Jeff (enero de 2018). "Descripción general del mantenimiento y la evolución del software" . Departamento de Ciencias de la Computación de la Universidad George Mason . Recuperado el 5 de mayo de 2024 .
- ^ Tripatía y Naik 2014 , p. 296.
- ^ Tripatía y Naik 2014 , p. 297.
- ^ Tripatía y Naik 2014 , págs .
- 1 2 O'Regan 2022 , pág. 375.
- ^ Tripatía y Naik 2014 , p. 94.
- 1 2 Dooley 2017 , pág. 272.
- ↑ O'Regan 2022 , págs.18 , 21.
- ↑ O'Regan 2022 , pág. 133.
- ↑ Kaczmarek y otros. 2018 , págs. 348–349.
- ↑ Sebesta 2012 , pág. 28.
- ↑ Galin 2018 , pág. 26.
- ↑ O'Regan 2022 , págs.68 , 117.
- ↑ O'Regan 2022 , págs.3 , 268.
- 1 2 Varga 2018 , pág. 12.
- ↑ Varga 2018 , pág. 5.
- ^ Tripatía y Naik 2014 , págs .
- ^ Tripatía y Naik 2014 , p. 309.
- ↑ Varga 2018 , págs. 6–7.
- ↑ Varga 2018 , pág. 7.
- ↑ Varga 2018 , págs. 7–8.
- ↑ Liu, Joseph P.; Dogan, Stacey L. (2005). «Derecho de autor y especificidad de la materia: el caso del software informático» . Encuesta anual de derecho estadounidense de la Universidad de Nueva York . 61 (2). Archivado del original el 25 de junio de 2021.
- ↑ Apple Computer, Inc. v. Franklin Computer Corporation Devuelve el byte a la protección de derechos de autor para programas informáticos Archivado el 7 de mayo de 2017 en Wayback Machine en Golden Gate University Law Review Volumen 14, Número 2, Artículo 3 por Jan L. Nussbaum (enero de 1984)
- ↑ Lemley, Menell, Merges y Samuelson. Software and Internet Law , pág. 34.
- ↑ Boyle 2003 , pág. 45.
- ↑ Morin et al. 2012 , Código abierto versus código cerrado.
- ↑ Sen et al. 2008 , pág. 209.
- ↑ Morin et al. 2012 , Licencias de software libre y de código abierto (FOSS).
- ↑ O'Regan 2022 , pág. 106.
Fuentes
- Ablon, Lillian; Bogart, Andy (2017). Días cero, miles de noches: La vida y la época de las vulnerabilidades de día cero y sus explotaciones (PDF) . Rand Corporation. ISBN 978-0-8330-9761-3. Archivado (PDF) del original el 8 de octubre de 2024. Recuperado el 31 de mayo de 2024 .
- Boyle, James (2003). «El segundo movimiento de cercamiento y la construcción del dominio público» . Law and Contemporary Problems . 66 (1): 33– 74. ISSN 0023-9186 . Archivado del original el 24 de marzo de 2025. Recuperado el 7 de abril de 2025 .
- Campbell-Kelly, Martin; Garcia-Swartz, Daniel D. (2015). De los mainframes a los teléfonos inteligentes: una historia de la industria informática internacional . Harvard University Press. ISBN 978-0-674-28655-9.
- Daswani, Neil ; Elbayadi, Moudy (2021). Grandes brechas: Lecciones de ciberseguridad para todos . Apress. ISBN 978-1-4842-6654-0.
- Dooley, John F. (2017). Desarrollo, diseño y codificación de software: con patrones, depuración, pruebas unitarias y refactorización . Apress. ISBN 978-1-4842-3153-1.
- Foster, Elvis C. (2014). Ingeniería de software: Un enfoque metódico . Apress. ISBN 978-1-4842-0847-2.
- Gabbrielli, Maurizio; Martini, Simone (2023). Lenguajes de programación: principios y paradigmas (2.ª ed.). Springer. ISBN 978-3-031-34144-1.
- Galin, Daniel (2018). Calidad del software: conceptos y práctica . John Wiley & Sons. ISBN 978-1-119-13449-7.
- Haber, Morey J.; Hibbert, Brad (2018). Vectores de ataque a activos: Creación de estrategias eficaces de gestión de vulnerabilidades para proteger a las organizaciones . Apress. ISBN 978-1-4842-3627-7.
- Kaczmarek, Stefan; Lees, Brad; Bennett, Gary; Fisher, Mitch (2018). Objective-C para principiantes absolutos: Programación para iPhone, iPad y Mac simplificada . Apress. ISBN 978-1-4842-3428-0.
- Katyal, Sonia K. (2019). "La paradoja del secreto del código fuente" . Cornell Law Review . 104 : 1183.
- Kitchin, Rob; Dodge, Martin (2011). Código/espacio: Software y vida cotidiana . MIT Press. ISBN 978-0-262-04248-2.
- Lin, Daniel; Sag, Matthew; Laurie, Ronald S. (2001). "Código fuente versus código objeto: implicaciones de patentes para la comunidad de código abierto" . Santa Clara Computer and High Technology Law Journal . 18 : 235. Archivado del original el 20 de mayo de 2024. Recuperado el 31 de mayo de 2024 .
- Morin, Andrew; Urban, Jennifer; Sliz, Piotr (2012). "Una guía rápida sobre licencias de software para el científico-programador" . PLOS Computational Biology . 8 (7) e1002598. Bibcode : 2012PLSCB...8E2598M . doi : 10.1371/journal.pcbi.1002598 . ISSN 1553-7358 . PMC 3406002. PMID 22844236 .
- O'Regan, Gerard (2022). Guía concisa de ingeniería de software: desde los fundamentos hasta los métodos de aplicación . Springer Nature. ISBN 978-3-031-07816-3.
- Sen, Ravi; Subramaniam, Chandrasekar; Nelson, Matthew L. (2008). "Determinantes de la elección de la licencia de software de código abierto". Journal of Management Information Systems . 25 (3). Informa UK Limited: 207– 240. doi : 10.2753/mis0742-1222250306 . ISSN 0742-1222 .
- Sebesta, Robert W. (2012). Conceptos de lenguajes de programación (10.ª ed.). Addison-Wesley. ISBN 978-0-13-139531-2.
- Tracy, Kim W. (2021). Software: Una historia técnica . Morgan & Claypool Publishers. ISBN 978-1-4503-8724-8.
- Tripatía, Priyadarshi; Naik, Kshirasagar (2014). Evolución y mantenimiento del software: un enfoque profesional . John Wiley e hijos. ISBN 978-0-470-60341-3.
- Varga, Ervin (2018). Desentrañando el mantenimiento y la evolución del software: Pensando de forma innovadora . Springer. ISBN 978-3-319-71303-8.
Enlaces externos
- Código fuente