{"id":3115,"date":"2022-05-07T00:09:03","date_gmt":"2022-05-07T03:09:03","guid":{"rendered":"https:\/\/www.geekosas.com\/?p=3115"},"modified":"2022-05-07T16:27:40","modified_gmt":"2022-05-07T19:27:40","slug":"buenas-practicas-al-programar-con-codigo","status":"publish","type":"post","link":"https:\/\/geekosas.com\/index.php\/es\/2022\/05\/07\/buenas-practicas-al-programar-con-codigo\/","title":{"rendered":"Buenas pr\u00e1cticas al programar (con c\u00f3digo)"},"content":{"rendered":"<p>Muchos disfrutan programar y resolver laberintos algor\u00edtmicos en su lenguaje favorito, pero lo que a nadie le gusta, es meterse en un c\u00f3digo viejo o incluso peor, en un c\u00f3digo escrito por otro.<br \/>\nA m\u00ed me ha tocado hacerlo ya varias veces, algunas veces ha sido malo, otras veces peor, muchas veces termino y reescribiendo parte del c\u00f3digo que me sacan sangre por los ojos, por eso es que he aprendido algunas buenas practicas al momento de programar.<\/p>\n<p>Advertencia: esto viene desde la perspectiva de un Data Scientist, por lo que estos casos en general aplican a ETL y modelos de Machine Learning..<\/p>\n<h4>Piensa lo que vas a programar antes de hacerlo<\/h4>\n<p>Muchas veces he visto que al recibir una tarea la gente se sienta a programar presionando teclas intentando lograr lo solicitado y eso en general produce muy mal c\u00f3digo.<br \/>\nLas l\u00edneas de comando escritas, reflejan la l\u00f3gica con la que el desarrollador resolvi\u00f3 el problema, por lo que si no tiene esta, ser\u00e1 un hilo dificil de seguir.<br \/>\nEsto de ayudar\u00e1 a nombrar variables, escribir comentario y dividir el c\u00f3digo en partes.<\/p>\n<h4>El codigo debe correr secuencialmente<\/h4>\n<p>Con la aparici\u00f3n de los lenguajes interactivos, como python R y Julia entre otros, he visto muchas veces scripts que para ejecutarse deben correrse por pedasos, algo asi como : ejecutar desde la linea 10 a las 35, luego ejecutar la linea 1 y 2, luego tomar el resultado de la linea de y pegarlo en la linea 40.<br \/>\nEso no es programar, es planillar en R o Python.<\/p>\n<h4>Si es un ETL, que tenga estructura de ETL<\/h4>\n<p>Trata de usar estructuras predefinidas y cuando procesos datos, muchos de esos procesos seran ETL, si es posible sigue los siguientes pasos:<br \/>\n1) Scrip de configuracion de ambiente<br \/>\n2) Librerias<br \/>\n3) Cargar Data<br \/>\n4) manipular data<br \/>\n5) guardar el resultado<\/p>\n<h4>Divide el c\u00f3digo en partes<\/h4>\n<p>Intenta que cada script ejecute una tarea particular guardando el resultado en alg\u00fan storage para una siguiente etapa, la cual solo tendra en comun que lee la data guardada anteriormente<\/p>\n<h4>Dale buenos nombres a las variables<\/h4>\n<p>Servir\u00e1 para retomar el codigo en el futuro:<br \/>\n1) nombra las funciones como verbos que decriben lo que hacen<br \/>\n2) nombra los objetos con sustantivos que los describen<br \/>\n3) si tienes un objeto que representa una manzana grande, nombrala manzana_grande, si no te gusta ese standard usa otro como manzanaGrande, pero se consistente<br \/>\n4) si tienes tablas con 2 columnas que son el bismo valor, p\u00f3neles el miusmo nombre<\/p>\n<h4>No uses simbolos no ASCII<\/h4>\n<p>no crees variables con letras como \u00f1 o \u00e1\u00e9\u00ed\u00f3\u00fa e incluso espacios, en alg\u00fan minuto sera un problema<\/p>\n<h4>Usa control de versiones<\/h4>\n<p>no quieres perder todo tu trabajo, o imagina que en alg\u00fan momento hiciste algo mal y quieres volver atras. respalda tu trabajo en algo como GIT, hay muy buenos cursos online,<\/p>\n<h4>Trabaja los datos en formato tidy<\/h4>\n<p>Las nuevas herramientas para manipular datos est\u00e1n enfocados en hacerlo con datos en formato tidy o tablas &quot;largas&quot;<br \/>\n<a href=\"https:\/\/en.wikipedia.org\/wiki\/Tidy_data\">https:\/\/en.wikipedia.org\/wiki\/Tidy_data<\/a><\/p>\n<h4>El formateo de los datos va al final<\/h4>\n<p>Lo recomendad es unar los objetos y\/o variables en su formato nativo en el lenguaje y dejar para el final el formateo para el ojo humano.<br \/>\nPor ejemplo si trabajas con porcentajes y los quieres mostrar, pasalos de 0.1 a 10% solo antes de mostrarlos.<br \/>\nOtro ejemplo: Si tienes una fecha, que sea un objeto tipo Date, aunque se muestre como AAAA-MM-DD y quieras verlos como DD-MM-AAAA, deja para el final el formateo justo antes de mostrar. <\/p>\n<h4>Genera un log de ejecuci\u00f3n<\/h4>\n<p>Con un try y un catch puedes generar un log, por ejemplo en R:<\/p>\n<pre><code class=\"language-R\">#!\/bin\/Rscript\nsource(&quot;\/opt\/configuracion\/init.R&quot;) #script que contine funcion de log y varias otras cosas\ntryCatch({\n  # en general... proceso identificado por tabla de destino\n  param = c(\n    proc = &#039;nombre proceso&#039;\n  )\n\n  ### aca hace lo necesario....\n\n  write_log(param[[&#039;proc&#039;]], mensaje = archivo)\n\n},error=function(e) {\n  write_log(param[[&#039;proc&#039;]],exit_code = -1,mensaje = paste(e$message,collapse = &quot; &quot;))\n  print(e$message)\n  }\n)<\/code><\/pre>\n<h4>Los par\u00e1metros no van en el c\u00f3digo<\/h4>\n<p>El c\u00f3digo puede tener muchos par\u00e1metros, pero los de ejecuci\u00f3n, por ejemplo &quot;fecha de ejecuci\u00f3n&quot; o ruta de archivo de entrada, es mejor que sean parametricos.<br \/>\nNo puede ser que para cambiar un par\u00e1metro de ejecuci\u00f3n sea necesario modificar el c\u00f3digo, estos deben entregarse por la consola o por alguna interfaz web:<\/p>\n<p>solo usando <\/p>\n<pre><code class=\"language-R\">  args = commandArgs(trailingOnly=TRUE)<\/code><\/pre>\n<p>O en python<\/p>\n<pre><code class=\"language-python\">import sys\nargs = sys.argv[1:]\narchivo = args[0]<\/code><\/pre>\n<p>Lo que si, uede ser mas facil que el tu sftware tome par\u00e1metros por defecto en caso de no proveerse uno.<\/p>\n<h4>Pregunta final \ud83d\ude42<\/h4>\n<p>Que te pareci\u00f3? se te ocurre alguno mas?<br \/>\ndejamelo en los comentarios.<\/p>\n<p>Saludos!<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Muchos disfrutan programar y resolver laberintos algor\u00edtmicos en su lenguaje favorito, pero lo que a nadie le gusta, es meterse en un c\u00f3digo viejo o <a class=\"mh-excerpt-more\" href=\"https:\/\/geekosas.com\/index.php\/es\/2022\/05\/07\/buenas-practicas-al-programar-con-codigo\/\" title=\"Buenas pr\u00e1cticas al programar (con c\u00f3digo)\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":3123,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-3115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1280%2C640&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8vjqF-Of","jetpack-related-posts":[{"id":2771,"url":"https:\/\/geekosas.com\/index.php\/es\/2020\/04\/07\/comparativa-entre-julia-python-y-r\/","url_meta":{"origin":3115,"position":0},"title":"Comparativa entre Julia, Python y R","author":"Daniel Fischer","date":"2020-04-07","format":false,"excerpt":"La discusi\u00f3n sobre que lenguaje es el mejor para analizar datos puede llevarnos a conversaciones mas apasionadas que por temas como religi\u00f3n o pol\u00edtica. Pero como Data-Scientist debemos enfocarnos en la evidencia emp\u00edrica, las dimensiones con las que se podr\u00edan comparar son muchas: Comunidad, Performance, Editores, Gestor de Paquetes, Encapsulaci\u00f3n\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/external-content.duckduckgo.com_.jpg?fit=474%2C312&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2877,"url":"https:\/\/geekosas.com\/index.php\/es\/2020\/05\/10\/cuantos-tienen-que-contagiarse-para-terminar-con-el-covid-19\/","url_meta":{"origin":3115,"position":1},"title":"Cuantos tienen que contagiarse para terminar con el COVID-19","author":"Daniel Fischer","date":"2020-05-10","format":false,"excerpt":"Bueno dado que al parecer la gente no se enferma dos veces, la respuesta f\u00e1cil deber\u00eda ser TODOS, pero no es tan as\u00ed... Me explico... cada persona enferma contagia a personas sanas, actualmente hay 30.000 enfermos y 4.000 contagiados el ultimo d\u00eda (aproximadamente), por lo que podemos decir que a\u2026","rel":"","context":"In &quot;Uncategorized&quot;","block_context":{"text":"Uncategorized","link":"https:\/\/geekosas.com\/index.php\/es\/category\/uncategorized-es\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/05\/covid.jpg?fit=1170%2C700&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/05\/covid.jpg?fit=1170%2C700&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/05\/covid.jpg?fit=1170%2C700&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/05\/covid.jpg?fit=1170%2C700&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/05\/covid.jpg?fit=1170%2C700&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":2476,"url":"https:\/\/geekosas.com\/index.php\/es\/2018\/08\/12\/que-ve-el-machine-learning\/","url_meta":{"origin":3115,"position":2},"title":"Que ve el machine learning?","author":"Daniel Fischer","date":"2018-08-12","format":false,"excerpt":"Los algoritmos de machine learning logran entender problemas de cientos o a veces miles de dimensiones, logrando as\u00ed ver cosas que el ojo humano no podr\u00eda de otro modo ver, pero... \u00bfcomo se comparan estos m\u00e9todos cuando el ojo humano si puede ver? Por ello generamos una serie de experimentos\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":2991,"url":"https:\/\/geekosas.com\/index.php\/es\/2021\/10\/24\/back-to-office-post-covid19\/","url_meta":{"origin":3115,"position":3},"title":"Back to Office Post-Covid19","author":"Daniel Fischer","date":"2021-10-24","format":false,"excerpt":"Antes de comenzar con este art\u00edculo quiero agradecer a Tristan Riquelme por darme la idea, es \u00e9l alguien que siempre tiene excelentes ideas sobre d\u00f3nde aplicar herramientas matem\u00e1ticas a problemas reales. Ahora comenzando con el art\u00edculo: Aunque encontremos una cura definitiva para el COVID-19, este ya ha creado cambios culturales\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2021\/09\/dressed_0617-780x710-1.jpg?fit=780%2C710&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2021\/09\/dressed_0617-780x710-1.jpg?fit=780%2C710&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2021\/09\/dressed_0617-780x710-1.jpg?fit=780%2C710&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2021\/09\/dressed_0617-780x710-1.jpg?fit=780%2C710&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":2212,"url":"https:\/\/geekosas.com\/index.php\/es\/2017\/10\/14\/sparse-matrix-en-r\/","url_meta":{"origin":3115,"position":4},"title":"Sparse Matrix en R","author":"Daniel Fischer","date":"2017-10-14","format":false,"excerpt":"Los valores 0 en las matrices son muy frecuentes, en especial en las variables dummy, por lo que\u00a0en R existe un paquete llamado Matrix el cual permite crear matrices sparse, en otras palabras, matrices que no utilizan memoria cuando el valor de un elemento es 0. Pero el poder saltarse\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2017\/10\/mb-1024x1024.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2017\/10\/mb-1024x1024.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2017\/10\/mb-1024x1024.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2017\/10\/mb-1024x1024.png?resize=700%2C400 2x"},"classes":[]},{"id":1171,"url":"https:\/\/geekosas.com\/index.php\/es\/2016\/05\/21\/calefactores-electricos\/","url_meta":{"origin":3115,"position":5},"title":"Calefactores electricos","author":"Daniel Fischer","date":"2016-05-21","format":false,"excerpt":"El fr\u00edo en invierno es un hecho, algunos lo soportan solo con m\u00e1s zafradas, otros con un amante y hasta he escuchado que subir un poquito de peso tambi\u00e9n sirve, Pero lo que la mayor\u00eda de los mortales hacemos es\u00a0usar alg\u00fan calefactor, en esta ocaci\u00f3n, hablaremos sobre los el\u00e9ctricos. Existen\u2026","rel":"","context":"In &quot;Uncategorized&quot;","block_context":{"text":"Uncategorized","link":"https:\/\/geekosas.com\/index.php\/es\/category\/uncategorized-es\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/05\/gato-4u-control.jpg?fit=1200%2C748&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/05\/gato-4u-control.jpg?fit=1200%2C748&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/05\/gato-4u-control.jpg?fit=1200%2C748&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/05\/gato-4u-control.jpg?fit=1200%2C748&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/05\/gato-4u-control.jpg?fit=1200%2C748&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts\/3115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/comments?post=3115"}],"version-history":[{"count":7,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts\/3115\/revisions"}],"predecessor-version":[{"id":3128,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts\/3115\/revisions\/3128"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/media\/3123"}],"wp:attachment":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/media?parent=3115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/categories?post=3115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/tags?post=3115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}