Müssen Softwareingenieure wirklich mehr über einfache Dinge wissen? [geschlossen]

23

Während sich gerade Programmiersprachen wie C #, Java usw. entwickeln, behaupten viele, dass sie eine Alternative zu Sprachen wie Assemblersprache und C / C ++ darstellen, mit denen Sie auf Computerhardware zugreifen und diese steuern können, da sich Programmierer konzentrieren sollten Verschwenden Sie keine Zeit mit dem Computer, um das Programm zum Laufen zu bringen. Da sich die Hardware ständig verbessert, ist der Leistungsunterschied zwischen C / C ++ und Java nicht signifikant, und große Spiele können möglicherweise in einer Sprache wie Java programmiert werden.

Das ist die allgemeine Idee, die ich kurz zusammenfasse, nachdem ich mich mit diesem Thema im Internet befasst habe. Glauben Sie, dass es in naher Zukunft Realität wird? Bedeutet das, dass alles, was wir über Dinge auf niedrigem Niveau lernen, für die Softwareindustrie nicht mehr praktikabel ist? Bedeutet das, dass Assemblersprache und C / C ++ nur für Elektrotechniker relevant werden, da sie die einzigen sind, die für ihre elektrischen Komponenten programmieren müssen?


Wie viel Lernen ist genug? Wenn wir zu viel lernen, werden wir uns irgendwann mehr an der Elektrotechnik orientieren, oder wenn wir zu viel Mathematik lernen, lernen wir vielleicht, Mathematiker zu werden, nicht Programmierer. Ich möchte nur wissen, ob das, was ich in Mathematik gelernt habe (ich habe einen Mathematikkurs besucht, in dem das Material behandelt wird, das diesem Buch ähnelt (sie verwendeten ein anderes Lehrbuch): Diskrete Mathematik und seine Anwendung), genauso nützlich ist wie unsere Programmierkenntnisse. Viele Matheübungen können die meisten von uns Stunden in Anspruch nehmen, und wenn Sie es ernst meinen, haben Sie weniger Zeit, um Programmieren zu lernen. In unserem Spielev-Forum gibt es sogar für Mathematik und Physik nur einen Abschnitt, der mit dem Programmieren vergleichbar ist.

Im Moment habe ich gerade angefangen, "Die Kunst der Computerprogrammierung" zu lesen. Mathe wird nur in ungefähr einem Viertel des Buches behandelt, aber die Übung ist für uns Nicht-Mathematiker schwierig. Sogar eine solche "elementare" Mathematik haben wir sie in unserer Karriere genauso oft benutzt? Einige Leute würden mir wahrscheinlich sagen, dass es Zeitverschwendung ist, das Buch TACOP zu lesen, und sie sollten wahrscheinlich Zeit mit etwas anderem verbringen, das praktischer ist, obwohl sich das Buch ausschließlich mit Programmieren befasst (etwas akademischer im Vergleich zu Büchern, die ähnliche Dinge erklären). Aber ich denke, der Autor hat viel Zeit und Mühe investiert, um es zu produzieren. Er kann sogar den gesamten Satz von 5 Büchern schreiben, während wir - das Publikum - nur die Aufgabe haben, ihn zu lesen. Warum nicht?

Adam Lear
quelle
1
msgstr "Die Leistung zwischen C / C ++ und Java wird nicht signifikant sein". Wenn dies bald passiert, senden Sie mir bitte eine PN, um meine Java-Kenntnisse zu überarbeiten. Ich habe Java vor einigen Jahren aus diesen Gründen eingestellt.
Sakisk
3
Der meiste C / C ++ - Code greift nicht auf Hardware zu. Es macht es einfach, aber das wird normalerweise von Gerätetreibern verborgen. Ich würde sogar sagen, dass 95% des C- oder C ++ - Codes niemals direkt mit der Hardware interagieren.
Pemdas
1
Ich würde vorschlagen, den Titel in niedrigere Sprachen zu ändern. Es gibt viele Dinge auf niedriger Ebene (wie Threads funktionieren ... wie Ihr Betriebssystem funktioniert ... usw.), die auch dann noch einen Wert haben, wenn Sie C ++ oder Assembly nicht kennen.
ShaneC
2
@faif, Bei Anwendungen mit langer Laufzeit kann eine Java-App mit einer C / C ++ - App Schritt halten. Nachdem sich Java aufgewärmt hat. Dies ist auf die Hot-Spot-Technologie zurückzuführen, die den Java-Code im Laufe der Zeit in systemeigenen Code umkompiliert. Für Anwendungen mit kurzer Laufzeit ist die Startzeit von Java jedoch immer noch horrend. Insbesondere bei Server-Apps ist die Kommunikation zu einem bestimmten Zeitpunkt eher Ihr Engpass als die eigentliche Verarbeitung.
Berin Loritsch
1
@BerinLoritsch Java ist zwar relativ schnell, aber der Speicheraufwand, der Aufwand für die Laufzeitbibliothek, der Zugriff auf Hardware auf niedriger Ebene und die VM-Vorkonfiguration vor der Ausführung (um beispielsweise unterschiedliche Heap-Limits zu erreichen) sind im Vergleich zu Java schrecklich Nur ein einfaches Programm, das auf dem Betriebssystem ausgeführt wird. Es geht nicht nur darum, Anweisungen in derselben Größenordnung auszuführen.

Antworten:

18

Interessante Frage. Ich bin ein langjähriger C ++ - Programmierer, der jetzt in C # arbeitet (mit etwas nicht verwaltetem C ++ für leistungskritische Arbeiten) und in der Vergangenheit gelegentlich Assembler-Code hinzufügen musste, normalerweise aus Leistungsgründen.

Einige Punkte bei der Vorbereitung einer Antwort auf die Frage:

  • Zum Zwecke Ihres Vergleichs schlage ich vor, dass der Hauptunterschied zwischen den von Ihnen erwähnten Sprachen C # und Java und der anderen Gruppe Assembly, C / C ++ darin besteht, dass die ersteren eine verwaltete Laufzeit verwenden, um die Garbage Collection bereitzustellen. Es gibt andere Unterschiede (z. B. binäre Portabilität, Framework-Größe und Portabilität), aber wenn Sie Leistungsunterschiede vergleichen, ist dies ein (der?) Hauptgrund.

  • Assembly, C und C ++ sind alles andere als "Low-Level". Ich denke, Sie sind richtig darin, Assembler- und C-Sprachen mit Hardware- / Firmware- / Treiberentwicklern in Verbindung zu bringen, aber C ++ wird in der Regel auf einer höheren Ebene verwendet und ist immer noch stark im Einsatz - obwohl C # / Java laut TIOBE dies eindeutig verhindern Index.

  • In der C ++ - Ebene würde ich Objective-C hinzufügen, da es C ++ ähnlicher ist als C # / Java. Abschließend möchte ich darauf hinweisen, dass diese Sprachen durch die Hinzufügung von shared_ptr <> und anderer automatischer Ressourcenverwaltungsfunktionen eine Unterstützung bieten, die der Garbage Collection nahe kommt.

OK - weiter zu Ihrer Hauptfrage: Müssen Softwareingenieure wirklich noch über Kenntnisse auf niedrigem Niveau verfügen?

Meine Antwort: Ja

Gründe dafür:

  • Selbst wenn Sie C # / Java verwenden, werden Sie wahrscheinlich auf Framework-Entitäten stoßen, die eine explizite Ressourcenverwaltung erfordern, und / oder auf Probleme mit "angehefteten" Speicherdiagrammen in nicht trivialen Anwendungen. Sie müssen wissen, wie diese Systeme funktionieren, um diese Probleme effektiv zu vermeiden und zu beheben.
  • Mobile Plattformen verfügen nur über begrenzte Ressourcen, und obwohl einige Versionen von Java und .NET nur in begrenztem Umfang unterstützt werden, lässt die derzeitige Dominanz von iOS und Objective-C darauf schließen, dass die Nutzungsdauer für sie lange verlängert wird.
  • Performance: Jedes Mal, wenn Sie auf eine Performance-Mauer stoßen, müssen Sie sich wahrscheinlich in einen nativ kompilierten Code-Block begeben, um diese zu umgehen.
  • Legacy-Support: Immer wenn Sie eine Interaktion ausführen müssen, um Zugriff auf eine Funktion zu erhalten, die (noch) nicht in verwaltetem Code verfügbar ist, müssen Sie dasselbe tun.

Gute Frage - aber ich sehe nicht, dass nicht verwaltete Sprachen in naher Zukunft verschwinden.

Holtavolt
quelle
Vielen Dank für Ihre Antwort. Ich werde weiterhin mehr über Computer lernen (wie Betriebssystem, Netzwerk, mehr Mathematik ... auch gerade genug, um das Grundprinzip zu verstehen und mich nicht zu sehr darauf zu konzentrieren, nur die Programmierung zu verbessern). Hoffentlich wird es eines Tages nützlich sein.
Amumu
1
Ein tieferes Verständnis der Vorgänge auf der unteren Ebene hilft Ihnen, Ihre Entscheidungen zu treffen.
Dietbuddha
1
Um meine 0.02 hinzuzufügen, ist es normalerweise eine gute Sache zu wissen, wie etwas getan wird, wenn Sie es verlangen. Kann dabei helfen, Ihre Anforderungen angemessener und effizienter zu gestalten (gilt für High-Level-Programmierung und möglicherweise für Vorgesetzte;)).
SSUBE
43
  • Dass jemand würde zu Recht nicht darüber erfahren , und nicht verstehen , niedrigeres Niveau Funktionalität, und nach wie vor einen sehr produktiven und wertvolle Entwickler sein, bereits der Fall ist .
  • Dass niemand Funktionalität auf niedrigerer Ebene lernen oder verstehen muss, dass es immer eine Zeitverschwendung wäre, wird niemals der Fall sein.

Wie in jeder technischen Disziplin gibt es viele Schritte zum Endprodukt, die alle wichtig sind, Fachwissen erfordern und wertvoll sind. Insbesondere in der Softwareentwicklung haben wir viele Abstraktionsebenen. Alle werden gebraucht und niemand kann ein Experte für alle sein.

Davon abgesehen benötigen wir mehr C # / Java / Ruby-Entwickler als Assemby / C-Entwickler. Für uns "übergeordnete" Entwickler ist es hilfreich, mehr darüber zu wissen, was "unter der Haube" passiert, und uns zu besseren Entwicklern zu machen. Aber viele andere Sachen auch . Als .NET-Entwickler zum Beispiel kann ich so viel lernen, was mich produktiver macht, dass das Erlernen unserer Zwischensprache (viel weniger C ++ / C / Assmebly), obwohl sehr hilfreich, oft in den Hintergrund treten muss.

Patrick Karcher
quelle
7

Sie können heute als Programmierer Ihren Lebensunterhalt verdienen, ohne die einfachen Dinge zu kennen. Ich denke, es macht Sie zu einem besseren Programmierer, wenn Sie es wissen.

Das Aufrechterhalten eines hohen Kompetenzniveaus mit den Sachen auf niedrigem Niveau wird jedoch zunehmend weniger wichtig. Ich meine, ich habe seit 20 Jahren nichts mehr in der Montage gemacht und würde wahrscheinlich eine ernsthafte Auffrischung brauchen, bevor ich wieder produktiv werden könnte, aber die Gesamtkonzepte, wie die Dinge auf dieser Ebene funktionieren, sind immer noch Teil meines Bewusstseins und ich finde Es ist von Zeit zu Zeit hilfreich, auch wenn Sie in höheren Sprachen arbeiten.

JohnFx
quelle
3

Ich denke nicht, Kernel-Entwickler werden immer das Low-Level-Zeug brauchen. Es tut auch nicht weh zu verstehen, wie alles funktioniert. Wenn Sie im Grunde verstehen, was der Code, den Sie schreiben, tatsächlich tut, werden Sie lernen, besseren Code zu schreiben. Ich halte es für eine schreckliche Idee, das Low-Level-Zeug zu entfernen, da dieses abstrakte Denken manchmal nützlich ist, aber tatsächlich ein Hindernis sein kann, wenn Sie das Problem auf die beste Weise lösen wollen. Zum Beispiel ist es wichtig zu verstehen, dass Sie beim Verketten von Zeichenfolgen tatsächlich neue Zeichenfolgen erstellen. Wenn Sie jedoch nicht verstanden haben, wie Zeichenfolgen implementiert wurden, können Sie diese einfach verketten und die 5 Minuten warten, die Ihr Programm zum Ausführen benötigt. Dies ist ein ausgezeichneter Artikel zu Dingen wie diesem: http://www.joelonsoftware.com/articles/fog0000000319.html

Jesus Ramos
quelle
3

Dies hängt davon ab, woran der Softwareentwickler tatsächlich arbeitet. Es ist möglich, eine produktive, glückliche und profitable Karriere zu haben, ohne jemals irgendetwas Niedriges zu berühren, aber das sind nicht alle Programmierjobs. Damit es Betriebssysteme und Compiler gibt, müssen Ingenieure an Betriebssystemen und Compilern arbeiten, und sie müssen C, C ++ und die Assemblersprache ihres Computers kennen.

Leistung kann auch wichtig sein. Mein aktueller Laptop ist ungefähr eine Million Mal leistungsstärker als mein erster Heimcomputer, und das Ausführen von Software kann noch einige Zeit in Anspruch nehmen. Ich kann immer noch Verzögerungen bei Videospielen bekommen. Natürlich sehen die Videospiele besser aus, da jedem von über einer Million Pixeln auf dem Bildschirm eine von Millionen Farben zugewiesen werden kann (im Gegensatz zu tausend Positionen für Schwarzweißzeichen, wobei einige der Zeichen für Grafiken verwendet werden ). Ich bezweifle, dass sich die Computerleistung in naher Zukunft noch einmal verzehnfachen wird, und wenn wir dies tun, wird sie voraussichtlich von immer komplexer werdender Software verwendet.

Während der Großteil der Unternehmenssoftware weiterhin in der schnellstmöglichen Produktion und im Freien geschrieben wird, was normalerweise nicht C ist, bleibt weiterhin viel Platz für C- und C ++ - Experten.

David Thornley
quelle
2

"Da sich die Hardware ständig verbessert, wird die Leistung zwischen C / C ++ und Java nicht signifikant sein, und Big Game kann möglicherweise in einer Sprache wie Java programmiert werden."

Ich glaube nicht, dass diese Aussage bald richtig sein wird. Der verwaltete Code weist immer einen Treffer auf, da die Überprüfungen hinter den Kulissen durchgeführt wurden. Es ist auch keine Frage der Hardware, die besser wird, da die Hardware besser wird, und auch die Apps, von denen erwartet wird, dass sie auf ihnen ausgeführt werden. Ein System, das in nativem Code geschrieben ist, muss über eine Schnittstelle zu verwaltetem Code verfügen. Theres ein Leistungstreffer, der beim Wechseln zwischen den beiden auftritt.

In der Regel benötigt jedoch nur ein kleiner Prozentsatz der Anwendungen diesen optimierten Code. Die meisten Branchenanwendungen können problemlos mit verwaltetem Code, .NET, Java usw. verwendet werden. Dies bedeutet jedoch nicht, dass die Anwendungen, für die dies erforderlich ist, den Wechsel in Kürze durchführen werden. Handgeschriebene Assemblierungen werden derzeit jedoch viel seltener verwendet, da die optimierenden C / C ++ - Compiler so gut sind. Es gab jedoch kürzlich ein Betriebssystem, das komplett in Assembly geschrieben wurde, so dass es noch einige gibt. Dies ist auch im Sicherheitsbereich sehr wichtig.

Ich würde jedoch sagen, um ein wirklich guter Entwickler zu sein, sollte man verstehen, was auf einem niedrigen Niveau vor sich geht. Es hilft bei der Behebung einiger schwieriger Probleme, insbesondere beim Aufrufen von nativem Code.

Adam Tuliper - MSFT
quelle
@Adam Tuliper "ein Betriebssystem, das komplett in Assembly geschrieben wurde" Interessant. Können Sie mir den Namen des Betriebssystems geben? Sie haben einen guten Punkt zur Fehlerbehebung gemacht.
Amumu
@Adam: Ein "Nur-Assembly-Betriebssystem" hat wahrscheinlich nicht viele Schnickschnack (z. B. eine schicke animierte Benutzeroberfläche und ein Malprogramm), sondern kann möglicherweise nur einen oder zwei Benutzermodus-Prozesse ausführen ...
Macke
@ Macke: Du machst Witze? Es wurden mehr Multitasking-Betriebssysteme in Assemblersprache als in C geschrieben. Das Betriebssystem, von dem NT (der Windows-Kernel) geklont wurde, wurde hauptsächlich in der Assemblersprache Macro-32 geschrieben.
Bit-Twiddler
1
@bit-twiddler: Bist du sicher? Die meisten Quellen, die ich gesehen habe, waren in BLISS ...
TMN
@TMN: BLISS wurde nur für übergeordnete Betriebssysteme verwendet. Der gesamte VMS-Kernel wurde in Macro-32 geschrieben. Ich habe jahrelang eine Auflistung des Verarbeitungscodes auf Gabelebene geführt, weil ich dachte, es sei eine so coole Idee. Die Verarbeitung auf Gabelebene war ein Mechanismus, mit dem ein Interrupt-Handler den nicht zeitkritischen Teil seines Codes so einplanen konnte, dass er auf einer niedrigeren Interrupt-Prioritätsstufe ausgeführt wurde. Die Verarbeitung auf Fork-Ebene wurde im NT-Kernel in Deferred Procedure Calls umbenannt.
Bit-Twiddler
2

Ich denke, dass es für das Debuggen sehr hilfreich ist, einige Dinge auf niedriger Ebene zu kennen, wie zum Beispiel bei der Embedded-Programmierung. Das meiste davon wird jedoch mit C ausgeführt, wenn das Debuggen von Know-how-Assembly für diesen bestimmten Mikrocontroller äußerst nützlich ist.

user6791
quelle
Zustimmen. Ich mache seit 30 Jahren Embedded-Programmierung, und obwohl ich nicht mehr viel Assembler-Code schreiben muss (alles ist in C), gehe ich oft ein Programm auf Befehl-für-Befehl-Basis durch.
Tcrosley
Ich debugge häufig C- und C ++ - Code im CPU-Modus unter Windows. Kenntnisse über die Architektur und den Befehlssatz für den Prozessor sowie die Laufzeitorganisation des verwendeten Compilers sind ein leistungsstarkes Instrumentarium. Bitte sehen Sie sich die folgende Frage von programmers.stackexchange.com an, in der ich den von GCC generierten Code darstelle: programmers.stackexchange.com/questions/59880/…
bit-twiddler
2

Als Computer erfunden wurden, wussten nur wenige, wie man sie benutzt. Heutzutage verfügt fast jedes Haus in einem reichen Land über einen oder mehrere Computer, die von einer durchschnittlichen Person verwendet werden können. Viele gewöhnliche Menschen arbeiten täglich am Computer. Die durchschnittliche Person hat die Fähigkeit, einen Computer zu benutzen, aber wir brauchen noch Programmierer.

Ebenso muss der durchschnittliche Programmierer die Assemblersprache nicht kennen oder regelmäßig programmieren. Dies ist ebenso eine Voraussetzung für marktfähige Fähigkeiten wie ein Ausdruck dafür, wie weit wir in der Welt der Technologie gekommen sind. Unternehmen benötigen Computer, um Aufgaben zu automatisieren. Daher sind Programmierer, die in .NET / Java programmieren können, sehr gefragt.

Die Aufgaben, die automatisiert werden können, werden automatisiert. Nicht alle Aufgaben können automatisiert werden. Nicht jede Automatisierung ist perfekt. Ist also die Montage wichtig? Na sicher. Muss es ein "Programmierer" sein? Natürlich nicht.

P. Brian Mackey
quelle
0

Hmmm, ich genieße es, Dinge auf niedrigem Niveau zu lernen.

Vielleicht ist es nicht das genaueste Gleichnis, aber für mich ist es, als würde man die Machenschaften in einem Auto lernen. Ich kann nicht wissen, wie alle Teile gegeneinander arbeiten, aber es macht Spaß zu wissen, dass es einen Motor, eine Kurbelwelle, Zylinder, Differentiale, Kräne, Bremsen, Öl, Verbrennung, Kühlung und dann Reibung, Stress, Hitze, Kräfte gibt. Wissenschaft - Thermodynamik, Physik, Strömungsmechanik ...

Vielleicht nicht sehr nützlich (ich werde nicht in der Lage sein, ein Auto zu reparieren, wenn ich das alles weiß), sicher nicht professionell praktisch, aber naja, lustig. Kunst für die Kunst: la connaissance pour la connaissance.

Dynamo
quelle
0

Ich denke, eine nützliche Faustregel lautet: Je schneller es sein muss, desto niedriger muss das Level sein.

Daher sind Ihre grafikintensiven Ego-Shooter oder Ihr algorithmisches FX-Handelssystem immer noch relativ niedrig (C ++ usw.), da Geschwindigkeit der Schlüssel ist. Aber die Web-App, die pünktlich einen Verkaufsbericht ausspuckt? Verdammt, Sie könnten das in Sinclair BASIC schreiben, und es wäre immer noch akzeptabel.

Adrian Parker
quelle
1
-1: Ich denke, eine nützliche Faustregel ist : Je schneller es sein muss, desto niedriger muss das Level sein. - Nur neugierig, wie alt bist du? Bessere Algorithmen, bessere Architektur und bessere Hardware beschleunigen die meisten modernen Softwareanwendungen. Computerspiele und eingebettete Systeme sind Ausnahmen von dieser Regel.
Jim G.
Viel zu alt! :-) Sie erwähnen bessere Algorithmen, bessere Maschinenarchitekturen, bessere Hardware - aber meiner Meinung nach wirken sich diese gleichermaßen auf die Geschwindigkeit der Prozessausführung aus. Erhöhen Sie die Prozessorgeschwindigkeit, damit jeder Prozess unabhängig von der Sprache, in der er entwickelt wurde, schneller ausgeführt wird (sollte). Verwenden Sie einen langsamen Sortieralgorithmus, und Ihre Anwendung wird langsamer ausgeführt als erforderlich, unabhängig davon, in welcher Sprache Sie sie geschrieben haben High-Level-Programmiersprache macht immer noch einen relativen Unterschied zur Ausführungsgeschwindigkeit. Wenn Millisekunden wichtig sind, gehen Sie niedrig. Algorithmische Handelssysteme sind nicht in Java geschrieben.
Adrian Parker
0

Nicht alle Softwareentwicklungsjobs sind gleich . Die Leute, die an Betriebssystemen, Compilern, Frameworks, Gerätetreibern, eingebetteten Systemen und hochleistungsfähigem wissenschaftlichem Computing arbeiten, müssen sich mit "Low-Level-Kram" auskennen. Die Leute, die Access CRUD-Formulare oder PHP-Warenkörbe für Tante-Emma-Läden schreiben, vielleicht nicht so sehr. Was für eine Art von Software-Engineering möchten Sie durchführen, und möchten Sie es für den Rest Ihres Lebens tun?

Meiner Meinung nach müssen Sie mindestens eine Abstraktionsebene lernen, die unter derjenigen liegt, in der Sie normalerweise arbeiten. Wenn Sie in C / C ++ arbeiten, sollten Sie sich mit Maschinenarchitekturen und Baugruppen befassen. Wenn Sie in PHP arbeiten, sollten Sie HTTP und ein wenig C / C ++ oder Perl verstehen. Wenn Access Ihr Brot und Butter ist, sollten Sie eine RDB-Theorie kennen und vielleicht ein bisschen über COM oder .Net. Irgendwann in Ihrer Karriere werden Sie durch ein Problem auf einer niedrigeren Abstraktionsebene gestoppt, und Sie müssen in der Lage sein, zumindest ein wenig mit jemandem zu kommunizieren, der ein Experte auf diesem Gebiet ist. Kannst du ohne dieses Zeug auskommen? Sicher, aber die Planung, auf einem wettbewerbsintensiven Arbeitsmarkt durchzukommen, ist gefährlich.

Charles E. Grant
quelle
-1

Ich selbst arbeite weitgehend in C # .NET und habe mich immer von C, C ++ abgewandt. Ich habe kürzlich angefangen, einen Job zu suchen, und war überrascht, wie viele Jobs verfügbar sind und Erfahrung für C, C ++ erfordern. Ich dachte anfangs, dass C, C ++ veraltet ist, aber wenn man sich die verfügbaren Jobs ansieht, sieht es nicht so aus.

user676938
quelle
-1

Alle von Ihnen aufgelisteten verwalteten Sprachen verfügen über in C / C ++ geschriebene Interpreter oder virtuelle Maschinen. Ohne diese beiden würden die meisten verwalteten oder interpretierten Sprachen nicht einmal existieren. Ich würde sagen, dass Sie ihren Wert unterschätzen.

Pemdas
quelle
-1

Ich hasse wirklich die Vorstellung von "praktischem" Wissen . Alles, was Sie jemals lernen, ist gleichermaßen praktisch. Es spielt keine Rolle, ob Sie nicht auf einer Abstraktionsebene arbeiten, die der Hardware nahe kommt. Wenn Sie nur die Konzepte dieser Domäne kennen, ist dies immer hilfreich, um neues Wissen auf einer anderen Abstraktionsebene aufzubauen. Je mehr verwandte Konzepte Sie kennen, desto besser.

Für das, was ich normalerweise mache, ist C # eine sehr einfache Sprache, und ich betrachte sie als etwas, das einer Hardware sehr ähnlich ist. Trotzdem glaube ich, dass selbst meine rudimentären, verrosteten Kenntnisse der digitalen Elektronik, des CPU-Designs usw. für alles, was ich jemals tue, sehr nützlich sind.

SK-Logik
quelle
@ Amumu sagte: Du hast einen guten Punkt gemacht. Menschen verbinden normalerweise Wissen, das sich viel Geld verdient, mit "praktischem Wissen". Sie haben jedoch einen Punkt. Zumindest erwarten und erwarten wir, dass wir etwas zur Gesellschaft beitragen, wenn wir mit den gelernten Dingen kein Geld verdienen, insbesondere mit Dingen, die nicht unserem Leben zugute kommen. Zum Beispiel möchten wir vielleicht Philosophie lernen oder Wege finden, um unser Leben sinnvoller zu gestalten. Aber wenn wir nur auf halbem Weg Mathematik studieren, können wir nichts tun und Ihre Zeit verschwenden.
Adam Lear
@Anna Lear, das Problem ist, dass man eine "praktische", direkt anwendbare Fähigkeit nicht beherrschen kann, ohne eine sehr breite Abdeckung von "nicht praktikabel". Einfach, weil alles Wissen in dieser Welt eng miteinander verbunden ist. Kein Wissen kann eine "Zeitverschwendung" sein, egal wie weit es von einer möglichen Praxis entfernt ist.
SK-logic
1
-1: Alles, was Sie jemals lernen, ist gleichermaßen praktisch. - Wow. Vielleicht sollte ich mir die Antworten auf alle meine Fragekarten für Trivial Pursuit merken! ;)
Jim G.
@ Jim G., ja, das solltest du, solange du genug Freizeit hast und es nicht um den Preis geht, nicht etwas zu lernen, das dich mehr voranbringen würde. Das Auswendiglernen von "nutzlosen" Dingen ist in der Tat eine sehr robuste Methode zur Verbesserung Ihres Gedächtnisses.
SK-logic am
-1

Nein, die Mehrheit muss nicht. Das Üben von Techniken auf niedrigem Niveau gibt dem Entwickler zwar ein besseres Wissen darüber, was den gesamten Zyklus beeinflussen könnte, aber heutzutage könnte der Entwickler diese Zeit nutzen, um neuere Technologien zu studieren, die wiederum das Wissen über Dinge auf niedrigem Niveau erforderten, die entwickelt, aber nicht vertrauenswürdig waren auf.

doc_id
quelle
-1

Wenn Sie ein Wort "Ingenieur" verwenden, meinen Sie aus meiner Sicht, dass der Mann / die Frau derjenige ist, der die Dinge von Grund auf neu entwirft und baut. Das eigentliche Problem eines Software-Ingenieurs besteht darin, ein Problem zu lösen, aber welches Problem? Das ist eine große Frage.

Ein Entwickler unterscheidet sich in vielerlei Hinsicht von einem Ingenieur. Ein "Entwickler" ist eine Person, die normalerweise Dinge auf bereits vorhandenen Plattformen erstellt. Er entwickelt die vorhandenen Plattformen oder baut neue Plattformen, die von älteren geerbt wurden, unter Verwendung der Komponente des übergeordneten Systems.

Ein Entwickler denkt normalerweise aus geschäftlicher Sicht, er ist kein Wissenschaftler. :) Entwickler sind dem Benutzer des Systems näher, sie denken die Dinge aus der Perspektive des Benutzers und lösen daher Benutzerprobleme mithilfe von Technologie.

Ein Ingenieur ein kluger. Er ist ein Wissenschaftler, er löst ein sehr echtes Problem. Die meisten Probleme, die der Computer selbst hat, sind gekapselt. Ingenieure sind diejenigen, die ihre Studien hinter sich lassen, nachdem sie viel über vorhandene Systeme geforscht haben, und sich etwas Neues einfallen lassen, um das Problem zu lösen. Wenn die Lösung dies erfordert und ihr System eine neue Sprache benötigt, erfindet sie eine neue Sprache, weil das vorhandene System nicht dazu in der Lage ist Behebung dieses Problems. Ingenieure erstellten schließlich ein System, auf dem Entwickler ihr System aufbauen.

In der Tat muss ein Software-Ingenieur lernen und sich mit Sachen auf niedrigem Niveau auskennen ... :)

Während ein Entwickler, hängt es ganz von seinem Interesse ab. :)

Mohammad Abdurraafay
quelle
1
-1: Ähm ... Berufsbezeichnungen sind bedeutungslos, Alter.
Jim G.