ubuntuusers.de

Bin auf der Suche nach einem guten "C"-Buch

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

RvD Team-Icon

Avatar von RvD

Anmeldungsdatum:
26. Mai 2006

Beiträge: 2870

burli schrieb:

Ein Vorteil fehlt noch. Es gibt C für praktisch jede Plattform, selbst für poplige kleine Mikrocontroller

Wer MCs noch in Assembler programmiert ist selbst schuld - SDCC ist schon praktisch.

Thundersystem

(Themenstarter)
Avatar von Thundersystem

Anmeldungsdatum:
26. Januar 2008

Beiträge: 7

Wohnort: http://localhost

So, also erst mal vielen Dank für die vielen Antworten von euch, und hhm, ich habe mir das mit C wirklich nochmal überlegt ich bekam halt von einem netten User von http://www.lima-city.de erst den Hinweis darauf das Perl eine recht gute "Einsteigersprache" ist, und begann deshalb Perl zu lernen. Nach dem einen Jahr Perl wollte ich aber halt mal was neues sehen, da ich denke ich Perl schon recht fit zu sein, jetzt meinte er das da C warscheinlich die beste Sprache wäre die man als nächstes lernen könnte.

Das ist aber nur die Meinung einer Person also deshalb hab ich mir mal Java angesehn und das sieht auch schon recht hübsch aus, und ist ja sozusagen auch Plattformunabhängig (naja man muss halt nur irgendwie die Java Runtime auf dem jeweiligen System installiert bekommen). Und ein tolles Buch (In das ich mich heute morgen schon mal eine Stunde eingelesen habe) hab ich auch schon gefunden: http://openbook.galileocomputing.de/javainsel8/

Bzw. hat schon jemand Erfahrungen mit Java? Also sollte ja unter Linux recht gut laufen, weil ich meine die Java Runtime hab ich ja installiert, nur ich glaube mich zu erinnern irgendwo gelesen zu haben das ich fürs "kompilieren" (nennt man bei Java anders, ich weis nicht hat Java nicht nen Interpreter, naja wurscht ihr wisst was ich meine) unter Java noch n weiteres Packet bzw unter Vista n weiteres Programm brauche.

Weil ich meine das ist schon ne recht wichtige Entscheidung, mit Perl hab ich mich jetzt 1-2 Tage beschäftigt das war nichts dabei aber wenn ich ne Sprache wirklich lerne will ich danach auch was mit anfangen können und ich denke Java ist da ganz schön, vorallem sollte, wenn ich danach C lernen will der Umstieg nicht so schwer sein das die Syntax sehr ähnlich aussieht wie bei C, oder ist das nur der erste Eindruck?

Habt evtl noch alternativen zu Java, also wenn man von Perl kommt natürlich, also ich möchte jetzt definitiv bei imperativen Sprachen bleiben und nicht irgendeine funktionale wie Haskell o.Ä.

Und das mit den Mircocontrollern ich habe eigentlich nicht vor nen Prozessor mit nem C Compiler zu flashen also meine Programme bleiben auf dem PC oder Laptop sag ich jetzt mal.

Danke im Voraus

Greetz Andreas 😉

peter02

Avatar von peter02

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 115

Naja das Java-Openbook ist weniger für Einsteiger da wirste glaube ich scheitern. Bin da auch gescheitert. Die Grundlagen sind da nicht so gut erklärt, es ist mehr eine Referenz wenn man seine Kenntnisse verbessern will.

Wie gesagt bei C kann ich das Buch empfehlen: http://de.wikibooks.org/wiki/C-Programmierung

MfG

RvD Team-Icon

Avatar von RvD

Anmeldungsdatum:
26. Mai 2006

Beiträge: 2870

Thundersystem schrieb:

[...] Perl eine recht gute "Einsteigersprache" [...]

...
Das war fies.

Python oder C# sind da eher eine gute Allroundlösung.

burli

Avatar von burli

Anmeldungsdatum:
27. April 2007

Beiträge: 9066

Wohnort: Petersberg

Rotbart van Dainig schrieb:

Thundersystem schrieb:

[...] Perl eine recht gute "Einsteigersprache" [...]

...
Das war fies.

Ich wollt nix sagen 😀. Wer Perl als Einsteigersprache verkauft der verkauft auch Kühltruhen in Sibiriern 😀

Thundersystem

(Themenstarter)
Avatar von Thundersystem

Anmeldungsdatum:
26. Januar 2008

Beiträge: 7

Wohnort: http://localhost

Oh achso, ja ich wusste da ja auch nicht, hatte da auch keinen Plan welche Sprachen es alles gibt, aber ich denke mal das ich nun doch eher Java lernen werden, zumindest sollte die Sprache halt objektorientiert sein und relativ Plattforumunabhängig sein, was ich bei Java gegeben habe und bei C-Sharp eben leider nicht.

Und Python, kA ist doch glaube ich fast identisch zu Perl, oder?

Zudem fand ich jetzt Perl eigentlich nicht schlecht als Einsteigersprache, also schwer ist was anders, man muss halt seinen Code "sauber" halten 😉

Und joar, kA was gibt es denn noch was einfach ist, plattformunabhängig und objektorientiert?

Greetz Andreas 😉

burli

Avatar von burli

Anmeldungsdatum:
27. April 2007

Beiträge: 9066

Wohnort: Petersberg

Thundersystem schrieb:

Und Python, kA ist doch glaube ich fast identisch zu Perl, oder?

Doch, ist schon was anderes.

... man muss halt seinen Code "sauber" halten 😉

Muss man überall

Und joar, kA was gibt es denn noch was einfach ist, plattformunabhängig und objektorientiert?

Python, C++ 😉

Red_Radish

Anmeldungsdatum:
7. September 2007

Beiträge: 770

burli schrieb:

Und joar, kA was gibt es denn noch was einfach ist, plattformunabhängig und objektorientiert?

Python, C++ 😉

Einfach ist C++ ganz sicher nicht; es ist für Anfänger viel zu umfangreich; und objekt-orientiert ist es auch nur zu einem gewissen Grade.

Man kann C++ als eine Sammlung verschiedener Programmiersprachen betrachten ( C, objektorientiertes C++, template basiertes C++, gar Template- Metaprogrammierung , funktionale Ansätze,... ) und dann gibt es natürlich noch die SLT, Boost, und und und.

Und lustiger Weise gelten auf jeder Sprachebene verschiedene "best practices". Was in einem Kontext verpönt ist, ist auf der anderen Ebene guter Stil ( was in der Praxis häufig zu einem heillosen Chaos führt, wenn jemand an Code-Stellen rumpfuscht bei der Ansätze zur Programmierung verwendet werden, die er normalerweise nicht benutzt )

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Red Radish schrieb:

Und lustiger Weise gelten auf jeder Sprachebene verschiedene "best practices".

Nenn dafür mal ein Beispiel. Es gibt natürlich verschiedene Projekte, die verschiedene Coding-Styles vorschreiben, aber das gibt es bei anderen Sprachen auch.

burli

Avatar von burli

Anmeldungsdatum:
27. April 2007

Beiträge: 9066

Wohnort: Petersberg

Red Radish schrieb:

Man kann C++ als eine Sammlung verschiedener Programmiersprachen betrachten ( C, objektorientiertes C++, template basiertes C++, gar Template- Metaprogrammierung , funktionale Ansätze,... )

Und was ist der übliche "Standard"? Ich denke mal, für C und funktionale Ansätze brauch ich doch kein C++. Und so weit ich das bisher verstanden habe schließen sich OOP und Templates nicht gegenseitig aus. Wenn ich mir zb Qt anschauen wird da munter von beidem Gebrauch gemacht

mat69

Anmeldungsdatum:
27. November 2005

Beiträge: 530

Man sollte vorsichtig sein "C" als Teil von "C++" zu betrachten, da muss man schon präzieser sein. Z.B. C++0x [1] wird nicht alle Features von C99 beinhalten.

[1] mal schauen ob es doch C++1x wird 😀 und mal schauen wie lange es bis zu einem gescheiten Support dauert, hoffentlich kürzer als bei C99

Sarastro

Anmeldungsdatum:
5. Mai 2007

Beiträge: 279

RonnyF schrieb:

http://openbook.galileocomputing.de/c_von_a_bis_z/c_001_003.htm#RxxobKap001003040025241F03818C Hier ist mal genau aufgezeigt, was die Vorteile und die Nachteile von C sind.

Also ich finde, dass die Auflistung ein Witz ist:

Wer unter Linux/UNIX programmieren will oder muss, kommt ohnehin nicht um C herum.

Das ist jawohl völliger Blödsinn, solage ich keine Treiber Programmieren will, brauche ich auch kein C.

C bietet die Konstrukte höherer Programmiersprachen. Beherrschen Sie C, dann ist es nicht mehr schwer, andere Programmiersprachen wie z.B. C++ oder Java zu erlernen.

Auch ein ziemlicher Quatsch in meinen Augen. Erst C zu lernen, kann höchstens dazu führen, dass man später nicht richtig objektorientiert programmiert.

Hardwarenahe Programmierung wird zumeist in C ausgeführt.

Zweifellos richtig, ich vermute aber, dass das die wenigsten Einsteiger hardwarenah programmieren.

Einfache Portierbarkeit der Programme auf andere Systeme.

Da gibt es eine Reihe Sprachen, die wesentlich einfacher zu portieren sind.

C++ ist die Erweiterung zu C. Somit kann fast alles hier Gelernte später in C++ wiederverwendet werden.

Kann schon sein.

In C lassen sich Programme schreiben, die schnell in der Ausführung sind und wenig Ressourcen benötigen.

In Zeiten der Quadcores finde ich interresanter, dass mal leicht Multithreaded programmieren kann. (kann sein, dass es da super Libs für C gibt, ich vermute aber, dass es mit C# oder Java leichter geht.)

Kleinster Sprachumfang, der kleinste bekannte C-Compiler besteht aus 3742 Bytes C-Code und kann sich selbst kompilieren.

Hui, nur 3742 Bytes, na wenn das kein toller Vorteil ist.

Präprozessor zur Spracherweiterung und bedingten Übersetzung.

Wozu ist so ein Präprozessor gut? (Die Frage ist erst gemeint.)

Inwiefern seht ihr (insbesondere Red Radish) C als überholt an?

• C ist nicht objektorinetiert
• C hat keine automatische Speicherverwaltung
• C bietet die Möglichkeit einen haufen Blödsinn zu machen (für viele ist das der größte Vorteil)
• C hat wenig/keinen sytaktischen Zucker
• Andere Sprchen haben haben nette Frameworks drumherum
Die Entscheidung Java zu lernen ist auf jeden Fall gut, mit Java kann man nichts falsch machen. Lass dich auf keinen Fall von Geschwätz beeinflussen wie: „Echte Männer Programmiern in C(++)“ oder „Java-Programmierer sind keine richtigen Programmierer“ liest man man auf Heise oder Golem leider häufig, habe ich im Studium oder bei der Arbeit noch nie gehört.

burli

Avatar von burli

Anmeldungsdatum:
27. April 2007

Beiträge: 9066

Wohnort: Petersberg

Sarastro schrieb:

• C ist nicht objektorinetiert

Und? Das hindert Linux (und viele andere Programme) nicht daran, zu funktionieren.

• C hat keine automatische Speicherverwaltung
• C bietet die Möglichkeit einen haufen Blödsinn zu machen

Und? Muss man halt mal nachdenken beim Programmieren.

• C hat wenig/keinen sytaktischen Zucker

Zucker macht dick (auch Software)

• Andere Sprchen haben haben nette Frameworks drumherum
Die Entscheidung Java zu lernen ist auf jeden Fall gut, mit Java kann man nichts falsch machen. Lass dich auf keinen Fall von Geschwätz beeinflussen wie: „Echte Männer Programmiern in C(++)“ oder „Java-Programmierer sind keine richtigen Programmierer“ liest man man auf Heise oder Golem leider häufig, habe ich im Studium oder bei der Arbeit noch nie gehört.

Die Entscheidung, Java zu lernen, bedeutet gleichzeitig, neue Rechner zu kaufen. Was in C noch auf einem langsameren Single Core Prozessor mit wenig Speicher lief benötigt mit Java mindestens mal das doppelte an Ressourcen. Es kann doch nicht sein das ein popliges "Hello World" mit GUI schon 40MB braucht.

Ich habe auf meiner Werkbank noch einen getagten Pentium3 mit 1GHz und 256MB. Da programmiere ich Mikrocontroller mit Hilfe eines Konsolenprogramms. Eines Tages wollte ich mir das Leben erleichten und habe mir einen in Java geschriebenen Frontend für das Konsolenprogramm besorgt. Ein billiges Programm mit einer Handvoll Buttons. Das hat geschlagene 2 Minuten gedauert, bis das überhaupt geladen war. 👿

Und von Monstern wie Eclipse rede ich gar nicht erst. Auf Rechnern mit weniger als 1GB sollte man das besser nichtmal runterladen.

Noch schlimmer wird's, wenn bunt gemischte Programme mit unterschiedlichen VM's benötigt werden. Hier ein Python für Gajim, hier Mono für Tomboy, ein bissel Java...

Ja, Speicher ist billig, aber ich will nicht jedes Jahr Speicher aufrüsten nur weil ein paar faule Prgrammierer nur noch mit VM's rumtanzen können (die btw meistens selbst in C/C++ programmiert sind.)

Ich für meinen Teil lerne gerade C++ und arbeite mich in Qt4 ein weil ich eingesehen hab, das VM's nur Bremsklötze und Speicherfresser sind, auch wenn ich absoluter Fan von Python bin

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

burli schrieb:

Und? Das hindert Linux (und viele andere Programme) nicht daran, zu funktionieren.

Ein gut erweiterbares Programm ist schon fast zwangsläufig objektorientiert geschrieben, und so ist das auch beim Linux-Kernel. Nur ist es in C umständlich und hässlich. Da wird aus einem foo->bar() ein foo->vtbl.bar(foo), ohne dass das irgendeinen Vorteil brächte.

• C hat keine automatische Speicherverwaltung
• C bietet die Möglichkeit einen haufen Blödsinn zu machen

Und? Muss man halt mal nachdenken beim Programmieren.

Die fehlende Speicherverwaltung führt zu Bugs und geringerer Produktivität. Nicht selten läuft ein Programm mit GC schneller, da GC oft durch Reference Counting ersetzt werden muss, was langsamer ist. Ein weiteres Problem, dass aber meist nur sehr lange laufende Applikationen betrifft, ist Heap-Fragmentierung.

Zucker macht dick (auch Software)

Quatsch. C++ hat sehr viele Features, die nur syntaktischer Zucker sind (z. B. Templates, Operatorüberladung und Destruktoren (die letztlich nur syntaktischer Zucker für einen Funktionsaufruf am Ende des Blocks sind)). Ineffizienter werden die Programme davon aber nicht, wie in zahlreichen Benchmarks immer wieder bewiesen wurde. Wenn man solche Behauptungen aufstellt, dann sollte man sie auch belegen!

Die Entscheidung, Java zu lernen, bedeutet gleichzeitig, neue Rechner zu kaufen. Was in C noch auf einem langsameren Single Core Prozessor mit wenig Speicher lief benötigt mit Java mindestens mal das doppelte an Ressourcen.

Die Performance eines Programms hängt in erster Linie davon ab, ob es gut programmiert ist. Ein schlechter Algorithmus wird auch in C nicht schneller. Fakt ist, dass die Performance von Java meist völlig ausreicht und Java darüber hinaus viele weitere Vorteile bietet (z. B. keine Speicherfehler und eine vernünftige Standardbibliothek).

Es kann doch nicht sein das ein popliges "Hello World" mit GUI schon 40MB braucht.

40 MB was? Du musst schon etwas genauer argumentieren.

Ich habe auf meiner Werkbank noch einen getagten Pentium3 mit 1GHz und 256MB. Da programmiere ich Mikrocontroller mit Hilfe eines Konsolenprogramms. Eines Tages wollte ich mir das Leben erleichten und habe mir einen in Java geschriebenen Frontend für das Konsolenprogramm besorgt. Ein billiges Programm mit einer Handvoll Buttons. Das hat geschlagene 2 Minuten gedauert, bis das überhaupt geladen war. 👿

Und was soll das jetzt beweisen? Dass es beschissene Java-Programme gibt? Das wusste ich auch vorher schon. Über Java als Programmiersprache sagt das aber nichts.

Und von Monstern wie Eclipse rede ich gar nicht erst. Auf Rechnern mit weniger als 1GB sollte man das besser nichtmal runterladen.

In Zeiten, wo ein GB Speicher ca. 10 € kostet ist das erträglich.

Ja, Speicher ist billig, aber ich will nicht jedes Jahr Speicher aufrüsten nur weil ein paar faule Prgrammierer nur noch mit VM's rumtanzen können (die btw meistens selbst in C/C++ programmiert sind.)

Und ich habe langsam die Nase voll von lauter Bugs und Sicherheitslücken, sie entstehen, weil irgendein C-Programmierer seine Pointer nicht im Griff hatte.

Ich für meinen Teil lerne gerade C++ und arbeite mich in Qt4 ein weil ich eingesehen hab, das VM's nur Bremsklötze und Speicherfresser sind, auch wenn ich absoluter Fan von Python bin

Das ist großer Unsinn. Eine VM ist alles andere als ein Bremsklotz sondern erlaubt z. B. Optimierungen zur Laufzeit und kompaktierende Garbage Collectors, was z. B. zu extrem schneller Speicherallokation führt. Dass Java-Programme in der Regel dennoch langsamer laufen ist eher dem Sprachdesign als der VM zu verdanken.

gotoubuntu

Anmeldungsdatum:
20. Dezember 2008

Beiträge: 73

burli schrieb:

Ja, Speicher ist billig, aber ich will nicht jedes Jahr Speicher aufrüsten nur weil ein paar faule Prgrammierer nur noch mit VM's rumtanzen können (die btw meistens selbst in C/C++ programmiert sind.)

In was sollen sie denn dann Programmier sein?
Java? ☺
Im Jahre 2008 damit zu Argumentieren das ein acht Jahre alter Rechner zu schwach für Eclipse ist, ist einfach lächerlich.
Ich könnte nun auch den Pentium 60 vom Dachboden holen und mich beschweren das Interpid Ibex darauf nicht mehr läuft.