Seite 3 von 3

Verfasst: Donnerstag 30. April 2009, 16:31
von DasIch
Wenn man wirklich tief in die Materie will sind Cs Typen unnötige Abstraktion.

Verfasst: Donnerstag 30. April 2009, 17:03
von HerrHagen
@ichbinsisyphos: Ich glaub du verstehst einige grundlegende Dinge bzgl. Programmierung nicht ganz richtig. Programmieren heißt nicht einfach nur dem Computer ein paar Befehle geben, die er dann nacheinander abarbeitet - das wäre ein eher naives Verständnis. Programmieren ist vielmehr die Beschreibung einer Problemstellung - und zwar auf eine Art und Weise die ein Rechner letztendlich verstehen kann. Wenn du verstehen willst wie ein Computer aufgebaut ist und im Inneren so arbeitet, dann ist C natürlich das richtige für dich. Eine bessere Problembeschreibung als mit Python bekommst du in C aber sicherlich nicht hin. Python verfügt halt einfach über mehr Ausdrucksmittel und damit auch über die Möglichkeit Probleme besser zu beschreiben. Wenn du 100 Wörter Englisch kannst, reicht das sicherlich um alle Probleme dieser Welt zu beschreiben. Wenn dein Wortschatz entsprechend größer ist, kannst du sie natürlich besser beschreiben. (Zuviele solltens dann auch nicht sein, da dann niemand mehr versteht was gemeint ist - das wäre dann eine Analogie zu Perl :wink:).
Dein eigentliches zu lösendes Problem ist ja beispielsweise nie zwei uint16 zu addieren - deswegen unterscheidet Python ja auch nur zwischen ganzen und nicht ganzen Zahlen (eine Unterscheidung die es so auch im "realen" Leben gibt.).

MFG HerrHagen

Verfasst: Donnerstag 30. April 2009, 18:38
von birkenfeld
ichbinsisyphos hat geschrieben: Die neuen C++-Standards sind relativ jung. Die sind ja nicht nur deswegen noch immer so mühsam um die Leute zu quälen, sondern weil man dadurch eine größere Kontrolle über den Programmablauf hat.
Nach einer quälenden C++-Erfahrung gestern bin ich wirklich froh, normalerweise Python schreiben zu können. Die Sprache an sich ist ja nicht furchtbar, aber es gibt (um auf deinen Kritikpunkt übrigens zurückzukommen) hundertsiebenunddreißig Wege zum Ziel, über verschiedenste Bibliothekten, die einem das Leben leichter machen. Und so hatte sich der Code, den ich anpassen durfte, auch nicht zwischen Qt, C++ STL und C library entschieden, sondern locker alles durchgemischt, mit der entsprechenden Übersicht.

Im speziellen Fall ging es um XML-Behandlung. Was dort z.B. eine Funktion von 90 Zeilen Ausmaß war, hätte sich in Python/etree auf etwas wie

Code: Alles auswählen

tree = parse(filename)
el, = tree.findall('.//foo/bar')
for k, v in (line.split(':') for line in el.text.splitlines()):
    if k == 'om':
        return float(v.strip())
beschränkt.

Verfasst: Donnerstag 30. April 2009, 19:14
von Leonidas
HerrHagen hat geschrieben:Programmieren heißt nicht einfach nur dem Computer ein paar Befehle geben, die er dann nacheinander abarbeitet - das wäre ein eher naives Verständnis. Programmieren ist vielmehr die Beschreibung einer Problemstellung - und zwar auf eine Art und Weise die ein Rechner letztendlich verstehen kann.
SICP hat geschrieben:Code should be written for humans to read, and only incidentally for machines to execute.

Verfasst: Donnerstag 30. April 2009, 19:56
von Darii
ichbinsisyphos hat geschrieben:Wenn jemand zum Ziel hat ein sehr tiefes Verständnis für die Materie zu entwickeln ist aber wahrscheinlich der zwanghafte, mühsame Weg über C geschickter. Weil die Abstrahierung nicht so stark ist und man sich um das meiste selbst kümmern muss.
Mal bildlich gesprochen finde ich persönlich es wesentlich angenehmer, auf einer stabilen Brücke zu stehen und zu gucken was unter der Brücke ist, als im Wasser wild rudernd zu versuchen die Brücke zu erreichen.

Man kann sich sicherlich noch vorzüglich darüber streiten ob jetzt der Bottom-up- oder der Top-down-Ansatz erfolgversprechender ist, ich bevorzuge jedenfalls in dem Fall letzteren. Zum Ziel kommt man auf jeden Fall mit beiden (irgendwie).

Verfasst: Donnerstag 30. April 2009, 20:07
von BlackJack
@ichbinsisyphos: Aha, Physiker, der von Leuten die selber nie richtig Programmieren gelernt haben ein Gemisch aus C und C++, zwei sehr verschiedenen Sprachen, gezeigt bekommen hat. Und dann Informatikstudienanfängern Tipps gibt. Argh!

Ich habe selber schon Programme von Physikern gesehen. Da ist es teilweise wichtig, dass man sich wirklich gut mit der Hardware auskennt, die Speicherarchitektur kennt, um Fortran-Code zu schreiben, der bei grossen Datenmengen möglichst wenig "cache misses" verursacht, und die Fliesskommaberechnungen so zu anzuordnen, dass die Rechenungenauigkeiten möglichst klein bleiben. Und nun überleg mal bitte für wieviel Prozent der Software auf diesem Planeten dieses ganze Spezialwissen und die absolute Kontrolle über jedes Prozessorregister nötig ist!? Und wieviel Software von einer abstrakteren Sicht profitiert, die grössere, wartbarere, und stabilere Systeme erlaubt.

Das Problem bei C++ ist ja nicht, dass man sich mit der Hardware und der weitreichenden Kontrolle auseinandersetzen *kann*, sondern dass man es *muss*. Zeit die dabei draufgeht, geht einem vom Lösen des eigentlichen Problems ab.

Verfasst: Donnerstag 30. April 2009, 22:09
von ichbinsisyphos
BlackJack hat geschrieben:@ichbinsisyphos: Aha, Physiker, der von Leuten die selber nie richtig Programmieren gelernt haben ein Gemisch aus C und C++, zwei sehr verschiedenen Sprachen, gezeigt bekommen hat. Und dann Informatikstudienanfängern Tipps gibt. Argh!

Ich habe selber schon Programme von Physikern gesehen. Da ist es teilweise wichtig, dass man sich wirklich gut mit der Hardware auskennt, die Speicherarchitektur kennt, um Fortran-Code zu schreiben, der bei grossen Datenmengen möglichst wenig "cache misses" verursacht, und die Fliesskommaberechnungen so zu anzuordnen, dass die Rechenungenauigkeiten möglichst klein bleiben. Und nun überleg mal bitte für wieviel Prozent der Software auf diesem Planeten dieses ganze Spezialwissen und die absolute Kontrolle über jedes Prozessorregister nötig ist!? Und wieviel Software von einer abstrakteren Sicht profitiert, die grössere, wartbarere, und stabilere Systeme erlaubt.

Das Problem bei C++ ist ja nicht, dass man sich mit der Hardware und der weitreichenden Kontrolle auseinandersetzen *kann*, sondern dass man es *muss*. Zeit die dabei draufgeht, geht einem vom Lösen des eigentlichen Problems ab.
Fällt dir auf das wir einer Meinung sind? Die Sache hat einfach zwei Seiten, die man für sich abwägen sollte.

Aber bitte erinner mich nicht an Fortran :lol:

Verfasst: Freitag 1. Mai 2009, 15:22
von birkenfeld
BlackJack hat geschrieben:Ich habe selber schon Programme von Physikern gesehen.
Das tut mir leid für dich. :D