Por qué programar es importante — las razones por las que debes aprender a escribir código

Alejandro Krumkamp
6 min readOct 8, 2017

--

Parte del código usado en el ejemplo de este post

“Hey! Tengo esta idea genial para hacer una simple app. Hagámosla juntos, vos te encargas de todo lo técnico y yo me encargo del resto. Nos dividimos 50/50 las ganancias”.

¿Te suena familiar esto? Quizás vos o alguien que conozcas haya escuchado algo similar. Tal vez un cliente o un amigo te dijo que lo que proponen es una oportunidad única y que la debes tomar. Esto, teniendo en cuenta que esta persona no tiene la menor idea de cómo ejecutar la idea, como un comerciante de Bitcoins tratando de hacer dinero en el largo plazo por mera especulación.

¿Es esta persona, pidiendonos ayuda, y ofreciendonos una ‘sociedad’, alguien con malas intenciones? Probablemente, no, pero es ingenuo de parte de esta persona ya que la idea no significa nada sin la bajada a tierra de la misma. El creador del núcleo de Linux, Linus Torvalds lo dijo: “Hablar es barato. Mostrame el código”.

La programación es una herramienta para destilar ideas en ejecuciones sólidas y tangibles

Como verás, antes de escribir una única linea de código, necesitás analizar el dominio en el que operas. Los castillos en el aire no compilan (ni tampoco se pueden interpretar). Primero deben ser traducidos a ifs, fors, botones, formularios,etc.

Cuando nosotros, como programadores, empezamos a pensar en las maneras de llevar a cabo una idea y pasarla a código, creamos (implicitamente o explicitamente) dos subproductos del software. El primero es la validación técnica. No importa cuántas computadoras tengas, no vas a poder resolver el problema de la parada. No importa cuán responsiva es tu página web, si tu cliente no tiene acceso a internet para conectarse a ella.

Por otro lado, programar trae la validación del negocio en sí. Siendo muy importante especialmente para proyectos nuevos donde no hay expertos en el tema del programa que se quiere construir.

Aprendiendo a programar, uno se empieza a dar cuenta que esa “app sencilla”, quizás no es tan simple después de todo. Te permite reconocer, incluso antes de abrir tu editor de texto favorito, a saber cuándo un problema de la vida real puede ser resuelto fácilmente y cuándo sería muy complejo o caro para hacerlo. Créeme, saber esto de antemano te salvará tiempo, esfuerzo y relaciones.

Mejora tus habilidades para resolver problemas y crear abstracciones

La ejecución de ideas en programación suele llevar a la resolución de problemas y a la creación de abstracciones que pueden estar ocultas a simple vista de las rutinas diarias de una empresa.

Esto es porque en el día a día, podés adaptarte a la situación que tenés en frente tuyo. Tenés la ventaja de no tener un montón de subrutinas compiladas (o interpretadas) en tu cabeza que te limiten los cursos de acción posible, como un programa los tiene.

En el siguiente escenario verás como, al crear un programa, uno se encuentra con nuevas abstracciones para explicar ciertas cosas de negocio.

Un ejemplo simple es un software hecho para una cafetería, que necesita calcular el monto final por item que deben cobrar a sus clientes, incluidos los descuentos cuando estos se aplican.

Digamos que el esquema de descuento funciona de la siguiente manera:

  • Si un cliente pide más de $30 en café, obtiene un 20% de descuento.

Sin más problema podemos hacerlo en Javascript:

let cafesPedidos = prompt("Ingrese la cantidad de cafes pedidos");
let precioCafe = 3;
let montoFinal = cafesPedidos*precioCafe;
if(montoFinal > 30){
montoFinal = montoFinal - montoFinal*0.2;
}
alert("El monto final es "+ montoFinal);

Los usuarios quedan contentos con el programa, que es básico pero funciona. Luego empiezan a vender muffins y donas en la tienda. Quieren lo siguiente:

  • Aplicar sólo un 10% de descuento en muffins y donas.
  • Los descuentos de los muffins sólo se aplican cuando se compran 5 o más unidades.
  • Los descuentos de las donas sólo se aplican cuando se compran 8 o más unidades.

Ansioso de implementar más funcionalidades, nos comprometemos a implementarlas. Abrimos el editor de texto y empezamos a escribir lo siguiente:

let muffinsPedidos = prompt(“Ingrese la canti…

Esperá. Esto me suena familiar.

Entonces, no repitamos nuestras acciones (concepto DRY):

class RepositorioItems {
constructor(){
this.datos = []
}

agregar(item){
this.datos.push(item)
}
obtenerItem(nombreBuscado){
for(let indice in this.datos){
let itemActual = this.datos[indice];
if(itemActual.nombre === nombreBuscado){
return itemActual;
}
}
return null;
}

}

class Item {
constructor(nombre, costo, descuento, cantidadNecesariaDescuento){
this.costo = costo;
this.descuento = descuento;
this.cantidadNecesariaDescuento = cantidadNecesariaDescuento;
this.nombre = nombre;
}

precioFinal(monto){
let descuento = 0;
if(monto >= this.cantidadNecesariaDescuento)
descuento = this.descuento;
return (this.costo - descuento * this.costo) * monto;
}
}

let items = new RepositorioItems();

while(1){
let nombreProductoInput = prompt("Ingrese el nombre de un producto para calcular su precio final");
let producto = items.obtenerItem(nombreProductoInput);

if(producto !== null){
let cantidadProductoInput = prompt("Ingrese la cantidad pedida de dicho producto");
let montoFinal = producto.precioFinal(cantidadProductoInput);
alert("El monto final es " + montoFinal)
} else {
alert("El item no existe, procediendo a crear uno nuevo.");
let costoNuevoProductoInput = prompt("Ingrese el costo del nuevo item");
let descuentoNuevoProductoInput = prompt("Ingrese el descuento del nuevo item");
let cantidadNecesariaDescuentoNuevoProductoInput = prompt("Ingrese la cantidad de items necesarios para activar el descuento");
let nuevoProducto = new Item(nombreProductoInput,
costoNuevoProductoInput,
descuentoNuevoProductoInput,
cantidadNecesariaDescuentoNuevoProductoInput);
items.agregar(nuevoProducto)
alert("El item ha sido agregado exitosamente.");
}
}

Probá el código

¡Fua! ¡Es un montón de código agregado!

A primera vista, el código parece mucho más complejo. Sin embargo, muchas de las lineas de código fueron agregadas para crear una abstracción. El concepto de un item, estaba ausente en nuestro primer ejemplo. Nos enfocamos en el qué y no tanto en el cómo.

Gracias a la programación, sabemos qué atributos un item tiene que tener para resolver este problema. Un item de la vida real puede tener otras propiedades, como el alto y ancho, pero no las incluimos por no ser relevantes en el cálculo del descuento. Ahora podemos tratar a los muffins y a los cafés de la misma manera, ya que ambos son items.

Esto es genial porque si mañana necesitamos agregar un nuevo item, simplemente lo agregamos al array de items, sin tener que reescribir una sóla variable.

Lo que nos trae al siguiente punto.

Podés tener un impacto masivo desde el primer día

Está en esta misma naturaleza de la programación, su escalabilidad, que recae la oportunidad para nosotros de crecer exponencialmente.

Me explico.

Algunos tipos de compañías sólo pueden crecer linealmente, como muchos restaurants. Si el negocio se quiere expandir, vas a tener que abrir más mesas, lo cual requiere más personal, comida, electricidad y espacio físico. Tus ganancias van a crecer al mismo paso del que crecían antes de expandirse. Pero debido al mayor volúmen, las ganacias quizás sean mayores, pero también lo serán los costos.

Volviendo al ejemplo de la cafetería. Digamos que quiero subir el programa a la web y empezar a cobrar una cuota mensual a los dueños por usarlo. ¿Qué costos tengo cómo programador para montar el show? En este caso, sólo el servidor en el cuál va a correr el script y mis gastos personales para sobrevivir asi puedo escupir todo el código en mi computadora.

Si mi programa se vuelve tan popular de que cada cafeteria de la ciudad lo usa, ¿Cómo eso afecta mis gastos?

Si, quizás necesite contratar personal dedicado a soporte y también sea imprescindible actualizar los servidores, pero estos costos no crecerán linealmente, sino que crecerán en un factor de x2, x5 o incluso x100 en un proporción ganancia/costo. Los servidores hoy en día de pueden rentar a US$1.25 por mes y un incremento de 1000 nuevos clientes, quizás no requiera contratar otro personal de soporte. Mientras que un restaurant (sin contar las franquicias), los nuevos mozos y más comida necesaria, son costos seguros agregados.

Ahora, también hay que considerar el hecho de que si creas un software basado en la nube, tu público es el mundo. Los mismos poblemas que ataques en Argentina, personas en Taiwan pueden usarlo para simplicar sus procesos también.

Las posibilidades son infinitas.

¿Cómo empiezo a programar?

No estás sólo ni sóla en este viaje.

Empieza con cosas pequeñas. Elige un lenguaje de programación y encuentra un curso online para empezar a programar (como este). Una vez que entiendas qué es un if, para qué sirven las class, hacelo personal.

Seguí un desafío de 7 días, cada día, creando tu propio programa. No aflojes. Haz trabajos gratis para la gente que te inspira, o para asociaciones sin fines de lucro. Comparte tu progreso, ya que esto ayuda a internalizar todo el proceso de aprendizaje, mientras que ayudás a nuestra gran comunidad de programadores.

Si de casualidad estás en Buenos Aires, Argentina en Octubre, 2017, voy a estar dando un curso introductorio como profesor del workshop Javascript 101. Voy a estar subiendo noticias al respecto desde mi cuenta de Twitter.

Me encantaría escuchar tu historia de cuál será tu primer programa. Estoy para ayudarte.

Te invito a crear. Te invito a programar.

Twitter: @alekrumkamp

--

--

Alejandro Krumkamp

Ranging from APIs to sales funnels, I love building stuff. @javascript_101 @workshopsjs Co-organizer.