Frage von lleGarM, 110

Ich möchte / habe schon ein bisschen mit Programmieren angefangen. Die Frage ist: soll ich direkt mit Java anfangen oder ehr mit C und?

Ich habe gehört, man wird, falls man in Informatik später einen Abschluss haben möchte, Java programmiert. Aber ich habe jetzt schon mit C angefangen. Sollte ich C weiter machen oder direkt mit Java beginnen.

Stimmt es, dass man mit Java objektive Sachen programmieren kann und mit C nur Console Applications? Also mit C kann man nur sehr, sehr, sehr einfache Spiele, wobei man Zahlen oder Texte eingeben muss, programmieren und bei Java kann man ganze 2D spiele programmieren.

Was macht ihr? C oder Java?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von DataIsBeautiful, 56

Hallo IleGarM,

Programmieranfängern empfiehlt man normalerweise Java - es ist wegen seiner Objektorientierung näher an der Realität als z.B. C - und daher einfacher nachzuvollziehen & zu verstehen.

C ist eine relativ schwierige Sprache, weil du auch schon viele kleinere Sachen selber programmieren musst, da es eine sehr tiefgreifende Sprache ist.

Natürlich kannst du auch mit C anfangen, aber das wird für dich wahrscheinlich noch ein Ticken schwieriger als sonst schon - denn selbst für Leute mit Programmiererfahrung kann es einen echt in Verzweiflung treiben.

Grüße,
DataIsBeautiful

Kommentar von Machtnix53 ,

Java - es ist wegen seiner Objektorientierung näher an der Realität als z.B. C - und daher einfacher nachzuvollziehen & zu verstehen.

Kommt darauf an welche Realität. An der Realität des Ablaufs im Prozessors  ist C wesentlich näher dran.

Kommentar von NoHumanBeing ,

Ja. Ich würde eher sagen, Java ist stärker abstrahiert und somit "weiter weg von der Realität". ;-)

Was in dem Fall aber nicht unbedingt ein Nachteil ist. Gerade als Einsteiger möchte man sich in der Regel nicht mit den Details der Maschine und des Betriebssystems auseinandersetzen, weil man ja schon genug damit zu tun hat, die Sprache (und das Programmieren an sich, also die Denkstrukturen) zu erlernen. Ich würde daher für den Anfang eine "höchere Programmiersprache", als C, empfehlen.

Sie muss nicht unbedingt objektorientiert sein. Go beispielsweise ist prozedural und trotzdem noch relativ abstrakt. Zwar nicht so abstrakt, wie Java, aber doch sehr viel abstrakter, als C.

Kommentar von DataIsBeautiful ,

Ja, tut mir Leid, ich hätte mich besser ausdrücken sollen.

Ich meinte, dass die Denkweise näher an unserem Alltag angelehnt ist - selbstverständlich ist C näher am Ablauf eines Prozessors dran. Ich meinte lediglich, dass die Objektorientierung von Java sich besser verstehen lässt, da es aus dem Alltag bereits bekannt ist.

Antwort
von NoHumanBeing, 12

Mit C kann man so ziemlich "alles machen", weil man ziemlich direkt für die Maschine und das Betriebssystem programmiert. Über OpenGL beispielsweise kannst Du auch 3D-Grafiken erstellen. Nur ist das eben nicht unbedingt "einfach". ;-)

Das ist auch gleich der größte Nachteil der Sprache. Man kann eben nur das machen, was die Maschine kann. Nicht einmal Zeichenketten (strings) unterstützt C "vernünftig". In der Sprache sind das nur "Arrays aus Bytes" und die Bytes repräsentieren eben Zeichen aus einem Zeichensatz (z. B. ASCII). Arrays "liefern ihre eigene Länge nicht mit", sondern man muss sie von Hand "herumschleppen" und selbst sorgfältig überprüfen. Selbst Profis machen hier Fehler, woraus dann Sicherheitslücken in Form von Pufferüberläufen ("buffer overflows"), etc. entstehen. Weil Du direkt gegen die System-API programmierst, sind die Programme auch nicht portabel. Zudem musst Du in C Deinen Speicher selbst verwalten, was auch ein sehr "fehleranfäliger" Prozess ist.

Beispiel: Sockets (Netzwerkprogrammierung)! Under Windows brauchst Du die "Winsock"-API, unter Unix die "normale" Socket-API. Die beiden sind zwar sehr ähnlich (weil Microsoft bei Unix "geklaut" hat ;-) ), aber nicht identisch. Wenn es um Multithreading geht, wird es total verrückt. Unter Unix gibt es hier die P-Threads (POSIX Threads). Was es unter Windows gibt ... weiß ich ehrlich gesagt überhaupt nicht, weil ich noch nie in Verlegenheit gekommen bin, mit einer so systemnahen Sprache, wie C, eine "multithreaded" Anwendung für Windows zu entwickeln.

Dabei geht es nicht nur darum, wie Du die Threads erstellst, sondern um die gesamte Handhabung. "High-level"-Sprachen (z. B. Python, Go, etc.) erlauben Dir "sichere" Konzepte, wie "synchronized queues", um zwischen den Threads zu kommunizieren. In C hast Du ein paar "low-level Primitive", wie Mutexe und "shared memory" und darfst Dir dann selbst etwas "stricken". In Python hast Du umfangreiche Numerikbibliotheken für Vektor- und Matrixarithmetik, Fouriertransformation, etc. In C darfst Du mit ner Schleife über die einzelnen Komponenten "rödeln" (iterieren) und die Verknüpfung komponentenweise machen. Je komplexer Deine Probleme werden, desto krasser wird der Unterschied.

Ich sage nicht, dass C eine "schlechte Sprache" ist. Für performancekritische oder systemnahe Anwendungen ist es häufig die einzige Möglichkeit. Aber als "Anfänger", oder wenn man schnelle Fortschritte machen möchte, ist sie meines Erachtens ungeeignet. Wenn Du ein sehr spezielles Problem hast, von dem Du weißt, dass Du es in C gut lösen kannst (oder es sogar nur in C lösen kannst), dann kannst/solltest Du C verwenden.

Kommentar von NoHumanBeing ,

Ich möchte noch anfügen, dass, wenn Du wirklich programmieren kannst, es Dir sehr leicht fallen wird, eine neue Sprache zu erlernen.

So habe ich mich beispielsweise innerhalb von 2 bis 3 Wochen in C++ eingearbeitet, als ich das musste (was nicht heißt, dass ich dann "alles darüber wusste", aber ich konnte zumindest sauberen und funktionierenden Code darin schreiben), beherrschte allerdings auch bereits C, Java und C-Sharp, die konzeptionell und auch syntaktisch sehr ähnlich sind.

Antwort
von grtgrt, 51

Bitte lies https://www.gutefrage.net/frage/ich-moechte-apps-programieren-muss-ich-dafuer-di... ,

und lies dann auch https://www.gutefrage.net/frage/was-kann-man-alles-mit-java--c-programmieren#ans... .

Graphische Benutzer-Schnittstellen (sog. GUIs) programmiert man heute nicht mehr wie früher in C, C++ oder Java -- heute realisiert man sie per CSS, HTML, JavaScript.

Wie man dem aktuellen TIOBE-Index entnehmen kann ( http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html ),  sind die beiden heute wichtigsten Programmiersprachen Java und C.

Man sollte wirklich beide beherrschen, da jede von ihnen für jeweils andere Programmieraufgaben die deutlich bessere Wahl sein wird.

Kommentar von TeeTier ,

Also gerade den TIOBE-Index hätte ich nicht gerade als zuverlässige Quelle herangezogen. :)

Ich erinnere mich noch daran, als ganze drei (!) Monate VOR der ersten Developer-Preview von Apples Swift, C++ UND C# ZUSAMMEN weniger Punkte hatten, als Swift - was es zu diesem Zeitpunkt noch nicht gab ... noch nicht einmal die fertige Spezifikation.

Den TIOBE-Index hatte ich vorher zwar schon argwöhnisch betrachtet, aber nach diesem Hammer kann man den eigentlich nur noch unter Ulk verbuchen, vor allem wenn man sich mal anschaut, WIE die genannten Statistiken zustande kommen. :)

Der Rest, inkl. der anderen Links, ist wie immer sehr gut, wobei hier natürlich auch viel Ansichtssache ist. Nichtsdestotrotz sehr gute Antwort! :)

Kommentar von NoHumanBeing ,

Graphische Benutzer-Schnittstellen (sog. GUIs) programmiert man heute nicht mehr wie früher in C, C++ oder Java -- heute realisiert man sie per CSS, HTML, JavaScript.

Autsch! Das tut ja richtig weh!

Auch heute ist nicht jede Anwendung eine Webanwendung!

Ich gebe allerdings zu, dass ich auch gerne Anwendungen mit Webinterfaces versehe, allerdings hauptsächlich, weil es mir in der Regel wesentlich schneller von der Hand geht, als z. B. etwas mit Qt oder GTK zu bauen.

Antwort
von Machtnix53, 25

Es stimmt nicht. Mit C kann man alles machen und vieles, was mit Java nicht geht, zB Systemprogrammierung.  Aber man muss es verstehen und es ist nichts für Ungeduldige.

Java ist wie ein LEGO-Baukasten. Es gibt eine Unmenge von fertigen Bausteinen (Klassenbibliothek), die man zusammenstecken kann, auch ohne sie zu verstehen.

C dagegen ist ein Werkzeugkasten. Mit etwas Geschick kann man alles damit machen,es gibt keine Grenzen. Den Umgang damit muss man allerdings lernen. Und man muss wissen, was man tut. Man kann damit auch den größten Unsinn machen, was beim LEGO-Baukasten nicht so einfach ist.

Kommentar von NoHumanBeing ,

Java ist wie ein LEGO-Baukasten. Es gibt eine Unmenge von fertigen Bausteinen (Klassenbibliothek), die man zusammenstecken kann, auch ohne sie zu verstehen.

Nunja. Ganz so "plug and play" und "ohne Verständnis" geht es auch mit Java nicht. ;-)

Antwort
von SirPigelton, 58
Stimmt es, dass man mit Java objektive Sachen programmieren kann und mit C nur Console Applications?

In C kann man genauso gut objektorientiert programmieren, wenn man weiß wie.. Außerdem kann man in C auch Gui Applikationen schreiben..

Also mit C kann man nur sehr, sehr, sehr einfache Spiele, wobei man Zahlen oder Texte eingeben muss, programmieren und bei Java kann man ganze 2D spiele programmieren.

Nein, du kannst in C genau den gleichen Kram implementieren wie in Java.

Es spricht allgemein nichts dagegen das du nun einfach mit C weitermachst.

Alternativ kannst du dir ja einfach mal die Syntax, sowie einige Beispiele zu Java anschauen und dann entscheiden, was du zuerst lernen möchtest. In der Regel lernst du fürher oder später sowieso beide Sprachen.

Antwort
von Tschoo, 36

Hallo!

Dass ist gelinde gesagt sch*egal. Wenn du vorhast in der IT-Branche was zu tun wirst du weder an C/C++ noch an Java vorbeikommen (aus heutiger Sicht), als ich Informatik studiert habe, habe ich mit FORTRAN IV angefangen, im Studium, kam unter anderem C (C++) gabs nicht und von JAVA hat man gerüchterweise gehört. (andere Sprachen waren u. a. noch Assembler, COBOL, LISP ...und einige SPS-Sprachen).

Also lerne eine Sprache richtig, dann hast du mit den anderen keine Schwierigkeiten. Aber nehme doch lieber was objektorientiertes, wenn du mit C angefangen hast, mach mit C++ weiter.

Gruß

Keine passende Antwort gefunden?

Fragen Sie die Community