<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>El arte es la destreza</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/destreza/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/destreza/feed.xml</link>
    <description>Negocio sostenible en desarrollo de software</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:07:48 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Después de más de dos lustros de publicar notas</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/despues-de-mas-de-dos-lustros-de-publicar-notas</link>
      <pubDate>Sun, 24 Jun 2018 03:39:35 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=1005</guid>
      <description><![CDATA[Es posible que mis notas ya no sean bienvenidas en este sitio de blogs de MSDN. Si eso termina...]]></description>
      <content:encoded><![CDATA[<p class="nflat justif">Es posible que mis notas ya no sean bienvenidas en este sitio de blogs de MSDN. Si eso termina siendo el caso, entonces por favor encuentre otras notas mías en español en los siguientes sitios:</p>
<p class="nflat justif">(1) <a target="_blank" href="https://agilidad.blogspot.com/">https://agilidad.blogspot.com/</a> </p>
<p class="nflat justif">(2) <a target="_blank" href="https://formularsoftware.blogspot.com/">https://formularsoftware.blogspot.com/</a> </p>
<p class="nflat justif">(3) <a target="_blank" href="https://retrodidacta.blogspot.com/">https://retrodidacta.blogspot.com/</a> </p>
<p class="nflat justif">(4) <a target="_blank" href="https://medium.com/@marcodorantes">https://medium.com/@marcodorantes</a> </p>]]></content:encoded>
    </item>
    <item>
      <title>Cibernética y lectoescritura como placer</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/cibernetica-y-lectoescritura-como-placer</link>
      <pubDate>Sat, 23 Jun 2018 19:07:21 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=985</guid>
      <description><![CDATA[Para mí —un programador de computadoras— es un deleite cada intento de poner por escrito mis...]]></description>
      <content:encoded><![CDATA[<a href="https://msdnshared.blob.core.windows.net/media/2018/06/turing.jpg"><img src="https://msdnshared.blob.core.windows.net/media/2018/06/turing.jpg" alt="" width="1679" height="969" class="aligncenter size-full wp-image-995" /></a>

<p class="nflat justif">Para mí —un programador de computadoras— es un deleite cada intento de poner por escrito mis pensamientos sobre lo que me interesa comunicar a una persona o, por otro lado, cada intento por controlar el comportamiento de una computadora al escribir líneas de código ejecutable. Escribir para procesadores basados en carbono (cerebros humanos) y escribir para procesadores basados en silicio (cerebros electrónicos: microprocesadores digitales) es algo muy delicioso para mí.</p>
<p class="nflat justif">Ambas actividades tienen destinatarios muy diferentes. Aunque tienen en común un rasgo que las hace igualmente atractivas para mí: complejidad. En particular, un tipo de complejidad que no es accidental, sino que es parte inherente de su esencia. Pero no la esencia del acto de escribir, sino la esencia del destinatario hacia quien escribo. Una complejidad, por tanto, que no puede ser eliminada, tan sólo regulada o conducida.</p>
<p class="nflat justif">En retrospectiva, fue hasta años después de haber terminado una carrera reglada por una institución académica que caí en cuenta de que el ejercicio de la cibernética –en un sentido amplio– es el nombre propio de lo me ha estado apasionando desde la adolescencia. Tal carrera tuvo la palabra “cibernética” en su título, aunque su contenido abarca muy muy poquito de cibernética —si se compara con el cuerpo de conocimiento científico actual sobre cibernética (en general, la comunicación y el control entre humanos, entre máquinas y entre sistemas complejos adaptativos diversos)—.</p>]]></content:encoded>
    </item>
    <item>
      <title>¿Qué es pensar arquitecturalmente?</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/que-es-pensar-arquitecturalmente</link>
      <pubDate>Wed, 30 May 2018 02:12:42 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=975</guid>
      <description><![CDATA[Con base en lo que me dicta mi conciencia crítica profesional, tengo la responsabilidad de intentar...]]></description>
      <content:encoded><![CDATA[<p class="nflat justif">Con base en lo que me dicta mi <a target="_blank" href="https://blogs.msdn.microsoft.com/marcod/2010/05/02/una-introduccin-al-pensamiento-crtico/">conciencia crítica</a> profesional, tengo la responsabilidad de intentar traer a su atención algunos puntos para su consideración, amable colega en la industria de las <i>tecnologías de información</i> (TI), con respecto al nivel de servicio que ofrecemos a nuestros usuarios y clientes. Esto no es relevante para un solo proyecto, sino para la proyección de nuestro nivel profesional en creación de soluciones de negocio basadas en software. A la fecha, observo algunos intentos nuevos por mejorar en la <a target="_blank" href="https://blogs.msdn.microsoft.com/destreza/2011/03/01/qu-aporta-para-la-calidad-en-software/">categoría</a> de Proceso (en algunos casos, Scrum u otros entre los <a target="_blank" href="https://blogs.msdn.microsoft.com/marcod/2008/09/30/adaptive-methods-for-reality/"><i>métodos ágiles</i></a>), pero en la <a target="_blank" href="https://blogs.msdn.microsoft.com/destreza/2011/03/01/qu-aporta-para-la-calidad-en-software/">categoría</a> de Diseño/Arquitectura aún observo hábitos que para mí no son convincentes pues no tienen base sobre la cual apoyar mi confianza. Mi punto concreto es que también es necesario intentar mejoras en el nivel de destreza y madurez en la práctica de la arquitectura de soluciones de negocio basadas en software; es decir, desde la definición del problema, pasando por la elaboración iterativa e incremental de una posible solución, hasta el retiro total de la misma. Un ejemplo es que cualquier propuesta de solución debe ser sometida a un estricto escrutinio crítico para ver si realmente representa una solución sólida, estable y sostenible ante el problema de negocio en cuestión. Tal evaluación crítica requiere <i>pensar arquitecturalmente</i> desde múltiples perspectivas. Por ejemplo, el manejo de excepciones: ¿cómo se va a monitorear cada tipo de excepción por parte del personal a cargo de las operaciones en el ambiente de producción, o cualquier otro ambiente operativo?, ¿qué datos tendrá ese grupo para diagnosticar con tino? ¿Son suficientes dichos datos para determinar, con reloj en mano, la remediación adecuada? ¿Se tienen respuestas claras y son satisfactorias para los responsables de monitorear un ambiente productivo? ¿No? Entonces sugiero que se demanden respuestas claras y oportunas para evitar descalabros e insatisfacciones por parte de usuarios y clientes.</p>
<p class="nflat justif"><span style="font-family:Segoe UI Symbol">☛</span> Mi punto principal, en general, es que cada uno dentro de los grupos técnicos de cada proyecto (e.g., Scrum Development Team) necesita mejorar en su práctica de pensar arquitecturalmente desde su área de competencia. De esa manera lograremos aproximarnos a mejores soluciones ante los problemas de cada proyecto.</p>
<p class="nflat justif">Mi intención no es pretender una respuesta que cierre la pregunta inicial, sino nutrir posibles conversaciones y discusiones sobre <i>pensar arquitecturalmente</i> con cualquiera interesado en el tema. La clave es no sólo incluir miembros de los grupos técnicos (e.g., Scrum Development Team), sino también incluir miembros del negocio en cuestión (e.g., Scrum Product Owner). Es decir, pensar arquitecturalmente no sólo es relevante para grupos técnicos de TI, sino principalmente es relevante para el diseño técnico —i.e., detallado— de las estrategias comerciales de los negocios hacia sus propios clientes (lo cual sería parte de la<i> carnita</i> rescatable de la así llamada “arquitectura empresarial”).</p>
<p class="nflat justif">¿Cómo pensó el grupo de albañiles, arquitectos e ingenieros de, por ejemplo, la Torre Latinoamericana –en la Ciudad de México– para que se mantuviera en pie todos estos años? ¿Cuáles valores, principios, prácticas y hábitos fueron parte de su ambiente profesional como para funcionar como grupo de trabajo con tales resultados? El resultado de su modo de pensar y actuar ha permitido que muchos habiten tal edificio por muchos años sin preocuparse de si hoy permanecería en pie. Con su ambiente profesional no sólo edificaron un inmueble material, sino que edificaron bases sobre las cuales se apoyó la confianza de todos en lo que hacían.</p>
<p class="nflat justif">Antes pensaba que crear software era una disciplina de ingeniería y que todo proyecto debería tan sólo seguir prescripciones ya establecidas y probadas. Pero después de indagar comprobé que no debe, ni puede, ser así para cada proyecto. Por lo cual, el ejemplo anterior me sirve para pensar más en cómo un ambiente profesional (i.e., conjunto de valores, principios, prácticas, hábitos, etc.) puede ser un caldo de cultivo para ese tipo de resultados.</p>
<p class="nflat justif">Una inferencia obvia es que un ambiente profesional debe enfocarse en edificar confianza en lo que se plantea y se hace ahí. Una base sólida sobre la cual apoyar la confianza es la evidencia material verificable, no sólo las palabras y las buenas intenciones. Si de confianza se trata: <i>Lo importante no es </i><i>quererlo, </i><i>creerlo o decirlo</i> —eso cualquiera lo hace—<i>, sino demostrarlo</i>. Así se está en mejor posición para cimentar una confianza duradera.</p>
<p class="nflat justif">Las profesiones confiables hoy en día se derivan de la confianza que aportan los procesos de las ciencias. Por lo que regresar a <a target="_blank" href="https://blogs.msdn.microsoft.com/marcod/2007/08/20/una-introduccin-a-la-ciencia-pensamiento-cientfico-y-el-mtodo-cientfico/">los básicos del pensamiento científico</a> es parte de mejorar una profesión hoy en día y de mejorar los ambientes en donde se ejerce cualquiera de las profesiones contemporáneas. Pero, por favor, debe quedar claro, aquí no me refiero al adefesio de “el método científico” que se expone en los sistemas escolarizados tradicionales. Eso sólo existe en las [j]aulas de dichas escolarizaciones. Aquí me refiero a cada perspectiva adulta, amplia, profunda y compleja que del pensamiento científico se ha evaluado desde la filosofía de la ciencia, i.e., epistemología.</p>
<p class="nflat justif">Para no extenderme más aquí, intentaré provocarle la curiosidad, amable lector, diciendo que la confianza en las ciencias inicia con la destreza para distinguir entre conocimiento y meras opiniones.</p>
<p class="nflat justif">Además, para ser explícito, propongo que <i>pensar arquitecturalmente</i> está ligado de manera directa con el autocultivo necesario para realizar estrictos escrutinios críticos. Pero esa relación no agota los modos de pensamiento relacionados. Los modos de pensar en la categoría del orden superior, i.e., la metacognición, cooperan entre sí necesariamente: el pensar creativo, el pensar crítico, el pensar solidario –por mencionar algunos– interactúan por demanda en un <i>pensar arquitect</i><i>ónico</i>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Categorías de la realidad</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/categorias-de-la-realidad</link>
      <pubDate>Mon, 13 Nov 2017 03:37:32 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=965</guid>
      <description><![CDATA[Por favor, amable lector, tome conciencia de que la creación de soluciones de negocio basadas en...]]></description>
      <content:encoded><![CDATA[<p class="nflat justif">Por favor, amable lector, tome conciencia de que la creación de soluciones de negocio basadas en software no es ni ingeniería civil ni es arquitectura. Por lo que las analogías con esas otras disciplinas son tan sólo eso: analogías, las cuales deben evaluarse y no transferirse como conclusiones aplicables directamente a nuestra profesión.</p>
<p class="nflat justif idea">Una de las palabras de moda, entre otras, parece ser “ágil”. No pocos publicistas abusan de esa palabra al adherirla sobre aquello que quieren vender. Si su objetivo ahora fuese vender espejos, entonces a los mismos espejos de siempre, los mismos que vendían, por ejemplo, con la etiqueta de “orientados a objetos”, ahora los anuncian como “espejos ágiles”. Algo similar puede ocurrir con otras palabras de moda, como “microservicios”.</p>
<p class="ident justif">Por ejemplo, recién inicié una lectura crítica del libro a continuación: <a target="_blank" href="https://amzn.com/B076GBQ2G9/">Agile People: A Radical Approach for HR &amp; Managers (That Leads to Motivated Employees)</a>. Mi evaluación preliminar del mismo es favorable. Aunque, como la palabra “agile” está en el título, evaluaré más a fondo si se trata del artilugio de marras para vender más libros o sí discurre sobre algo substancial. Además, un riesgo muy peligroso es que su título sea malinterpretado y termine por alentar prejuicios y etiquetas sobre las personas: “esta persona es ‘ágil’ o aquella otra persona no es ‘ágil’” —¿ve usted las peligrosas implicaciones de que alguien incompetente tome decisiones con base en tales prejuicios?</p>
<p class="nflat justif">«<i>El hábito no hace al monje</i>» —dicen por ahí. Digámoslo así: una es la apariencia y otra es la realidad subyacente. Una es la forma y otra es la materia de dicha forma. Ambas categorías son partes de un todo y ambas son relevantes, en tanto no se tome lo uno por lo otro. Una cosa es el semblante superficial, contingente; y otra cosa es la substancia necesaria, la que hace emerger aquel semblante. Si se enfoca en lo substancial, entonces puede usted planear que el semblante emergerá por sí sólo. Si se enfoca sólo en lo superficial, e.g., sólo en el uso de las palabras “correctas” sin el comportamiento correspondiente, entonces podría usted estar construyendo sobre arena y entonces no se sorprenda de que lo substancial nunca ocurra en los hechos de la realidad objetiva.</p>
<p class="nflat justif">Le invito a iniciar conversaciones sobre los rasgos profesionales de la creación de soluciones de negocio basadas en software y –aún más importante– le invito a mantener esas conversaciones abiertas, sin intentar cerrarlas y sin considerar las cuestiones clausuradas por completo.</p>]]></content:encoded>
    </item>
    <item>
      <title>Profesionalización</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/profesionalizacion</link>
      <pubDate>Sat, 14 Oct 2017 07:59:52 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=955</guid>
      <description><![CDATA[Quizá un camino que se aproxima más a la profesionalización, en el sentido de ejercer a cabalidad...]]></description>
      <content:encoded><![CDATA[<p class="nflat justif">Quizá un camino que se aproxima más a la profesionalización, en el sentido de ejercer a cabalidad una ciencia o un arte, sea precisamente no buscar la profesionalización entendida como recorrer grados académicos y ascender estructuras jerárquicas, sino mantenerse como un devoto aficionado a la curiosidad propia y al aprendizaje; especialmente si ese aprendizaje es cooperativo, en conversación y en discusión con otros, sin ortodoxias académicas ensimismadas y desapegadas del resto del mundo.</p>
<p class="nflat justif">Por fortuna yo no perdí tiempo estudiando filosofía en ninguna institución. Me hubiera sucedido lo que a Jonathan Keats, lo cual es lo mismo que ya he hecho en varias ocasiones: abandonar instituciones que pretenden tener el monopolio de la verdad ya sea en política, historia, ciencia, religión o en otras áreas de mucho interés para mí; como la creación de soluciones de negocio basadas en software.</p>
<p class="nflat"><a target="_blank" href="https://bit.ly/1fWCedr">What the World Needs is More Curious Amateurs</a>.</p>
<img src="https://assets1.bigthink.com/system/idea_thumbnails/44454/primary/115485138001_1655333463001_ari-origin07-arc-145-1337898068982.jpg?1337898178">]]></content:encoded>
    </item>
    <item>
      <title>Hermenéutica en software</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/hermeneutica-en-software</link>
      <pubDate>Sat, 07 Oct 2017 21:39:46 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=935</guid>
      <description><![CDATA[El otro día fui a esta conferencia sobre la vida y, principalmente, la obra literaria de Antoine...]]></description>
      <content:encoded><![CDATA[<a href="https://msdnshared.blob.core.windows.net/media/2017/10/principito.png"><img src="https://msdnshared.blob.core.windows.net/media/2017/10/principito.png" alt="" width="331" height="529" class="aligncenter size-full wp-image-945" /></a>

<p class="nflat justif idea">El otro día fui a <a target="_blank" href="https://pendulo.com/id/178311">esta conferencia</a> sobre la vida y, principalmente, <a target="_blank" href="https://pendulo.com/conferenciaelprincipito">la obra literaria de Antoine de Saint Exupêry</a>.</p>
<p class="ident justif idea">¿Será descabellado decir que para mí ese tipo de material representa parte de mi “capacitación” profesional en creación de soluciones de negocio basadas en software?</p>
<p class="ident justif">Dicho así, sin justificación, no es claro y cabe la duda sobre cómo estarían relacionados esos dos temas, lectoescritura y creación de software, tan dispares en apariencia.</p>
<p class="nflat justif idea">Por un lado, he visto lo que la lectoescritura le puede hacer a una persona en términos de transformarle la mentalidad —para bien o para mal, pues el resultado no siempre sería miel sobre hojuelas—. Aquí opera la destreza básica para interpretar un texto: entre mayor destreza, más jugo se le saca al texto. Por lo que una interpretación a la ligera no es lo mismo que una interpretación más pensada.</p>
<p class="ident justif">La obra «El principito» de de Saint Exupêry es un caso de excesiva mercantilización y de muchas interpretaciones a la ligera. No es una obra escrita para infantes, sino una catarsis melancólico-existencial repleta de añoranza. Por lo que me ha interesado tomarla, entre otras obras, para ejercitar mis capacidades interpretativas o hermenéuticas e intentar sacarle más jugo. Por ejemplo, ¿quién o qué simboliza la rosa? ¿Qué o quién es el zorro? ¿Y el cordero? Etc. Hay variedad de posibles respuestas en función del sistema de interpretación utilizado. Nuestra destreza interpretativa, por tanto, depende de cuántos sistemas de interpretación conozcamos y seamos capaces de aplicar a textos concretos.</p>
<p class="nflat justif">Por el otro lado, creación de software como profesión tiene textos fundacionales que son muy importantes y que debemos interpretar cada vez más y mejor. De eso, en parte, depende un mejor entendimiento de nuestra profesión y del jugo que le sacamos a la aplicación práctica de las ideas en esos textos. Tan sólo por mencionar unos ejemplos de esos textos:</p>
<p class="nflat justif">(1) <a target="_blank" href="https://www-cs-faculty.stanford.edu/~knuth/taocp.html">The Art of Computer Programming (TAOCP)</a></p>
<p class="nflat justif idea">(2) <a target="_blank" href="https://mitpress.mit.edu/sicp/full-text/book/book.html">Structure and Interpretation of Computer Programs, Second Edition</a></p>
<p class="ident justif idea">–<a target="_blank" href="https://mitpress.mit.edu/books/structure-and-interpretation-computer-programs">Editorial</a></p>
<p class="ident justif idea">–<a target="_blank" href="https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/">Curso</a></p>
<p class="nflat justif">(3) <a target="_blank" href="https://dl.acm.org/citation.cfm?id=41801">Managing the development of large software systems: concepts and techniques</a></p>
<p class="ident justif"><span style="font-family:Segoe UI Symbol">☛</span> A este último texto se le atribuye establecer el inicio histórico del modelo en cascada para desarrollo de software; sin embargo, tal texto fue interpretado muy a la ligera y en realidad constituye —según el propio autor— una refutación en contra de dicho modelo.</p>
<p class="nflat justif idea">Adivine usted qué, amable lector: lo mismo aplica para los textos que contienen ideas clave en temas como Agile, o Scrum, o Domain-driven design, o micro-servicios, o IT social sentiments, o Machine Learning, o Big Data, etc.</p>
<p class="ident justif idea">Le pregunto: <span style="font-family:Segoe UI Symbol">☛</span> <span style="font-family:">¿</span>Logr<span style="font-family:">é</span> explicar algo, en general, del porqu<span style="font-family:">é</span> es relevante, profesionalmente, mejorar nuestras destrezas para interpretar textos?</p>]]></content:encoded>
    </item>
    <item>
      <title>Procesos de aprendizaje</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/procesos-de-aprendizaje</link>
      <pubDate>Sat, 07 Oct 2017 21:04:12 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=925</guid>
      <description><![CDATA[¿Qué clase de cambios son pertinentes en una transformación cultural para la mejora en creación de...]]></description>
      <content:encoded><![CDATA[<a href="https://msdnshared.blob.core.windows.net/media/2017/10/shuhari.png"><img src="https://msdnshared.blob.core.windows.net/media/2017/10/shuhari-300x129.png" alt="" width="300" height="129" class="aligncenter size-medium wp-image-926" /></a>
<p class="nflat justif">¿Qué clase de cambios son pertinentes en una transformación cultural para la mejora en creación de soluciones de negocio basadas en software?</p>
<p class="ident justif">Dado el tipo de trabajo que está íntimamente involucrado en los procesos de dicha creación —es decir, el trabajo de tipo intelectual—, una clase pertinente de cambios, por ejemplo, serían cambios en los procesos de aprendizaje. Es decir, cambios en los procesos por los cuales las ideas se hacen parte de la mentalidad, y de la conducta, de las personas involucradas. <span style="font-family:Segoe UI Symbol">☛</span> <i>Distinci</i><span style="font-family:">ó</span><i>n relevante</i>: aqu<span style="font-family:">í</span> me refiero al aprendizaje, no me refiero a la ense<span style="font-family:">ñ</span>anza.</p>
<p class="ident justif">El aprendizaje está, principalmente, en manos del aprendiz. Por lo que el cambio particular que aquí propongo es intentar una mayor conciencia por parte del aprendiz sobre sus propios procesos de aprendizaje. <span style="font-family:Segoe UI Symbol">☛</span> Si el aprendiz logra una mayor conciencia de los tipos de pensamiento aplicables durante su recorrido en un tema dado, entonces esa mayor conciencia de sí mismo podría ayudarle a sopesar las oportunidades para aplicar adecuadamente, por ejemplo, el pensamiento dogmático, el pensamiento crítico y el pensamiento creativo. Ver referencia: <i>El progreso de un aprendiz</i>, más adelante.</p>
<p class="ident justif">Hay teorías del aprendizaje que distinguen entre datos, información y conocimiento pues, aunque están muy relacionados entre sí, en realidad son distintos en la estructura cognitiva del aprendiz. Los dos primeros se pudiesen transmitir por medio de los imperantes y cortoplacistas esquemas escolarizados, pero el tercero no es transmisible y lograrlo está por completo en manos del aprendiz.</p>
<p class="nflat justif idea">El progreso de un aprendiz</p>
<p class="nflat">—Edición 2015: <a target="_blank" href="https://agilidad.blogspot.mx/2015/01/el-progreso-de-un-aprendiz.html">https://agilidad.blogspot.mx/2015/01/el-progreso-de-un-aprendiz.html</a></p>
<p class="nflat">—Edición 2009: <a target="_blank" href="https://blogs.msdn.microsoft.com/destreza/2009/10/30/el-progreso-de-un-aprendiz/">https://blogs.msdn.microsoft.com/destreza/2009/10/30/el-progreso-de-un-aprendiz/</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Software Design — 2ª edición</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/software-design-2a-edicion</link>
      <pubDate>Tue, 21 Mar 2017 04:48:27 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=905</guid>
      <description><![CDATA[Nota a la 2ª edición: el siguiente texto lo redacté en el año 2001. Puse por escrito algunas de mis...]]></description>
      <content:encoded><![CDATA[<p class="nflat justif">Nota a la 2ª edición: <i>el siguiente texto lo </i><i>redacté </i><i>en el año 200</i><i>1</i><i>. </i><i>Puse por escrito algunas de mis nociones de aquella época y envié el texto a </i><i>un colega </i><i>quien ese año me </i><i>pregunt</i><i>ó </i><i>mi opinión sobre cómo diseñar software.</i><i> </i><i>P</i><i>or el momento</i><i> </i><i>l</i><i>a primera edición no está disponible en línea. En </i><i>e</i><i>sta segunda edición me tomé la libertad de disminuir </i><i>un poco </i><i>el </i><i>tufo</i><i> dogmático </i><i>de la primera edición</i><i>.</i><i> Además, </i><i>agregué </i><i>referencias </i><i>a la fecha de algunas </i><i>páginas en Internet</i><i> que cambiaron; aunque mantuve las referencias anteriores</i><i>,</i><i> quizá por nostalgia</i><i>.</i><i> Esta segunda edición tan sólo contiene pequeñas adaptaciones a la primera edición. Much</i><i>o</i><i>s de los puntos requieren actualizaciones mayores.</i></p>
<p class="nflat justif">——</p>
<p class="nflat justif">Con respecto al diseño de software, que es el aspecto más fascinante para mí de lo que hacemos como programadores profesionales, permíteme comentarte mis impresiones y conclusiones actuales acerca de esta actividad. Por supuesto, estas conclusiones están sesgadas por mi enturbiado entendimiento, pero después de estudiar la experiencia de algunas luminarias en nuestro campo, e intentar practicar sus lecciones, encuentro que dichas conclusiones tienen sentido para mí.</p>
<p class="nflat justif idea">
      <b>I. El resultado de la actividad 'diseño'</b>
    </p>
<p class="nflat justif">El resultado material de la actividad de diseño debe ser algo ejecutable. Cualquier cosa menos que eso es pura estimulación mental.</p>
<p class="ident justif idea" />
<p class="nflat justif idea">
      <b>II. Arquitectura de software</b>
    </p>
<p class="nflat justif">Todos los aspectos, de alto y bajo nivel, de nuestro diseño están expresados, implícita o explícitamente, en la arquitectura del software. Aunque “arquitectura de software” todavía es un término difuso, una exposición adecuada de arquitectura de software es la de Philippe Kruchten «The 4+1 View Model of Architecture».</p>
<p class="nflat justif idea">The 4+1 View Model of Architecture </p>
<p class="nflat justif">
      <a target="_blank" href="https://www.computer.org/csdl/mags/so/1995/06/s6042-abs.html">https://www.computer.org/csdl/mags/so/1995/06/s6042-abs.html</a> </p>
<p class="nflat justif idea">IEEE Software November 1995 (Vol. 12, No. 6)</p>
<p class="nflat justif idea">
      <a target="_blank" href="https://www3.software.ibm.com/ibmdl/pub/software/rational/web/whitepapers/2003/Pbk4p1.pdf">https://www3.software.ibm.com/ibmdl/pub/software/rational/web/whitepapers/2003/Pbk4p1.pdf</a> </p>
<p class="nflat justif">
      <a target="_blank" href="https://www.rational.com/media/whitepapers/Pbk4p1.pdf">https://www.rational.com/media/whitepapers/Pbk4p1.pdf</a> </p>
<p class="nflat justif idea">En resumen, la arquitectura de software considera 5 vistas o categorías, agrupadas por su naturaleza en:</p>
<p class="ident justif" />
<p class="ident justif idea">Conceptual:</p>
<p class="ident justif idea">Vista Lógica (clases, módulos y subsistemas)</p>
<p class="ident justif idea">Vista Concurrente (procesos y threads)</p>
<p class="ident justif" />
<p class="ident justif idea">Física:</p>
<p class="ident justif idea">Vista de Componentes (medios para empaquetar los elementos de la Vista Lógica: assemblies, DLLs)</p>
<p class="ident justif">Vista Distribuida (comúnmente llamada infraestructura de cómputo: servidores que contienen los elementos de la Vista de Componentes)</p>
<p class="ident justif idea" />
<p class="ident justif idea">Funcional:</p>
<p class="ident justif">Vista de Casos de Uso. Ésta gobierna a todo lo que puede existir en las otras vistas; en otras palabras, nada debe existir si no aporta a soportar la funcionalidad del software</p>
<p class="ident justif idea" />
<p class="nflat justif idea">
      <b>III. El código fuente es el diseño detallado del software</b>
    </p>
<p class="nflat justif idea">El diseño de alto nivel puede consistir de diagramas que expresen aspectos de las diferentes vistas de Kruchten, pero el diseño detallado es el código fuente. En software, nuestros planos detallados es un documento técnico llamado comúnmente «código fuente». Dichos planos de nuestro producto son entregamos al constructor del producto: el compilador o traductor a código ejecutable.</p>
<p class="ident justif idea" />
<p class="nflat justif idea">Philippe Kruchten, Jack W. Reeves y otros tienen algunas ideas al respecto:</p>
<p class="ident justif idea" />
<p class="ident justif idea">What is Software Design? by Jack W. Reeves</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.bleading-edge.com/Publications/C++Journal/Cpjour2.htm">https://www.bleading-edge.com/Publications/C++Journal/Cpjour2.htm</a>  </p>
<p class="nflat" />
<p class="ident justif idea">The Nature of Software: What's so Special About Software Engineering? by Philippe Kruchten</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.ibm.com/developerworks/rational/library/content/RationalEdge/oct01/TheNatureOfSoftwareOct01.pdf">https://www.ibm.com/developerworks/rational/library/content/RationalEdge/oct01/TheNatureOfSoftwareOct01.pdf</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.therationaledge.com/content/oct_01/toc.html">https://www.therationaledge.com/content/oct_01/toc.html</a>  </p>
<p class="nflat" />
<p class="ident justif idea">From Craft to Science: Searching for First Principles of Software Development by Koni Buhrer</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.ibm.com/developerworks/rational/library/content/RationalEdge/dec00/TheRationalEdgeDec00Issue.pdf">https://www.ibm.com/developerworks/rational/library/content/RationalEdge/dec00/TheRationalEdgeDec00Issue.pdf</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.ibm.com/developerworks/rational/library/content/RationalEdge/jan01/FromCraftToScienceJan01.pdf">https://www.ibm.com/developerworks/rational/library/content/RationalEdge/jan01/FromCraftToScienceJan01.pdf</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.therationaledge.com/content/dec_00/f_craftscience.html">https://www.therationaledge.com/content/dec_00/f_craftscience.html</a>  </p>
<p class="ident justif idea" />
<p class="nflat justif idea">
      <b>IV. Decidir es diseñar</b>
    </p>
<p class="nflat justif idea">Diseñar requiere decidir constantemente, diseñar es decidir. Decidir sobre los aspectos del diseño detallado, decidir sobre los aspectos de diseño de alto nivel, e incluso decidir que no vamos a decidir nada todavía sobre alguna propiedad particular del software; es decir, vamos a diferir dicha decisión.</p>
<p class="ident justif idea" />
<p class="nflat justif idea">Martin Fowler habla acerca del diseño en:</p>
<p class="ident justif idea" />
<p class="ident justif idea">Is Design Dead?</p>
<p class="ident justif idea">
      <a target="_blank" href="https://martinfowler.com/articles/designDead.html">https://martinfowler.com/articles/designDead.html</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">What's a Model For?</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.martinfowler.com/distributedComputing/purpose.pdf">https://www.martinfowler.com/distributedComputing/purpose.pdf</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://martinfowler.com/articles/purpose.pdf">https://martinfowler.com/articles/purpose.pdf</a> </p>
<p class="ident justif idea" />
<p class="nflat justif idea">
      <b>V. Diseño estable y emergente</b>
    </p>
<p class="nflat justif idea">Diseñar requiere consideración de los principios que gobiernan y sustentan la arquitectura de software; como dice Bertrand Meyer, los aspectos a gran escala de la arquitectura de software se encomiendan o están sustentados en los aspectos de bajo nivel o escala detallada (código fuente). Si estos aspectos no obedecen a principios coherentes y de estilo, entonces difícilmente se logran los aspectos a gran escala.</p>
<p class="ident justif idea" />
<p class="nflat justif idea">Existe un cuerpo de conocimiento importante acerca de diseño orientado a objetos, con reglas que representan esos principios coherentes y de estilo:</p>
<p class="ident justif idea" />
<p class="ident justif idea">Principles Of Object Oriented Design</p>
<p class="ident justif idea">
      <a target="_blank" href="https://c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign">https://c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign</a> </p>
<p class="ident justif idea" />
<p class="nflat justif idea">Las recomendaciones del maestro Stroustrup agregan perspectivas importantes:</p>
<p class="ident justif idea" />
<p class="ident justif idea">Bjarne Stroustrup's C++ Style and Technique FAQ</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.stroustrup.com/bs_faq2.html">https://www.stroustrup.com/bs_faq2.html</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.research.att.com/~bs/bs_faq2.html">https://www.research.att.com/~bs/bs_faq2.html</a> </p>
<p class="ident justif idea" />
<p class="nflat justif idea">Las prácticas básicas son esenciales. Steve McConnell, ex-programador de Microsoft, tiene buen material al respecto:</p>
<p class="ident justif idea" />
<p class="ident justif idea">Code Complete: A Practical Handbook of Software Construction</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.stevemcconnell.com/cc.htm">https://www.stevemcconnell.com/cc.htm</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Rapid Development: Taming Wild Software Schedules</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.stevemcconnell.com/rd.htm">https://www.stevemcconnell.com/rd.htm</a> </p>
<p class="ident justif idea" />
<p class="nflat justif idea">La técnica de factorización representa una excelente forma para mantener un diseño estable y flexible:</p>
<p class="ident justif idea" />
<p class="ident justif idea">Refactoring</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.refactoring.com">https://www.refactoring.com</a> </p>
<p class="ident justif idea" />
<p class="nflat justif idea">
      <b>VI. Control empírico del proceso de diseño</b>
    </p>
<p class="nflat justif idea">Un método de diseño es intrínsecamente iterativo e incremental. Se adhiere a un proceso 'gestalt'; es decir, no puedes terminar de diseñar software si primero no lo programas, y al mismo tiempo no puedes programar software si primero no lo diseñas.</p>
<p class="ident justif idea" />
<p class="nflat justif idea">Existen métodos sistemáticos de diseño y programación, Martin Fowler habla acerca de algunos métodos actuales:</p>
<p class="ident justif idea" />
<p class="ident justif idea">The New Methodology</p>
<p class="ident justif idea">
      <a target="_blank" href="https://martinfowler.com/articles/newMethodology.html">https://martinfowler.com/articles/newMethodology.html</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Continuous Integration (no daily build)</p>
<p class="ident justif idea">
      <a target="_blank" href="https://martinfowler.com/articles/continuousIntegration.html">https://martinfowler.com/articles/continuousIntegration.html</a> </p>
<p class="ident justif idea" />
<p class="nflat justif idea">
      <b>VII. Método sistemático de diseño</b>
    </p>
<p class="nflat justif idea">Un método sistemático de programación consiste de al menos tres partes:</p>
<p class="ident justif idea" />
<p class="ident justif idea">a. Una notación — el énfasis aquí es contar con un conjunto de conceptos de diseño que guarden coherencia y que puedan ser expresados por medio de dicha notación. Actualmente está de moda UML y es importante tener mentalmente disponibles sus conceptos para comunicar la arquitectura de software. Pero para el diseño detallado (código fuente) la notación más eficiente y efectiva sigue siendo el lenguaje de programación seleccionado.</p>
<p class="ident justif idea" />
<p class="ident justif idea">En otras palabras, todo lo que se puede expresar en un diagrama de clases en UML se puede expresar en el código fuente; y mientras las herramientas de generación de código carezcan del nivel de abstracción suficiente para eliminar la necesidad de modificar el código generado, el diseño detallado seguirá siendo el código fuente en sintaxis del lenguaje de programación.</p>
<p class="ident justif idea" />
<p class="ident justif idea">En el futuro, seguramente habrá las herramientas para expresar todos los aspectos del diseño detallado en una notación como UML, y entonces eso será nuestra nueva forma de código fuente.</p>
<p class="ident justif idea" />
<p class="ident justif idea" />
<p class="ident justif idea">b. Un proceso — actividades, roles y artefactos. Los mejores procesos son los que incluyen un ciclo cerrado de retro-alimentación que se ajusta a la naturaleza 'gestalt' del software.</p>
<p class="ident justif idea" />
<p class="ident justif idea">Los artículos en el siguiente sitio tienen información relevante acerca de los procesos que varios programadores profesionales han sintetizado:</p>
<p class="ident justif idea" />
<p class="ident justif idea">
      <a target="_blank" href="https://www.extremeprogramming.org/">https://www.extremeprogramming.org</a>
    </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.agilealliance.org">https://www.agilealliance.org</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">¿Qué es «Software craftsmanship»?</p>
<p class="ident justif idea">
      <a target="_blank" href="https://blogs.msdn.microsoft.com/destreza/2017/03/19/que-es-software-craftsmanship/">https://blogs.msdn.microsoft.com/destreza/2017/03/19/que-es-software-craftsmanship/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">El potencial de los métodos ágiles de diseño está en la esencia del desarrollo cooperativo:</p>
<p class="ident justif idea" />
<p class="ident justif idea">-Control empírico del proceso de desarrollo</p>
<p class="ident justif idea">-Comportamiento emergente o adaptativo</p>
<p class="ident justif idea">-Auto-organización</p>
<p class="ident justif idea" />
<p class="ident justif idea">c. Herramientas — que soporten el conjunto de conceptos disponibles en la notación.</p>
<p class="ident justif idea" />
<p class="ident justif idea">En la práctica, lo más eficiente y efectivo, si el objetivo es obtener software ejecutable, es usar las herramientas más simples que ayuden con la comunicación entre las personas en el equipo de desarrollo y entre los individuos y la computadora.</p>
<p class="ident justif idea" />
<p class="ident justif idea">En otras palabras, una simple hoja de papel y lápiz, o un pizarrón, son más efectivas que costosas herramientas CASE. No menos importante, el compilador es la mejor herramienta para verificar el aspecto estático de tu diseño detallado, el compilador hará un análisis preciso de tus decisiones de diseño y te dirá invariablemente toda inconsistencia con su sistema de tipos.</p>
<p class="ident justif idea" />
<p class="ident justif idea">Además, para verificar los aspectos dinámicos de tu diseño, un contexto de pruebas unitarias (unit-testing framework) te ayudará a obtener la retroalimentación para evolucionar tu diseño de forma coherente y concreta, satisfaciendo los aspectos de la Vista de Casos de Uso de tu arquitectura.</p>
<p class="ident justif idea" />
<p class="ident justif idea">Kent Beck y Erich Gamma exponen el diseño de un contexto de pruebas aquí:</p>
<p class="ident justif idea" />
<p class="ident justif idea">JUnit Cookbook</p>
<p class="ident justif idea">
      <a target="_blank" href="https://junit.sourceforge.net/doc/cookbook/cookbook.htm">https://junit.sourceforge.net/doc/cookbook/cookbook.htm</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">JUnit A Cook's Tour</p>
<p class="ident justif idea">
      <a target="_blank" href="https://junit.sourceforge.net/doc/cookstour/cookstour.htm">https://junit.sourceforge.net/doc/cookstour/cookstour.htm</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Como dice Martin Fowler: «<i>Never in the field of software development was so much owed by so many to so few lines of code</i>».</p>
<p class="ident justif idea" />
<p class="ident justif idea">
      <a target="_blank" href="https://www.junit.org">https://www.junit.org</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Contextos de pruebas para varios lenguajes de programación están disponibles aquí (incluyendo la versión en C++Builder que hice del CppUnit de Michael Feathers):</p>
<p class="ident justif idea" />
<p class="ident justif idea">
      <a target="_blank" href="https://www.xprogramming.com/software.htm">https://www.xprogramming.com/software.htm</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">En general, el material en este sitio provee buen material para el diseño y desarrollo de software:</p>
<p class="ident justif idea" />
<p class="ident justif idea">
      <a target="_blank" href="https://butunclebob.com/">https://butunclebob.com/</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.objectmentor.com/resources/articles">https://www.objectmentor.com/resources/articles</a>
    </p>
<p class="ident justif idea" />
<p class="nflat justif idea">Los mejores métodos sistemáticos de diseño y programación actuales se derivan del trabajo de las siguientes luminarias:</p>
<p class="ident justif idea" />
<p class="ident justif idea">Profesor Edsger Wybe Dijkstra</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.cs.utexas.edu/users/EWD/">https://www.cs.utexas.edu/users/EWD/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Kristen Nygaard</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.mn.uio.no/ifi/english/about/kristen-nygaard/">https://www.mn.uio.no/ifi/english/about/kristen-nygaard/</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.ifi.uio.no/~kristen/">https://www.ifi.uio.no/~kristen/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Ole-Johan Dahl</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.mn.uio.no/ifi/english/about/ole-johan-dahl/">https://www.mn.uio.no/ifi/english/about/ole-johan-dahl/</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.ifi.uio.no/%7Eolejohan/">https://www.ifi.uio.no/%7Eolejohan/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Alan Turing</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.turing.org.uk/turing/">https://www.turing.org.uk/turing/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Niklaus Wirth</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.inf.ethz.ch/personal/wirth/">https://www.inf.ethz.ch/personal/wirth/</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.cs.inf.ethz.ch/~wirth/">https://www.cs.inf.ethz.ch/~wirth/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Donald E. Knuth</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www-cs-faculty.stanford.edu/~knuth/">https://www-cs-faculty.stanford.edu/~knuth/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Bjarne Stroustrup</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.stroustrup.com/">https://www.stroustrup.com/</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.research.att.com/~bs/homepage.html">https://www.research.att.com/~bs/homepage.html</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Barbara Liskov</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.pmg.csail.mit.edu/~liskov/">https://www.pmg.csail.mit.edu/~liskov/</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.objectmentor.com/resources/articles/lsp.pdf">https://www.objectmentor.com/resources/articles/lsp.pdf</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">David Lorge Parnas</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.computer.org/web/awards/mills-david-parnas">https://www.computer.org/web/awards/mills-david-parnas</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.crl.mcmaster.ca/SERG/parnas.homepg">https://www.crl.mcmaster.ca/SERG/parnas.homepg</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Tom DeMarco</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.systemsguild.com/tdm.htm">https://www.systemsguild.com/tdm.htm</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.atlsysguild.com/GuildSite/TDM/Tom_DeMarco.html">https://www.atlsysguild.com/GuildSite/TDM/Tom_DeMarco.html</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Gerald M. Weinberg</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.geraldmweinberg.com">https://www.geraldmweinberg.com</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Larry Constantine</p>
<p class="ident justif idea">
      <a target="_blank" href="https://wiki.c2.com/?LarryConstantine">https://wiki.c2.com/?LarryConstantine</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.foruse.com/">https://www.foruse.com/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Edward Yourdon</p>
<p class="ident justif idea">
      <a target="_blank" href="https://yourdon.com/">https://yourdon.com/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Meilir Page-Jones</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.construx.com/Employees/Meilir_Page-Jones/">https://www.construx.com/Employees/Meilir_Page-Jones/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Grady Booch</p>
<p class="ident justif idea">
      <a target="_blank" href="https://researcher.watson.ibm.com/researcher/view.php?person=us-gbooch">https://researcher.watson.ibm.com/researcher/view.php?person=us-gbooch</a>
    </p>
<p class="ident justif idea" />
<p class="ident justif idea">James Rumbaugh</p>
<p class="ident justif idea">
      <a target="_blank" href="https://en.wikipedia.org/wiki/James_Rumbaugh">https://en.wikipedia.org/wiki/James_Rumbaugh</a>
    </p>
<p class="ident justif idea" />
<p class="ident justif idea">Ivar Jacobson</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.ivarjacobson.com/">https://www.ivarjacobson.com/</a>
    </p>
<p class="ident justif idea" />
<p class="ident justif idea">Bertrand Meyer</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.eiffel.com">https://www.eiffel.com</a> </p>
<p class="ident justif idea" />
<p class="nflat justif idea">
      <b>VIII. Dimensiones en desarrollo de software</b>
    </p>
<p class="nflat justif idea">Los factores para la calidad del diseño y desarrollo de software se pueden agrupar en cuatro dimensiones:</p>
<p class="ident justif idea" />
<p class="ident justif idea">a. Personas - el aspecto más importante y que aporta en general los factores determinantes para la calidad del software</p>
<p class="ident justif idea" />
<p class="ident justif idea">El trabajo de Tom DeMarco y Tim Lister habla de esto desde hace ya muchos años</p>
<p class="ident justif idea" />
<p class="ident justif idea">
      <a target="_blank" href="https://www.systemsguild.com/tdm.htm">https://www.systemsguild.com/tdm.htm</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">First-Order Components in Software Development (People-oriented programming, non-linear response) de Alistair Cockburn</p>
<p class="ident justif idea" />
<p class="ident justif idea">
      <a target="_blank" href="https://alistair.cockburn.us/Characterizing+people+as+non-linear,+first-order+components+in+software+development">https://alistair.cockburn.us/Characterizing+people+as+non-linear,+first-order+components+in+software+development</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://crystalmethodologies.org/articles/panlc/peopleasnonlinearcomponents.html">https://crystalmethodologies.org/articles/panlc/peopleasnonlinearcomponents.html</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Las personas en el diseño y programación orientada a objetos, de un servidor:</p>
<p class="ident justif idea" />
<p class="ident justif idea">
      <a target="_blank" href="https://sg.com.mx/content/view/338">https://sg.com.mx/content/view/338</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.rosenblueth.mx/InterFAR/Vol1Num3/doc/Vol1Num3-48.htm">https://www.rosenblueth.mx/InterFAR/Vol1Num3/doc/Vol1Num3-48.htm</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea" />
<p class="ident justif idea">b. Proceso - las secciones VI y VII arriba.</p>
<p class="ident justif idea" />
<p class="ident justif idea" />
<p class="ident justif idea">c. Arquitectura de Producto - las secciones II, III, IV y V arriba.</p>
<p class="ident justif idea" />
<p class="ident justif idea">Si un producto de software es correcto y robusto, es porque su código fuente tiene una adecuada administración de dependencias internas y conserva un adecuado sentido de estética y orden entre sus componentes; si un producto de software es modular y extensible es porque su código fuente tiene esas propiedades.</p>
<p class="ident justif idea" />
<p class="ident justif idea">De ninguna otra manera es posible conseguir la calidad externa del software si no se atiende desde el principio la calidad interna. De esto trata el siguiente artículo de Bertrand Meyer:</p>
<p class="ident justif idea" />
<p class="ident justif idea">Factores de la calidad del software</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.angelfire.com/dc/marcodorantes/Docs/CalidadDelSoftware.doc">https://www.angelfire.com/dc/marcodorantes/Docs/CalidadDelSoftware.doc</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea" />
<p class="ident justif idea">d. Tecnología - aquí va todo el conocimiento específico de una plataforma de cómputo</p>
<p class="ident justif idea" />
<p class="ident justif idea" />
<p class="nflat justif idea">
      <b>IX. Pensamiento sistémico</b>
    </p>
<p class="nflat justif idea">Patrones y la teoría general de sistemas para el futuro (que ya paso) - existe material importante y un cuerpo de conocimiento fundamental que, sin importar lo que diga la mercadotecnia, es indispensable dominar para ser relevante en desarrollo de software ahora y siempre. Se trata de los patrones o mecanismos análogos de la teoría general de sistemas.</p>
<p class="ident justif idea" />
<p class="ident justif idea">Comúnmente se escucha de patrones de diseño; sin embargo, esos pertenecen a una categoría, pero los hay por todos lados: patrones de proceso, patrones organizacionales, patrones arquitectónicos, patrones de implementación (idioms), patrones de análisis. Esto equivale a lo que la teoría general de sistemas estudia como situaciones análogas en relación a los procesos de pensamiento en los seres humanos.</p>
<p class="ident justif idea" />
<p class="ident justif idea">Las herramientas de pensamiento para diseño moderno de software están disponibles y serán las bases para el software que estaremos usando en el cual se utilizan múltiples paradigmas para su diseño.</p>
<p class="ident justif idea" />
<p class="ident justif idea">Algunas referencias al respecto:</p>
<p class="ident justif idea" />
<p class="ident justif idea">•Patrones</p>
<p class="ident justif idea" />
<p class="ident justif idea">Pattern Languages of Programs</p>
<p class="ident justif idea">
      <a target="_blank" href="https://hillside.net/conferences">https://hillside.net/conferences</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://jerry.cs.uiuc.edu/~plop/">https://jerry.cs.uiuc.edu/~plop/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Euro-Plop</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.europlop.net/">https://www.europlop.net/</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.argo.be/europlop/Papers/Final/">https://www.argo.be/europlop/Papers/Final/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Portland Pattern Repository</p>
<p class="ident justif idea">
      <a target="_blank" href="https://c2.com/cgi/wiki?PortlandPatternRepository">https://c2.com/cgi/wiki?PortlandPatternRepository</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Patrones organizacionales de James Coplien</p>
<p class="ident justif idea">
      <a target="_blank" href="https://amzn.com/0131467409">https://amzn.com/0131467409</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.bell-labs.com/cgi-user/OrgPatterns/OrgPatterns?CoplienOrganizationPatterns">https://www.bell-labs.com/cgi-user/OrgPatterns/OrgPatterns?CoplienOrganizationPatterns</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea" />
<p class="ident justif idea">•Diseño multi-paradigma</p>
<p class="ident justif idea" />
<p class="ident justif idea">Generative Programming</p>
<p class="ident justif idea">
      <a target="_blank" href="https://amzn.com/0201309777">https://amzn.com/0201309777</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.generative-programming.org/">https://www.generative-programming.org/</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.prakinf.tu-ilmenau.de/~czarn/generate/engl.html">https://www.prakinf.tu-ilmenau.de/~czarn/generate/engl.html</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Aspect-Oriented Programming</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www2.parc.com/csl/groups/sda/">https://www2.parc.com/csl/groups/sda/</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://aosd.net">https://aosd.net</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Intentional Programming</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.intentionalsoftware.com">https://www.intentionalsoftware.com</a> </p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.c2.com/cgi/wiki?IntentionalProgramming">https://www.c2.com/cgi/wiki?IntentionalProgramming</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea">Generic Programming</p>
<p class="ident justif idea">
      <a target="_blank" href="https://www.lafstern.org/matt/">https://www.lafstern.org/matt/</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea" />
<p class="ident justif idea">•Acerca de la teoría general de sistemas</p>
<p class="ident justif idea" />
<p class="ident justif idea">Cybernetics and Systems Theory</p>
<p class="ident justif idea">
      <a target="_blank" href="https://pespmc1.vub.ac.be/CYBSYSTH.html">https://pespmc1.vub.ac.be/CYBSYSTH.html</a> </p>
<p class="ident justif idea" />
<p class="ident justif idea" />
<p class="quoted">«Este no es el final, ni siquiera es el comienzo del final; tal vez, tan sólo es el final del comienzo»<span style="font-style:normal"> —Winston Churchill</span></p>]]></content:encoded>
    </item>
    <item>
      <title>¿Qué es «Software craftsmanship»?</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/que-es-software-craftsmanship</link>
      <pubDate>Sun, 19 Mar 2017 23:19:45 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=885</guid>
      <description><![CDATA[«Software craftsmanship» es creación de soluciones de negocio basadas en software con dos ideas...]]></description>
      <content:encoded><![CDATA[<a href="https://msdnshared.blob.core.windows.net/media/2017/03/craftsmanship.jpg"><img src="https://msdnshared.blob.core.windows.net/media/2017/03/craftsmanship-300x199.jpg" alt="craftsmanship" width="300" height="199" class="alignnone size-medium wp-image-895" /></a>

<p class="nflat justif idea">«Software craftsmanship» es creación de soluciones de negocio basadas en software con dos ideas básicas:</p>
<p class="ident justif idea">(1) Entrega frecuente de valor de negocio constante y sonante en las manos de clientes y usuarios. ‘Frecuente’ en la escala de semanas (entre una y cuatro), no más.</p>
<p class="ident justif idea">(2) Una profesión digna; es decir, una forma de vida profesional basada en sistemas de valores relativos al esfuerzo intelectual y cooperativo entre grupos de alto desempeño. Valores, por ejemplo, como los siguientes. (a) La autocrítica: 'es verdad que puedo estar equivocado'. (b) La mejora personal de la mentalidad propia; es decir, aprendizaje no como acreción de datos sino como cuestionamiento de las preconcepciones propias.</p>
<p class="ident justif">En español sería algo como «Software artesanal». No se refiere a lo ‘hecho a mano’, sino a la calidad en software que puede crearse con un conjunto muy particular de destrezas; es decir, artesanía no como objeto fabril sino como consecuencia de una forma de arte entendida propiamente como destreza.</p>
<p class="nflat justif idea">Software craftsmanship suele ocurrir en un ambiente con sistemas de valores propicios para el esfuerzo de tipo intelectual y cooperativo. Otros valores compatibles con Software craftsmanship son, por ejemplo, simplicidad, comunicación, retroalimentación, empoderamiento, honestidad, etc.</p>
<p class="ident justif">De los valores personales suelen brotar principios profesionales.</p>
<p class="quoted">«Aunque nada cambie, si yo cambio, todo cambia.»<span style="font-style:normal"> —Marcel Proust</span></p>
<p class="nflat justif">Debo advertir que Software craftsmanship es una forma de vida; es decir, implica un conjunto particular de estilos para interpretar la realidad y para actuar en lo que respecta a la creación de soluciones de negocio basadas en software. Eso conlleva una variedad de requisitos. Por lo que quizá no es para todos, ni es algo “popularizable”. Software craftsmanship es una profesión; es decir, es la acción y el efecto de profesar una forma de vida basada en valores, principios, prácticas y hábitos compatibles con las dos ideas básicas ya mencionadas.</p>
<p class="nflat justif idea">El devenir histórico de Software craftsmanship abarca tanto como la programación de computadoras contemporáneas, aprox. 70 años. A continuación remito algunas manifestaciones en años recientes y un par de notas propias al respecto:</p>
<p class="ident justif idea">(1) <a target="_blank" href="https://manifesto.softwarecraftsmanship.org/">https://manifesto.softwarecraftsmanship.org/</a> </p>
<p class="ident justif idea">(2) <a target="_blank" href="https://agilemanifesto.org/">https://agilemanifesto.org/</a> </p>
<p class="ident justif idea">(3) <a target="_blank" href="https://darkagilemanifesto.org/">https://darkagilemanifesto.org/</a> </p>
<p class="ident justif idea">(4) <a target="_blank" href="https://amzn.com/0201733862">Software Craftsmanship: The New Imperative by Pete McBreen</a> </p>
<p class="ident justif idea">(5) <a target="_blank" href="https://blogs.msdn.microsoft.com/marcod/2012/11/10/dark-manifesto-for-agile-software-development/">Dark Manifesto for Agile Software Development</a> </p>
<p class="ident justif idea">(6) <a target="_blank" href="https://blogs.msdn.microsoft.com/marcod/2012/11/10/dark-manifesto-for-agile-software-development-take-2/">Dark Manifesto for Agile Software Development. Take 2</a> </p>]]></content:encoded>
    </item>
    <item>
      <title>Testeabilidad</title>
      <link>https://docs.microsoft.com/archive/blogs/destreza/testeabilidad</link>
      <pubDate>Thu, 25 Aug 2016 01:58:56 GMT</pubDate>
      <dc:creator><![CDATA[Marco Dorantes]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/destreza/?p=865</guid>
      <description><![CDATA[[caption id="attachment_875" align="aligncenter" width="300"] Water Crystals[/caption]

Algo más...]]></description>
      <content:encoded><![CDATA[[caption id="attachment_875" align="aligncenter" width="300"]<a href="https://msdnshared.blob.core.windows.net/media/2016/08/Water_Crystals_on_Mercury_20Feb2010_CU1.jpg"><img width="300" height="170" class="size-medium wp-image-875" alt="Water Crystals" src="https://msdnshared.blob.core.windows.net/media/2016/08/Water_Crystals_on_Mercury_20Feb2010_CU1-300x170.jpg" /></a> Water Crystals[/caption]

<p class="nflat justif">Algo más práctico que estar jugando a los espejitos y acrónimos de moda, en desarrollo de software se requiere indagar en las contribuciones científicas que, desde hace décadas, ofrecen buenas teorías y prácticas de las que ahora nosotros podemos hacer síntesis.</p>
<p class="nflat justif">Lo siguiente es un breve preliminar al contexto de mi propuesta para considerar dentro de las estrategias de una Dirección contemporánea de sistemas:</p>
<p class="nflat justif">Testability — quality of being testable or verifiable.</p>
<p class="nflat justif">Testeabilidad | Testeable — posibilidad de ser comprobable o verificable o contrastable.</p>
<p class="nflat justif">Es una propiedad arquitectónica emergente; es decir, regida por los principios propuestos por la teoría general de sistemas (cibernética). Como tal, no es una propiedad básica de ninguna de las partes de un sistema complejo o reductible a las propiedades de las partes, sino sólo es observable como propiedad de la suma de las partes. Por analogía, lo húmedo no es propiedad de ninguna molécula individual de H2O sino sólo es una propiedad de la suma de esas moléculas.</p>
<p class="nflat justif">Para sistemas computacionales, y en específico para creación de soluciones de negocio basadas en software, puede ser diseñada como propiedad de cualquier alcance en tanto pueda delimitarse debidamente. Por ejemplo, puede ser diseñada como propiedad tanto de un requerimiento de negocio como de una especificación (funcional o no funcional), así como de una capacidad general de negocio o de una familia de soluciones, o un subsistema, un módulo, una clase, o una operación individual específica.</p>
<p class="nflat justif">Delimitar el alcance debidamente significa poder identificar un subconjunto funcional completo liberable a producción (sección vertical completa o “rebanada de pastel”) que pueda ser contrastable contra un subconjunto correspondiente de la solución de negocio o valor de negocio esperado; es decir, que se elabore a priori o en paralelo un subconjunto correspondiente de verificaciones o comprobaciones que sean testigos de la capacidad del alcance delimitado.</p>
<p class="nflat justif">Entre las condiciones para esta propiedad emergente, entre otras, está la estructura del alcance delimitado; es decir, la estructura de la solución permite, o impide, la emergencia de esta propiedad. Los principios o propiedades básicas que rigen a las estructuras que permiten la emergencia de la testeabilidad son, por supuesto, los principios de cohesión y acoplamiento. Si estas propiedades básicas no están presentes en la estructura del software entonces es muy difícil que emerja la testeabilidad.</p>
<p class="nflat justif">Por eso propuse aumentar estratégicamente la atención en las propiedades básicas del nivel de pruebas de desarrollo, que es el nivel más básico. Si no se inicia por ahí, no sería viable llegar en un futuro a liberar capacidades independientes de negocio (“rebanadas de pastel”) de manera contrastable o comprobable.</p>]]></content:encoded>
    </item>
  </channel>
</rss>