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
quelle
Antworten:
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.
quelle
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.
Ja, absolut, aber wahrscheinlich nicht in IT-Abteilungen mittelständischer Unternehmen.
quelle
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:
quelle
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.
quelle
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.
quelle
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 ... :-)
quelle
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.
quelle
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.
quelle
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.
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.
quelle
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.
quelle
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 :)
quelle
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).
quelle
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.
quelle