La primera paja, el primer beso, el primer polvo, la primera vez que te crees en posesión de la verdad absoluta
La programación es un proceso que se utiliza para idear y ordenar las acciones que se realizarán en el marco de un proyecto; al anuncio de las partes que componen un acto o espectáculo; a la preparación de máquinas para que cumplan con una cierta tarea en un momento determinado; a la elaboración de programas para la resolución de problemas mediante ordenadores; y a la preparación de los datos necesarios para obtener una solución de un problema.
En la actualidad, la noción de programación se encuentra muy asociada a la creación de aplicaciones informáticas y videojuegos; es el 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, tales como C++, Java, Python entre otros) y de otra que sea capaz de “traducirlo” a lo que se conoce como lenguaje de máquina, el cual puede ser entendido por un microprocesador.
Historia
Para crear un programa, y que la computadora lo interprete y ejecute las instrucciones escritas en él, debe escribirse en un lenguaje de programación. En sus inicios las computadoras interpretaban solo instrucciones en un lenguaje específico, del más bajo nivel, conocido como código máquina, siendo éste excesivamente complicado para programar. De hecho solo consiste en cadenas de números 1 y 0 (sistema binario). Para facilitar el trabajo de programación, los primeros científicos, que trabajaban en el área, decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras o abreviaturas provenientes del inglés; las codificaron y crearon así un lenguaje de mayor nivel, que se conoce como Assembly o lenguaje ensamblador. Por ejemplo, para sumar se podría usar la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente lo mismo que hacerlo en lenguaje máquina, pero las letras y palabras son bastante más fáciles de recordar y entender que secuencias de números binarios. A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método sencillo para programar. Entonces, se crearon los lenguajes de alto nivel. Mientras que una tarea tan trivial como multiplicar dos números puede necesitar un conjunto de instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una. Una vez que se termina de escribir un programa, sea en ensamblador o en algunos lenguajes de alto nivel, es necesario compilarlo, es decir, traducirlo completo a lenguaje máquina.1 Eventualmente será necesaria otra fase denominada comúnmente link o enlace, durante la cual se anexan al código, generado durante la compilación, los recursos necesarios de alguna biblioteca. En algunos lenguajes de programación, puede no ser requerido el proceso de compilación y enlace, ya que pueden trabajar en modo intérprete. Esta modalidad de trabajo es equivalente pero se realiza instrucción por instrucción, a medida que es ejecutado el programa.
Léxico y programación
La programación se rige por reglas y un conjunto más o menos reducido de órdenes, expresiones, instrucciones y comandos que tienden a asemejarse a una lengua natural acotada (en inglés); y que además tienen la particularidad de una reducida ambigüedad. Cuanto menos ambiguo es un lenguaje de programación, se dice, es más potente. Bajo esta premisa, y en el extremo, el lenguaje más potente existente es el binario, con ambigüedad nula (lo cual lleva a pensar así del lenguaje ensamblador).[cita requerida]
En los lenguajes de programación de alto nivel se distinguen diversos elementos entre los que se incluyen el léxico propio del lenguaje y las reglas semánticas y sintácticas.
Programas y algoritmos
Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa (traduce a un lenguaje de programación concreto) uno o más algoritmos. Un algoritmo puede expresarse de distintas maneras: en forma gráfica, como un diagrama de flujo, en forma de código como en pseudocódigo o un lenguaje de programación, en forma explicativa.
Los programas suelen subdividirse en partes menores, llamadas módulos, de modo que la complejidad algorítmica de cada una de las partes sea menor que la del programa completo, lo cual ayuda al desarrollo del programa. Esta es una práctica muy utilizada y se conoce como "refino progresivo".
Según Niklaus Wirth, un programa está formado por los algoritmos y la estructura de datos.
La programación puede seguir muchos enfoques, o paradigmas, es decir, diversas maneras de formular la resolución de un problema dado. Algunos de los principales paradigmas de la programación son:
Programación declarativa
Programación estructurada
Programación modular
Programación orientada a objetos
Compilación
El programa escrito en un lenguaje de programación de alto nivel (fácilmente comprensible por el programador) es llamado programa fuente y no se puede ejecutar directamente en una computadora. La opción más común es compilar el programa obteniendo un módulo objeto, aunque también puede ejecutarse en forma más directa a través de un intérprete informático.
El código fuente del programa se debe someter a un proceso de traducción para convertirlo a lenguaje máquina o bien a un código intermedio, generando así un módulo denominado "objeto". A este proceso se le llama compilación.
Habitualmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el código fuente escrito en un lenguaje de programación almacenado en un archivo de texto a código en bajo nivel (normalmente en código objeto, no directamente a lenguaje máquina). El segundo paso se llama enlazado en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el código de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo ejecutable.
Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilación en archivos objetos (un típico .o para Unix, .obj para MS-Windows, DOS); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilación puede almacenarse solo de forma temporal. Un programa podría tener partes escritas en varios lenguajes, por ejemplo, Java, C, C++ y ensamblador, que se podrían compilar de forma independiente y luego enlazar juntas para formar un único módulo ejecutable.
Programación e ingeniería del software
Artículo principal: Ingeniería del software
Existe una tendencia a identificar el proceso de creación de un programa informático con la programación, que es cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando se trata de grandes proyectos.
El proceso de creación de software, desde el punto de vista de la ingeniería, incluye mínimamente los siguientes pasos:
Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatización de una tarea.
Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el programa y para qué se necesita.
Realizar el análisis de los requisitos del programa. Debe quedar claro qué tareas debe realizar el programa. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase.
Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable.
Implementar el programa. Consiste en realizar un diseño detallado, especificando completamente todo el funcionamiento del programa, tras lo cual la codificación (programación propiamente dicha) debería resultar inmediata.
Probar el programa. Comprobar que pasan pruebas que se han definido en el análisis de requisitos.
Implantar (instalar) el programa. Consiste en poner el programa en funcionamiento junto con los componentes que pueda necesitar (bases de datos, redes de comunicaciones, etc.).
La ingeniería del software se centra en los pasos de planificación y diseño del programa, mientras que antiguamente (programación artesanal) la realización de un programa consistía casi únicamente en escribir el código, bajo solo el conocimiento de los requisitos y con una modesta fase de análisis y diseño.
Referencias históricas
El trabajo de Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron, que realizó para la máquina de Babbage le hizo ganarse el título de primera programadora de computadoras del mundo, aunque Babbage nunca completó la construcción de la máquina. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora.
Objetivos de la programación
La programación debe perseguir la obtención de programas de calidad. Para ello se establece una serie de factores que determinan la calidad de un programa. Algunos de los factores de calidad más importantes son los siguientes:
Correctitud. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe hacer el programa antes de su desarrollo y, una vez acabado, compararlo con lo que realmente hace.
Claridad. Es muy importante que el programa sea lo más claro y legible posible, para facilitar tanto su desarrollo como su posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo de programación. De esta forma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de código; una práctica común es realizar aclaraciones en el código fuente utilizando líneas de comentarios. Contrariamente, algunos por diversión o para impedirle un análisis cómodo a otros programadores, recurren al uso de código ofuscado.
Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración para mejorar la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico en la red que genera, etc.).
Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquella en la que se desarrolló. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha elaborado para el sistema GNU/Linux ejecutarse también en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a más usuarios más fácilmente.
Ciclo de vida del software
Artículo principal: Proceso para el desarrollo de software
El término ciclo de vida del software describe el desarrollo de software, desde la fase inicial hasta la fase final, incluyendo su estado funcional. El propósito es definir las distintas fases intermedias que se requieren para validar el desarrollo de la aplicación, es decir, para garantizar que el software cumpla los requisitos para la aplicación y verificación de los procedimientos de desarrollo: se asegura que los métodos utilizados son apropiados. Estos métodos se originan en el hecho de que es muy costoso rectificar los errores que se detectan tarde dentro de la fase de implementación (programación propiamente dicha), o peor aun, durante la fase funcional. El modelo de ciclo de vida permite que los errores se detecten lo antes posible y por lo tanto, permite a los desarrolladores concentrarse en la calidad del software, en los plazos de implementación y en los costos asociados. El ciclo de vida básico de un software consta de, al menos, los siguientes procedimientos:
Definición de objetivos: definir el resultado del proyecto y su papel en la estrategia global.
Análisis de los requisitos y su viabilidad: recopilar, examinar y formular los requisitos del cliente y examinar cualquier restricción que se pueda aplicar.
Diseño general: requisitos generales de la arquitectura de la aplicación.
Diseño en detalle: definición precisa de cada subconjunto de la aplicación.
Programación (programación e implementación): es la implementación en un lenguaje de programación para crear las funciones definidas durante la etapa de diseño.
Prueba de unidad: prueba individual de cada subconjunto de la aplicación para garantizar que se implementaron de acuerdo con las especificaciones.
Integración: para garantizar que los diferentes módulos y subprogramas se integren con la aplicación. Este es el propósito de la prueba de integración que debe estar cuidadosamente documentada.
Prueba beta (o validación), para garantizar que el software cumple con las especificaciones originales.
Documentación: se documenta con toda la información necesaria, sea funcional final para los usuarios del software (manual del usuario), y de desarrollo para futuras adaptaciones, ampliaciones y correcciones.
Mantenimiento: para todos los procedimientos correctivos (mantenimiento correctivo) y las actualizaciones secundarias del software (mantenimiento continuo).
El orden y la presencia de cada uno de estos procedimientos en el ciclo de vida de una aplicación dependen del tipo de modelo de ciclo de vida acordado entre el cliente y el equipo de desarrolladores. En el caso del software libre se tiene un ciclo de vida mucho más dinámico, puesto que muchos programadores trabajan en simultáneo desarrollando sus aportaciones.
Fuente: Wikipedia
- Hombre tiene hambre. Roba pan para dar a familia, Llega a casa, encuentra toda familia marchado a Siberia! "Mas pan para mi", piensa senor. Pero pan tiene gusano.
- Leton entra en bar con mula. Camarero dice, "Porque cara tan larga?" Leton dice "Pensaba en mi hija. Ella ha tenido dormir con soldado por patata para bebe!"
- Tres LEtones hablan fardando de hijos. "My hijo es soldado.El ha violado tantas mujeres como quiero", dice el primero leton. "Y?" dice el segunda, "My hijo es granjero. Tiene todas las potatos que quiere!" Tercer leton espera largo tiempo, entonces dice, "My hijo es murio al nacer. Para el la pelea es acabada", "Wow, tu has ganado a nosotros", dicen otros. Pero todos estan sienten tristes.
- Pregunta: Que son una potato dice a otra potato ? Respiuesta: Premisa ridicula. Quien tiene dos potatos ?
- Pregunta: Cuanto letones es falta para cambiar un bombillo ? Respuesta: 25, uno lo cambia, 24 montan en generador de dinamo de bicicleta en relevos de una hora. PEro tiempo seria mas aprovechado buscando comida.
- Un dia, oir toc toc en puerta.
Hombre pregunta "Quien es?"
"Es hombre de potatos, vengo a dar potatos gratis "
Hombre es muy excitado y abre puerto
No es hombre de potatos, es policia secreta.
- Toc Toc
"Quien ser?"
"Leton"
"Que Leton ?"
"Por favor abre puerto. Esta frio"
- Hombre rompe coche cerca casa de granja. Refugio en pajar. Encuentra hija grajero en pajar. Oh! caliente caliente! perp demasiado tarde! Ya es fue violada por soldado : (
Fuente: Chistes de Letonia
#25 A medida que los países se han abierto a la globalización y al mercado internacional, la desigualdad mundial se ha reducido.
Por otra parte, se podría debatir por qué la desigualdad es mala. Yo creo que lo negativo es la pobreza, no la desigualdad.
Tercero, te invito a que expongas que consecuencias lógicas devendrían en caso de aplicarse un sistema basado en la pura libertad y el consenso entre personas, a ver a que conclusión llegamos.
Me he leído el texto entero, la verdad que explica bastante bien el asunto.
Por cierto
#1MuErTe-:No dijo nada. Le escupió en la cara.
¿Esto está probado? Si no tendremos que pedir a un mod que cierre.
#33 Hostia puta qué pechada a reír. Casi tanto como los intentos del de 1º de ADE de vendernos las bondades de que los ricos sean muy ricos y cada vez mas ricos y el resto nos quedemos con sus migajas en lugar de intentar ser todos medianamente igual de ricos.
#34MuErTe-:A medida que los países se han abierto a la globalización y al mercado internacional, la desigualdad mundial se ha reducido.
¿Fuentes? Por que yo creo que la diferencia entre el 1% más rico del planeta y el 1% más pobre debe ser inmensamente superior a otras etapas históricas. Aunque lo mio es una mera suposición.
#34MuErTe-:Por otra parte, se podría debatir por qué la desigualdad es mala. Yo creo que lo negativo es la pobreza, no la desigualdad.
Es el error de los liberales que soléis tener, lo que os separa del anarquismo. La desigualdad genera desequilibrios sociales que a su vez generan conflictos. Es algo totalmente humano, la gente puede aceptar que alguien tenga más recursos o divisas que él, pero no inmensamente más recursos o divisas, aunque su trabajo sea mucho más beneficioso a la sociedad. Lo podemos llamar envidia, instinto o como queramos y eso genera conflictos desde desánimo y depresiones a puros homicidios por envidia.
#34MuErTe-:Tercero, te invito a que expongas que consecuencias lógicas devendrían en caso de aplicarse un sistema basado en la pura libertad y el consenso entre personas, a ver a que conclusión llegamos.
En primera consecuencia, se destruiría la mayor estructura causante de desigualdad, los estados. En segundo lugar, probablemente se reduciría o, incluso, desaparecería la coacción entre seres humanos, pues respetarían las libertades de todos y de la sociedad donde viven e interactuan. En tercer lugar, probablemente se iniciaría un proceso de reparto equitativo (no igualitario, no es lo mismo) de los recursos entre las poblaciones, si se siguiesen patrones morales basadas en el apoyo mutuo, desechando la competitividad como axioma del desarrollo social humano.
El problema es llegar a todo eso de arriba sin acabar derivando en otra cosa mucho más peligrosa o sin que acabes formando parte del patrimonio nacional de fosas comunes del planeta
¿Ayn Rand no era esa firme defensora de lo privado que cuando se estaba muriendo acudió a la sanidad pública porque no tenía un duro?
Supongo que el tiempo pone a cada cual en su sitio.
#34MuErTe-:Por otra parte, se podría debatir por qué la desigualdad es mala. Yo creo que lo negativo es la pobreza, no la desigualdad.
Pues yo opino que más bien es la ausencia de solidaridad.
¿Fuentes? Por que yo creo que la diferencia entre el 1% más rico del planeta y el 1% más pobre debe ser inmensamente superior a otras etapas históricas. Aunque lo mio es una mera suposición.
https://orff.uc3m.es/bitstream/handle/10016/27073/wh1807.pdf
Es el error de los liberales que soléis tener, lo que os separa del anarquismo. La desigualdad genera desequilibrios sociales que a su vez generan conflictos. Es algo totalmente humano, la gente puede aceptar que alguien tenga más recursos o divisas que él, pero no inmensamente más recursos o divisas, aunque su trabajo sea mucho más beneficioso a la sociedad. Lo podemos llamar envidia, instinto o como queramos y eso genera conflictos desde desánimo y depresiones a puros homicidios por envidia.
Estoy de acuerdo en que la envidia genera conflicto.
Pero vaya, es mejor la situación en la que A tiene 100 y B tiene 50 que la situación en la que A tiene 30 y B tiene 20. Hay países muy pobres y muy igualitarios, y países muy ricos y muy desigualitarios. Aparte, a que desigualdad nos referimos? De renta? De patrimonio? De consumo?
#41 La solidaridad debe ser voluntaria, si es impuesta no es solidaridad. Si yo te obligo a donar una parte de tu riqueza a un pobre, ni tú ni yo estamos siendo solidarios.
Por contra, en un sistema libre precisamente no se impide que las personas se ayuden las unas a las otras. Obligar a las personas, mediante la coacción estatal, a repartir la riqueza entre los más necesitados lo que evidencia es el fracaso de la especie humana. Nada impide a nadie donar su dinero a alguien que esté en peor situación.