# Welche Programmiersprache - Java oder .NET?



## KratzeKatze (3. August 2012)

Hallo PCGH'ler,

ich kann nächstes Semester einen Programmierkurs belegen und eine der beiden oben genannten Programmiersprachen in ihren Grundzügen erlernen. Da ich aber beide nicht so gut kenne, frage ich mich, was am besten ist.

Im Moment studiere ich BWL, könnte mir aber vorstellen, eventuell einen (Wirtschafts-)Informatik-Master aufzusatteln und später in einem IT-nahen Bereich zu arbeiten. Außerdem würde ich mich gerne mal an das Thema Android-Apps heranwagen und mir vielleicht kleinere Apps erstellen.

Vorkenntnisse habe ich nur geringfügig, ich kann etwas VB, JavaScript und Python.

Was würde sich allgemein besser eignen für mich? Was ist einfacher bzw. was breiter gestreut (habe z.B. irgendwo gelesen, dass andere Sprachen z.T. auf .NET aufbauen und man daher, sofern man .NET beherrscht, leichter andere Sprachen erlernen kann - stimmt das?)?


----------



## shady1080 (3. August 2012)

Beide Sprachen sind unglaublich ähnlich, du kannst Java Code in C# fast copy/pasten... Von der Einfachheit geben Sie sich auch nichts, beide voll objektorientiert, beide sehr modern, typsicher usw... Es bieten auch beide überdurchschnittlich gute Programmierumgebungen (Visual Studio und Eclipse zum Beispiel).

Wenn du sagst, dass du in nächster Zeit Android programmieren willst, dann nimm Java. Weil damit werden Android Apps geschrieben. Wenn du die ganzen Vorzüge der "Microsoft-Welt" mitnehmen willst (bei Wirtschaftsinformatik sicher ein Thema) dann nimm C#. Aber auch wenn du später draufkommst du willst die andere Sprache beherrschen, brauchst du nur sehr kurze Zeit um umzusatteln.

Wenn du dich aber wirklich mit Programmieren beschäftigen willst, rate ich dir die Basics zu lernen (Stichwort Patterns, Architekturen, Testing usw.). Diese Sachen sind bei fast allen Sprachen gleich und entscheiden am Schluss darüber wie gut dein Code ist!


----------



## Kellerkind79 (3. August 2012)

Grundsätzlich sind beide Sprachen sehr ähnlich. Ich persönlich finde JAVA etwas einfacher, aber das liegt wohl daran, dass ich damit schon mehr Erfahrung habe. Wenn Du Anwendungen für Windows schreiben willst, würde ich aber auf jeden Fall C# nehmen.
VisualStudio und das .Net Framework bringen halt schon von Haus aus viele Möglichkeiten mit, die Du Dir bei Java erst wieder aus Fremdbibliotheken zusammensuchen musst.
Wenn Du allerdings Apps für Android entwickeln willst, kommst Du an Java und Eclipse als Umgebung kaum vorbei.
Grundsätzlich machst Du mit keiner der beiden Sprachen etwas falsch und viele Konzepte überschneiden sich. "Von Haus aus" ist C# etwas "mächtiger", wobei Du natürlich auch mit JAVA alle Ziele erreichen kannst. Wenn man aber eine dieser Sprachen kann, ist es relativ einfach, sich die jeweils andere auch noch anzueignen. Wie shady1080 schon geschrieben hat, sind die objektorientierten Konzepte weitestgehend gleich.


----------



## fadade (3. August 2012)

Kurz und knapp: egal
Wenn es eh erstmal nur ein "Grundkurs" ist ...

Es stimmt zwar, dass auf .NET einige Sprachen aufbauen, aber das heißt nicht, dass man andere .NET-Sprachen besser kann, sofern einem eine schonmal geläufig ist; dazu muss man sich eben etwas tiefer im Framework auskennen


----------



## Crymes (3. August 2012)

Wenn du wirklich die Grunddinge verstehen willst, rate ich dir erstmal zu C.
Da gibt's dann nicht so was praktisches wie Convert.ToString, sondern eine eigene Funktion, die richtige Parameter braucht und schnell jeden Fehler verübelt.


----------



## KratzeKatze (3. August 2012)

fadade schrieb:


> Es stimmt zwar, dass auf .NET einige Sprachen aufbauen, aber das heißt nicht, dass man andere .NET-Sprachen besser kann, sofern einem eine schonmal geläufig ist; dazu muss man sich eben etwas tiefer im Framework auskennen


 
Das meinte ich auch nicht, dass man dadurch andere Sprachen besser kann, sondern einfach, dass das eine Art "Startvorteil" ist, weil man bestimmte Muster und evtl. ganze Codeschnipsel wieder erkennt und das ist ja auch durchaus wichtig, wenn man was programmieren will.

Mal rein interessehalber: für Android-Apps eignet sich Java sicher gut, aber wie sieht das bei iPhone-Apps aus? Da wäre es wahrscheinlich eher C#, oder?


----------



## Freddycbv (3. August 2012)

Laut dieser Seite werden Iphone-Apps in Objective-C programmiert, mithilfe des Cocoa Touch Frameworks
hat mich auch interessiert


----------



## KratzeKatze (3. August 2012)

Freddycbv schrieb:


> Laut dieser Seite werden Iphone-Apps in Objective-C programmiert, mithilfe des Cocoa Touch Frameworks
> hat mich auch interessiert


 
Danke für den Link! Da steht ja weiter unten noch: _"Kenntnisse in C++, Java oder C# sind praktisch."_ Also werde ich mich wahrscheinlich für Java entscheiden und mich nebenbei noch selbst mit C# auseinander setzen.

Falls jetzt noch einer ein gutes C# Tutorial für mich hat, bin ich restlos glücklich.


----------



## Skysnake (4. August 2012)

Nimm bitte NICHT.net oder C#.... 

Die Sprachen sind enfach darauf ausgelegt, das man Sie mit VS nutzt, und VS verhunzt dir deinen Programmierstiel...

Es ist einfach kacke wenn man anfängt mit VS, das einem viele Freiheiten lässt und so manches glatt bügelt, was eigentlich nicht geht. Da kommt man echt in Teufelsküche, wenn man dann ohne VS arbeiten muss, und einem dann die Programme um die Ohren fliegen.

Daher bitte allgemein als Ratschlag. Wenn du eine Programmiersprache lernen willst, egal welche, nutz am besten nur nen stink normalen Texeditor, der Syntaxhighlithing kann und das wars. Da musst du dann nämlich zu 100% sauber programmieren, und das hilft einfach unglaublich, damit sich die Sachen einfach einschleifen. Zudem ist Java in der Wirtschaft sehr beliebt, einfach weil es auf praktisch allem läuft und eben unabhängig von Microsoft ist. Grundsätzlich sollte man sich nur auf derartige fest eingebundene Umgebungen einlassen, wenn man es muss. Man verliert einfach seine Flexibilität und Freiheit dadurch.

Flexibilität und Freiheiten aufgeben ist einfach. Sich in diese aber einarbeiten und neu gewinnen dafür schwer.

C/C++ sind daher auch immer eine Überlegung wert anstelle von Java.

PS: Unter Java darf man sich sogar Eclipse als IDE gönnen, einfach weil Eclipse nicht sonderlich in den Code rein pfuscht und es eben DIE IDE unter Java ist.


----------



## JimSim (4. August 2012)

Ich stimme Skysnake da zu. Außerdem würde ich aber erstmal gar nicht so viel wert auf das eigentliche Programmieren legen, sondern zu aller erst einmal lernen was es mit der objekt orientierten Programmierung auf sich hat. Das Konzept sollte man wirklich verinnerlicht haben, wenn man mit Java arbeitet.


----------



## TheLax (5. August 2012)

Hey 
Ich studiere Winfo und bei uns wurde fast ausschließlich Java behandelt. Es gab lediglich ein paar Seitenhiebe zu Php was allerdings sehr überschaubar war.
Wenn du schon etwas Erfahrung mit Java hast, würde ich dir das Buch "Java ist auch eine Insel" von Galileo Computing empfehlen. 
Einerseits ist es ein prima Nachschlagewerk falls man sich bei manchen Dingen nicht mehr ganz sicher ist und andererseits findet man dort auch verständliche Erklärungen zu den meisten grundlegenden Sachen.

Den Vorschlag von JimSim finde ich nicht schlecht, allerdings wäre es vlt besser bei noch grundlegenderen Dingen mit dem Verständnis anzufangen.
Also gewissermaßen ein grundsätzliches Verständnis für Logik im Bezug auf die Programmiersprache schaffen, indem man sich beispielsweise zunächst mit boolscher Algebra beschäftigt um einen Bezug zur Logik der verwendeten Ausdrücke ( z.B. binäre Basisfunktionen) zu erhalten.
Anschließend wäre es vlt eine gute Idee sich mit dem sog. algorithmischen Denken zu befassen, denn ich habe schon viele Leute gesehn, die sich garnicht so darüber im Klaren waren, was in so einer Programmierschleife eigentlich so alles geschieht. Das liese sich am einfachsten mit etwas Pseudo-Code und ein Fließdiagrammen(UML-Aktivitätendiagramme FTW!) veranschaulichen.
Und erst wenn das soweit verstanden wurde, würde ich mich an Java und ggf. die OOP machen.
LG


----------



## DarkMo (5. August 2012)

also da java un .net complett oop basierte sprachen sind, find ich die zum starten auch ned sooo doll. geht zwar sicher auch, aber bis man mal wirklich kapiert, WAS man da macht... ich mein, mit klassen arbeiten is halt nunmal als beginner nich "normal". man sollte erstmal die grundlagen lernen ohne irgendwelche klassen. also die schleifen halt, wie man mit strings arbeitet (was ja grad bei c *urgs* is ^^) und dergleichen.

und wenn wir ehrlich sin: das is ÜBERALL so ziemlich das gleiche >< also völlig latte, was man programmiert *find* die unterschiede kristallisieren sich doch eh erst heraus, wenn man sehr viel tiefer in der materie steckt. php find ich ganz witzig, da man hier gleich bissl webseiten bau betreiben kann und sich vllt auch schon an ne datenbank trauen kann. aber vllt isses deswegen auch wieder ungeeignet, da man hier html, php und ggf sql und js alles in einem hat >< sprich, es verleitet, vom eigentlichen thema abzuschweifen ^^

naja, also meine empfehlung wäre: irgendwas nicht oop mäßiges lernen. sich hier einarbeiten und von hier aus (mit selbst gebauten listen als krönung) in die oop geschichte einarbeiten. wenn man weis, was oop eigentlich bedeuted, was es bezweckt und tut, dann kann man auch mit ner oop orientierten sprache weitermachen. der "unterbau" is ja wie gesagt eh so ziemlich das selbe, man verliert also nix.


----------



## Skysnake (5. August 2012)

Ähm... und woher weiß er was oop ist?

Ach ja richtig, von nirgends am Anfang, daher wird er es auch nicht machen, und sich auch keinen Kopf drum machen 

Das ist doch das schöne an Sprachen wie C++ und Java. Sie sind zwar oop aber du musst es nicht nutzen, wenn du keinen bock drauf hast. Das ist alles nur ein kann, kein muss!


----------



## JimSim (5. August 2012)

Ne, Java zum Anfang ist schon okay. Nur braucht der Anfang bei ner OOP basierten Sprache halt etwas länger. Besser man verinnerlicht direkt zu beginn den Umgang mit Objekten. "Vergessen" kann man das dann immer noch, aber sich das später anzugewöhnen ist manchmal nen bisschen schwierig.

@TheLax
Auch wenn Schaltalgebra und UML Diagramme etc. nicht schlecht sind um ein tieferes Verständnis vom Programmieren zu gewinnen -  absolut notwendig ist es meiner Meinung nach nicht. Zumindest nicht bevor man überhaupt angefangen hat. Aber ich bin auch immer eher der praktisch veranlagte Mensch... learning by doing try and error.


----------



## Skysnake (5. August 2012)

Eben, man fängt einfach mal an, und KEIN Programmierkurs fängt direkt mit OOP ab. Wenn kommt das erst ab der Hälfte oder sogar erst im letzten Drittel. Da kannst du dann aber "quasi" schon programmieren.

Es ist halt einfach nur nach dem Punkt, wo eine nicht oop Sprache aufhört noch was dran gehängt. Mehr ist das nicht... Daher ist es zum lernen auch scheis egal, ob ne Sprache oop ist oder nicht...


----------



## DarkMo (5. August 2012)

es wurde aber auch c# genannt, und da ist oop die grundlage. da ist ALLES eine klasse ^^ klar kann man auch damit arbeiten, wenn man einfach alles in die "startklasse" legt - was aber halt nich unbedingt den zweck erfüllt ^^ und am ende is man nur verwirrt, weil man den unterschied zw "normaler"/"ursprünglicher" (wie nennt man das am dümmsten  ) programmierung und der oop-weise nur schwer erkennt und sich vllt sagt "das mach ich doch nu scho laufend mit diesem class gedöhnse, was soll mir das jetz bringen". wenn java da wie c++ war ok, dachte das wäre auch scho so wie c# ^^


----------



## JimSim (5. August 2012)

@Skysnake
Naja, doch... schon. Bei Java fangen meiner Erfahrung nach zumindest viele Bücher direkt mit OOP an, oder machen das zumindest sehr sehr früh. Ich hab gerade nochmal nachgeguckt, das Buch mit dem ich angefangen habe Java zu lernen behandelt OOP auch gleich im ersten Kapitel. Ich finde das eigentlich richtig so... Aber gut, ist vielleicht Geschmackssache wann man das macht und so ganz ohne Programmiererfahrung mag das OOP Konzept vielleicht etwas zu abstrakt sein...

Ist halt die Frage was man lernen möchte... Will man einfach nur lernen wie man programmiert, also die Grundkenntnisse, dann kann man auf OOP wohl verzichten. Wenn man aber wirklich Java lernen möchte, dann finde ich sollte man sich schon mit dem OOP-Konzept befassen. Auch wenn man Java natürlich auch nicht objekt orientiert schreiben kann, ist es doch elementarer Teil der Sprache.

@DarkMo
Auch in Java hat man immer Klassen. Im Prinzip das gleiche wie in C#. Man kann auch nicht OOP-konform programmieren mit mehreren Klassen... Hab ich am Anfang auch schon aus versehen gemacht.  Gab komische Resultate.


----------



## DarkMo (5. August 2012)

ich will ja ned sagen, dass man sich jahrelang mit der prozeduralen programmierung abrackern soll. aber es is mMn nunmal die grundlage. methoden sind sogesehn auch nur prozeduren ^^ nur eben ned global sondern lokal in der klasse. aber man sollte wenigstens den unterschied kennen. man sollte auch erkennen, welche möglichkeiten einem die oop bietet. das kann man doch garnich abschätzen, wenn man nix andres kennt. mehr will ich doch garnich sagen ^^ sehr viel is das ja nich, was non oop is. aber auch das kann einem schon helfen.


----------



## shady1080 (6. August 2012)

In allen mir bekannten Informatik-Studiengängen wird Programmieren mit einer Sprache begonnen die mehr oder weniger objektorientiert ist. Java und C# eignen sich sehr wohl weil man mit dem objektorientierten Code zu Beginn nur sehr wenig in Berührung kommt und trotzdem ALLE Grundlagen der prozeduralen Programmierung lernen kann (wie sinnvoll das ist, sei dahingestellt...)

Und mit boolscher Algebra programmieren anzufangen, macht doch ehrlich gesagt kein Schwein. Ja klar, an den Unis wird es parallel dazu unterrichtet aber zu Beginn NUR mit true/false rumzurechnen ist alles andere als motivierend.

Also irgendeine Sprache nehmen und anfangen, es ist viel wichtiger dass es Spass macht und nicht die absolut zukunfsträchtige Sprache ist!


----------



## Skysnake (6. August 2012)

Das ist durchaus korrekt, ich würde dennoch nie mit so einer "MS" Sprache wie C# anfangen....

C/C++ oder Java, ansonsten noch Python oder von mir aus auch noch Perl, das sind die Sprachen der Wahl, mit denen man dann einen soliden Grundstock gelegt hat, auf den man sehr sehr sehr gut aufbauen kann. Gerade Python ist da auch gar nicht so schlecht, weil es dich durch seine vorgegebene Struktur dazu zwingt, lesbaren Code zu schreiben 

Dagegen spricht allerdings, das man so sehr auf build-in-functions trainiert wird. Genau wie eben einiges mit "Magie" passiert, was nicht so toll ist, wenn man später auf C/C++ oder Java umsattelt. 

Überhaupt eignen sich daher C/C++ und Java am besten für den Einstieg. Auf andere Programmiersprachen um zu steigen fällt einem von diesen sehr einfach. Wenn man Python kann, kann man aber nicht zwingend Java oder gar C/C++


----------



## JimSim (6. August 2012)

Wie wäre es mit Prolog? Die hab ich in der Schule als erstes gelernt.


----------



## Skysnake (6. August 2012)

Hab ich mir angeschaut. Ist zu weit weg von anderen Programmiersprachen. Ist zwar schön, wenn man es kann, wird dir aber wohl bei anderen Programmiersprachen nicht sonderlich viel weiter helfen. Zumindest erkenne ich bei den Beispielen nicht wirklich viel  Und ich kann C/C++, Java, Python, CUDA, OpenCL, OpenGL usw.


----------



## JimSim (6. August 2012)

War nen Scherz. 
Prolog ist ne rein logische Programmiersprache. Die kann nichts außer reiner Logik berechnen. Man definiert irgendwelche logischen Aussagen und kann dann dementsprechend Abfragen machen. Bspw. "Ist Anna die Tochter von Bernd?" oder solche Späße....


----------



## Magic12345 (6. August 2012)

Objective-C für iOS basierte Geräte bzw. auch um für MacOS zu programmieren ist schon ganz schön unterschiedlich zu C#. Das geht schon bei den grundsätzlichen Anforderungen los: man braucht einen Mac und XCode.

Ich würde Java als Kurs machen und C# .NET nebenbei privat dazulernen!


----------



## DarkMo (6. August 2012)

wollts grad sagen ^^ wenn du zw prolog und c parallelen enddeckst - hör auf das zeug zu rauchen ^^

prolog ist gut für "experten systeme" oder auch KI und sowas ist wohl gerade mit den logischen sprachen top zu realisieren. jedenfalls viel viel handlicher wie mit den imperativen sprachen (c, java...).

um mal das bsp aufzugreifen "Ist Anna die Tochter von Bernd?": in nem prologprogramm hat man halt eine fakten-basis und noch nen "paar" regeln. is lange her, also sehts als grobes bsp. die fakten für das bsp wären jetzt
mensch(Bernd).
mensch(Anna).

jetzt könnte man zum bsp schon fragen, ob anna oder bernd menschen sind ^^ die "frage" mensch(x)? (oder wie auch immer das war) würde mit x = Anna, Bernd beantwortet werden. also "wer ist ein mensch?" - "Anna und Bernd sind menschen". mensch(Anna)? - ja wäre die erste frage dann. wie gesagt, is lange her, aber irgendwie so ging das.

so, und um komplexität reinzubringen, kann man noch andere regeln definieren:
tochter(Anna, Bernd). - anna sei die tochter von bernd. wie man das nu selbst interpretiert, muss man sich halt merken ^^

fragt man jetzt tochter(x, Bernd)? kommt als antwort eben x = anna. jetz kann man das noch alles anders gestalten, zum bsp nennt mans nich tochter sondern kind und als fakten kommen noch hinzu männlich(Bernd) und weiblich(Anna). nun kann man ne neue tochter regel aufstellen ala tochter(kind(x, bernd) & weiblich(x))? wenn wir jetz noch nen kind(ralf, bernd). männlich(ralf). dazu basteln, würden beim ersten x in der anfrage anna und ralf in frage kommen, da ralf bei weiblich(ralf) aber failed, fliegt er raus und übrig bleibt nur anna.

also, damit lässt sich schon spaß haben. nur ist es ne komplett andere denkweise und daher für viele (inklusive mir ^^) nur schwer zu verstehen, wenn man ausschließlich mit imperativen sprachen "aufgewachsen" is ^^


----------



## TheLax (8. August 2012)

shady1080 schrieb:


> In allen mir bekannten Informatik-Studiengängen wird Programmieren mit einer Sprache begonnen die mehr oder weniger objektorientiert ist. Java und C# eignen sich sehr wohl weil man mit dem objektorientierten Code zu Beginn nur sehr wenig in Berührung kommt und trotzdem ALLE Grundlagen der prozeduralen Programmierung lernen kann (wie sinnvoll das ist, sei dahingestellt...)
> 
> Und mit boolscher Algebra programmieren anzufangen, macht doch ehrlich gesagt kein Schwein. Ja klar, an den Unis wird es parallel dazu unterrichtet aber zu Beginn NUR mit true/false rumzurechnen ist alles andere als motivierend.
> 
> Also irgendeine Sprache nehmen und anfangen, es ist viel wichtiger dass es Spass macht und nicht die absolut zukunfsträchtige Sprache ist!



Naja, man weiss ja nie so genau wie sehr sich jemand vorher mit solchen Themen auseinander gesetzt hat, und der Hinweis ging auch eigentlich eher in die Richtung sich das ganze einmal anzuschauen und dann entsprechend sinnvoll in einem Programmierbeispiel anzuwenden. Beispielsweise könnte man sich in der Hinsicht schon völlig austoben, wenn man ein Programm schreibt, dass ein zufälliges Datum generiert und dieses dann auf ein Schaltjahr prüft.


----------

