Com aprendre programació en C i les bases dels sistemes operatius de forma pràctica?

programació icona

Hi ha moltes formes de aprendre a programar, Hi ha multitud de pàgines webs amb tutorials, exemples de codi, etc. També podràs trobar una gran varietat de llibres sobre programació, tant de C com de molts altres llenguatges. Igualment hi ha cursos en línia o presencials de programació on començar a comprendre aquestes tècniques per crear el teu propi programari des de zero fins a un nivell avançat.

Després, d'altra banda, hi ha alguns entrenadors físics amb certs microprocessadors o microcontroladors que pots programar per aprendre aquest art gairebé jugant i creant projectes. Un exemple molt bo és la pròpia Raspberry Pi, les plaques de Parallaz, o les nacionals que pots trobar a la botiga MKElectrónica, o la placa arxiconeguda Arduino, Raspi. No obstant això, si vols centrar-te més en el desenvolupament de programari, sempre aconsello el mateix: llegeix i modifica codi.

En aquest post no intentaré donar-te classes de programació, Ja que és un tema que donaria per a molts articles com aquest explicant des les bases de la programació fins a la programació més avançada. Només pretenc donar-te alguns recursos o formes de començar per afermar els teus coneixements. I t'asseguro que són molt efectius. A més, saps que pots començar amb qualsevol distro GNU / Linux, amb els paquets necessaris per a programació com un editor de text, o un IDE, també GCC i GDB, si vols depurar ... O també utilitzar alguna distribució per a programadors. També crec que ja coneixes o hauries de conèixer aquest tipus d'eines que tens al teu abast.

Com començar?

Codi font en pantalla

pots trobar snippets de codi a la xarxa a milions, és a dir, fragments de codi que es poden usar o modificar per fer tasques molt concretes. Aquests codis font són la base per a l'aprenentatge, ja que són funcions molt bàsiques que t'ajudaran a entendre com funcionen els programes i podràs modificar en alguns paràmetres per aconseguir que facin una altra cosa diferent. I així es comença!

Amb formi vagis avançant podràs llançar-te a llegir codi font, Que si està bé comentat serà especialment nutritiu per als teus coneixements. Malauradament no tots els desenvolupadors tenen el bon costum de comentar les línies que escriuen, i en alguns casos els comentaris són escassos o confusos fins i tot per a gent amb experiència. Però afortunadament tenim una gran part de la comunitat que comenta bastant bé els seus projectes.

Plataformes on es penja codi de programari com GitHub, Per posar un exemple, encara que existeixen moltes més, són fonts de saviesa molt importants. De fet, et recomano que un cop hagis adquirit certa soltesa amb els snippets o els teus petits programes, vagis a aquest tipus de plataformes i accedeixis a el codi font de projectes senzills. Pots fer servir les funcions de filtres i cercadors per trobar codi específic en un llenguatge de programació, com C i després seleccionar algun que sigui més simple.

Així poc a poc podràs anar augmentant la complexitat dels programes per aconseguir elevar els teus coneixements fins a un nivell bastant avançat. No comencis per projectes amb gran quantitat de línies, o et frustrarà el fet de no entendre per a què serveix o què fa aquesta gran quantitat de codi. Comença amb petits programes d'unes desenes de línies, després per alguns 100 o més i així fins a poc a poc arribar a programes més complexos.

A més, t'aconsello que busquis programes que coneguis prou bé pel que fa al seu ús. Per exemple, imagina que fas servir un determinat editor de text de codi obert o un calculadora. Sabent el que fa aquest programa en la pràctica et serà més fàcil relacionar les línies de codi font que veuràs amb les funcions que té el programa. En canvi, si tries un codi de què no tens idea, només amb ajuda dels teus coneixements bàsics de programació i dels comentaris que trobaràs en els fitxers de codi no serà suficient.

Per exemple, fixa't en el segon exemple que mostra en la recerca que vaig fer de programes de càlcul en llenguatge C de la següent imatge. En la descripció es mostra que és un programa en línia de comandes que implementa una simple calculadora. Això és un bon codi per començar, no només per la simplicitat de el codi, sinó perquè a l'ésser basat en text no tindràs fitxers de codi referent a la interfície gràfica d'usuari, etc., tot això et distreu i et dificulta l'aprenentatge bastant:

Github

Si entrem dins d'aquest projecte per veure el seu codi, ens trobarem primer els fitxers que el desenvolupador ha pujat a aquesta plataforma. Com els detalls de la llicència LICENSE, el fitxer amb informació per excel·lència README, etc. Però fixa't que hi ha fitxers de capçaleres (headers) com helpers.hy struct.h, aquests dos són importants, i també els dos .c, que són els que tenen el codi font en C pròpiament dit per a aquest programa:

capçaleres

Si accedim a un dels headers o .h, veurem que es tracta d'un programa senzill, sense massa línies. Aquest tipus de fitxers les trobaràs moltes vegades, tret que sigui un programa bastant simple que no els necessita, però es tracta d'un inclou fitxer on s'inclouen alguns detalls o fitxers que el compilador ha de processar per formar el binari final de el programa.

En un header file trobaràs declaracions directes de classes, subrutines, variables definides, i altres. De vegades, aquests .h són Biblioteques que pots utilitzar des del fitxer principal de codi (.c) fent referència directa al que dins d'aquestes capçaleres es declara sense haver de tornar a repetir tota l'estructura cada vegada que es necessita:

capçalera codi

En el cas de el codi font pròpiament dit, com el fitxer calc.c del nostre exemple, trobaràs més línies. Unes 400 i escaig, i en aquest cas concret no estan comentades. El que dificulta seriosament la comprensió de el codi. No obstant això, a l'ésser un programa tan senzill com una calculadora, pots llegir-lo i modificar-lo sense problemes, ja que et resultarà intuïtiu:

recorda, llegir codi i modificar-lo. aquestes són les claus per aprendre a programar de la millor manera possible ...

Un pas més: el nucli

Linux Kernel

Ara bé, quan ja has adquirit unes competències bàsiques de programació en llenguatge C, pots fer un pas més i endinsar-te en el fascinant món de els sistemes operatius i de les arquitectures de computadores. Per a això has de tenir coneixements una mica més elevats de com funcionen els ordinadors, però novament els projectes de codi obert existents ens poden ajudar molt.

analitzar el codi font d'un nucli ens pot fer comprendre d'una manera millor com funciona aquest món dels sistemes operatius, i també seran unes classes magistrals per obtenir el nostre "doctorat" en programació C, a l'ésser alguna cosa de paraules majors. Podries pensar que el millor projecte per aprendre això seria el nucli Linux.

En canvi, les dimensions actuals de les últimes versions de l'nucli Linux són massa complexes com per ser comprensibles per a la majoria de mortals. Especialment per la gran quantitat de codi per altres subsistemes i controladors que trobaràs agregat al que és el nucli en si. Això pot portar a pensar que en kernel.org pots trobar versions més primitives de l'nucli, com els "historic" on hi ha algunes "old-versions" com ara la Linux 0.01, La primera en què el codi és molt més reduït i simple d'analitzar.

Kernel.org captura

I encara que el codi C que trobaràs en el nucli Linux és exquisit, No et recomano el nucli Linux pel fet que sol estar escassament comentat en moltes ocasions. No vull dir que els desenvolupadors portin una mala política de comentaris, però sí que pot resultar confús per a algú que està començant en això. Així que deixa el nucli Linux i les LKML per a més endavant ...

I és veritat que hi ha alguns molt bons llibres i cursos per aprendre sobre el nucli, mòduls i controladors, però potser no sigui el millor per començar. Alguns exemples són (alguns d'ells, com els de Greg, els pots descarregar gratuïtament, ja que han estat alliberats):

  • Linux Kernel Development 3rd Edition de Robert Love.
  • Understanding The Linux Virtual Memory Manager de Mel Goman, encara que aquest últim se centra només en la gestió de memòria de l'nucli.
  • Linux Device Drivers 3rd Edition de Greg Kroah-Hartman, encara que és centrat en el nucli 2.6, però és una gran obra per entendre els controladors i mòduls de l'nucli.
  • Linux Kernel in a Nutshell és un altre el gran Greg Kroah-Hartman que et dóna una visió molt més global.

També pots trobar algunes webs molt molt interessants, més enllà de la pròpia informació i documentació que pots trobar a kernel.org, com:

Un altre dels grans projectes que encara se segueixen estudiant i servint com a aprenentatge és UNIX 6th, El codi s'analitza d'una manera extraordinària en llibres com Lions 'Commentary on UNIX 6th Edition, De John Lions. T'ho deixo com una altra idea alternativa, encara que et segueixo recomanant el següent que et comentaré ...

Però crec que el millor recurs que tens a la teva disposició és estudiar i analitzar el codi font de MINIX. És un sistema molt més senzill en el qual en un inici es va inspirar Linux però que ha estat concebut especialment per a l'aprenentatge i el seu estudi. A l'estar pensat perquè els futurs arquitectes de sistemes operatius aprenguin, els comentaris que té són extraordinaris per als que comencen en això.

Més informació - MINIX3

Allà trobaràs molta informació i documentació sobre el projecte. I podràs descarregar el propi sistema operatiu, Però també tenir al teu abast una bona Wiki on també hi ha textos dirigits a desenvolupadors. Però, com del que es tracta és d'aprendre C i d'analitzar com està constituït un sistema operatiu, et remeto directament a descarregar la primera versió de la font d'MINIX 1:

Codi font - MINIX1

Per exemple, si et vas a l' fitxer principal main.c, Veuràs que el codi aquí és molt diferent a com ho trobes a Linux o al programa de calculadora que vaig posar d'exemple a l'inici d'aquest post. En aquest cas, notaràs que la quantitat de comentaris són molt més abundants:

MINIX codi font

Aquí, gairebé cada línia o cada fragment està comentat. Fent molt més senzilla lectura i comprensió. Torno a insistir, no es tracta només de llegir i comprendre, també de modificar. Fes les teves pròpies modificacions i proves, després compila i veu el resultat. Això serà el millor màster de programació que podràs trobar. T'ho asseguro, com sempre els dic als meus alumnes, llegir i modificar codi és la millor classe d'informàtica que aneu a tenir ...

No només podràs analitzar el nucli de sistema operatiu, també altres elements auxiliars que componen el sistema operatiu complet i també ordres que pots executar en el shell. És una magnífica manera de conèixer des de «dins» com funcionen aquests ordres com ls, cat, cp, grep, trobo, etc., que executes diàriament, també amb codi bastant bé comentat ...

Codi font de les ordres - MINIX1

Finalment, conec un noi que ha creat un nucli fet des de zero. Es diu Luis i podeu trobar el seu projecte en aquesta direcció de GitHub, Un altre bon exemple d'estudi que us recomanaria. El seu sistema es diu IndiaOS, És bastant senzill i perfecte per a adquirir els coneixements bàsics. Qui sap? Potser siguis tu el següent a animar-se a crear un nucli ...

Si vols aprendre assemblador o ASM, Un llenguatge basante interessant al costat de C per programar a baix nivell i, especialment, per als sistemes operatius ..., també hi ha projectes molt interessants com el cas de Kolibris, Un sistema lliure escrit en assemblador. A l'estar en ASM, resulta molt més complicat, però també dóna una bona idea de com treballen les màquines a un nivell més íntim pel que fa a el maquinari.

Tutorial: Imprimir codi font per estudiar-ho en paper

PDF amb el codi font colorit

Si ets dels que no li agrada passar hores davant d'una pantalla i deixar-se la vista en ella, potser prefereixis el paper. Et vaig a mostrar un petit tutorial de com pots imprimir tots aquests codis font dels que hem parlat o els que vulguis analitzar. així podràs tenir un PDF amb la sintaxi ressaltada llista per imprimir en la impressora i llegir sobre paper, on podràs fer les teves anotacions i altres.

Per a això, el primer serà instal·lar els paquets necessaris a la nostra distro:

 

sudo apt-get install texlive-latex-extra latex-xcolor textlive-latex-recommended

Un cop tenim aquests fitxers, farem servir LATEX per trasnformar el codi font en un PDF, i per a això hem de guardar aquest script, donar-li els permisos d'execució i executar-lo en Bash:

#!/usr/bin/env bash

tex_file=$(mktemp) ## Random text file name

cat<<EOF >$tex_file   ## Print the text file header
\documentclass{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{color}  %% Allow color names
\lstdefinestyle{customasm}{
  belowcaptionskip=1\baselineskip,
  xleftmargin=\parindent,
  language=C++,   %% Change this to whatever you write in
  breaklines=true, %% Wrap long lines
  basicstyle=\footnotesize\ttfamily,
  commentstyle=\itshape\color{Gray},
  stringstyle=\color{Black},
  keywordstyle=\bfseries\color{OliveGreen},
  identifierstyle=\color{blue},
  xleftmargin=-8em,
}        
\usepackage[colorlinks=true,linkcolor=blue]{hyperref} 
\begin{document}
\tableofcontents

EOF

find . -type f ! -regex ".*/\..*" ! -name ".*" ! -name "*~" ! -name 'src2pdf'|
sed 's/^\..//' |                 ## Change ./foo/bar.src to foo/bar.src

while read  i; do                ## Loop through each file
    name=${i//_/\\_}             ## escape underscores
    echo "\newpage" >> $tex_file   ## start each section on a new page
    echo "\section{$i}" >> $tex_file  ## Create a section for each filename

   ## This command will include the file in the PDF
    echo "\lstinputlisting[style=customasm]{$i}" >>$tex_file
done &&
echo "\end{document}" >> $tex_file &&
pdflatex $tex_file -output-directory . && 
pdflatex $tex_file -output-directory .  ## This needs to be run twice ## for the TOC to be generated  </pre><pre>

Després guardar-lo en un fitxer amb el nom pdf.sh, Pots donar-li permisos i executar d'una forma fàcil:

chmod +x pdf.sh
./pdf.sh

I el resultat serà un PDF amb el text ressaltat en color per a una millor lectura dels fitxers de codi font de directori actual. El nom de el document PDF serà all.pdf. Ara estarà llest perquè ho posis al teu cua d'impressió per tenir-lo en paper.

Per cert, l'únic problema és que els fitxers de codi font de directori on executis aquest script que continguin espais en els seus noms no funcionaran amb aquest script. Així que si hi ha algun pots modificar el seu nom o alterar l'script perquè els admeti ...

No oblidis deixar els teus comentaris, Estaré encantat de contestar qualsevol dubte que tinguis a l'respecte, o d'escoltar qualsevol aprotacion que tinguis per millorar el post. I espero que t'hagi servit com a guia per iniciar-te en aquest món ...


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: AB Internet Networks 2008 SL
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Slam va dir

    Molt bon post ... !!!
    Només tinc un problema amb el script, em vota errors en la línia 5.

  2.   Javier va dir

    Hola bona nit per aquí a Mèxic seria bo que seguissis escrivint per aquest mitjà i de ser possible seguir omplint de coneixement. Per altra part gràcies per dedicar el teu temps i experiència sobre els que ens vam quedar a mitges. El meu cas que vaig tenir és que vaig deixar la meva carrera per problemes ara treball per mantenir-me. A poc a poc estic reprenent les coses en aquest sentit en veritat Gràcies totals.

  3.   angel martinesa va dir

    Com faig per a rebre tota la informació pel que fa a programació

  4.   LovelessIsma va dir

    El problema de la línia 5 possiblement (perquè encara no ho he provat xd) es deu al fet que està escrita així:

    cat < $ Tex_file ## Print the text file header

    quan hauria d'estar així:

    cat <$ tex_file ## Print the text file header

    O això m'imagino: O ...

    Salutacions.

  5.   LovelessIsma va dir

    Ah raigs aquest cop si ho va fer bé>: v

  6.   Gregorio Ros va dir

    Felicitats per l'article, em encant !. Deixi de programar fa .... xD gairebé trenta anys, infinitat de vegades em plantegi reprendre-i per falta de temps i sobretot MANDRA sempre ho va postergar. Reconec que la documentació que hi ha ara és fantàstica, una pena que la major part aquest en anglès, ja que ara tot déu ho entén, mes el meu coneixement està limitat a poc mes de les dues dotzenes de paraules usades en programació. Hi ha algun tutorial sobre el Kernell en castellà ?. No em comprometo a reprendre la programació, massa vegades ho deixi ja per creure capaç de fer-ho ara, però si hi ha alguna cosa que mai va perdre va ser la curiositat. Gràcies per l'article i una salutació.