PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmieren anfangen - nur mit was?


Gast
2009-06-11, 16:43:35
Hallo,

ich möchte nächstes Jahr September eine Ausbildung zum Fachinformatiker: Anwendlungsentwicklung anfangen und wollte mich Zuhause daher schon einmal vorbilden. Am besten wärs natürlich erstmal klein anzufangen, also mit der leichtesten Sprache. Vor ein paar Jahren wollt ichs mal mit C++ und einem Buch versuchen aber ich denke als Erstsprache ist ein bisschen Overkill kann das sein :o?

Was ist die einfachste Programmiersprache? Mit was fang ich am besten an?

lumines
2009-06-11, 17:04:21
wie wärs mit Ruby (http://www.ruby-lang.org/de/)? :)

PatkIllA
2009-06-11, 17:13:44
Erstmal keine Sprache sondern Konzepte lernen. Insbesondere Objektorientierung und evtl. auch noch sowas wie Datenstrukturen und Exceptions
Erschreckend was in manchen Codes alles mit Arrays gemacht wird oder so Sachen, dass vorher alles mögliche geprüft wird und dann wird per string irgendein Status übermittelt.

Gast
2009-06-11, 17:13:54
Hab damals vor der Ausbildung C vorgelernt. Haben dann auch mit C angefangen. Ob das immer noch so ist weis ich nicht. Wahrscheinlich wird man aber nicht unbedingt gleich mit objektorientierter Programmierung anfangen. Hängt sicher davon ab, was du in deiner Arbeit benötigst. Wenn da z.B. Java benötigt wird, dann würde ich dir ggf. empfehlen mit Java anzufangen. Oder C++ was ich persönlich als schwieriger empfinde, aber generell benötigt man für keine dieser Sprachen wirkliche Vorkenntnisse. Da ja sowieso alles so seine Gemeinsamkeiten hat kann man im Prinzip nichts falsch machen, sondern nur dazu lernen.

Die openbooks von Galileo kennst du? Mit sowas in der Art hab ich angefangen http://openbook.galileocomputing.de/c_von_a_bis_z/ + ein C Buch das ich mir gekauft habe (lässt sich am Anfang leichter lernen als vorm bildschirm).

Einige wenige fangen auch gleich mit nem Assembler an, habs selbst nie wirklich gelernt, soll aber einiges bringen.

Außerdem besteht die Ausbildung ja nur zu maximal einem fünftel aus rumprogrammierei... war zumindest bei mir so. Bestandteil war da z.B. Datenbanken (Access, Mysql, MSSQL, Oracle), Office (Word, Excel etc), Webentwicklung (HTML etc), Linux uswusw

Wenn du einen kleinen Einblick in das bekommen möchtest, kannst du mal in diesem Referenzwerk nachgucken: http://openbook.galileocomputing.de/it_handbuch/ das man dann auch für die Abschlussprüfung kaufen muss und dafür verwenden darf. Das steht sehr viel allgemeines über Informatik und den Beruf, deswegen schadet es sicher nicht da mal ein bisschen rumzublättern, damit du einen guten Eindruck von dem bekommst was da so Sache ist.

Viel Spaß ;)

RattuS
2009-06-11, 19:03:21
Ich empfehle Delphi oder Visual Basic vor dem .NET-Zeitalter als Einstieg.

Der_Donnervogel
2009-06-11, 19:16:48
Was ist die einfachste Programmiersprache? Mit was fang ich am besten an?An der Empfehlung von PatkIllA ist zwar etwas dran, aber so zu starten wäre mir viel zu Hardcore und ist eigentlich nur zu empfehlen wenn man eher der Typ Mathefreak ist, der viel Spass an Theorie hat.

Ich hab seinerzeit noch mit einem Uralt-BASIC angefangen, da das leicht zu erlernen war und man schnell irgendwelche Resultate und Erfolgserlebnisse hatte. Heutzutage gibt es aber bessere Sachen. Ganz witzig und gut gemacht für Programmieranfänger finde ich z.B. Hamster (http://www.java-hamster-modell.de/). Eine Alternative wäre auch sich ein VisualStudio Express zu besorgen und z.B. mit C# zu beginnen. Dort hat man dank der einfachen Möglichkeiten für eine grafische Ausgabe auch schnell mal ein Erfolgserlebnis. Ganz wichtig ist, dass man sich vor allem als Anfänger nicht von den großen Entwicklungsumgebungen (IDE) und deren Optionsvielfalt erschlagen läßt. IDEs wie VisualStudio (C#, VB, C/C++) oder Eclipse (Java, C/C++, usw.) sind für Profis gedacht und somit für Anfänger oft sehr unübersichtlich.

Meine Empfehlung würde lauten sich erst mal Hamster anzusehen und sich dann vielleicht mal C oder C++ vorzunehmen. Die Sprachen sind zwar als Anfänger unangenehm zu programmieren (und auch wenn ich mir damit hier sicher Feinde mache, denk ich die sind auch als Profi noch unangenehm zu programmieren) aber man lernt viel dabei. Sachen wie Pointer oder Speicherverwaltung sind zwar bei modernen Sprachen wie Java oder C# durch das Laufzeitsystem vom Programmierer versteckt, aber es ist oft nützlich wenn man weiß was ca. im Hintergrund passiert. Wie PatkIllA schon angedeutet hat, kann man sehr leicht ineffizienten und schlechten Code machen wenn man nicht weiß was man tut. Es ist ganz wichtig, dass man die richtigen Algorithmen und Datenstrukturen bei seinem Programm wählt. Das ist in vielen Fällen sogar wichtiger als die Wahl der Programmiersprache. Um das aber zu können ist es hilfreich, wenn man weiß was im Hintergrund passiert.

huha
2009-06-11, 19:31:22
Es stellt sich eben die Frage, was du machen willst. Es gibt viele Sprachen, die recht gut zu lernen sind, inwiefern dann aber die Denkmuster aus diesen Sprachen deinen Programmierstil in C++ beeinflussen, kann man natürlich nie so recht bewerten.

Wenn's aber darum geht, einfach mal ein bißchen zu programmieren, sind durchaus Sprachen empfehlenswert, bei denen man sich um möglichst wenig kümmern muß und die gleichzeitig einen ordentlichen Funktionsumfang haben, daß man nicht ständig das Rad neu zu erfinden braucht.
Ruby dürfte das erfüllen, da ich die Sprache aber nicht kenne, kann ich nichts Konkretes dazu sagen. Ich würde Python empfehlen, nicht nur deshalb, weil man dort dazu gezwungen wird, ordentlich einzurücken, was eigentlich in keiner verbreiteten Sprache schaden kann. Der Funktionsumfang ist recht groß und man kann eigentlich mehr oder weniger alle Konzepte ausprobieren, die einen interessieren, die Sprache ist da sehr flexibel. Nachteil: Ein wenig langsam. Aber das sollte eigentlich für den Anfang nicht stören.

Java empfehle ich übrigens nicht. Die Sprache ist vollgemüllt mit seltsamen und/oder dämlichen Designentscheidungen und den Versuchen, diese irgendwie wieder zu negieren. Sowas kann man benutzen, wenn man da durchblickt, aber gerade für den Anfang halte ich es nicht für sinnvoll, da viele Dinge einfach nur in der Theorie elegant sind und man in der Praxis doch wieder dazu übergehen muß, obskuren Code zu erzeugen.

-huha

wow freak
2009-06-11, 20:11:57
lern C,damit versteht man gut die grundprinziqien der prog. und auch sonst is die sprache easy bis auf die pointer

RattuS
2009-06-11, 20:17:11
lern C [...] auch sonst is die sprache easy bis auf die pointer
Gerade die Adressierung verursacht bei den meisten Anfängern den unerträglichen Drang aufzugeben.

In meinen Augen ist es effektiver mit einer lockeren, fehlertoleranten Sprache zu beginnen, die den Anfänger schnell zu Ergebnisse kommen lässt und motiviert.

(del)
2009-06-11, 20:25:36
Ich habe gute Erfahrungen mit Java gemacht. Du musst dich am Anfang nicht um Pointer und Speicherreservierung kümmern, was die Sprache einfach macht. Den größten Vorteil sehe ich darin, dass dir die virtual machine beim ausführen eines Programmes eine sehr detaillierte Fehlermeldung gibt, falls etwas schief läuft. Sagen wir mal, du hast ein Datenfeld mit 10 Einträgen und du versuchst den 12. anzusprechen. Dann bekommst du eine Fehlermeldung, dass dein Feldindex außerhalb des zulässigen Bereiches ist und in welcher Zeile in welcher Funktion dieser Fehler auftrat. Wenn du dir in C den gleichen Fehler erlaubst, bekommst du einfach nur die Absturzmeldung "Segmentation Fault" und darfst dich auf eine langwierige Suche begeben.
Mein Tipp: Geh in die nächste Bibliothek, schau dir ein paar Bücher an. Dann nimm das verständlichste...

redfalcon
2009-06-11, 20:29:25
Wenn man mit C anfangen will, kann man auch gleich C++ nehmen. C finde ich beim Schreiben in vielen Fällen einfach nur umständlich, C++ lässt sich viel flüssiger "runterschreiben".
Aber wie gesagt, dazu gehört auch sich mit den theoretischen Konzepten auseinanderzusetzen.


Java empfehle ich übrigens nicht. Die Sprache ist vollgemüllt mit seltsamen und/oder dämlichen Designentscheidungen und den Versuchen, diese irgendwie wieder zu negieren. Sowas kann man benutzen, wenn man da durchblickt, aber gerade für den Anfang halte ich es nicht für sinnvoll, da viele Dinge einfach nur in der Theorie elegant sind und man in der Praxis doch wieder dazu übergehen muß, obskuren Code zu erzeugen.


Interessehalber, die da wären? Java fand ich für den Anfang gar nicht so übel, da hatte ich mit C mehr Probleme.

Der_Donnervogel
2009-06-11, 20:55:29
Java empfehle ich übrigens nicht. Die Sprache ist vollgemüllt mit seltsamen und/oder dämlichen Designentscheidungen und den Versuchen, diese irgendwie wieder zu negieren. Sowas kann man benutzen, wenn man da durchblickt, aber gerade für den Anfang halte ich es nicht für sinnvoll, da viele Dinge einfach nur in der Theorie elegant sind und man in der Praxis doch wieder dazu übergehen muß, obskuren Code zu erzeugen.Das ist ne interessante Feststellung die ich nicht so ganz nachvollziehen kann. Ich hab schon mit allerhand Sprachen programmiert und jede hat so ihre WTFs drinn, aber dass da Java besonders hervorstechen würde ist mir nicht aufgefallen. Die GUI-Programmierung mit Swing ist ab und zu etwas umständlich, aber sonst fällt mir da spontan nichts ein. Gibts für die Aussage auch eine konkrete Begründung? Ehrlich gesagt finde ich da andere Sprachen wie z.B. die .Net-Sprachen oder auch C++ "schlimmer". Bei .Net ist z.B. teilweise die Klassenbibliothek ziemlich unvollständig (z.B. wer braucht schon ein Set) und auch andere Sachen wie das mit den partial-Classes find ich zumindest fragwürdig. Von Sachen wie was unmanaged Code in einer managed Sprache zu suchen hat ganz zu schweigen. Die obskursten Code-Fragmente die ich je gesehen habe stammen aber allesamt aus C bzw. C++. Die Sprachen eignen sich einfach nur super um unleserlichen und unverständlichen Code zu erzeugen. (na ja ok stimmt nicht ganz, Brainfuck ist da noch schlimmer. ;D )

Gast
2009-06-11, 21:13:21
Ich kann es zwar im Prinzip befürworten objektorientiert anzufangen, dennoch denke ich, dass der Umstieg von Objektorientierung auf prozedural oder anderes (und auch das ist immer noch gegenwärtig und weit verbreitet, nicht nur in shellscripts, vb usw.) nachher schwerer fallen könnte. Auch wenn man immer irgendwo gewisse prozedurale Elemente hat. C++, Java und .NET sind in ihrer Eigenschaft nun mal größtenteils objektorientiert.

Mir wär es schon wichtig, erst einmal ein bisschen Praxiserfahrung zu besitzen, damit man sich einfach ein Bild davon machen kann, da ich glaube, dass es anfangs erst einmal schwieriger ist (mit geringen Vorkenntnissen) von einem abstrakten Modell auf ein "praktisches" zu schließen als umgekehrt. Denn genau dies wird erst während der Ausbildung vollständig vermittelt und benötigt entsprechende Vorkenntnisse (bzw. wären diese dann sehr von Vorteil), die hier viele als selbstvertändlich auffassen.

rotalever
2009-06-12, 15:33:24
Wenn's aber darum geht, einfach mal ein bißchen zu programmieren, sind durchaus Sprachen empfehlenswert, bei denen man sich um möglichst wenig kümmern muß und die gleichzeitig einen ordentlichen Funktionsumfang haben, daß man nicht ständig das Rad neu zu erfinden braucht.
Ruby dürfte das erfüllen, da ich die Sprache aber nicht kenne, kann ich nichts Konkretes dazu sagen.
Manchmal habe ich das Gefühl Ruby ist so eine Mode-Sprache.. :tongue:

Ich würde Python empfehlen, nicht nur deshalb, weil man dort dazu gezwungen wird, ordentlich einzurücken, was eigentlich in keiner verbreiteten Sprache schaden kann. Der Funktionsumfang ist recht groß und man kann eigentlich mehr oder weniger alle Konzepte ausprobieren, die einen interessieren, die Sprache ist da sehr flexibel. Nachteil: Ein wenig langsam. Aber das sollte eigentlich für den Anfang nicht stören.

Genauso sehe ich das auch. Die Geschwindigkeit wird für den TS vermutlich keine Rolle spielen, da er eh keine konkreten Projekte genannt hat.
lern C,damit versteht man gut die grundprinziqien der prog. und auch sonst is die sprache easy bis auf die pointer
Ohne pointer kannst du damit aber nicht viel machen.
Den größten Vorteil sehe ich darin, dass dir die virtual machine beim ausführen eines Programmes eine sehr detaillierte Fehlermeldung gibt, falls etwas schief läuft. Sagen wir mal, du hast ein Datenfeld mit 10 Einträgen und du versuchst den 12. anzusprechen. Dann bekommst du eine Fehlermeldung, dass dein Feldindex außerhalb des zulässigen Bereiches ist und in welcher Zeile in welcher Funktion dieser Fehler auftrat.
Wenn du dir in C den gleichen Fehler erlaubst, bekommst du einfach nur die Absturzmeldung "Segmentation Fault" und darfst dich auf eine langwierige Suche begeben.
Für sowas gibt es für C verschiedene Programme/Debugger.
Wenn man mit C anfangen will, kann man auch gleich C++ nehmen. C finde ich beim Schreiben in vielen Fällen einfach nur umständlich, C++ lässt sich viel flüssiger "runterschreiben".
Aber wie gesagt, dazu gehört auch sich mit den theoretischen Konzepten auseinanderzusetzen.
Naja, C++ ist wesentlich umfangreicher. Was da alles schon für Bücher drüber geschrieben worden sind...

Ich würde zu Beginn nicht mit Objektorientierung anfangen, da man damit am Anfang eh nichts vernünftiges machen kann.

AYAlf
2009-06-12, 15:36:50
schau dir die seite mal an...

http://www.java-hamster-modell.de/

huha
2009-06-12, 15:52:36
Interessehalber, die da wären? Java fand ich für den Anfang gar nicht so übel, da hatte ich mit C mehr Probleme.

Ich will das jetzt nicht mit C vergleichen, in dieser Hinsicht ist Java wohl etwas erträglicher ;)--dennoch halte ich es zum Anfangen nicht für eine sonderlich geeignete Sprache, da man recht häufig mit dummen Designentscheidungen konfrontiert wird. Beispiele!

Es ist recht dumm, daß es primitive Datentypen gibt. Eigentlich eine der schlimmsten Entscheidungen von Java überhaupt. Autoboxing sollte das wieder so halbwegs relativieren, was aber eben meist nicht so recht klappen will.
Eine weitere ausgesprochen lustige Sache ist der generische Datentyp. Es ist wohl hinreichend bekannt, daß man keine generischen Arrays bauen kann, sondern sich irgendwelcher abenteuerlicher Konstruktionen bedienen muß, was ziemlich dämlich ist. Manche Dinge wirken einfach wenig durchdacht, sondern im Nachhinein drangeklatscht (Autoboxing, generische Datentypen, ...)--man kann sich damit abfinden, aber schön ist es nicht.

Manchmal habe ich das Gefühl Ruby ist so eine Mode-Sprache.. :tongue:

Python bleibt von diesem Gefühl auch nicht verschont. ;)

Ich würde zu Beginn nicht mit Objektorientierung anfangen, da man damit am Anfang eh nichts vernünftiges machen kann.

Je nachdem, was man machen will, kann es durchaus sinnvoll sein, auch schon objektorientierte Ansätze zu verwenden. Mit den meisten OO-Sprachen läßt sich aber auch ganz ordentlich prozedural programmieren, so daß ich da kein Problem sehe. Python bietet sich da natürlich besonders an, weil man alles so machen kann, wie's einem recht ist.

-huha

Marscel
2009-06-12, 15:54:40
SmallBasic (http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx)
PureBasic (http://www.purebasic.com/) (damit hab ich vor Jahren angefangen)
Python (http://www.python.org/)
Procssing (http://www.processing.org/), wenn dir mehr nach Grafischen Sachen ist

C++, C#, Java etwa würde ich erst danach angucken, bei der vergleichsweise hohen Komplexität an IDEs und Build-Prozessen wäre ich damals abgeschreckt gewesen.

universaL
2009-06-12, 16:38:18
ruby (sehr schöne sprache ;)) und von grund auf:

http://pine.fm/LearnToProgram/

Ganon
2009-06-12, 16:41:25
Manche Dinge wirken einfach wenig durchdacht, sondern im Nachhinein drangeklatscht (Autoboxing, generische Datentypen, ...)--man kann sich damit abfinden, aber schön ist es nicht.

Generics sind in Java eh nur recht halbherzig implementiert, was leider so gewollt ist -> Stichwort: Type erasure... leider... also xxx.class der Methode mit übergeben :ugly:

Dafür hat Java eine verdammt große Community, ist mittlerweile OpenSource, hat unzählige Frameworks für fast alles und an sich verdammt gute IDEs und Build-Tools ^^

Abnaxos
2009-06-12, 16:49:49
Es ist recht dumm, daß es primitive Datentypen gibt. Eigentlich eine der schlimmsten Entscheidungen von Java überhaupt. Autoboxing sollte das wieder so halbwegs relativieren, was aber eben meist nicht so recht klappen will.

Autoboxing ist so eine Sache, da können Effekte auftreten, dass es wirklich nicht mehr lustig ist. Man nehme z.B. folgenden Code:

public class Autoboxing {

private static Integer toInteger(int value) {
return value;
}

public static void main(String[] args) {
System.out.println(toInteger(23)==toInteger(23));
System.out.println(toInteger(666)==toInteger(666));
}

}

Ausgabe:
true
false

Python bleibt von diesem Gefühl auch nicht verschont. ;)
Python wäre hübsch, kann ich einem Anfänger aber wirklich nicht empfehlen. In Python hat man einfach zu viele Freiheiten, zu viel wird einfach auf Konvention abgewälzt und von der Sprache nicht forciert. Das nicht grundsätzlich schlecht, aber es erfordert, dass der Programmierer sich an der Nase nimmt, um im Programm Ordnung zu halten, und dazu sollte der Programmierer eine gewisse Erfahrung haben und wissen, was er tut.

Zu C: Ich finde den Vorschlag eigentlich gar nicht schlecht (C, nicht C++). Dumm nur, dass man damit wenig Erfolgserlebnisse haben wird. Ich selber habe fast mit C angefangen (vorher noch ein wenig BASIC) und bereue es nicht. Aber weder heute noch damals wäre ich fähig, in vernünftiger Zeit ein funktionierendes Programm in C auf die Beine zu stellen, aber wenn man C in seinem Prinzip verstanden hat, hat man das Wichtigste verstanden, wie so ein Computer grundsätzlich funktioniert. Und das ist recht wertvoll, wenn auch heutzutage die meisten Programmiersprachen versuchen, den Programmierer von diesem Mist zu verschonen.

Zu Java: Da gebe ich huha Recht. Einerseits hat es viele “komische” Entscheidungen, die teilweise auch historisch bedingt sind. C# bzw. .NET hatte da den Vorteil, dass es Java als Vorlage hatte und auf Erfahrungen zurück greifen konnte, die Java zuerst machen musste ─ Java musste selber gehen lernen, C#/.NET konnte dann bei Java abgucken, wie man geht, und macht es daher heute teilweise besser/eleganter. Zudem kann man bei Java auch nicht wirklich ignorieren, was unter der Motorhaube läuft (“volatile”, anyone?). Ich fühle mich in Java wohl, aber es kann eine recht zickige Sprache bzw. Plattform sein und ich halte es nur mit starken Vorbehalten für Anfänger geeignet. Man muss viele Eigenheiten kennen, um nicht ständig Dinge zu tun, die “man” nicht tun soll. Ganz zu schweigen von der gigantischen Core-API.

So gesehen schliesse ich mich der Ruby-Fraktion an: Ruby ist eine recht elegante Sprache, hat genügend Libraries, um auch tatsächlich etwas damit anstellen zu können, und bietet Konstrukte, die den Programmierer zu gewissen Dingen zwingen (statt, wie Python, einfach zu sagen: “Du musst es nicht so machen, aber besser wäre es”).

Trap
2009-06-12, 17:30:06
Wer von euch meint, dass der Thread bisher dem Threadstarter weitergeholfen hat? :biggrin:

rotalever
2009-06-12, 17:56:24
Wer von euch meint, dass der Thread bisher dem Threadstarter weitergeholfen hat? :biggrin:
Naja, solche Fragen kann man eigentlich nicht wirklich beantworten.

lumines
2009-06-12, 18:00:32
immerhin weiß er jetzt, dass eigentlich alle scheiße sind und man erst gar nicht anfangen sollte ;D

The_Invisible
2009-06-12, 18:36:21
immerhin weiß er jetzt, dass eigentlich alle scheiße sind und man erst gar nicht anfangen sollte ;D

wenn man sich nur ein bisschen interessiert und sieht was man alles machen kann sieht man darüber hinweg. ich habe auch schon von c/c++, c#, java, python, php alles durch und es gibt wirklich nicht die perfekte sprache.

dafür fühlt man sich dabei immer wie ein kleiner gott, zumindest wenn die anforderungen für das projekt nicht zu eng gestrickt sind.

bei privaten projekten ist man sowieso gott über alles :D

mfg

Ganon
2009-06-12, 22:30:54
Autoboxing ist so eine Sache, da können Effekte auftreten, dass es wirklich nicht mehr lustig ist. Man nehme z.B. folgenden Code:


Nunja. Hier ist aber bekannt, dass nicht 2 int, sondern 2 Integer-Objekte zurückkommen und man vergleicht Objekte nicht mit "==" ;)

Aber ja, Autoboxing kann verwirrend werden. Man weiß nicht wann die VM was in was wandelt. Eine rekursive Funktion z.B. kann mit "int" normal durchlaufen, aber mit Integer mit einem Stackoverflow wegschmieren (hatte ich selbst).

Von daher ist es wirklich nicht elegant gelöst. Dann doch lieber ohne Autoboxing und Compilerfehler ;)

Abnaxos
2009-06-12, 23:23:02
Nunja. Hier ist aber bekannt, dass nicht 2 int, sondern 2 Integer-Objekte zurückkommen und man vergleicht Objekte nicht mit "==" ;)
Ja, das ist richtig, das tut man nicht. Das Problem bei diesem Fall: Es funktioniert bestens für Werte von -128 bis +127, ausserhalb dieses Wertebereichs nicht mehr. Das sind dann die schönen Bugs, die man stundenlang suchen “darf” und kaum reproduzieren kann. Und in der Praxis ist es nicht immer so offensichtlich …

Eine gute IDE weist einen natürlich darauf hin, dass man Mist gebaut hat. :)

Beavis
2009-06-12, 23:57:39
"Brainfuck" ist eine sehr anschauliche Sprache. ;D

Ich hab ja mit Turbo Pascal angefangen. Dort kann man halt gut, ohne Objektorientierung, erstmal ein grundlegendes Verständniss zur Programmierung bekommen (Variablen, Arrays, Schleifen).

Monger
2009-06-13, 01:20:56
Mal meine 5 Cent:
Wenn ich Anwendungsentwicklung höre, denke ich an Desktop-Anwendungen. Ich persönlich denke dabei an Windows, und an sowas wie eine Office Applikation.
Wenn man etwas in der Richtung plant, kommt man heute imho kaum noch um .NET herum. Microsoft tut alles, um .NET in der Windows-Welt als Standard zu etablieren, und das wird ihnen auch gelingen.

Java ist auch eine sehr schöne Sprache, ist aber vorallem für Server-Applikationen und außerhalb der Windows Welt stark vertreten. Sehr mächtige Sprache, imho an Eleganz und Klarheit unübertroffen. Wer sich eher aus akademischen Interesse heraus für Programmierung interessiert, wird an Java seine Freude haben.


Beide Welten haben eine Menge Gemeinsamkeiten - definitiv mehr als Unterschiede, so gesehen kann man auch relativ leicht zwischen beiden Welten hin- und herwechseln.


Wichtiger als all das sind aber zwei Fragen:
1) Wie entwickle ich eine Software?
2) Wie lerne ich die dafür notwendigen Techniken?

Das erste hat gar nicht so viel mit der Sprache zu tun, als mit Architektur. In der Realität ist es problemlos möglich, jahrelang Zeile für Zeile funktionierenden Code in die Tastatur zu klampfen, und doch nie ein Programm zu erhalten dass das tut was man erreichen wollte. Das ist ein sehr, SEHR ernstes Problem, denn Übung hilft nur begrenzt weiter. (Der Duke lässt grüßen!)
Das tückische ist, dass im kleinen Maßstab noch alles gut aussieht. Überträgt man die selben Strategien auf große Projekte, bricht all das zusammen was vorher noch völlig vernünftig aussah. Code Implementierung ist letztendlich eher unwichtig. Wichtig ist, halbwegs die Kontrolle darüber zu behalten was eigentlich genau das Programm tut.
Das läuft heute im breitesten Sinne unter dem Stichwort "Objektorientierung", hat aber eigentlich nur am Rande was mit OOP Sprachen zu tun.

Das zweite ist fast noch wichtiger: nämlich zu lernen, woher man Informationen bekommt. Wie man sich durch die Foren und Code APIs wühlt, und dass man ein Gefühl dafür bekommt, wann man besser nach Alternativen suchen sollte. Die Syntax einer Sprache (die meistens eher begrenzt ist), ist nämlich nur die halbe Miete. Den wesentlich wichtigeren Anteil machen die Bibliotheken aus. Selbst der beste Handwerker ist nix wert ohne gescheites Werkzeug.
Das sind dann die schönen Bugs, die man stundenlang suchen “darf” und kaum reproduzieren kann. Und in der Praxis ist es nicht immer so offensichtlich …

Die Basisdatentypen sind nunmal eigentlich Sprachanomalien, deshalb findest du da immer irgendwelche bizarren Effekte. Andere Sprachen haben versucht, sich mit Operator-Overloading um dieses Problem zu drücken, führen damit imho aber noch viel mehr Probleme ein.
Konsequent wäre es, wenn es überhaupt keine Basisdatentypen gäbe, und Integer Objekte grundsätzlich über Equals verglichen werden würden. Dann wäre es zwar logisch, sähe aber scheiße aus und wäre inperformant. Wie man's auch immer macht, ist es falsch.

Der_Donnervogel
2009-06-13, 01:40:10
Es ist recht dumm, daß es primitive Datentypen gibt. Eigentlich eine der schlimmsten Entscheidungen von Java überhaupt.Das sehe ich nicht so. Es macht durchaus Sinn diese Datentypen zu haben, da ansonsten Berechnungen oft zu langsam wären. Wenn, dann finde ich es eher schlecht, dass die ganzen Wrapperklassen der primitiven Typen "immutable" sind und somit bei Berechnungen oder auch Stringoperationen ständig neue Objekte erzeugt werden müssen.
Eine weitere ausgesprochen lustige Sache ist der generische Datentyp. Es ist wohl hinreichend bekannt, daß man keine generischen Arrays bauen kann, sondern sich irgendwelcher abenteuerlicher Konstruktionen bedienen muß, was ziemlich dämlich ist.Nun wenn man für primitive Datentypen (die ja scheinbar eh ein Designfehler sind ;) ) generisch programmieren will hat man wirklich ein kleines Problem, bzw. muss mit den Wrappertypen programmieren. Wenn es aber nur darum geht ein generisches Array zu machen ist es normalerweise sowieso besser man programmiert gleich gegen das List-Interface und verwendet das dann mit der ArrayList-Implementierung. Damit kann man dann oft auch Iteratoren verwenden, wodurch das ganze noch etwas generischer wird.
Ja, das ist richtig, das tut man nicht. Das Problem bei diesem Fall: Es funktioniert bestens für Werte von -128 bis +127, ausserhalb dieses Wertebereichs nicht mehr. Das sind dann die schönen Bugs, die man stundenlang suchen “darf” und kaum reproduzieren kann. Und in der Praxis ist es nicht immer so offensichtlich …Das stimmt schon, allerdings tritt so ein Fall sehr selten auf und irgendwelches (scheinbar) obskures Verhalten in bestimmten Situationen gibt es bei allen Sprachen (zumindest alle die ich kenne). Da ist Java natürlich keine Ausnahme.

Unterm Strich ist aus meiner Sicht Java eine der Sprachen die am wenigsten Murks drinn haben, auch wenn es durchaus die eine oder andere Problemstelle gibt.

Hamster
2009-06-13, 11:55:30
ich habe mittlerweile so einiges an programmiersprachen durch und bin mittlerweile der meinung, dass man als anfänger mit einer .NET entwicklungsumgebung am besten zurecht kommt. alleine die hilfe ist als anfänger recht brauchbar. ob man jetzt mit c# oder visual basic anfängt, ist nahezu egal. wobei man mmn mit visual basic am anfang die schnelleren erfolge erzielt. zumal man am anfang in vb .net durchaus wunderbar prozedural programmieren kann. später kann man sich dann in/an OO versuchen.
prinzipiell braucht man aber für die ausbildung keine vorkenntnisse, die werden vermittelt. es kann aber hilfreich sein und schadet nicht.
wobei ich dann die frage nicht generell an einer sprache festmachen würde, sondern vielmehr das grundgerüst des programmierens aneignen würde. also datentypen, schleifen, bedingungen, etc.
hier gibt es z.b. jede menge lesematerial: http://www.galileocomputing.de/katalog/openbook

es gibt übrigens von microsoft eine neue programmiersprache, die besonders für anfänger und einsteiger zugeschnitten ist (microsoft empfiehlt die sprache kindern ab 10 jahre). ob sie was taugt weiß ich nicht, aber anschauen kann man sichs ja mal: http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx
gibt für die sprache ein pdf für den einstieg: http://download.microsoft.com/download/9/0/6/90616372-C4BF-4628-BC82-BD709635220D/Introducing%20Small%20Basic.pdf

puntarenas
2009-06-13, 12:03:29
Je nachdem, was man machen will, kann es durchaus sinnvoll sein, auch schon objektorientierte Ansätze zu verwenden. Mit den meisten OO-Sprachen läßt sich aber auch ganz ordentlich prozedural programmieren, so daß ich da kein Problem sehe. Python bietet sich da natürlich besonders an, weil man alles so machen kann, wie's einem recht ist.

Ich möchte meine Programmierkenntnisse seit Jahren immer mal wieder erweitern, Luft nach oben habe ich reichlich. Es ist einfach so, dass man nebenher kaum über einen Anfängerstatus hinauskommt und lässt man es wieder eine Weile sein, dann ist alles futsch.

Im Moment "bastle" ich gerade an Python und kann dem Threadersteller nur abraten, mit Python versaut man sich jedes Verständnis. Ich habe mir ein konkretes Ziel genommen, in diesem Fall ein Bashscript nach Python zu übertragen und einfach mal losgelegt. Ich wollte alles schön in Klassen kapseln und habe mich gewundert, wie wenig Python auf Namespaces gibt, man kann im Prinzip immer und überall auf alles zugreifen. Statt Getter/Setter-Methoden zu verwenden ist es verlockend, Instanzen direkt ins Knie zu schießen, man verbiegt mal eben sonstwo eine Referenz und sucht sich hinterher einen Wolf nach dem Fehler.

Python ist wirklich leicht zugänglich und statt Bashscripts werde ich in Zukunft gleich von vorn herein zu Python greifen, mit der Standardbibiothek kann man wirklich glücklich werden, sogar Threading flutscht mit 3 Zeilen.. Als ernsthafte Programmiersprache, noch dazu um den Einstieg in die Programmierung zu finden, würde ich aber eher zu strikteren Sprachen wie Java raten, die Compilerwarnungen allein sind ein unschätzbar wertvoll. Das will ich mir irgendwann auch nochmal "antun", denn so richtig begriffen habe ich grundlegende Konzepte noch immer nicht und darauf zielt der TE ja im Grunde ab.

rotalever
2009-06-13, 13:00:25
Im Moment "bastle" ich gerade an Python und kann dem Threadersteller nur abraten, mit Python versaut man sich jedes Verständnis. Ich habe mir ein konkretes Ziel genommen, in diesem Fall ein Bashscript nach Python zu übertragen und einfach mal losgelegt. Ich wollte alles schön in Klassen kapseln und habe mich gewundert, wie wenig Python auf Namespaces gibt, man kann im Prinzip immer und überall auf alles zugreifen. Statt Getter/Setter-Methoden zu verwenden ist es verlockend, Instanzen direkt ins Knie zu schießen, man verbiegt mal eben sonstwo eine Referenz und sucht sich hinterher einen Wolf nach dem Fehler.
Wie macht man denn aus einem einfach Bash-Script ein objektorientiertes Programm?
Und natürlich gibt es namespaces, und man kann nicht immer auf alles zugreifen.
Zum Beispiel wenn man
import sys
macht, kann man nicht einfach auf die Variable argv zugreifen, sondern muss sys.argv verwenden, usw.

Monger
2009-06-13, 13:09:22
ich habe mittlerweile so einiges an programmiersprachen durch und bin mittlerweile der meinung, dass man als anfänger mit einer .NET entwicklungsumgebung am besten zurecht kommt.
Imho ist Visual Studio enorm stark darauf getrimmt, die 08/15 Aufgaben im Arbeitsalltag sehr, SEHR schnell umsetzen zu können. Der Graphics Designer ist super, und die Standardkomponenten sind ungeheuer mächtig.

Sobald man sich mal von dem normalen Zeugs ein bißchen entfernt, wird es aber imho sehr schnell ungeheuer komplex, und auch ein bißchen schmuddelig. Wer sich z.B. mal die Dokumentation für das DataGridView Control genau anschaut, kann sich locker wochenlang damit beschäftigen. Und .NET suggeriert, dass man sich mal ganz fix ne Datenbank in ein Programm reinklatschen kann, und das wars schon.

Ich halte deshalb .NET nicht unbedingt für die beste Sprache zum lernen. Zum Produktiveinsatz ist sie aber spitze. Bin grade erst dabei mich ein bißchen in LINQ einzuarbeiten, und da wird man schon ein bißchen wuschig.

puntarenas
2009-06-13, 13:33:50
Wie macht man denn aus einem einfach Bash-Script ein objektorientiertes Programm?
Keine Ahnung, ich verstehe ja nichts von OOP. :tongue:
Das Ding sollte mir nur als Python-Opener dienen, es decodiert gleichzeitig beliebig viele Videos in unzählige PNG-Dateien (per mplayer), manipuliert mittels ImageMagick an ihnen herum und bastelt sie am Ende zu einem einzigen Splitscreenvideo zusammen. Das ganze soll natürlich bis zum finalen Encodieren möglichst parallel ablaufen, das Bashscript war weder parallelisiert, noch konnte es sich dynamisch auf eine unterschiedliche Anzahl von Quellvideos einstellen.


Und natürlich gibt es namespaces, und man kann nicht immer auf alles zugreifen.

Ja, schon, man kann ja auch Methoden und Variablen als privat deklarieren, trotzdem wird nicht so strikt und von vorn herein gekapselt, wie beispielsweise in Java. Ich bitte auch um Entschuldigung, mir fehlt die passende Terminologie und ich bezeichne sicherlich einige Dinge falsch. Ich wollte den Threadersteller nur darauf hinweisen, dass man sich mit Python (und bestimmt auch .NET) meiner Meinung nach ziemlich versauen kann, weil viele Dinge implizit passieren und einem besseren Verständnis damit im Weg stehen. Am Anfang lieber strukturiert und ausführlich, quick 'n dirty von Anfang an erscheint mir irgendwie unschön.

Hamster
2009-06-13, 13:35:09
Sobald man sich mal von dem normalen Zeugs ein bißchen entfernt, wird es aber imho sehr schnell ungeheuer komplex, und auch ein bißchen schmuddelig. Wer sich z.B. mal die Dokumentation für das DataGridView Control genau anschaut, kann sich locker wochenlang damit beschäftigen. Und .NET suggeriert, dass man sich mal ganz fix ne Datenbank in ein Programm reinklatschen kann, und das wars schon.


da stimme ich dir zu. allerdings stellt sich die frage, ob jemand der gerade anfangen möchte schon am anfang irgendwelche "abgefahrene" dinge umsetzen möchte.

genau diese aussage bekräftigt dies doch:

Imho ist Visual Studio enorm stark darauf getrimmt, die 08/15 Aufgaben im Arbeitsalltag sehr, SEHR schnell umsetzen zu können. Der Graphics Designer ist super, und die Standardkomponenten sind ungeheuer mächtig.

man kommt mit den standardfunktionen sehr schnell ein ergebnis. um den erfolg noch weiter auszudehnen, kann man sich auch sehr schnell ne gui zusammenklicken. für die einfachen grundlagen des programmierens reicht dies doch. zumal es etliche beispiele von microsoft und generell im internet gibt und die express-editionen kostenlos zur verfügung stehen.

möglich, dass es für den einstieg nicht das optimalste ist (sofern es überhaupt an dieser stelle etwas optimales gibt), allerdings halte ich es auch nicht für das falscheste.

aber vielleicht reicht dem TS ja auch die obige genannte variante von smallbasic.

Monger
2009-06-13, 14:00:06
da stimme ich dir zu. allerdings stellt sich die frage, ob jemand der gerade anfangen möchte schon am anfang irgendwelche "abgefahrene" dinge umsetzen möchte.

Das kommt imho darauf an, wo du hin willst. Wenn du nur hin und wieder mal was kleineres programmierst, ist es wichtig dass man schnell zu Resultaten kommt.

Wenn es aber darum geht, eine Sprache wirklich zu verstehen, und die Mechanik und den Sinn hinter dem ganzen Gerüst zu verstehen (sei es fürs Studium, oder weil man mal anspruchsvollere Aufgaben wie Projektentwicklung im Team o.ä. machen will), ist die Theorie dahinter wichtig.
Alle modernen Sprachen sind äußerst mächtig und umfangreich, aber imho besteht gerade bei .NET die Gefahr, dass man sich in Details verzettelt. Da empfinde ich Java als sauberer, kompakter und strukturierter.

Ich finde, dessen sollte man sich bewusst sein. Es gibt in .NET auch viel Legacy Krams was ganz schön verwirrend sein kann. Klar kann man sich auch da durchbeißen, geht alles. Aber es kostet Kraft.

Gast
2009-06-13, 15:03:14
Lohnt es sich eigentlich, eine Sprache auch über Visual Express (Basic, C++ oder C#) zu erlernen oder ist es Quatsch, weil das Programm alles für einen tut? Wie macht man das in der Ausbildung zu Fachinformatiker, weiß das jemand?

Aquaschaf
2009-06-13, 16:48:40
Wer .net oder C++ auf Windows programmiert wird in der Praxis Visual Studio benutzen. Es nicht zu benutzen macht wenig Sinn. Die integrierte Dokumentation und Hilfe ist besonders für Einsteiger sehr angenehm und beschleunigt das Lernen. Eine IDE die "alles für einen tut" gibt es nicht. Programmieren muss man überall schon selbst ;)

Matrix316
2009-06-15, 14:50:31
Für den Einstieg empfehle ich C.

C++ ist zu kompliziert für den Beginn
c# ist fast wieder zu einfach (aber wenn man mal die Basics weiß, mein Favorit!)
Java ist halt Java. ;)

Die (Visual) Basic Varianten finde ich alle irgendwie zu unübersichtlich. C ist schön zu überblicken mit Klammern und Semikolon und verwirrt nicht allzusehr mit :: und sonstigen <> Zeichengerühr. ;)

PHuV
2009-06-15, 15:45:51
Unterm Strich ist aus meiner Sicht Java eine der Sprachen die am wenigsten Murks drinn haben, auch wenn es durchaus die eine oder andere Problemstelle gibt.

Na, da kann ich aber was anderes berichten. Wenn man komplexe Dinge programmiert, kommt mit Java u.U. genau so viel Murks wie in allen anderen Sprachen raus.

Der_Donnervogel
2009-06-16, 02:26:51
Unterm Strich ist aus meiner Sicht Java eine der Sprachen die am wenigsten Murks drinn haben, auch wenn es durchaus die eine oder andere Problemstelle gibt.
Na, da kann ich aber was anderes berichten. Wenn man komplexe Dinge programmiert, kommt mit Java u.U. genau so viel Murks wie in allen anderen Sprachen raus.Ich sehe nicht so wirklich den Widerspruch zwischen unseren beiden Postings. ;) Java ist keinesfalls der heilige Gral der Programmierung. Das habe ich nie behauptet. Es hat seine Limitierungen und Designfragwürdigkeiten und man kann damit auch verhunzte Programme schreiben. Trotzdem ist es alleine schon vom Design her sauberer und robuster als manche andere Sprachen (z.B. C). Es gibt aber auch durchaus andere Sprachen auf dem selben Level (z.B C#), die jeweils ihre Vor- und Nachteile haben. Nimmt man so eine Sprache wird man im Verhältnis wohl weniger Murks erzeugen als mit schlechteren, ganz ausschließen kann man es aber natürlich nicht. Ich hoffe das hat die Sache etwas aufgeklärt.

Tiamat
2009-06-16, 09:11:27
Also ich mach mal ne Kategorisierung , die das ganze sicher anschaulicher werden lässt. Stell es dir wie beim Boxen vor. Du bist absoluter Amateur und hast freie Auswahl an sämtlichen Klassen, die es im Boxen gibt :
Leichtgewicht, Mittelgewicht, Schwergewicht, Super-Schwergewicht.

Wäre es als Amateur denn clever gleich in die (Super)Schwergewichtsklasse zu wandern ? Nein! weil da kriegt ich ja nur´s aufs Maul, Bingo ;D
Ich glaube das Beispiel lässt sich ganz gut übertragen, weil da was wahres dran ist ;D

Es gibt definitiv Leute, die beruflich, studiumstechnisch gleich in die Schwergewichtsklasse wandern müssen und auch ebenso begeisterte die das tun, aber ob das ein empfehlenswerter Einstieg für ALLE ist, wag ich zu bezweifeln.

Such dir was gemütliches aus und lern erstmal die grundlegenden Kontrollstrukturen( die mehr oder weniger überall gleich sind ) sicher anzuwenden und die Objektorientierung kennen.
Mit Ruby hab ich mich mal n paar Tage auseinandergesetzt und das macht auf mich n wirklich guten Eindruck.

Hier gibt´s ein interaktives Tutorial und Infos: http://www.ruby-lang.org/de/

ooAlbert
2009-06-16, 09:48:32
bei der Ausbildung musst du zwei Dinge unterscheiden einmal deinen Ausbildungsbetrieb und einmal die Berufsschule. Beides hat in der Regel nichts miteinander zu tun. Was bei dir vor Ort die entsprechenden Berufsschulen als Sprache einsetzen kannst du dort erfahren, viele sind auf dotNet umgestiegen. Ansonsten wirst du dort weniger wirklich was programmieren sondern eher die Konzepte dahinter lernen. Als erstes natürlich die Strukturierte Programmierung dann die Strukturierte Analyse und dann die Objektorientierung zum Schluß Objektorientierte Analyse mit UML. so in etwa sieht das dort aus. Über Qualität und Quantität lässt sich leider wenig sagen, weil das sehr auf den entsprechenden Lehrer ankommt und wie ernst er seinen Job nimmt.

Für das Ausbildungsunternehmen musst du dir überlegen wo du hinwillst und was die da machen. Da gibt es momentan eigentlich nur drei Schwerpunkte: Datenbanken, Web, Desktopanwendungen.

Falls du dich in der windowswelt bewegst und das auch weiter tun willst wäre sicher dotNet(C#), MS-SQL und ASP.Net interessant.
In allen anderen Fällen ist Java sehr von Vorteil, auch in hinblick auf Oracle. zusätzlich dann natürlich noch PHP.

PocketPilit
2009-06-16, 21:48:51
Also in der Schule habe ich Delphi gelernt, fand ich damals als guten Einstieg, da einfach zu lernen und zu verstehen. Danach ging's an der Uni mit Java weiter..
Würde auch jedem empfehlen, der mal studieren möchte, sich Java schonmal einzuarbeiten, damit man eine gute Grundlage hat.
Ansonsten ist man natürlich sehr offen in dem, was lernen sollte, denn das richtet sich danach, was man selbst möchte oder von einem gefordert wird..