Kako na praktičan način naučiti programiranje C i osnove operativnih sustava?

Ikona za programiranje

Postoji mnogo načina naučiti programirati, postoji mnogo web stranica s vodičima, primjerima koda itd. Također možete pronaći široku paletu knjiga o programiranju, kako na C tako i na mnogim drugim jezicima. Postoje i internetski ili tečajevi programiranja licem u lice na kojima možete početi razumjeti ove tehnike za stvaranje vlastitog softvera od nule do napredne razine.

Zatim, s druge strane, postoje neki fizički treneri s određenim mikroprocesorima ili mikrokontrolerima koje možete programirati za učenje ove vještine gotovo igrajući se i kreirajući projekte. Vrlo dobar primjer je sam Raspberry Pi, ploče Parallaz ili one nacionalne koje možete pronaći u trgovini MKElectronics ili dobro poznata ploča Arduino, Zagrebite. Međutim, ako se želite više usredotočiti na razvoj softvera, uvijek savjetujem isto: čitati i mijenjati kod.

U ovom postu Neću vam pokušavati održavati satove programiranja, budući da je to tema koju bih dao za mnoge članke poput ovog s objašnjenjem iz osnove programiranja do najnaprednijeg programiranja. Samo vam želim dati neke resurse ili načine kako biste započeli jačati svoje znanje. I uvjeravam vas da su vrlo učinkoviti. Također, znate da možete započeti s bilo kojim distribucijskim sustavom GNU / Linux, s potrebnim paketima za programiranje, poput uređivača teksta ili IDE-a, također GCC i GDB, ako želite ispraviti pogreške ... Ili također koristiti neke distribucija za programere. Također mislim da već znate ili biste trebali znati ovu vrstu alata kojima raspolažete.

Kako započeti

Izvorni kod na ekranu

Možete pronaći isječci koda u mreži na milijune, odnosno fragmente koda koji se mogu koristiti ili modificirati za obavljanje vrlo specifičnih zadataka. Ti su izvorni kodovi osnova za učenje, jer su vrlo osnovne funkcije koje će vam pomoći da razumijete kako programi rade, a neke parametre možete izmijeniti kako bi ih natjerali na nešto drugačije. I to tako započinje!

Kako se krećete naprijed, možete uskočiti pročitajte izvorni kod, koji će ako budete dobro komentirali biti posebno hranjivi za vaše znanje. Nažalost, nemaju svi programeri dobru naviku komentirati retke koje napišu, a u nekim su slučajevima komentari oskudni ili zbunjujući čak i za iskusne ljude. Ali na sreću imamo velik dio zajednice koji prilično dobro komentira njihove projekte.

Platforme na kojima je softverski kôd poput GitHubNa primjer, iako ih ima mnogo više, oni su vrlo važni izvori mudrosti. Zapravo, preporučujem da nakon što malo naučite s isječcima ili malim programima, prijeđite na ove vrste platformi i pristupite izvornom kodu jednostavnih projekata. Funkcije filtra i tražilice možete koristiti za pronalaženje određenog koda u a programski jezikKao C a zatim odaberite jednostavniju.

Tako malo po malo možeš ići povećavajući složenost programa da svoje znanje podignete na prilično naprednu razinu. Ne započinjte s projektima s velikim brojem linija ili ćete biti frustrirani nerazumijevanjem čemu služi ta velika količina koda ili čemu služi. Počinje s malim programima od nekoliko desetaka redaka, zatim za nekoliko od 100 ili više i tako dalje dok malo po malo dođete do složenijih programa.

Uz to, savjetujem vam da potražite programe koje prilično dobro poznajete u smislu njihove upotrebe. Na primjer, zamislite da koristite određeni uređivač teksta otvorenog koda ili a kalkulator. Ako znate što ovaj program radi u praksi, olakšat ćete vam povezivanje linija izvornog koda koje ćete vidjeti s funkcijama koje program ima. S druge strane, ako odaberete kôd o kojem nemate pojma, samo uz pomoć vašeg osnovnog programskog znanja i komentari koje ćete pronaći u datotekama koda neće biti dovoljni.

Na primjer, pogledajte drugi primjer prikazan u mojoj potrazi za programima za izračunavanje u sustavu Windows jezik C sljedeće slike. Opis pokazuje da je to program naredbenog retka koji implementira jednostavan kalkulator. Ovo je dobar kôd za početak, ne samo zbog jednostavnosti koda, već i zbog toga što se zasnivate na tekstu nećete imati datoteke koda povezane s GUI-jem, itd., Sve što vam odvlači pažnju i otežava učenje:

Github

Ako uđemo u ovaj projekt kako bismo vidjeli njegov kôd, prvo ćemo pronaći datoteke koje je programer prenio na ovu platformu. Kao i detalji licence LICENCA, datoteka s podacima par excellence README itd. Ali primijetite da postoji datoteke zaglavlja poput helpers.h i struct.h, ovo dvoje je važno, a također i dva .c, koji imaju stvarni C izvorni kod za ovaj program:

Zaglavlja

Ako pristupimo nekom od zaglavlja ili .h, vidjet ćemo da je to jednostavan program, bez previše redaka. Ove ćete vrste datoteka pronaći puno puta, osim ako nije riječ o prilično jednostavnom programu koji im ne treba, ali jest uključiti datoteku gdje su uključeni neki detalji ili dodatne datoteke koje kompajler mora obraditi kako bi se oblikovao konačni binarni program.

U datoteci zaglavlja pronaći ćete izravne deklaracije klasa, potprograme, definirane varijable i druge. Ponekad su to .h Knjižnice koju možete koristiti iz glavne datoteke koda (.c) izravno upućujući na ono što je deklarirano u tim zaglavljima bez potrebe da ponavljate cijelu strukturu svaki put kada je to potrebno:

Zaglavlje koda

U slučaju samog izvornog koda, poput datoteka calc.c iz našeg primjera pronaći ćete više redaka. Oko 400 nečega, a u ovom konkretnom slučaju se ne komentiraju. Što ozbiljno ometa razumijevanje koda. Međutim, budući da je program jednostavan poput kalkulatora, možete ga bez problema čitati i mijenjati jer će biti intuitivan:

zapamtite, pročitati kod i izmijeniti ga. Oni ključevi su učenja programiranja na najbolji mogući način ...

Još jedan korak: kernel

Linux kernela

Sada, kad ste već stekli neke osnovne vještine programiranja na jeziku C, možete koraknuti dalje i ući u fascinantan svijet operativni sustavi i računalne arhitekture. Za to morate imati nešto više znanja o radu računala, ali opet nam postojeći projekti otvorenog koda mogu puno pomoći.

Analizirajte izvorni kod jezgre može nas bolje razumjeti kako funkcionira ovaj svijet operativnih sustava, a bit će i master klasa za stjecanje doktorata iz programiranja na C-u, jer je to nešto od glavnih riječi. Mogli biste pomisliti da bi najbolji projekt da se to nauči bio Linux kernel.

Umjesto toga, trenutne dimenzije najnovije verzije Linux kernela suviše su složeni da bi bili razumljivi većini smrtnika. Pogotovo za velika količina koda za ostale podsustave i pokretačke programe koje ćete pronaći dodane onome što je sama jezgra. To vas može navesti na pomisao da na kernel.org možete pronaći primitivnije verzije jezgre, poput "povijesne", gdje postoje neke "stare verzije", poput Linux 0.01, prva u kojoj je kod mnogo smanjeniji i jednostavniji za analizu.

Kernel.org hvatanje

I iako C kod koji ćete pronaći u Linux jezgri je izvrstan, Ne preporučujem Linux kernel zbog činjenice da se obično rijetko komentira u mnogim prilikama. Ne kažem da programeri imaju lošu politiku komentiranja, ali to može zbuniti nekoga tko tek započinje. Zato spremite Linux kernel i LKML za kasnije ...

I istina je da postoje neke vrlo dobre knjige i tečajeve za učenje o jezgri, modulima i pokretačkim programima, ali možda nije najbolje mjesto za početak. Neki su primjeri (neke od njih, poput Gregova, možete preuzeti besplatno jer su objavljeni):

  • Razvoj Linux kernela 3. izdanje napisao Robert Love.
  • Razumijevanje Linux Virtual Memory Manager Mel Goman, iako se potonji usredotočuje samo na upravljanje memorijom jezgre.
  • Pogonitelji Linux uređaja 3. izdanje napisao Greg Kroah-Hartman, iako je usredotočen na jezgru 2.6, ali sjajno je djelo razumjeti upravljačke programe i module jezgre.
  • Linux kernel u malom je još jedan od velikih Grega Kroah-Hartmana koji vam daje puno globalniju viziju.

Također možete pronaći i vrlo vrlo zanimljive web stranice, koje nisu vaše informacije i dokumentacija koje možete pronaći na kernel.org, poput:

Još jedan od sjajnih projekata koji se još uvijek proučavaju i koji služe učenju je UNIX 6., čiji se kod na izvanredan način analizira u knjigama poput Komentar Lionsa o šestom izdanju UNIX-aJohn Lions. Ostavljam vam to kao drugu alternativnu ideju, iako i dalje preporučujem sljedeće što ću komentirati ...

Ali ja to mislim najbolji resurs kojim raspolažete je proučavanje i analiza MINIX izvornog koda. To je puno jednostavniji sustav u kojem je Linux isprva bio nadahnut, ali koji je posebno koncipiran za učenje i učenje. Budući da je namijenjen budućim arhitektima operativnog sustava da uče, povratne informacije koje ima imaju izvanredne su za one koji tek počinju.

Više informacija - MINIX3

Tamo ćete pronaći puno informacija i dokumentacije o projektu. I možete preuzeti sam operativni sustav, ali na raspolaganju vam je i dobar Wiki gdje postoje i tekstovi za programere. Ali, budući da se radi o učenju C i analiziranju konstitucije operativnog sustava, upućujem vas izravno na preuzimanje prve verzije izvornog koda MINIX 1:

Izvorni kod - MINIX1

Na primjer, ako odete u glavna datoteka main.cVidjet ćete da se kod ovdje jako razlikuje od onoga kako ga nalazite u Linuxu ili u programu kalkulator koji sam koristio kao primjer na početku ovog posta. U ovom ćete slučaju primijetiti da je broj komentara mnogo veći:

MINIX izvorni kod

Ovdje je gotovo svaki redak ili svaki fragment comentado. Izrada vašeg čitanje i razumijevanje. Opet inzistiram, nije stvar samo u čitanju i razumijevanju, već je i u modificiranju. Napravite vlastite preinake i testove, zatim sastavite i pogledajte rezultat. To će biti najbolji majstor programiranja kojeg možete pronaći. Uvjeravam vas, kao što uvijek kažem svojim studentima, čitanje i izmjena koda najbolja je računalna klasa koju ćete imati ...

Ne samo da ćete moći analizirati jezgru operacijskog sustava, već i druge pomoćne elemente koji čine cjeloviti operativni sustav i također naredbe koje možete pokrenuti u ljusci. To je sjajan način da naučite iznutra kako one naredbe poput ls, cat, cp, grep, echo itd., Koje izvršavate svakodnevno, također s prilično dobro komentiranim radom koda ...

Izvorni kod naredbe - MINIX1

Na kraju, znam tipa koji je stvorio jezgru izrađenu od nule. Zove se Luis i njegov projekt možete pronaći na ovoj adresi GitHub, još jedan dobar primjer studije koji bih preporučio. Njegov sustav je pozvan Indija, vrlo je jednostavno i savršeno steći osnovno znanje. Tko zna? Možda ćete vi biti sljedeći koji se usudi stvoriti jezgru ...

Ako želite učiti asembler ili ASM, zanimljiv jezik zajedno s C za programiranje na niskoj razini, a posebno za operativne sustave ..., postoje i vrlo zanimljivi projekti poput slučaja Kolibrići, besplatni sustav napisan u asembleru. Budući da ste u ASM-u, mnogo je složenije, ali također daje dobru ideju o tome kako strojevi rade na intimnijoj razini s obzirom na hardver.

Vodič: Ispišite izvorni kod da biste ga proučili na papiru

PDF sa živopisnim izvornim kodom

Ako ste jedan od onih koji ne vole sate provoditi ispred zaslona i promatrati ga, možda više volite papir. Pokazat ću vam mali vodič o tome kako možete ispisati sve ove izvorne kodove o kojima smo razgovarali ili one koje želite analizirati. Pa možete imati PDF s istaknutom sintaksom spreman za ispis na pisaču i čitanje na papiru, gdje možete unositi napomene i još mnogo toga.

Da biste to učinili, prva stvar će biti instalirajte potrebne pakete u našoj distribuciji:

 

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

Jednom kad imamo ove datoteke, koristit ćemo LATEX Da bismo transformirali izvorni kod u PDF, a za to moramo spremiti ovu skriptu, dati joj dozvole za izvršavanje i izvršiti je u Bashu:

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

Nakon spremanja u datoteku s naziv pdf.sh, možete mu dati dozvole i izvršiti ga na jednostavan način:

chmod +x pdf.sh
./pdf.sh

Rezultat će biti PDF s tekstom istaknutim u boji za bolje čitanje datoteka izvornog koda trenutnog direktorija. Naziv PDF dokumenta bit će svi.pdf. Sada će biti spremno da ga stavite u svoj red ispisa kako biste ga imali na papiru.

Usput, jedini je problem u tome datoteke izvornog koda Direktorij u kojem izvodite ovu skriptu koji sadrži razmake u njihovim imenima neće raditi s ovom skriptom. Dakle, ako ih ima, možete izmijeniti njihovo ime ili izmijeniti skriptu kako bi ih podržali ...

Ne zaboravite ostaviti svoje komentare, Rado ću odgovoriti na sva vaša pitanja o tome ili poslušati sve povratne informacije koje imate kako biste poboljšali post. I nadam se da je poslužio kao vodič za početak ovog svijeta ...


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Odgovoran za podatke: AB Internet Networks 2008 SL
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Zalupiti dijo

    Vrlo dobar post… !!!
    Imam problema samo sa skriptom, ona glasuje za pogreške u retku 5.

  2.   Xavier dijo

    Pozdrav, laku noć ovdje u Meksiku, bilo bi dobro da nastavite pisati kroz ovaj medij i ako je moguće nastavite ispunjavati znanjem. S druge strane, hvala vam što ste posvetili svoje vrijeme i iskustvo na kojem smo ostali polovica. Moj slučaj koji sam imao je da sam zbog problema napustio karijeru i sada radim na izdržavanju. Malo-pomalo preuzimam stvari u ovom smislu, zaista Totalno hvala.

  3.   anđeo martinez dijo

    Kako mogu dobiti sve informacije u vezi s programiranjem

  4.   Isma bez ljubavi dijo

    Problem s retkom 5 eventualno (jer ga još nisam probao xd) je zato što je napisan ovako:

    mačka < $ tex_file ## Ispis zaglavlja tekstualne datoteke

    kad bi trebalo biti ovako:

    cat <$ tex_file ## Ispis zaglavlja tekstualne datoteke

    Ili barem zamišljam: U ...

    Pozdrav.

  5.   Isma bez ljubavi dijo

    O vraga, ovaj put je to učinio kako treba>: v

  6.   Grgur ros dijo

    Svaka čast na članku, svidio mi se! Prestanite programirati prije ... xD gotovo trideset godina, bezbroj puta sam razmišljao da ga opet prihvatim i zbog nedostatka vremena, a posebno LJENOSTI, to uvijek odgađam. Priznajem da je dokumentacija koju sada imamo fantastična, šteta što je većina na engleskom, znam da je sada svi žele razumjeti, ali moje je znanje ograničeno na malo više od dva tuceta riječi korištenih u programiranju. Postoji li lekcija o kernellu na španjolskom? Ne obećavam da ću nastaviti s programiranjem, previše puta sam to ostavljao da bih vjerovao da bih to mogao sada, ali ako postoji nešto što nikada nisam izgubio, to je bila znatiželja. Hvala na članku i srdačan pozdrav.