PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Welche Sprache ist "wichtiger" - Java oder C#?


wizardSE
2007-09-20, 00:09:03
Hallo,

welche Programmiersprache, Java oder C#, findet ihr als wichtiger beziehungsweise einflussreicher in Hinblick auf zukünftige Entwicklungen bzw. die Zukunft generell? Eine detaillierte und bedachte Begründung wäre wünschenswert. :)

Gruß
Wiz

Thomas(:
2007-09-20, 01:06:44
Kommt wie immer auf den Anwendungszweck an. In C# kann man sich schnell und einfach ein Windowsfrontend basteln, aber um einen schnellen, portablen und resourcensparenden daemon zu basteln wäre es wohl das falsche.

Gast
2007-09-20, 01:16:54
Ganz klar Java.

1. Es ist älter, d.h. das gibt's schon länger und konnte sich etabilieren und eine große Nutzerschar um sich scharen.
2. Wird an den Hochschulen gelehrt während C# eher zweitrangig ist.
3. Ist inzwischen inkl. der Java VM Open Source und steht unter der GPL. Ein Vorteil den C# nicht wirklich hat. Mono ist auch nicht so das wahre.
4. Gibt es dafür die bessere Entwicklungsumgebung (Eclipse) die auf nahzu allen Plattformen läuft und ausgereifte UML Programme inkl. Refraktoring.
VS C# läuft leider nur unter Windows.
5. Ist Java schon in Form von JavaMe bei den Handys nicht mehr wegzudenken.
6. Gibt es dafür eine ausgereifte Infrastruktur für Java Servlets vom Betriebssystem bis zum Webserver ist da alles da.
Wer ähnliches für C# haben will ist praktisch gezwungen auf Microsoft Betriebssysteme und Serverplattformen zu setzen, was IMO heutzutage im Internet keine gute Wahl mehr ist.

Den einzigen Vorteil den ich bei C# sehe ist der Zugang zu DirectX via XNA.
Wenn sich C# also noch behaupten will, dann nur dort.

Coda
2007-09-20, 01:50:14
Eclipse finde ich jetzt nicht unbedingt besser als Visual Studio. Nehmen sich nicht viel.

Microsoft holt bei den Webservern übrigens ziemlich auf in letzter Zeit.

Bietchiebatchie
2007-09-20, 02:47:03
Hallo

welche Programmiersprache, Java oder C#, findet ihr als wichtiger beziehungsweise einflussreicher in Hinblick auf zukünftige Entwicklungen bzw. die Zukunft generell? Eine detaillierte und bedachte Begründung wäre wünschenswert. :)

Gruß
Wiz
Zuerst was prinzipielles: Eigentlich macht nicht wirklich Sinn, sich auf die beiden Sprachen zu beschränken sondern man muss Technologien dahinter betrachten, also im Falle von Java eben die VM(...) und bei c# eben .net. (Insbesondere bei letzterem kann man problemlos mehrere Sprachen in einem Projekt kombinieren, also fällt die Wahl der Sprache eher unter persönliche Präferenz.)

Aber darauf wolltest du glaub ich gar nicht hinaus ;).
Daher beschränke ich mich mal auf die Sprachen an sich:


Im Moment geben sich Java und C# nicht wirklich viel, d.h. sind in etwa gleich verbreitet.
Prinzipiell ist die java-Community eben mehr open source orientiert, das äußert sich auch in der i.d.R. schnelleren Adaption/Implementierung von neuen Techniken (von der Community-Seite).


Ganz klar Java.
Schaun wir mal ;)


1. Es ist älter, d.h. das gibt's schon länger und konnte sich etabilieren und eine große Nutzerschar um sich scharen.

Beide Sprachen haben sich mittlerweile etabliert; Java hat wahrscheinlich immer noch einen höhere Nutzeranzahl.

2. Wird an den Hochschulen gelehrt während C# eher zweitrangig ist.

Jop, das stimmt sicher.

3. Ist inzwischen inkl. der Java VM Open Source und steht unter der GPL. Ein Vorteil den C# nicht wirklich hat. Mono ist auch nicht so das wahre.

Gegenfrage: was bringt mir - als Entwickler - der Fakt, dass Java unter GPL steht? Also ich kann dem weder was positives noch was negatives abgewinnen.

4. Gibt es dafür die bessere Entwicklungsumgebung (Eclipse) die auf nahzu allen Plattformen läuft und ausgereifte UML Programme inkl. Refraktoring.
VS C# läuft leider nur unter Windows.

Bin ich nicht 100% auf dem aktuellen Stand was Java angeht, aber ich gehe davon aus dass sich in Punkto Funktionsumfang die IDEs nicht wirklich großartig unterscheiden.
(Bei MS ist halt häufig der Vorteil, dass viele Dinge integriert sind, z.B. direkte Sql-Anbindung in VS etc.)

5. Ist Java schon in Form von JavaMe bei den Handys nicht mehr wegzudenken.

Wie verbreitet ist eigentlich .net compact framework? jemand ahnung?

6. Gibt es dafür eine ausgereifte Infrastruktur für Java Servlets vom Betriebssystem bis zum Webserver ist da alles da.
Wer ähnliches für C# haben will ist praktisch gezwungen auf Microsoft Betriebssysteme und Serverplattformen zu setzen, was IMO heutzutage im Internet keine gute Wahl mehr ist.

Das ist der einzige Punkt, wo ich entschieden widersprechen muss: Es ist doch bei einem WebService z.B. vollkommen egal was für eine Technologie dahintersteckt, angesprochen wird das ganze eh interoperabel.

Bezüglich Geschwindigkeit der Entwicklung (der Sprache) geht aber eindeutig ein Pluspunkt an C#. Knapp 6 Jahre alt und doch schon sehr, sehr viele Verbesserungen; angefangen von einem mehr-oder-weniger java-Klon(1.0) hat es sich zu einer vernünftigen Sprache, die alle Features abdeckt die man von einer objektorientierten general purpose Sprache erwarten kann (2.0) zu einer Sprache entwickelt, (achtung, jetzt werde ich sehr subjektiv ;) ) die jeder anderen Sprache die ich kenne, bei weitem überlegen ist (3.0). Dabei sind es nicht etwa die Features(Linq, Attribute, anonyme Typen, lambda-Abstraktionen, etc.) die nicht alle andere Sprachen beherrschen, sondern die Gesamtheit der Sprache, die es einem ermöglicht genau das zu auszudrücken, WAS man will, ohne 100% zu sagen, WIE das ganze genau im einzelnen berechnet werden soll.

Coda
2007-09-20, 02:56:41
...sondern die Gesamtheit der Sprache, die es einem ermöglicht genau das zu auszudrücken, WAS man will, ohne 100% zu sagen, WIE das ganze genau im einzelnen berechnet werden soll.
Kannst du das mal bitte genauer erklären?

del_4901
2007-09-20, 06:00:55
Eclipse finde ich jetzt nicht unbedingt besser als Visual Studio. Nehmen sich nicht viel.

Mit dem einen Unterschied, das VS keine 4GB Ram braucht.

3. Ist inzwischen inkl. der Java VM Open Source und steht unter der GPL. Ein Vorteil den C# nicht wirklich hat. Mono ist auch nicht so das wahre.
Das mit Mono ist wirklich schade, aber was will man machen?

4. Gibt es dafür die bessere Entwicklungsumgebung (Eclipse) die auf nahzu allen Plattformen läuft und ausgereifte UML Programme inkl. Refraktoring.
VS C# läuft leider nur unter Windows.
Schonmal die Team Editions angeschaut? Der Class Designer ist ein Hammer, nicht ganz so geil wie EA, aber Eclipse/Together hat da noch viel zu lernen. Ähnlich sieht es mt den GUI Tools aus.

5. Ist Java schon in Form von JavaMe bei den Handys nicht mehr wegzudenken.
JavaMe ist eine einzige Krankheit. (Bzw. die Handys die das angeblich unterstützen)

6. Gibt es dafür eine ausgereifte Infrastruktur für Java Servlets vom Betriebssystem bis zum Webserver ist da alles da.
Wer ähnliches für C# haben will ist praktisch gezwungen auf Microsoft Betriebssysteme und Serverplattformen zu setzen, was IMO heutzutage im Internet keine gute Wahl mehr ist.
MS tut viel dran da noch einzusteigen, aber java ist da echt nicht verkehrt.

Den einzigen Vorteil den ich bei C# sehe ist der Zugang zu DirectX via XNA.
Wenn sich C# also noch behaupten will, dann nur dort.
Für java gibt es genug OGL- /EnginePorts

Johnny
2007-09-20, 06:54:03
4. Gibt es dafür die bessere Entwicklungsumgebung (Eclipse)
Eclipse sieht wie ein alter Texteditor gegenüber VS2005 aus. Behaupte ich einfach mal nach 6 Jahren Arbeit mit Eclipse und 1 Stunde mit VS2005.

Zum Thema: aktuell Java, zukunft beide gleich stark(werden ihre Nischen finden)

Ganon
2007-09-20, 07:32:00
Imo:

Wenn man sich auf Windows beschränken "darf", dann C#, ansonsten Java.

Gast
2007-09-20, 08:20:55
Eclipse sieht wie ein alter Texteditor gegenüber VS2005 aus. Behaupte ich einfach mal nach 6 Jahren Arbeit mit Eclipse und 1 Stunde mit VS2005. Ich mag zwar VS auch sehr (Debugger, Projektsetups, ganze Interaktion und nicht zu letzt den Compiler), aber was die reine Sourcecode Interaktion angeht, finde ich es genau umgekehrt und plain VS extrem unkomfortabel gegenüber Eclipse (oder anderen) - das heißt VisualStudio ohne VisualAssist.

Monger
2007-09-20, 08:30:29
In der Windowswelt wohl sehr eindeutig C#.

Ich LIEBE Java! Ich mag die Syntax, die Sprachelemente und das JDK. Java ist imho die modernste und am besten strukturierte Sprache, und vieles davon vermisse ich in der .NET Welt, wie z.B. Exceptions zur Compilezeit, enums als echte Datentypen, und in der Bibliothek ein vernünftiges Collections Framework.


Aber Microsoft weiß was Kunden wollen, und Visual Studio ist an vielen Ecken schon ausgesprochen schick. Dazu kommt noch, dass sie die Abwärtskompatibilität zu bewährten Windows Technologien (wie z.B. eben COM) gewahrt haben, für die gesamte Windows Welt .NET also sowieso den nächsten logischen Schritt darstellt.

Gute Tools, gute Unterstützung... das macht kleinere Schwächen in der Sprache selbst mehr als wett.

Gast
2007-09-20, 09:46:30
enums als echte Datentypen


Was genau meinst du damit?

Monger
2007-09-20, 10:30:50
Was genau meinst du damit?

In .NET verbirgt sich hinter einem enum eigentlich nichts als ein Integer Wert, nur halt mit einem Namen.

In Java kannst du einem enum ein echtes Verhalten aufpropfen, inklusive interfaces, abstrakten Methoden und sonstigen Schweinereien. Ich finde das ziemlich praktisch, wenn du irgendwas hast was unveränderlich ist (Wochentage, z.B.) , aber trotzdem irgendein Verhalten aufweist (z.B. wenn du den Abstand zwischen zwei Wochentagen wissen willst).

Gast
2007-09-20, 11:45:03
In Java kannst du einem enum ein echtes Verhalten aufpropfen, inklusive interfaces, abstrakten Methoden und sonstigen Schweinereien.

Ich sehe da keinen Sinn, da kann ich auch gleich eine Klasse mit Konstanten verwenden.

SGT.Hawk
2007-09-20, 12:48:09
Doch hat schon seinen Sinn, eine Klasse mit Konstanten ist nicht typensicher im Gegensatz zu echten enums.

Monger
2007-09-20, 13:06:00
Ich sehe da keinen Sinn, da kann ich auch gleich eine Klasse mit Konstanten verwenden.
Geht auch, wäre aber WEIT klobiger. Da müsstest du erstmal explizit verschiedene Instanzen erzeugen, und dann statische Zugriffe darauf setzen.

Die enums in Java sind letztendlich tatsächlich nur syntaktischer Zucker - aber nützlich.

Gast
2007-09-20, 13:20:13
Geht auch, wäre aber WEIT klobiger. Da müsstest du erstmal explizit verschiedene Instanzen erzeugen, und dann statische Zugriffe darauf setzen.


Wieso? Dann implementierst du die Methoden eben auch statisch, dann brauchst du keine Instanzen.


Die enums in Java sind letztendlich tatsächlich nur syntaktischer Zucker - aber nützlich.

Ich verstehe nicht warum man das machen sollte bzw. klingt das für mich unlogisch. Enums sollen nur Konstanten bzw. eine Liste von Konstanten repräsentieren und keine Logik implementieren. Die Logik muss unabhängig von den Konstanten sein, ansonsten kann ich auch gleich eigene Structs oder Klassen schreiben.

Kabelsalat
2007-09-20, 13:25:17
welche Programmiersprache, Java oder C#, findet ihr als wichtiger beziehungsweise einflussreicher in Hinblick auf zukünftige Entwicklungen bzw. die Zukunft generell? Eine detaillierte und bedachte Begründung wäre wünschenswert. :)

Wenn wirklich nur die Sprache (Syntax) betrachtet, sind die Unterschiede minimal. Ich behaupte C# hat mit Version 3 einen kleinen Vorsprung, Java hat aber auch interessante Aspekte zu bieten (Ausnahmen müssen klar im Methodenkopf deklariert werden,...). Meiner Meinung ist wichtig, was dein Auftraggeber von dir will. Wenn du für dich Programmierst verwende das, was dir eher liegt und zusagt, verliere aber nicht ganz den Blick für die jeweils andere Technologie.

Monger
2007-09-20, 13:32:27
Ich verstehe nicht warum man das machen sollte bzw. klingt das für mich unlogisch. Enums sollen nur Konstanten bzw. eine Liste von Konstanten repräsentieren und keine Logik implementieren. Die Logik muss unabhängig von den Konstanten sein, ansonsten kann ich auch gleich eigene Structs oder Klassen schreiben.

Ich zeig dir einfach mal ein Beispiel.


public enum Planets {

Merkur(23),
Venus(345),
Erde(123),
Mars(245),
Jupiter(23354),
Saturn(335),
Uranus(1345),
Neptun(245);

private int size;

Planets(int size){
this.size = size;
}

public int getSize(){
return size;
}
}



Jeder Planet hat eine Eigenschaft namens "size", die ich abfragen kann. Es gibt nunmal keine zwei Erden oder zwei Jupiter, deshalb brauche ich hier keine dynamische Planeten Klasse. Trotzdem können diese Konstanten Eigenschaften haben, die mich interessieren könnten.

Wenn du genau das selbe Beispiel mit Klassen machen würdest, wäre das weit aufwendiger. Versuch ruhig mal, einen benamsten Zugriff auf statische Instanzen von irgendwas vernünftig hinzukriegen, so dass die Typsicherheit gewährleistet bleibt. Das obere Beispiel würde sich um ein vielfaches aufblähen.

Gast
2007-09-20, 13:36:01
Doch hat schon seinen Sinn, eine Klasse mit Konstanten ist nicht typensicher im Gegensatz zu echten enums.

Und warum sollte das weniger typsicher sein, wenn man fragen darf? Enums sind nur eine syntaktische Kurzform, der .NET Compiler erzeugt daraus trotzdem eine Klasse mit Konstanten, denn in .NET ist sowieso alles eine Klasse.

Gast
2007-09-20, 13:44:15
Versuch ruhig mal, einen benamsten Zugriff auf statische Instanzen von irgendwas vernünftig hinzukriegen

Was ist ein benamster Zugriff und wie kommst du auf ein statisches Objekt?

Monger
2007-09-20, 13:52:53
Was ist ein benamster Zugriff und wie kommst du auf ein statisches Objekt?
Sorry für die schlechte Ausdrucksweise...

Mit "benamst" meine ich, dass ich an ein Objekt über seinen Namen herankomme. Standardmäßig haben Objekte nunmal keine Namen, ich muss mir erst irgendeinen Mechanismus ausdenken, wie ich ein bestimmtes Ding wiederfinde. Die Enumeration nimmt mir das ab.

Mit statischem Objekt meine ich: ich brauche von jedem Ding eben nur einen einzigen. Ich brauche nicht zwei Jupiter und zwei Neptune, sondern von jedem genau einen. Das muss ich irgendwo sicherstellen, damit nicht jemand mal einfach so meine Planeten durcheinander bringt! ;)

Bietchiebatchie
2007-09-20, 15:26:51
Kannst du das mal bitte genauer erklären?
Klar, ich versuchs mal an nem einfachen Beispiel (ich hab versucht was auszudenken, was irgendwas mit Grafik zu tun hat ;) )klar zu machen:

Sagen wir mal ich hab eine Liste von Punkten; daraus will ich nun aus allen möglichen Kombinationen von Punkten Rechtecke generieren und diese dann nach Größe sortiert in einem normalen DataGridView mit zwei gegenüberliegenden Eckpunkten und Größenangabe anzeigen.

Incl. Beispiel sieht das dann z.B. so aus:

var list = new List<Point>();

list.Add(new Point() { X = 0, Y = 0 });
list.Add(new Point() { X = 2, Y = 4 });
list.Add(new Point() { X = 4, Y = 10 });
list.Add(new Point() { X = 10, Y = 10 });

// nur zum Verständnis: es reicht jeweils, wenn ich die beiden gegenüberliegenden Punkte(in einem ABCD-Rechteck also A und C) betrachte
var rectangles =
from p1 in list
from p2 in list
where p2.X > p1.X
select new { A = p1, C = p2, Size = (p2.X - p1.X) * (p2.Y - p1.Y) };

var orderedRectangles = rectangles.OrderByDescending(r => r.Size);
this.dataGridView1.DataSource = orderedRectangles.ToArray();


Zwei Sachen kann man an dem Codeschnipsel sehen:
Ich schreibe einfach, was ich gerne hätte ohne allerdings allzu detailliert darauf einzugehen wie genau das alles zu geschehen hab. Im Grunde hab ich die Arbeitsanweisung (s.o.) nur eins zu eins in Code umformuliert.

ScottManDeath
2007-09-20, 16:16:18
Sorry für die schlechte Ausdrucksweise...

Mit "benamst" meine ich, dass ich an ein Objekt über seinen Namen herankomme. Standardmäßig haben Objekte nunmal keine Namen, ich muss mir erst irgendeinen Mechanismus ausdenken, wie ich ein bestimmtes Ding wiederfinde. Die Enumeration nimmt mir das ab.

Mit statischem Objekt meine ich: ich brauche von jedem Ding eben nur einen einzigen. Ich brauche nicht zwei Jupiter und zwei Neptune, sondern von jedem genau einen. Das muss ich irgendwo sicherstellen, damit nicht jemand mal einfach so meine Planeten durcheinander bringt! ;)

public class Planet
{
public static Planet Merkur = new Planet(1);
public static Planet Erde = new Planet(2);
...
public static Planet Jupiter = new Planet(7);
public static Planet Saturn = new Planet(1337);


private Planet(int ze_number)
{
....
}

private int number;

}


Dazu muss ich keine enums vergewaltigen =)

Monger
2007-09-20, 16:21:05
Zwei Sachen kann man an dem Codeschnipsel sehen:
Ich schreibe einfach, was ich gerne hätte ohne allerdings allzu detailliert darauf einzugehen wie genau das alles zu geschehen hab. Im Grunde hab ich die Arbeitsanweisung (s.o.) nur eins zu eins in Code umformuliert.

Gerade das Beispiel finde ich ehrlich gesagt ziemlich mies. Was ist denn das für eine Sprache? Ich hab erst dreimal schauen müssen, um zu verstehen was da eigentlich passiert.

- Warum muss ich denn die Größe des Rechtecks angeben? Das widerspricht doch radikal der Idee, dass ich nicht wissen muss wie ein Ding funktioniert wenn ich es verwende.

- Was soll diese Select Anweisung? Was tut die? Und was macht sie mit dem Ergebnis?

- Wieso bringt das Rechteck einen eigene Sortierfunktion mit? Ob sich etwas selbst sortieren kann, oder einfach nur sortierbar ist, macht eine riesen Unterschied. Ein Ball muss schließlich auch nicht wissen, gegen was ich ihn alles werfen könnte! ;)

Monger
2007-09-20, 16:22:45
...
Dazu muss ich keine enums vergewaltigen =)
So, jetzt komm ich daher, und schreib irgendwo in meinen Code:


Planet.Erde = Planet.Merkur;

Und nu? Ist jetzt etwa das Sonnensystem futsch? ;)

Kabelsalat
2007-09-20, 16:32:25
So, jetzt komm ich daher, und schreib irgendwo in meinen Code:


Planet.Erde = Planet.Merkur;
Und nu? Ist jetzt etwa das Sonnensystem futsch? ;)

Nicht wenn er geschrieben hätte:


public static readonly Planet Erde = new Planet(2);

SGT.Hawk
2007-09-20, 16:34:46
Tja, das meinte ich eben mit Typensicherheit.

Gast
2007-09-20, 16:44:13
So, jetzt komm ich daher, und schreib irgendwo in meinen Code:


Planet.Erde = Planet.Merkur;

Und nu? Ist jetzt etwa das Sonnensystem futsch? ;)

Es war auch immer die Rede von "Konstanten"!

Monger
2007-09-20, 16:49:06
Nicht wenn er geschrieben hätte:


public static readonly Planet Erde = new Planet(2);

Java kennt kein ReadOnly Attribut, aber selbst wenn: dann erbe ich eben von der Planet Klasse, und überschreib im statischen Konstruktor die Attribute! ;)

Du müsstest dann wenigstens noch die Klasse als final kennzeichnen, um auf der sicheren Seite zu sein, und zumindest in Java eben die passenden Getter schreiben.

Coda
2007-09-20, 16:52:46
...
Was sollen diese Ausführungen? Jedes neue Sprachfeature muss man erstmal verstehen dass man es lesen kann. Imho bist du einfach nur biased gegen C#, aus welchem Grund auch immer.

Das Select sieht sehr nach SQL aus, in einer Programmiersprache kann das durchaus viele Dinge vereinfachen wenn es daraus geht bestimmte Daten aus Containern auszuwählen in einer bestimmten Reihenfolge. Da schreibst dir sonst den Wolf dabei.

Monger
2007-09-20, 16:56:53
Was sollen diese Ausführungen? Jedes neue Sprachfeature muss man erstmal verstehen dass man es lesen kann. Imho bist du einfach nur biased gegen C#, aus welchem Grund auch immer.
DAS ist C# ? Ernsthaft?

Ich bin überhaupt nicht biased gegen C#. Ich würde es gerne lernen, weil wir hier auf Arbeit so langsam aber sicher stark auf .NET umschwenken. Derzeit bin ich allerdings noch zu VB.NET verdammt, was aber auch gar nicht mal sooo übel ist.

Gnafoo
2007-09-20, 17:09:44
DAS ist C# ? Ernsthaft?

Ich bin überhaupt nicht biased gegen C#. Ich würde es gerne lernen, weil wir hier auf Arbeit so langsam aber sicher stark auf .NET umschwenken. Derzeit bin ich allerdings noch zu VB.NET verdammt, was aber auch gar nicht mal sooo übel ist.

Genauer genommen ist das erst in C# 3.0 drin und nennt sich LINQ:
http://de.wikipedia.org/wiki/LINQ

Finde ich aber eigentlich sehr interessant, auch wenn ich noch nicht selber damit rumgespielt habe.

Kabelsalat
2007-09-20, 17:17:23
Mass mich an dem Beispiel wundert, ist der Bezeichner "var".

/edit: Ich meine das Beispiel von Bietchiebatchie. Er verwendet es auch zum Deklarieren der Liste etc. was absolut unnötig und unschön ist.

ScottManDeath
2007-09-20, 17:47:57
So, jetzt komm ich daher, und schreib irgendwo in meinen Code:


Planet.Erde = Planet.Merkur;

Und nu? Ist jetzt etwa das Sonnensystem futsch?

Ich war zu faul das ganze noch mit get properties zu versehen

Man kann statische Konstruktoren nicht ueberladen, bzw es ist sinnlos =)

Mass mich an dem Beispiel wundert, ist der Bezeichner "var".

/edit: Ich meine das Beispiel von Bietchiebatchie. Er verwendet es auch zum Deklarieren der Liste etc. was absolut unnötig und unschön ist.
Da der compiler weiss, was der Typ auf der rechten Seite vom = ist, waere ein List<Point> anstelle des var redundant. Insbesondere ist das var nuetzlich, da LINQ (also das SQL aehnliche) fuer die Resultate anonyme Typen erstellt, ist das var dort von Noeten.
C++ 2009 hat auch das auto keyword bei dem der Compiler den Type anhand des rvalues deferen kann

Ausserdem sind Exception Spezifikationen in der Methodendeklaration ziemlich evil bzw. sinnlos/umstaendlich (http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!149.entry)

Ich finde in C# praktisch dass ich Operatoren ueberladen kann, das macht eine Vektor/Matrizen Bibliothek doch lesbar und laesst es nicht so aussehen wie C/Java Code mit a.Add(b.Sub(c.Mul(d))) ;)

MasterOfFrickelcode
2007-09-20, 18:29:03
DAS ist C# ? Ernsthaft?

Ich bin überhaupt nicht biased gegen C#. Ich würde es gerne lernen, weil wir hier auf Arbeit so langsam aber sicher stark auf .NET umschwenken. Derzeit bin ich allerdings noch zu VB.NET verdammt, was aber auch gar nicht mal sooo übel ist.


VB.Net ist doch _Klasse_! Der Noobie-Faktor gehört seit 8.0 der Vergangenheit an. C Syntax und Derivate sind imo lange nicht so leserlich. Alleine das ");" - man denkt nach jeder Zeile, da will einer jemand veräppeln...

Coda
2007-09-20, 18:31:32
DAS ist C# ? Ernsthaft?
Das ist C# 3.0. Ja. Also noch in Entwicklung.

Gast
2007-09-21, 02:27:48
JavaMe ist eine einzige Krankheit. (Bzw. die Handys die das angeblich unterstützen)

Das sehe ich anders.

Es gibt keine einfachere Möglichkeit eigene Software für sein Handy zu schreiben als JavaME.

Gast
2007-09-21, 02:32:49
Gegenfrage: was bringt mir - als Entwickler - der Fakt, dass Java unter GPL steht? Also ich kann dem weder was positives noch was negatives abgewinnen.


Das kann ich dir sagen.
Du hast dadurch die Garantie, daß die maximale Plattformunabhängigkeit erreicht werden kann und damit hast du dadurch auch den größten Kundenkreis, der deine Software kaufen und nutzen könnte.



Wie verbreitet ist eigentlich .net compact framework? jemand ahnung?

Das spielt AFAIK höchstens auf den Windows CE/Mobile PDAs eine Rolle,
aber ansonsten gar nicht.

Ein Handy mit .net compact Framework habe ich jedenfalls noch nirgends gesehen.
Und die Hersteller bleiben auch bei JavaMe, da es dafür auch die meiste Software gibt und ein .net compact Framwork aufgrund der Speicheranforderungen neben JavaMe keinen Sinn macht.

tokugawa
2007-09-21, 03:21:20
Ein Handy mit .net compact Framework habe ich jedenfalls noch nirgends gesehen.


Naja, Windows Mobile Handys halt. Oder Smartphones, wie sie auch gerne bezeichnet werden. Die die halt nicht ganz PDAs sind.

ollix
2007-09-22, 11:07:43
Schonmal die Team Editions angeschaut? Der Class Designer ist ein Hammer, nicht ganz so geil wie EA, aber Eclipse/Together hat da noch viel zu lernen. Ähnlich sieht es mt den GUI Tools aus. Was zeichnet den Class Designer denn aus?

Ich habe mich bisher nie mit den Team Suite Dingern beschäftigt, weil ich annahm es handle sich hauptsächlich um zusätzliche Features für "Teams". Wenn man allerdings von den Vorteilen auch im privaten "für sich" coden Vorteile finden kann, dann hole ich mir das mal ausm MSDN. Solange 2008 noch nicht fertig ist...

del_4901
2007-09-22, 11:21:17
Was zeichnet den Class Designer denn aus?

Ich habe mich bisher nie mit den Team Suite Dingern beschäftigt, weil ich annahm es handle sich hauptsächlich um zusätzliche Features für "Teams". Wenn man allerdings von den Vorteilen auch im privaten "für sich" coden Vorteile finden kann, dann hole ich mir das mal ausm MSDN. Solange 2008 noch nicht fertig ist...
Das ist ein komplettes MDA Tool, kennt aber nur Klassendiagramme, kann dafür aber refactorn. EA ist da doch noch ein Stück weiter. Und es geht nur mit C# wenn mich nicht alles täuscht.

Shink
2007-09-23, 10:38:58
Gegenfrage: was bringt mir - als Entwickler - der Fakt, dass Java unter GPL steht? Also ich kann dem weder was positives noch was negatives abgewinnen.

GPL bringt mir z.B., dass ich das Zeug selbst portieren oder ändern darf, wenn die Firma, die das entwickelt, zugrunde geht - bzw kann ich mich vermutlich sogar darauf verlassen, dass vor mir jemand auf die Idee kommt. (Gut, das ist bei beiden Sprachen nicht allzu wahrscheinlich, da Java starken Rückenhalt von z.B. IBM hat aber OK).

Außerdem ist z.B. vom JDK ja schon seit langer Zeit der Sourcecode dabei - das ist ein Feature, das mir sehr wohl etwas bedeutet.

Bin ich nicht 100% auf dem aktuellen Stand was Java angeht, aber ich gehe davon aus dass sich in Punkto Funktionsumfang die IDEs nicht wirklich großartig unterscheiden.
(Bei MS ist halt häufig der Vorteil, dass viele Dinge integriert sind, z.B. direkte Sql-Anbindung in VS etc.)
Ich denke mal, die Tatsache, dass es mehrere wirklich mächtige offene Java-IDEs gibt, hinter denen große Firmen stehen, wird sich auch in Zukunft positiv auf die Entwicklung derselben auswirken.
Übrigens entwickle ich in Eclipse auf meinem 384MB Ram-Notebook - ohne 3rd Party-Plugins ist das kein Problem.

Wie verbreitet ist eigentlich .net compact framework? jemand ahnung?
Bei Windows CE-Geräten sehr verbreitet und die beste Wahl. Ansonsten gibts da gar nichts. Also 100% abhängig von der Windows CE-Verbreitung.


Bezüglich Geschwindigkeit der Entwicklung (der Sprache) geht aber eindeutig ein Pluspunkt an C#. Knapp 6 Jahre alt und doch schon sehr, sehr viele Verbesserungen; angefangen von einem mehr-oder-weniger java-Klon(1.0) hat es sich zu einer vernünftigen Sprache, die alle Features abdeckt die man von einer objektorientierten general purpose Sprache erwarten kann (2.0) zu einer Sprache entwickelt, (achtung, jetzt werde ich sehr subjektiv ;) ) die jeder anderen Sprache die ich kenne, bei weitem überlegen ist (3.0). Dabei sind es nicht etwa die Features(Linq, Attribute, anonyme Typen, lambda-Abstraktionen, etc.) die nicht alle andere Sprachen beherrschen, sondern die Gesamtheit der Sprache, die es einem ermöglicht genau das zu auszudrücken, WAS man will, ohne 100% zu sagen, WIE das ganze genau im einzelnen berechnet werden soll.
Soll das jetzt ein Vorteil sein, dass sich die Sprache in so einem Wandel befindet?
Ich finde den Schritt zu Java 5 ja schon etwas über das Ziel hinausgeschossen aber was M$ da abzieht...

Bietchiebatchie
2007-09-23, 14:04:55
- Warum muss ich denn die Größe des Rechtecks angeben? Das widerspricht doch radikal der Idee, dass ich nicht wissen muss wie ein Ding funktioniert wenn ich es verwende.
...
- Wieso bringt das Rechteck einen eigene Sortierfunktion mit?
Ah, ich glaube du hast da was falsch verstanden: Das sollte kein Beispiel für sehr schönen Code sein. Ich benutze ja nichtmal eine Klasse um das Rechteck darzustellen. Das Rechteck bringt auch keine Sortierfunktion mit sich, sondern ich sortiere nur die Collection, in der sich die Daten von ein paar Rechtecken befinden, nach einen bestimmten Schema.
GPL bringt mir z.B., dass ich das Zeug selbst portieren oder ändern darf, wenn die Firma, die das entwickelt, zugrunde geht - bzw kann ich mich vermutlich sogar darauf verlassen, dass vor mir jemand auf die Idee kommt. (Gut, das ist bei beiden Sprachen nicht allzu wahrscheinlich, da Java starken Rückenhalt von z.B. IBM hat aber OK).

Außerdem ist z.B. vom JDK ja schon seit langer Zeit der Sourcecode dabei - das ist ein Feature, das mir sehr wohl etwas bedeutet.

Dumme Frage: Wie oft schaust du denn in den Sourcecode?
Ich glaube ich würde das fast nie machen, selbst wenn alles in .net opensource wäre :/



Soll das jetzt ein Vorteil sein, dass sich die Sprache in so einem Wandel befindet?
Ich finde den Schritt zu Java 5 ja schon etwas über das Ziel hinausgeschossen aber was M$ da abzieht...
Soweit keine Inkompatibiltäten zu früheren Versionen existieren, also die Sprache nur sinnvoll erweitert wird und bestehende Teile nicht verändert werden, sehe ich da kein großes Problem dabei. Ganz im Gegenteil: von mir aus soll sich C# bitte in dem Tempo weiterentwickeln :)

Kabelsalat
2007-09-23, 14:31:18
Dumme Frage: Wie oft schaust du denn in den Sourcecode?
Ich glaube ich würde das fast nie machen, selbst wenn alles in .net opensource wäre :/

Ich verwende fast ausschließlich .Net, bin aber sehr glücklich über die Existenz von Reflector: Gelegentlich einen Blick in die BCL zu werfen, erleichtert das Verständnis komplexer Funktionen doch bedeutend. Auch ROTOR (Shared Source CLI) ist auf jeden Fall einen Blick wert.

Bietchiebatchie
2007-09-23, 14:43:59
Reflector nutz ich auch ab und an, aber nur um einen schnellen Überblick zu bekommen, nicht um Implementierung zu verstehen. Letzteres hab ich aufgegeben, nachdem irgendwie jede Funktion, die ich nachschauen wollte, nur ein Verweis auf eine andere Funktion war, die dann ebenso nur auf eine andere verwiesen hat etc.

kloffy
2007-09-23, 14:46:09
Dumme Frage: Wie oft schaust du denn in den Sourcecode?
Ich glaube ich würde das fast nie machen, selbst wenn alles in .net opensource wäre :/
Dein Verlust, da kann man so einiges lernen...

Gast
2007-09-23, 17:04:50
Soweit keine Inkompatibiltäten zu früheren Versionen existieren, also die Sprache nur sinnvoll erweitert wird und bestehende Teile nicht verändert werden, sehe ich da kein großes Problem dabei. Ganz im Gegenteil: von mir aus soll sich C# bitte in dem Tempo weiterentwickeln :)

Veränderungen im Nachhinein sind insofern immer schlecht, da es das zuvor schlanke Design auf den Kopf stellt und die Sprache unnötig aufgebläht wird.

Schau dir einfach mal C++ an, um das zu beherrschen braucht man inzwischen mehrere Jahre Erfahrung.
Da haben es schlanke Sprachen die wenig weiterentwickelt werden besser.


In sofern ist eine Erweiterung eher schlecht als gut.

Coda
2007-09-23, 17:38:21
Man braucht die Sprachfeatures ja nicht benützen. Bei C++ ist das aber nötig um gescheiten Code zu produzieren.

Gast
2007-09-23, 19:09:21
Man braucht die Sprachfeatures ja nicht benützen.

Wer bei 0 einsteigt will diese zusätzlichen Sprachfeatures aber dann trotzdem lernen. Damit verschiebt sich die Lernphase noch weiter und es kann noch länger dauern bis er mal anfängt mit der Sprache richtige Programme zu schreiben.

Für einen guten Überblick sind also weniger Sprachfeatures besser und wenn man sie alle kennt, dann kann man auch mit dem Proggen loslegen.

Bietchiebatchie
2007-09-23, 20:03:53
@die beiden/bzw. den einen Gast:
Ich kann die Argumentation warum eine Erweiterung einer Sprache schlecht sein soll, absolut nich nachvollziehen...
Wie Coda schon andeutete, soll man halt die Sprachelemente benutzen, die man beherrscht, die anderen kann man sich ja noch später aneignen.
Man braucht zum programmieren lernen auch Jahre (wer was anderes behauptet, meint nur er hätte den Durchblick), warum sollte dann das Erlernen der Sprachsyntax/-features an nem halben Nachmittag möglich sein?

Shink
2007-09-24, 08:30:40
@die beiden/bzw. den einen Gast:
Ich kann die Argumentation warum eine Erweiterung einer Sprache schlecht sein soll, absolut nich nachvollziehen...
Wie Coda schon andeutete, soll man halt die Sprachelemente benutzen, die man beherrscht, die anderen kann man sich ja noch später aneignen.
Man braucht zum programmieren lernen auch Jahre (wer was anderes behauptet, meint nur er hätte den Durchblick), warum sollte dann das Erlernen der Sprachsyntax/-features an nem halben Nachmittag möglich sein?
Naja; ich hab da so meine Schreckenserfahrungen: Ich bildete mir z.B. mal ein, C++ zu beherrschen und programmierte auch darin.
Irgendwann durfte ich dann bestehende Projekte pflegen und blickte absolut nicht durch.

Java hatte bei der Einführung als "Unterscheidungsmerkmal": Wir sind eine einfache Sprache, es gibt nichts was es nicht geben muss. Spätestens seit Java 5 ist das falsch, auch wenn viele der eingeführten Dinge Sinn machen.

Bin mal neugierig ob M$ in 2 Jahren beschließt, Mehrfachvererbung wär mal eine tolle Sache. Oder Gotos über Klassengrenzen hinweg...

Dumme Frage: Wie oft schaust du denn in den Sourcecode?
Ich glaube ich würde das fast nie machen, selbst wenn alles in .net opensource wäre :/
Also ich mach das mehrmals die Woche - immer wenn ich eine Methode verwende, die sich nicht 100%ig so verhält wie ich es erwarte oder ich mir nicht sicher bin, wie sie sich verhält, wenn ich sie mal nicht ganz so verwende wie sie in der Doku beschrieben ist.

Bei meinen .NET-Projekten würd ich mir das ziemlich oft wünschen.

Expandable
2007-09-24, 08:54:36
Also ich mach das mehrmals die Woche - immer wenn ich eine Methode verwende, die sich nicht 100%ig so verhält wie ich es erwarte oder ich mir nicht sicher bin, wie sie sich verhält, wenn ich sie mal nicht ganz so verwende wie sie in der Doku beschrieben ist.

Das widerspricht aber dem OO-Gedanken. Deine Verwendung der von der Lib bereitgestellten Funktionalität muss implementierungsunabhängig sein - in der nächsten Version könnte sich die Implementierung ändern, und Dein Code funktioniert nicht mehr...

Kabelsalat
2007-09-24, 09:45:13
Bin mal neugierig ob M$ in 2 Jahren beschließt, Mehrfachvererbung wär mal eine tolle Sache. Oder Gotos über Klassengrenzen hinweg...


Zunächst limitiert die CLR, da sie derartiges nicht unterstützt. Gut, aber auch deren Featureset könnte man erweitern. Ich gehe dennoch nicht davon aus, da MS - gerade mit C# - einen sehr vernünftigen Weg gewählt hat und gewisse Verhaltensweisen erzwingt und Sprachelemente wie etwa Mehrfachvererbung bewusst nicht umgesetzt hat.

Ich bin ziemlich sicher, dass Microsoft in dieser Sache keinen Fehlschritt machen wird. Sehr interessant ist die Beschäftigung mit Blogs und sonstigen Publikationen von Leuten die sich hinter .Net verbergen. In Hinblick auf die momentane Debatte lohnt sich gerade das Buch Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756/ref=pd_bbs_sr_1/102-2355514-9832906?ie=UTF8&s=books&qid=1190619362&sr=8-1). In diesem Fall jedoch nicht wegen der Design Guidelines (die zu befolgen, dennoch Sinn ergibt), sondern wiegen der vielen Kommentare von diversen MS-Entwicklern.


Also ich mach das mehrmals die Woche - immer wenn ich eine Methode verwende, die sich nicht 100%ig so verhält wie ich es erwarte oder ich mir nicht sicher bin, wie sie sich verhält, wenn ich sie mal nicht ganz so verwende wie sie in der Doku beschrieben ist.

Bei meinen .NET-Projekten würd ich mir das ziemlich oft wünschen.

Reflector (http://www.aisto.com/roeder/dotnet/), ROTOR (http://www.microsoft.com/germany/msdn/library/net/ProjektRotorMicrosoftsNETPlattformFuerUnixDerivate.mspx?mfr=true), Mono (http://www.mono-project.com/Main_Page)

/edit: ... muss mich meinem Vorposter anschließen. Immer vorsichtig mit den gewonnen Erkenntnissen umgehen. Vor allem nicht auf die Idee kommen, private Member mittels Reflection zu verwenden - nicht überall hat dein Programm FullTrust und außerdem garantiert niemand, dass keine Änderungen in der nächsten .Net Version vorgenommen werden.

Shink
2007-09-24, 10:06:36
Mal ein Beispiel zu meiner Verteidigung:
Mir ist z.B. klar, dass eine LinkedList nicht synchronized ist.
Aber wie verhält sich "new LinkedList(anotherLinkedList)"? Ich hätte irgendwie erwartet, dass das kein Problem ist, aber dem ist nicht so, was man in der Implementierung sofort sieht: Der Konstruktor ruft ein "toArray()" auf, dass einen Iterator durchläuft - der eine Exception wirft, wenn gerade ein Element entfernt oder hinzugefügt wird. Ist auch logisch, könnte man auch aus der Doku so rauslesen, wenn man sie so interpretiert - hab ich wohl falsch interpretiert; ist mein Fehler, aber dank Sourcecode kann es da keine Zweifel geben was da Sache ist.

Kabelsalat
2007-09-24, 10:32:40
Genau dafür reicht Reflector vollkommen aus...

Wie ist es eigentlich genau bei Java: Steht die Runtime unter GPL? Das Framework? Gibt es auch eine Variante unter einer anderen Lizenz (LGPL?)?

Wenn tatsächlich das Framework unter GPL stehen sollte, müsste auch jede mit Java entwickelte Anwendung wieder unter GPL stehen (starkes copyleft). Ein durschlagendes Argument gegen die kommerzielle Verwendung von Java. Nicht einmal mehr exklusive Auftragsentwicklungen wären möglich. So einfach ist es im Falle Java daher wohl kaum...

Shink
2007-09-24, 11:29:50
Natürlich nicht. Das ist eine relativ komplizierte Sache mit der Java-Lizenz. Auf jeden Fall wird Java kommerziell UND (zur Zeit nur Teile davon; später ganz) als OpenJDK-Variante unter der GPLv2 rausgegeben.
Der Sourcecode war dagegen schon länger dabei.

Der Reflector ist natürlich hilfreich und soetwas ist in Eclipse 3.3 auch drin (für closed source Bibliotheken), aber der Sourcecode ist natürlich bequemer.

Ganon
2007-09-24, 11:38:51
Natürlich nicht. Das ist eine relativ komplizierte Sache mit der Java-Lizenz.

Nein. Das ist ganz einfach. Java steht unter der GPL mit Classpath Exception. D.h. man kann trotz GPL unfreie Anwendungen mit entwickeln. Nutzten ja auch die freien Java-Runtimes.

Also keine 2 Versionen. Es wird weiterhin eine "Distribution" von Sun geben, aber diese wird nicht parallel zu der GPL-Version entwickelt.

PH4Real
2007-09-24, 19:57:08
Also ich wundere mich, dass sich manche über die Syntax wundern (von dem C# Beispiel)... Wird Haskell oder so nicht mehr gelehrt? Die Konzepte dahinter sind nämlich schon älter ;-).
Für Java 7 gibt es übrigens ähnliche Überlegungen...

Kabelsalat
2007-10-04, 18:36:19
Der Quellcode der .Net BCL (Base Class Library) wird mit .Net 3.5 veröffentlicht (http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx). Ein Argument gegen .Net / C# erübrigt sich somit demnächst.

SentinelBorg
2007-10-15, 11:13:53
C# hat vor allem auch mit den Delegates objektorientierte Funktionszeiger. Das darauf basierende Event-System finde ich weitaus besser, als diese seltsamen Action-Listeners in Java. Aber ka, vielleicht hat sich da bei Java auch mittlerweile was getan. LINQ ist eh krank, was man da in Zukunft an Zeit sparen wird bei der Entwicklung, ich denke das wird der nächste große Effizienzsprung sein. Aber mit Anders Hjelsberg sitzt da ja auch einer der Besten dran.

Gast
2007-10-22, 10:46:30
Es fiel mehrfach der Begriff "typsicher". Heißt das eigentlich, daß man nur nicht blind durch die Gegend casten kann, oder das immer (spät. zur Laufzeit) geguckt wird, ob ein "passendes Objekt" drunterliegt?

Wo ist da die Grenze? Wann ist etwas gerade typsicher, wann gerade nicht mehr?

ethrandil
2007-10-22, 12:38:04
Es fiel mehrfach der Begriff "typsicher". Heißt das eigentlich, daß man nur nicht blind durch die Gegend casten kann, oder das immer (spät. zur Laufzeit) geguckt wird, ob ein "passendes Objekt" drunterliegt?

Wo ist da die Grenze? Wann ist etwas gerade typsicher, wann gerade nicht mehr?
Naja im Grunde hast du es erkannt. Etwas kann Typsicher zur Laufzeit und Typsicher zur Kompilierzeit sein. Java und C# sind beides. Wird falsch gecastet gibts eine Exception. Wird offensichtlich falsch gecastet beim programmieren gibts einen Kompilerfehler.

- eth

Monger
2007-10-22, 13:42:51
Es fiel mehrfach der Begriff "typsicher". Heißt das eigentlich, daß man nur nicht blind durch die Gegend casten kann, oder das immer (spät. zur Laufzeit) geguckt wird, ob ein "passendes Objekt" drunterliegt?

Im weitesten Sinne sind alle modernen Sprachen typsicher - du kannst mit einem Objekt nichts machen was seinem tatsächlichen Typ widerspricht. Das bezieht sich jetzt auf die Laufzeit, du kannst dir in einer nativen .NET Anwendung unmöglich irgendwas basteln, was Buffer Overflows o.ä. verursacht.

Mit statischer Typsicherheit ist gemeint, wie gut eine Sprache einem die Möglichkeit bietet, Objekte zur Entwicklungszeit zu typisieren. Dazu gehören dann eben Sprachfeatures wie z.B. Exception Handling zur Entwicklungszeit, generische Typen usw.

Coda
2007-10-22, 13:51:25
du kannst dir in einer nativen .NET Anwendung unmöglich irgendwas basteln, was Buffer Overflows o.ä. verursacht.
Geht das mit C# und "unsafe" auch nicht?

Monger
2007-10-22, 14:03:39
Geht das mit C# und "unsafe" auch nicht?

Deshalb sag ich "nativ" ;)

Wenn man irgendwas externes anflanscht was nicht durch die CLR mehr geprüft werden kann, kann man sich dort natürlich auch die üblichen Sicherheitslücken aufreißen.

Coda
2007-10-22, 14:16:50
Das ist nativ und kein x86-Code.

Bietchiebatchie
2007-10-22, 22:22:48
"Nativ" war vielleicht etwas unglücklich gewählt von Monger, allerdings ist doch klar, was er meinte: dass es im Normalfall absolut unmöglich ist, Bufferoverflows (o.ä.) zu produzierten.

Gast
2007-10-22, 22:49:11
Es gibt kein alleiniges "nativ", das ist natürlich contextabhängig.

][immy
2007-10-23, 20:34:40
nun, nennt mich voreingenommen, aber aus meiner sicht ist C#.Net wichtiger (bzw, alles was .Net unterstützt) als Java. Ok ich bin .Net Entwickler aber ich habe zumindest auch schon mit java programmiert.

microsoft hat es ziemlich in den markt gedrückt und mit .Net 2.0 ansich auch den durchbruch geschafft. Pünktlich mit VS 2008 soll es auch die sourcen von einigen wichtigen .Net komponenten offen gelegt werden. allein daher dürfte die verbreitung von .Net weiter ansteigen.

Ganon
2007-10-23, 21:39:13
Je nach Anforderung. Wenn diese lautet "Multi-Plattform" dann kommst du mit .NET 2/3 nicht allzu weit. ;) Wenn man sich aber auf Windows beschränken "darf", dann ist C# schon nicht schlecht ^_^