Törmäsin erästä C-ohjelmointi -kirjaa lukiessani seuraavanlaiseen koodiin (josta on jo näköjään keskusteltu täällä aiemmin), jota en saa toimimaan (kuten ei saanut edellinenkään aiheesta kirjoittanut):
#include <stdio.h> main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); }
En etsi tähän ongelmaan ratkaisua, koska löysin sen jo aiemmasta keskustelusta, mutta asiani on lähinnä, että tämä koodinpätkä ja kirjan kirjoittaja oli haukuttu pystyyn, mutta sen pitäisi olla C-kielen luojien Dennis Ritchien ja Brian W. Kernighanin kirjoittama, joten mikähän kirja tässä oikein pitäisi hommata että oppii tätä kieltä kun nämäkään eivät osaa asiaansa?
C-ohjelmoinnin perusteiden oppimiseen et kirjaa tarvitse. Verkosta löytyy paljon materiaalia ja esimerkkejä, joista ammentaa tietoa.
Itse en ole yhtäkään hyvää täysin aloittelijalle suunnattua ohjelmointiaiheista kirjaa vielä tavannut.
Ainoa C-aiheinen kirja omassa kirjahyllyssäni ja mitä voin suositella on: Advanced Programming in UNIX Environment
Paras lukemani ohjelmointiaiheinen kirja on mielestäni edelleen nykypäivän koneille opeiltaan jo täysin vanhentunut: Michael Abrash:in Zen of Assembly Language. Kirjan parasta antia ei ole niinkään assembly ohjelmoinnin opettaminen vaan se, että se opettaa ajattelemaan kuin ohjelmoija. Bonuksena 850-sivuinen kirja myös näyttää helskutin hyvältä kirjahyllyssä...
Keskustelun lähtökohta on virheellinen, koska tuo koodi oli K&R:n aikaan aivan hyvä ja toimii nytkin ongelmitta uusimmilla GCC- ja Clang-kääntäjillä, vaikka nykyään main-sanan edestä puuttuvasta int-sanasta tulee varoitus kuten puuttuvasta return-lauseestakin tietyillä standardivalitsimilla. Myös löytämässäni aiemmassa keskustelussa koodi toimi oikein mutta käyttäjä ei osannut lopettaa ohjelmaa. Tähän ei auta kirjan vaihto – paitsi siinä mielessä, että yhdessä kirjassa ehkä selitetään myös sellaisia asioita, joita toisessa pidetään selviöinä.
Jos kirjassa on vikaa, yleensä syynä on vanhentunut tieto, kuten tässä tapauksessa, tai huono kirjoittaja ja väärä tieto, kuten ikävän monissa muissa kirjoissa. Useilla käytännön ohjelmoinnin alueilla kaikki yli 10 vuotta vanha on historiaa ja yli 5 vuotta vanha vanhentunutta, ja (kyyninen arvaus) varmaan 90 % erilaisista ammattikoodareistakin on ihan pihalla ja tumpeloita, onneksi opettajista ja kirjoittajista vähän harvempi. Jos pitää valita vanhentunut tai huono, usein kannattaa valita vanhentunut; yksityiskohdat on helppo päivittää netistä, kun taas huonoja tapoja voi olla vaikea korjata.
C-kieli on sentään sen verran hitaasti kehittyvä, että 1990-luvulla tehty laadukas teos voi vielä olla monessa suhteessa kelvollinen, mutta kyllä vähintään 2000-luvulle pitäisi silti pyrkiä. En suosittele mitään tiettyä lähdettä, ja itse en varmasti hankkisi kirjaa ollenkaan vaan lukisin netistä. Tarkemmin tutkimatta veikkaan, että Wikibooksin C-kirja on jokseenkin ajantasainen ja kattava. Suomeksi pääset nopeasti alkuun esimerkiksi Ohjelmointiputkan C-oppaalla, ja lisäksi voi olla hyödyllistä lukea C++-opasta. Jos et erityisesti tarvitse juuri C-kieltä, kannattaa harkita myös suoraan C++:aa tai jotain aivan muuta.
Puheenaoleva kirja on siis ilmeisesti Kerninghanin ja Ritchien "The C Programming Language", jonka uusin versio on ilmestyny 1.4.1988, siis ennen ku useimmat teistä on syntynykkään.
Vaikka sinänsä autoritatiivinen teos onkin, uudemmat opukset varmaan tietäis kertoa, että nykyään suositaan vähän erinäkösiä tapoja.
Itse asiassa katsottuani asiaa tarkemmin tuo kirja tosiaan on vuodelta 1988... Pikaisella ensisilmäyksellä huomasin aluksi vain vuosiluvun 2004. Eli minun mokani...
Itselläni vain on sellainen homma, että jostakin syystä tykkään lukea asioita kirjoista mieluummin kuin koneelta, vaikka samaa tekstiähän ne tietysti ovat mutta eri muodossa.
Ja aloittelijahan todellakin olen näissä hommissa, mutta sain nyt vain jostain päähäni että jos opettelee C-kielen perusteellisesti niin pystyy helpommin käyttämään muitakin kieliä koska ne perustuvat tähän?
JPR kirjoitti:
Ja aloittelijahan todellakin olen näissä hommissa, mutta sain nyt vain jostain päähäni että jos opettelee C-kielen perusteellisesti niin pystyy helpommin käyttämään muitakin kieliä koska ne perustuvat tähän?
On totta, että muiden kielten opettelu on helpompaa, kun osaa yhden kielen. Ei kuitenkaan ole mitään syytä, miksi sen kielen pitäisi olla juuri C. Oikeastaan C on niin kaukana monista uudemmista kielistä, että eräiden C:ssä käytettävien tapojen opettelu on turhaa tai jopa haitallista muiden kielten kannalta. Lisäksi C:stä puuttuu ominaisuuksia, jotka ovat tärkeässä asemassa monissa uudemmissa kielissä.
Kielitaito on myös yleissivistystä, ja C:n alkeet voi joka tapauksessa opetella. Kovin syvällinen perehtyminen C:hen ja sen standardikirjastoon ei luultavasti kannata, koska useimpiin tarkoituksiin on nykyään käytännöllisempiä ja vähemmän virhealttiita kieliä. Seuraava kieli kannattaakin valita sen mukaan, mitä aikoo tehdä.
Ok.... Kiitokset kaikille näistä vastauksista! Jatketaan harjoituksia!
Aihe on jo aika vanha, joten et voi enää vastata siihen.