Was tun, wenn Informatiklehrer nicht einlenkt trotz richtiger Lösung?

11 Antworten

Bei mir würdest du eher Punktabzug bekommen, weil man deine Schrift teilweise echt schwer lesen kann. :-)

Die Sache mit der Variable verstehe ich nicht.

dass ich anstatt Datentyp[ ] variable halt Datentyp variable[ ] geschrieben hatte 

Erkläre mal bitte. Wie dem auch sei, er hat dir doch nur bei 1) 2 Punkte abgezogen. Bei 2 hat er deinen falschen logischen Operator nicht gewertet.

Unsaubere Programmierung: Es ist nicht zwingend erforderlich die Deklaration und die Initialisierung in einer Zeile zu machen. Unsauber wäre es hingegen, wenn du eine Variable verwendest, der du nie einen Initialwert zugewiesen hast! In manchen Sprachen wird dir das nicht verziehen.

Es stellt sich eben immer die Frage - Warum? Ich meine wenn du konsequent die Variablen im Kopfbereich mit Kommentar aufgeführt hättest und diese später dann initialisierst wäre es ggf. anders.

Man versteht du wolltest es wegen der Übersichtlichkeit.

//Integer

int a;

int b;

int c;

//Long

long a;

long b;

long c;

//Char

char[] abdKatzeliegtimSchnee;

//Initialisierung

a=0;

b=-1;

c=3;

..

Erstmal würd ich dem Lehrer wohl sagen, dass "GRAPH-MATRIX" wohl kaum ein legitimer Klassenname ist (sowohl laut Eclipse, als auch IntelliJ ist der Bindestrich nicht zulässig). Immerhin werden dabei dann auch gleich die Java Code Conventions missachtet >_>

http://www.oracle.com/technetwork/java/codeconventions-135099.html

Kommen wir zu den ersten Punktabzügen.

Du versuchst nach der Deklaration ohne Methode zuzuweisen. Das klappt nicht. Beweis?

Bild zum Beitrag

Warum? Weil er die Klasse "matrix" nicht kennt. Warum kommt es dazu? Weil du an der Stelle Deklaration und Initialisierung nicht trennen darfst.

Passen wir es also mal an und initialisieren auch direkt:

Bild zum Beitrag

Kein Fehler.

Warum es in den Bildern "node" und nicht "Knoten" heißt? Weil ich gerade so ne Klasse noch rumfliegen hatte.

Der Fehler in der 2. Aufgabe beruht darauf, dass du kein "&&" geschrieben hast.

https://stackoverflow.com/questions/5564410/difference-between-and

 - (Computer, Schule, Informatik)  - (Computer, Schule, Informatik)

Neodymidius 
Fragesteller
 15.03.2018, 21:03

Danke, das wusste ich nicht. Ich dachte meine Lösung wäre trotzdem richtig, weil der Lehrer mir keine Begründung gegeben hat wieso das falsch ist sondern nur mich als nen unsauberen Programmierer hingestellt hat... Jetzt weiß ichs in Zukunft besser und werde diesen Fehler nicht mehr machen. Vielen Dank! :)

0
Etter  15.03.2018, 21:04
@Neodymidius

Kein Problem. Im Zweifelsfall einfach immer sowas kurz ausprobieren ;)

0

Dagegen kannst Du nichts machen. Die Bewertungskriterien legt der Lehrer fest und kann auch bei unsauberer Programmierung Punkte abziehen.

Kannst Du die Code-Stellen, die er kritisiert, nochmal als Kommentar antworten? Bitte in einem Code-Block (bei einem Kommentar kannst Du rechts oben die Formatierungs-Möglichkeiten anzeigen und dann den Button "Quelltext" klicken). Dazu dann jeweils die Kritik des Lehrers. Ich habe nämlich ernsthafte Schwierigkeiten, deine Schrift sinnvoll zu lesen :D

Allgemein lässt sich aber sagen: "Unsauberes Programmieren" ist kein Grund, einen Punkt abzuziehen, solange genau das nicht vorher Thema war und er keine wirklich stichhaltigen Argumente hat. Letzteres wird aber schwierig, weil das meistens individuell ist. Und selbst, wenn etwas ganz offensichtlich "unsauber" ist, gibt es garantiert die eine oder andere Situation, wo dieses "unsaubere" Vorgehen die beste Option ist.

Bei anderen Fehlern gilt: Kompiliert es und erfüllt den geforderten Zweck, ist es auch kein Fehler, Punkt. Da kann der Lehrer so viel reden wie er will und sich auf den Kopf stellen, wenn es funktioniert, ist es eine richtige Lösung.

Es gibt natürlich auch Dinge, die funktionieren, aber trotzdem falsch sind. Wenn er z.B. die Nutzung von etwas Bestimmten vorgibt und Du der Forderung nicht nach kommst, kann er das als Fehler ankreiden. Das muss dann aber in der Aufgabe stehen. Kritisch sind auch flexible Kriterien, wie z.B. Entwicklungs-Muster, aber die werdet ihr in der Schule wahrscheinlich nicht behandeln.

In der Praxis sieht es aber sehr wahrscheinlich eher düster aus: Du kannst nichts tun. Der Grund ist einfach, dass Du zwar zur Schulleitung oder jemand Anderes gehen kannst, der deinen Lehrer dann zurecht weisen kann, allerdings bessert das nicht gerade das Verhältnis zum Lehrer. Wenn ein Lehrer dich nicht leiden kann, findet er garantiert noch andere regelkonforme Möglichkeiten, dich zu ärgern und das willst Du nicht. Besser ist daher: Frag nach, gerne kannst Du auch (sinnvoll) argumentieren, im Zweifel ist es aber klüger, zurück zu treten und zu akzeptieren.


Kieselsaeure  15.03.2018, 18:19

Nur weil etwas funktioniert ist es noch lange nicht gut. Grade als anfänger sollte man sich an gewisse konventionen halten. Natürlich kann ein anfänger keinen perfekten code liefern aber er sollte das gelernte als schablone nutzen.

1
Palladin007  15.03.2018, 18:25
@Kieselsaeure

Dennoch ist es nicht falsch.

Falsch ist es erst dann, wenn ein anderes Vorgehen konkret gefordert wurde.

Tatsächlich würde ich den Schwerpunkt auch nicht auf das Vorgehen an sich legen, sondern eher auf das Verständnis. Solange ich (aus Sicht eines Lehrers) sehen kann, dass der Schüler verstanden hat, was er da tun soll, ist mir das verwendete Vorgehen herzlich egal.

Damit meine ich aber nicht Dinge wie den allseits beliebten Spagetti-Code, den sollte man vermeiden. Hier gibt's aber auch konkrete und fachliche Argumente, die gegen dieses Vorgehen sprechen. Außerdem wird in den meisten Fällen wird Spagetti-Code nur dann verwendet, wenn z.B. eine for-Schleife Thema war. Dann mag der Spagetti-Code zwar funktionieren, ist aber am geforderten Thema (die for-Schleife) vorbei und damit falsch.

Eine Variable in einer Zeile zu deklarieren und danach zu initialisieren ist aber kein schlechtes Vorgehen, auch wenn ich es selber nicht machen würde. Es ist immer noch ein weit verbreitetes Vorgehen und es gibt auch keine wirklich stichhaltigen Argumente dagegen, nur individuelles Empfinden, was sauberes oder unsauberes Programmieren ist.

0
Kieselsaeure  15.03.2018, 18:40
@Palladin007

Es mag funktionieren, ja. Allerdings kommt es manchen menschen zum hals heraus wenn man übertrieben gesagt folgendes schreibt und mehr ressourcen verbrät (beispiel ist auf cpp bezogen):

for(signed int i = 1; i <= 1000; i += 100)

{

std::cout << (i/100) << std::endl;

}

Wieso in 100. schritten Zählen und dividieren wenn es auch ein 1-10 getan hätte?

Wieso signed?

Das ist einfach nicht sauber wenn sich die funktion auf das obige beispiel beschränkt.

Ps: sorry aber gf am handy spinnt "ein wenig" huuuuuust, ich kann keine formatierungen etc anwählen.

0
Palladin007  15.03.2018, 19:07
@Kieselsaeure

Mag sein, dass es nicht sinnvoll ist, so zu arbeiten, aber es ist trotzdem richtig.

Wenn stattdessen Ressourceneffizienz Thema ist, dann wäre dein Beispiel tatsächlich falsch. Wenn es aber nur darum geht, von 1 bis 10 zu zählen, mag es merkwürdig und sinnlos sein, aber immer noch ein korrektes Vorgehen.

Ein Lehrer darf nicht seine individuelle Meinung von sauberem Code transportieren, denn das kann besonders in der Informatik in manchen Situationen schlicht falsch sein. Der Lehrer muss stattdessen dem Schüler die verschiedenen Möglichkeiten und die Unterschiede aufzeigen, sodass der Schüler am Ende selber entscheiden kann, was richtig und was falsch ist.

Und ja, das ist schwer und ja, dann versagt unser Benotungs-System, aber man kann eben nicht alles auf eine simple Zahl reduzieren, am aller wenigsten sehr kreative Themen, wie die Softwareentwicklung.

0
Kieselsaeure  15.03.2018, 19:27
@Palladin007

Ich sehe das so, dass man klar differenzieren muss wie schwerwiegend der fehler ist. Einen vollständig unvollziehbaren variablennamen hätte ich genauso wie die oben genannte aktion bewertet wenn ich lehrer wäre. Ich würde es verkraften wenn ein schüler das ergebnis aus einer rechnung "summe"/"ergebnis"/"resultat" oder sonst wie nennt. Wenn er aber anstatt dessen seine variable "autoparkplatz" oder sonst wie nennt ist das für mich eindeutig. Es ist unsauber. Dieses verhalten sollte nicht belohnt werden sondern bestraft werden. In dem fall vom fragesteller natürlich auch nicht zu hart, anteilig ist dieser fehler nicht so ausschlaggebend, aber abzug halte ich schon für gerechtfertigt. Wenn man alles tolerieren würde würden die schüler ja nie ihr verhalten ändern. Weil aus unerklärlichen gründen ein logikfehler vollständig ignoriert wurde obwohln er erkannt wurde finde ich die bewertung nicht unbedingt ungerecht. Das geschenk für den logikfehler gleicht den leicht übertriebenen abzug beim unsauberen code deutlich aus. Ich würde sagen dem fragesteller wurde hier sogar zu viel geschenkt. Aber hey, egal. Wie es scheint steht er eh noch am anfang. Da kann und sollte man etwas toleranter sein. Der lehrer hätte aber zwecks der nachvollziehbarkeit schon den logikfehler entsprechend bewerten sollen und den fehler wegen unsauberen code wieder besser bewerten sollen.

0
Palladin007  15.03.2018, 19:57
@Kieselsaeure

Ich hab ja geschrieben, wenn es klare und konkrete Argumente gegen ein Vorgehen (irreführende Benennung behindert spätere Wartung) gibt, ist auch eine entsprechend schlechtere Benotung gerechtfertigt, solange genau das vorher einmal Thema war. Es kommt sehr oft vor, dass Schüler ihre Variablen "a", "b", "c", etc. nennen, weil sie einfach nie über das Thema Benennung nach gedacht haben. Das heißt aber nicht, dass sie das nach einem kurzen Hinweis nicht auch richtig machen könnten.

Bei deinem Schleifen-Beispiel ist das einzige Argument dagegen "Es ist überflüssig" oder "sinnlos". Das ist kein konkretes Argument. Das Argument "Performance" zieht übrigens auch nicht, denn der Unterschied (wenn er vom Compiler nicht "weg optimiert" wird) ist wahrscheinlich nicht einmal messbar.

Über dieses Beispiel zu diskutieren bringt meiner Meinung aber auch nichts, denn die wenigsten Schüler setzen eine Aufgabe komplexer um als gefordert und wenn doch, würde ich genau deshalb keinen Punkt abziehen, denn sie haben gleichzeitig noch zusätzliches Wissen gezeigt.

Allgemein forderst Du die Bewertung von Code-Qualität, allerdings gibt es in der Praxis mehr Meinungen von guter Code-Qualität als es Entwickler gibt. Dazu kommt noch, dass die Qualitätsvorstellung von Projekt zu Projekt anders sein kann.

Übrigens gibt es in Unternehmen oft Coding-Guidelines und die können sich oft Unterscheiden. Beispiel if: Ist im if nur eine Zeile, kann man die Klammern weg lassen. Ich persönlich lasse die dann auch weg und bevorzuge das auch, mein Ausbildungsbetrieb hat das sogar vorgeschrieben. Genauso gibt es aber auch Unternehmen, die genau das Gegenteil fordern, die wollen immer Klammern, egal ob da nun eine Zeile oder Mehrere im if stehen.

Die Aufgabe des Lehrers sollte daher nicht im Bewerten dieser Möglichkeiten liegen (kann er sowieso nicht zuverlässig), sondern im Aufzeigen Derselben, damit die Schüler später bei einem konkreten Projekt selber beurteilen können, was besser ist und was nicht.

Wenn ein Leistungsnachweis gefordert ist, dann sollte der Schüler anschließend sein Vorgehen erklären und begründen. Selbst wenn das Vorgehen im Auge des Lehrer sinnlos ist, solange die Begründung keine Fehler enthält und logisch richtig ist, ist die Lösung richtig. Das würde dann auch dazu führen, dass die Schüler kein unlogisches Vorgehen wählen, denn spätestens bei der Erklärung würden sie Schwierigkeiten bekommen. Auf diese Weise würde der Unterricht den Schüler zum Nachdenken und Reflektieren erziehen und genau das ist es doch, was die Schule erreichen soll. Sie soll nicht schwarz/weiß definieren, was richtig und was falsch ist, sie soll dazu erziehen, je nach Situation erneut entscheiden zu können.

1
Neodymidius 
Fragesteller
 15.03.2018, 18:32

Genau das ist leider meine Befürchtung. Er hat allgemein einen schlechten Ruf und auch mein Kurs streitet oft mit ihm. Ich hatte vor in der nächsten Stunde ihn nochmal zu bitten seine Korrektur zu über denken.

Der Code der "fehlerhaft" war lautet:

private int matrix [][];

matrix= new int[20][20];

das gleiche bei den arrays knoten[], und besetzt[]

0
Palladin007  15.03.2018, 19:00
@Neodymidius

Nun, da muss ich dich leider entäuschen: Das ist kein unsauberes Programmieren, das ist schlicht falsch, das kompiliert nämlich nicht ;)

Außerhalb einer Methode darfst Du nur Inhalte einer Klasse (Variablen, Methoden, etc.) deklarieren. Initialisieren (und nichts anderes die Zuweisung in der zweiten Zeile) ist "normaler" Code, der in eine Methode gehört.

Dass Du direkt bei der deklaration in der selben Zeile auch initialisieren kannst, ist streng betrachtet nur Compiler-Zucker.

Wenn Du dir das Beispiel anschaust:

public class MyClass
{
    private int matrix[][] = new int[20][20];
}

Daraus baut der Compiler folgendes:

public class MyClass
{
    private int matrix[][];
    
    public MyClass()
    {
        matrix = new int[20][20];
    }
}

Das ist aber nicht erlaubt:

public class MyClass
{
    private int matrix[][];
    matrix = new int[20][20];
}
0
Palladin007  15.03.2018, 19:24
@Palladin007

PS:

Ich hoffe, ich hab jetzt nicht noch größere Fragezeichen verursacht :D

Ich hab nicht daran gedacht, dass in der Schule Klassen oft gar nicht behandelt werden, sondern erst Themen, wie das in der Arbeit, dran sind.

0
Neodymidius 
Fragesteller
 15.03.2018, 20:37
@Palladin007

Verdammt daran hab ich nicht gedacht. Danke schön! Aber es ist trotzdem schade, dass ich erst im Internet fragen musste, ob meine Lösung richtig ist und er mir keine Begründung gegeben hat. Aber gut damit muss ich leben. Vielen Dank, das habe ich nicht leider nicht gewusst.

0
Palladin007  15.03.2018, 20:42
@Neodymidius

Dem kann ich nur zustimmen :D

Der Lehrer sollte den Fehler eigentlich benennen können.

Allerdings muss ich dabei den Lehrer auch etwas in Schutz nehmen. Er hat immerhin einen sehr zeitintensiven und oft auch sehr anstrengenden Job. Danach bleibt oft wenig Zeit für Freizeit und Familie übrig. Zeit für das Thema Softwareentwicklung, was auch sehr zeitintensiv ist, bleibt da kaum.

Das hat mir mal ein Lehrer während meiner Ausbildung gesagt. Er meinte, er würde sich gerne mit der Thematik beschäftigen, aber ihm fehlt die Zeit dafür. Deshalb kommt es auch oft vor, dass engagierte Schüler den Lehrer schnell überholen, denn Schüler haben im Gegensatz zum Lehrer viel Zeit.

1

Was man dagegen macht? Beim nächsten mal das aufschreiben was man in der Schule gelernt hat. So läuft das nun einmal in der Schule, ob man das mag oder nicht, es kommt nicht nur auf die Lösung an, sondern auch den Weg. Da sitzen die Lehrer am längeren Hebel. Er möchte ja das Wissen abfragen, was er vermittelt hat, nicht das du irgendwie anders zur Lösung kommst.

Hatte zur regulären Schulzeit ebenso meine Probleme, da ich da etwas rebellisch war und mich als Schneeflocke sah, so dass ich z.B. in Mathearbeiten generell nie Rechnungen und Wege genutzt habe, da ich stolz darauf war alles im Kopf rechnen zu können. Hieß dann bei 0 Fehlern, was die Lösungen angeht eine 4-, da die Rechenwege die halbe Punktzahl ausmachten. Habe mich damals auch ordentlich aufgeregt.

Genutzt hat es mir wenig, ich habe mit diesen Verhalten meine reguläre Schulzeit gegen die Wand gefahren und durfte noch ein paar Jahre im zweiten Bildungsweg dranhängen. Dort dann schlicht gemacht, was die Lehrer sich gewünscht haben um mir ein ordentliches Zeugnis abzuholen.

Letztlich muss man sich auch in die Lehrer hineinversetzen. Es wird etwas gelehrt und genau das soll kontrolliert werden. Da kann man nicht auf 30 verschiedene Lösungsansätze bei 30 verschiedenen Arbeiten eingehen. Ggf. lehrt er immer das selbe und hat mit Bitoperatoren gar nix am Hut und weiß gar nicht spontan wie sie funktionieren. Der Lehrer wiederholt letztlich auch jedes Jahr sein alten Kaffee und steckt selten im Geschehen was die Programmierung angeht.

Dank dem Internet und dadurch, dass die Kids damit aufwachsen, sind die interessierten Schüler den Lehrern gerade in der Informatik meist um einiges voraus. Also spring über dein Ego und gib beim nächsten mal einfach wie ein dressierter Affe (nicht böse gemeint, nur zur Veranschaulichung) das wieder, was der Lehrer dir beibringt. Das sorgt letztlich für am wenigsten Reibereien und verspricht dir die besten Noten.

Sauberes Programmieren ist immer so eine Frage. Wenn ich bedenke was mir damals während der Schule/Ausbildung als Objektorientierung verkauft wurde. Ganz davon abgesehen, dass Code auf Papier schreiben auch selten dämlich ist vom Konzept her. So funktioniert Programmierung heutzutage eben nicht. Man hat Autovervollständigung, man führt den Code etliche Male aus, um relativ früh kleine Fehler zu sehen, auch Syntaxfehler zu finden, die sich häufig auch über das Syntaxhighlighting bemerkbar machen usw. Habe bei so Aufgaben immer mehr Hirnkapazität darin verbraten wie groß oder klein ich denn nun schreiben soll, damit das Ganze in die Lücke für die Lösung passt.

Ansonsten zieht sich das alles weiter durch. Im Berufsleben hast du ggf. später auch Codestandards in der Firma, sofern du in den Bereich gehst. Da macht vieles dann auch wenig Sinn, funktioniert anders vielleicht besser oder wäre sauberer Stil usw. Letztlich hat man sich aber zu fügen, denn das ist die Vorgabe und die Einheitlichkeit spart am Ende viel Zeit und Energie, nicht für dich aber im großen Ganzen. Wenn jeder seinen Kram macht, dann hat jeder Probleme den Code des anderen zu verstehen usw.

Wenn man erst einmal ein wenig besser wird, kommt irgendwann der Teil, wo man stolz ist auf Code der möglichst klein und kompliziert ist. Ein wenig später findet man dann heraus, dass die eigentliche Aufgabe nicht ist leichte Vorgänge möglichst kompliziert zu lösen, sondern komplexe Vorgänge so umzusetzen, dass sie jeder Anfänger verstehen würde, das man sie mit Selbstsicherheit ändern kann auch wenn daran viel Geld hängt und man ggf. ein riesen Unternehmen für Stunden lahmlegen könnte usw. Oder der Kollege während des eigenen Urlaubs Erweiterungen oder Fehlerbehebungen machen könnte, ansonsten ist man nämlich Tag und Nacht am Telefon, auch außerhalb der Arbeitszeit, um seine Einhornlösungen zu pflegen und betreuen.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012