Jump to content
marcel

Frage an die Programmierer im Forum

Recommended Posts

marcel
Posted

Ich habe früher mal ein bisschen mit Turbo Pascal und später Delphi programmiert (Version 2), bin aber seit Jahren untätig und überhaupt nicht auf dem laufenden.

Welche Sprachen sind z.Zt. aktuell und mit einiger Chance auch noch die nächsten Jahre. Soweit ich gehört habe, gibt es C noch immer, ist Java recht populär während Delphi bereits weitgehend gestorben ist.

Was würdet Ihr empfehlen, wenn man ein paar simple Sachen programmieren will, ohne viel Geld für eine IDE auszugeben.

 

Marcel

Share this post


Link to post
Delphin
Posted
Ich habe früher mal ein bisschen mit Turbo Pascal und später Delphi programmiert (Version 2), bin aber seit Jahren untätig und überhaupt nicht auf dem laufenden.

Welche Sprachen sind z.Zt. aktuell und mit einiger Chance auch noch die nächsten Jahre. Soweit ich gehört habe, gibt es C noch immer, ist Java recht populär während Delphi bereits weitgehend gestorben ist.

Was würdet Ihr empfehlen, wenn man ein paar simple Sachen programmieren will, ohne viel Geld für eine IDE auszugeben.

Für eigene Sachen habe ich sehr gute Erfahrungen mit Python gemacht (zusammen mit einem GUI-Toolkit wie Qt, wxWidgets z.B.), gibt's auch IDEs umsonst und ein sehr aufgeweckte Community. Ist auch eine sehr aufgeräumte Sprache, die sich gut lernen lässt. (Allerdings eine interpretierte Sprache, falls das ein KO-Kriterium ist.) http://www.diveintopython.org/

 

C geht natürlich auch, je nachdem, was genau du machen willst, ist das aber erheblich viel komplizierter, dafür natürlich scneller. Die meisten kommerziellen Programme, die ich nutze, sind in mit C++ gemacht. Als Gelegenheitsprogrammierer würde ich persönlich aber davon abraten. Java ist meiner ganz persönlichen Meinung nach "overrated", aber es wird oft eingesetzt, keine Frage.

 

Just my 2c, ich programmiere nur gelegentlich gegen Geld, gibt hier aber sicherlich einige erfahrene Programmierer (Mathematiker, oder auch Informatiker).

Share this post


Link to post
jpjg
Posted

Wenn du schnell ans Ziel kommen willst, könnte Perl das Richtige für dich sein. Ansonsten denke ich, wird uns C bzw. die objektorientierte Variante C++, noch recht lange begleiten. Eine ernst zunehmende Konkurrenz ist derzeit noch nicht erkennbar. Java könnte die Sprache der Wahl sein, wenn du platformunabhängig Programmieren willst.

 

Es gibt also mehrere Möglichkeiten. Jede hat ihre Vor- und Nachteile. Die richtige Wahl hängt im Wesentlichen davon ab was man damit machen will.

Share this post


Link to post
H.B.
Posted

Da du mit TurboPascal bereits eine Interpretersprache kennengelernt hast. dürften dir die bekannten Sprachen

 

lua, phyton, perl. ruby, haskell

 

keine Probleme bereiten.

Alle haben Vor- und Nachteile.

 

ich finde python sehr gewöhnungsbedürftig (und mag es überhaupt nicht, wenn mit nichtdruckbaren Zeichen im Sourcecode gearbeitet wird.

Perl ist mir zu unstrukturiert. Da verliere ich mich in den Möglichkeiten. Außerdem ist die Objektorientierung zu rudimentär,

Lua findet immer mehr Anhänger, da hab ich keine Erfahrung,

Haskell ist für einige prozeduale Aufgaben ideal, aber sehr fremd.

 

ruby ist mein uneingeschränkter Favorit.

Alles wird objektorientiert dargestellt. Das gibt eine erstaunliche Flexibiliät und gleichzeitig sind die Programme sehr gut lesbar.

Nicht zu vergessen: Rails als most sophisticated Web-Framework basiert nicht ohne Grund auf Ruby.

 

Ein kurzes Beispiel hierfür:

=begin rdoc
Fügt ein oder mehrere Datenelement(e) zum Vektor hinzu.
Das letzte Datenelement ist als _first_ oder <em>[0]</em> abfragbar.
Nach jedem Einfügevorgang wird das Signal <em>value_added</em> ausgelöst.
Andere Objekte können sich über die Methode <em>on_value_added</em> über Zustandsänderungen informieren lassen.
=end
def addItem(*item)
	until item.empty? do
			unshift item.shift
			value_added self.first
		end
end

 

Die dokumentation braucht man eigentlich gar nicht (man muss natürlich die Sprache können, um die Anweisungen zu verstehen).

Share this post


Link to post
marcel
Posted · Edited by marcel

Soweit ich mich entsinne war auch Turbo Pascal ein Compiler, kein Interpreter.

Ich schau mir die Vorschläge mal an. Im wesentlichen geht es um kleine Anwendungen um z.B. Informationen aus größeren Textdatein zu extrahieren, Berechnungen zu machen oder Vorgänge zu automatisieren.

Die einzigen Delphi-Programme, die ich noch in Benutzung habe, sind ein Programm zur Berechnung von Gitarrensaiten und ein einfacher Terminkalendar, da mir die kommerziellen Programme immer zu viel Recourcen frassen und zu aufwändig waren.

Größere Projekte, wie ein Notensatzprogramm, hatte ich schon vor längerer Zeit auf Eis gelegt und den Kompromiss existierender Programme aktzeptiert.

 

Marcel

Share this post


Link to post
jpjg
Posted

Ich schau mir die Vorschläge mal an. Im wesentlichen geht es um kleine Anwendungen um z.B. Informationen aus größeren Textdatein zu extrahieren, Berechnungen zu machen oder Vorgänge zu automatisieren.

Für Operationen auf Texten dürfte Perl prädestiniert sein.

 

Berechnungen gehen damit natürlich auch. Bei umfangreicheren Berechnungen würde ich mich jedoch nach alternativen umschauen. (Vielleicht geht's mit excel).

 

Zum letzten Anwendungsfall kommt's drauf an. Wenn's einfache Aktionen sind die gelegentlich abhängig von irgend etwas ausgelöst werden sollen, dürfte es mir jeder Sprache gehen. Bei komplexeren Anwendungen kommt's auf Komplexität und gewünschte Reaktionszeit an. Je schnelle es gehen muss um so interessanter werden C/C++.

Share this post


Link to post
ankariu
Posted

Nabend zusammen,

 

es kommt ganz darauf an, was du machen magst, ich persönlich bin kein Freund von Skriptsprachen, für kleinere Spielereien sind diese jedoch vollkommen ausreichend.

 

Wenn du dich in VB / VBA einlesen magst, kannst du Excel um einige tolle Sachen erweitern, es gibt für Excel viele fertige Makros und auch reichlich Hilfe.

Wenn die Datenmengen irgendwann doch größer werden, dann wird dir Excel einen Strich durch die Rechnung machen und du solltest von Anfang an über eine Datenbank nachdenken, da Daten dort wesentlich strukturierter darstellen und pflegen lassen. Delphi ist zwar nicht mehr so aktuell, aber wenn du Grundkenntnisse hast, kannst du durchaus damit arbeiten, eine Datenbank ist schnell implementiert und mit Borland hat man auch per Drag and Drop schnell eine GUI. Von C würde ich dir abraten, es ist zwar performant, aber mit der GUI könnte es spannend werden.

 

Ich entwickele sehr viel in Java (Eclipse ist kostenlos), da ich das auch beruflich tue und es mir leicht fällt. Aber auch C# oder dotNET können Alternativen sein, jedoch haben diese Alternativen den Nachteil, dass du dich in eine Sprache und in eine Entwicklungsumgebung einarbeiten musst.

 

Wenig Aufwand, kleine Daten: VB / VBA.

Sehr viele Daten, mit Vorkenntnissen: Delphi.

 

Kannst du denn objektorientiert programmieren? Wenn nein stellen Java etc. keine wirklichen Alternativen dar.

 

Was möchtest du denn genau entwickeln?

 

Ich arbeite derzeit an einem Java-Tool, welches mir einen kompletten Backtest eines Handelssystems mit variierbaren Indikatoren und ausprägungen ermöglicht.

 

Viele Grüße,

André - Anwendungsentwickler / Spielkind

Share this post


Link to post
berliner
Posted · Edited by berliner

C++ oder Java. Java ist etwas stringenter und schöner in der Notation.

 

Für C++ bietet sich der Qt Creator an. Da ist alles drin, um loslegen zu können. Unter Linux muß man noch ein paar Pakete nachinstallieren (z.B. build-essential, X11-Header). Ist aber nicht schwer. Unter Windows ist man sofort startbereit. Die IDE ist übersichtlich und nicht sehr funktionsüberladen.

 

Für Java gibt's eclipse. Das ist aber schon ein ziemliches Monster.

 

Am Ende hängt es davon ab, was man machen will. Für Desktop-Anwendungen eher C++, obwohl Java dafür mittlerweile auch geht, für server-seitige Web- und Backend-Programmierung Java (leider).

 

Ruby, Python, Perl etc sind alles Nischenplattformen. Und mit einer begin...end-Sprache würde ich mich eh nicht rumschlagen.

 

Alternativ auch .NET in C#. Visual Studio Express gibt's kostenlos und ist eine gute IDE, allerdings auch umfangreich. .NET bringt auch umfangreiche APIs mit.

 

Qt Creator ist momentan die IDE mit den geringsten Hürden für den Einstieg und die GUI-Programmierung in Qt ist einfach ein Vergnügen. Der Code ist unter Windows, Linux und Mac compilierbar. Schöne Sache.

Share this post


Link to post
ipl
Posted · Edited by ipl

Ich breche mal ne Lanze für Python. Ich habe damit in letzter Zeit alles von stark interaktiven Webseiten über webbasierte Verwaltungssysteme (für eine Spedition) bis hin zu einem (offline) Framework für wissenschaftliche Signalaufnahmen (Audio, Video, EEG, EKG, etc.) gemacht. Eine "Nischensprache" kann ich darin nicht erkennen.

 

Einige Nachteile hat Python aber zweifellos auch (und das ist nicht der Whitespace-Code). Am Schwerwiegendsten: als Interpretersprache langsam, nicht (oder schlecht) in "unlesbaren" Code kompilierbar, Multithreading nur schwer möglich (eigentlich Multiprocessing). Vorteile: genial entworfene Sprache, kaum Einlernzeit, plattformunabhängig, offline wie online geeignet, (fast) alle denkbaren Module fertig enthalten oder herunterladbar.

 

Als Freiberufler war ich mit Python mindestens um den Faktor 2 bis 3 schneller als mit Alternativen (PHP, Visual Basic, C++). Ruby soll aber auch nicht schlecht sein.

 

Als Anmerkung weil das vorhin erwähnt wurde: Haskell ist eine ganz besondere (übrigens funktionale, nicht prozedurale) Sprache, die man als "imperativer" oder "objektorientierter" Programmierer nicht so schnell erlernt, und schon gar nicht als Laie.

 

C++, Java, etc. sind gut für ein 10-Millionen-Euro-Projekt, das später eine 100-Millionen-Kunden-Datenbank verwalten soll. Sonst steht die Entwicklungszeit oft in keiner Relation zum Ergebnis. Das glauben die Java-Programmierer aber leider erst, nachdem sie Python gründlich ausprobiert haben. ^^

 

P.S. Und ach ja, falls man auf funktionale Programmierung steht, kann man das auch (fast) genauso gut mit Python machen. Und ich glaube, mit Ruby auch, bin aber nicht sicher.

Share this post


Link to post
berliner
Posted

Ich breche mal ne Lanze für Python. Ich habe damit in letzter Zeit alles von stark interaktiven Webseiten über webbasierte Verwaltungssysteme (für eine Spedition) bis hin zu einem (offline) Framework für wissenschaftliche Signalaufnahmen (Audio, Video, EEG, EKG, etc.) gemacht. Eine "Nischensprache" kann ich darin nicht erkennen.

Es ist eine große Nische, aber eine Nische.

Einige Nachteile hat Python aber zweifellos auch (und das ist nicht der Whitespace-Code).

Ich finde das unleserlich. Ich will Blöcke einklammern können.

Am Schwerwiegendsten: als Interpretersprache langsam, nicht (oder schlecht) in "unlesbaren" Code kompilierbar, Multithreading nur schwer möglich (eigentlich Multiprocessing).

Ein Interpreter wäre für mich ein K.O.-Kriterium.

Als Anmerkung weil das vorhin erwähnt wurde: Haskell ist eine ganz besondere (übrigens funktionale, nicht prozedurale) Sprache, die man als "imperativer" oder "objektorientierter" Programmierer nicht so schnell erlernt, und schon gar nicht als Laie.

funktionale Sprachen sind nett für mathematische Scripte, aber ich will damit keine größere Applikation bauen müssen.

C++, Java, etc. sind gut für ein 10-Millionen-Euro-Projekt, das später eine 100-Millionen-Kunden-Datenbank verwalten soll.

Gehen beide auch für kleine Projekte. Hier gibt's Code.Beispiele zu Qt-Applikationen. Da ist sehr wenig Overhead dabei.

Sonst steht die Entwicklungszeit oft in keiner Relation zum Ergebnis. Das glauben die Java-Programmierer aber leider erst, nachdem sie Python gründlich ausprobiert haben. ^^

Glaube ich auch nicht. Ich habe mit Java und C++ sehr schnell Ergebnisse.

Share this post


Link to post
ipl
Posted

C++, Java, etc. sind gut für ein 10-Millionen-Euro-Projekt, das später eine 100-Millionen-Kunden-Datenbank verwalten soll.

Gehen beide auch für kleine Projekte. Hier gibt's Code.Beispiele zu Qt-Applikationen. Da ist sehr wenig Overhead dabei.

Sonst steht die Entwicklungszeit oft in keiner Relation zum Ergebnis. Das glauben die Java-Programmierer aber leider erst, nachdem sie Python gründlich ausprobiert haben. ^^

Glaube ich auch nicht. Ich habe mit Java und C++ sehr schnell Ergebnisse.

Ich möchte mich nicht in lange Diskussionen verstricken, aber das glaubte ich lange Zeit auch, bevor ich doch überredet wurde, Python auszuprobieren.

 

Web Server Code in Python

DAS ist wenig Overhead.

 

Zugegeben, Python hat da bereits viel Arbeit geleistet. Der Clue ist, dass das in fast jedem Bereich zutrifft.

Share this post


Link to post
etherial
Posted

C++, Java, etc. sind gut für ein 10-Millionen-Euro-Projekt, das später eine 100-Millionen-Kunden-Datenbank verwalten soll.

 

Java kann man auch für große Projekte verwenden. Mit C++ kommt man locker auf 10 Millionen Euro. Ob man dann mit der großen Anwendung aber noch Freude hat ist eine ganz andere Sache.

 

C++ ist ein Makro-Assembler und somit geeignet für Systemprogrammierung. Für alles andere ist die Produktivität mit C++ unerträglich schlecht.

 

Mir gefällt Java weil:

- es ein starkes statisches Typsystem und einen strengen Compiler hat (die meisten Fehler bemerkt der Compiler schon vor der Laufzeit)

- es eine konsequente objektorientierte Syntax hat

- es sehr viele freie Bibliotheken im Internet gibt.

- es deutlich performanter als andere höhere Programmiersprachen ist

 

C# ist vergleichbar, aber hat inzwischen auch einige Features, die mir nicht wirklich einen Mehrwert bringen.

 

An Quick-And-Dirty-Skriptsprachen kenne ich noch:

PERL - warum die Community das als Acronym für "Pathologically Eclectic Rubish Lister" ansieht wird einem klar, wenn man Programme gesehen hat

Python - Objektorientierung wirkt aufgesetzt, dynamische Typisierung nervt (die Fehler bemerkt der Kunde zur Laufzeit und nicht ich zur Compilierzeit)

Ruby - wie Python, nur dass die Objektorientierung besser ausgeprägt ist

Groovy - wie Ruby, nur dass man Java-Bibliotheken nutzen kann

 

Eine elegante Alternative zu Java ist Scala. Scala hat:

- Support für sämtliche Java-Bibliotheken (binär kompatibel)

- objektorientiert

- statisch getyptes strenges Typsystem (Typ-Inferenz statt Ducktyping)

- funktionale Programmierung möglich

- Pattern Matching (vergleichbar der Unifikation aus der logischen Programmierung)

- vergleichbar schnell wie Java

 

Was ich bemerkt habe: Alle Skriptsprachen ermutigen leider nicht dazu, anständig zu programmieren. Wer alleine Programmiert ist mit Skriptsprachen möglicherweise etwas schneller. Im Team bewirkt die Flexibilität, dass man Coding-Richtlinien erarbeiten muss, oder sich ständig über fremden Code ärgert.

 

P.S. Und ach ja, falls man auf funktionale Programmierung steht, kann man das auch (fast) genauso gut mit Python machen. Und ich glaube, mit Ruby auch, bin aber nicht sicher.

 

Funktionale Programmierung in Haskell ist "rein funktional" - mit allen Vor- und Nachteilen. Dazu steht in Wikipedia mehr.

Share this post


Link to post
Hobel
Posted · Edited by Hobel

Klingt blöd aber ich programmiere heute fast alles nur noch in Excel unter Visial Basic. Excel hat ein dermassen mächtiges Interface,

damit habe ich schon Maschinen gesteuert über IO kartén und deren Messdaten grafisch dargestellt. Geht mir Word natürlich auch. Unter Linux gibts zB tcl, pearl, php und andere schöne Sachen, alles kostenlos. Und natürlich den GNU CC, den benutze ich sehr oft.

Share this post


Link to post
Kezboard
Posted

Excel hat ein dermassen mächtiges Interface, damit habe ich schon Maschinen gesteuert

 

Neulich am Fließband: "Du Günni, warum dreht sich denn der Roboterarm ständig im Kreis?" - "Keine Ahnung, aber seit gestern haben wir die neue Office-Version installiert ... " :w00t::lol:

Share this post


Link to post
chaosmaker85
Posted

An Quick-And-Dirty-Skriptsprachen kenne ich noch:

PERL - warum die Community das als Acronym für "Pathologically Eclectic Rubish Lister" ansieht wird einem klar, wenn man Programme gesehen hat

Python - Objektorientierung wirkt aufgesetzt, dynamische Typisierung nervt (die Fehler bemerkt der Kunde zur Laufzeit und nicht ich zur Compilierzeit)

Ruby - wie Python, nur dass die Objektorientierung besser ausgeprägt ist

Groovy - wie Ruby, nur dass man Java-Bibliotheken nutzen kann

 

Ich mische mich nur ungern ein, aber "dirty" sind diese Sprachen allesamt nicht. Da gibts viel schlimmeres. Ich hab mit Python noch nicht großartig gearbeitet, bin von den Möglichkeiten und der Effizienz aber schwer beeindruckt!

Share this post


Link to post
berliner
Posted

C++ ist ein Makro-Assembler und somit geeignet für Systemprogrammierung. Für alles andere ist die Produktivität mit C++ unerträglich schlecht.

Was ist denn das für ein Unsinn? Sieht das nach Assember aus? Das ist übrigens eine analoge Uhr.

class AnalogClock : public QWidget
{
    Q_OBJECT

public:
    AnalogClock(QWidget *parent = 0);

protected:
    void paintEvent(QPaintEvent *event);
};

AnalogClock::AnalogClock(QWidget *parent)
    : QWidget(parent)
{
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);

    setWindowTitle(tr("Analog Clock"));
    resize(200, 200);
}

void AnalogClock::paintEvent(QPaintEvent *)
{
    static const QPoint hourHand[3] = {
        QPoint(7, 8),
        QPoint(-7, 8),
        QPoint(0, -40)
    };
    static const QPoint minuteHand[3] = {
        QPoint(7, 8),
        QPoint(-7, 8),
        QPoint(0, -70)
    };

    QColor hourColor(127, 0, 127);
    QColor minuteColor(0, 127, 127, 191);

    int side = qMin(width(), height());
    QTime time = QTime::currentTime();

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.translate(width() / 2, height() / 2);
    painter.scale(side / 200.0, side / 200.0);

    painter.setPen(Qt::NoPen);
    painter.setBrush(hourColor);

    painter.save();
    painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
    painter.drawConvexPolygon(hourHand, 3);
    painter.restore();

    painter.setPen(hourColor);

    for (int i = 0; i < 12; ++i) {
        painter.drawLine(88, 0, 96, 0);
        painter.rotate(30.0);
    }

    painter.setPen(Qt::NoPen);
    painter.setBrush(minuteColor);

    painter.save();
    painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
    painter.drawConvexPolygon(minuteHand, 3);
    painter.restore();

    painter.setPen(minuteColor);

    for (int j = 0; j < 60; ++j) {
        if ((j % 5) != 0)
            painter.drawLine(92, 0, 96, 0);
        painter.rotate(6.0);
    }
}

Share this post


Link to post
berliner
Posted · Edited by berliner

Web Server Code in Python

DAS ist wenig Overhead.

Http Server mit C+ und Qt

 

Es lohnt sich, sich mal das SDK herunterzuladen. Da ist eine nette Applikation dabei, die die ganze Samples startet. Nett ist z.B.

 

40000 Chips. Da wird eine Grafikszene mit 40000 Objekten aufgebaut, die dann in 4 Views unabhängig dargestellt wird

 

chip-demo.png

Share this post


Link to post
xolgo
Posted

Web Server Code in Python

DAS ist wenig Overhead.

 

Zugegeben, Python hat da bereits viel Arbeit geleistet. Der Clue ist, dass das in fast jedem Bereich zutrifft.

 

Sorry, aber das ist Äpfel mit Birnen verglichen. Nur weil eine Bibliothek entsprechend umfangreich ist, sagt das doch nichts über den Overhead einer Programmiersprache aus.

Den unsinnigen Vergleich könnte man noch weiter zuspitzen: Mit Bash ist der Webserver noch einfacher implementiert, braucht sogar nur eine Zeile: "aptitude install apache2"

Share this post


Link to post
H.B.
Posted · Edited by ficoach

Im wesentlichen geht es um kleine Anwendungen um z.B. Informationen aus größeren Textdatein zu extrahieren, Berechnungen zu machen oder Vorgänge zu automatisieren.

 

 

Hierfür kann man auf sämtliche Entwickelroberflächen und graphische Bibliotheken schlicht verzichten.

 

Es reicht ein einfache Editor, am Besten der Vim und eine einfache Skriptsprache.

 

Für Textextraktionen greifen alle Sprachen auf die gleichen Biblotheken für reguläre Ausdrücke zurück.

 

Hier nochmal ein Beispiel, wie effizient man mit Ruby arbeiten kann:

file = "myfile.txt"
analyseLine = 10
maxlength = (text=IO.readlines(file)).collect{|x| x.length}.max
puts "the longest line of #{file} has #{maxlength} characters"
print "The content of line #{showline} --> ", text[analyseLine]
print "This line has ", text[analyseLine].split.count, "words"

 

Dies liest die Datei "file" komplett in den Speicher, ermittelt den längsten Satz, inspiziert die Zeile "10" und druckt diese aus.

Share this post


Link to post
berliner
Posted

Sorry, aber das ist Äpfel mit Birnen verglichen. Nur weil eine Bibliothek entsprechend umfangreich ist, sagt das doch nichts über den Overhead einer Programmiersprache aus.

 

Jein, die Bibliotheken und die dort verwendeten Patterns sind heute extrem wichtig. Ich würde fast sagen, daß die reine Syntax der Sprache kaum noch ein Kriterium ist. Das hat man schnell gelernt, aber sich durch die APIs durchzuwühlen, ist ein ganz anderer Aufwand. Wobei die modernen, objektiorientierten dort auch jeweils ähnlichen Philosophien folgen.

 

Eine große Umstellung gibt es noch, wenn man von reiner Win32- oder Unix/X11-Programmierung den Schritt zu modernen APIs macht.

 

Bei mir ist es so, daß ich täglich Java und C++ mache und ich da überhaupt keine Präferenz hinsichtlich der Syntax habe. Und es gibt sehr nette Bibliotheken für beide. Unter Java habe ich z.B. sehr gerne PDFs mit iText erzeugt, wogegen Swing-Programmierung etwas überladen ist. Da mag ich C++ mit Qt mehr.

 

Ich habe vor Jahren auch Backend-Programmierung mit C++ und CORBA gemacht. Das war sehr schlank und performant. Leider haben sich seitdem J2EE-Server durchgesetzt. Das war in den ersten Jahren eine krasse Verschlechterung und hat sich erst mit Spring und EJB 3.0 verbessert.

Share this post


Link to post
etherial
Posted

Was ist denn das für ein Unsinn? Sieht das nach Assember aus? Das ist übrigens eine analoge Uhr.

 

Der einzige Unterschied ist die Syntax und das vorhandensein diverser Makros (deswegen Makroassembler). Schau einfach mal in Wikipedia.

 

Die Programmiersprache C wurde mit dem Ziel entwickelt, eine echte Sprachabstraktion zur Assemblersprache zu implementieren. Es sollte eine direkte Zuordnung zu wenigen Maschineninstruktionen geben, um die Abhängigkeit von einer Laufzeitumgebung zu minimieren. Als Resultat dieses Designs ist es möglich, C-Code auf einer sehr hardwarenahen Ebene zu schreiben, analog zu Assemblerbefehlen.

 

Die Unterschiede zu hohen Programmiersprachen:

- schwaches Typsystem (Speicherzellen wissen nicht welchen Typ sie haben)

- Pointer (explizites Speichermanagement)

- direkter Zugriff auf die Hardware möglich

 

Ich habe mit C++ nie mehr als Übungsaufgaben gemacht. Aber die haben mir schon derart die Nerven geraubt, dass ich mit Java deutlich glücklicher war. Vielleicht erzählst du einfach mal aus deiner Erfahrung wie hoch du den Wert eines starken Typsystems und eines automatischen Speichermanagements beurteilst.

 

Ich mische mich nur ungern ein, aber "dirty" sind diese Sprachen allesamt nicht. Da gibts viel schlimmeres. Ich hab mit Python noch nicht großartig gearbeitet, bin von den Möglichkeiten und der Effizienz aber schwer beeindruckt!

 

Ich beurteile Sprachen immer nach ihrer Eignung für mittelgroße und große Projekte mit größeren Teams. Dafür sind strenge Sprachen meiner Meinung nach robuster.

 

Es ist unbestritten, dass man mit den oben genannten Sprachen sehr hohe Abstraktion erreicht hat und somit auch sehr elegante Lösungen stricken kann. Die Flexibilität, die einem das ermöglicht kann aber auch dazu führen, dass sich Spagetti-Code anhäuft, der deutlich schwerer zu verstehen ist als Code einer stark typisierten Sprache.

 

Natürlich gibt es schlimmeres (nicht ganz ernst gemeint):

-INTERCAL

-brainfu**

-und andere

Share this post


Link to post
berliner
Posted · Edited by berliner

Der einzige Unterschied ist die Syntax und das vorhandensein diverser Makros (deswegen Makroassembler). Schau einfach mal in Wikipedia.

Dann ist Java auch ein Makroassembler. Java ist bestimmt näher an C++ als C++ an Assembler. Da muß man gar nicht weiter diskutieren. Wenn du schon mit Wikipedia kommst, dann schau dort auch nach der Definition für "Hochsprache". Da steht nichts von Speichermanagement oder daß es keine Pointer geben darf (die in Java dann eben Referenzen heißen). Dieses Pointer-Argument ist ziemlich albern. Woher kommen dann die NullPointerExceptions in Java?

 

Laut Wikipedia

o Syntax oft an menschliche Denkgewohnheiten angepasst (x)

o Größtenteils maschinenunabhängig (x)

o Geschwindigkeitsverlust durch Abstraktion (tendenziell) (x)

o Abstrakte, maschinenunabhängige Datentypen (Ganzzahl, Gleitkommazahl, ...) (x)

o Mehrere Kontrollstrukturen (if, while,...) (x)

o Datenstrukturen (Feld, Record) (x)

o Weitgehende semantische Analyse möglich (x)

 

Siehst du, ich konnte überall ein Kreuz machen. Java und C sind beides 3GL-Sprachen. Mal zum Vergleich ein Stück 68000er-Assembler-Code:

PRTSTRCRLF      EQU     0               	      TRAP function to print string + CRLF
PRTSTR  	    EQU     1                       TRAP function to print character string
NUMIN   	    EQU     4                       TRAP function to read integer from kb
NUMOUT  	    EQU     3                       TRAP function to o/p integer to screen

       ORG     $1000
*       Prompt users for their age.
       MOVEA.L #PROMPT,A1              ;Pointer to start to prompt
       MOVE.W  #(AGE-PROMPT),D1        ;Get prompt message length
       MOVE.B  #PRTSTR,D0              ;Set up TRAP to print string
       TRAP    #15                     ;.. and print prompt

*       Get age from keyboard and store it in AGE
       MOVE.B  #NUMIN,D0               ;Set up trap to get age from kb
       TRAP    #15                     ;Get it
       MOVE.L  D1,AGE                  ;.. and store it

*       Output message
       MOVEA.L #MESSG1,A1              ;Pointer to start of o/p message
       MOVE.W  #(MESSG2-MESSG1),D1     ;Get message length
       MOVE.B  #PRTSTR,D0              ;Set up output string TRAP
       TRAP    #15                     ;.. and do it

*       Output twice user's age
       MOVE.L  AGE,D1                  ;Get user's age
       ADD.L   D1,D1                   ;Double it
       MOVE.B  #NUMOUT,D0              ;Set up TRAP to o/p integer
       TRAP    #15                     ;.. and do it

*       Finish output line     
       MOVEA.L #MESSG2,A1              ;Point to final string
       MOVE.W  #(COUNTER-MESSG2),D1    ;Get its length
       MOVE.B  #PRTSTRCRLF,D0          ;TRAP to o/p string + CRLF
       TRAP    #15                     ; and do it
       STOP    #$2700

PROMPT  DC.B    'What is your age in years? : ' 
AGE     DS.L    1                                          ;Space for age
MESSG1  DC.B    'If you were twice as old you would be '   ;Oitput message 
MESSG2  DC.B    ' years old'                               ; .. in parts
COUNTER EQU     *                                          ; End of data

       END     $1000

 

Wo siehst du da Ähnlichkeiten zu C?

Ich habe mit C++ nie mehr als Übungsaufgaben gemacht. Aber die haben mir schon derart die Nerven geraubt, dass ich mit Java deutlich glücklicher war.

Spricht nicht für dich bzw. kommt öfter vor, ist aber ein Trugschluß. Der leichte Einstieg in Java kann zu der Illusion verhelfen, man würde alles richtig machen. In C++ fällt einem manches leichter auf die Füße, was in Java durchgeht. Das ist nicht unbedingt schlecht.

Vielleicht erzählst du einfach mal aus deiner Erfahrung wie hoch du den Wert eines starken Typsystems und eines automatischen Speichermanagements beurteilst.

Speichermanagement ist schön und gut, aber auch nicht zu 100% verläßlich. Sonst gäbe es keine Vorträge zu memory leaks in Java. Und wenn mir jemand erzählt, er bräuchte das, weil er sonst nicht klarkommt, dann habe ich große Zweifel an der Codequalität. Auch mit Speichermanagement muß man immer wissen, was man tut, statt sich blind darauf zu verlassen. In C++ muß man eben in den Destruktoren seinen dynamisch angeforderten Speicher freigeben, was sich aber auf ein Minimum beschränken läßt.

 

Es ist unbestritten, dass man mit den oben genannten Sprachen sehr hohe Abstraktion erreicht hat und somit auch sehr elegante Lösungen stricken kann. Die Flexibilität, die einem das ermöglicht kann aber auch dazu führen, dass sich Spagetti-Code anhäuft, der deutlich schwerer zu verstehen ist als Code einer stark typisierten Sprache.

 

Spaghetti-Code hat nichts mit Typisierung zu tun, sondern mit Strukturierung. Man kann wunderbar Spaghetticode in Java produzieren.

Share this post


Link to post
xolgo
Posted

Jein, die Bibliotheken und die dort verwendeten Patterns sind heute extrem wichtig. Ich würde fast sagen, daß die reine Syntax der Sprache kaum noch ein Kriterium ist. Das hat man schnell gelernt, ...

 

Das mag auf Dich und mich zutreffen, aber vielleicht nicht auf alle Menschen.

 

aber sich durch die APIs durchzuwühlen, ist ein ganz anderer Aufwand.

 

Kein Widerspruch, dann soll man das Kind aber beim Namen nennen.

Nicht: Sprache X nehmen, weil sie wenig Overhead hat.

Sondern: Sprache Y nehmen, weil es tolle Bibliotheken gibt, die mir viel Arbeit abnehmen, bei dem was ich gerade machen will.

Share this post


Link to post
berliner
Posted

Nicht: Sprache X nehmen, weil sie wenig Overhead hat.

Sondern: Sprache Y nehmen, weil es tolle Bibliotheken gibt, die mir viel Arbeit abnehmen, bei dem was ich gerade machen will.

Würde ich so sehen. Ich habe z.B. lange überlegt, was ich nach MFC nehmen soll. Ich habe ernsthaft überlegt, zu C# und .NET zu wechseln, aber nun ist es C++ mit Qt geblieben. Die Bibliotheken haben den Ausschlag gegeben (und die plattformunabhängigkeit). Java kommt wieder ins Spiel, wenn man irgendwann mal serverseitige Backendprogrammierung im Bereich Unternehmensanwendungen machen will/muß. Aber nicht, weil Java dafür irgendwas bietet, was andere nicht haben, sondern weil schlichtweg die gängigen Frameworks abseits von Microsoft alle auf Java aufsetzen. Python/PHP findet sich eher in der Webagentur-Frickel-Ecke.

Share this post


Link to post
maush
Posted

Um auf die ursprüngliche Frage zu antworten:

Ich würde mich mit .Net beschäftigen. Ob man dann als Sprache C# oder Visual Basic wählt ist eigentlich Geschmackssache. Ist in meinem Augen für PC Programme produktiver als Java. Java nehme ich, wenn es auch auf Linux laufen soll, wobei das mit .Net auch über Mono möglich ist. C nehme ich nur für Embedded Systems.

 

Denke mit .Net macht man auch für die Zunkunft wenig falsch. Bei Web Anwendungen ist Python nicht schlecht

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...