Ist die Informatik tot? [geschlossen]


18

Frage: Ist die Wissenschaft und Kunst von CS tot? Damit meine ich, dass die tatsächlichen Anforderungen zum Denken, Planen und effizienten Lösen von Problemen heutzutage von CS zu fallen scheinen. Das Feld scheint die Eintrittsbarriere zu senken, damit mehr Menschen "programmieren" können, ohne lernen zu müssen, wie man wirklich programmiert.

Hintergrund: Ich bin ein Absolvent mit einem BS in Informatik. Ich arbeite in einer Startposition in einem Unternehmen mit angemessener Größe in der IT-Abteilung. Ich mache meistens .NET und andere Microsoft-Technologien in meinem Job, aber vorher habe ich Java-Sachen durch Praktika und ähnliches gemacht. Ich persönlich bin ein C ++ - Programmierer für meine eigenen Spaßprojekte.

Im Detail: Durch die Arbeit, die ich gemacht habe, scheint es mir, dass die intensiven Disziplinen einer echten Wissenschaft in CS nicht mehr existieren. In der Vergangenheit mussten Programmierer Probleme effizient lösen, damit Systeme robust und schnell sind. Aber jetzt, mit den vorherrschenden Technologien wie .NET, Java und Skriptsprachen, scheint es, als ob Effizienz und Robustheit gegen einfache Entwicklung eingetauscht wurden.

Die meisten Kollegen, mit denen ich zusammenarbeite, haben nicht einmal einen Abschluss in Informatik. Die meisten haben einen Abschluss in Elektrotechnik, einige in Softwaretechnik und einige kamen aus technischen Schulen ohne 4-jähriges Programm. Dennoch kommen sie gut miteinander aus, ohne den technischen Hintergrund von CS zu haben, ohne Theorien und Algorithmen studiert zu haben, ohne Rücksicht auf eine elegante Lösung zu nehmen (sie entscheiden sich einfach für die einfachste und billigste Lösung).

Das Unternehmen treibt uns dazu an, Microsoft-Technologien zu verwenden, die alle eigentlichen Überlegungen vereinfachen und durch Bibliotheken und Tools ersetzen, mit denen Ihr Projekt die Hälfte der Zeit automatisch für Sie erstellt werden kann. Ich versuche nicht, die Sprachen zu hassen, ich verstehe, dass sie einem Zweck dienen und es gut machen, aber wenn Ihre Mitarbeiter nicht wissen, wie eine Hash-Tabelle funktioniert, und die falschen Sortiermethoden verwenden oder SQL-Befehle ausführen, die sind schrecklich ineffizient (aber erledigen Sie die Arbeit in einer akzeptablen Zeit), es scheint, als würde mehr Aufwand in die Entwicklung von Technologien gesteckt, die neue "Programmierer" verwöhnen, anstatt den Menschen tatsächlich beizubringen, wie man Dinge richtig macht.

Ich bin daran interessiert, effiziente und meiner Meinung nach schöne Programme zu erstellen. Wenn es einen besseren Weg gibt, gehe ich lieber zurück und überarbeite es, als es gleiten zu lassen. Aber in der Unternehmenswelt treiben sie mich eher dazu, Aufgaben schnell als elegant zu erledigen. Und das nervt mich wirklich.

Ist es das, worauf ich mich für den Rest meines Lebens freuen werde? Gibt es noch Stellen für Leute, die die Wissenschaft und Kunst von CS lieben und nicht nur den Gehaltsscheck?

Und in diesem Sinne, hier ist eine gute Lektüre, falls Sie sie noch nicht vor The Perils Of Java Schools gesehen haben


2
Zwei Dinge - 1. Entwicklung muss nicht schwer sein. 2. Gut geschriebene Programme sind in Situationen von entscheidender Bedeutung, in denen Skalierbarkeit wichtig ist. Hier werden Sie vermutlich durchscheinen. Ich stimme dem aber grundsätzlich zu. Obwohl ich mich als Programmieranfänger betrachte, bin ich daran interessiert, alles (bis zu einem gewissen Grad) auf niedrigem Niveau zu lernen und keine vorab geschriebenen Frameworks zu verwenden, und so weiter ... (zumindest von Anfang an ... oder wann) Ich verwende jedes Framework, das mir gehört.
Anonym

48
Ich denke dein CS verwirrt mit der Programmierung, das sind aber zwei verschiedene Dinge.
Darknight,

1
@chris da stimme ich voll zu. Ich benutze Frameworks und Bibliotheken ausgiebig, versuche sie aber zu tun, ohne vorher das Problem zu verstehen und zu verstehen, wie die Bibliothek es löst. Sobald ich es weiß, kann ich wählen, welche Bibliothek es IN DIESEM INSTANZ am besten löst, anstatt bei jedem Problem einfach eine generische Bibliothek zu werfen und zu hoffen, dass es
hängen

8
Welches Problem versuchen Sie mit dieser Frage zu lösen?
Jeremy

15
@Veaviticus, wirklich erwarten Sie, dass Ihre Klempner die Strömungsmechanik kennen (damit sie ihre Arbeit besser erledigen können?). Die meisten Branchenanwendungen (Desktop / Web) müssen keine hochkomplexen Probleme lösen (sehr selten). Hilft es, einen Hintergrund in CS zu haben? höchstwahrscheinlich. Ist es für LOB erforderlich -> nicht wirklich.
Darknight

Antworten:


25

Ja und nein

Gute Frage, aber schlechte Annahme.

Der wissenschaftliche Teil der Ausbildung scheint zu fehlen, aber die Annahme, dass die Wissenschaft nur dazu da war, Programme effizienter zu machen, ist falsch.

Die Wissenschaft war notwendig, um den Menschen beizubringen, wie man Probleme definiert und löst.

Leider scheint dieser Teil einiger "CS" -Studienpläne (Curricula?) Gänzlich wegzulassen, ersetzt durch Spielzeugprobleme mit trivialen oder bekannten Lösungen, und dient lediglich dazu, die Vertrautheit mit Werkzeugen zu vermitteln

Enttäuschend; Viele Java-Schulabsolventen hatten einen Mangel, lernten nie, wie man ein Problem zerlegt, einen Algorithmus entwirft, einen Test spezifiziert oder sogar effektiv debuggt.


2
Ich besuchte eine Schule, die Java nicht einmal so stark betonte, das meiste, was ich tat, war in C ++. Aber sie haben uns immer noch nicht beigebracht, wie man eines der Dinge macht, die Sie erwähnen. Sie behandelten die Grundlagen, überflogen einige Dinge und gingen eingehend auf das ein, woran jeder Professor interessiert war. Es scheint, als würden die Schulen heutzutage versuchen, so viele "Entwickler" wie möglich anstelle von Wissenschaftlern herauszupumpen.
Veaviticus

@ Veaviticus: Das wäre für die glücklichen Studenten. An meiner Universität haben die Professoren eine schizophrene Abstraktionsebene und ihre Vorstellung von einer Prüfung ist "formale Definition rezitieren".
DeadMG

Die Sprache hat nichts mit der Lehre zu tun, ein Problem zu zerlegen. Ein Problem ist ein Problem, unabhängig davon, ob es sich um C, Java oder Ruby handelt.
Rig

29

Ist die Informatik tot? "..." Ich bin ein Absolvent mit einem BS in Informatik. Ich arbeite in einer Startposition in einem Unternehmen mit angemessener Größe in der IT-Abteilung .

Ganz ehrlich, meine eigenen zwei Cent: Sie werden die "Wissenschaft" der Informatik nicht in einer IT-Abteilung eines anständigen Unternehmens finden, weil es sich um die IT-Abteilung und nicht um die CS-Abteilung handelt. Versuchen Sie, für einen Doktortitel in die Schule zurückzukehren oder in den Ingenieurabteilungen eines Unternehmens zu arbeiten, dessen Schwerpunkt auf Informatik liegt (z. B. Bildverarbeitung, Hochleistungsnetzwerke, Computeralgebrasysteme, Luft- und Raumfahrt usw.). Hier finden Sie die schwierigen, interessanten Probleme, bei denen schlampiges Design [im Allgemeinen] nicht toleriert wird.

"Gibt es noch Stellen für Leute, die die Wissenschaft und Kunst von CS lieben und nicht nur den Gehaltsscheck?"

Ja, absolut, aber wahrscheinlich nicht in IT-Abteilungen mittelständischer Unternehmen.


16

Wenn Sie ein Programmierer sind, betrachten Sie sich nicht als "Informatiker". Computerwissenschaftler sind diejenigen, die die nächste Generation von Computern erschaffen, von denen einige noch Science-Fiction sind, bis der richtige Materialmix, die richtige Miniaturisierung und die richtige Computertheorie abgeleitet sind. Sie sind nur der Anfang der Pipeline. Menschen, die im Hier und Jetzt Software entwickeln, sind "Software-Ingenieure"; Sie nutzen die Theorien und Werkzeuge, die manchmal praktische Theorie und reale Werkzeuge überlagern, um die Potenziale dieses komplexen Stücks elektroinischer Zauberei zu nutzen und es dazu zu bringen, das zu tun, was wir wollen. Dies ist wiederum eine Spezialisierung auf dem Gebiet der "Computertechnik", die die Theorien der Informatiker aufgreift und sie, Hardware und Software, auf reale elektronische Endbenutzerlösungen anwendet.

Hier, IMO, trifft Geschäft auf Theorie. In solchen Fällen kann das alte Sprichwort "Der Feind des Guten ist gut genug" leicht umgedreht werden, um zu lesen "Der Feind des Guten ist besser". Wenn Sie sich als "Ingenieur" anstatt als "Wissenschaftler" betrachten und Ihre Arbeit parallel zu anderen Ingenieurdisziplinen betreiben, werden die Unterschiede deutlich.

Angenommen, ein Kunde kommt zu Ihnen, ein Bauingenieur, und bittet Sie, eine Brücke zu bauen. Die Brücke muss 20 Fuß überspannen, sich selbst tragen und eine Tonne tragen, sie sollte 10 Jahre mit routinemäßiger Wartung aushalten und sie soll in einem Monat für 20.000 US-Dollar geliefert werden. Das sind deine Zwänge; das Minimum einhalten und das Maximum nicht überschreiten. Das zu tun ist "gut genug" und bringt Ihnen den Gehaltsscheck. Es wäre eine schlechte Technik für Sie, die Golden Gate Bridge zu bauen, die sowohl die Konstruktionsspezifikationen als auch das Budget um ein Vielfaches übertrifft. Normalerweise verschlingen Sie die Kostenüberschreitungen und zahlen Strafen für Zeitüberschreitungen. Es wäre auch eine schlechte Technik für Sie, eine Seilbrücke zu bauen, die für das Gewicht von 5 erwachsenen Männern ausgelegt ist, obwohl sie nur 1000 US-Dollar an Zeit und Material kostet. Sie erhalten keine guten Kundenbewertungen und Erfahrungsberichte,

Zurück zur Software, sagen wir, Sie haben einen Client, der ein Dateiverarbeitungssystem benötigt, um eingehende Dateien zu verarbeiten und die Informationen in das System einzufügen. Sie möchten, dass es in einer Woche erledigt wird, und es muss fünf Dateien pro Tag verarbeiten, die etwa 10 MB Daten enthalten. Ihre kostbaren Theorien gehen größtenteils aus dem Fenster; Ihre Aufgabe ist es, in einer Woche ein Produkt zu entwickeln, das diese Anforderungen erfüllt. Auf diese Weise erfüllen Sie auch das Kostenbudget des Kunden (da Materialien für einen Softwarevertrag dieser Größe in der Regel ein Tropfen auf den heißen Stein sind). Zwei Wochen zu verbringen, selbst für das Zehnfache des Gewinns, ist keine Option, aber höchstwahrscheinlich ist auch kein Programm an einem Tag erstellt, das nur die Hälfte des Durchsatzes bewältigen kann, mit der Anweisung, zwei Kopien laufen zu lassen.

Wenn Sie denken, dass dies ein Randfall ist, liegen Sie falsch. Dies ist die tägliche Umgebung der meisten Haushalte. Der Grund ist der ROI; Dieses anfängliche Programm kostet nicht viel und macht sich daher sehr schnell bezahlt. WENN die Endbenutzer mehr oder schneller arbeiten müssen, kann der Code überarbeitet und skaliert werden.

Das ist der Hauptgrund für den aktuellen Stand der Programmierung. Die Annahme, die sich in der gesamten Geschichte des Rechnens bestätigt, ist, dass ein Programm NIEMALS statisch ist. Es muss immer aktualisiert werden und es wird schließlich ersetzt. Parallel dazu ermöglicht die ständige Verbesserung der Computer, auf denen die Programme ausgeführt werden, eine geringere Beachtung der theoretischen Effizienz und eine stärkere Beachtung der Skalierbarkeit und Parallelisierung (ein Algorithmus, der in der N-Quadrat-Zeit ausgeführt wird, aber für die Ausführung auf N Kernen parallelisiert werden kann) erscheinen linear, und oft sind die Kosten für mehr Hardware billiger als für Entwickler, um eine effizientere Lösung zu finden.

Hinzu kommt der sehr einfache Grundsatz, dass jede Zeile Entwicklercode etwas anderes ist, was schief gehen kann. Je weniger ein Entwickler schreibt, desto unwahrscheinlicher ist es, dass das, was er schreibt, ein Problem darstellt. Dies ist keine Kritik an der "Fehlerrate" von irgendjemandem; Es ist eine einfache Feststellung. Sie wissen vielleicht, wie man eine MergeSort in 5 Sprachen vor- und zurückschreibt, aber wenn Sie nur einen Bezeichner in einer Codezeile fetten, funktioniert die gesamte Sortierung nicht, und wenn der Compiler sie nicht abfängt, kann dies zu Problemen führen Stunden, um es zu debuggen. Vergleichen Sie das mit List.Sort (); es ist da, es ist effizient im allgemeinen Fall, und hier ist das Beste, es funktioniert bereits.

Aus diesem Grund wurden viele Funktionen moderner Plattformen und Grundsätze moderner Entwurfsmethoden entwickelt:

  • OOP - Bauen Sie verwandte Daten und Logik in ein Objekt ein, und wo immer das Konzept dieses Objekts gültig ist, also das Objekt oder eine spezialisiertere Ableitung.
  • Vorgefertigte Vorlagen - Gut 60% oder mehr des Codes sind syntaktische Cruft und die Grundlagen dafür, dass das Programm etwas auf dem Bildschirm anzeigt. Indem Sie diesen Code standardisieren und automatisch generieren, reduzieren Sie die Arbeitsbelastung des Entwicklers um die Hälfte und erhöhen so die Produktivität.
  • Bibliotheken mit Algorithmen und Datenstrukturen - Wie oben können Sie vielleicht einen Stack, eine Queue, QuickSort usw. schreiben, aber warum müssen Sie das tun, wenn es eine Codebibliothek gibt, in die all dies integriert ist? Sie würden IIS oder Apache nicht umschreiben, weil Sie eine Website benötigen. Warum sollten Sie einen QuickSort-Algorithmus oder ein rot-schwarzes Baumobjekt implementieren, wenn mehrere großartige Implementierungen verfügbar sind?
  • Fließende Schnittstellen - Möglicherweise verfügen Sie über einen Algorithmus zum Filtern und Sortieren von Datensätzen. Es ist schnell, aber wahrscheinlich nicht gut lesbar. Ihr Nachwuchsentwickler würde einen Tag brauchen, um es zu verstehen, geschweige denn, um die chirurgische Änderung vorzunehmen, die erforderlich ist, um ein zusätzliches Feld im Datensatzobjekt zu sortieren. Stattdessen ersetzen Bibliotheken wie Linq viele sehr hässliche, oft spröde Codes durch ein oder zwei Zeilen konfigurierbarer Methodenaufrufe, um eine Liste von Objekten in gefilterte, sortierte, projizierte Objekte umzuwandeln.

2
Gute Antwort, aber Sie verpassen einen wichtigen Punkt. "Was ich nicht duplizieren kann, verstehe ich nicht." Zu wissen, wie sie funktionieren, bedeutet nicht, dass Sie sie für jedes Projekt von Hand eingeben. Es stellt vielmehr sicher, dass Sie die jeweiligen Stärken und Schwächen kennen, die Ihnen bei der Auswahl der besten helfen. Dann müssen Sie nur noch wissen, ob sich dieser Algorithmus / diese Datenstruktur in Ihrer Standardbibliothek befindet.
Michael K

Nur dass dein Sprichwort falsch ist; Ich kann die Konzepte hinter einer materiellen Sache sehr klar verstehen, von der ich keine Hoffnung habe, sie erfolgreich zu duplizieren. Ich stimme im Prinzip zu; Ein erfolgreicher Ingenieur jeder Art muss über ausreichende theoretische Kenntnisse verfügen, um die passende Lösung zu finden. Das bedeutet nicht, dass ein Ingenieur in der Lage sein muss, jede Art von Glühbirne zu bauen, um die Spezifikationen jedes Einzelnen zu kennen und somit die richtige für ein Haus zu wählen. Ebenso kann ich einen rot-schwarzen Baum verwenden, um dessen Leistung und ordnungsgemäße Anwendung zu verstehen, ohne eine Ahnung zu haben, wie man einen von Grund auf neu implementiert.
KeithS

Die Analogie zur Technik ist nicht gut. Es ist nicht so, dass eine "bessere Brücke" in CS notwendigerweise viel kostet - es ist oft nur eine Frage des Verständnisses, welches Tool für den richtigen Job geeignet ist. Selbst die Implementierung eines ziemlich komplexen Lehrbuchalgorithmus ist oft weit außerhalb der Komfortzone der Menschen, aber keine schwierige oder teure Vorstellung (je nach Umfang - aber vorausgesetzt, dies ist ein Projekt in Mannjahren, nicht in Manntagen). Normalerweise ist es sogar noch einfacher - keine benutzerdefinierte Implementierung, nur eine Frage der Kenntnis des richtigen Tools und der zu suchenden Keywords.
Eamon Nerbonne

8

IT scheint mir, dass Sie IT und nicht CS tun, und das sollte nicht bedeuten, dass CS tot ist. CS ist nicht tot, ist nur, dass die meisten Jobs in der Softwareentwicklung sind. Da die meisten CS-Studenten Programmieren lernen, werden sie in der Regel als Programmierer und nicht als Informatiker eingestellt. Informatikjobs sind im Vergleich zu Programmierjobs winzig. Vielleicht machst du sogar eine komplexe App mit Informatik-Techniken, aber meiner Meinung nach (und ich mag keine Meinungsantworten, weil sie subjektiv sind), fällt das in ein Ingenieurslager als in ein Wissenschaftlerlager.

Auch schöner und eleganter Code liegt im Auge des Betrachters , aber für die meisten Unternehmen / Manager ist es weitaus wichtiger, rechtzeitig ein ausreichend gutes Design zu haben als schöner Code, der jedoch nie rechtzeitig fertig wird.

Schließlich gibt es die reale Welt und das Land der Lala. Leider erhalten wir den Gehaltsscheck von ersteren, und hier kommt die "Wissenschaft / Kunst" der Softwareentwicklung zum Tragen, wie man hohe Softwarequalität mit Zeit- / Budgetbeschränkungen erzeugt. Ich habe die gleichen Gefühle empfunden, die Sie zu Beginn meiner Karriere hatten. Ich wollte schon immer "das Beste" schaffen, aber bald merke ich, dass "das Beste" nicht das effizienteste oder eleganteste, sondern das kostengünstigste Design ist.


3
"Schöner und eleganter Code" gegen "Guter Enuogh, aber pünktlich" ist eine falsche Zweiteilung. Es ist einfacher, rechtzeitig fertig zu werden, wenn Ihr Design einfach ist und einfaches Design gleich schönes Design ist. Nur, einfach bedeutet nicht simpel .
Pillmuncher

1
@pillmuncher, ja ich stimme zu, für mich ist ein schöner Code einfach (aber nicht einfacher), aber leider ist diese Prämisse subjektiv / relativ. "Einfaches Design ist gleichbedeutend mit schönem Design" ist keine Behauptung, sondern eine Meinung (eine sehr beliebte Meinung, der ich zu 100% zustimme, aber immer noch eine Meinung). Was keine Meinung ist, ist Zeitplan, Anforderungen und Kosten. Diese Einschränkungen führen in der Regel zu einem ausreichend guten Design für die angegebenen Einschränkungen.
Armando,

"[1] IT scheint mir, dass Sie IT machen und nicht CS und das sollte nicht bedeuten, dass CS tot ist. [2] CS ist nicht tot, ist nur, dass die meisten Jobs in der Softwareentwicklung sind." Ihre erste Aussage ist richtig - das OP befindet sich in IT und nicht in CS. Ich stelle Ihre zweite Aussage in Frage, da viele sogenannte "Informatiker" auch Softwareentwickler sind. Es heißt "Forschung und Entwicklung", und ein Beispiel könnte sein, dass Informatiker einen Routing-Algorithmus über bestimmte Netzwerktopologien definieren, lösen und dessen Richtigkeit nachweisen und dann die "offizielle" oder prototypische Implementierung implementieren
Bill VB

8

Zuallererst hast du es falsch verstanden. "Probleme denken, planen und effizient lösen" ist keine Wissenschaft, sondern Technik. In der Wissenschaft geht es viel mehr darum, neue Felder zu erkunden. In der akademischen Welt ist die Effizienz des Codes weniger wichtig als in der Industrie. In der Wissenschaft geht es mehr um Proof-of-Concepts usw.

Nein, Sie beschreiben, dass für die Softwareentwicklung weniger fundiertes Wissen erforderlich ist. Was wahr sein könnte, wenn die Anforderungen gleich wären. Heutzutage muss der Softwareentwickler jedoch wissen, wie man mit Multithreading, verteiltem Computing, Skalierung usw. umgeht. Von ihm wird erwartet, dass er weiß, wie man ein Projekt effizient leitet. Das meiste davon war vor einigen Jahrzehnten noch gar nicht in den Lehrplänen enthalten.


Es ist immer noch nicht so, wie ich hier lese. Viele Schulen unterrichten keine Ingenieurwissenschaften, sondern Sprachen. Das ist gleichbedeutend damit, einem Studenten des Bauingenieurwesens Autocad beizubringen.
Michael K

@Michael: Hab noch keine anständige Universität gesehen, die das macht.
Vartec

1
Ich gehe zu RIT. Es ist hoch eingestuft und immer noch ziemlich beschissen. Keine Schule unterrichtet richtig programmieren, weil es im Rahmen anderer Lehrveranstaltungen einfach nicht in nur vier oder fünf Jahren möglich ist.
Jon Purdy

4

Ich glaube nicht , was du gesagt hast genau richtig ist, aber Sie haben etwas ohnehin von einem Punkt. Insbesondere denke ich, dass Informatik und Software-Engineering im Laufe der Zeit auseinander gewachsen sind.

Bei Software-Engineering (wie bei anderen Engineering-Projekten auch) geht es darum , Wissenschaft anzuwenden , um Produkte zu bauen, Probleme zu lösen usw. In der Informatik geht es in erster Linie um die Erforschung von Algorithmen und (obwohl dieser Teil häufig etwas vergessen wird) um die Implementierung dieser Algorithmen (zumindest in gewissem theoretischen Sinne) - zB alle PRAM-Maschinen als gleichwertig behandeln).

Wenn man sich diese vor Augen hält, wird der Grund für die Gabelung offensichtlich: Die meisten algorithmischen Probleme, die mit so etwas wie einer typischen Website verbunden sind, wurden bereits gelöst - die meisten davon schon vor langer Zeit. Noch wichtiger ist, dass die meisten Probleme so gut gelöst wurden, dass sie für den durchschnittlichen Webentwickler fast vollständig verschwunden sind. Zum Beispiel ist das Aktualisieren verteilter Datenbanken auf atomare Weise definitiv eine nicht triviale Aufgabe. Ein typischer Webentwickler schreibt jedoch nur SQL und hat keine Ahnung (oder Sorgfalt) darüber, wie viel Recherche erforderlich ist, um herauszufinden, wie die Arbeit gemacht werden soll zuverlässig.

Früher war es praktisch unmöglich, die Informatik von der Softwareentwicklung zu trennen. Es waren so wenige Probleme gelöst worden, dass das Schreiben eines relativ einfachen Programms die Erforschung der Grundlagen erforderte. Wenn Sie in den späten 50ern oder frühen 60ern etwas so Einfaches tun wollten wie das Sortieren einer Datenmenge, standen die Chancen gut, dass Sie nur eine Analyse Ihrer Daten durchführen und versuchen mussten, diese zu entwerfen ein Algorithmus, der so gut wie möglich mit dem übereinstimmt, was zum Sortieren dieser bestimmten Daten erforderlich ist - bei weitem nicht so viele Sortieralgorithmen wie heute bekannt, und selbst die bekannten Algorithmen waren bei weitem nicht so gut bekannt wie heute .

50 Jahre Forschung und Entwicklung haben sich jedoch ausgezahlt - die meisten typischen Entwicklungen können nicht nur bekannte Algorithmen, sondern auch vorab geschriebene Implementierungen verwenden. Die meisten typischen Probleme können auf der Grundlage vorhandener Kenntnisse (und sogar vorhandener Implementierungen) von Algorithmen ziemlich vernünftig gelöst werden.

Das heißt aber nicht, dass die Informatik tot ist - es gibt noch mehr Algorithmen zu erforschen und Menschen, die sich damit befassen. Dies bedeutet jedoch, dass der größte Teil der Forschung spezialisierter ist und sich wahrscheinlich nur auf ziemlich spezialisierte Bereiche bezieht. Es gibt wahrscheinlich auch eine größere "Lücke" zwischen dem Erwerb und der Anwendung des Wissens. Einmal haben Sie sich beim Schreiben eines Sortierprogramms eine bessere Sortiermethode ausgedacht, und diese wurde fast sofort in echten Code geschrieben. Jetzt widmet sich ein Großteil der Informatik Dingen wie der Verwendung einer im Wesentlichen unendlichen Anzahl von Prozessoren - was wahrscheinlich eines Tages nützlich sein wird, aber selbst primitive Stämme würden die Dual-Cores in meinem Computer nicht als "viele" zählen ... :-)


1

Softwareentwicklung und Informatik sind nicht dasselbe, und ich stellte fest, dass die meisten meiner Klassenkameraden einen B.Sc. Das Comp Sci-Programm war davon enttäuscht.

Ich betrachte Software als ein Produkt der Informatik ... als ein Produkt der visuellen Kunst.

Ich denke, dass die meisten Leute mit CS-Abschluss eingestellt werden, um Software-Entwicklung durchzuführen, insbesondere in den frühen Stadien ihrer Karriere. Ich denke, dass viele Leute in dieser Rolle dort bleiben und nicht weiter gehen.

Ich denke, der Unterschied beginnt sich zu zeigen, wenn neue Probleme oder Paradigmen auftauchen oder wenn "es zusammenschlagen" nicht gut genug ist. Wer baut die neuen Frameworks oder Sprachen? Wer setzt sich und hämmert die Details einer neuen Physik-Engine raus? Wer verwendet Graphentheorie / Graphtransformationen, um einige Zyklen pro Iteration der Leistung aus einem Algorithmus herauszufiltern?

Ich schließe dort ab, wo ich angefangen habe, und stimme zu, dass es viele Informatiker in den Bereichen Softwareentwicklung / Ingenieurwesen gibt, die möglicherweise ihr Potenzial nicht ausschöpfen.


1

Sie scheinen die Informatik mit der Programmierung und Softwareentwicklung im Allgemeinen zu verwechseln. Die beiden sind nicht dasselbe, nicht einmal in der Nähe. Unabhängig davon, was unsere Abschlüsse aussagen, sind die allermeisten von uns Programmierer und keine Informatiker. Wenn Sie sich nicht auf hohem akademischen Niveau engagieren, würde ich wetten, dass Sie keine Ahnung haben, was in der Informatik vor sich geht.


0

Ich kann Ihnen sagen, dass die Informatik lebendig und gesund ist. Ich muss täglich neue Probleme lösen und eine effektive und elegante Lösung für diese Probleme finden. Ich muss täglich meine Fähigkeiten als Ingenieur einsetzen und das Wissen von mir und meinen Kollegen nutzen, um diese Probleme für unsere Kunden zu lösen.

Ich versuche nicht, die Sprachen zu hassen, ich verstehe, dass sie einem Zweck dienen und es gut machen, aber wenn Ihre Mitarbeiter nicht wissen, wie eine Hash-Tabelle funktioniert, und die falschen Sortiermethoden verwenden oder SQL-Befehle ausführen, die sind schrecklich ineffizient (aber erledigen Sie die Arbeit in einer akzeptablen Zeit), es scheint, als würde mehr Aufwand in die Entwicklung von Technologien gesteckt, die neue "Programmierer" verwöhnen, anstatt den Menschen tatsächlich beizubringen, wie man Dinge richtig macht.

Das klingt nach einem Problem für den Mitarbeiter und trifft sicherlich nicht für jeden Programmierer zu.

Nur weil es Tools gibt, die unsere Arbeit erleichtern, heißt das nicht, dass wir die unterstreichende Technologie nicht verstehen sollten. Wenn wir dies nicht tun, helfen wir niemandem und tun mit Sicherheit nicht unsere Arbeit, um Probleme auf die richtige Weise zu lösen.


Genau. Ich versuche nicht zu sagen, dass es keine Jobs gibt, an die man nicht denken muss, oder dass alle Entwickler keine Ahnung haben, was sie tun, aber da sie gerade aus einem CS-Programm gekommen sind, kann ich Ihnen sagen, dass meine Schule dies nicht getan hat lehre mich die Hälfte der Dinge, die ich jetzt weiß. Ich habe sie selbst gelernt. Und jetzt, wo ich sie kenne, kann ich Frameworks verwenden, die das für mich tun. Aber wenn ich es nicht selbst gelernt hätte, würde ich einfach blind ein Framework verwenden, meistens falsch
Veaviticus

0

Sie haben das Problem einfach nicht verstanden. Das Problem erreicht nicht die maximale Leistung, sondern die Leistung, mit der Ihre App schnell genug reagiert. Programmieren lernen heißt, das Problem mit dem geringsten Geldbetrag zu lösen.

Ich hasse es, es so auszudrücken, aber jeder Eindruck, den Sie über den Tod von CS haben, ist nur Ihre eigene Vorstellung davon, was ein "echter" Programmierer tun sollte.


Recht. Ich weiß, dass Unternehmen Geld verdienen müssen. Und ich bin sicher nicht unschuldig, Teile meiner Anwendungen "schnell genug" zu machen, anstatt so gut wie möglich zu sein. Ich bin neugieriger auf den Trend als Ganzes, den viele (zumindest soweit ich das beurteilen kann) Entwickler noch nie in CS studiert haben. Sie kamen von anderswo auf das Feld und haben wenig oder keine wirkliche Theorie hinter sich,
sondern

@Veaviticus: Die Verwendung eines Frameworks ist vielleicht keine bahnbrechende akademische Theorie, aber es ist definitiv immer noch CS.
DeadMG

0

Nun, tot oder nicht ist umstritten!

Tatsache ist, dass in der heutigen technologischen Ära die meisten Unternehmen Mitarbeiter einstellen, um Aufgaben in der Praxis durch Software-Automatisierung zu lösen. Sie sind nicht daran interessiert, wie elegant oder schneller Sie ein Programm schreiben können, solange das Unternehmen mit höherer Leistung schneller arbeiten kann.

Der Stress ist auf mehr Leistung in kürzerer Zeit. (Denken Sie an die Kommerzialisierung von Pflanzen / Lebensmitteln; schnelleres und stärkeres Wachstum bei geringeren Kosten). Das gleiche passiert in der Tech-Welt (die nächste neue Idee).

Denken Sie daran, heutzutage bewegen sich die Dinge aufgrund der Menge und des Zugangs zu Wissen schneller als früher. In jenen alten Tagen war die Produktion gering und besser, die Gewinne waren höher. Jetzt hat sich das Spiel komplett verändert. Schauen Sie sich nur die Qualität des Kundenservice an und im Allgemeinen halten die Dinge nicht länger an.

Eleganz und Effizienz sind für Tech-Unternehmen wie Google usw. von Bedeutung. Auch wenn diese Orte nicht perfekt sind, können Sie in den nächsten Jahren in einem dieser Unternehmen arbeiten.

Es gibt immer einen Kompromiss im Leben. Sie können einen Job finden, der sich weniger auszahlt, wenn Sie die ganze Zeit und Aufmerksamkeit haben. Oder Sie schwimmen mit dem Rest von uns, um besser zu bezahlen und Dinge zu ignorieren, die nicht perfekt sind. Je schneller diese Erkenntnis in dir versinkt, desto besser kannst du dich auf die reale Welt einstellen. Ich sage nicht, dass Sie Qualität und Eleganz ignorieren sollten, aber die Dynamik kennen. Du wirst glücklicher sein :)


0

Meines Erachtens werden einige der interessantesten Dinge der Zukunft sicherlich auf dem naturwissenschaftlichen Teil der Informatik beruhen, insbesondere auf der Verbesserung der Bildverarbeitung / des maschinellen Lernens und anderen sematisierenden Algorithmen. Diese werden wahrscheinlich in der Industrie vorangetrieben (z. B. mit dem Microsoft Kinect), sind jedoch derart schwierige Probleme, dass sie sicherlich auf der Vielzahl von Forschungen und Fortschritten im akademischen Bereich beruhen werden (auch hier mit dem Microsoft Kinect).


0

Ich denke, dass Standardprogrammierung von Tag zu Tag genauso eine Kunst wie eine Wissenschaft ist, aber es gibt sicherlich Bereiche, die stark an den naturwissenschaftlichen Aspekten der Informatik interessiert sind. Zum Beispiel Forscher für Unternehmen und Hochschulen. Wenn Sie wirklich professionell in die Wissenschaften einbezogen werden möchten, sollten Sie einen Doktor suchen. Ich habe jedoch festgestellt, dass die naturwissenschaftlichen Teile meiner Ausbildung immer wertvoll sind, obwohl ich mich in der Realität auf meine kreativere Seite verlassen muss!

Leute, die nicht wissen, was sie tun, können mit einigen der von Ihnen genannten Tools etwas raushacken, aber normalerweise stellen sie die echten CS-Leute ein, um die Tools zu erstellen. Sie müssen nur abstrakter werden, um sich wirklich voranzutreiben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.