Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Didaktisches Konzept in Foren: wie hilft man richtig?

Moderationshinweis von Abt (16.08.2018 - 16:21:45):

Abgetrennt von Mehrdimensionale Arrays mit verschiedenen Dimensionen

Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

Didaktisches Konzept in Foren: wie hilft man richtig?

beantworten | zitieren | melden

Also, ich bin ja Fachinformatiker Anwendungsentwicklung. Relativ neu. Aber was ihr hier für nen Tobak raushaut für nen Anfänger ist schon hart.

Es ist nicht so, das ich euch in euren Ausführungen bremsen will. Aber denkt, jemand an den Anfänger mit seinem Array Problem ?

Allein schon die Begriffe materialisierung oder yield, sind sachen, die weiß ich jetzt nicht mal in der Form, die müßte man dann bitte etwas genauer erklären, wenn ihr schon dabei seid. :).

ck82 was willst du denn genau erreichen ?

Die CSV Datei, enthält daten. Liest du diese Ein ? Splittest die und verteilst die Werte auf die Arrays ?

Wenn ja, wie sieht dein Code aus ?

Wenn ich das richtig verstanden habe, möchtest du eine identische Struktur (CSV) haben die du aber um eine weitere Dimension erweiterst (warum auch immer, bitte näher erklären!).

Soweit ich das richtig verstanden habe, kopierst du das Array aus der CSV, in das Rückarr.

Bedenke jedoch, das nicht die Struktur kopierst, sondern den Inhalt.

In deinem Falle würde das bedeuten, das an Position Rückarray[0][1] das CSV Array steht.

das heißt aber nur an der Position. Rückarray[0][2] ist was ganz anderes und sollte eigentlich keine Werte haben,da alles in [0][1] stehen würde.

Das was du vorhast, ist sowas wie eine art ArrayCopy die du machst. Da solltest du aber von [0][1][0] das Array CSV[0][0] kopieren - richtig ?

bzw.

Rückarray [0][1][0] = CSV [0][0]
Rückarray [0][1][1] = CSV [0][1]
Rückarray [0][2][0] = CSV [1][0]

richtig ?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16232

beantworten | zitieren | melden

Zitat von Glowhollow
Aber was ihr hier für nen Tobak raushaut für nen Anfänger ist schon hart.
Glowhollow, ich denke Du bist hier deutlichst am Ziel vorbei geschossen.
Dein Einwand - vor allem die Art und Weise - empfinde zumindest ich als unangebracht, wenn man bedenkt, dass dieser Forenbeitrag schließlich öffentlich ist und damit nicht nur ck82 liest; sondern eine Vielzahl von Lesern.
Dass nicht in jedem Beitrag auch die Grundlagen von C# erklärt werden können, sondern auf das Basiswissen bzw. zumindest auf die Eigeninitiative der Person gesetzt wird diese zu erlernen; denke das versteht sich von selbst.
Eben deswegen wird Hilfestelle i.d.R. so neutral formuliert, dass die breite Masse diese versteht.

yield ist ein Schlüsselwort in C#, dessen Bedeutung - auch Du - man problemlos in der Dokumentation nachlesen kann. Ebenso ist Materialisierung dokumentiert (, die übrigens ebenfalls dank foreach korrekt funktioniert).
Dahingehend in Hinweis auf Deine Eigeninititative, wenn Du gewisse Dinge nicht kennst: einfach mal in die Dokumentation schauen statt so ein Beitrag zu verfassen.

Davon abgesehen ist es offensichtlich, dass die breitere Meinung diese ist, dass ein Parsen in eine Klasse mehr Sinn macht als der unnötige, mehrfache Zugriff auf Indexe von Arrays.
Dass Du nun zu dieser zurück kehrst, macht dann relativ wenig sinn ;-)
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Abt, versteh mich nicht falsch, ist nicht böse gemeint.

Klar verstehe ich deinen Einwand, und das hat auch alles seine Richtigkeit. Findest du aber nicht, das er erst mal mit seinem "Ideenansatz" mal weitermachen sollte - um dann herauszufinden, daß es aus bestimmten Gründen nicht die optimalste Lösung ist ?

Es geht mir ja nicht darum, die effektivste Lösung zu finden, was natürlich erstrebenswert ist, kein Thema. Nur finde ich, gerade als Anfänger, sollte man Ihn erst mal machen lassen, mit dem was er denkt - ihn eine Lösung erarbeiten lassen (sei sie noch so schlecht), um ihn dann erklären, hey, hier, das könnte man besser machen.

Es war auch nicht meine Absicht hier über das Ziel hinauszuschießen, und euch schlecht zu machen.

Worum es mir geht ist dieses Verständnis wie es einem als Anfänger geht.

Ich kann durchaus nachvollziehen, das ck82 erst mal seine Lösung umsetzen möchte, sei sie jetzt von der Performance auch unterirdisch. Weil er sie nachvollziehen kann, und weil er die Idee dahinter selbst entwickelt hat.

Das man sich das ganze step-by-step beibringen will, und auch mal erfolge will, ist doch selbstverständlich oder ?

Das man als erfahrener Entwickler, da natürlich ganz andere Ansprüche hat, sei dahingestellt. Ich versteh beide Seiten.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16232

beantworten | zitieren | melden

Zitat von Glowhollow
Findest du aber nicht, das er erst mal mit seinem "Ideenansatz" mal weitermachen sollte - um dann herauszufinden, daß es aus bestimmten Gründen nicht die optimalste Lösung ist ?
Nein. Du reitest ja schließlich kein totes Pferd.

Ein Ansatz weiter zu verfolgen, der bereits massive Probleme macht, ist unsinnig und unwirtschaftlich - und darüber hinaus für den Entwickler unbefriedigend.
Wenn der Ansatz falsch oder zumindest deutlich besser umzusetzen ist, dann sollte man auch genau hier (oder früher) beginnen diesen zu korrigieren.
Zitat von Glowhollow
Nur finde ich, gerade als Anfänger, sollte man Ihn erst mal machen lassen, mit dem was er denkt - ihn eine Lösung erarbeiten lassen (sei sie noch so schlecht), um ihn dann erklären, hey, hier, das könnte man besser machen.

Das ist passiert.
Die Helfer haben eine Lösung fokussiert, die es (einem Anfänger) übersichtlicher und einfacher macht.

Es macht wenig Sinn, wenn ck82 eine Idee verfolgt, bei der weitere Probleme vorprogrammiert sind und ck82 das Konstrukt nicht versteht; dann ist wenig geholfen.
Was die Helfer hier beitragen haben ist der Sinn, eine Komplexität zu vereinfachen um eine Lösung zu erreichen; in diesem Fall komplexe Arrays durch simple Klassen zu ersetzen.

Das erhöht zum einen das Verständnis, was passiert - und erleichtert darüber hinaus die Übersichtlichkeit.
Daher sehe ich absolut nichts verwerfliches in den Hilfestellungen - sogar im Gegenteil.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Palin
myCSharp.de - Member



Dabei seit:
Beiträge: 1115

beantworten | zitieren | melden

Auch wenn es vom eigentlichen Thema weggeht. (Vielleiche abtrennen).

Ich finde das Glowhollow gar nicht so unrecht hat.

Ich hab Jahre lang in Mathe Nachhilfe gegeben und meistens war das Problem, das die Leute nicht wirklich verstanden hatten was sie machen. (Ich kann es doch einfach mit der PQ-Formel lösen. Was mach die denn? Äh keine Ahnung.)

Ich finde "Onkel Bob" hat in Clean Code ein schönen Zitat gemacht.
(Frei Zitiert) Wenn ich jemanden einen Fisch gebe, hat er was zu essen. Wenn ich ihm Fischen beibringe, hat er sein leben lang zu essen.


Ich kann gut verstehen. Wenn man als Beantworter, mal eben die "Richtige Lösung" posted. Wir machen, das hier halt nicht Beruflich.
Und ich finde es auch OK, wenn es nachfragen gibt. Nicht Antwortet oder auf Google verweist.

Nicht so gut finde ich, wenn man nachfragen indirekt unterdrückt. Wenn jemand was nicht versteht soll er nachfragen. Und dazu sollte man eigendlich auch die Leute motivieren. Ob man selber oder ein anderer darauf Antwortet, ist dann eine andere Sache.
Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16232

beantworten | zitieren | melden

Ich stimme dem prinzipiell zu, wenn der Ansatz in die oder zumindest eine richtige bzw. tragfähige Richtung geht.
Wenn jemand Richtung Abgrund geht, dann lass ich ihn auch nicht springen, nur weil er eben in die Richtung läuft.
Und der bisherige Weg, ein Multidimensionales Array um eine weitere Dimension zu erweitern, ist ja absolut Vollgas Richtung Abgrund.
Wenn das wirklich jemand in C# als tragfähigen Ansatz sieht....puh

Im Endeffekt ist es doch besser, wenn der Hilfesuchende nachher seine Lösung selbst versteht - richtig.
Und genau das zielt die bisherige Hilfeleistung absolut ab: später versteht er die Lösung, weil sie übersichtlicher ist - und kann das in Zukunft anwenden.
Es ist ja bei weitem nicht so, dass hier jemand die Lösung seines Problems postet; er muss das bisherige Beispiel auf seinen Code anwenden.

Ich kann daher Glowhollow absolut nicht nachvollziehen - und auch den Vergleich mit Fisch und Fischer nicht: keiner hier hat den Fisch einfach hier präsentiert; sondern eher im Sinne des Fischers ihm beispielhaft beigebracht die Komplexität mit einfachen mitteln zu lösen.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

@Abt Betriebsblindheit, mea culpa (wir nutzen teils eine 20 Jahre alte DAL, deren Reader so strukturiert ist, dass ein enumerieren identisch mit materialisieren ist, weil der Enumerator mehr macht als er soll. Das sorgt gern für Probleme, und ein Warnzeichen ist eben foreach yield.)

Ansonsten: Das kann man sehr gern mal ausdiskutieren, weil das Thema Didaktik in der Informatik interessant und aktuell ist und dazu meiner Erfahrung nach meistens darin besteht, dass völlig überforderte Lehrkräfte völlig überforderte Schülern zwingen, völlig überalterte Ansätze stumpf auswendig zu lernen.

yield und die Behandlung von Enumerationen sind kein fortgeschrittenes Konzept und auch kein Konzept, das es nur in .NET gibt. Von daher wäre es absolut Pflicht, sich damit zu beschäftigen. Wenn ein Lehrer / Dozent dieses Konzept ignoriert, auf der anderen Seite aber mehrdimensionale und jagged Arrays einführt und verwenden lässt, dann versagt er.

Array -> Listen -> Enumerationen (yield und Materialisierung) -> weitere Enumerationstypen außer Array und Liste -> Mehrdimensionale Aufzählungen und jagged Arrays.

Implementierung -> Implementierung -> dahinter liegendes Konzept -> weitere Implementierungen -> weiter gehende Konzepte

Hier im Forum ist das doch wunderschön zu sehen. Immer, wirklich immer wenn eine Frage mehrdimensionale Arrays beinhaltet, bestehen deutliche Wissenslücken in den basics. Wundert das keinen? Wie kommt ein Anfänger, der Probleme mit Grundlagen hat, auf mehrdimensionale Arrays (und vor allem: wieso glaubt er, ein Problem damit lösen zu können?).

Junior-Softwareentwickler (also die Entwickler, die unser Bildungssystem so ausspuckt) heißen so, weil sie erst einmal lernen müssen, Software zu entwickeln. Und das sollte nicht so sein, jedenfalls nicht mit Grundkonzepten.

und @Palin, das ist auch in der Mathe-Nachhilfe so. Der Pythagoras wird über Höhen- und Kathetensatz hergeleitet, immer, und nur so. Dass es verschiedene Wege des Beweises gibt, dass prinzipiell in der Mathematik immer mehrere Wege zum Ziel führen und dass es darum geht, selbst einen Algorithmus zu finden und seine Richtigkeit nachzuweisen: Pustekuchen. Für viele Mathelehrer ist der Weg das Ziel: alles muss so gemacht werden, wie es schon immer war. Dabei ist eigentlich das Ziel das Ziel, es gibt schließlich nichts Pragmatischeres als Mathematik. Und hier ist das Problem, dass dem Schüler nur ein Werkzeug gegeben wurde (mehrdimensionale Arrays) und er jetzt versucht, jedes Problem mit diesem Werkzeug zu lösen. In der IT geht es aber darum, das richtige Werkzeug zu nutzen oder zu bauen. Lehre ihn, zu fischen: zeige ihm andere Werkzeuge. Und nicht: lass ihn mal mit dem begrenzten Toolset, das sein Lehrer ihm gegeben hat, irgendetwas bauen, Hauptsache es läuft.

LaTino

Edit: man schaue sich mal unser verlinktes openbook: Visual C# an. Kapitel 2.5. Arrays, Zugriff auf die Elemente, dann sofort mehrdimensionale Arrays. Müsste man den Autoren meiner Meinung nach kräftig um die Ohren hauen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LaTino am .
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4196

beantworten | zitieren | melden

Anfänger können sich aber tabellenartige Strukturen besser vorstellen (wie sie es z.B. aus Excel kenne) als objektorientierte Daten.
Also werden mehrdimensionale Arrays verwendet, meist noch untypisiert (object bzw. string: "Alles ist ein String").

Ich denke kein Anfänger, der die ersten Versuche mit C# macht (und dies evtl. seine erste [richtige] Programmiersprache ist), wird auch nur ansatzweise den Code von Abt verstehen - syntaktisch und erst recht nicht semantisch).
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Zitat von Th69
Anfänger können sich aber tabellenartige Strukturen besser vorstellen (wie sie es z.B. aus Excel kenne) als objektorientierte Daten.
Also werden mehrdimensionale Arrays verwendet, meist noch untypisiert (object bzw. string: "Alles ist ein String").

Ich kann dir versichern, dass du in beiden Aspekten irrst. Anfänger können sich Objekte besser vorstellen als tabellenartige Strukturen, weil Objekte im einfachsten Fall im wahrsten Sinn des Wortes Objekte der realen Welt sind (eigentlich: abbilden).
Und was denkst du, über welche Syntax stolpert dein Anfänger? Genau: über ".Select", über "yield return" und über den Lambda-Ausdruck im Select. Das sind alles Sachen, die erläutert werden, sobald man Enumerierungen lernt. Der Punkt ist aber genau das: Anfänger lernen Enumerierungen nicht. Ihnen werden vielmehr mehrdimensionale Arrays eingeprügelt, weil das die Datenstrukturen sind, die man in C (nicht C++!) zu Beginn benutzt. Weil das seit den 70er Jahren das ist, was Programmieranfänger lernen müssen. Komischerweise haben die Kids in unseren Programmierkursen überhaupt kein Problem mit Objekten und Projektionen. Aber denen wurde auch nie erzählt, man müsste denken wie Excel.

LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Ich bezweifle ebenfalls, dass Anfänger tabellenartige Strukturen in Form von Arrays besser verstehen.

Ich hab's mir selbst beigebracht anhand von Büchern - auch dort ging's mit Arrays los - und naiv wie man halt ist versucht man schnell mehr Dimensionen, weil's im selben Kapitel ist.

Das erfordert in meinen Augen allerdings deutlich mehr Kommentare und Vorstellungskraft - im Gegensatz zu "sprechendem" Code. (Objekte und Projektionen) Ein mehrdimensionales Array für sich selbst liefert in meinen Augen ohne Debugger nur schwerlich Informationen für den Leser - geschickt benamste Objekte dahingegen sind da deutlich komfortabler und leichter zu lesen - im Endeffekt muss man ja nur englisch können um grob zu verstehen was passiert...

LG
private Nachricht | Beiträge des Benutzers
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Guten Morgen,

ich wollte hier keine Grundsatzdiskussion anregen. Ich glaube wir haben ck82 so verschreckt, das er jetzt garnichts mehr schreibt ;(

Möchte mich jetzt nicht als Didaktiker bezeichnen, denn das bin ich nicht. Ich kann mich jedoch gut an meine Anfänge erinnern. Auch ich habe mit multidimensionalen Arrays gearbeitet, gut das war zwar im jahr 2000 - aber hey...

Mir gehts halt darum, das selbst der beste Entwickler, nicht alles von anfang an auf dem Schirm hat. Das ist völlig normal und auch des Refactoring (für die Anfänger da draussen, das ist das überarbeiten vorhandenen Codes um zu vereinfachen, bzw. zu optimieren) ist alltäglich.

Letztendlich arbeitet man sich an das Problem ran, klar kann man vieles theroetisch im Vorfeld abklären, ich für meinen Teil jedoch, steh dann während des Entwickelns mal öfters vor dem ein oder anderen Problem, das ich vorher so nicht bedacht hatte.

Und eben diese Abstraktion/Adapationsfähigkeit möchte ich einem Anfänger nicht absprechen, in dem ich ihn zu einer expliziten Frage, mit einer Alternativlösung ankomme, die zwar besser ist, ihm aber in seinem Verständnisproblem alleine läßt.

Mehr wars eigentlich nicht.
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 966

beantworten | zitieren | melden

Zitat von Glowhollow
Und eben diese Abstraktion/Adapationsfähigkeit möchte ich einem Anfänger nicht absprechen,
Dann lass es ihn doch gleich richtig machen und von diesen Array weggehen.
private Nachricht | Beiträge des Benutzers
Palin
myCSharp.de - Member



Dabei seit:
Beiträge: 1115

beantworten | zitieren | melden

Zitat von LaTino
Der Pythagoras wird über Höhen- und Kathetensatz hergeleitet, immer, und nur so. Dass es verschiedene Wege des Beweises gibt, dass prinzipiell in der Mathematik immer mehrere Wege zum Ziel führen und dass es darum geht, selbst einen Algorithmus zu finden und seine Richtigkeit nachzuweisen: Pustekuchen. Für viele Mathelehrer ist der Weg das Ziel: alles muss so gemacht werden, wie es schon immer war. Dabei ist eigentlich das Ziel das Ziel, es gibt schließlich nichts Pragmatischeres als Mathematik. Und hier ist das Problem, dass dem Schüler nur ein Werkzeug gegeben wurde (mehrdimensionale Arrays) und er jetzt versucht, jedes Problem mit diesem Werkzeug zu lösen. In der IT geht es aber darum, das richtige Werkzeug zu nutzen oder zu bauen. Lehre ihn, zu fischen: zeige ihm andere Werkzeuge. Und nicht: lass ihn mal mit dem begrenzten Toolset, das sein Lehrer ihm gegeben hat, irgendetwas bauen, Hauptsache es läuft.

Grade im Mathe Unterrichtet bekommt, man erst mal viele Sachen beigebracht, die man so später nie mehr braucht, weil es einfach Effizientere Methoden gibt. Als einfaches Beispiel schriftliches Muliti-/Dividieren von großen Zahlen. Entweder ich kann es im Kopf oder ich benutze einen Taschenrechner. Ich kenne aber jetzt keinen Mathematiker, der es nicht trotzdem kann. Und das ist im allgemeinen so, gute Mathematik haben effiziente Methoden um Gleichungen zu lösen. Sie kennen aber Trotzdem, die Quadratische Ergänzung.

Und ganz ehrlich ich gehe stark davon aus, das du zwar Listen lieber benutzt, aber wenn du ein Array benutzen musst damit auch keine Probleme hast.

Und was das Fischen angeht, Dynamit Fischen ist natürlich, deutlich effektiver. Aber ich denke es kann nicht schaden, wenn jemand vorher lernt wie man mit einer Angel Fischt.

Beim Lernen geht es ja erstmals darum die Grundlagen zu verstehen und nicht einfach darum jemanden das möglichst effizienteste Werkzeug in die Hand zu drücken. Wenn du es so machst bekommst du Leute, die das Werkzeug X nutzen können. Die aber sobald ein Problem, davon abweicht, es nicht mehr lösen können.

Ob es jetzt der Richtige Ansatz ist, ist Arrays zu starten kann man sicher diskutieren. Aber ich denke es kann keinen Programmierer schaden auch mit Arrays umgehen zu können.
Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Zitat von Palin
Beim Lernen geht es ja erstmals darum die Grundlagen zu verstehen und nicht einfach darum jemanden das möglichst effizienteste Werkzeug in die Hand zu drücken. Wenn du es so machst bekommst du Leute, die das Werkzeug X nutzen können. Die aber sobald ein Problem, davon abweicht, es nicht mehr lösen können.

Und die Grundlagen sind hier nicht Arrays. Das ist nur das, was du und ich als erstes gelernt haben. Ein Array ist nur eine mögliche Implementierung einer Aufzählung. Und dennoch wird das Thema "Aufzählung" in der Ausbildung (beinahe) komplett ignoriert. Ich bin nur dagegen, dass man das auch noch gut findet, weil es einfacher sei. Weder ist es einfacher, noch gut.

Und wenn du mich als (studierten) Mathematiker fragst: In der Mathematik geht es nicht um Beweise und Algorithmen, sondern um eine bestimmte Art, zu denken. Aber statt das zu trainieren, wird den Kids eingebleut, dass sie Beweise halt auswendig lernen müssen. Das nutzt ihnen zum einen nichts ("das brauche ich nie wieder"), zum anderen verfehlt es den Zweck einer Ausbildung, und zum dritten sorgt es dafür, dass eine weitere Generation keine Lust auf Mathe hat, was für eine Nation, die stolz auf ihr Ingenieurwesen ist, tödlich ist. Und dasselbe passiert, wenn man Programmieranfänger zwingt, alle ihre Probleme mit Arrays zu lösen, weil man ihnen einfach kein besseres Werkzeug in die Hand legen möchte ("hat bei uns ja auch nicht geschadet").

Das ist großer Mist alles.

LaTino

Edit: zur Unterhaltung: http://thebestpageintheuniverse.net/c.cgi?u=math
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LaTino am .
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16232

beantworten | zitieren | melden

Habe das Thema abgetrennt; werde mich aber nicht weiter am Smalltalk beteiligen.
Grund: einige Aussage sind absolut Hanebüchen und widerspricht meinem über die Jahre erstellten, kompletten Verständnis von Hilfeleistung.

Bevor ich Leute mit Absicht die Klippe runter schubse, lass ichs lieber ganz.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

ich fühle mich ja jetzt n bischen an den Pranger gestellt. Ich Ketzer ! :).

Bevor ich abschließend was dazu sagen möchte, bitte ich einfach mal darum, sich daran zu erinnern wie es gerade als Programmieranfänger war.

Um es in den Worten von Basic auszudrücken.

Hey, ich kann PRINT "Das ist ein Test" schreiben. Das funktioniert sogar. Kann ich das ganze jetzt auch so formulieren, das ich da ein Input bekomme ? - Klar kannst du, probiers mit INPUT.

Für den Anfänger, sind solche Erlebnisse, Ereignisse, Erfolge wichtig, da sie einem auf dem langen weg zur Perfektionierung der eigenen Skills motivieren. Mag der Erfolg auch nur minimal sein, es ist ein Erfolg und motiviert.

Jetzt jemanden zu sagen: "Klar kannst du INPUT benutzen, aber wenn du stattdessen lieber POKE benutzt und das maschinennah löst, in dem du auf BASIC verzichtest und gleich da rein gehst, weils effektiver und sinniger ist" - mag das durchaus die richtige Lösung zum Ziel sein.

In meinen Augen jedoch führt das genau zu dem Punkt, der für einen Entwickler wichtig ist. Motivation und Kraft.

Jemanden zu zeigen, das etwas anders besser gelöst werden kann - ist hilfreich. Aber ich vermisse den Lerneffekt hier. Ich meine auf obiges Basic Beispiel umgebrochen -> Er kann Print, er kann Input. Lass ihn doch damit mal spielen.

Meine Absicht war es nicht, irgendjemand zu kritisieren und mir ist vollkommen klar, das die IT aus den 90er eine andere ist als heute. Ich will auch niemand seine Erfahrung schlecht reden. Ich behaupte ja auch nicht, das meine Lösung die beste ist, aber da ich momentan so zwischen den Fronten stehe (ich kann mich gut mit dem Anfänger identifizieren, bin aber fortgeschrittener, jedoch noch kein Profi) kann ich beide Seiten verstehen.

Ich verstehe sowohl z.bsp. Abt, der sowohl den technischen Background hat, als auch das Wissen, was die beste Variante ist. Es ist mir auch klar, das er versucht durch sein Bestreben, von manchen Irrwegen abzuhalten, aber ist es nicht so, das diese vermeintlichen Irrwege keine Glaubensbekenntnisse sind, von denen man nicht mehr abweichen kann. Ich finde auch schlechter Code kann einem zeigen, wie man etwas nicht macht. Wenn man die Begründung noch dazu hat, warum nicht, ist das dann nicht einleuchtender ?
private Nachricht | Beiträge des Benutzers
Palin
myCSharp.de - Member



Dabei seit:
Beiträge: 1115

beantworten | zitieren | melden

@LaTino

Mir geht es ja grade darum, das nicht einfach was Auswendig gelernt wird. Sondern verstanden wird was man da macht. Wenn du Mathe Studiert hast, denke wirst du Verstehen, das es ohne das Grundlagen wie Einklammern /Ausklammern und Bruchrechnung nicht geht. Ich kann einen Schüler, dann z.B. noch die PQ-Formel auswendig lernen lassen und ihn sagen wo er was Einsätzen soll. Wenn dann später Integral- und Differenzialrechnung dazu kommt funktioniert es einfach nicht mehr. Das ist halt ein Punkt der mir bei der Nachhilfe oft aufgefallen ist, solche grundlegenden Sachen saßen nicht bei den Schülern und dann wir Mathe echt schwer. Und die Schüler waren nicht zu dumm, es hat sich nur nie jemand mal Zeit genommen es ihnen zu erklären (OK wahrscheinlich haben sie im Unterricht nicht aufgepasst, als es erklärt wurde und es hat dann keinen Lehrer mehr interessiert, das sie es nicht konnte.)


Was die Array angeht. Wie gesagt kann man drüber streiten. Ist es jetzt eine Grundlage?
Nun ich hab es so kennen gelernt. Und es gibt immer wieder Methoden, die ein Array als Rückgabewert haben. Ich denken jeder der eine Ausbildung als Fachinformatiker oder ein Studium abgeschlossen hat. Sollte mit Arrays umgehen können. Ich kenne jetzt keinen der als Programmierer Arbeitet, der es nicht kann. (Ok ich kenne jemanden, der eine Ausbildung als Fachinformatiker gemacht hatte und gar nicht fürs Programmieren über hatte. Der hat sich seine Abschlussarbeit, vom Auszubildenden im ersten Lehrjahr Programmiere lassen. Ich hoffe aber mal, dass das die Ausnahme ist.)

Es geht mir auch nicht darum, einen Anfänger dazu zu zwingen, alles mit Arrays zu lösen.
Sondern eher darum ob es nicht vielleicht sinnvoll ist, ihn erst mal die Frage zu beantworten, die er zu den Arrays hat und ihn dann noch einen Anderen Weg aufzuzeigen. Anstatt um es vereinfacht wider zu geben zu sagen: „Arrays sind doof benutze Listen“.
Zitat von LaTino
In der Mathematik geht es nicht um Beweise und Algorithmen, sondern um eine bestimmte Art, zu denken.

Den Satz finde ich sehr gut. Ich finde das gleiche gilt für die Informatik.
In dem Rahmen finde ich, kann es nicht funktionieren, jemanden einfach zu sagen er soll Schema F verwenden. Weil es einfach die Beste Lösung ist.

(Ich denke grundlegenden wollen wir da schon irgendwie das gleiche. Nur reden wir da irgendwo aneinander Vorbei.)
Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo zusammen,

das ist ja mal eine interessante Diskussion - zu der ich jetzt auch noch was beitragen möchte:
Zitat von Palin
Sondern eher darum ob es nicht vielleicht sinnvoll ist, ihn erst mal die Frage zu beantworten, die er zu den Arrays hat und ihn dann noch einen Anderen Weg aufzuzeigen. Anstatt um es vereinfacht wider zu geben zu sagen: „Arrays sind doof benutze Listen“.
Exakt. Genau meine Meinung

Abgelöst vom konkreten Beispiel möchte ich das noch etwas verallgemeinern. Ich habe in meiner langjährigen Zeit als Helfer es meistens so gehalten (oder es zumindest versucht):
Wenn es explizite Fragen gibt, versuche ich immer, diese auch zu beantworten - teilweise sogar im Nachhinein, wenn schon bessere Lösungen genannt wurden.
Gerade einem Anfänger nutzt es meist wenig, bzw. ist es vermutlich auch abschreckend, wenn man einfach nur sagt, Dein Ansatz ist schlecht, mach es lieber anders. Damit hilft man am Ende zwar auch dem Fragesteller ans Ziel - trotzdem sollte ihm IMO erst einmal mit seinen aktuellen Verständnisproblemen geholfen werden.

Gleichwohl darf natürlich der Hinweis auch nicht fehlen, das es wesentlich bessere Ansätze gibt. Warum diese Ansätze nun besser sind, kann der Fragesteller (wieder gerade, wenn es sich um einen Anfänger handelt) aber erst verstehen, wenn er sein ursprüngliches Problem verstanden hat - auch wenn die Lösung weit davon entfernt ist, gängig oder ideal zu sein.
Denn dann wird er selber sehen und beurteilen können, das er auf dem Holzweg war, und mit einem anderen Ansatz besser fährt.

Der beste Lerneffekt wird IMO also dadurch erzielt, erstmal das vorhandene Problem zu durchleuchten. Dann aber auch gleichzeitig dazu anzuregen, sich über eine bessere Lösung Gedanken zu machen, und dabei auch gleich einen Stups in die richtige Richtung zu geben (allerdings ohne ihm dabei die Lösung vorzukauen - Stichwort Fisch).

Gruß, MarsStein
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MarsStein am .
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2143

beantworten | zitieren | melden

Auch ich möchte meinen Senf dazu geben.
Im Grunde verstehe ich das mit dem Tobak schon gut. Hier gibt es immer wieder Fragen, denen man ansieht dass jemand einfach irgendwas macht ohne ganz genau zu wissen was und warum. Es funktioniert zwar fast, aber noch nicht ganz.

Da durchläuft etwa jemand seine Arrays, behandelt Indexe falsch, überschreibt Elemente oder sonstiges. Der kriegt nun LINQ hingeknallt. Ohne Erklärung, ohne auf seinen eigentlichen Fehler einzugehen. Nur die Aussage, so macht man das heute.
Fürs Verständnis des Fehlers bringt das leider überhaupt nichts, fürs Verständnis von Grundlagen wie man sowas nur mit Basismitteln schafft auch überhaupt nichts. Genau genommen sagt das doch nur aus: sieh an was ich alles kann und was du alles nicht kannst.

Stattdessen sollte derjenige wissen was er da überhaupt mit den ganzen Bytes anstellt, sich das vorstellen können. Es in anderen Sprachen ohne high-end Techniken genauso können.
Man will nicht ständig alles neu erklären, aber ein Stichwort zur Suche nach Grundlagen hilft da schon viel mehr. Man darf/sollte fortgeschrittenere Methoden natürlich auch erwähnen, aber nur als Ergänzung und nicht als alleinige Lösung.
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Sind zwei Fragen, die man diskutieren kann:
[b] Wenn jemand etwas auf eine Art löst, die anders besser ginge, weil er die bessere Art nicht gelernt hat: bringt man ihm dann was Neues bei (zugegeben: schwierig in Foren) oder hilft ihm, sein Problem mit den ihm bekannten ungeeigneten Mitteln zu lösen? Und wenn man beides macht, welches Gewicht bekommt dann welche der beiden Alternativen?[/b]

Wir sind uns wohl einig, dass fertige Lösungen vorzusetzen kein Ansatz ist (wird ja nicht umsonst in der FAQ erwähnt). Man hätte also die Wahl, mehr oder weniger ausführlich eine Lösung zu besprechen, die man selber in einem Review nicht akzeptieren würde, oder auf die nach eigener Ansicht bessere Lösung hinzuweisen. Das Problem ist: wenn man Ersteres macht und Zweiteres anbietet, macht man es dem Fragenden leicht, die bessere Variante zu ignorieren. Der hat sein Problem gelöst, macht weiter wie gewohnt und kommt eine Woche später mit einem ursächlich identischen Problem wieder. Nichts gelernt, außer sich seine Lösung zusammen zu frickeln. Und so wird es weiter gehen.

Ich persönlich hätte aber gern, dass jemand das Forum hier auch nutzen kann, um Neues zu lernen. Ich lerne hier immer noch, auch ohne Fragen zu stellen. Und das würde ich nicht, wenn wir uns darauf beschränken würden, Probleme zu lösen. Im Gegenzug bietet man dort, wo man glaubt, eine bessere Lösung zu haben, diese auch an - Geben und Nehmen[*]. Ich halte es für wesentlich besser, das Toolset eines Fragenden zu erweitern, anstatt ihm zu zeigen, dass man alle Probleme mit demselben Hammer lösen kann (die Art Kollege kennt doch jeder. Und die will man eigentlich nicht haben).

[*] das beinhaltet auch, beim Geben mal hart daneben zu liegen. Ist eine Chance, was zu lernen ;).
[B]Was sollten Anfänger lernen?[/B]
Ich bin kein Freund des deutschen Bildungssystems im MINT-Bereich. Um einen alten Witz zu machen: "Was halten Sie von der deutschen Ausbildung im naturwissenschaftlichen Bereich?" - "Oh, das wäre eine gute Idee!"
Informatikunterricht gibt es in den Schulen jetzt seit fast 30 Jahren. Und ich kann meiner Tochter immer noch meine alten Lehrbücher zeigen, mit ihren vergleichen und finde kaum Unterschiede. Und das in der Informatik, dem Bereich, der sich am rasantesten entwickelt. (Wann genau wurde eigentlich das Lehramtsstudium "Informatik" eingeführt? Kann auch noch nicht sooo lange her sein. Die meisten Informatiklehrer sind Quereinsteiger, noch so ein Ding der Unmöglichkeit.)

Muss ein Schüler Arrays kennen? Unbedingt. Aber nur mit einem breiteren Verständnis davon, dass es verschiedene Weisen gibt, Daten zu speichern, und dass diese eine gemeinsame Basis haben, mit der man arbeiten kann. Wenn er das begriffen hat, kann man ihm das Array als Mutter aller Enumerables noch genauer erklären - aber erst, wenn er weiß, wie Projektionen funktionieren und dass Arrays eben nur eine Möglichkeit von vielen sind. Meinetwegen kann man dann auch noch erklären, was Zeiger sind und wie sie mit Arrays zusammenhängen. Aber sowas darf auch erst im Studium kommen. Wichtiger wäre es, wenn am Ende des Informatikunterrichts ein Grundverständnis von OOP vorhanden ist, und dazu gehört eben auch, um den Bogen zu schließen, dass man die Abstraktion "Aufzählung" verstanden hat und die Implementierung "Array" einordnen kann.

Und wenn jemand das nicht kann und hier ins Forum kommt, kann man durchaus versuchen, diese Wissenslücken zu stopfen. Sonst ersticken wir irgendwann in Programmierern, die alles mit einem Array lösen ;).
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4196

beantworten | zitieren | melden

So?


int[] i = new int[2];
int[,] a = new int[10, 10];

for (i[0]=1; i[0] < 10; i[0]++)
  for (i[1]=1; i[1] < 10; i[1]++)
  {
  	 a[i[0], i[1]] = i[0] * i[1];
  	 Console.WriteLine($"{i[0]} * {i[1]} = {a[i[0], i[1]]}");
  }
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

pff.

Enumerable.Range(1,9).SelectMany(p => Enumerable.Range(1,9).Select(q => new {p,q, r=p*q })).ToList().ForEach(p => Console.WriteLine($"{p.p} * {p.q} = {p.r}"));
Womit wir beide bewiesen hätten, dass es bescheuert aussieht, wenn man darauf besteht, ein bestimmtes Werkzeug zu nutzen ;).

LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4196

beantworten | zitieren | melden

private Nachricht | Beiträge des Benutzers
OlafSt
myCSharp.de - Member



Dabei seit:
Beiträge: 76
Herkunft: HH

beantworten | zitieren | melden

Ich bin ein Verfechter von @Abt's Methodik: Zeig ihm, wie es besser gemacht wird. Aber schubs ihn nur, durch die Tür gehen muß er schon selbst.

Warum ? Weil ich hier jeden Tag sehe, welch ungeheure Mengen an Schrott-Code so produziert wird. Ich überarbeite hier ein sehr großes Projekt mit jeder Menge Programmcode, über 30 Jahre gewachsen und von deutlich mehr als einem dutzend "Programmierern" vermurkst.

Wenn wir nun @ck87 zeigen, wie er sein Problem mit Arrays löst (unerheblich wie komplex das letztlich wird) und er seine Routine am laufen hat - was wird dann passieren ? ck87 ist stolz auf seine Lösung und wird es fortan nach Möglichkeit immer so machen.

Das ist kein Schwachsinn, sondern Praxis, wie ich es hier jeden Tag sehe, wenn ich eine neue Delphi-Unit öffne.

Darum ist es IMHO gar keine schlechte Idee, solchen Fragestellern gleich einen besseren Weg aufzuzeigen. Das hilft, die Denkmurmel anzuregen "oh, das geht auch anders ? Das ist ja cool". Schlechten Code gibt es schon genug und in der heutigen Zeit, wo man nur noch Bilbiotheken zusammenschmeißt, muß eben dieser Bibliothekscode nach aktuellem Stand "ordentlich" sein, um es mal salopp zu formulieren.

Das dieser Code in 5 Jahren vllt. nicht mehr "ordentlich" ist, ist der Lauf der Dinge. Aber: Alles in Arrays zu lösen war schon vor 25 Jahren nicht der Weisheit letzter Schluß, als ich das erste mal jemandem das Programmieren beibrachte.
private Nachricht | Beiträge des Benutzers