# [OT] Entscheidungshilfe - Programmieranfänger

## Gekko

Hallo liebe Community!

Ich möchte mir selbst Programmieren beibringen.

Jetzt meine Frage an die Geeks hier:

Welche Programmiersprachen, Libs und Tools sollte ich mir möglicherweise näher in Betracht ziehen, wenn ich folgende Anforderungen quasi an mich selbst stelle?

Es darf nur OpenSource dazu verwendet werden.

Der Code sollte sehr einfach auf andere Betriebssysteme portiert werden können, ohne auf kommerzielle Software zurückgreifen zu müssen.

Es sollte objektorientiert programmiert werden.

Ich möchte grafische GUI's programmieren können.

Bitte erzählt mir doch von euren Erfahrungen, es wäre mir sehr wichtig.

Dankeschön, Gekko

----------

## toskala

benutz halt c/c++

ansonsten kannst scripten mit python, php, bash, perl, ruby

----------

## Beforegod

Habe hier in meinem Betrieb mit Java angefangen. Damit kannst Du wirklich sehr gute Objektorientiert programmieren, ist recht verständlich von der Sprache, kannst GUI's machen und das wichtigste (für mich) es ist relativ Platformunabhängig.

Seit Java 1.4.0 ist es auch "sehr" (oder besser ausreichend

) schnell  :Wink: 

Andererseits ist C++ auch nicht zu verachten, obwohl ich da noch nie so richtig durchgestiegen bin.

----------

## toskala

tihi, beforegod  :Smile: 

java is halt irgendwie noch nie schnell genug gewesen für meine wünsche *eg*

----------

## Radi

c/c++ ist nicht besonders portabel,

python ist auch nicht besonders langsam und wie java erzeugt  es bytecode, es wird zwar allgemein zu den scriptsprachen gezählt, das ist aber nicht der fall.

----------

## toskala

sagst du mir auch wieso c/c++ nicht portabel sein soll?

----------

## borlander

Also ich habe mit C/C++ in der Schule angefangen. Mit C/C++ bekommt man ein gutes verständnis für Speicher, Adressen und vieles andere Hardwarenahe.

Will man also 3D Spiele entwickeln ist C++ ein muss.

Die portierbarkeit von C++ ist scheiße! Wenn man sich mal mit der Programmierung so richtig gut aukennt, dann ist es auch kaum ein Problem ein größeres Programm von Windows nach Linux zu Portieren (braucht einfach nur genug Zeit)

Ich find Java aus folgenden Gründen für Anfänger sehr geeignet:

- Java ist portierbar 

- Es gibt viele kostenlose Bücher und Hilfen (zb. http://www.javabuch.de/)

- Es Gibt für vieles vorgefertigte Klassen 

- Die Grafikprogrammierung ist relativ einfach (aber nicht ganz so schön)

- Java muss Objektorientiert programmiert werden

- Java hat keine Bufferoverflows (Sicherheitstechnisch sehr schön)

Nachteil :

- Java ist langsamer

Als Programm würde ich eclipse nehmen (www.eclipse.org)

- Gibt es für viele Betriebssysteme

- Gut bedienbar (hat ein sehr paar kleine Macken in die in ver 3 behoben werden)

- Sehr viele Plugins (z.B. ErModelle erstellen und daraus diereckt eine MySQL Datenbank erstellen)

- Es bringt eine eigene Grafikprogrammierung mit (SWT) Diese läuft sehr viel schneller als AWT Swing und benutzt das Design des Betriebssystems (sehr viel schöner)

Buchtips:

Java ist auch eine Insel (Openbook)

- Sehr schon zum duchlesen von Vorne bis hinten

Handbuch der Java Programmierung

- Gute Reverrenz (www.javabuch.de)

----------

## trapperjohn

Warum ist C++ nicht portierbar?? C++ ist genauso portabel wie jede andere Hochsprache auch ...

Der einzige Grund, warum Anwendungen in C++ (auch in Java!) unportabel sind, ist der Zugriff auf OS-spezifische Dinge (z.B. libs oder Pfadangaben immer mit "\").

Wenn natürlich jemand so codiert, dass ein int immer 4 Byte sein muss, damit das Programm funktioniert, ist selbst schuld.

----------

## spitzwegerich

Ich bin ein großer Fan von Java. Die Sprache ist schön (wird mit 1.5 noch besser werden), und man ist gezwungen objektorientiert zu denken.

Selbst habe ich die Geschwindigkeit zwischen C++ und Java noch nie verglichen. Aber ich war sehr erstaunt, als die c't neulich einen Test gemacht hat und dabei Java schneller war als C++. Als Grund haben die dort vermutet, dass der Overhead der durch die mögliche Mehrfachvererbung in C++ auftritt, C++ ausbremst.

Auch auf Slashdot war neulich ein Link zu einem Vergleichstest, und auch dort war Java nicht langsamer als C++.

----------

## Radi

c/c++ binary code ist überhaupt nicht portabel, der von java schon, es gibt in java, methoden mit denen kann man auf solche sachen, wie pfadangaben zugreifen ohne es für linux oder windows ändern zu müssen, es sei denn man versucht auf andere Laufwerke zuzugreifen. Oder wenn man prozesse erzeugen will, das threadsystem von java ist immer das selbe auf jedem OS, während sich das Prozesssystem der einzelnen OSe unterscheiden, unter Linux sind threads nicht langsamer als prozesse, also forked jeder anstatt threads zu erzeugen. Was bei Windows schlecht ist.

----------

## toskala

die portabilität von "code" ist ja was anderes als "binaries auf vielen systemen auszuführen".

wenn ich den source code von c/c++ habe ist der ja auch leicht zu portieren.

----------

## borlander

Will man in C++ eine Programm mit GUI, Datenbankverbindung, Netzwerkverbindung und Dateizugriff schreiben, so wird man merken, dass die Details die auf den beiden Betriebssystem anders sind, sich häufen. 

Und was ist mit Mac? Wenn man da sein Programm laufen lassen will. 

Ich weiß nicht wie das geht - Java kümmert sich da ums allermeiste

Als erfahrener C++ Entwickler sind diese ganzen kleinigkeiten kein Problem. 

Aber als Anfänger sind das manchmal unüberwindbare Hürden.

Und was auch nicht zu verachten ist, ist die Tatsache, das C++ wesentlich kryptischer ist (was cool aussieht) und damit auch gerade das einarbeiten in Programmbeispielen für Anfänger sehr schwer ist.

PS Wenn C so einfach zu portieren ist, warum schreibt man nicht alle Interentseiten in C anstatt in PHP

----------

## pi

Hallo,

wenn mich jemand fragt welche Programmiersprache er lernen soll und welche denn nun die BESTE ist antworte ich in der Art:

Ein Installateur hat einen Werkzeugkasten und kommt nicht mit einer einzigen Zange um alle Probleme damit lösen zu wollen. Je nachdem was er machen muss wird er unterschidliche Werkzeuge verwenden.

Bei Software ist es ähnlich. Jede Sprache hat ihre Eigenschaften die es besonders geeignet (oder halt weniger geeignet) zur Lösung eines fachlichen Problems machen. Da die Komplexität einer Sprache so hoch ist, werden natürlich Fachprogrammierer benötigt bzw. es wird sich für Dich ergeben in einer Sprache besondere Kenntnisse aufzubauen.

Vielleicht könnte man sagen: Ein Schweisser ist ja Aufgrund der fachlichen Anforderungen auch spezialisiert und wird kaum Beton giesen. Obwohl man beides zum Hausbau braucht.

Du willst "programmieren" lernen. Das ist ungefähr so als wenn ich sagen würde ich will fliegen lernen. Ja aber was jetzt? Will ich Gleitschirm, Drachen oder ein Motorflugzeug fliegen. Oder stelle ich mir vor vielleicht in Zukunft professionelles Fliegen zu betreiben und Passagierflugzeuge zu fliegen. Je nachdem was ich machen will muss ich mich auch dementsprechen tief mit den Umständen vertraut machen (Thermik, Wetteranalysen ...).

Du erkennst worauf ich raus will?

Es gibt Sprachen die sind dafür gemacht das ich halt verhältnismässig einfache Dinge ohne tiefes Fachwissen bewerkstelligen kann.

Da Du in diesem Forum postes und an der Fragestellung gehe ich davon aus das Du ein tiefers Interesse hast.

Was im übertragenen Sinne "Motorflugzeug und eventuell abschätzen zu können was es bedeutet Boing fliegen zu können" bedeutet würde ich Dir schon eher zu C/C++ raten wollen. Einfach weil Du dabei nicht darum rum kommst zu lernen wie Speicherverwaltung läuft und Du dir immer bewust sein wirst wo du arbeitest (Stack/Heap). Eigentlich trivial, aber man wundert sich wieviel bezahlte Programmierer dazwischen nicht (mehr) unterscheidern können.

Selbst wenn Du später mal Java favorisieren wirst, wirst Du Dich dann fragen warum per default alle Funktionen virtuell sind weil Du gelernt hast was späte Bindung ist. Du wirst Dich fragen wie in Java zyklische Objektreferenzen aufgelöst werden damit die Objekte in die garbagecollection wandern können und Du wirst feststellen das das bisher ein echtes Problem ist. usw.

Dies alles brauchst Du natürlich nicht wenn Du "nur Gleitschirm fliegen" willst.

Einfach gesagt: Du entwickelst ein sprachenunabhängiges Gefühl für die Programmierung. Was ich anderen Sprachen nicht absprechen will, ich denke jedoch das man da jedoch in C/C++ schneller damit konfrontiert wird.

Zu Deinen Anforderungen will ich Dir dann schon noch Lösungsmöglichkeiten zeigen wenn ich Dir schon zu C/C++ rate:

-portiebarkeit -> schau dir mal die APR an (apr.apache.org) damit solltest Du schon mal ein ganzes Stück kommen

-GUI (inkl. Portierbarkeit) -> in der nächsten Ausgasbe des LinuxMagazins gibt es einen Artikel zu QT, wxWindows.

-verwende am Anfang wirklich nur einen compiler, mit gcc kommst du schon sehr weit, unter win kannst du http://sourceforge.net/projects/dev-cpp/ mal ausprobieren

Bei Dir gibt es doch bestimmt eine Hochschule in der Nähe. Schau mal was es dort für Vorlesungen gibt und hocke Dich einfach mal mit rein. Bei uns gibt es zum Beispiel Systemprogrammierung unter Linux, bis Du dir das alles aus Bücher gesaugt hast bekommst Du dort vieles nochmal aufgearbeitet und es kann Dir wesendlich besser vermittelt werden wo die Probleme liegen und auf welche Art man sie lösen kann. (hm, Systemprogrammierung ist dann eher ein schlechtes Beispiel wenn man anfängt, passender sind die Einführungsveranstaltungen)

Gruß

Peter

----------

## toskala

 *borlander wrote:*   

> 
> 
> PS Wenn C so einfach zu portieren ist, warum schreibt man nicht alle Interentseiten in C anstatt in PHP

 

weil c eine sprache ist die man durch den compiler dreht und keine interpretierte sprache...

pi: danke, guter kommentar  :Smile: 

----------

## sirro

Selber bin ich C-Programmierer habe aber mit Delphi/Pascal in der Schule angefangen und darum noch ein paar Tipps. Pascal ist meines Erachtens eine sehr einfach zu lernende Sprache da relativ viel selbsterklärend ist.

 *Gekko wrote:*   

> Es darf nur OpenSource dazu verwendet werden.

 

Der FreePascalCompiler

```
emerge fpc
```

 *Gekko wrote:*   

> Der Code sollte sehr einfach auf andere Betriebssysteme portiert werden können, ohne auf kommerzielle Software zurückgreifen zu müssen.

 

Der FreePascalCompiler für Windows

 *Gekko wrote:*   

> Es sollte objektorientiert programmiert werden.

 

Ist mit ObjektOrientiertenPascal (OOP) möglich.

 *Gekko wrote:*   

> Ich möchte grafische GUI's programmieren können.

 

Stichwort Lazarus. Ich hab schonmal probiert ein Ebuild zu dafür schreiben, aber leider konnte rpm2tgz das bei mir nicht handhaben. Es gibt aber auch Sourcen die mit dem FPC compiliert werden können.

Mit OO-Programmieren kenne ich mich bis auf ein paar Delphi/Kylix Erfahrungen kaum aus. Fand die Idee so zu programmieren auch etwas seltsam. Aber im Sommersemester sind wir dann bei C++ angekommen und dann werde ich es wohl oder übel lernen müssen. Vielleicht gefällt es mir ja auch wenn ich es einmal halbwegs kann  :Wink: 

Java finde ich vom Ansatz her toll, aber irgendwie hab ich schon immer damit Probleme gehabt (sogar unter Windows) insofern habe ich eine leichte Abneigung dazu entwickelt... Werde es aber trotzdem lernen müssen.

----------

## Gekko

Erstmal herzlichen Dank für Eure konstruktiven Antworten auf meine mehr oder minder "schwammige" Fragestellung.

Bezüglich der sehr ausführlichen Aufklärung pi's und anderer (Dankeschön übrigens) bin ich zum Entschluss gekommen dass ich es mal mit C++ versuchen sollte. Ich weis, dass C++ nicht sehr leicht zu erlernen ist, aber dennoch eine Sprache sein soll die sehr weit verbreitet ist.

Der Sinn und Zweck weshalb ich programmieren will ist ganz einfach erklärt: Ich habe zu Hause einen mehr oder weniger passablen Computer gebaut, mit dem ich gerne verschiedene Dinge erledige, wie z.B. HTML Seiten basteln (rein Hobbymässig  :Laughing:  ) und dergleichen. Da mir aber einige Dinge fehlen, bzw. so manche Dinge nicht so sind wie ich sie mir vorstelle wie sie sein sollten und ich ständig auf der Suche nach diversen "Nippeles" und "Schmonzeles" (Tools) bin dachte ich mir wäre es bei manchen Sachen eventuell geschickter wenn ich sie programmieren könnte.

Ausserdem habe ich soviel Geld für meinen Kübel ausgegeben, dass ich ihn nicht blos zum Spielen verwenden will, sondern auch einen persönlichen Nutzen davon ziehen möchte.

----------

## chris4linux

Hi,

um ein wenig verwirrung noch zu stiften, hier ein quote aus diesem forum, thread weiß ich leider nicht mehr.

Es war im OT bereich, und da kam die gleiche frage auf, folgende antwort war perfekt dafür:

 *Quote:*   

> 
> 
> Learning how to program is not about learning a language, it is about learning how to think like a software engineer and how to apply sensible concepts to your programming. That said, it's not very important which language you choose as your first, although some languages can leave a bitter taste at first.
> 
> 

 

ich persönlich hab mit basic angefangen, zu c++, zu vc++, zu php, zu c, zu asm, zu perl, zu delphi/kylix, zu whitespaces (und kleine scriptsprachen).

an c/c++ bin ich dann hängengeblieben, mache zwar website noch mit php und perl, aber c ist bei mir jetzt stark im kommen...

- Chris

----------

## flouX

Hallo Gekko,

also ich habe die ganze Palette C/C++/Java durch. Jede Sprache hat seine Vor- und Nachteile, desshalb ist es wichtig zu wissen, was man damit machen will.

Bei hardwarenaher Programmierung biste mit C am besten beraten, allerdings mußte wissen, daß C alles andere als platformunabhängig ist und selbst der ANSI Standard einige Fragen (z.B. große eines Integers) offen läßt. C legt viele Dinge in die Hände des Programmierers, das macht sich auch bei Fehlerquellen bemerkbar, z.B. Bufferoverflows etc.

C++ ist objektorientiert, sicherlich, aber da es kompatibel zu C sein möchte entsteht eine hybride Sprache und es ist nicht immer einfach reines C++ zu programmieren. Oft ist man verleitet C Funktionen unter C++ zu nutzen. 

Java hat für mich alles, was ich zum täglichen coden brauche, klar, es läuft langsamer, interpretiert auf einer virtuellen Maschine, doch dadurch auch total platformunabhängig. Im Gegensatz zu C/C++ gibt es sehr viele praktische Klassen in der Standardbibliothek die man bei C/C++ vergeblich sucht. 

Für mich ist JAVA der klare Favourit, und wenn Du nicht auf Laufzeit angewiesen bist (ein paar Millisekunden hin oder her) dann kann ich es nur wärmstens empfehlen.

Grüße aus München.

flouX

----------

## qeldroma

Ich sehe es auch so, das JAVA mit Sicherheit der schnellste Einstieg mit komplexen Möglichkeiten ist. Der Umstieg später von JAVA auf C++ ist sehr viel einfacher als anders herum, da man nicht mehr in die Versuchung kommt, das Objektorientierte wegzulassen.

Java erspart einem viele Ärgernisse, die man in C/++ erst einmal selbst schreiben muß.

JAVA läuft inzwischen überall und stabil, außerdem auch nicht spürbar langsamer (Die Studien zum Vergleich zwischen den Sprachen gehen ziemlich auseinander, mal ist JAVA fast so schnell wie C, mal ist es langsamer..).

C/++ zum Anfang würde ich nur dann empfehlen, wenn du DIREKT an die Hardware möchtest, was weiß ich, 3D-Zocker oder einen eigenen Kernel-Treiber für irgendetwas.

[subjective meaning]Ich kann dir garantieren, das Monate vergehen, bis du halbwegs stabil mit Pointern, Adressen und Zuweisungen dergleichen umgehen kannst, vor allem im HEIMSTUDIUM. Ohne weitere Personen, die mit dir zusammenarbeiten, wird es dir sehr schwer fallen, effizient voranzukommen, das ist nämlich sehr harter Tobak in C/++.[/subjective meaning]

JAVA übernimmt das für dich, will heißen, überlässt dir nicht jegliche Verantwortung, im Guten wie (am Profi gemessen) im Bösen.

Schau dir z.B. den "portagemaster" an, der ist JAVA. Oder http://www.map24.de, auch JAVA. Von langsam kann da nicht die Rede sein.

Das was nunmal langsam ist, ist das eine Mal, wenn die JAVA-Machine startet, wenn sie da ist, ist sie da und alles läuft unverzüglich...

----------

