{"id":98,"date":"2017-12-27T23:13:24","date_gmt":"2017-12-28T04:13:24","guid":{"rendered":"http:\/\/blogs.gentoo.org\/chrisadr\/?p=98"},"modified":"2019-11-01T03:35:27","modified_gmt":"2019-11-01T08:35:27","slug":"comencemos-el-ano-programando","status":"publish","type":"post","link":"https:\/\/blogs.gentoo.org\/chrisadr\/2017\/12\/27\/comencemos-el-ano-programando\/","title":{"rendered":"Comencemos el a\u00f1o programando"},"content":{"rendered":"<p>Es sorprendente la acogida que ha tenido el buen <a href=\"https:\/\/blog.desdelinux.net\/la-siguiente-generacion-ciberdelincuentes\/\">Mar.io<\/a>\u00a0y a decir verdad es el primer art\u00edculo que publico que genera m\u00e1s de 10 mil vistas, esto pone la valla algo alta para los siguientes y espero no defraudarlos con este :) Muchas gracias por encontrar mis escritos lo suficientemente interesantes como para compartirlos dicho sea de paso :)<\/p>\n<h4>Programaci\u00f3n<\/h4>\n<p>Este es un tema de moda, todo el mundo quiere programar, o al menos todo el mundo piensa que es una habilidad cada vez m\u00e1s necesaria, y a decir verdad a mi me gustar\u00eda escribir todo un libro sobre programaci\u00f3n, GNU\/Linux, seguridad, y tal vez en alg\u00fan momento lo pueda hacer, apenas aprenda c\u00f3mo escribir libros libres y en formato agradable :P .<\/p>\n<h4>La tecnolog\u00eda avanza r\u00e1pidamente<\/h4>\n<p>Este es uno de los motivos por los que no he escrito el libro todav\u00eda :P puesto que quiero hacer algo que pueda superar la barrera del tiempo en un campo en el que las cosas no suelen durar m\u00e1s de unos d\u00edas de forma vigente. Es por esto que en este art\u00edculo quiero contarles un poco de los conceptos m\u00e1s que las implementaciones, de esta manera podremos volver a leer estas l\u00edneas en un tiempo y seguir\u00e1n siendo vigentes.<\/p>\n<h4>Los principios se mantienen m\u00e1s tiempo<\/h4>\n<p>A pesar de que existen muchos lenguajes de programaci\u00f3n hoy por hoy, muchos de los conpceptos se remontan a los mismos or\u00edgenes. Con esto quiero decir que muchas de las cosas que hoy se aprenden, han sido v\u00e1lidas por mucho tiempo, y probablemente lo seguir\u00e1n siendo, esto debido a que la programaci\u00f3n es hecha por\u00a0<em>personas<\/em> y mientras sigan siendo ellos los que desarrollen, algunos conceptos se mantendr\u00e1n.<\/p>\n<h3>Conociendo las bases<\/h3>\n<p>Ya existen muchos cursos, algunos gratuitos y otros no, que exponen gran parte de la sintaxis de muchos de los lenguajes de programaci\u00f3n m\u00e1s populares de hoy en d\u00eda. Pero no vamos a hacer esto aqu\u00ed :) yo quiero contarles un poco de lo que todo pogramador deber\u00eda pensar antes de empezar a programar para poder hacer un trabajo decente.<\/p>\n<p>Entrar en la mente del programador es ciertamente algo necesario, ya en un art\u00edculo un poco antiguo tratamos el <a href=\"https:\/\/blog.desdelinux.net\/programacion-la-psicologia-de-las-computadoras\/\">tema<\/a>. Ahora vamos a entrar un poco en los conceptos que nos permiten escribir el c\u00f3digo.<\/p>\n<h4>Variables y funciones<\/h4>\n<p>Las variables son espacios de memoria, pensemos en los buzones que tienen los grandes edificios, est\u00e1n dise\u00f1ados para almacenar cierto tipo de objetos, los hay grandes y peque\u00f1os, pueden estar solos o en grupo. Una variable es un valor que tu sabes que se usar\u00e1 a lo largo del tiempo, aunque exactamente no conoces su valor en el principio, si lo conoces y sabes que no va a variar, estamos frente a una constante.<\/p>\n<p>Las funciones por otra parte, son conjuntos de instrucciones. Una instrucci\u00f3n es lo m\u00e1s b\u00e1sico que puede hacer un procesador, la raz\u00f3n de ser de las funciones es permitir al programador agrupar conjuntos de ordenes para poder repetirlas a lo largo de un programa. veamos un ejemplo sencillo y a la vez lleno de detalles.<\/p>\n<figure id=\"attachment_78200\" aria-describedby=\"caption-attachment-78200\" style=\"width: 411px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-full wp-image-78200\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/12\/Captura-de-pantalla-de-2017-12-27-22-35-17.png\" alt=\"\" width=\"411\" height=\"228\" \/><figcaption id=\"caption-attachment-78200\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Este es un peque\u00f1o programa escrito en C, tenemos la funci\u00f3n <em>main,\u00a0<\/em>la variable\u00a0<code>saludo<\/code>, y la funci\u00f3n\u00a0<code>printf<\/code>\u00a0que proviene de la biblioteca\u00a0<code>stdio.h<\/code>. Vamos a modificar un poco el ejemplo y luego compilarlo para ver qu\u00e9 sucede.<\/p>\n<figure id=\"attachment_78201\" aria-describedby=\"caption-attachment-78201\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-78201\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/12\/Captura-de-pantalla-de-2017-12-27-22-40-36-420x302.png\" alt=\"\" width=\"420\" height=\"302\" \/><figcaption id=\"caption-attachment-78201\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Hemos agregado una peque\u00f1a funci\u00f3n llamada <code>saludar<\/code>\u00a0la cual toma como argumento una variable llamada\u00a0<code>saludo<\/code>\u00a0y la imprime. Esto no cambia mucho el resultado final del programa pero nos permite mostrar un gran y \u00fatil principio de la programaci\u00f3n, la\u00a0<strong>abstracci\u00f3n.<\/strong> Veamos el resultado:<\/p>\n<figure id=\"attachment_78202\" aria-describedby=\"caption-attachment-78202\" style=\"width: 291px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-full wp-image-78202\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/12\/Captura-de-pantalla-de-2017-12-27-22-42-42.png\" alt=\"\" width=\"291\" height=\"82\" \/><figcaption id=\"caption-attachment-78202\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Un simple programa, que est\u00e1 lleno de conocimiento y trabajo.<\/p>\n<h4>Bibliotecas<\/h4>\n<p>El motivo por el cual cre\u00e9 la funci\u00f3n\u00a0<code>saludar<\/code>\u00a0fue simplemente para mostrar uno de los principios m\u00e1s grandes del desarrollo de software, que ya hemos nombrado: la abstracci\u00f3n. As\u00ed como hemos definido <code>saludar<\/code>,\u00a0<code>printf()<\/code>\u00a0ha sido definido en alg\u00fan lugar de nuestro sistema operativo (la biblioteca standard de C de GNU), este lugar se conoce com\u00fanmente como biblioteca. Las bibliotecas son conjuntos de funciones que nos permiten agregar funcionalidad a nuestros programas sin tener que volver a inventar la rueda. En este caso, gracias a\u00a0<code>printf<\/code>\u00a0no tenemos que preocuparnos de toda la l\u00f3gica necesaria para poder mostrar en una terminal el mensaje que deseamos.<\/p>\n<p>Las bibliotecas est\u00e1n presentes en casi todos los lenguajes de programaci\u00f3n actuales, puesto que al poder contar con secciones de c\u00f3digo para elegir e implementar es m\u00e1s sencillo que crear cada funci\u00f3n desde cero.<\/p>\n<h4>Abstracci\u00f3n<\/h4>\n<p>Imaginemos el sistema de correo, nosotros no necesitamos conocer toda la log\u00edstica necesaria para poder enviar o recibir una carta, lo mismo sucede con la programaci\u00f3n, abstraer es esencial para generar c\u00f3digo duradero y elegante. Este proceso permite utilizar nombres\u00a0<em>generales<\/em> para definir procesos\u00a0<em>generales.\u00a0<\/em>\u00a0En otras palabras, si creamos la funci\u00f3n\u00a0<code>enviarCarta()<\/code>\u00a0sabemos de manera\u00a0<em>general\u00a0<\/em>que dicha funci\u00f3n se encargar\u00e1 de enviar una carta, pero no necesariamente qu\u00e9 pasos se requieren para hacerlo. Y este es otro punto por el cual la abstracci\u00f3n es tan buena, puesto que nos permite\u00a0<strong>encapsular\u00a0<\/strong>segmentos de procesos.<\/p>\n<h4>Encapsulamiento<\/h4>\n<p>Nuestra funci\u00f3n\u00a0<code>saludar<\/code>\u00a0es un claro ejemplo de encapsulamiento, nos permite tener un bloque cerrado con instrucciones espec\u00edficas que podemos usar una o mil veces dentro de un programa. Esto hace que el c\u00f3digo sea m\u00e1s f\u00e1cil de leer y que sea m\u00e1s f\u00e1cil de depurar puesto que si alg\u00fan error surge, sabemos exactamente cu\u00e1les son los l\u00edmites de nuestra funci\u00f3n, y conocemos cada instrucci\u00f3n en un espacio reducido. Esto nos lleva a un principio de la programaci\u00f3n bastante com\u00fan en UNIX<\/p>\n<h4>Haz una cosa, hazla muy bien<\/h4>\n<p>Una buena funci\u00f3n es aquella que\u00a0<strong>solamente<\/strong> hace una cosa, pero la hace muy bien. Pensemos en esto por unos instantes&#8230; <code>enviarCarta()<\/code>\u00a0probablemente har\u00eda muchas cosas, lo que no puede ser bueno si queremos depurar el proceso, mientras <code>saludar()<\/code>\u00a0solo hace una. A lo largo del tiempo, si surgen problemas la segunda ser\u00e1 m\u00e1s f\u00e1cil de reparar que la primera. Una opci\u00f3n para evitar este problema ser\u00eda generar distintos niveles de abstracci\u00f3n para\u00a0<code>enviarCarta()<\/code>, esto quiere decir que dentro de la funci\u00f3n existir\u00edan otras como\u00a0<code>verificarSobre()<\/code>\u00a0y tal vez dentro de esta una como\u00a0<code>verificarRemitente()<\/code>. En definitiva esta \u00faltima funci\u00f3n (<code>verificarRemitente()<\/code>) es mucho m\u00e1s espec\u00edfica que solo\u00a0<code>enviarCarta()<\/code>\u00a0y de esta manera podemos encapsular partes del c\u00f3digo para que hagan lo que es necesario y solo una cosa a la vez.<\/p>\n<h3>Practicar<\/h3>\n<p>Para aprender el arte de la programaci\u00f3n es necesario practicar, y puesto que yo ahora he dado un vistazo muy general al tema, es necesario que practiquen con diversos lenguajes, o diversos problemas. Primero intentando generar funciones espec\u00edficas, luego aumentando la complejidad. Como siempre, si surgen dudas, o sugerencias o comentarios, me ayudan mucho a saber qu\u00e9 aspectos reforzar. Muchas gracias y que este 2018 est\u00e9 lleno de \u00e9xitos y proyectos asombrosos. Saludos<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es sorprendente la acogida que ha tenido el buen Mar.io\u00a0y a decir verdad es el primer art\u00edculo que publico que genera m\u00e1s de 10 mil vistas, esto pone la valla algo alta para los siguientes y espero no defraudarlos con este :) Muchas gracias por encontrar mis escritos lo suficientemente interesantes como para compartirlos dicho &hellip; <a href=\"https:\/\/blogs.gentoo.org\/chrisadr\/2017\/12\/27\/comencemos-el-ano-programando\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Comencemos el a\u00f1o programando<\/span><\/a><\/p>\n","protected":false},"author":169,"featured_media":99,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[20],"tags":[3,17,14],"jetpack_featured_media_url":"https:\/\/blogs.gentoo.org\/chrisadr\/files\/2017\/12\/coding.jpeg","_links":{"self":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts\/98"}],"collection":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/users\/169"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/comments?post=98"}],"version-history":[{"count":2,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts\/98\/revisions"}],"predecessor-version":[{"id":101,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts\/98\/revisions\/101"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/media\/99"}],"wp:attachment":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/media?parent=98"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/categories?post=98"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/tags?post=98"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}