Ist Java oder C# für Anfänger leichter zu erlernen?
-
DEvent schrieb:
Naja, kannst du einfach dein .NET2.0 oder .NET3.0 Projekt nehmen und es auf anderen Plattformen einfach so laufen lassen? Mit Java, Python, Perl, Ruby, usw. kannst du das. Auch gibt es nur Mono für Linux. Wie sieht es mit Solaris, MacOS, *BSD aus?
Kann ich mit einer Java Anwendung auch nicht. Für ein Hello World Programm stimmts, für eine Kommerzielle Anwendung nicht.
Das Plattform-Unabhängigkeit nur darauf beruht ein Programm ausführen zu können, das ist Marketing.
Java ist alles bloss nicht Plattformunabhängig.
-
Spontan fallen mir nur zwei Dinge an, die man bei Java beachten muss:
1. Filezugriff: man sollte natürlich keine OS-spezifischen Separatoren hart verdrahten. Java übersetzt hier den / in Pfadangaben direkt für die richtige Plattform. Solange man hier also keinen \ benutzt, ist man auf der sicheren Seite.
2. JNI: wenn man native Bibliotheken einsetzt, dann muss man die natürlich für jede Plattform bereit stellen und beim Build berücksichtigen.JNI ist ein Spezialfall und Filezugriff sollte nun wirklich jeder plattformunabhängig hinbekommen, der halbwegs klar denken kann.
Aber du kannst ja mal erzählen, was es sonst noch alles zu beachten gibt.
-
ihoernchen schrieb:
Java ist alles bloss nicht Plattformunabhängig.
klar isses das, du darfst nur keine faxen machen, die nur auf einer plattform möglich sind (z.b. als pfad-trenner \ nehmen, anstatt System.getProperty("file.separator"), usw.). Java kann nichts dafür, wenn du fehler machst.
-
byto schrieb:
Bin kein .NET Experte aber meiner Erfahrung nach ist WPF sowohl WinForms als auch GTK# haushoch überlegen. Ich empfinde es als extreme Einschränkung, auf WPF verzichten zu müssen, um plattformunabhängig zu bleiben.
1. Hat WPF auch seine Nachteile (Ressourcenhunger).
(Unabhängig davon das ich WPF vom Grundsatz als sehr gelungen ansehe).2. Sind auch in Java bestimmte UI-Bibliotheken erst nachträglich hinzugekommen.
3. Muss man bei WPF auch betrachten, ob bereits alle zu unterstützenden Plattformen überhaupt abgedeckt werden (sofern sich nichts geändert hat, wird 2000 nicht unterstützt - was durchaus noch gewisse Verbreitung geniest).
Wenn man schon für oder wieder einer Sprache diskutiert, sollte man sich nicht auf irgendwelche Vorurteile versteifen. So wie man unter Java sowohl plattformabhängige wie auch plattformunabhängige Programme schreiben kann, kann man dies auch unter C#. Gerade die aktuellen Monoversionen scheinen mir schon relativ weit gekommen zu sein (Von ein paar Teilbibliotheken die sehr Systemabhängig sind - wie z.B. WPF - einmal abgesehen). Das Java Mono um ein paar Jahre voraus ist, ist ebenso klar. Dafür konnte z.B. C# als neuere Sprache von den Älteren durchaus lernen, und ein paar Probleme umschiffen (was nicht heißt, das C# nicht auch gewisse Probleme mitbringt).
cu André
-
ich meinem Tutor an der Uni Java 1.6 Programme abgeben konnte
Und deswegen ist Java nicht plattformunabhaengig. Java ist eine Plattform. Wie sich das bei C# verhaelt, kann ich nicht beurteilen. Ich habe bisher einen grossen Bogen um C# gemacht.
naja, da C# zum grossen teil ein Java-nachbau ist
Und Java nur ein C++ Nachahmer ...
hauptsache kein C++ oder sowas
Und taeglich gruesst das Murmeltier ...
Industriestandard
Was bedeutet denn Industriestandard? Darueber gibt es einige Essays von Paul Graham.
Was aber nicht heisst, dass Mono in Zukunft sowas nicht auch unterstützen wird
Es ist schwierig mit ungelegten Eiern zu programmieren.
-
knivil schrieb:
ich meinem Tutor an der Uni Java 1.6 Programme abgeben konnte
Und deswegen ist Java nicht plattformunabhaengig. Java ist eine Plattform.
-
knivil schrieb:
ich meinem Tutor an der Uni Java 1.6 Programme abgeben konnte
Und deswegen ist Java nicht plattformunabhaengig. Java ist eine Plattform. Wie sich das bei C# verhaelt, kann ich nicht beurteilen. Ich habe bisher einen grossen Bogen um C# gemacht.
Das ist bei C# ähnlich (Wobei es derzeit nur 3 Hauptversionen 1.0, 1.1, 2.0 und Ergänzungen zu 2.0 [3.0, 3.5]) gibt. Java hat plattformübergreifend eine bessere Unterstützung, .Net ist dafür relativ unabhängig von der Sprache (ob C#, VB...). Beides hat seine Vor- und Nachteile.
-
knivil schrieb:
Und deswegen ist Java nicht plattformunabhaengig. Java ist eine Plattform.
eine plattformunabhängige plattform, sozusagen eine plattform höherer stufe.
knivil schrieb:
naja, da C# zum grossen teil ein Java-nachbau ist
Und Java nur ein C++ Nachahmer ...
wie? nö, also das nun wirklich nicht, wäre ja furchtbar. Java hat mit C++ nur soviel gemein, dass beides sprachen mit C-ähnlicher syntax sind.
-
Ich glaube einige in diesem Forum kennen die Bedeutung des Begriffs Plattformunabhängig nicht. Ich behaupte jetzt mal, dass VisualBASIC auch Plattformunabhähngig ist weil man dafür auch einen Compiler für Linux und Mac schreiben kann.
-
player4245 schrieb:
Ich glaube einige in diesem Forum kennen die Bedeutung des Begriffs Plattformunabhängig nicht. Ich behaupte jetzt mal, dass VisualBASIC auch Plattformunabhähngig ist weil man dafür auch einen Compiler für Linux und Mac schreiben kann.
^^ du musst schon irgendwo 'ne grenze setzen. wie ich schon schrieb, kann man sonst alles für plattformunabhängig erklären. lass uns diese grenze mal dort stecken, wo man neu compilieren muss. dann sind per definition nur noch solche sprachen plattformunabhängig, für die es auf der jeweiligen plattform einen interpreter gibt (für source- oder byte-code, etc.). also, write once - run anywhere bedeutet plattformunabhängigkeit, write once - compile anywhere nicht.
-
;fricky schrieb:
knivil schrieb:
naja, da C# zum grossen teil ein Java-nachbau ist
Und Java nur ein C++ Nachahmer ...
wie? nö, also das nun wirklich nicht, wäre ja furchtbar. Java hat mit C++ nur soviel gemein, dass beides sprachen mit C-ähnlicher syntax sind.
Java hat mit der C++ Syntax mehr gemein als mit der C Syntax.
Und Java hat (unter anderem) von C++ abgeschaut. Daran ist auch nichts verwerflich, und ist sogar verständlich (Den jeder Entwickler einer Sprache kannte vorher Andere, und wird dadurch geprägt - und hat in der Regel durchaus Vorstellungen was ihn an einer anderen Sprache gefallen oder gestört hat).
-
asc schrieb:
Java hat mit der C++ Syntax mehr gemein als mit der C Syntax.
sicherlich, schon weil es schlüsselwörter wie class, public, private, z.b. in beiden sprachen gibt, jedoch nicht in C. nur macht das Java noch lange nicht zum C++ nachahmer. dazu sind die unterschiede einfach zu gross. die Java-erfinder waren ziemlich unzufrieden mit C++ und wollten eine sprache entwickeln, die's besser macht und keinen C++-klon.
-
;fricky schrieb:
player4245 schrieb:
Ich glaube einige in diesem Forum kennen die Bedeutung des Begriffs Plattformunabhängig nicht. Ich behaupte jetzt mal, dass VisualBASIC auch Plattformunabhähngig ist weil man dafür auch einen Compiler für Linux und Mac schreiben kann.
^^ du musst schon irgendwo 'ne grenze setzen.
Die Frage ist nur wo. Und darunter verstehen wir eindeutig was anderes. Plattformunabhängigkeit heißt z.B. für mich, das Code nicht verändert werden muss, unabhängig von der Zielplattform (Und nicht ob der Code nun Interpretiert oder Compiliert werden muss).
Ganz davon abgesehen wird Java und C# Code heutzutage auch compiliert und läuft in der Regel nicht in einem reinen Interpreter. Der Unterschied ist nur wann die Compilierung erfolgt, ob es Zwischenstufen (Bytecode oder ähnliches...) gibt, und auf welcher Ebene die Compilierung einsetzt (z.B. ob der Code einmalig compiliert wird, auf Funktions-/Klassenebene beim ersten Zugriff...).
Und selbst wenn man die Plattformunabhängigkeit nach deiner Definition interpretiert: Für die gängigsten PC-basierenden Plattformen gilt dies sowohl für Java als auf .Net - sofern man keine Betriebssystemspezifischen Bestandteile verwendet. Nach meiner Interpretation gilt dies aber auch für beispielsweise C++, sofern man entsprechende Bibliotheken verwendet.
-
;fricky schrieb:
asc schrieb:
Java hat mit der C++ Syntax mehr gemein als mit der C Syntax.
sicherlich, schon weil es schlüsselwörter wie class, public, private, z.b. in beiden sprachen gibt, jedoch nicht in C. nur macht das Java noch lange nicht zum C++ nachahmer.
Das behaupte ich auch garnicht, wohl aber das sie sich unter anderem bei C++ bedient haben. Und ich als C++ Entwickler habe den Umstieg auf Java und C# recht einfach empfunden (nur bei der Bibliothek musste ich mich stärker umstellen).
;fricky schrieb:
die Java-erfinder waren ziemlich unzufrieden mit C++ und wollten eine sprache entwickeln, die's besser macht und keinen C++-klon.
Aber dennoch haben sie genügend von der Sprache übernommen um den Umstieg recht einfach zu gestalten.
-
Danke schonmal für die vielen Antworten.
Ich werden dann wohl mal einen Taschenrechner mit C# und mit Java umsetzen, und schauen was mir besser gefällt (auch wenn der Einblick in die jeweiligen Sprachen bis dahin kaum gegeben ist).
Was mir bisher mit meinem nahezu nicht vorhandenen Wissen an Java gefällt, ist die Tatsache das man die Programme auch für Macs schreiben kann, welche in den USA meines Wissens nach weiter verbreitet sind als Windows-PCs (wobei mir das als vermutlich ewiger Hobby-Programmierer (sofern ich überhaupt gefallen am programmieren finde) im Grunde egal sein kann).
An C# bzw. eigentlich ja an .Net, gefällt mir vor allem WPF in Kombination mit MVVM, wodurch man das Aussehen der Anwendung vom Programm trennen kann. Wobei das glaube ich auch mit MVC geht, wenn ich mich richtig erinnere.
P.S. ist das nur mein subjektiver Eindruck, oder sind .Net GUIs auf Windows etwas schneller als Java GUIs (beide in vergleichbarer Größe)?
-
Natürlich gauckeln Sprachen wie Java echte Plattformunabhängigkeit nur vor, indem sie für alle relevanten Betriebssysteme eine Laufzeitumgebung bereitstellen inkl. Standardbibliothek, die vom Betriebssystem abstrahiert.
Praktisch bedeutet das aber für einen Entwickler, dass man tatsächlich Anwendungen schreiben, deren Kompilat auf vielen verschiedenen Betriebssystemen lauffähig ist, ohne dass man explizit für ein bestimmtes OS kompilieren muss. Die gleiche Jar Datei läuft unter Windows und Linux und MacOS und Solaris und ...
Ob das jetzt so ein Killerfeature ist, muss jeder für sich selbst entscheiden. Meiner Meinung nach ist Plattformunabhängigkeit häufig überbewertet. Dass es aber in anderen Sprachen (ohne Laufzeitumgebung) wohl nicht immer so einfach ist, das Programm für jedes beliebige OS zu kompilieren, sieht man schon alleine daran, dass es nicht jedes beliebige Programm des einen OS auch für ein anderes OS gibt.
-
Stradivari schrieb:
Was mir bisher mit meinem nahezu nicht vorhandenen Wissen an Java gefällt, ist die Tatsache das man die Programme auch für Macs schreiben kann,...
Was auch für C# mittels Mono funktioniert (Wenn man auf WPF verzichtet, und statt dessen WinForms verwendet).
Stradivari schrieb:
An C# bzw. eigentlich ja an .Net, gefällt mir vor allem WPF...
P.S. ist das nur mein subjektiver Eindruck, oder sind .Net GUIs auf Windows etwas schneller als Java GUIs (beide in vergleichbarer Größe)?
1. Ist .Net an Windows angepasst, ich würde daher bei der Performance unter Windows auf .Net tippen.
2. Falls man WPF verwendet, wird DirectX verwendet [Dies ist auch der Grund warum es bislang noch keine Umsetzung für Mono gibt, da man ziemlich viel nachbasteln müsste - denkbar wäre eine Umsetzung mittels OpenGL, was aber ein recht aufwändiges Projekt werden könnte], was gleichzeitig die Hardwarebeschleunigung der Grafikkarte ausnutzt. Dies bekommst du weder mittels WinForms noch Java direkt geliefert. Gleichzeitig ist die WPF (aber nach meiner Erfahrung gilt dies auch für Java) derzeit nicht sonderlich sparsam mit den Ressourcen - daher kommt es auf die Anwendung drauf an.
-
byto schrieb:
Meiner Meinung nach ist Plattformunabhängigkeit häufig überbewertet.
Sehe ich ähnlich. Ich behaupte einfach mal, das es in vielen Projekten direkt oder indirekt mehr Geld kostet, eine Plattformunabhängigkeit zu erreichen, als man durch die Einschränkung auf eine Plattform verliert. Es gibt natürlich Ausnahmen.
Bei neuen Projekten würde ich vorher schauen wie groß das Potential auf den einzelnen Plattformen ist, und mich dann entscheiden ob es für das Projekt ein wichtiger Faktor ist, oder nicht. Teilweise kann man auch einen Teil Plattformunabhängig schreiben, und einen anderen Teil austauschbar gestalten.
-
Stradivari schrieb:
..., welche in den USA meines Wissens nach weiter verbreitet sind als Windows-PCs.
Nur in den feuchten Träumen von Steve Jobs
Der Marktanteil von Apple ist in den USA aber schon etwas höher als im Weltdurchschnitt. Aber Apple hat nicht mal 10% des US-Computermarktes.Siehe z.B:
http://www.gartner.com/it/page.jsp?id=724111Grüssli
-
asc schrieb:
P.S. ist das nur mein subjektiver Eindruck, oder sind .Net GUIs auf Windows etwas schneller als Java GUIs (beide in vergleichbarer Größe)?
Ich kann da ehrlich gesagt keinen großen Unterschied sehen. Java Swing ist seit Java 5 oder 6 GPU beschleunigt (DirectX, OpenGL). SWT ist eh nur ein Wrapper um native GUI Komponenten.
Du kannst das aber auch leicht selbst vergleichen. Es gibt ja für alle GUI Frameworks wirklich gute und freie Anwendungen. Einfach mal Eclipse IDE (für SWT), Intellij IDEA (für Swing) und z.B. Paint.NET (für WPF) testen und vergleichen. Beides gleich schnell/langsam.
Edit: Wichtig ist halt einfach, dass man keine rechenintensiven Operationen im Event Dispatch Thread macht, denn sonst hängt die Anwendung während der Repaints. Das trifft aber auf alle GUI Frameworks zu.