Als jemand mit einem Electronic Engineering statt Grad Informatik, was ist das ein Bit der Informatik soll ich das wissen , um mich zu einem besseren realen Welt Programmierer?
(Unter realer Welt verstehe ich etwas, das ich in meiner täglichen Arbeit als Programmierer nutzen und davon profitieren werde. Ich würde beispielsweise vorschlagen, dass das Verständnis der Datenbanknormalisierung praktischer ist als das Verständnis einer schnellen Sorte, für die es eine Menge gibt von Bibliotheken).
learning
computer-science
theory
Jon Hopkins
quelle
quelle
if
undloop
schriftliche Erklärung jemals verwendet eine Teilmenge dieser beiden Bereiche der Studie.Antworten:
Wenn ich nur ein Bit auswählen muss, was eine schwierige Entscheidung ist, würde ich die Big O-Notation wählen . Das Verstehen der Implikationen von O (n), O (lnn), O (n²), O (2 ^ n), O (n!) Hilft Ihnen, viele teure Fehler zu vermeiden, die in der Regel gut funktionieren Testumgebung, aber katastrophal in der Produktion scheitern.
quelle
Dies ist eine Frage, auf die jeder eine andere Antwort haben wird. Ich würde sagen: Komplexitätstheorie ist das wichtigste Stück, das man als Programmierer sowieso nicht direkt lernt (wie Algorithmen und Datenstrukturen), sondern was sich auf seine Arbeit auswirken kann. Es hilft, wenn ich weiß, dass ein Problem eine kubische Komplexität hat. Ich weiß, dass es schlecht skaliert, wenn die Problemgröße erhöht wird.
quelle
Erfahren Sie mehr über Datenstrukturen, Algorithmen und Komplexität.
Nicht zu viel, nur um zu verstehen, dass eine Maschine keine magische Kiste mit unbegrenzter Kraft ist. Sie können nichts darauf werfen und erwarten, dass es in Millisekunden zerbricht. Es hat Grenzen, die Sie kennen. Sie müssen lernen, sie nicht mit Ihrem Code zu testen.
Sehen Sie sich auch gängige Ansätze an, um bestimmte Designprobleme in der Programmierung zu lösen. Entwurfsmuster nämlich. Bete sie nicht an, nimm einfach die Ideen, die sie kommunizieren.
Kenntnisse in der Datenbankmodellierung sind ebenfalls unerlässlich.
Danach sind es nur noch verschiedene Programmiersprachen, Frameworks und Bibliotheken, mit denen Sie die Kernkonzepte implementieren oder implementieren können. Nimm auf, was du willst und übe damit.
quelle
Das ist ein bisschen eine schwierige Frage.
Alle Aspekte der Informatik sind auf die eine oder andere Weise wichtig.
Das Verständnis der Big-O-Notation ist wichtig, und auch das Verständnis, wie Ihr Code ausgeführt werden kann, ist in Situationen der realen Welt sehr wichtig.
quelle
Ja, das hat mich dazu gebracht, stundenlang nachzudenken.
Dabei musste ich einige der hier bereits gegebenen allgemeinen Antworten entfernen.
Große O (n) -Notation . Schwer auszudrücken, aber nein, wir können intuitiv Ineffizienzen ermitteln und verschiedene Verfahren vergleichen, ohne auch nur aus der Ferne von einer asymptotischen algorithmischen Analyse gehört zu haben.
Funktionale Sprachen Nein, eine einzelne Sprachfamilie ist nur ein Ansatz, um über Probleme nachzudenken. Warum sollte nur dieses Bit eine Rolle spielen?
Anhalten des Problems Einige sind einfach zu spezifisch und die Menschen haben ein Leben geführt, ohne zu wissen, dass es sie gibt.
Hören Wenn Sie nicht zuhören, dann leben Sie in Ihrer eigenen Welt. Nicht unbedingt schädlich!
Software-Entwicklungszyklus Nah! Wir können uns immer noch auf unglaubliche Software oder heldenhafte Alleingänge stürzen.
Komplexitätstheorie Ich denke, das könnte es sein, aber ohne alle Formalismen
Ich würde sagen - " Abstraktionen Abstraktionen Abstraktionen ... ". Erfahren Sie mehr darüber. Sehen Sie sich Beispiele an und lernen Sie, wie Sie damit bauen. Es ist überall. Die gesamte Informatik, Ingenieurwissenschaften und Anwendungen wirken wie Schichten auf Schichten der Abstraktion.
Sobald Sie dies wissen, lernen Sie, sich gut umzusehen.
Wenn Sie jemanden sehen, der
list insertion
inpython
und verwendetnot append
, lächeln Sie, weil Sie wissen, dass Python-Listen mit Array-Abstraktion erstellt werden, bei der Einfügungen teuer sind und billiger angehängt werden.Dies ist nur ein Beispiel.
quelle
Automatentheorie und FSM. :-)
quelle
Wettbewerbsfähige Use Cases von Datenstrukturen.
Es gibt Situationen, in denen eine Karte mit rot-schwarzen Bäumen erforderlich ist, um die Leistung zu gewährleisten, und andere Situationen, in denen Sie kein Array verwenden können, um die Leistung zu gewährleisten. Zu wissen, wann zu entscheiden ist, welche Datenstruktur von unschätzbarem Wert ist.
quelle
Es sind nur drei Zahlen von Bedeutung:
quelle
Das Wichtigste, was ich in CS (und als Entwickler über viele Jahre hinweg und als Architekt) gelernt habe, ist die Fähigkeit, ein Problem anhand der Volatilität und nicht anhand der Funktion aufzuschlüsseln . Alle guten Designs isolieren und kapseln die Volatilität. Alle guten Entwickler / Architekten tun dies intuitiv, auch wenn sie es nicht in ihrem Denken formalisiert haben. Ein großer Grund für das Scheitern eines Projekts ist das Versagen, ein Problem auf der Grundlage der Volatilität aufzuschlüsseln und zu verkapseln. Wenn die Volatilität nicht erfasst wird, führt dies zwangsläufig dazu, dass die Komplexität und das Scheitern des Projekts zunichte gemacht werden.
quelle
Das haltende Problem
Die Tatsache, dass Computerprobleme existieren, die von einem Computer einfach nicht gelöst werden können.
quelle
Sie sollten genug Automatentheorie kennen, um zu wissen, wo das Problem, mit dem Sie sich befassen, in die Hierarchie der formalen Sprachen fällt. Daraus können Sie einige wichtige praktische Anwendungen ableiten , z. B. warum Sie kein REGEX zum Parsen von HTML verwenden sollten (HTML benötigt eine kontextfreie Grammatik, um es zu beschreiben) und warum das Kompilieren von C ++ so viel länger dauert als das Kompilieren von C ++ Java oder C # (C ++ erfordert eine Turing-Maschine, während Java und C # mit kontextfreien Grammatiken beschrieben werden können).
Die wichtigsten Ebenen formaler Sprachen sind von den schwächsten bis zu den stärksten:
Sprachen, die von endlichen Automaten oder von REGEX analysiert werden können (REGEX-Implementierungen mit Rückverweisen sind leistungsfähiger als diese Kategorie, können jedoch nicht alles in Kategorie 2 analysieren)
Sprachen, die von Automaten mit Stapelspeicher oder einer kontextfreien Grammatik analysiert werden können.
Sprachen, die von einer Turing-Maschine oder von Automaten mit Direktzugriffsspeicher analysiert werden können.
quelle
Nun, ich könnte Ihnen eine langweilige Antwort geben: Automatentheorie und Informationstheorie.
Oder ich könnte Ihnen sagen, was ich vor langer Zeit von einem Hardwareberater gelernt habe:
quelle
Der Software Development Life Cycle ist etwas, das ich empfehlen würde, wenn Sie es nicht bereits wissen. Zugegeben, dies wurde in einem zweiten Jahr Informatikkurs eingeführt und wird in Softwareprojekten immer wieder verwendet. Dies kann hilfreich sein, um eine allgemeine Vorstellung davon zu bekommen, wie ein Projekt von Anfang bis Ende abläuft. Wenn Sie jedoch detaillierter vorgehen möchten, gibt es Methoden wie Waterfall oder Agile, die Sie studieren können, um spezifisches Wissen zu erlangen.
quelle
Programmierung
Aus dem Fachbereich Mathematik und Informatik kommen die Colleges Hobart und William Smith. 124 Einführung in die Programmierung :
Wenn Sie nicht programmieren können, sind Sie in der Praxis nicht weit.
Und ja, ich habe festgestellt, dass Sie Programmierer sind. Dies dient dazu, Ihre allgemeinen Kenntnisse der Programmiertheorie zu verbessern und welche anderen Ansätze Ihnen zur Verfügung stehen.
Ist das Programmieren von Informatik so, wie wir es kennen?
Als Antwort auf den Kommentar von @Thomas Owens, der (zu Recht) darauf hinwies, dass Programmierung keine reine Informatik ist, möchte ich aus dem Wikipedia- Artikel über Informatik zitieren :
So, wie ich es lese, demonstrieren Sie durch Programmieren Ihr Verständnis der Programmiertheorie. Dies soll Ihnen wiederum dabei helfen, einfachen, eleganten Code zu erstellen, mit dem andere gerne arbeiten.
quelle
Ich muss Konrad Rudolph widersprechen. Es gibt "ein bisschen" Informatik, von der Sie wissen sollten, dass sie Sie zu einem besseren "Programmierer der realen Welt" macht. Wenn Sie den Antworten, die Sie hier erhalten, nichts anderes nehmen, sollten Sie zumindest Folgendes berücksichtigen: Die Erfüllung der Anforderungen ist NICHT gleichbedeutend mit der Zufriedenstellung des Kunden! Die Endbenutzer werden IMMER versuchen, Ihr Programm auf eine Weise zu verwenden, an die Sie nie gedacht oder die Sie nie gedacht haben. IMMER IMMER IMMER
Um ein besserer Programmierer zu sein, müssen Sie daher zuerst ZUHÖREN. Hören Sie dem Kunden zu. Höre auf ihre Bedürfnisse. Hören Sie auf ihre Wünsche. Und vor allem, hören Sie sich ihre "Technik-Fachkenntnisse" an. Ich kann Ihnen nicht sagen, wie oft ich ein Projekt gesehen habe, das genau das war, was angefordert wurde, aber überhaupt nicht das, was der Kunde tatsächlich benötigte. Alles nur, weil der Programmierer, der die Anfragen sammelte, nicht wirklich zuhörte.
Etwas anderes, das Sie mitnehmen können, ist, wenn Sie keinen Hintergrund im UI-Design haben, jemanden zu beauftragen, das UI zu entwerfen. Ich kann IMMER eine App erkennen, deren Benutzeroberfläche vom Programmierer und nicht von einem Experten entworfen wurde. Was für Sie logisch und sinnvoll ist, ergibt für den Kunden keinen Sinn. Und wenn Ihre Kunden nicht technisch versiert sind (und wer ist das?), Wird Ihre "funktional korrekte, aber ästhetisch hässliche" Lösung bei einer Dinnerparty mit der Wärme von Stinktier erfüllt.
quelle
Funktionssprachen!
Wenn Sie funktionale Sprachen lernen, denken Sie eher in Ausdrücken als in Schritten und benannten veränderlichen Zuständen (Variablen). Dies hat erhebliche Auswirkungen auf Ihre Fähigkeit, die alltäglichen Programmierprobleme effektiv zu bewältigen - insbesondere jetzt, wo fast jede gängige Sprache über funktionale Funktionen verfügt.
Algorithmen und Komplexitätstheorien sind ebenfalls wichtig, aber etwas weniger interessant, da Sie damit meistens Namen für Dinge vergeben können, die Sie normalerweise bereits kannten und die Sie ableiten konnten.
quelle
Dass Computer im Wesentlichen Pattern Matcher sind, mehr nicht. Alles läuft auf die Turing-Maschine hinaus - das klassische Konzept der Informatik zur Erklärung der Musterbearbeitung.
quelle
Problemlösung und der Wunsch, weiter zu lernen!
Sie dienen mir weitaus besser als das Wissen über schnelle Sortierung und Datenbanknormalisierung.
quelle