Programmieren lernen - besser kein OOP.



  • muemmel schrieb:

    Warum nicht schon in der ersten Lernphase strings, referenzparameter und Streamausgaben nützen.

    Weil es das in C nicht gibt.



  • Hi,

    ich sagte ja, nicht dogmatisch sein.
    C lernen, aber mit nem C++-Compiler und dabei ein paar nützliche Verbesserungen und Vereinfachungen von C++ gleich mit nutzen.
    Wen außer einigen die spezielle Hardwaretreiber und.... programmieren interessiert es denn schon wirklich, ob es lupenreines C oder C mit ein paar vernünftigen Anleien an C++ ist.
    Es interessiert doch auch keinen ob Putin nun wirklich ein lupenreiner Demokrat ist. 🙂

    Gruß Mümmel



  • muemmel schrieb:

    C lernen, aber mit nem C++-Compiler und dabei ein paar nützliche Verbesserungen und Vereinfachungen von C++ gleich mit nutzen.

    Das ist glaub ich das, was die meisten hier "C++ lernen" nennen würden 🙂



  • muemmel schrieb:

    C lernen, aber mit nem C++-Compiler und dabei ein paar nützliche Verbesserungen und Vereinfachungen von C++ gleich mit nutzen.

    dann haste aber 'komischen' C code, der nicht mehr so richtig C kompatibel ist. es gibt zu viele unterschiede zwischen beiden sprachen. wenn du OOP mit 'richtigem' C machen willst, dann nimm doch das: http://de.wikipedia.org/wiki/Objective-C
    :xmas2:



  • muemmel schrieb:

    Wen außer einigen die spezielle Hardwaretreiber und.... programmieren interessiert es denn schon wirklich, ob es lupenreines C oder C mit ein paar vernünftigen Anleien an C++ ist.

    Mich, und zwar dann wenn die Leute in ANSI C kommen und ihre (eigentlich) C-Probleme anhand von C++-Code illustrieren.

    Entweder man fängt mit reinem C an oder eben mit reinem C++. Hauptsache konsequent und nicht so ein Mischmasch wie C/C++.

    Mit welcher Sprache genau man nun anfangen sollte kann man hier eh nicht objektiv diskutieren. C, C++, Asm, BASIC, Cobol, Ada, C#, Java, Erlang, (L(i(s)p)), Python, Ruby... egal... alles ausser PHP 😉



  • Hi,

    da sehe ich jetzt keinen Sinn drin. Die mit Programmierung anfangen wollen doch nicht Ansi-C machen oder C++ sondern irgend ein Problem lösen, also irgend was programmieren. Es muß mit dem Bereich den man als Anfänger überblickt sauber laufen und von einem verstanden werden. Irgendwann werden die sowieso immer mehr zu C++ hindriften, wenns für ihre Arbeit gut ist. Aber für den Anfang nutzen sie erst mal das was problemlos zu lernen ist. Wozu, wenn man nicht für einen Ansi-C-Compiler arbeitet noch so alte Routinen nehmen wie scanf()... und wozu zu viel mit Zeigern rumjonglieren, wenn man z.B. das bei Parametern auch mit Referenzen machen kann. Das Ziel ist doch gerade, wenn einer erst mal mit C anfängt und danach in die OOP einsteigt, daß er sich nicht erst alles das zu eigen macht und in Fleisch und Blut einschleift was nachher in C++ hinderlich wäre.
    Warum soll ein Anfänger Pointerjongleur werden, wenn ers später in C++ sowieso anders löst. C soll doch in dem Zusammenhang nicht als reine Lehre sondern als erster Schritt auf dem Weg zu C++ verstanden werden.
    Und was stört daran, wenn einer für das was er braucht mit C mit ein paar Ergänzungen ausreicht, wenn er das dann so macht. Sauber programmieren kann man auch zwischen den Sprachen. Wichtig ist doch nur, mit einem kleinen überschaubaren Bereich anfangen, auch in Bezug auf den Sprachumfang und dann in dem Maße wie man es versteht und begreift weitergehen. Oder ist unter Euch jemand, der wirklich ALLE Zipfel von C++ bis in die letzten und neuesten hundertprozentig verstanden hat und täglich anwendet.
    Ich kann mir nicht helfen, aber mein Chef bezahlt mich nicht für die Beschränkung auf Ansi-C oder die volle Ausnutzung von C++ sondern für gelöste Aufgaben. Und das so, daß sie auch verständlich und wartbar gelöst sind.

    Gruß Mümmel



  • Simon2 schrieb:

    lolz schrieb:

    Man sollte nicht vergessen, dass es beim Programmieren um das Entwerfen von Algorithmen geht ...

    Also DAS würde ich jetzt mal bezweifeln.

    Wenn man schon verallgemeinert, dann vielleicht gerade noch, dass es um "Datenverarbeitung" geht, aber heutzutage hat gaaaanz viel mit Datenhaltung,- transport, -kombination, -strukturierung, -anzeige, .... zu tun und viel weniger damit, einen (mathematischen) Algorithmus auf einen Satz identischer Daten loszulassen. (...)

    All den Dingen, die du nennst, liegen doch Algorithmen zugrunde. Was glaubst du, wie dein Editor Zeichenfolgen findet? Der Packer Daten kleiner macht? Die Auto-Vervollständigung deines Browsers funktioniert? Die Liste der Dateien sortiert wird?

    Es ist wahr, auf einen Algorithmus zur schnellen Wortsuche kommen 100 Editoren, die ihn verwenden. Dennoch müssen die Grundlagen auch entwickelt werden, und wenn ich mir allein den Bereich der Datenkompression und Verschlüsselung ansehe, gibt es da immer noch Bedarf. 3D-Grafik wäre ein weiteres Feld, dass mir in den Sinn kommt.



  • muemmel schrieb:

    Hi,

    ich sagte ja, nicht dogmatisch sein.
    C lernen, aber mit nem C++-Compiler und dabei ein paar nützliche Verbesserungen und Vereinfachungen von C++ gleich mit nutzen.
    Wen außer einigen die spezielle Hardwaretreiber und.... programmieren interessiert es denn schon wirklich, ob es lupenreines C oder C mit ein paar vernünftigen Anleien an C++ ist.

    Jeden, der schon einmal vor der Aufgabe stand, ein Projekt von DOS nach Win32 oder von Win32 nach Linux zu portieren. Es ist dabei sehr unangenehm, wenn du 100.000 Stellen im Code patchen musst, um Compiler-Special x oder y, die Microsoft-Extension z oder die spezielle Header-Datei aus der Borland Turbo-Blubb Library zu entfernen.
    Ein Beispiel (aus der Hölle): Kompressionsroutinen in 16-Bit Assembler in 32-Bit C-Code verwandeln... Der Coder hatte auch nur nützliche Verbesserungen der Sprache benutzt, nämlich Inline-Assembler.



  • muemmel schrieb:

    Irgendwann werden die sowieso immer mehr zu C++ hindriften, wenns für ihre Arbeit gut ist.

    so ein hindriften gibt es nicht wirklich. ein C++ compiler frisst keine vernünftigen C programme, nur ganz triviales zeug und umgekehrt geht's auch nicht.



  • muemmel schrieb:

    Ich kann mir nicht helfen, aber mein Chef bezahlt mich nicht für die Beschränkung auf Ansi-C oder die volle Ausnutzung von C++ sondern für gelöste Aufgaben.

    Und genau dazu solltest du C++ ausnutzen.

    muemmel schrieb:

    Und das so, daß sie auch verständlich und wartbar gelöst sind.

    Deswegen müssen die anderen auch C++ können. (Aber das ist kein Problem, meine Oma muss das eh nicht warten.)



  • Hi,

    trotz allem gehe ich da nicht mit mit Euch. Wer programmiert denn heute noch für DOS. Doch höchstens (mit Ausnahme von Anfänger-Übungsaufgaben ohne praktischen Nährwert) Sachen die für Win nicht sinnvoll sind. Die werden dann aber auch in 120 Jahren noch nicht für Win sinnvoll sein.
    Ein sinnvolles Übernehmen von Programmen von DOS nach Win gibt es sowieso (fast) nie, da sind die Programmphilosophien einfach zu unterschiedlich und die Systemschnittstellen auch.
    Und was die Kompressionsroutinen betrifft, damals, als die Rechner noch sehr viel langsamer waren und in jeder Ausgabe einer beliebigen Computerzeitschrift mindestens 3 Tests drinstanden ob nun Arj, Lha, Zip oder Rar 0,5% schneller sei war es in vielen Fällen schon richtig, daß man für sowas mittels Inlineassembler das Letzte aus der Mühle rausgeholt hat.
    Und was die Portierung nach Linux betrift, sein wir doch mal ehrlich, wieviele Programme werden denn wirklich nach Linux portiert? Ich behaupte mal, das das keine 5% aller erstellten Programme sind. Alles spricht von Portablität, aber außer im Workstations- und Serverbereich steht praktisch auf JEDEM Schreibtisch ein Windows-Rechner.
    Eigentlch ist es doch in vielen Fällen fast anders herum, daß im Laufe der Zeit viele Programme von Unix nach Win rübergehoben wurden.
    Bei Programmen, wo man aber von vornherein weis oder annimmt, daß sie mal portiert werden müssen, solte man gleich von Anfang an anders rangehen, und die eigentlich Verarbeitung radikal von der Bedienung trennen. Ein Aufbau der zumindest der Philosophie vom C++Builder etwas konträr läuft und irgendwo Einschränkungen in der realisierbaren Schnittstelle zum Benutzer erfordert.
    Das C Programme keine C++-Programme sind gehe ich so auch nicht ganz mit. Zum Beispiel sind ALLE Programe aus dem Ritchie auch C++-Programme. Und da nun mal kein fertiger C++Programmierer vom Himmel fällt, muß man in der Anfangsphase Abstriche machen. Und da sind aus meiner Sicht ein an sich sauberer Programmierstil und eine perfekte Handwerkszeugbeherrschung wesentlich wichtiger als das vollle Ausnutzen der C++-Möglichkeiten. Was nützt ein C++-Programm das alles Möglichkeiten der Sprache ausnutzt, aber ansonsten übelster Schrott ist.

    Gruß Mümmel



  • Seien wir mal ehrlich, mümmel, von jemandem wie dir würde ich mir meine Software nicht schreiben lassen wollen.



  • muemmel schrieb:

    Zum Beispiel sind ALLE Programe aus dem Ritchie auch C++-Programme.

    Hmmm

    int min(a, b)
    int a, b; {
       return( a < b ? a : b );
    }
    

    Habe keinen C++-Compiler gefunden, der dass frisst.



  • 2am schrieb:

    ...All den Dingen, die du nennst, liegen doch Algorithmen zugrunde. ...

    Was Du zu widerlegen versuchst, habe ich auch nie behauptet.

    Gruß,

    Simon2.



  • Helium schrieb:

    muemmel schrieb:

    Zum Beispiel sind ALLE Programe aus dem Ritchie auch C++-Programme.

    int min(a, b)
    int a, b; {
       return( a < b ? a : b );
    }
    

    Habe keinen C++-Compiler gefunden, der dass frisst.

    diese uralt-syntax mögen viele aktuelle C compiler auch nicht mehr.
    aber selbst bei ganz einfachen codes, wie z.b.: *char p = malloc(123); will das kein C++ compiler schlucken, von dingen wie sizeof('x') mal ganz abgesehen, die in C und C++ unterschiedliche ergebnisse liefern.
    🙂



  • Hi,

    das beruhigt mich ungemein.
    Aber ich habe früher lange genug als Lehrfacharbeiter mit Lehrlingen zusammen gearbeitet (noch nicht am Computer sondern im Maschinenbau) daß ich begriffen habe, daß es bei Anfängern keine Wunder gibt, und daß man, wenn man Ergebnisse sehen will keine Wunder erwarten darf und dei Stufen klein halten muß.
    Aber eines habe ich damals begriffen, daß nichts darüber geht, erst mal das grundlegende Handwerk perfekt zu beherrschen.
    Da ich eigentlich die ganze Zeit nur als Einzelkämpfer meine Arbeit mache, bin ich sicher nicht der Top-Programmierer. Man schmort zu viel im eigenen Saft und entnimmt anregungen nur aus NGs, Zeitschrifte, Fachbüchern... Aber andererseits muß ich mich auch nach den Regeln richten, und das sind nun mal nicht nur die der Porogrammiersprache.
    Wenn ich irgend eine Sache realisieren soll, und der Chef kommt nach ca 2 Stunden und fragt, was es denn schon zu sehen gibt, dann ist es schön und gut, das das unwissenschaftlich ist und nichts mit sauberer Programmierung zu tun hat, aber dann muß eben zumindest der Entwurf eines Formulars bis dahin fertig sein. Ob das zielführend ist, ist egal, wer den Lohnschein unterschreibt hat recht. Das ich am Ende doch eine funktionierende und vor allem stabil laufende Lösung anbieten muß, ist die andere Sache. Aber sowohl bei meinem jetzigen Chef, als auch bei meiner alten Stelle war immer das primäre geforderte, erst mal was zum angucken zu machen. Und bisher ist von mir noch nichts nach Linux rübergewandert. Wenn ich da immer erst mal auf einem ordentlichen Konzept bestanden hätte, hätte ich weder den einen noch den anderen Job gehabt. Sicher geht es mir da nicht alleine so. Wenn der Chef keine Ahnung von Programmierung hat, muß erst mal was fürs Auge gebaut werden, damit er was hat was er sehen kann. Und dann wird auch schnell mal aus einem kleien Miniteil ein großes durch Rucksäcke dranhängen, weil man ja keine Zeit für einen Neuanfang hat. Auch wenn der vielleicht viel billiger wäre. Aber er würde (am Beispiel meiner alten Tätigkeit) die Reihe daß man jedes viertel oder halbe Jahr bei den zuständigen Stellen im Ministerium was neues ZEIGEN kann um das nächste Projekt bewilligt zu bekommen unterbrechen.
    Ich weiß nicht, wie Du das siehst, aber ich behalte meien Job lieber, auch wenn er mit sich bringt, daß er nicht optimal ist.

    Gruß Mümmel



  • Hi,

    zum einen gibt es zwischen den einzelnen Auflagen von die C Programmiersprache doch Unterschiede und Weiterenticklungen. Soweit ich mich erinnere basierte die letzte doch auf ANSI-C und nicht mehr auf K&R-C.
    Außerdem glaube ich mich zu erinnern sowohl im Vorwort als auch noch woanders gelesen zu haben daß ALLE diese Quellen auch mit Stroustups C++-Compiler getetet wurden. Sicher ist da nun auch schon wieder ein Weilchen her, und in der Zwischenzeit hat sich auch C++ weiterentwickelt. Sicher würden die Autoren Kernighan und Ritchie das in einer neuen Auflage auch wieder berücksichtigen.

    Gruß Mümmel



  • Gerade moderne Tools bieten aber wunderschön die Möglichkeit Eye Candy zu bieten ohne groß Code zu haben... Man klickt mal eben ein Interface zusammen und hat schon ne Menge zum herzeigen.

    Naja, hat aber alles seine Vorteile: dein Ansatz ist sicher der pragmatische der doch immer irgendwie funktioniert und mir aktuell das Brot auf den Tisch bringt. Denn ich darf aktuell solche chaotische Software portieren. Wäre es gut designt hätte ich den Job nicht - also ich kann nicht sagen dass der Ansatz schlecht wäre.



  • muemmel schrieb:

    Hi,

    zum einen gibt es zwischen den einzelnen Auflagen von die C Programmiersprache doch Unterschiede und Weiterenticklungen. Soweit ich mich erinnere basierte die letzte doch auf ANSI-C und nicht mehr auf K&R-C.
    Außerdem glaube ich mich zu erinnern sowohl im Vorwort als auch noch woanders gelesen zu haben daß ALLE diese Quellen auch mit Stroustups C++-Compiler getetet wurden. Sicher ist da nun auch schon wieder ein Weilchen her, und in der Zwischenzeit hat sich auch C++ weiterentwickelt. Sicher würden die Autoren Kernighan und Ritchie das in einer neuen Auflage auch wieder berücksichtigen.

    Gruß Mümmel

    Klassische und weit verbreitete Miß-Interpretation. Nur weil sich Code durch den C++ Compiler compilieren läßt, ist es nicht zwingend auch C++ Code. es kann nach wie vor _reiner_ C-Code sein. C gilt auch als UNtermenge von C++, es bleibt aber C. Die meisten mir bekannten Compiler können eben beides, C und C++.



  • Hi,

    sicher bieten moderne Werkzeuge wie Delphi und C++Builder Werkzeuge um schnell mal ne Maske zu bauen. Wenn dann aber der Chef da auch gleich noch ein bißchen rumklicken will und man die zu verwendende Dateistruktur aus Excel exportiert fertig einzubauen rübergereicht bekommt sind eigentlich die Messen für sauberes Arbeiten schon gesungen. Und wenn dann noch die zu lösende Aufgabe in eigentlich nicht getrennt gehörende Programmteile zerrissen wird, bloß weils dem Chef so logischer erscheint, dann ist es eben so zu tun. Vor allem wenn man den eigentlichen Umfang der Aufgabe nur in kleinen Häppchen gesagt bekommt, um den Programmierer nicht zu "erschrecken". Das hat sich ja schließlich auch schon bei der dBase-Vorversion bei einem anderen Programmierer bewährt.
    Gut wenn man Informatiker als Chef hat, die wissen dann was man braucht und wie es abzuarbeiten ist. aber wenn man Wissenschaftler als Chef hat, für die das nur Mittel zum Ergebnis ist, dann muß man damit Leben, auch damit, daß nichts und keine Entscheidung endgültig ist.
    Bei solchen Programmen lohnt aber auch kein Portieren mehr. Da kann man dann nur unter Ausnutzung der mit dem Programm großenteils beim damit arbeiten empierisch ermittelten und im laufe der Zeit x mal geänderten Berechnungswege irgendwann mal ein neues schreiben.

    Gruß Mümmel


Anmelden zum Antworten