ist die Codierung wichtig? [geschlossen]

9

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"

hilal
quelle
32
Sie fragen eine Gruppe von Programmierern, ob Codierung wichtig ist. Möglicherweise erhalten Sie nicht genau eine unvoreingenommene Antwort.
Rachel
25
Bei allem Respekt vor der Redewendung Ihres Professors ist er nicht qualifiziert, anderen das Schreiben von Code beizubringen, wenn er keinen Code schreibt. Wenn sein Unterricht rein theoretisch ist, würde er dennoch von Codierungsfähigkeiten profitieren.
Robert Harvey
19
Würden Sie Schwimmunterricht bei jemandem nehmen, der nicht schwimmen konnte?
Steven A. Lowe
5
@Steven A. Lowe: Ich denke, der Nichtschwimmerprofessor unterrichtet Wasserphysiologie, nicht Schwimmen. Wenn er nicht schwimmt, würde ich bezweifeln, dass er weiß, wie sich Stickstoffnarkose anfühlt.
Javier
4
@ Javier: Wahrscheinlicher ist, dass er Unterwasserabbruch unterrichtet, aber noch nicht einmal SCUBA-zertifiziert ist. Der Fachbegriff für solche Leute (außer "Professor") ist "Poseur" ;-)
Steven A. Lowe

Antworten:

27

Sie wissen nicht wirklich , den Algorithmus gut , bis Sie sie codieren.

Steven A. Lowe
quelle
3
Dies ist nicht unbedingt wahr, man kann einen Algorithmus verstehen und auf eine Situation oder ein Problem anwenden, ohne ihn tatsächlich zu codieren.
Aggietech
10
@aggietech: Ich denke, das Schlüsselwort hier ist "gut".
Robert Harvey
2
@aggietech, Robert hat es richtig gemacht. Ich kann Algorithmen nachahmen, aber wenn ich wirklich versuche, sie zum Laufen zu bringen, finde ich heraus, wie viel ich darüber lernen muss.
3
Wenn Sie über For-Loops und Blasensorten sprechen, dann ist das keine große Sache, aber es gibt einen großen Unterschied zwischen dem Lesen eines Buches über den genetischen Algorithmus und der tatsächlichen Lösung realer Probleme damit
Steven A. Lowe
2
@Steven, yep, die Komplexität hat viel damit zu tun.
19

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.

Eric Wilson
quelle
3
Die Stimme der Erfahrung. Hier geht es um die beste Zusammenfassung der Professur, die ich gesehen habe.
TheShrike
1
Ja, und ich möchte hinzufügen, dass Sie das "Do" üben müssen, wenn Sie anderen beibringen wollen, "Do" gut zu machen.
Beth Whitezel
@ BitOff: Ich stimme zu, aber das "wenn" ist auch ein "nur wenn". Ein Professor, der niemals codiert, hat keine Softwareentwicklung für das Unterrichten von Unternehmen, aber er ist möglicherweise perfekt geeignet, um beispielsweise Komplexitätstheorie zu unterrichten. In diesem Fall bringt er den Schülern bei, wie man Theoreme beweist. Die einzige Voraussetzung ist, dass er die Prüfung von Theoremen üben muss (nicht das Codieren).
ShreevatsaR
@ShreevatsaR Ja, ich stimme zu. Und ich bin eigentlich gar nicht so streng in der Tatsache, dass sie in der Praxis viel codieren. Gute Programmierer sind selten gute Lehrer. Wenn der Lehrer seine Wochenpunkte kennt, kann er dies wieder gutmachen. Wir haben ein Programm vor Ort, das Branchenleute in den Unterricht bringt. Der Lehrer ist ein Experte im Unterrichten, kann codieren und weiß, wie er die Informationen zum Nutzen der Schüler aus der Industrieperson herausholt.
Beth Whitezel
16

In der Informatik geht es nicht mehr um Computer als in der Astronomie um Teleskope

- Edsger Dijkstra

Ich neige dazu, zuzustimmen.

ElGringoGrande
quelle
2
Ok, aber wie hängt das mit der Frage zusammen?
Robert Harvey
2
"Ist Codierung wichtig, um in der Informatik gut zu sein?" Wenn ein Computer nicht verwandt ist, wie könnte die physische Codierung des Computers wichtig sein?
ElGringoGrande
1
@ Robert Harvey: In der Informatik geht es nicht explizit um Computer, und viele Astronomen verbringen wenig Zeit damit, durch Glaslinsen zu schauen. Einige analysieren nur die Ergebnisse. Die Hälfte der wichtigen Entdeckungen in der Computerprogrammierung war bekannt, bevor der Computer überhaupt entstand.
Orbling
2
@ Robert Harvey: In der Informatik geht es einfach nicht darum, wie man programmiert, sondern um die Wissenschaft des Rechnens. Außerhalb der reinen binären Codierung verwenden Sie eine Sprache, die eine Abstraktion ist, um die Theorien und Erkenntnisse der Informatik umzusetzen. In der Informatik gibt es viele Ideen (z. B. Quantencomputer), die die Programmierung nicht vollständig umsetzen kann. Ich sage nur, dass alle Ideen der Informatik ohne Verwendung einer Programmiersprache vollständig und elegant ausgedrückt werden können. Nennen Sie einen, der nicht kann.
ElGringoGrande
3
@Orbling: Sehr wahr. Denken Sie zum Beispiel daran, dass Turing den Begriff der universellen Turing-Maschine erfunden hat, bevor der erste elektronische Computer überhaupt geschaffen wurde. Macht ihn die Tatsache, dass er nicht viel Code geschrieben hat, zu einem inkompetenten Informatiker?
Mipadi
11

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.

Bobby Tische
quelle
1
Ich denke, es ist fair zu sagen, dass alle Raketenwissenschaftler bei der NASA eine gründliche Grundlage in der Raketenwissenschaft und fundierte praktische Erfahrung mit Maschinenbau und Elektrotechnik haben. Oh, und sie wissen im Allgemeinen auch, wie man Code schreibt.
Robert Harvey
3
Ich würde denken, dass sie Trajektorien viele Male berechnet haben, nicht nur theoretisiert, wie.
3
+1, ich möchte noch ein Beispiel hinzufügen - Sie müssen keine Erfahrung in der Weinherstellung haben, um ein großartiger Somellier zu sein (oder wie auch immer die Leute mit Weinverkostung genannt werden).
Jas
2
@ Jas: Schreckliche Analogie. Informatiker sind nicht die Empfänger des Endprodukts. Sie sind die Winzer.
Doppelgreener
1
@Axidos Nein, nein, sie sind die Weinbauern .
Mark C
9

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.

Jay Godse
quelle
Hervorragende Antwort, direkt zum Kern des Problems. Das Problem ist, dass Sie beides lernen müssen: Computational Science und Software Engineering, die für die Industrie relevant sind. Die meisten Universitäten unterrichten eine besser als die andere, normalerweise die erstere - es ist nicht allzu einfach, die letztere zu erreichen, da eine Universität von Natur aus ein Forschungsinstitut ist, das die erstere fördert und wenig mit der letzteren zu tun hat. Dies ist in den meisten praktischen Bereichen ein Problem.
Orbling
3

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.

David Thornley
quelle
2

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.

Steven Striga
quelle
5
Ich bin Mathe-Enthusiast und Algorithmus-süchtig. Ich programmiere immer gerne. Hinter der Codierung stehen jedoch Algorithmen. 1 Stift und 1 Papier reichen für Algorithmen und auch für die Berechnungstheorie, denke ich. Was ich heutzutage mache, ist nur zu denken und Algorithmen zu schreiben, aber nicht zu codieren
hilal
5
Nehmen Sie, was jeder Professor sagt, mit einem Körnchen Salz. Wenn er ein diskreter Mathematiker ist, nehmen Sie ihn ernst, wenn er über diskrete Mathematik spricht, nicht wenn er über Programmierung oder Softwareentwicklung spricht.
David Thornley
1
Diskrete Mathematiker gehören zu den wichtigsten auf dem Gebiet, die Theorie wird von Programmierern implementiert, sie muss nicht implementiert werden, um sich als richtig zu erweisen. Eine Prise Salz in der Tat.
Orbling
@Orbling Und nehmen Sie, was diejenigen, die programmieren, sagen (eine breite Gruppe), mit einer ähnlichen Dosis suspendierten Urteilsvermögens und gesunden Menschenverstandes.
Mark C
@ Mark C: Nun ja, ich würde jeden auffordern, alles zu nehmen, was jemand mit diesen Dosen sagt.
Orbling
2

Ich muss sagen "Logik ist wichtig"

John Hartsock
quelle
2
Ok, aber wie hängt das mit der Frage zusammen?
Robert Harvey
2

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.

Kurtis
quelle
2

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.

JB King
quelle
3
Englischprofessoren sollten wissen, wie man Drehbücher schreibt, wenn sie anderen beibringen, wie man Drehbücher schreibt. Aber alle englischen Professoren sollten sicherlich in der Lage sein, eine sehr gute These zu schreiben, wenn nicht sogar ein tatsächliches Buch.
Robert Harvey
2
@ Robert Harvey: Der Professor des OP hat nicht gesagt , dass er nicht codieren kann, nur dass er es nicht tut. Er könnte ein theoretischer Informatiker sein, der die meiste Zeit mit Forschung verbringt. Wie JB King betonte, könnte er auf seinem Gebiet sehr erfahren und kompetent sein, solange er nicht beispielsweise über Compiler-Design oder Software-Engineering unterrichtet.
Mipadi
@ Robert Harvey: Ich denke, @mipadi hat da den Punkt, der Professor sagte nur "Ich codiere nie" , nicht dass er unfähig ist.
Orbling
@JB King, @Orbling: Ich würde wetten, dass das Zitat eine Übersetzung ist, also analysieren Sie es nicht wörtlich.
Javier
@ Javier: Könnte gut sein, in diesem Fall wäre es noch weniger eindeutig.
Orbling
2

Ihr Professor hat vielleicht ein bisschen Recht, um ein Professor zu sein, müssen Sie nicht codieren, wissen aber viel über die Theorie. Aber das wird außerhalb der Universitätsgrenzen nicht funktionieren.

Manoj R.
quelle
1

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.

Whatsisname
quelle
2
Aber, wie Sie gesagt haben , du bist ein mechanischer Ingenieur , und Sie sprechen über Software - Engineering . Ingenieure bauen Sachen. Aber der Professor in Frage lehrt Computer Wissenschaft .
Mipadi
1

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.

Peter Turner
quelle
1
In meinem Computing-Abschluss (mit einer Universität unter den Top 10 auf internationaler Ebene, also nicht lahm) würde ich sagen, dass mindestens ein Drittel meiner Klassen überhaupt keine Programmierung hatte. Beim Computing geht es um weit mehr als nur um Code.
Orbling
Ok, anscheinend bin ich auch an eine der Top-Ten-Universitäten gegangen. Vielleicht haben wir sogar die gleiche Universität besucht und verschiedene Klassen besucht, basierend auf unseren eigenen Vorlieben oder Abneigungen, oder zufällig Professoren der einen oder anderen Art bekommen.
Peter Turner
0

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.

Guiman
quelle
-6

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.

GroßmeisterB
quelle
6
Einstein, Aristoteles, Webster, Ayn Rand, Thoreau, Konfuzius und Booker T. Washington waren Lehrer. Was für eine ungebildete Aussage.
JeffO
4
-1 Für einen äußerst beleidigenden Kommentar an die Lehrer. Oft zitiert weiß ich, aber immer lächerlich. Die ursprüngliche Bemerkung von George Bernard Shaw lautete: "Wer kann, tut. Wer nicht kann, lehrt." von Man and Superman, 1903 - er sagte auch: "Für mich liegt die einzige Hoffnung auf menschliche Erlösung in der Lehre." und war Mitbegründer der London School of Economics (LSE), also beurteilen Sie seine Ansicht.
Orbling
2
Einstein führte in seinem Leben nie ein physikalisches Experiment durch - er beschrieb einige Gedankenexperimente, die von anderen durchgeführt wurden und (mit einer Ausnahme) genau so herauskamen, wie er es vorhergesagt hatte. Würden Sie sagen, dass Einstein keine "wesentliche Leistung außerhalb des Klassenzimmers" hatte? Warum nehmen Sie das nur , weil der Professor etwas nicht umgesetzt hat direkt nutzbar für Endnutzer, hat er nicht, sagen wir, einen neuen Algorithmus untersucht , die sich von Programmierern im Feld verwendet? Tatsächlich scheinen Sie sogar anzunehmen, dass es die Aufgabe des Professors ist, den Schülern das Codieren beizubringen !
ShreevatsaR
3
Alter, viele meiner Informatikprofessoren (am MIT) waren großartig und haben immens zur Gesellschaft beigetragen, und sie machen "Sachen auf ihrem Gebiet" - viel! Aber ihr Gebiet hat sehr wenig mit Codierung zu tun, und sie codieren höchstens sehr selten, wenn überhaupt. (Erwarten Sie im Ernst, dass jemand, der an der Quantenberechnung arbeitet, Code für Quantencomputer schreibt, die es nicht einmal gibt?) Sie scheinen eine sehr enge Sicht auf die Informatik zu haben. (Es ist Computer speichern Wissenschaft , nicht Technik .)
ShreevatsaR
2
@GrandmasterB: Wenn sich ein Comp-Sci-Professor auf die Theorie der Berechnung konzentriert, ist es sehr wahrscheinlich, dass er selten Code schreiben muss. Das bedeutet nicht, dass er nichts auf seinem Gebiet tut - er veröffentlicht wahrscheinlich Artikel über Computertheorie! Sie verbinden Programmierung mit Informatik .
Mipadi