<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="www.cizambra.com/feed.xml" rel="self" type="application/atom+xml" /><link href="www.cizambra.com/" rel="alternate" type="text/html" /><updated>2026-07-31T02:03:14+00:00</updated><id>www.cizambra.com/feed.xml</id><title type="html">Camilo Zambrano</title><subtitle>Software Development Engineer @ Amazon Web Services</subtitle><entry><title type="html">Mentoring</title><link href="www.cizambra.com/Mentoring/" rel="alternate" type="text/html" title="Mentoring" /><published>2019-09-02T00:00:00+00:00</published><updated>2019-09-02T00:00:00+00:00</updated><id>www.cizambra.com/Mentoring</id><content type="html" xml:base="www.cizambra.com/Mentoring/"><![CDATA[<p><img src="http://www.cizambra.com/images/mentoring.jpg" alt="Mentoring" /></p>

<p>Hola! Si entraste a leer este artículo, significa que estás interesado en que consiste una relación de mentoría, ya sea como mentor, o como mentee.</p>

<h3 id="qué-es-una-relación-de-mentoría-o-mentoring">¿Qué es una relación de mentoría o mentoring?</h3>
<p>La Universidad de Cambridge (1) tiene una definición bastante clara de que es el mentoring:</p>
<blockquote>
  <p>La mentoría es un sistema de guía semi-estructurada donde una persona comparte su conocimientos, habilidades y experiencia para asistir a otros a progresar en su propia vida y carreras. Los mentores necesitan ser fácilmente accesibles y estar preparados para ofrecer ayuda a medida que surja la necesidad — dentro de los límites establecidos.</p>
</blockquote>

<p>Como la cita lo explica, la mentoría consiste en una parte que comparte conocimientos y habilidades adquiridos en base a la experiencia, en forma de consejos, oportunidades y contactos (mentor) y una parte que recibe estos consejos, interioriza estas experiencias y toma decisiones para aplicar en su propia vida o carrera (mentee).</p>

<h3 id="qué-beneficios-me-entrega-una-mentoría">¿Qué beneficios me entrega una mentoría?</h3>
<p>Los beneficios (1)(2) varían acorde al rol que cumples en una relación de mentoría. Una consecuencia de esta relación, sin embargo es en el crecimiento de ambos — mentor y mentee.</p>
<h4 id="mentee">Mentee</h4>
<ul>
  <li>Provee motivación y consejo imparcial.</li>
  <li>Desarrollo personal y profesional.</li>
  <li>Desarrollo de una relación y red de apoyo.</li>
  <li>Incremento de la confianza en ti mismo.</li>
  <li>Asistencia en la resolución de problemas.</li>
  <li>Te permite alcanzar tus objetivos mas rapida y efectivamente que hacerlo solo.</li>
  <li>Construir una red de experiencia a la cual acudir, de la cual tu y otros pueden beneficiarse.</li>
  <li>Motiva a reflexionar desde la práctica.</li>
</ul>

<h4 id="mentor">Mentor</h4>
<ul>
  <li>Ser mentor te ayuda en tu propio desarrollo de habilidades y de carrera.</li>
  <li>Es una oportunidad para reflexionar desde la práctica.</li>
  <li>Aumenta tu satisfacción profesional.</li>
  <li>Desarrolla relaciones profesionales.</li>
  <li>Mejora el reconocimiento de tus pares y hacia tus pares.</li>
  <li>Hace uso de tu experiencia, poniéndola a disposición de otra persona.</li>
  <li>Amplía el entendimiento de tu organización o industria y la forma en cómo funciona.</li>
  <li>Te permite practicar habilidades interpersonales (habilidades blandas).</li>
  <li>Provee satisfacción personal a través del apoyo al desarrollo de otros.</li>
</ul>

<h3 id="debo-tener-mucha-experiencia-para-ser-mentor">¿Debo tener mucha experiencia para ser mentor?</h3>
<p>Para nada! Usualmente medimos nuestra capacidad para ser mentores basados en lo que podríamos compartir a nuestros pares, y nos olvidamos de que para llegar donde estamos tuvimos que iniciar desde algún punto. Hay gente que se encuentra en esa etapa de la vida y que agradecerán que les des un empujón inicial.</p>

<p>Espero que este artículo te ayude a decidir si quieres darle un boost a tu carrera con la ayuda de uno o mas mentores, o si quieres ayudar a alguien mas a potenciar la suya…o quien sabe, tal vez ambas!</p>

<p>(1) https://www.ppd.admin.cam.ac.uk/professional-development/mentoring-university-cambridge/what-mentoring</p>

<p>(2) https://www.dur.ac.uk/hr/mentoring/mentoringguidelines/mentoringbenefits/</p>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Complejidad Ciclomática</title><link href="www.cizambra.com/Cyclomatic-complexity/" rel="alternate" type="text/html" title="Complejidad Ciclomática" /><published>2018-06-22T00:00:00+00:00</published><updated>2018-06-22T00:00:00+00:00</updated><id>www.cizambra.com/Cyclomatic-complexity</id><content type="html" xml:base="www.cizambra.com/Cyclomatic-complexity/"><![CDATA[<p>El otro día tuve que lidiar con Ruby — no había trabajado con Ruby hace mucho…como un año, o algo así. Todo salió bien, por suerte no estaba tan oxidado como pensaba, o al menos eso era lo que creía. Cuando vino el momento del deployment, me encontré con esta joya emitida por <a href="https://github.com/rubocop-hq/rubocop">Rubocop</a>:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Cyclomatic complexity for on is too high. [8/6]
</code></pre></div></div>
<p>A decir verdad no recordaba haber escuchado ese concepto “Cyclomatic complexity”, así que me apoyé en mi viejo
amigo Wikipedia para tener una idea de más o menos a que se refería el término.</p>

<blockquote>
  <p>La Complejidad Ciclomática (en inglés, Cyclomatic Complexity) es una métrica del software en ingeniería del software que proporciona una medición cuantitativa de la complejidad lógica de un programa. Es una de las métricas de software de mayor aceptación, ya que ha sido concebida para ser independiente del lenguaje.</p>
</blockquote>

<p>Interesante, la pregunta que te podrás estar haciendo es <em>¿cómo medir la complejidad lógica de un programa?</em></p>

<p>Resulta que el mismo artículo tiene la respuesta:</p>

<blockquote>
  <p>El nombre “Complejidad Ciclomática” puede resultar engañoso para un programador ya que la idea de esta métrica no es contar los bucles (for, while, do…) en el código de un programa sino en el resultado de contar el número de ciclos diferentes que se siguen en un fragmento de código de un programa habiendo creado una rama imaginaria desde el nodo de salida al nodo de entrada del diagrama de flujo correspondiente a este fragmento de código. Un nombre más adecuado podría ser Complejidad condicional ya que el cálculo de esta métrica se ajusta más al hecho de buscar condiciones que contar ejecuciones de predicados dentro de bucles.</p>
</blockquote>

<p>En resúmen,<strong>complejidad ciclomática</strong> es cuántas ramas posibles producto de las diversas condiciones existen para una secuencia lógica dentro de un programa (o una función). Básicamente el error que tenía era producto de tener demasiados escenarios posibles para mi función.</p>

<p><strong>¿La solución?</strong> simplificar mi código, Ruby me estaba diciendo que mi función estaba haciendo demasiadas cosas. <strong>¿Cómo simplifiqué mi código?</strong> extrayendo la lógica de mi función en subfunciones.</p>

<p>Aquí un ejemplo de lo que hice</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>def my_function expected_hash
  return if expected_hash.blank?
  return if expected_hash[:key1].is_a? MyModule::FirstClass

  if expected_hash[:key2] == ExpectedConstKey
    if expected_hash[:key3].is_a? String
      puts "My expected output"
    else
      puts "This is an example of another output"
    end
  else
    return
  end
end
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>def my_function expected_hash
  return if expected_hash.blank?
  return if expected_hash[:key1].is_a? MyModule::FirstClass

  puts_or_return(expected_hash)
end

def puts_or_return expected_hash  
  if expected_hash[:key2] == ExpectedConstKey
    if expected_hash[:key3].is_a? String
      puts "My expected output"
    else
      puts "This is an example of another output"
    end
  else
    return
  end
end
</code></pre></div></div>]]></content><author><name></name></author><summary type="html"><![CDATA[El otro día tuve que lidiar con Ruby — no había trabajado con Ruby hace mucho…como un año, o algo así. Todo salió bien, por suerte no estaba tan oxidado como pensaba, o al menos eso era lo que creía. Cuando vino el momento del deployment, me encontré con esta joya emitida por Rubocop: Cyclomatic complexity for on is too high. [8/6] A decir verdad no recordaba haber escuchado ese concepto “Cyclomatic complexity”, así que me apoyé en mi viejo amigo Wikipedia para tener una idea de más o menos a que se refería el término.]]></summary></entry><entry><title type="html">La paradoja del cumpleaños</title><link href="www.cizambra.com/Birthday-Paradox/" rel="alternate" type="text/html" title="La paradoja del cumpleaños" /><published>2017-08-31T00:00:00+00:00</published><updated>2017-08-31T00:00:00+00:00</updated><id>www.cizambra.com/Birthday-Paradox</id><content type="html" xml:base="www.cizambra.com/Birthday-Paradox/"><![CDATA[<p><img src="http://www.cizambra.com/images/childrens_holiday.jpg" alt="Birthday party" /></p>

<p>Hace un tiempo necesitaba generar IDs únicos para uno de mis proyectos. En realidad la tarea era
bastante sencilla, escoger cómo crear dichos IDs únicos sólo basandome en una restricción; cada
ID debía estar compuesto por 10 caracteres alfanuméricos, ni más ni menos (bueno, en verdad son
dos restricciones en una).</p>

<p>Buscando por algún Java package que cumpliera mi objetivo, encontré 
<a href="https://stackoverflow.com/questions/41107/how-to-generate-a-random-alpha-numeric-string">una pregunta</a> 
en StackOverflow (sí, yo también lo uso). Y leyendo en detalle las respuestas, encontré lo siguiente:</p>

<blockquote>
  <p>Beware the birthday paradox.</p>
</blockquote>

<p><em>Cuidado con la paradoja del cumpleaños</em>. En lo personal nunca había escuchado de ella, y me pareció
interesante así que recurrí <a href="https://es.wikipedia.org/wiki/Paradoja_del_cumplea%C3%B1os">a Wikipedia</a> para informarme
más al respecto. El artículo lo explica así:</p>

<blockquote>
  <p>El problema del cumpleaños, también llamado paradoja del cumpleaños, establece que de un conjunto 
de 23 personas, hay una probabilidad del 50,7% de que al menos dos personas de ellas cumplan años el
 mismo día. Para 57 o más personas la probabilidad es mayor del 99%. En sentido estricto esto no es 
 una paradoja ya que no es una contradicción lógica; no es una paradoja pero es una verdad 
 matemática que contradice la común intuición.</p>
</blockquote>

<p>Luego de haber leído (y aprendido) sobre esta paradoja, me entró la duda ¿cuán probable es que al 
momento de generar un ID único de 10 caracteres ya exista otro creado con el mismo valor?, 
¿cuán únicos son realmente estos IDs?.</p>

<p>Saqué lápiz y papel y me puse a calcular (en verdad abrí Excel y puse los valores ahi).</p>

<p>De acuerdo a lo expuesto en el artículo de Wikipedia, <em>la probabilidad que cualquiera en una 
habitación de n personas (excluido Ud.) tengan el mismo día de cumpleaños que usted está dada por</em></p>

\[1 - \left( \frac{364}{365} \right)^n\]

<p>Aplicando el mismo concepto a nuestro contexto (10 caracteres alfanuméricos),  podríamos calcular
la probabilidad de que cualquier ID en un set de tamaño n (excluido el ID que se está generando, 
llamémosle ID candidato), tenga la misma combinación de caracteres alfanuméricos que el ID candidato.</p>

<p>\(1 - \left( \frac{(26 + 26 + 10)^{10} - 1}{(26 + 26 + 10)^{10}} \right)^n =
1 -  \left( \frac{(62)^{10} - 1}{(62)^{10}} \right)^n\)
\(= 1 -  \left( \frac{(8.3929937\mathrm{e}+17) - 1}{8.3929937\mathrm{e}+17} \right)^n\)</p>

\[= 1 - (0.999999999999999998808530018409582986761223851907918274095)^n\]

<p>Obviamente a medida que n se incrementa, las probabilidades de colisión aumentan; en este caso
el aumento es casi imperceptible, y sólo empieza a hacerse visible cuando el orden de magnitud de n 
es $10^{17}$.</p>

<p>Como conclusión, van a tomar años (o una muy malísima suerte) para que haya una colisión entre dos
IDs de 10 caracteres alfanuméricos, por lo que los IDs generados podrían considerarse únicos.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry></feed>