Construyendo software desde cero

Por John Sonmez23 de febrero de 2017

A muchos desarrolladores de software les gusta complicar las cosas. Cogen algo que podría ser sencillo y fácil y, por lo que cuenta la mayoría en internet, lo complican.

El software debería ser sencillo. Dicho esto, es fácil entender por qué a tantos desarrolladores les cuesta construir software desde cero. En sus mentes, es algo totalmente complejo y difícil y se quedan completamente atascados en medio del proceso.

Entonces, la pregunta es… ¿Cómo se construye software desde cero?

Transcripción del vídeo

John Sonmez:

¿Qué tal? John Sonmez de simpleprogrammer.com. Hoy tengo una pregunta sobre la construcción de software desde cero. Esta es una pregunta que he recibido un montón de veces de un montón de gente diferente porque esto es algo que es difícil de hacer cuando eres un principiante, para averiguar cómo alguna vez podrías hacer esto.

Esta pregunta viene de Akash y dice: «Hey John, tus videos son geniales y valoro mucho tus consejos. Un problema al que me enfrento es que cuando se trata de construir un gran software, no se me ocurre cómo diseñar todo desde cero. Por ejemplo, cómo dividir todo en mini subtareas y luego implementar cada subtarea y ponerlas todas juntas para que funcione. Estaría muy bien si me podéis orientar sobre cómo superar este problema. Gracias de antemano».

Lo que yo diría aquí, Akash, es que lo que quieres hacer es pensar, en lugar de pensar en tomar un sistema completo, este tipo de enfoque de arriba hacia abajo, descomponerlo en todas estas piezas, ensamblar todas estas piezas y ver cómo encajan entre sí, y construir este enorme Transformer o Legos a partir de estos enormes Legos. Usted quiere pensar en el desarrollo de software más como la evolución.

Lo que quiero decir con eso es que empezar con algo realmente simple. Comenzar con la cosa más simple que podría funcionar que no tiene un montón de características y luego evolucionar que en el que desea ir en lugar de hacer lo que llaman gran diseño inicial. Esto no significa que nunca debas pensar en la arquitectura general de la cosa y que no tengas los diseños y ciertas cosas por adelantado. En muchos casos, no tienes que hacer tanto como crees que necesitas.

Ahora bien, si estás diseñando algún software que va a ser incrustado dentro de un dispositivo electrónico y un ingeniero de hardware va a tener que desarrollar el circuito o un chip personalizado, o algo para que eso funcione, probablemente vas a tener que diseñar muchas de estas cosas por adelantado y probablemente vas a tener que hacer eso. Incluso podría estar limitado allí. Para la mayoría del software que estamos construyendo hoy en día, especialmente las aplicaciones web y cosas por el estilo o aplicaciones móviles, podríamos construir algo que es muy, muy básico y luego evolucionarlo, hacer cambios para crecer y añadir complejidad según sea necesario.

Una cosa-una razón por la que esto es tan importante es porque la perdición del desarrollo de software, una de las peores cosas en el desarrollo de software es la complejidad. Este canal se llama Simple Programmer y mi negocio consiste en hacer simple lo complejo, porque eso es lo que tenemos que hacer. Como desarrolladores de software uno de sus principales trabajos es luchar contra la complejidad porque la complejidad entra en el sistema y lo hace difícil de mantener y lo hace difícil de entender. Hace que sea más probable que haya errores y que falle. Queremos reducir la complejidad tanto como sea posible. Queremos simplificar. Tenemos que empezar lo más simple posible, ¿qué es lo más simple posible que podría funcionar?

Muchas veces en el mundo empresarial, llaman a esto un MVP o producto mínimo viable. Lo que puedes hacer cuando estás tratando de construir un gran sistema de software o lo que puedes hacer es que puedes empezar realmente pequeño. Comenzar con una cosa muy, muy pequeña. Estoy tratando de pensar en el libro, pero leí este libro realmente bueno en algo, creo que era el desarrollo impulsado por pruebas paso a paso o algo así. En el libro, él estaba diseñando como una aplicación de Notepad o algo así. Comenzó con muy, muy incremental-él hizo esto de una manera muy incremental y comenzó con, creo, su aplicación necesitaba una base de datos, pero comenzó con no tener una base de datos. En su lugar, sólo como el almacenamiento de los datos en archivos de texto que leyó de los archivos de texto. Luego llegó a su punto en el que necesitaba realmente ponerlo en una base de datos, y entonces modificó el programa y lo hizo leer los mismos datos, excepto que creó una abstracción para leer de la base de datos.

Esa es la evolución natural de las cosas y así es como se puede construir este software complejo. Te garantizo que la mayor parte del software complejo que se construye hoy en día se construye de esta manera. Gran parte de él no se diseña por adelantado y luego se construyen todas estas piezas y se espera y reza para que funcionen. De lo contrario, se acaba sobrepasando el presupuesto y el calendario. Por desgracia, eso ocurre. Si quieres tener éxito, si quieres ser capaz de hacer esto, empieza con algo pequeño. No hay nada que sea difícil en este mundo. No hay nada que sea complejo. Es sólo que está compuesto por un montón de cosas simples que lo hacen parecer complejo.

Puedes construir la arquitectura más compleja. Puedes construir una cosa enorme, pero tienes que empezar por lo simple. Todo se compone de lo simple. Entonces, en lugar de tratar de tomar todas esas piezas, simplemente comienza. Haz evolucionar la cosa. Empieza. Construye algo. ¿Cuál es la cosa más pequeña y simple que puedes poner que hace cualquier cosa cerca de la funcionalidad? Entonces empieza a añadir características. A medida que agregas las características, entonces agregas la arquitectura para apoyarlas y creas abstracciones.

Un libro que voy a recomendar que probablemente te ayudaría a hacer eso se llama Clean Code. Es uno de mis libros favoritos de Robert Martin. Definitivamente recomiendo ese libro, pero quieres evolucionar tu arquitectura. Entonces la otra cosa que diría sobre esto es que a medida que evolucionas las cosas, vas a crear abstracciones para mantenerlo simple para que nunca tengas esta enorme, enorme complejidad. A veces puede ser incluso reescribir toda la cosa o reescribir partes de ella, pero eso está bien. Así es como funciona la evolución del software. Es mejor que añadir complejidad.

Muchas veces los desarrolladores de software quieren optimizar prematuramente. Quieren hacer las cosas extremadamente flexibles. Están haciendo una optimización prematura en el software porque están tratando de construir este sistema muy, muy robusto. Eso a menudo falla porque no sabemos lo que no sabemos. No sabemos lo que vamos a necesitar, así que es mejor no intentar anticiparlo, sino simplemente decir: «Vale. Ahora necesito añadir esta nueva característica o hacer que esto funcione de esta manera. ¿Cómo puedo evolucionarlo?»

Recuerda, el desarrollo de software no es como un puente. No es como si hubieras puesto hormigón y ahora fueras a cambiar la arquitectura de la casa. El software es maleable. Es como la arcilla. Puedes cambiarlo. No tiene un alto, alto coste para que lo modifiques y lo cambies. Tienes que utilizar la ventaja de ese medio tanto como sea posible, lo que se presta a un proceso evolutivo para desarrollar el software, a diferencia de un gran diseño por adelantado.

Espero que eso te ayude Akash. Una gran pregunta. Creo que mucha gente ha preguntado sobre esto en el pasado. Si tienes una pregunta para mí, puedes enviar un correo electrónico a [email protected]. Si te gusta este vídeo, sigue adelante y haz clic en ese gran botón de Suscripción de abajo si no te has suscrito ya. Si lo has hecho, te lo agradezco. Manténgase en sintonía hasta la próxima vez. Cuídate.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.