Java oder C/C++

Post Reply
Message
Author
Andy E

Java oder C/C++

#1 Post by Andy E »

Hi,
ich möchte meine Programmierkenntnisse vertiefen. Da man meiner Meinung nach mit Turbo Pascal nicht mehr so viel anfangen kann, will ich was anderes lernen. Die engere Wahl fiel auf Java oder C/C++

Pro/Contra:

+Java habe ich ein Semester lang programmiert.
+Java ist plattformunabhängig (es gibt neben Linux auch noch andere Betriebssysteme <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle"> )
+Java hat wohl einige Verbesserungen gegenüber C (Zumindest wenn man den Java-Büchern glauben schenkt)
-Langsam
-Ich finde ausführbare Dateien besser (kein "java bla")

+C ist die "Hauptsprache" unter Linux
+schneller
-plattformabhängig (wobei ich glaube, dass ein unter Linux entwickeltet C-Programm auch auf Win portierbar ist.

Außerdem glaube ich, dass Java leichter zu lernen ist.

MfG
Andy

P.S. Wenn mir jemand ne andere Sprache empfehlen kann, interessiert es mich natürlich auch.

Leander Hanwald

Re: Java oder C/C++

#2 Post by Leander Hanwald »

>ich möchte meine Programmierkenntnisse vertiefen. Da man meiner Meinung nach mit Turbo Pascal nicht mehr so viel anfangen kann, will ich was anderes lernen. Die engere Wahl fiel auf Java oder C/C++<

Also ich persönlich favorisiere alles was Object Pascal ist, sprich FreePascal und Kylix/Delphi.

>+Java habe ich ein Semester lang programmiert.<
Das ist aber nur ein anfängliches argument. Du wirst eh schnell an deine Wissensgrenze stossen.

>+Java ist plattformunabhängig (es gibt neben Linux auch noch andere Betriebssysteme )<
Ja, so ist es

>+Java hat wohl einige Verbesserungen gegenüber C (Zumindest wenn man den Java-Büchern glauben schenkt)<
Ansichtssache. Ich finde dort nichts was ich in OPascal vermisse ;)

>-Langsam<
Schweinelangsam. Vor allem wenn SWING benutzt wird. Wenn du viele GUI sachen machen willst lass die Finger von Java.

>-Ich finde ausführbare Dateien besser (kein "java bla")
Ja, womit sich ein weiterer Punkt hinzufügt:
- Eine große Extra Anwendung ist dafür nötig (Java Runtime Libary)


Du solltest zwischen C und C++ unterscheiden. Wenn du C kannst fehlt dich immernoch viel wissen damit du mit C++ richtig zurecht kommst, wenn du C++ kannst, wirst du aber auch C beherschen.

>+C ist die "Hauptsprache" unter Linux<
Ja

>+schneller<
Deutlich :)

>-plattformabhängig<
Ja und nein. C selber ist portabel, das ergebniss aber nicht. Nur durch nurkompilieren. Bei GUI Tools ist es nur schwer möglich.

>(wobei ich glaube, dass ein unter Linux entwickeltet C-Programm auch auf Win portierbar ist).<
Nur wenn sie entweder QT, GTK oder garkein GUI benutzen. Wobei QT nur mit VisualC unter Windows geht und GTK nur Beta dort ist.

>Außerdem glaube ich, dass Java leichter zu lernen ist.<
mhh, das nimmt sich nicht viel. Bei C lernst du dafür mehr über das System

>P.S. Wenn mir jemand ne andere Sprache empfehlen kann, interessiert es mich natürlich auch.<
FreePascal. Fast Identische Argumente, nur das es nicht die Hauptsprache ist, dafür hast du aber schon Pascal Erfahrungen. Diese lassen sich Problemlos weiter verwenden.

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Java oder C/C++

#3 Post by bakunin »

Hi!

Zunächst einmal ist zwischen C und C++ zu unterscheiden. Das sind definitiv zwei verschiedene Sprachen. In Büchern, die einem "C/C++" beibringen wollen wird man allenfalls lernen, in einem hässlichen Hybrid-Stil zu programmieren.

Nun einige Kommentare zu diversen Sprachen:

Java kann sehr wohl in nativen Code compiliert werden, die GNU Compiler Collectioon (GCC) 3.0 enthält einen Java-Compiler. Damit ist Java wohl _wirklich_ plattformunabhängig geworden, denn was nützt es einem, wenn eine Sprache nur theoretisch portabel ist, aber in der Praxis keine Implementierungen für unbekanntere Systeme existieren? Gegen Java spricht grundsätzlich nicht vieles. Geschwindigkeit würde ich nicht unbedingt als Kriterium ansehen, denn für die wenigsten Anwendungen ist wirklich eine enorme Performance notwendig. Und durch Einsatz schlechter Algorithmen wird auch ein C-Programm extrem langsam.

C ist die Unix-Standardsprache, weil sie sich gut als Systemsprache eignet, über die Verwendung in anderen Bereichen sagt das nichts aus. C zu lernen bedeutet, tatsächlich etwas über die Funktionsweise eines Computers zu lernen, mehr als in den meisten anderen Sprachen - Assembler und Forth ausgenommen. C ist für manche Dinge nicht besonders gut geeignet und ist vor allem etwas arg fehleranfällig. Aber alles in allem ist C doch ein praktisches Werkzeug, denn was man in C nicht machen kann, das muss man löten. Was ich an C mag ist, dass es eine sehr kleine Sprache ist.

C++ ist einer der beiden bekannteren Versuche, C um objektorientierte Sprachmittel zu erweitern. Man braucht zwar zur objektorientierten Programmierung keine Sprache, die diese unmittelbar unterstützt, doch es ist vieles damit deutlich einfacher. C++ hat also zunächst einige Vorteile gegenüber C. Auf der anderen Seite ist C++ eine unglaublich umfangreiche und komplexe Sprache und man steht vor der Wahl, ob man die neueren Möglichkeiten wie die STL nutzen will (womit man wirklich guten Code schreiben kann) oder ob man etwas portabler programmieren will und sich daher auf ältere Dinge beschränkt (was oft merkbar unbequemer ist).

Objective-C ist der andere bekannte Versuch, C um OO-Fähigkeiten zu erweitern. Der GCC unterstützt Objective-C. Im Gegensatz zu C++ wurde aber nicht C teilweise geändert, sondern lediglich erweitert. Ein C-Programm, das keines der zusätzlichen Schlüsselworte von Objective-C verwendet, ist also ein gültiges Objective-C Programm. Die Art, wie die Objektorientierung hier verwirklicht wurde erinnert an die etwas bizzarre Sprache Smalltalk oder auch an Object-Pascal. Nachteil ist lediglich, dass sie nicht oft verwendet wird, aber ein Compiler steht ja praktisch überall zur Verfügung. Es gibt auch noch keinen Standard für Objective-C, aber das trifft auf Java ja ebenso zu.

Nun möchte ich noch eine Sprache vorstellen, die mir persönlich sehr am Herzen liegt: Ruby. Um es gleich in einem Satz auf den Punkt zu bringen: "Ruby ist die einzige mir bekannte Programmiersprache, die wirklich das Prinzip der geringsten Überraschung befolgt". Nun aber etwas genauer: Ruby ist eine Sprache, die so konsequent objektorientiert ist wie Smalltalk, nicht so "halbherzig" wie Java oder Python. Allerdings wird eine konventionellere Syntax verwendet, der Code ist meines Erachtens so lesbar wie Pascal-Code, oft sogar viel besser (etwa durch den Einsatz von Iteratoren statt Schleifen). Es wird auf Dinge wie mechanisch einzutippende Kommata am Ende jeden Kommandos verzichtet und es gibt oft alternative Notationen und Bezeichner (Wenn "foo" ein String ist, funktionieren z.B. sowohl "foo.length" als auch "foo.size"). Durch diesen Verzicht auf unnötige Fehlerquellen erreicht man eine spührbar höhere Produktivität. Und die Performance? Ruby ist sehr langsam, aber das macht in dem Fall wirklich nichts, da es sehr leicht ist, einzelne Module in C zu schreiben und in Ruby-Programme einzubinden. Die Stellen, die also schnell sein müssen, schreibt man dann eben in C.

Wenn ich Ruby hier übermäßig lobe, dann liegt das nicht daran, dass ich die Schwächen absichtlich ignorieren würde. Es liegt vielmehr daran, dass Ruby wirklich eine fantastische Sprache ist. Ein komplettes Ruby-Buch gibt es unter http://www.pragmaticprogrammer.com/ruby/.

Es gibt unzählige weitere Sprachen, die ganz interessant sind. Wenn man einmal etwas andere Denkansätze kennenlernen will, dann sind sicherlich insbesondere Scheme (da empfehle ich die Implementierung KSM-Scheme, die auch einführende Dokumentation enthält) und Forth interessant. Wer sich amüsieren will, dem sei Brainf*ck empfohlen. :)

Cheers,
GNU/Wolfgang

marc
Posts: 444
Joined: 20. Apr 2001 23:31
Location: Arnsberg

Re: Java oder C/C++

#4 Post by marc »

@Andy
Hi. Stehe vor fast dem gleichen Problem wie Du. Ich wollte mich jetzt C++ zuwenden, aber wenn man noch nie was mit Objektorientierung zu tun gehabt hat, finde ich ist das ein ganz schöner Hammer. Ich hab hier von Thomas Wieland das Buch "C++ Entwicklung mit Linux" und da beiß ich mir langsam aber sicher die Zähne dran aus (zumindest krieg ichs nicht so schnell durch, wie ichs eigentlich wollte...).
Von daher werde ich jetzt erstmal mit C anfangen, da ich das mit der Objektorientierung sowieso noch später im Studium drankriege.
Wenn Du schon objektorientiert mit Java programmiert hast, dann sollte C++ eigentlich für Dich das kleinere Problem sein.

@Wolfgang
Ist Ruby nicht ne Skriptsprache oder vertu ich mich da jetzt?

Gruß
Marc

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Java oder C/C++

#5 Post by bakunin »

Hi, Marc!

Warum manche Leute Programmiersprachen in "Programmiersprachen" und "Scriptsprachen" unterteilen (und dann letzteres gar noch herabwertend behandeln), habe ich nie verstanden. Zunächst einmal ist das sowiso eine Eigenschaft, die nicht von einer Programmiersprache, sondern von der Implementierung abhängig ist (es gibt ja auch einen Perl-Compiler und einen C-Interpreter, und bei LISP sind sowohl Compiler als auch Interpreter weit verbreitet), zudem macht es doch letztlich keinen wesentlichen Unterschied, außer dass man sich bei "Scriptsprachen" das ständige Compilieren erspahrt und somit meist produktiver arbeiten kann. Ob ich nun einen Pascal-Compiler oder einen Basic-Interpreter brauche, bevor ich ein Programm als Anwender einsetzen kann, ist sowiso einerlei (außer dass ich den Pascal-Compiler nach dem Compilieren löschen kann, wobei ich das nicht unbedingt als signifikanten Vorteil sehe).

Cheers,
GNU/Wolfgang

marc
Posts: 444
Joined: 20. Apr 2001 23:31
Location: Arnsberg

Re: Java oder C/C++

#6 Post by marc »

Hi.
Ich wollte Ruby, bzw. Skriptsprachen allgemein, auf keinen Fall abwerten.
Meine Frage war auch etwas ungenau gestellt. Mir gings eigentlich eher um den Unterschied ob Ruby-Programme üblicherweise kompiliert oder interpretiert werden.

Gruß
Marc

Andy E

Re: Java oder C/C++

#7 Post by Andy E »

Hi,
danke für die Antworten. Jetzt bin ich ein wenig schlauer, weiss aber immer noch nicht, was ich machen soll. Wie wäre es mit folgendem:
Die Grundlagen von C zu lernen, damit ich die Linuxprogramme besser verstehe und auch ein wenig abändern kann und für meine eigenen Programme Java zu benutzten.

Wie ist denn das nun genau mit dem nativen Code bei Java ? Zu welcher Java version ist denn der GNU compiler kompatibel ? Oder braucht er ein installiertes Java ? Wäre nett, wenn mir das mal jemand erklären könnte, denn es ist scheisse wenn man immer einen Java - Interpreter braucht.

Andy

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Java oder C/C++

#8 Post by bakunin »

Hi Marc!

Ja, Ruby wird üblicherweise interpretiert und ist deswegen von der Geschwindigkeit etwa mit Perl vergleichbar.

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
toor@dose:~/ruby$ cat fibo.pl
#! /usr/bin/env perl

sub fibo {
my $num = pop @_;
if ($num < 2) {
return $num;
} else {
return fibo($num - 1) + fibo($num - 2);
}
}

foreach (0 .. 20) {
print fibo($_), "\<!--no-->n";
}

toor@dose:~/ruby$ time perl fibo.pl >/dev/null

real 0m1.536s
user 0m1.490s
sys 0m0.020s
toor@dose:~/ruby$ cat fibo.rb
#! /usr/bin/env ruby

def fibo(num)
if num < 2
return num
else
return fibo(num - 1) + fibo(num - 2)
end
end

(0 .. 20).each { |i| puts fibo(i) }

toor@dose:~/ruby$ time ruby fibo.rb >/dev/null

real 0m1.518s
user 0m1.240s
sys 0m0.030s
toor@dose:~/ruby$
</font><hr></pre></blockquote>

Cheers,
GNU/Wolfgang

marc
Posts: 444
Joined: 20. Apr 2001 23:31
Location: Arnsberg

Re: Java oder C/C++

#9 Post by marc »

Hi. Danke für den Vergleich, Wolfgang.
Was die Lesbarkeit von Ruby-Code angeht, hattest Du recht. Das ist wirklich um einiges übersichtlicher als andere Sprachen.
Und danke für die indirekte Info zu dem Befehl "time". Das wußte ich auch noch nicht, daß man damit die Laufzeit messen kann <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">


@Andy
> ... Die Grundlagen von C zu lernen, damit ich die Linuxprogramme besser verstehe und auch ein wenig abändern kann und für meine eigenen Programme Java zu benutzten.

Hört sich gut an. Aber je nachdem wie weit Du Dich den Grundlagen zuwendest, wäre es glaube ich effizienter bei C zu bleiben, es sei denn Du willst was objektorientiertes und plattformunabhängiges machen.

> Zu welcher Java version ist denn der GNU compiler kompatibel? Oder braucht er ein installiertes Java?

Mit der Kompatibilität wird es da wahrscheinlich keine Probleme geben. Eine Java-Umgebung muß vermutlich auch installiert sein, sonst dürfte es mit dem Ausführen der Programme Probleme geben..., aber so genau kenne ich mich da jetzt auch nicht aus.

Gruß
Marc

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Java oder C/C++

#10 Post by bakunin »

Hi!

Der GCC unterstützt neuere Java-Features oft noch nicht, aber für den Normalbedarf ist der GCC wohl auch jetzt schon ausreichend. Mit GCC in nativen Code compilierte Java-Programme werden gegen die libgcj gelinkt, die sogar schon einen Bytecode-Interpreter eingebaut hat, d.h. man kann dann zur Laufzeit nicht nur wie bei C-Programmen normale Shared-Libraries (via dlopen) laden, sondern auch Java-Bytecode-Dateien! Und wenn man ein Programm in Bytecode compiliert, dann kann man diesen auch mit irgendein einem Programm, dessen Name mir gerade entfallen ist, ausführen. Man braucht also nicht mehr als das, was zu GCC gehört.

Cheers,
GNU/Wolfgang

Andy E

Re: Java oder C/C++

#11 Post by Andy E »

Wie man aus Java Quellcode nativen Java-Code erzeugt weiss ich jetzt. Leider bin ich im Moment ein wenig skeptisch was Java angeht. Vor ein paar Tagen war doch auf PL ein Bereicht über Java mit entsprechenden Programmen. Irgendwie haben die mich nicht so begeistert. (Ich bin mir sicher, dass mit Java sehr viel möglich ist, nur machts keiner)

Ich glaube ich fange mal mit C an. Kann mir jemand ein gutes Anfängerbuch empfehlen ?

Andy

marc
Posts: 444
Joined: 20. Apr 2001 23:31
Location: Arnsberg

Re: Java oder C/C++

#12 Post by marc »

http://www.pronix.de -> C-Kurs

Gruß
Marc

Post Reply