Reto #100DaysAsAFrontendDev un reto inspirado en #100DaysOfCode

Este reto es algo que comenzó como sarcasmo y se transformo en real, sobre todo que podemos hacer algo distinto en cuanto a la enseñanza de los conceptos que debería aprender un desarrollador frontend.

Mi nombres es Héctor de León, un programador más afín al backend, y el reto me llevara a salir de mi zona de confort en cuanto a desarrollo y a su vez enseñar con el conocimiento adquirido.

En esta entrada de este blog iré recopilando todo el camino que iré siguiendo y en mi cuenta de Twitter iré escribiendo todos los días lo aprendido por 100 días con el hashtag #100DaysAsAFrontendDev.

A su vez en mi canal de youtube iré lanzando un video semanal orientado al frontend donde resumiré lo que he aprendido en un video que espero igual, el video explique a las personas que lo vean algunos conceptos del frontend.

Podrás ir viendo el código utilizado en este repositorio: https://github.com/powerhdeleon/100DaysAsAFrontendDev

El reto de 100 días comienza el día 19 de Julio y termina el día 27 de Octubre del año 2021.

Me enfocare en tecnologías que van desde CSS, javascript avanzado y para que sea mucho más reto para mi, me adentrare a React.

Semana 1

Semana 2

Semana 3

Semana 4

Semana 5

Semana 6

Semana 7

Semana 8

Semana 9

Cursos Premium

En este apartado encontraras mis cursos de Programación Premium.

Curso de Patrones de Diseño en C# implementados en ASP .Net

En este curso aprenderás que es un patrón de diseño y como utilizarlo en situaciones reales.

Algunos de los patrones de diseño que tiene el curso son Singleton, Factory, Dependency Injection, Repository, Unit of Work y más.

Puedes ir al curso dando clic aquí.

10 Cosas que te servirán para encontrar trabajo como Programador .Net Jr

En esta entrada te recomendare 10 conocimientos que te harán la tarea de encontrar trabajo como programador .Net más fácil.

En esta entrada te recomendare 10 conocimientos que te harán la tarea de encontrar trabajo como programador .Net más fácil.

1.- Fundamentos de C#

Los fundamentos de C# son obligatorios, conocer las palabras reservadas más utilizadas, las sentencias, los bucles y tipos de datos te ayudara a tener un buen manejo de la tecnología.

Puedes tomar un curso completo gratis de fundamentos de C# aquí.

2.- Programación Orientada a Objetos

La programación orientada a objetos esta presente en la mayoría de lenguajes de programación más utilizados, y es obligatorio conocerla.

El comprender el concepto de clase y objetos, así como herencia, polimorfismo y encapsulamiento te ayudara a entender como se comportan las bibliotecas o frameworks que vas a utilizar comúnmente.

Puedes tomar un curso de Programación Orientada a Objetos gratuito aquí.

3.- Interfaces

Las interfaces son la base de los patrones de diseño, te ayudaran a tener mayor abstracción en la creación, estructura y comportamiento de tus clases.

Una interface te obligara a cumplir con reglas, como si de un contrato se tratara, esto optimizara el modo como programas pudiendo categorizar tus clases para que puedan tener un comportamiento bien planteado.

Si quieres ver una explicación de interfaces da clic aquí

4.- Entity Framework

El ORM oficial de .Net, con él te podras conectar a una base de datos y realizar consultas bajo el paradigma Orientado a Objetos.

Con este ORM podrás utilizar objetos y métodos para hacer los cambios en la información guardada en tu base de datos.

Entity Framework puede trabajarse como Database first que es cuando ya tiene tu base de datos existente y la mapeas en clases y objetos o también puedes trabajar con Code first que es lo recomendado cuando la base de datos aun no existe.

Puedes dar un vistazo a Entity Framework aquí.

5.- LINQ

La extensión declarativa para manejo de colecciones de C#.

El conocer LINQ te ayudara a manejar fácilmente información ya sea en base de datos o ya sean arreglos, tareas de todos los días.

Puedes ver un video de LINQ para novatos aquí

6.- Delegados

Los delegados son la representación de referencias de que es lo que recibe un conjunto de métodos, y que es lo que regresarán.

Esto nos permitirá utilizar funciones de orden superior que recibirán parámetros de funciones de primer orden tipadas, dándonos seguridad de que no recibiremos una función de distinto tipo a lo esperado.

En este video explico a detalle los delegados.

7.- Generics

Con los Generics podrás reutilizar código de clases y métodos con distintos tipos de datos.

Imagina que tienes que hacer el envió de información a un servicio por solicitud HTTP, el proceso siempre será el mismo, lo único que cambia es la información enviada, con Generics podrías hacer un método que funcione igual pero reciba el tipo de dato a utilizar y con esto no tendrás que hacer un método para cada tipo de información que debas enviar.

Si quieres ver Generics en acción da clic aquí.

8.- MVC

El Patrón Aruitectonico MVC es la base del framework ASP el cual es muy probable vayas a utilizar.

Comprender la M de modelo como una clase que tiene atributos y solo eso, la V de vista que representará la información en contenido HTML dinámico y la C de Controlador como un receptor de solicitudes que decidirá como tratar la información recibida y regresar una vista es base para trabajar en desarrollo web en .Net.

Te proporciono un video donde explico a detalle estas entidades con código.

9.- Inyección de dependencia

Los patrones de diseño son tecnicas que resuelven problemas en especifico, estas soluciones hacen que no reinventemos la rueda.

El patrón de diseño Inyección de dependencia es de los más utilizados, sobre todo por los frameworks, y es seguro que al trabajar en ASP .Net vas a tener que hacer uso de él.

La Inyección de dependencia le quita la responsabilidad de creación de un objeto a una clase, haciendo que esta lo reciba inyectado (enviado como parametro), ya sea en su constructor o en un metodo.

Asp .Net Core/ .Net5 tiene su propio mecanismo de inyección de dependencia por lo cual es importante conozcas de que va este patrón de diseño.

Aquí puedes ver el patrón de diseño Inyección de dependencia explicado en C#

10.- Asincronía

La asíncronia te servira para no detener tu secuencia principal de código cuando necesites realizar una tarea tardada.

Regularmente vas a tener que hacer consultas a la base de datos, a un servicio tercero o algun hardware y esto va a tardar sus propios segundos, con la asíncronia podras eguir haciendo otras cosas mientras el proceso que es tardado trabaja por su cuenta.

En este video te explico el proceso de asincronía con código en C#

Conclusión

Espero tomes en cuenta estas 10 cosas, y espero te sirvan en la búsqueda de tu primer trabajo como programador de C# .Net

Charlas de Programación como invitado

En esta entrada agrupare todas las charlas que he dado de programación en canales de youtube donde se me ha invitado.

Comprendiendo el Patrón de Diseño Observador con Aplicaciones en Tiempo Real con SignalR
Prev 1 of 3 Next
Prev 1 of 3 Next

Siempre hay varias maneras de programar una solución

En el área de la programación nos encontramos con un problema al cual hay que encontrarle una solución por medio de los algoritmos representados con código.

En el área de la programación nos encontramos con un problema al cual hay que encontrarle una solución por medio de los algoritmos representados con código.

Pero no solo en esta parte radica hacer la solución, también nos encontramos en armar una arquitectura, un diseño de base de datos, o un balance de componentes de tecnologías distintas que convivan entre si y juntos sean la solución.

El entender que el realizar un software de una manera la cual funcione bien, es decir, que cumpla su trabajo, dando la solución y esta solución sea segura, balanceada, escalar y todas esas características de calidad, implica que es una de las tantas maneras de haber creado la solución, más no es ni la mejor, ni la peor, pero si una de tantas.

A inicios del siglo 20 por allá de 1900 se reunieron un grupo de matemáticos, una asamblea donde a uno de estos matemáticos llamado David Hilbert, se le ocurrió plantear algunos problemas a resolver (desde entonces nos gustaba complicarnos), uno de esos problemas es el llamado Entscheidungsproblem (problema de decisión) el cual propone lo siguiente:

¿Existe un algoritmo el cual pueda decirnos si un cálculo de primer orden es un teorema valido?

En palabras más simples, existe un algoritmo que pueda decirnos si un enunciado lógico es demostrable.

Es aquí un punto crítico en la historia de la computación, ya que gracias a este problema alguien llamado Alan Turing y alguien llamado Alonzo Church demostraron que era imposible tal algoritmo pero también demostraron que en la computación se puede encontrar una solución de distintas formas.

Alan Turing creo la máquina de Turing la base de la programación imperativa y por su parte Alonzo Church creo el cálculo lambda la base de la programación declarativa.

La programación imperativa se ha convertido en la base de paradigmas de programación como la programación Orientada a Objetos, en cambio, la programación declarativa lo vemos en paradigmas funcional o lógico (prolog), de hecho, hoy en día el combinar los paradigmas es el pan de cada día.

Al final, nosotros creamos algoritmos que darán con la solución a un problema, pero siempre hay formas distintas de hacerlo, con menor o mayor abstracción, con menos líneas o más líneas de código, como sea, siempre habrá maneras distintas de tener una solución.

El objetivo de este texto es entender que si estamos programando y no damos con la solución, es bueno comenzar de nuevo esa parte y pensar cómo se haría de una manera distinta, no cerrarnos al primer camino en el cual nos quedamos atorados, sino entender que siempre hay otra forma de hacerlo.

Esto aplica tanto para programar, para diseñar una base de datos, para la arquitectura de software, bueno, aplica para toda etapa en el desarrollo de sistemas.

Si has llegado hasta aquí te agradezco, puedes compartir el texto si ha sido de tu agrado.

¿Cómo tener motivación para Programar?

Esta pregunta la he escuchado bastante desde hace años, ¿Cómo obtengo motivación para programar?

Esta pregunta la he escuchado bastante desde hace años, ¿Cómo obtengo motivación para programar?

La motivación es importante en el área de la programación, ya que programar sin motivación nos puede llevar a tener mejor o peor eficiencia.

Sin motivación podemos pasar horas en algo que puede ser sencillo de realizar, y con motivación podemos acortar el tiempo de algo que es difícil de realizar.

En el área de la psicología la motivación es un tema de debate, ya que la motivación puede influir en el comportamiento.

Puedes tener motivación por diversos factores que van desde el dinero, metas, o reconocimiento, el problema es cuando se pierde la motivación y aquí es cuando es bueno detenernos y pensar que es lo que nos motivaba en un principio y porque ya no nos motiva.

Un caso real de cuando perdemos la motivación viene cuando hemos comenzado un proyecto en el cual debemos aprender una tecnología nueva, el reto puede ser factor para tener motivación, el problema radica cuando al reto le echas problemáticas o reglas como el tiempo de entrega, cambios de requerimientos, o simplemente que la tecnología no es lo que uno esperaba.

El desmotivarnos es un problema para llevar el proyecto con eficiencia, ya que no seremos igual de productivos, y es aquí cuando comienzan los problemas. El perder el control del tiempo por no tener motivación de realizar las cosas es una bola de nieve que va creciendo hasta que se convierte en una avalancha.

En lo personal yo he pasado por muchas fases de desmotivación a través de mi vida laboral, y analizándolo ahora lo que me ha servido es lo siguiente: pensar si vale la pena seguir con la tarea, si lo vale, ya habremos encontrado un factor de motivación, pero si no lo vale es momento de actuar, de hacer un cambio.

Si la motivación se ha perdido porque no se siente que se gana el dinero suficiente, es momento de negociar y encontrar una solución, pero como todo, la negociación siempre debe ser yo te ofrezco y tú me ofreces, un ganar-ganar para los 2 lados.

Si la falta de motivación es por cuestión de carga de trabajo, es momento de jerarquizar y organizar, no quedarnos callados, pedir ayuda, ya sea de un recurso extra, ya sea de flexibilidad en el tiempo de entrega, más vale hacer algo bien que algo a la carrera, esto ahorrara mucho tiempo a futuro.

Si pierdes la motivación te recomiendo analizar qué es lo que te motiva en realidad, y ver como eso que te motiva puede ser obtenido con la tarea que realizas, o como llegar a realizar un cambio para que puedas estar en camino a la meta anhelada.

El motivarte es algo tan importante, que puede ser el recurso necesario en hacer algo bien, y no es malo apoyarnos también de sentimientos como el hacerlo por la familia o seres cercanos, ahí también se encuentra un factor que puede ser motivante, ya sea para compartir lo ganado con ellos como el tiempo o el dinero (el cochino dinero).

Cuando sientas que no tienes motivación, busca hacer un cambio, no solo te quedes estancado, hay que analizar que debemos cambiar para que regrese esa motivación con la cual un día estuvimos de buenas, se vale cambiar de trabajo, de tecnología, de retos, todo esto se vale.

Si llegaste hasta aquí te agradezco, que pases un buen día.

Lo que se aprende al terminar un proyecto de software

A través de los años he terminado bastantes proyectos como programador líder o arquitecto de software, y he encontrado un patrón común en todos ellos, y el patrón común es el siguiente pensamiento: si uno comenzara nuevamente el proyecto, lo haría mejor.

Esto nos trae cierta confusión, ya que nos hace pensar que lo hicimos de una manera no correcta, y nos hace plantearnos si es que realmente no somos buenos.

En sí, esta situación es de lo más normal, siendo parte del aprendizaje, la experiencia es eso, aprender a través de errar, el errar no es malo, el errar siempre ayuda, y sobre todo, ayuda más cuando ya no erramos donde hemos errado.

Con la experiencia que vamos ganando, vamos mejorando en tomar decisiones correctas, que harán reflejo en nuestros nuevos software que haremos en el futuro.

También es importante la retroalimentación del equipo de trabajo, y porque no, del usuario final, ya que el usuario final es el que vestirá nuestra creación.

Con el tiempo nos daremos cuenta que nos costara menos trabajo hacer ciertas tareas que en su momento fueron nuestro martirio, encontraremos soluciones de manera intuitiva, y pareceremos artesanos esculpiendo código como maestros.

Al finalizar un proyecto, es de mucha ayuda analizar y pensar de que otra forma lo hubiéramos hecho, y  así, ver huecos donde nos los habíamos visto, y veras que esos huecos ahí están, esas oportunidades de ahorro de tiempo al trabajar (Una abstracción mejor, una implementación de clases más apta).

Al mirar atrás (al ver mis códigos viejos), hace algunos años me sentía asustado, en como un sistema parecido a un espagueti está ahí funcionando, en la espera a que alguien tumbe esa torre de jenga, pero ahora, al mirar esos códigos, los veo como fuertes cimientos los cuales han forjado la experiencia que tengo ahora, en lo mismo de párrafos arriba, en el errar y mejorar.

El consejo que le doy a toda persona que comienza a programar es: siempre hay distintas formas de llegar a la solución, y siempre hay unas mejores que otras, con los años encontraremos esos fósiles de abstracción, pero por ahora diviértete experimentando, escarbando, y pronto miraras atrás y dirás: ¡Mira ese jenga! Cuando lo he armado lo he dejado tan perfectamente balanceado que sigue de pie.

Si llegaste hasta aquí, te agradezco bastante.

Los 10 mejores lenguajes de programación en 2021

Estos 10 lenguajes de programación tendrán una gran protagonismo en el 2021 y he hecho un resumen de lo que tratan.

Estos 10 lenguajes de programación tendrán una gran protagonismo en el 2021 y he hecho un resumen de lo que tratan.

Esta entrada está basada en encuestas de popularidad, salarios en estados unidos y aclaro, un ordenamiento personal, subjetivo, sobre estas fuentes, hecho por mí.

Por lo cual tomarlo como 10 lenguajes que están en estos listados, pero, tienen mi juicio personal.

10. Swift

Este lenguaje de programación es utilizado para crear aplicaciones móviles para Iphone y aplicaciones para macOs, por lo cual su aceptación laboral va a seguir siendo clave.

El lenguaje de programación fue creado por Chris Lattner en Apple en el año 2014, y desde entonces ha sido un lenguaje de programación que ha ido madurando versión a versión.

9. R

Lenguaje de programación creado en el año de 1995  por Robert Gentleman y Ross Ihaka del departamento de estadística de la Universidad de Auckland. Aunque le sirvió como referencia un lenguaje de programación más antiguo llamado lenguaje S.

Este lenguaje de programación está orientado al análisis estadístico, minería de datos, machine learning e investigación científica, e incluye un numero amplio de herramientas estadísticas las cuales se pueden extender en funcionalidad gracias a este lenguaje.

R también permite conectarse a distintos gestores de base de datos, así como al lenguaje de programación Python.

8. Go

El lenguaje de programación Go nace en el año 2009 de la mano de Robert Griesemer, Rob Pike y Ken Thompson (creador junto a Dennis Ritchie de Unix) en la empresa google.

El lenguaje de programación es concurrente y compilado y es simular al lenguaje C y Python.

Algunas de sus particularidades son su facilidad para aprenderlo, el punto y coma es opcional y no existen las Excepciones, ya que si hay una excepción debería ser eso, un caso excepcional.

Este lenguaje es utilizado en procesos que necesiten cargar información masiva, software que tenga poca interacción con usuarios y procesos que necesiten concurrencia.

Algunas empresas que utilizan el lenguaje a parte del mismo Google son: Netflix, Paypal, Twitch y Uber.

7. C#

El lenguaje C# nace en el año 2000 de la mano de Anders Hejlsberg (creador de Typescript).

Desde entonces este lenguaje de programación ha tenido un crecimiento de madurez constante.

C# es un lenguaje de programación multiparadigma y multiplataforma, siendo el lenguaje de programación principal de .Net, por lo cual lo podemos encontrar en aplicaciones web, Iot, videojuegos, aplicaciones móviles y escritorio.

6. Php

Php es un lenguaje de programación amado por muchos, y odiado por otros, y esto quizá se deba al gran número de proyectos existentes. El 78.9 % de sitios web están hechos con php (2020), es decir, 8 de 10 sitios están hechos en php.

El lenguaje ha tenido un empuje en rendimiento a partir de su versión 7 y es utilizado también para hacer Web Scraping gracias a la facilidad que nos proporciona por su naturaleza de lenguaje interpretado.

Si tú quieres hacer una aplicación web, deberías investigar antes si ya existe un Opensource hecho en php, ya que es una de las grandes ventajas de este lenguaje, que hay una gran variedad de soluciones ya hechas gratuitas que nos podrían resolver alguna problemática.

5. C++

C++ nacio como un lenguaje de programación que extendia al lenguaje C.

Fue llamado “lenguaje C con clases” al inicio, pero termino llamándose C++ refiriéndose a la instrucción de incremento de C.

Este lenguaje sigue actualizándose cada año, y ya incluye funciones lambda.

El lenguaje de programación C++ tiene este lugar ya que lo encontramos detrás de muchísimas aplicaciones Iot, la creación de compiladores, sistemas operativos, gestores de base de datos, videojuegos, navegadores o motores de código como V8 el cual corre javascript.

4. Java

Java es un lenguaje de programación que fue creado en 1996 por el equipo Gren Team en Sun Microsystem.

El lenguaje es multiparadigma y multiplataforma y tuvo una gran aceptación en los años 90s, lo cual lo hizo un lenguaje clave a aprender, ya que mucho software de bancos y empresariales están hechos con este lenguaje.

También lo seguimos encontrando en aplicaciones móviles en Android, aplicaciones embebidas, escritorio, videojuegos (Minecraft fue creado con este lenguaje en un inicio) y desarrollos web.

3. C

Muchos se sorprenderán de ver al lenguaje de programación C en este lugar.

El lenguaje C fue creado en los años 70 de la mano de Dennis Ritchie en los laboratorios Bell.

Nació como evolución del lenguaje B para resolver problemáticas que daba el estar programando en lenguaje ensamblador.

Este lenguaje es la base de muchos sistemas operativos hoy en día, el mismo Windows 10 tiene mucha funcionalidad base creada con este lenguaje.

En pocas palabras, el lenguaje de programación C es el pilar de muchos lenguajes que utilizamos hoy en día, y aunque no lo creas, sigue siendo utilizado bastante en los cimientos de lo que utilizamos todos los días: los sistemas operativos.

2. Javascript

Javascript es un lenguaje que nació en 1995 de la mano de Brendan Eich en Netscape.

Este lenguaje lo encontramos en todos lados, siendo el lenguaje de programación base para crear aplicaciones web del lado del frontend.

Pero javascript va más allá, gracias a que la mayoría de programadores saben programar poco o mucho en este lenguaje, ha sido llevado a ser lenguaje con el cual podemos crear videojuegos, aplicaciones de escritorio, aplicaciones móviles, en pocas palabras, javascript está en casi todos lados.

Su gran aceptación da un gran potencial de encontrar trabajo ya que es de los lenguajes mas solicitados.

1. Python

En el año de 1991 nace este lenguaje de programación de la mano de Guido Van Rossum en el centro para las matemáticas y la informática en Paises Bajos.

El lenguaje ha tenido un crecimiento enorme en los últimos años gracias a la gran facilidad que nos aporta para crear aplicaciones de Inteligencia Artificial y para crear Machine Learning.

Con la repercusión que ha ido teniendo la IA en los últimos años, Python es de los lenguajes más utilizados, por lo cual tenemos ya muchísima funcionalidad creada para solucionar estas problemáticas.

También es utilizado para desarrollo web de la mano de frameworks como Django o Flask.

Conclusión

Este top fue creado para darte a conocer los lenguajes de programación más utilizados o con mayor aceptación en el mercado laboral.

Aquí te dejo un podcast donde estuvo de invitado coderos y hablamos de este top.

Fuentes:

  1. https://www.tiobe.com/tiobe-index/
  2. https://www.northeastern.edu/graduate/blog/most-popular-programming-languages/
  3. https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm
  4. https://www.jetbrains.com/es-es/lp/devecosystem-2020/
  5. https://insights.stackoverflow.com/survey/2020

El Roadmap de C#

El objetivo de esta entrada es darte un camino que pueda servirte en tu preparación al adentrarte en el lenguaje de programación C#.

El objetivo de esta entrada es darte un camino que pueda servirte en tu preparación al adentrarte en el lenguaje de programación C#.

Esta entrada ira en actualización constante (solo pondré los cursos completos), aquí iré poniendo el camino a seguir para aprender C# con el contenido ya existente en mi canal.

Fundamentos de C#

Los fundamentos son importantes ya que te daran las bases solidas antes de entrar a crear aplicaciones reales.

Muchas veces pasa que entramos de lleno a un framework sin comprender las bases, y es cuando vienen los problemas

Programación orientada a objetos

La programación orientada a objetos es fundamental para llevar buenas prácticas, es por ello que una vez que has visto el curso de fundamentos, el siguiente paso sería la siguiente lista de videos.

Desarrollo Web con ASP.Net

Una vez que se comprende la programación orientada a objetos, es momento de entrar a un framework para desarrollo de cosas reales.

La lista de desarrollo en MVC .Net es el punto a seguir, donde aprenderás a crear sistemas web en el patrón arquitectónico MVC (Pronto se actualizara este curso por MVC .Net 5)

Conforme sigan terminándose de grabar más cursos irán apareciendo en esta entrada, por lo pronto puedes suscribirte a mi canal dando clic aquí, que tiene ya más de 600 videos.

¿Cómo superar la frustración al programar?

No es nuevo que yo te diga que la frustración es parte de cuando uno está programando, ya sea por no dar con la solución, ya sea por un bug con la tecnología, o por un sinfín de cosas más, esto es parte de la vida de un programador y espero te sirva lo que a mí me ha servido a través de los años para romper con esta maldición.

Creo que me di cuenta de cómo ir superando con esto gracias a una situación que me paso hace algunos años y te contare la anécdota, quizá te identifiques.

Cuando parecía no haber solución

Hace algunos ayeres me encontraba resolviendo una problemática: hacer un administrador de hilos.

Tenía que administrar un pool de hilos (grupo de hilos limitado disponibles para realizar una tarea) el cual estuviera al tanto para hacer la solicitud de un servicio el cual me retornaría una gran cantidad de información la cual debía ser base para una base de datos local.

El proceso necesitaba de algunos minutos por cada solicitud, por lo cual se optó por hacer un pool de hilos, esto yo lo comencé a crear de cero (era un chaval que no se le ocurrió que ya existía en .Net una implementación, aquí te muestro un video).

Cuando manejamos hilos tenemos que entender un conjunto de prácticas, estos hilos que trabajaran a la par, ¿Compartirán recursos?, ¿Compartirán variables? Hay que considerar ciertas cuestiones que yo en mi novata vida de programador era nuevo.

Como todo en la vida, cuando uno es nuevo en un terreno la frustración llegó, gracias a que la administración de hilos soltaba excepciones por el hecho de no entender que al compartir recursos, algunos de estos recursos solo pueden ser leídos 1 a la vez, cosa que desconocía y me llevó a la frustración.

Intente varios mecanismos pensando que todo era cuestión de mala planeación del algoritmo, pero en realidad el algoritmo iba bien, lo que no iba era esa parte de compartir recursos, algo que seguía yo ignorando, así que después de días sin dormir bien llegue a la conclusión de dejarlo por un tiempo y hacer otro tipo de cosas, como salir a correr.

Y es aquí cuando mi cerebro de manera inconsciente llegó a esa cuestión ¿No será que los hilos al compartir recursos de lectura causen este estrago?, y si, eso era, el compartir la lectura de un archivo de configuración de la vieja escuela hacia que esto no fuera para adelante.

En mi caso me sirvió dejar la codificada un tiempo, darle relajamiento al asunto, salir a correr, y la solución llegó, esta solución a partir de ese momento me sirvió, ahora cada que no veo solución después de intentar por horas, lo que hago es cerrar la laptop y hacer algo ajeno a programar y creerme, la mayoría de veces llegara la solución.

El subconsciente es muy trabajador

Esto no es mágico, en el libro llamado “La mente nueva del emperador de Roger Penrose” se habla sobre cómo es que llegan las ideas, en un apartado llamado “Inspiración, perspicacia y originalidad” se dan algunos ejemplos recopilados por el matemático francés Jacques Hadamard, y aquí transcribo un ejemplo de su colega Henri Poincaré que cita después de un momento de frustración intenso en sus propias palabras:

“…Dejé Caen, en donde vivía, para participar en una excursión geológica organizada por la Escuela de Minas. Las peripecias del viaje me hicieron olvidar mi trabajo matemático. Al llegar a Coutances abordamos un autobús para ir a algún lugar. En ese momento, cuando puse mi pie en el estribo, me vino la idea, sin que nada en mis pensamientos anteriores pareciera haber preparado el camino para ello, de que las transformaciones que había utilizado para definir las funciones Fuchsianas eran idénticas a las de la geometría no euclidiana. No verifiqué la idea; no hubiera tenido tiempo, ya que en cuanto tomé asiento en el autobús continué una conversación ya comenzada, pero tenía la certidumbre absoluta. A mi vuelta a Caen, y para quedarme tranquilo, verifiqué detenidamente el resultado.”

Esto parece algo típico de programadores, pero vemos que se da en todos lados (Newton y la manzana), la mente subconsciente sigue trabajando en el material ya recopilado, pero a veces solo falta darle un descanso al consciente para que el subconsciente se encargue de buscar y brindar esa idea que nosotros estando buscando no dimos.

Es normal que te frustres, pero hay que darle un respiro al cerebro realizando otra actividad, ¿O por qué no? Dormir, dudo ser el único que ha resuelto un problema de programación dormido.