Tietääkö mistä C-ohjelmoinnin aloittelija voisi löytää esimerkkiohjelmia? Tarkoitan siis kokonaisia yksinkertaisten ohjelmien koodinpätkiä joita voisi tutkia ja koittaa ymmärtää niiden toimintaa. Opin parhaiten asioita esimerkkejä näkemällä ja kirjallisuudessa selkeitä esimerkkiohjelmien koodeja on turhan vähän. Ainakin tässä omistamassani Sirpiön Karin C-kieli kirjassa esimerkit ovat yleensä huonosti selitettyjä, on kirjoitettu vain koodin pätkä eikä kerrottu selkokielellä mitä kyseinen ohjelma tekee. Käyn tällä hetkellä kone- ja tuotantotekniikkapuolen ohjelmoinnin perusteet kurssia ammattikorkeassa ja kurssi herätti kiinnostukseni ohjelmointia kohtaan. Haluaisin oppia syvällisemmin kuin kyseisellä kurssilla opetetaan, vaikka en ole alalle siirtymässäkään.
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 16
Vanhimmat
Miten olisi Simo Silanderin "Ohjelmoinnin perusteet ja C-kieli": http://cs.stadia.fi/~silander/ohjelmointi/
Siinä lyhyet esimerkkiohjelmat yms. on perusteellisesti selitetty.
täytyy huomata, että useassa vanhassa oppaassa on main -funktio väärin eli
void main(...) -> int main(...)
ohjelmoijan taivaaseen, eli
http://www.programmersheaven.com/
Tuolta löydät helvetisti esimerkkejä, kommentoinnista en tiedä.
Suosittelisin unohtamaan C:n ja opiskelemaan suoraan C kielen joka on mielestäni helpompi.
mielipide ei perustu tietoon...
".... suoraan C kielen joka on mielestäni helpompi."
Et voi olla tosissasi.
kuin C paitsi että siinä on kaiken näköisiä lisukkeita. Kun käännetään kaikki teokset C :na huolimatta siitä mitä yrittää tehdä nii kaikki menee hyvin.
Tuohon C :n ymmärtämiseen tarvitaan C:n perusteet. Jos C -vaiheen hyppää yli, perusrakenteet jää hahmottamatta ja tulee liiaksi riippuvaiseksi toisten tuotoksista. Ne C :n kirjastot ei auta kuitenkaan joka asiassa.
Kyllä ne perusteet oppii yhtä hyvin suoraan aloittamalla C :alla. Aloittamalla suoraan C :lla niin oppii myös heti olio-ohjelmoinnin ajattelutavan josta on sitten paljon hyötyä suurimissa projekteissa. Huomautettakoon että ei C ole pelkkää standardikirjastoa.
Jos taas aloittaa funktionaallisella kielellä(kuten C) niin joutuu muuttamaan ajattelutapaa siirryttäessä olio-ohjelmoinnin pariin ja se ei aina tuota niin hyvää tulosta. Yleisin virhe minkä näkee C:stä C :aan siirtyvillä on että kaikki toiminallisuus koodataan samaan luokkaan, joka todellakaan ei ole olio-ohjelmointia.
Yleensä nämä mielipiteeet että on PAKKO opetella C:tä ennen C :aan siirtymistä on sellaisilta ohjelmoijilta jotka ovat aloittaneet ohjelmoinnin funktionaalisilla kielillä mutta eivät vielä ole oikein käsittänyt olio-ohjelmoinnin hyötypuolia. Jos kaikki pitäisi opetella C ennen C :aan siirtymistä niin eikö kaikki Java-ohjelmoijat pitäisi myöskin opetella C ja C kun java niihin perustuu?
Jos realistisesti ajatellaan niin kaikki suuremmat projektit tänä päivänä tehdään olio-pohjaisesti joko Javaa tai C :aa käyttäen. Poikkeuksen tähän kylläkin tekee projektit sulautetuissa järjestelmissä missä resurssit ovat erittäin rajalliset ja joudutaan käyttämään alemman tason kieliä mutta tekniikaan pienentyessä uskon myös olio-ohjelmoinnin kasvuun sillä alustalla kuten Symbian todistaa.
"..josta on sitten paljon hyötyä suurimissa projekteissa."
Aloittelijan projektit on varmaan tosi suuria.
"Jos taas aloittaa funktionaallisella kielellä(kuten C)"
C _ei_ ole funktionaalinen ohjelmointikieli.
"Jos realistisesti ajatellaan niin kaikki suuremmat projektit tänä päivänä tehdään olio-pohjaisesti joko Javaa tai C :aa käyttäen."
Esim. kaikki Unixit ovat C:tä.
Ohjelmoijan tulisi osata monta ohjelmointiparadigmaa: esim. proseduraalinen(imperatiivinen), OO ja funktionaalinen, sillä jokainen uusi opittu paradigma lisää taitoa myös siinä ohjelmoijan "pää"-paradigmassa.
C on hyvä pohjatieto kaikille nykyisille kielille (Java, C , D, ...). Kouluissakin opetetaan ensi C ja sitten vasta muita. Tai jos opetettavana on yksi C:n sukuisista, niin valintana on C. C on niin laaja kokonaisuus, että kielen perusteiden hallitsemiseen menee jo huomattavasti kauemmin kuin mitä C:hen.
Kun siirrytään C -> C jo alkuvaiheessa tulee selväksi mikä suuri lisäys olio-ohjelmoinnista saavutetaan. Ei siihen oppimiseen montaa tuntia tarvita. Mutta jos opetellaan C ensin, usein jäädään sille asteelle eikä viitsitä perehtyä siihen koneen näkökulmaan. Näin ollen osoittimien, referenssien ja yksinkertaisten taulukoiden ymmärtämys jää puuttumaan.
Tuota samaan luokkaan ymppäämistä en oikein sisäistänyt. Ehkä osaat antaa esimerkin. Luulenpa että kyse on jostain muusta kuin vääränlaisesta ajattelumallista. Eiköhän kaikissa tilanteissa tule ajateltua se miten pääsisi pienimmällä mahdollisella kirjoittelulla.
Kyllä nykyisistä projekteista suuri osa on edelleen C:llä kirjoitettuja.
Aloitan myöntämällä erheeni, C tosiaankin on _proseduraalinen_ eikä funktionaalinen kuten aiemmin mainitsin. Termistö meni vähän sekaisin.
"Aloittelijan projektit on varmaan tosi suuria."
Kai ne jossain vaiheessa kehittyy "Hello world!" tasosta suuremmaksi?
"Esim. kaikki Unixit ovat C:tä."
Ja kaikki Windowsit C :aa..
".., sillä jokainen uusi opittu paradigma lisää taitoa myös siinä ohjelmoijan "pää"-paradigmassa. "
"Mitä enemmän tietää sitä parempi" sanonta ei aina tällaisissa tapauksissa päde. Täytyy olla varsin kokenut ohjelmoija jotta osaa pitää monta paradigmaa erillään.
Esimerkiksi, jos ajatellaan henkilöä joka on pääasiallisesti tehnyt C-ohjelmia ja hänet laitetaan tekemään jonkun modulin toteutusta C projektiin. Jossain vaiheessa hän huomaa että kaksi eri luokkaa tarvitsevat samaa funktiota niin sen sijaan että hän kirjottaisi uuden yliluokan molemmille jossa tämä funktio on(esim.), hän kirjoittaa globaalin funktion ja näin ollen rikkoo kapselointia ja tekee tekee projektista jotakin muuta kuin OO:ta.
Eli tarkoitin "saamaan luokkaan ymppäämisellä" sitä että luodaan ainoastaan yksi luokka(class ohjelma), koska olio-ohjelmointiinhan tarvitaan luokkia, ja sitten kirjoitetaan kaikki toiminnallisuus siihen luokkaan.
Esim.
class ohjelma
{
aloita_ohjelma();
tee_sitä();
tee_tätä();
sulje_ohjelma();
};
int main()
{
ohjelma aloita;
aloita.aloita_ohjelma();
return 0;
}
Tämähän ei ole olio-ohjelmointia vaan proseduraalista ohjelmointia ympättynä luokkan. Sen luokan voisi yhtä hyvin poistaa ja kirjoittaa kaikki puhtaasti proseduraalisena main funktioon.
"Ja kaikki Windowsit C :aa.."
Eiköhän ne winkuratkin C:llä ja osin C :lla kirjoitettuja.
"... rikkoo kapselointia ja tekee tekee projektista jotakin muuta kuin OO:ta."
Luepa mitä Stroustrup sanoo tuosta "kaikki pitää olla OO:ta":
http://www.artima.com/intv/goldilocks2.html
Ei kai tuollaisesta tonttuilusta voi syyttää C:tä vaan huonosti opetettua/ymmärrettyä C :aa.
http://www.erenkrantz.com/Humor/FakeIEEEStroustrupInterview.shtml
"Jos taas aloittaa funktionaallisella kielellä(kuten C) niin joutuu muuttamaan ajattelutapaa siirryttäessä olio-ohjelmoinnin pariin"
C ei ole funktionaalinen kieli. C on proseduraalinen kieli. Opi ero.
Tosiaan kyllä jos funkkiskielestä siirtyy oliomaailmaan, niin ajattelua joutuu muuttamaan. Yleensä suuntaan: "miksi tämäkin on niin v*tun vaikeaa?"
Observer pattern my ass.