Monday, November 28, 2016

Geschafft in mehr als drei Sinnen

Es ist unglaublich, aber wahr - Kapitel 4 ist mit dem heutigen Tag: Geschichte!

Ich habe eine Menge gelernt, und zwar durch praktische Anwendung, wie wichtig es ist, die Warnungen und gut gemeinten Hinweise in den Kapiteln zu befolgen. Es vereinfacht das Leben um ein vielfaches, wenn es darum geht, Probleme zu lösen!

Kommentiere deinen Quellcode, achte auf die Struktur des Programms, setz dich hin und erstell einen Plan, wie du das Programm schreiben möchtest, und ähnliches mehr, fällt mir spontan ein was die gut gemeinten Hinweise anbelangt. Die Warnung: "Wenn du es nicht tust, wirst du es früher oder später bereuen!", würde ich so auch ohne weiteres unterschreiben. Nichts würde ich mehr hassen, als eines der gelösten Aufgaben zig mal neu schreiben zu müssen, nur weil es an irgendeiner Stelle, durch Faulheit, Unachtsamkeit und dergleichen mehr, meinerseits notwendig wäre! *würg*

Eine Sache habe ich jedenfalls mit einiger Deutlichkeit gelernt: Schreib deinen Code von Beginn an so, das er einfach erweiterbar ist. Die Lehre habe ich aus den letzten 3 Programming Challenges, die aus drei Teilen besteht, und das Programm jeweils um einige Funktionen ergänzt, besteht. Die Erweiterungen zu schreiben war eine Kleinigkeit für Programming Challenge 4.26, leider habe ich die in Challenge 4.27 nicht so ganz optimal gelöst. So, wie ich es mir vorgestellt habe, sollte der Teil des Quellcodes:

        /* Rev 2: Determine how many minutes a month has, based on the number of days in
        a month */
        if (monthName == "January" || monthName == "March" || monthName == "May" ||
            monthName == "July" || monthName == "August" || monthName == "October" ||
            monthName == "December")
        {
            hoursInMonth = 744;
            minutesInMonth = (hoursInMonth * 60);
        }
        else if (monthName == "April" || monthName == "June" || monthName == "September" ||
            monthName == "November")
        {
            hoursInMonth = 720;
            minutesInMonth = (hoursInMonth * 60);
        }
        else if (monthName == "February")
        {
            hoursInMonth = 672;
            minutesInMonth = (hoursInMonth * 60);
        }

Nur ein einziges mal im Programm stehen. Leider hat das aber nicht ganz geklappt. Außerhalb der switch case statements plaziert, und die Validierung innerhalb der 3 cases, so hätte es sein sollen. Doch plazierte ich es innerhalb, so kam ständig die Meldung, das bei der Eingabe ein Fehler aufgetreten sein müsse, die aber nur dann angezeigt werden sollte, wenn tatsächlich die Anzahl der Gesprächsminuten größer ist, als der jeweilige Monat an Minuten aufzuweisen hat. Dieses kleinen Schönheitsfehlers werde ich mich noch annehmen, bevor ich morgen dazu übergehe, und mich in Kapitel 5 verbeisse.

Ferner habe ich durch die Programming Challenges des aktuellen Kapitels gelernt, dass, was eigentlich ganz einfach aussieht, plötzlich recht kompliziert werden kann, wenn es an die Planung und Umsetzung geht. Oft waren es nur Kleinigkeiten, die mir aber die größten Probleme bereitet haben, wo ich wirklich mal laut AAAAAAAAAAAAAAAAAAAAAAH! geschrien, oder mir die Haare gerauft habe. Und das nicht nur einmal. Ich kann nur froh sein, das mein Haus recht gut isoliert ist, sodass es die Nachbarn nicht hören, sonst würden die mich schon längst für verrückt erklärt, und die Männer mit den weissen Liebesjacken gerufen. *gg* Jedenfalls, und zurück zum Punkt, lag es daran, dass ich manches falsch gedeutet habe ... und meinen Code fröhlich drauf los, auch so verfasst - und dann verworfen habe. So zum Beispiel Programming Challenge 4.24.

Bei dieser haben ich jedwede Planung fahren lassen, weil ja alles klar war. Kein Problem? Oh, doch! Weil ich so DUMM war, und die Angaben 00:00 für Beginn und 06:00 für den ersten Grenzwert hielt. Das es sich dabei möglicherweise nicht um 6h handelt, sondern um 00:00 Uhr bis 00:06 Uhr, kam mir nicht mal in den Sinn ... Bis ich das Programm so gut wie fertig hatte, da ging mir eine ganze Kerzenfabrik auf. Jedenfalls ließ sich letzendlich auch diese Challenge leicht lösen, nachdem ich noch mal drüber gegangen bin.

Ein anderer Fallstrick, den ich mir ständig selber stellte, ich weiß auch nicht wie das kommt, ist - ich beginne, eine wirklich recht einfache Sache gedanklich so sehr zu verkomplizieren, dass das eigentliche Problem größer erscheint, als es tatsächlich ist. Dem entsprechend nahm so mancher Schritt in einer der letzten 7 Challenges mehr Zeit in Anspruch, trotz Planung - oder vermutlich eben wegen dieser, als es hätte sein müssen.

Zusammengenommen waren dies alles sehr wertvolle Lektionen, die sich mir für Kapitel 5, und die mich dort erwartenden Challenges, gestehlt haben. Wenn ich meine Kristallkugel zu Rate ziehe, sehe ich allerdings auch schon voraus, das - wenn ich mal zum Ende von diesem großartigen Buch komme, ich mein eigenes Spiel vom Irrenhaus aus schreiben werde, weil ich total abgedreht bin. Will ich nicht hoffen, aber - wie heißt es beim Lotto? ALLES ist möglich.

In diesem Sinne wünsche ich Euch, die ihr diese Zeilen lest, eine erfolgreiche Woche, und denen, die ebenfalls C++ erlernen weiterhin viel Erfolg.

P.s. Bevor ich es vergesse, Casio, mein einzig liebster Lieblings-LKW-Fahrer, danke, für deine wertvolle Hilfe, beim lösen eines riesigen mathematischen Problems. Du weisst schon, welches ich meine. *zwinker*

P.p.s.: And thanks to one nice member who answered and helped me greatly by pointing me in the right direction, to solve a problem, that solved itself. If ever you read this, thanks, much appreciated.

Update

So nun habe ich auch Programming Challenge 4.27 so gelöst, wie es sein sollte, und den oben erwähnten redundanten Code raus bekommen ... Es war eigentlich nur eine Kleinigkeit, die nicht gepasst hat - obwohl der Rest, so wie er sein hätte sollen, funktionierte. Nun ist mein Glück perfekt, und ich werde mich wirklich auf das nächste Kapitel konzentrieren können, ohne dass mir das Problem nachhängt. :)

No comments:

Post a Comment