Ist Codierung wichtig, um in der Informatik gut zu sein? Sollte man den Algorithmus implementieren, um ihn gut zu kennen?
Ich erinnere mich an die Redewendung eines CS-Professors: " Ich codiere nie"
Ist Codierung wichtig, um in der Informatik gut zu sein? Sollte man den Algorithmus implementieren, um ihn gut zu kennen?
Ich erinnere mich an die Redewendung eines CS-Professors: " Ich codiere nie"
Antworten:
Sie wissen nicht wirklich , den Algorithmus gut , bis Sie sie codieren.
Das Codieren ist für Ihren Professor nicht wichtig, aber Sie müssen bedenken, dass er nicht dafür bezahlt wird, Dinge zu tun. Er wird dafür bezahlt, Dinge zu sagen (und Dinge zu schreiben).
Ich bin ein ehemaliger Mathematikprofessor, daher verstehe ich diese Dynamik gut.
Wenn Sie seinem Weg folgen und ein theoretischer Informatiker sein möchten, dann ist die Codierung von geringerer Bedeutung. Aber wenn Sie dies tun, denken Sie daran, Demut zu bewahren und zu wissen, dass Ihr Gehalt durch Ressourcen bezahlt wird, die von denen verdient werden, die sich entschieden haben, Dinge zu tun.
In der Informatik geht es nicht mehr um Computer als in der Astronomie um Teleskope
- Edsger Dijkstra
Ich neige dazu, zuzustimmen.
Wenn Sie davon sprechen, ein reiner Informatiker zu sein, der sich auf abstrakte, grundlegende Informatikkonzepte spezialisiert hat, dann nicht unbedingt.
Um eine Analogie zu biegen: Dies ist ein bisschen wie die Frage, ob jeder Raketenwissenschaftler bei der NASA im Weltraum fliegen muss, um ein "guter Raketenwissenschaftler" zu sein. Natürlich nicht. Astronaut zu sein ist Teil der Raumfahrtindustrie und ein sehr praktischer Teil, aber das bedeutet nicht, dass Bodenwissenschaftler auf ihre eigene Weise nicht so wichtig sind.
Trotzdem ist es wahrscheinlich eine gute Idee, den von ihm erstellten Algorithmus anzuwenden, wenn nicht sogar in einer echten Programmiersprache. In diesem Sinne können Sie sich das Algorithmusdesign als einen Zweig der Mathematik vorstellen.
Codierung ist nicht besonders wichtig, um ein echter Informatiker zu sein. Und das Denken im Code kann das Denken einschränken, wenn nützliche nützliche abstrakte Konzepte entwickelt werden sollen. Die meisten hervorragenden Codierer verfügen nicht über die intellektuellen Fähigkeiten, um komplexe Algorithmen zu analysieren oder Konzepte wie Programmiersprachen, erweiterte Such- und Sortieralgorithmen, Theorie endlicher Automaten, Theorie verteilter Computer, R-Bäume, Fehlertoleranzprotokolle, zuverlässige Kommunikationsprotokolle und digitale Daten zu entwickeln Signalverarbeitungsalgorithmen, kryptografische Theorie, Leistungsanalyse und -optimierung, effizientes Caching, Kartenreduzierung, zuverlässige Sicherheitsprotokolle usw. Ausgezeichnete Codierer und Computeringenieure können diese Theorien normalerweise in den Systemen verwenden, die sie erstellen möchten, und dies recht effektiv, aber Das ist wirklich der Bereich des Computersystemingenieurs oder Computerprogrammierers.
Codierung ist für Computerprogrammierer von entscheidender Bedeutung. Es ist auch hilfreich zu verstehen, wie die nützlichen abstrakten Konzepte der Informatiker in Arbeitscode codiert werden.
Ein großes Problem in der Informatik ist, dass sie häufig Lösungen für mathematische Probleme finden müssen, die bei der Lösung der heutigen Programmierprobleme wenig nützlich sind. Selbst wenn sie eine Lösung codieren würden, wäre niemand wirklich in der Lage, sie zu verwenden. Denken Sie an die Theorie der digitalen Signalverarbeitung. Es wurde von Leuten wie Fourier, Hilbert und Shannon erfunden, aber die Anwendung auf computergestützte DSP-Probleme war erst vor etwa 20 Jahren möglich.
Das große Problem in der Computerausbildung ist, dass die meisten Menschen, die von Informatikern unterrichtet werden, keine Informatiker werden. Aber zu viele Informatiker verstehen das nicht. Codierung mag für sie nicht wichtig sein, aber wenn Sie in ihrer Klasse sind, wird es mit ziemlicher Sicherheit für Sie wichtig sein.
Ein weiteres großes Problem in der Computerausbildung besteht darin, dass vielen echten Informatikern die industrielle Erfahrung fehlt, um im Unterrichten von Softwareentwicklung nützlich zu sein. Sie versuchen im Wesentlichen, etwas zu lehren, das sie wirklich nicht wissen. Das führt dazu, dass sie an Glaubwürdigkeit verlieren. Dinge, die in einem industriellen Umfeld wichtig sind, registrieren sich bei einigen dieser Informatiker nur selten.
Die lange und die kurze Codierung sind für die meisten Menschen wichtig, die "Informatiker" werden, da die meisten dieser Menschen Computerprogrammierer und Computersystemingenieure werden.
Kommt auf das Teilfeld an, in dem sich der Professor befindet.
Jeder, der sich mit numerischer Analyse auskennt, ist wahrscheinlich ein Fortran-Experte. Jeder KI-Professor wird in Lisp oder Prolog oder so etwas codieren.
In einigen der mathematischeren Bereiche besteht keine Notwendigkeit zum Codieren. Ich selbst wäre immer noch ein bisschen misstrauisch.
Klingt so, als wäre er eher ein diskreter Mathematiker ... nur in die Mathematik und Theorie hinter der Informatik. Nehmen Sie, was diese Art von Professoren zu sagen haben, mit einem Körnchen Salz.
Sie können nur die Theorie verstehen, aber ich habe immer festgestellt, dass ich Algorithmen und solche 1000-fach besser verstanden habe, nachdem ich sie codiert habe (Bubble Sort vs. Quicksort zum Beispiel, es ist großartig, das Big-O zu kennen, aber es in der Praxis mit großen Datenmengen zu sehen -sets gibt Ihnen eine gewisse Wertschätzung für die Messung der Rechenkomplexität in der realen Welt.
Eine interessante Sache, die ich gefunden habe, ist, je mehr Sie die theoretischen Aspekte der Informatik studieren, desto einfacher wird das Codieren. Irgendwann hört man auf, an Dinge in einer bestimmten Sprache zu denken, sondern sieht sie eher als die umfassenderen Konzepte der Computerwissenschaft.
Dies ist wie die Frage, ob alle englischen Professoren in der Lage sein sollten, Filme, Fernsehserien, Romane, Theaterstücke und Gedichte zu schreiben. Stellen Sie sich in ähnlicher Weise einen Mathematikprofessor vor, der niemals Zahlen für eine ebenso ausgefallene Idee verwendet. Das heißt, dass es einige grundlegende Elemente gibt, die der Codierung eine gewisse Bedeutung beim Unterrichten grundlegender Informatik verleihen. Daher sollte der Professor die grundlegende Sprachsyntax kennen und wissen, wie man Programme schreibt, die so anspruchsvoll sind wie die Kurse, die der Professor unterrichtet. Wenn der Professor über Compiler-Design unterrichtet und noch nie einen Compiler geschrieben hat, wäre dies ein großes Problem. Stellen Sie sich einen Koch vor, der einen Kuchen kocht, der noch nie zuvor einen Kuchen gekocht oder gegessen hat. Aye carumba.
Ich sehe zwar einige Vorteile bei der Implementierung eines Algorithmus, um ihn zu kennen, bezweifle jedoch, dass dies erforderlich ist. Man könnte sich schließlich fragen, wie weit man im Kaninchenbau der Implementierung geht, um zu verstehen, wie ein Algorithmus implementiert wird. Muss zum Beispiel jemand einen Algorithmus nehmen und ihn unter verschiedenen Paradigmen wie prozeduraler, objektorientierter und funktionaler Programmierung implementieren, um ihn wirklich zu kennen? Müssen sie wissen, wie Compiler den gesamten Code übersetzen und die Bits elektronenweise verschieben, um ziemlich pedantisch zu sein?
"Ich codiere nie" impliziert jedoch, dass sowohl die Vergangenheit als auch die Gegenwart in gewisser Weise enthalten sind. Es kann auch eine implizite Annahme geben, dass "Codierung" eine niedrige Sache ist, die unter dem Professor liegt, um die Aussage auf andere Weise zu betrachten, die einen eher negativen Ton haben kann, der in einigen Kreisen möglicherweise nicht gut ankommt.
Obwohl ich ein professioneller Softwareentwickler bin, habe ich einen Abschluss in Maschinenbau.
Sie können ein guter Konstrukteur mit sehr wenig Erfahrung im Bauen und Bearbeiten von Teilen sein und diesen Job den Maschinisten überlassen. Wenn Sie jedoch wissen, wie Teile gebaut und bearbeitet werden, sind Sie ein wesentlich besserer Ingenieur, da Sie Schwierigkeiten bei der Herstellung und Montage Ihrer Entwürfe vorhersagen können.
Gleiches gilt für Software. Ein "Codierer" ist ein Maschinist oder Techniker, während ein Softwareentwickler der Ingenieur ist. An vielen Orten erledigt eine Person beide Aufgaben. Es ist nicht unmöglich, und für einige sehr abstrakte Themen könnte eine "nur Ingenieur" -Position funktionieren.
Für die überwiegende Mehrheit ist es jedoch absolut nicht vorteilhaft, sich zu weigern, Code zu schreiben.
Wenn Sie nicht darüber nachdenken und das Problem des Anhaltens beenden, gibt es in jedem Aspekt der Informatik immer eine Verwendung für die Codierung.
Die einzige CS-Klasse, die ich ohne Programmierung belegte, war die Theorie. Ich würde mir vorstellen, dass es viele Physiker gibt, die sagen: "Ich experimentiere nie", aber sie sind wahrscheinlich auch diejenigen, die sagen: "Ich entdecke nie etwas". Und ich wäre überrascht, wenn es sie interessiert.
Als Informatikstudent denke ich, dass es zunächst besser ist, Konzepte zu verstehen, die Softwareentwicklung beinhalten. Sobald Sie die Idee hinter Software und deren Interaktion mit einem Computer kennengelernt haben, ist es an der Zeit, mit dem Codieren und Behandeln spezifischer Implementierungsprobleme zu beginnen.
Dies ist genau wie bei "Software-Ausnahmen". Zuerst beschäftigen Sie sich nur mit ihnen, weil Sie etwas getan haben, was nicht erlaubt war. Wenn Sie sie dann lernen, machen Sie dasselbe mit Ihrem Code, um ihn ausführlicher zu gestalten.
Nun, ich denke, dass Leute, die sich nicht für Konzepte interessieren, wie jene Programmierer, die Ausnahmen als normalen Workflow in ihren Anwendungen verwenden. Sie wissen, wie, aber nicht wirklich warum.
Ich habe eine andere Redewendung für Ihren Professor:
Wer kann, tut, wer nicht kann, lehrt.
Imo, reden ist billig. Jeder kann endlos über "Theorie" reden und es "Informatik" nennen. Aber bis es in die Praxis umgesetzt wird, ist die Theorie nicht sehr nützlich, weil es keine Möglichkeit gibt, sie zu validieren. Ich hätte gerne ein prof Meinung über etwas nehmen viel ernster , wenn ich wusste , dass er tatsächlich gelöst , ein bestimmtes Problem in Code , als wenn er gerade ist ‚Theorie‘ regurgitating , die keine Belege haben kann oder auch zu sichern , seinen Standpunkt.