Triant el teu primer llenguatge de programació

Certament aquesta és una de les preguntes que més arriba a la meva safata d'entrada a l'hora de parlar de programació. Si anem a començar una sèrie d'articles que els permetin aprendre a programar i tornar el coneixement gratuït en forma de contribucions a comunitats de programari lliure / codi obert al món, cal respondre a aquesta bàsica encara que una mica difícil pregunta. Quin llenguatge de programació he d'aprendre?

Una mica d'història

Per poder començar a comprendre i triar un llenguatge de programació, primer hem de conèixer una mica sobre la història dels mateixos, els seus usos i funcions, i com resolen diferents necessitats al llarg de el temps.

Llenguatges de màquina (baix nivell)

Coneguts comunament com Assamblees, Són llenguatges de programació que podríem definir com a dialectes d'una llengua més general ... Això sona una mica complicat però ho vaig a exemplificar ... Sabem que el llenguatge universal de la computació és la electricitat, Això vol dir que en última instància el que un ordinador llegeix són 0es i 1s, anem a anomenar això com español d'ordinador. En aquest exemple, l'espanyol és la regla bàsica, però com bé sabem, no és el mateix l'espanyol que parlen els llatins a l'parlat a Espanya, i fins i tot així, no és el mateix l'espanyol del Perú amb l'espanyol d'Argentina. Evidentment tots tenim gairebé les mateixes paraules (0es i 1s), mes l'ús i significat poden variar d'acord a l'context.

Això succeeix a nivell de processador. Quan parlem de arquitectures de computació, (Amd64, intel, arm, ...) ens referim a el dialecte d'aquest espanyol d'ordinador. Això es deu al fet que diverses empreses entenen l'ordre i significat a la seva manera, de manera que alguns varien en detalls com el flux del corrent, o l'ordre amb el qual es van a guardar els 0es i 1s.

Aquests llenguatges de programació són summament veloços, ja que treballen a el nivell més baix possible de programació, però són summament dependents de l'arquitectura i certament són una mica més complicats d'aprendre que la resta. Aquests solen requerir d'una base més àmplia de conceptes per poder transformar la data i poder executar coses útils en elles. Per als amants dels videojocs, un exemple serien les consoles SEGA, les quals utilitzaven Assembly per programar els seus jocs. Evidentment en aquesta època la quantitat de memòria era mínima comparada amb avui, i era necessari dominar un llenguatge que pogués ser veloç i produir programes lleugers.

Llenguatges d'alt nivell

Aquest gran grup contempla aquells llenguatges que van venir després de Assamblees. La necessitat d'obtenir codi portable va fer que sorgís un grup de llenguatges anomenats compilats. Entre aquests el primer a prendre avantatge va ser C, el qual ha tingut predominança en la programació a nivell de sistema operatiu des dels 70s.

llenguatges compilats

Anem a veure un exemple pràctic del que comento. Vegem un programa molt simple en llenguatge C que imprimeix una línia de codi.

Disseny propi. Christopher Díaz Riveros

Després compilar tenim el següent:

Disseny propio.Christopher Díaz Riveros

Però ara vegem el que hauríem d'escriure per replicar el mateix resultat en codi Assembly:

Disseny propi. Christopher Díaz Riveros

Aquesta és la traducció de les nostres 3 línies de codi de simple.c, L'arxiu simple.s és creat mitjançant la comanda gcc -S simple.c i és el que entendria el nostre processador en un dialecte Assamblees. Evidentment per poder crear un executable que consti de 0es i 1s és necessari processar l'arxiu simple.s i connectar-lo amb les biblioteques compartides del nostre sistema. Això es fa mitjançant un assemblador (as) i un connector (ld).

Els llenguatges compilats brinden un gran avantatge sobre els de baix nivell, són portàtils. La portabilitat lliurament codi que pot ser executat en diferents processadors sense la necessitat de generar codi específic per a cada arquitectura. Un altre avantatge evident és la simplicitat que dóna feina a l'hora de llegir i escriure codi. Dins dels seus principals desavantatges tenim una elevada complexitat, ja que comparat amb el següent tipus de llenguatges que veurem, la llibertat que brinda C pot ser perjudicial si no se sap controlar, certament és com lliurar una pistola, podria succeir que en la manca de experiència una persona acabi disparant al seu propi peu en l'intent de netejar l'arma.

llenguatges interpretats

Dins d'aquest grup tenim una gran varietat de llenguatges, entre els més importants comptem Python, Ruby, Javascript, PHP, etc ... La idea bàsica d'aquests llenguatges és brindar una forma ràpida de creació i execució de programes, això es deu al fet que molts dels processos difícils són portats a terme en l'intèrpret, i la programació de la lògica és la que s'implementa en el codi. Vegem el mateix exemple anterior però aquesta vegada escrit en Python:

Disseny propi. Christopher Díaz Riveros

Dins de les coses més resaltantes podem veure que la primera línia s'encarrega de cridar a l'intèrpret (el programa que va a executar la nostra aplicació) i el subsegüent codi és més «simple» que la seva versió en C, ja que tota la feina pesat es realitza en l'intèrpret.

Disseny propi. Christopher Díaz Riveros

Els llenguatges interpretats brinden a l'desenvolupador una capa de seguretat addicional, ja compten amb controls de seguretat més rigorosos (ULL que no són perfectes, ja que fins als millors poden cometre errors) i ja no patim el risc de disparar una arma sense adonar-nos, ja que a el primer intent, l'intèrpret deixaria anar un avís i es cancel·laria l'execució. El principal desavantatge es fa evident a l'hora d'executar el programa, ja que aquest és més lent que el seu contrapart binària, això precisament a causa de la major quantitat de processament per poder assegurar que el codi funciona. Si el programa no requereix de terminis extremadament curts, la diferència pot passar desapercebuda, però si parlem de milers o milions de dades per segon, la diferència es fa exponencialment notable en els llenguatges compilats.

tipatge

Aquesta és una caracteríscia dels llenguatges de programació, aquests poden ser fortament dèbilment tipats. Aquest tema el deixaré per a un altre post, ja que és necessari i curiós entendre com s'emmagatzema la memòria en un programa, però per ara només ens cal fer la distinció: Els llenguatges fortament tipats són aquells que requereixen conèixer el tipus de dada que va a treballar-se en una variable o constant, mentre que els dèbilment tipats poden realitzar conversions de manera implicat i tot dependrà d'una jerarquia de conversió seguida pel llenguatge. (Si no s'entén ara, cap problema, ho deixarem per després)

paradigmes

A l'igual que tot en el món GNU / Linux, els llenguatges de programació es basen d'acord a paradigmes, i es generen comunitats al voltant d'aquests. Per exemple tenim la Fundació Python o Ruby o PHP o Bash (en aquest cas és la comunitat GNU). Al que vull arribar amb això és que no puc expressar la gran quantitat de pros i contres que té cada un, però si puc dir-los que on hi ha un llenguatge de programació lliure, hi ha una comunitat on aprendre i participar. Val la pena esmentar que molts si és que no són tots els intèrprets de llenguatges estan escrits en C, o algun derivat proper, i el desenvolupament dels mateixos sol dur a terme per un grup més reduït de la comunitat, que s'encarreguen de prendre decisions que afectaran a tots els usuaris de l'llenguatge. Poden fins i tot formar-se institucions que vetllin pel desenvolupament correcte de el llenguatge, com és el cas de C.

Quina triar?

Ja hem parlat força sobre els llenguatges i encara no responc al més important  . Però espero que després d'haver revisat aquest petit article no calgui que sigui jo mateix qui et digui quin llenguatge triar, ja que amb aquesta informació estàs en tota la capacitat de buscar-ne un que et generi curiositat. Evidentment si vols aprendre a programar en un llenguatge Assamblees requerirás de força temps abans de poder tenir alguna cosa funcional, el temps es reduirà bastant si optes per un llenguatge compilat, on a més de comptar amb la portabilitat en sistemes * NIX, podràs aprendre informació referent a l'funcionament de el mateix sistema, ja que estar en contacte amb C o derivats et fa d'una manera o altra aprendre com funciona de manera general un sistema operatiu. Finalment, si el que vols és aprendre alguna cosa lleugera i que et permeti fer molt sense la necessitat de comprendre molt, els llenguatges interpretats són una manera entretinguda d'aprendre i desenvolupar habilitats de programació.

Aprèn amb alguna cosa emocionant

Aquest és el millor consell que puc donar-los, si volen aprendre alguna cosa, cal trobar alguna cosa apassionant primer, sinó serà bastant difícil sobrepassar la corba d'aprenentatge típica de tot llenguatge de programació. Suposem que administren sistemes, en aquest cas potser és necessari aprendre un llenguatge ideal per scripting (Interpretat), dins d'aquests comptem amb Perl, Python, Bash, etc etc ... Potser el teu són els jocs, hi ha molts projectes en llenguatges com Javascript, Lua, C ++, depenent de el tipus de joc que vulguis fer. Potser t'agradaria crear una eina a nivell de sistema, ja que comptem C, Python, Perl, com veuràs alguns es repeteixen, i això és degut al fet que molts llenguatges poden ser utilitzats per a moltes tasques, per això la definició de llenguatges multipropósitos en la majoria d'aquests.

Comença un projecte

Amb això no em refereixo al fet que creus el següent compilador, o fins i tot el següent llenguatge de programació, un projecte pot ser arreglar un petit error en el teu programa favorit, potser fins i tot ajudar a millorar la documentació. Per què la documentació? perquè no hi ha millor manera d'aprendre com funciona el programari que llegint i ajudant a escriure la seva documentació, perquè després de el codi font, és la major font d'informació que es va a trobar sobre el programa. En un altre moment veurem com llegir el codi d'un projecte i entendre les funcions i valors que adquireixen.

Moltes gràcies per haver arribat fins aquí i com sempre, els seus comentaris m'ajuden a generar millor contingut i saber on enfocar l'atenció, Salutacions.