Kuinka oppia C-ohjelmointi ja käyttöjärjestelmien perusteet käytännöllisesti?

Ohjelmointikuvake

On monia tapoja oppia ohjelmoimaan, on olemassa monia verkkosivuja, joissa on oppaita, koodiesimerkkejä jne. Löydät myös laajan valikoiman kirjoja ohjelmoinnista, sekä C: llä että monilla muilla kielillä. On myös online-tai kasvokkain ohjelmointikursseja, joissa voit alkaa ymmärtää näitä tekniikoita luoda oma ohjelmisto tyhjästä edistyneelle tasolle.

Sitten toisaalta on joitain fyysisiä kouluttajia, joissa on tietyt mikroprosessorit tai mikrokontrollerit, jotka voit ohjelmoida oppimaan tämän taiteen melkein soittamalla ja luomalla projekteja. Erittäin hyvä esimerkki on itse Vadelma Pi, Parallaz-levyt tai kansalliset, jotka löydät MKElectronics-myymälästä, tai tunnettu levy Työläs, Scratch. Jos kuitenkin haluat keskittyä enemmän ohjelmistokehitykseen, suosittelen aina samaa: lukea ja muokata koodia.

Tässä viestissä En yritä antaa sinulle ohjelmointitunteja, koska annan aiheen monille tämänkaltaisille artikkeleille, joista selitän ohjelmoinnin perusteet edistyneimpään ohjelmointiin. Haluan vain antaa sinulle joitain resursseja tai tapoja vahvistaa tietosi. Ja vakuutan teille, että ne ovat erittäin tehokkaita. Tiedät myös, että voit aloittaa millä tahansa GNU / Linux-distrolla, ohjelmoinnille tarvittavilla paketeilla, kuten tekstieditorilla tai IDE: llä, myös GCC: llä ja GDB: llä, jos haluat debugata ... Tai käytä myös joitain jakelu ohjelmoijille. Uskon myös, että tiedät jo tai sinun pitäisi tietää tämän tyyppiset työkalut, jotka sinulla on käytettävissänne.

Kuinka aloittaa

Näytön lähdekoodi

Löydät koodinpätkät miljooniin, ts. koodinpätkiin, joita voidaan käyttää tai muokata hyvin erityisten tehtävien suorittamiseen. Nämä lähdekoodit ovat oppimisen perusta, koska ne ovat hyvin perustoimintoja, jotka auttavat sinua ymmärtämään ohjelmien toimintaa ja voit muokata joitain parametreja saadaksesi heidät tekemään jotain erilaista. Ja niin se alkaa!

Kun siirryt eteenpäin, voit hypätä lukea lähdekoodia, joka on hyvin ravitsevaa, jos sitä kommentoidaan hyvin. Valitettavasti kaikilla kehittäjillä ei ole hyvää tapaa kommentoida kirjoittamiaan rivejä, ja joissakin tapauksissa kommentit ovat niukkoja tai hämmentäviä jopa kokeneille ihmisille. Mutta onneksi meillä on suuri osa yhteisöä, joka kommentoi hankkeitaan melko hyvin.

Alustat, joissa ohjelmistokoodi, kuten GitHubEsimerkiksi, vaikka niitä on paljon enemmän, ne ovat erittäin tärkeitä viisauden lähteitä. Itse asiassa suosittelen, että kun olet hankkinut jonkin verran katkelmia tai pieniä ohjelmia, siirry tämäntyyppisille alustoille ja käytä yksinkertaisten projektien lähdekoodia. Voit käyttää suodatinta ja hakukoneiden toimintoja löytääksesi tietyn koodin a: sta lenguaje de programaciónKuin C ja valitse sitten yksinkertaisempi.

Niin vähitellen voit mennä lisäämällä ohjelmien monimutkaisuutta nostaa tietosi melko edistyneelle tasolle. Älä aloita projekteista, joissa on paljon rivejä, tai turhautuu siitä, ettet ymmärrä, mihin tämä suuri määrä koodia on tarkoitettu tai mitä se tekee. Se alkaa pienillä muutaman kymmenen rivin ohjelmilla, sitten muutamalle sadalle tai useammalle ja niin edelleen, kunnes vähitellen saavutat monimutkaisemmat ohjelmat.

Lisäksi suosittelen, että etsit ohjelmia, jotka tunnet melko hyvin niiden käytön suhteen. Kuvittele esimerkiksi, että käytät tiettyä avoimen lähdekoodin tekstieditoria tai a laskin. Kun tiedät, mitä tämä ohjelma tekee käytännössä, sinun on helpompi liittää näkemäsi lähdekoodirivit ohjelman toimintoihin. Toisaalta, jos valitset koodin, josta sinulla ei ole aavistustakaan, vain ohjelmoinnin perustietojen avulla ja kooditiedostoista löytyvät kommentit eivät riitä.

Katsotaanpa esimerkiksi toista esimerkkiä, joka näkyy laskentaohjelmien haussa kieli C seuraavan kuvan. Kuvaus osoittaa, että se on komentoriviohjelma, joka toteuttaa yksinkertaisen laskimen. Tämä on hyvä koodi aluksi, ei pelkästään koodin yksinkertaisuuden takia, vaan koska tekstipohjainen, sinulla ei ole käyttöliittymään liittyviä kooditiedostoja jne., Mikä kaikki häiritsee sinua ja vaikeuttaa oppimista:

Github

Jos menemme tähän projektiin katsomaan sen koodia, löydämme ensin tiedostot, jotka kehittäjä on ladannut tälle alustalle. Kuten LICENSE-lisenssin yksityiskohdat, tiedosto, joka sisältää tietoja par excellence README, jne. Mutta huomaa, että on otsikkotiedostot kuten helpers.h ja struct.h, nämä kaksi ovat tärkeitä, ja myös kaksi .c, joilla on todellinen C-lähdekoodi tälle ohjelmalle:

päädyt

Jos käytämme yhtä ylätunnisteista tai .h, huomaamme, että se on yksinkertainen ohjelma, ilman liian monta riviä. Löydät tämäntyyppiset tiedostot monta kertaa, paitsi jos se on melko yksinkertainen ohjelma, joka ei tarvitse niitä, mutta se on sisällytä tiedosto johon sisältyy joitain yksityiskohtia tai lisätiedostoja, jotka kääntäjän on käsiteltävä muodostamaan ohjelman lopullinen binääri.

Otsikkotiedostosta löydät suorat luokan ilmoitukset, aliohjelmat, määritetyt muuttujat ja muut. Joskus nämä .h ovat Kirjastot jota voit käyttää pääkooditiedostosta (.c) viittaamalla suoraan näissä otsikoissa ilmoitettuihin tarvitsematta toistaa koko rakennetta aina, kun sitä tarvitaan:

Koodin otsikko

Itse lähdekoodin tapauksessa, kuten calc.c-tiedosto esimerkistämme löydät lisää rivejä. Noin 400 jotain, ja tässä erityistapauksessa niitä ei kommentoida. Mikä haittaa vakavasti koodin ymmärtämistä. Koska olet yksinkertainen ohjelma kuin laskin, voit lukea ja muokata sitä ongelmitta, koska se on intuitiivinen:

muistaa, lue koodi ja muokkaa sitä. Nuo ovat avaimet ohjelmoinnin oppimiseen parhaalla mahdollisella tavalla ...

Vielä yksi askel: ydin

Linux-ydin

Nyt kun olet jo hankkinut joitain ohjelmointitaitoja C-kielellä, voit ottaa askeleen pidemmälle ja siirtyä kiehtovaan maailmaan käyttöjärjestelmät ja tietokonearkkitehtuurit. Tätä varten sinulla on oltava jonkin verran korkeampi tietämys tietokoneiden toiminnasta, mutta jälleen olemassa olevat avoimen lähdekoodin projektit voivat auttaa meitä paljon.

Analysoi ytimen lähdekoodi Se voi saada meidät ymmärtämään paremmin, miten tämä käyttöjärjestelmien maailma toimii, ja ne ovat myös mestarikursseja C-ohjelmoinnin "tohtorin" saamiseksi, koska se on jotain suurista sanoista. Saatat ajatella, että paras projekti tämän oppimiseksi olisi Linux-ydin.

Sen sijaan uusimmat Linux-ytimen versiot ne ovat liian monimutkaisia ​​ymmärrettäviksi useimmille kuolevaisille. Erityisesti suuri määrä koodia muille alijärjestelmille ja ohjaimille, jotka löydät lisättynä itse ytimeen. Tämä voi johtaa ajattelemaan, että kernel.org -sivustolta löytyy primitiivisempiä versioita ytimestä, kuten "historiallinen", jossa on joitain "vanhoja versioita", kuten Linux 0.01, ensimmäinen, jossa koodi on paljon pienempi ja sitä on helppo analysoida.

Kernel.org-kaappaus

Ja vaikka C-koodi, jonka löydät Linux-ytimestä, on hieno, En suosittele Linux-ydintä, koska sitä ei yleensä kommentoida tuskin monissa tapauksissa. En sano, että kehittäjillä on huono kommentointikäytäntö, mutta se voi olla hämmentävää juuri aloittavalle henkilölle. Joten tallenna Linux-ydin ja LKML myöhempää käyttöä varten ...

Ja on totta, että ne ovat olemassa erittäin hyviä kirjoja ja kurssit oppia ytimestä, moduuleista ja ohjaimista, mutta ehkä ei paras paikka aloittaa. Joitakin esimerkkejä ovat (jotkut niistä, kuten Greg's, voit ladata ilmaiseksi, koska ne on julkaistu):

  • Linux -ytimen kehitys, kolmas painos kirjoittanut Robert Love.
  • Ymmärtäminen Linuxin virtuaalimuistinhallinnasta Mel Goman, vaikka jälkimmäinen keskittyy vain ytimen muistin hallintaan.
  • Linux-laiteohjainten 3. painos Greg Kroah-Hartman, vaikka se onkin keskittynyt 2.6-ytimeen, mutta on hieno työ ymmärtää ytimen ohjaimet ja moduulit.
  • Linux-ydin pähkinänkuoressa on toinen upeista Greg Kroah-Hartmanista, joka antaa sinulle paljon globaalimman vision.

Voit myös löytää joitain erittäin mielenkiintoisia verkkosivustoja, oman lisäksi tiedot ja asiakirjat jonka löydät osoitteesta kernel.org, kuten:

Toinen suurista projekteista, joita vielä tutkitaan ja jotka toimivat oppimisena, on UNIX 6. sija, jonka koodia analysoidaan poikkeuksellisella tavalla esimerkiksi Lionien kommentit UNIX 6. painoksestakirjoittanut John Lions. Jätän sen teille toisena vaihtoehtoisena ideana, vaikka suosittelen edelleen seuraavaa, jota aion kommentoida ...

Mutta luulen sen paras käytettävissäsi oleva resurssi on tutkia ja analysoida MINIX-lähdekoodia. Se on paljon yksinkertaisempi järjestelmä, johon Linux alun perin inspiroi, mutta joka on erityisesti suunniteltu oppimista ja opiskelua varten. Koska tulevien käyttöjärjestelmäarkkitehtien on tarkoitus oppia, palaute on ylimääräistä aloittelijoille.

Lisää tietoa - MINIX3

Sieltä löydät paljon tietoa ja dokumentaatiota projektista. Ja voit ladata itse käyttöjärjestelmä, mutta myös käytettävissänne hyvä Wiki, jossa on myös kehittäjille tarkoitettuja tekstejä. Mutta koska kyse on C: n oppimisesta ja käyttöjärjestelmän kokoonpanon analysoimisesta, kehotan sinua lataamaan MINIX 1 -lähdekoodin ensimmäisen version:

Lähdekoodi - MINIX1

Esimerkiksi, jos menet päätiedosto main.cNäet, että tässä oleva koodi eroaa suuresti siitä, miten löydät sen Linuxissa tai laskinohjelmassa, jota käytin esimerkkinä tämän viestin alussa. Tässä tapauksessa huomaat, että kommentteja on paljon enemmän:

MINIX-lähdekoodi

Tässä lähes jokainen rivi tai jokainen fragmentti on comentado. Teet lukeminen ja ymmärtäminen. Vaadin jälleen, että kyse ei ole vain lukemisesta ja ymmärtämisestä, vaan myös muuttamisesta. Tee omat muutokset ja testit, koota sitten ja näe tulos. Se on paras ohjelmointimestari, jonka löydät. Vakuutan teille, kuten sanon aina oppilaille, että koodin lukeminen ja muokkaaminen on paras tietokoneluokka, jonka aiotte pitää ...

Voit paitsi analysoida käyttöjärjestelmän ytimen myös muita apuelementtejä, jotka muodostavat koko käyttöjärjestelmän ja myös komentoja jonka voit suorittaa kuoressa. Se on hieno tapa oppia "sisältä", kuinka päivittäin suoritettavat komennot, kuten ls, cat, cp, grep, kaiku jne., Myös melko hyvin kommentoidulla koodityöllä ...

Komennon lähdekoodi - MINIX1

Viimeiseksi tunnen kaverin, joka on luonut ytimen, joka on tehty tyhjästä. Hänen nimensä on Luis ja löydät hänen projektinsa tästä osoitteesta GitHub, toinen hyvä tutkimusesimerkki, jota suosittelisin. Hänen järjestelmäänsä kutsutaan Intia, on melko yksinkertaista ja täydellistä hankkia perustiedot. Kuka tietää? Ehkä olet seuraava, joka uskaltaa luoda ytimen ...

Jos haluat oppia kokoonpanija tai ASM, mielenkiintoinen kieli C: n ohella matalan tason ohjelmointiin ja erityisesti käyttöjärjestelmille ..., on myös erittäin mielenkiintoisia projekteja, kuten Hummingbirds, ilmainen järjestelmä, joka on kirjoitettu assemblerilla. ASM: ssä oleminen on paljon monimutkaisempaa, mutta se antaa myös hyvän käsityksen siitä, miten koneet toimivat intiimimmällä tasolla laitteistojen suhteen.

Opetusohjelma: Tulosta lähdekoodi tutkiaksesi sitä paperilla

PDF värikkäällä lähdekoodilla

Jos olet yksi niistä, jotka eivät halua viettää tunteja ruudun edessä ja katsella sitä, ehkä pidät paperista. Näytän sinulle pienen opetusohjelman siitä, kuinka voit tulostaa kaikki nämä lähdekoodit, joista olemme puhuneet, tai ne, jotka haluat analysoida. Niin sinä voit on korostettu syntaksin sisältävä PDF-tiedosto valmis tulostamaan tulostimellesi ja lukemaan paperille, jossa voit tehdä merkinnät ja paljon muuta.

Tätä varten ensimmäinen asia on asenna tarvittavat paketit meidän distro:

 

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

Kun meillä on nämä tiedostot, käytämme LATEXia Lähdekoodin muuttamiseksi PDF-tiedostoksi meidän on tallennettava tämä komentosarja, annettava sille suoritusoikeudet ja suoritettava se Bashissa:

#!/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>

Kun olet tallentanut sen tiedostoon nimi pdf.sh, voit antaa sille käyttöoikeudet ja suorittaa sen helposti:

chmod +x pdf.sh
./pdf.sh

Tuloksena on PDF, jossa teksti on korostettu värillisenä, jotta nykyisen hakemiston lähdekooditiedostot voidaan lukea paremmin. PDF-asiakirjan nimi tulee olemaan all.pdf. Nyt voit laittaa sen tulostusjonoon saadaksesi sen paperille.

Muuten, ainoa ongelma on se lähdekooditiedostot Hakemisto, jossa suoritat tämän komentosarjan ja jonka nimissä on välilyöntejä, ei toimi tämän komentosarjan kanssa. Joten jos on, voit muokata heidän nimeään tai muuttaa komentosarjaa tukemaan heitä ...

Älä unohda jättää kommenttejaVastaan ​​mielelläni kaikkiin kysymyksiisi tai kuuntelen palautetta, jota sinulla on viestin parantamiseksi. Toivon, että se on toiminut oppaana, jotta pääset alkuun tässä maailmassa ...


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastaa tiedoista: AB Internet Networks 2008 SL
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   slam dijo

    Erittäin hyvä viesti ... !!!
    Minulla on vain ongelma komentosarjassa, se äänestää virheitä rivillä 5.

  2.   Xavier dijo

    Hei, hyvää yötä täällä Meksikossa, olisi hyvä, että jatkat kirjoittamista tämän välineen kautta ja, jos mahdollista, jatka tietämyksen täyttämistä. Toisaalta, kiitos omistautumisestasi ajalle ja kokemukselle, johon olemme jääneet puoliksi. Minun tapaukseni on, että jätin urani ongelmien takia, nyt työskentelen itselleni. Vähitellen haken asioita tässä mielessä, todella Kiitos.

  3.   enkeli Martinez dijo

    Kuinka saan kaikki ohjelmointiin liittyvät tiedot

  4.   RakastamatonIsma dijo

    Linjan 5 ongelma on mahdollisesti (koska en ole vielä kokeillut sitä xd: tä), koska se on kirjoitettu näin:

    kissa < $ tex_file ## Tulosta tekstitiedoston otsikko

    milloin sen pitäisi olla näin:

    kissa <$ tex_file ## Tulosta tekstitiedoston otsikko

    Tai niin kuvittelen: U ...

    Tervehdys.

  5.   RakastamatonIsma dijo

    Voi helvetti tällä kertaa hän teki sen oikein>: v

  6.   Gregorio ros dijo

    Onnittelut artikkelista, rakastin sitä! Lopeta ohjelmointi sitten…. xD melkein kolmekymmentä vuotta, lukemattomia kertoja harkitsin sen ottamista uudelleen ja ajan ja erityisesti LAZINESSin vuoksi lykkään sitä aina. Ymmärrän, että nyt olemassa oleva dokumentaatio on loistava, sääli, että suurin osa siitä on englanninkielinen. Tiedän, että nyt kaikki haluavat ymmärtää sen, mutta tietoni rajoittuvat vähän enemmän kuin ohjelmoinnissa käytettävät kaksi tusinaa sanaa. Onko olemassa opas kernellistä espanjaksi? En lupaa jatkaa ohjelmointia, jätin sen liian monta kertaa uskoakseni, että voisin tehdä sen nyt, mutta jos on jotain, jota en ole koskaan menettänyt, se oli uteliaisuus. Kiitos artikkelista ja terveisin.