Aitor Sánchez - Blog - Nov. 2, 2023, 5:28 p.m.
¿Quieres entrar dentro del mundo del software y no sabes por donde empezar? O, quizás, ya has dado el primer paso (ese click mental) y quieres aprender a programar ¿verdad?
Mi nombre es Aitor Sánchez, soy desarrollador de software desde 2014, y en este artículo te enseñaré a dar tu primer paso para que así después tu puedas dar el segundo, y todos los siguiente, dentro de este mundo tan loco, apasionante y maravilloso que es el desarrollo de software.
Pero antes de continuar, esta es la Flutter Mafia. Es mi newsletter donde tu vas a aprender a hacer apps y a ganar dinero con ellas junto con otros genietes que ya están dentro. Y si te suscribes te regalo mi ebook "Duplica los ingreso de tus apps en 5 minutos" No es broma, quizás te interese.
Y ahora si, comenzamos. Let´s go!
Antes de continuar leyendo mírate este vídeo:
Ahora un poco de teoría… ¡Que rollo!
Programar es el proceso de elaborar aplicaciones informáticas codificando, depurando y manteniendo el código que escribimos y que la máquina es capaz de interpretar para hacer cosas que nosotros, los humanos, no queremos o no podemos hacer.
Cuando hablamos de código fuente y de cómo se programa, la gente piensa en magia, algoritmos hipercomplejos, matemática avanzada y cosas que escapan a creencia de la mayoría. Pero esto no es del todo cierto, si es cierto que tenemos que tener un amplio conocimiento sobre las matemáticas y algoritmia, pero nada que nadie no pueda hacer con un poco de empeño y dedicación.
En realidad, una vez conocemos y comprendemos que un programa se escribe como si escribiésemos una nota de actividades que tenemos que hacer en un determinado orden, y que es un simple archivo de texto que el ordenador interpreta y realiza estas actividades, todo nos queda mucho más claro. ¿Pero porque después de entender esto nos quedará todo mucho más claro? Porque finalmente es eso: una nota que le da órdenes ordenadas al ordenador escritas por el programador para resolver un problema concreto. Para ver un ejemplo: Descargar una película de internet
En primer lugar, quiero avisarte de que aprender a desarrollar no es tarea fácil. Es una disciplina que puede involucrarte durante varios meses o incluso años si lo que queremos es alcanzar un puesto profesional. No quiero desanimar a nadie, ni mucho menos, pero tienes que tener claro que lo quieres hacer cueste lo que cueste. Y si estás pensando en hacerlo por “ver lo que pasa” o por “tener algo” mi consejo es que te dediques a otra cosa y dejes esto aparcado, te ahorrará mucho sufrimiento innecesario.
Esta profesión puede, en el mejor de los casos, amargarte la existencia si no estás preparado y concienciado para ello. Hay mucha gente que te dirá que programar es la hostia (mi caso) al igual que habrá otra que te diga lo contrario. Es una de esas “cosas” que o te gustan u odias, aquí no hay término medio sobre cómo aprender a programar de una manera suave y fácil.
Tienes que aprender a pensar con pura lógica, no hay rodeos. Si es cierto, que hay mil formas de llegar al mismo punto, pero el final es: O funciona o no funciona, fin…
Por otra parte, como el estudio de la medicina, tendrás que estar estudiando toda tu vida. Es el apartado profesional más dinámico que existe. Tan pronto eres un crack en determinado “sistema” que al día siguiente todo lo que has aprendido ya “no sirve”. Que no es que no sirva, porque sí que lo hace, pero las empresas ya no solicitan determinado sistema.
Y frente a la situación que hemos visto en los párrafos anteriores, me gustaría, que si vas a seguir adelante y quieres aprender, y saber cómo empezar a programar, tomes esta web como referencia sobre desarrollo informático por lo menos hasta que sientes las bases y así se hará mucho más fácil buscar información posterior para poder continuar avanzando. Recuerda que estoy aquí para ayudarte en todo lo que pueda.
Enumeremos una lista de los posibles caminos para aprender a desarrollar antes de continuar.Para mí la mejor manera de todas, no hay lugar a dudas. Un sabio un día dijo una frase que es una verdad como un templo, aquí la tienes:
“Una educación formal te dará una vida, una educación autodidacta te dará una fortuna”.
Es una frase del célebre Jim Rohn (Empresario estadounidense y orador motivacional altamente reconocido).
Lógicamente esta manera requiere de unas actitudes que no todo el mundo tiene para ir aprendiendo a programar.
Visto esto, y después de despotricar un poco sobre temas relacionados con el aprendizaje, continuamos. Y por favor, los cursos del “paro” sobre estos temas por favor, dejarlos de lado, son una enorme pérdida de tiempo…
Bien, visto todo lo anterior y comprendido un poquito más que es esto de desarrollar vamos a ver que son los lenguajes de programación.
Si estás leyendo esto es porque, casi seguro, que tu lenguaje principal es el castellano o está dentro de tu lingüística.
Si sabes leer es porque conoces una lengua ¿verdad? Con su respectiva sintaxis, verbos, objetos, etc…
Vale, ahora piensa en una “barra de pan” ¿qué es? Pues una simple barra de pan. Y ahora te pregunto, ¿Qué es una “loaf of bread”? Pues una barra de pan con su respectiva harina, agua y sal lo que pasa que dicho en un idioma diferente.
¿Te das cuenta? Una barra de pan es igual aquí y en Pekín, aunque se llamen de maneras diferentes.
Pues esto es lo que sucede en los lenguajes de desarrollo, generalmente hablando. Hay muchísimos y para un sinfín de propósitos diferentes, pero todos terminan haciendo lo mismo pero a su manera. Y, ¿sabes lo mejor? que los pasos para programar son los mismo en todos.
(Muchos no estarán de acuerdo con esto, lo entiendo, una persona que ya sabe lo que se hace esto le parecerá un poco radical y generalizar demasiado, pero recuerda como aprendiste tú).
En los inicios de la computación informática los programas se escribirán en un lenguaje muy complejo y alejado de lo que hoy en día es la programación, este lenguaje se / lo llamaba / llamaban lenguaje máquina. Este el lenguaje es lo que se conoce hoy día como lenguaje binario y está comprendido de dos número, el 0 y el 1.
Esto era demasiado difícil de usar para la mayor parte de la población de esos entonces. Para poder solucionar “un poquito” este panorama los primeros científicos que usaban este sistema decidieron remplazar, o mejor dicho mejorar, este lenguaje empaquetando estas instrucciones de ceros y unos en palabras o abreviaturas provenientes del lenguaje universal, el inglés. Creando así un lenguaje de más alto nivel (más adelante explicaré que es esto), una manera de programar mucho más sencilla e intuitiva y lo llamaron lenguaje ensamblador.
Aunque es bien cierto que lo único que consiguieron es darle una forma más “un poco” más sencilla de programar en comparación con el lenguaje máquina. Aparte de recordar mejor los entresijos de esta labor. Lo llamarón lenguaje ensamblador.
“Comparación real:
Ensamblador: ‘a + a = b’
Binario: ‘01100001 00100000 00101011 00100000 01100001 00100000 00111101 00100000 01100010’
Siendo esta la misma instrucción.”
A medida que las tareas que teníamos que indicarle al ordenador iban siendo más complejas de manejar y la necesidad de desarrollar programas más extensos crecía, la sintaxis de lenguaje ensamblador o binario complicaba mucho las cosas para el factor humano, digamos que eran extremadamente difíciles de leer.
Por este motivo / necesidad nacieron los lenguajes de más alto nivel. Pensado para que las personas tuviésemos una mejor comprensión de lo que el programa en cuestión iba a realizar y así favorecer a la expansión y mantenimiento del mismo.
Como comentaba en el párrafo anterior, los lenguajes de programación de alto nivel fueron pensados / diseñados para hacernos a nosotros, los humanos, la vida más fácil. Tareas tan simples como unir una cadena de texto con otra o eliminar un término concreto de esta cadena en lenguaje ensamblador o máquina serían unas cuantas líneas de código en comparación con lo actual que con una simple llamada a una función en una línea de código lo tenemos.
Hay muchos lenguajes de desarrollo de software diferentes, cada cual con su dificultad y nivel de abstracción.
Enumeremos unos pocos:
(Voy a enumerarlos por alto, medio y bajo nivel aunque todos tienen funciones para la comunicación a bajo nivel).
Alto nivel:
Medio nivel:
Bajo nivel:
En el panorama laboral actual las empresas solicitan 90% de programadores de alto nivel, 9% de programadores de medio/bajo nivel (aunque estos están mucho mejor pagados) y un 1% de programadores de ensamblador (esto solo está al alcance de algunos) y son contratados para programar componentes físicos como pueden ser GPU o drivers.
Los últimos mencionados, puedes encontrarlos trabajando en equipos muy reducidos y en empresas de gran envergadura como puede ser Apple, Microsoft, Nvidia, etc…
Para terminar con esta explicación de lo que son los lenguajes de programación de alto nivel y de repaso en el medio y en el bajo nivel decir que independientemente del lenguaje que utilicemos para nuestros propósito, necesitamos un compilador para poder traducir lo que hemos escrito en nuestra aplicación a lenguaje máquina y que el ordenador sea capaz de interpretar nuestras instrucciones.
Es un “programa” que lee nuestras líneas de código y las traduce a lenguaje máquina (código binario) para que la máquina donde queramos ejecutar el programa pueda leerlo e interpretarlo.
Hay lenguajes de programación que no necesitan ser compilados, como puede ser Javascript o Python, que se denominan lenguajes interpretados. Y la diferencia que existe entre uno y otro es que el código de estos se va ejecutando a la vez que el sistema va leyendo el archivo donde está escrito nuestro programa.
Árbol de ejecución de lenguajes interpretados o compilados:
Compilado -> “Lectura -> compilación -> ejecución”
Interpretado -> ”Lectura -> Ejecución”
Nota:
Compilados = Aunque ahorremos un paso, el desarrollo compilado, por regla general, es más rápida debido a que el primer paso y el segundo paso solo se realizan cuando creamos el programa para generar el archivo / archivos finales .exe, .jar, etc… Después al estar empaquetado solo usamos el paso de ejecución en la versión reléase (Más adelante explicaré lo que es. Véase como versión terminada de la aplicación)
Interpretado = A diferencia del anterior, el sistema tiene que leer todo el archivo cada vez que se ejecuta e ir realizando las ordenes paso a paso. Por eso es considerado un poco más lento aunque las últimas tecnologías que van saliendo a la luz cada vez reducen más esa brecha de velocidad entre los dos.
Llegados a este punto, y si has leído todo lo anterior, comprendo que estás interesado en programar. Si no fuese así, ni yo mismo hubiese leído todo lo anterior J
La sintaxis, como en cualquier lenguajes, sea de programación o no, son un conjunto de reglas, órdenes, expresiones, instrucciones y comandos. En los lenguajes de programación estos tienden a asemejarse a la lengua natural cada vez más. ¿Por qué? Por la sencilla razón de hacer que programar sea más fácil y comprensible para la mente humana.
Pero a su vez también tenemos un problema, más pequeño que programar en binario, pero sigue siendo un problema. La ambigüedad. Cuanto más alto sea el nivel del lenguaje, y más leguajes de programación existan, más ambiguo es escribir código porque una misma acción puede realizarse de muchas maneras diferente, y cada vez hay más. A mayor número de lenguajes de desarrollo de software y más abstracción de lenguajes de bajo / medio nivel, tenemos más opciones donde elegir, y esto es un problema.
Situación de ejemplo:
Quieres jugar a videojuegos, pero no sabes a cual. Si solo tuvieses 1 o dos no habría problema en cual elegir, pero al tener 50 finalmente no juegas a ninguno por que no sabes a cual. ¿lo entiendes?
Ejemplo propio:
Hace años tuve un “alumno” con el que me siento bastante identificado. Él es una persona hiperactiva (como yo) y estaba deseando aprender a programar. Yo le empecé explicando esto, lo otro, lo de más allá, hasta que al final se sentó delante de un IDE (editor de código) y comenzó con el desarrollo en Php. Todo iba muy bien, yo le explicaba cómo ir aprendiendo y demás. Pero cometí un fallo, quise / quiso que le enseñara diversas tecnologías de manera simultánea. Finalmente, al intentar entender y usar tecnologías sin tener unas bases programáticas sentadas, se saturó y lo dejó.
¿Y porque lo dejó? Por la ambigüedad, porque una cosa se puede hacer de mil maneras diferentes y si no tienes claro, o te indican cual usar, finalmente te saturas y lo desechas todo.
Al final conseguí que continuara después de hablar largo y tendido con él y fijar un programa de aprendizaje, ufff menos mal…
Actualmente le cedí mi puesto en una empresa de desarrollo de gran envergadura cuando yo cambié a la que estoy ahora.
Estoy orgulloso de él, aún quedamos y montamos proyectos juntos.
Piensa:
¿Qué es lo primero que haces cuando te levantas?
¿Y después de eso?
¿Y después?
Pues esto es un algoritmo, una consecuencia de acciones finitas y ordenadas que tienen como fin solucionar un problema. En el caso anterior, estudiar sería el problema y este algoritmo (muy generalista y simple, pero basta para entender el concepto) te da la solución.
Pues cuando programamos es igual, vamos a ver un ejemplo de pseudocódigo de una suma:
Aunque extremadamente sencillo, esto sigue siendo un algoritmo. El problema es conocer cuánto suman “a” más “b” y este algoritmo resuelve nuestro problema.
Aunque esto sea un poco avanzado, si habéis leído todo lo anterior lo entenderéis a la perfección.
“Una aplicación completa se divide en módulos que a su vez, estos módulos, se dividen en algoritmos que en conjunto con una estructura de datos (Esto lo explicare mas adelante) hacen del programa lo que es”.
Hay varias maneras o “paradigmas” de programar. Para entrar un poco en materia, aunque esto lo explicaré en artículos dentro de la web, los paradigmas de programación son maneras en las que estructurar el código para disminuir la ambigüedad de este y darle un mayor sentido a lo que tipamos.
Por enumerar algunos paradigmas:
Cuando vaya realizando los artículos que especifica cada una de ellas los iré enlazando desde aquí.
La gente, por regla general, confunde dos aspectos distintos de este mundo. Uno es el desarrollo de una aplicación informática y otra es la programación. A simple visa parecen similares, pero no lo son. Este punto podrías ser motivo de crítica, porque todos no pensamos igual, y es comprensible. Pero la verdad dista que el desarrollo de un programa informático como tal no es lo mismo que programar.
El desarrollo de una app ha de contener, mínimamente, las siguientes características:
La programación consta solo de los pasos 3, 4, 5 y 6 del apartado anterior.
No se la razón por la que sucede esto, pero en el mercado laboral actual de nuestro sector hay muchos más hombres que mujeres, con esto no quiero decir, ni mucho menos, que las mujeres no sean actas para tal fin, de hecho tengo varias referencias de conocidas y amigas programadoras que son la bomba, pero me entristece saber que no estamos en igualdad dentro del sector.
¿Por qué me cuentas esto? Muchos ya lo sabréis, otros no, pero “Ada Lovelance” fue la primera programadora del mundo. Aunque no consiguió terminar la máquina en la que estaba trabajando para sacar un mayor provecho de su devoción, se ganó este título de “La primera programadora del mundo”. Posteriormente, y en su homenaje, el lenguaje de programación “Ada” fue llamado así por ella.
Cuando uno programa debe pensar de manera totalmente clara y en muchas ocasiones “tiene que mirar el programa desde fuera de la caja”.
¿A qué te refieres con esto, Aitor? Muchas veces cuando programamos estamos tan centrados, y conocemos tan bien los entresijos de la aplicación que estamos construyendo, que no somos objetivos a la hora de implementar el programa de cara al cliente final. No nos damos cuenta de que nosotros, como autores del programa, sabemos a la perfección lo que hace y como lo hace.
Pero prueba una cosa, dale tu programa a una persona que no sepa mucho de informática a ver qué sucede…
Tenemos que intentar por todos los medios definir correctamente los siguientes puntos para medir la calidad de nuestro programa:
¿Se está haciendo un poco pesado verdad? Pero a quien algo quiere, algo le cuesta…
Ahora vamos a ver una de las partes más importantes del desarrollo de Software, su ciclo de vida.
Estos pasos que vamos a enumerar a continuación se rigen para detectar de manera temprana y antes de que sea tarde, en términos de tiempo y costes asociados, los errores encontrados e implementar las posibles soluciones para corregirlos.
Para ver un ejemplo práctico: Wallapop.
Ahora vamos con los pasos mínimos para declarar un ciclo de vida estructurado y fiable:
Aunque hayamos visto este punto enumerado, no es necesario seguirlo en este orden. Este es solo la manera en la que yo trabajo en mis desarrollos y la que me ha permitido seguir adelante. Muchos programadores no la seguirán al pie de la letra, pero es la que aconsejo fervientemente y nunca me ha fallado.
Ya vamos llegando al final. Sé que la lectura se está haciendo un poco pesada, disculparme pero es que son demasiados conceptos que tenemos que ver antes de ponerlos las pilas.
Antes de continuar decir que hay varios tipos de versiones:
Vale, existen programadores que utilizan muchas versiones de estado de aplicación. A mí personalmente me gusta utilizar solo 3 que son las siguientes:
Pues visto todo esto, creo que tienes una mínima noción sobre lo que vamos a ir viendo en nuestro blog de forma regular y gradual. Ahora, después de haber leido todo esto, si aún cuando te preguntas ¿quiero programar? y la respuesta es afirmativa, eres bienvenido a la familia. Solo una cosa más, pásate por aquí: La Flutter Mafia y te suscribes. Es la comunidad que estoy montando en torno a esta disciplina y por donde te informaré de nuevos contenidos y cositas chulas que vaya investigando. Dentro están todos los detalles.
Cabe decir que serán bastantes los contenidos prácticos que traeré al blog para que podáis practicar mientras aprendemos todos juntos. Pero también, como es normal en esta disciplina, también tendremos contenidos un poco más teóricos que son necesarios.