EE vs Computer Science: Auswirkungen auf die Ansätze und Stile der Entwickler? [geschlossen]

11

Gibt es systematische Unterschiede zwischen Softwareentwicklern (SW-Ingenieure, Architekten, unabhängig von ihrer Berufsbezeichnung) mit einem elektronischen oder anderen technischen Hintergrund im Vergleich zu denen, die durch Informatik in den Beruf eingetreten sind?

Mit Elektronik-Hintergrund meine ich einen EE-Abschluss oder einen autodidaktischen Elektronik-Bastler, andere Arten von Ingenieuren und Experimentalphysikern.

Ich frage mich, ob der Einstieg in die Software-Berufe aufgrund eines starken Wissens über Flip-Flops, Tristate-Puffer, Anstiegszeiten der Taktflanken usw. normalerweise zu einer eindeutigen Herangehensweise an Probleme, Denkweisen oder überlegene Fähigkeiten bei bestimmten Fachgebieten und Mängeln führt von Fähigkeiten bei anderen im Vergleich zu den Informatik-Typen, die voller Konzepte wie abstrakte Datentypen, Objektorientierung, Datenbanknormalisierung sind, die von "Verschlüssen" in Programmiersprachen sprechen - Dinge, die für die Lötkolben-Menge bis dahin wenig Sinn machen lerne genug programmieren.

Ich bin sicher, die reale Welt bietet eine Vielzahl individueller Ausnahmen, aber können Sie zum größten Teil sagen, dass es allgemeine Unterschiede gibt? Hätten diese Auswirkungen auf die Einstellung, z. B. (um etwas zu erfinden) "niemals einen Elektronen-Wrangler für das Datenbank-Design einstellen"? Könnte das Wissen über Unterschiede Arbeitssuchenden helfen, effektiver etwas Passendes zu finden? Oder Aufklärung oder praktische Ratschläge für diejenigen geben, die sich in einer bestimmten beruflichen Rolle als Außenseiter befinden?

(Übrigens habe ich noch nie Informatikunterricht genommen; mein Eindruck von genau dem, was sie abdecken, ist verschwommen. Ich bin selbst ein Typ aus Elektronik / Physik / Kunst.)

DarenW
quelle

Antworten:

5

Ich habe einen EE-Minor und einen CS-Major und habe mit beiden Gruppen akademisch gearbeitet. Ich hatte noch nie einen Job inne, bei dem ich Produkte im EE-Stil entworfen habe, aber ich habe viele davon verbraucht, um für Unternehmen mit Dingen wie SPS zu arbeiten, und so konnte ich (aus einem Bildungshintergrund) verstehen, was passiert ist . Ich kann also nicht sagen, dass ich 100% über das Verhalten und die Merkmale am Arbeitsplatz weiß, aber ich kann die academicUnterschiede zwischen den beiden bis zu einem gewissen Grad beschreiben.

EE-Leute konzentrieren sich in der Regel auf die Details und kennen die genaue Implementierung. Wenn es nicht 100% kartierbar ist, mögen sie es nicht. EE-Leute optimieren nach unten, um unnötige Details zu entfernen, wenn sie können.

SE-Leute neigen dazu, Schichten und die Unterteilung von Logik zu mögen. SE-Leute haben nichts gegen aufgeblähte Projekte. SE-Leute neigen dazu, sehr mathematisch orientiert zu sein. Sie neigen dazu, in Gleichungen zu denken und Probleme aus einem Musterkonzept zu lösen. Verknüpfungen sind für diese Gruppe intuitiver, z. B. für die Datenbankarbeit. Je weiter Sie gehen, desto mehr sehen Sie Menschen, die sich mit Dingen wie funktionaler Programmierung fließend auskennen. Das ist einfach kein sicherer Grund für eine EE-Person.

Beide Leute kennen sich mit Dingen wie Karnaugh-Karten aus, daher gibt es in diesen Bereichen viele Überschneidungen. Logikreduktion, so etwas.

Ok, das ist meine subjektive Antwort. Ich hoffe es hilft.

jcolebrand
quelle
Diese Antwort gibt mir Einblicke in mein aktuelles Projekt. Ich muss die Karriere wechseln!
DarenW
1
Ich stimme Ihnen fast zu 100% zu, mit Ausnahme des Teils über funktionale Programmierung. Zum Beispiel glaube ich, dass reine Kontaktplanlogik fast 100% deklarative Syntax ist. Das Funktionsblockdiagramm ist auch bei EEs beliebt, die natürlich auch funktionsfähig sind.
Scott Whitlock
@Scott W. ~ 2 Gedanken ... ;)es ist eine subjektive Antwort, ich darf mich irren ... in Bezug auf funktionale Logik meine ich wie dieser Lisp-Code ((lambda (arg) (+ arg 1)) 5)... sie würden zwar etwas "Ähnliches" verwenden, aber das würde Logik für einen EE gleich sein? Nicht nach meiner persönlichen Erfahrung. Zugegeben, ich weiß nicht, dass viele professionelle Chip-Design-EEs, die meisten, die ich kenne, mehr Servicepersonal sind. Und die Kontaktplanlogik, die sie in ein Computerterminal eingeben, sieht aus wie eine wörtliche Leiter auf ihrem Bildschirm. Stelle dir das vor.
Jcolebrand
1
Ich denke, Sie sprechen über funktionale Konstrukte wie Lambdas usw., und ich denke über funktionale Konzepte wie Unveränderlichkeit und deklarative Syntax nach. Ich stimme zu, dass Sachen wie Monaden und dergleichen ziemlich abstrakt sind. Ich glaube nicht, dass EEs normalerweise auf solche Dinge stoßen würden.
Scott Whitlock
Ich denke, dass EEs häufiger auf Monaden stoßen als SE-Leute. Haskell hat sogar eine Monade Erweiterung , die Monaden zu modellierenden als I / O - Blöcke, das Brot und Butter von DSP - Ingenieuren ermöglicht.
Aditya
12

Wenn ich verallgemeinern müsste, ist hier meine Erfahrung:

  • Ingenieure (oder nur EEs) tendieren dazu, die "Perfektion des Kleinen" besser zu machen. Bei einer kleinen Programmieraufgabe denken sie sehr lange und gründlich über alle Randfälle nach und entwickeln mit größerer Wahrscheinlichkeit eine Software, die sehr robust ist. Es basiert normalerweise auf einem Top-Down-Design-It-All-Up-Front-Ansatz, da dies bei Hardware üblich ist. Es beinhaltet normalerweise die Verwendung von Zustandsautomaten, da diese daran gewöhnt sind, sie für Hardware zu entwerfen, und es passt zum "Big Design" -Ansatz. Auf der anderen Seite denken sie nicht so viel über Skalierbarkeit oder Wartbarkeit nach.

  • Ihre traditionellen Entwickler sind besser in der Lage, große Komplexität zu bewältigen, vor allem, weil das Training Probleme in kleinere, besser handhabbare Teile zerlegt. Sie lernen, das große Design zu vermeiden und nur die Bedenken zu trennen, Tests zu schreiben und die Tests zu bestehen. Normalerweise gibt es viele kleine Fälle mit fehlenden Kanten, nur aufgrund der Komplexität und der Zeit, aber diese werden schließlich abgedeckt. Entwickler neigen dazu, die Tatsache auszunutzen, dass es sich nur um Software handelt und dass sie leicht zu ändern sein sollte (oder ist). Wenn EE mit Hardware arbeitet, haben sie diesen Vorteil nicht, und ich denke, es braucht Zeit, um den Übergang zu vollziehen.

Wie gesagt, das ist meine allgemeine Erfahrung. Es ist nicht in jedem Fall wahr.

Scott Whitlock
quelle
Schöne Antwort mit dem Kontrast zwischen den beiden. Um nun zu sehen, wie viele andere durch Upvoting zustimmen, dass dies korrekt ist oder nahe kommt.
DarenW
3

Nach meiner Erfahrung scheinen EE-Typen lineare Programme zu entwerfen und die Abstraktionsschichten nicht zu berücksichtigen, mit denen CS-Typen vertraut zu sein scheinen.

Kein Kommentar zu den Qualitätsunterschieden oder deren Fehlen.

Paul Nathan
quelle
1

Ich bezweifle, dass Sie einen großen Unterschied in der üblichen Art von Geschäfts- oder Web-Apps sehen werden, an denen die meisten Menschen arbeiten, wenn beide über ein paar Jahre Erfahrung verfügen. Alle Dinge, die Sie als verwirrend für die "Lötkolben-Menge" auflisten, sind normale Programmierkenntnisse. Im Wesentlichen beantworten Sie Ihre eigene Frage - jemand ohne Programmierhintergrund kann das Programmieren lernen, aber bis dahin ist er kein Programmierer. Jemand mit einem logischen und analytischen Verstand wird es viel einfacher finden, gut programmieren zu lernen als jemand, der dies nicht tut - das wäre der einzige Vorteil, den ich mir für einen autodidaktischen Elektronikbastler vorstellen kann.

Informatik (im Gegensatz zu Computertechnik) ist vorwiegend Mathematik, ebenso wie (auf höheren Ebenen) die verschiedenen anderen Wissenschaften wie Physik - aber es ist eine ganz andere Art von Mathematik. Wenn Sie eine andere Wissenschaft gemacht haben, haben Sie auch Mathematik gemacht und sollten es daher möglich sein, sich im Gegensatz zu jemandem, der keinen mathematischen Hintergrund hat, auf den neuesten Stand zu bringen. Natürlich müssen nur sehr wenige Programmierer jemals wirklich etwas über Mengenlehre, Big-O oder was auch immer wissen - schon gar nicht auf hohem Niveau.

FinnNk
quelle
Interessante Antwort. Ich habe vielleicht die Programmierkenntnisse von Elektronik-Leuten heruntergespielt - erfahrene können überall auf der Skala von Dummy bis Rockstar sein. Würden Sie sagen, dass EEs das Programmieren auf einem professionell kompetenten Niveau leichter erlernen können, als eine reine Software-Person Elektronik lernen kann?
DarenW
1

Ich begann mit einem BSEE, arbeitete an der Entwicklung von Logikschaltungen für ein großes Forschungs- und Entwicklungslabor für Telefone und erkannte (vor etwa 40 Jahren), dass das meiste, was ich baute, irgendwann mit einem Computerprogramm erledigt werden konnte. Also ging ich zurück und machte einen MSCS-Abschluss.

Ich habe mich schon immer für Computerarchitektur interessiert und was auf Hardwareebene passiert. Den größten Teil meiner Karriere habe ich mit der Entwicklung eingebetteter Mikrocontrollersysteme verbracht, bei denen ich versuche, die beste Übereinstimmung zwischen dem, was in der Hardware gemacht wird, und dem, was in der Firmware gemacht wird, zu finden. Ich habe jedoch einiges an Webprogrammierung und etwas Datenbankdesign gemacht.

Ohne meinen Hintergrund in CS hätte ich wahrscheinlich viel mehr Probleme, abstraktere Konzepte zu verstehen. Neben vielen verschiedenen Assembler-Sprachen habe ich C, C ++, C #, Pascal, Delphi, Perl, PHP und einige Lisp verwendet. Ich versuche gerade, Ruby und Python zu lernen. OO Design, mit dem ich mich ziemlich wohl fühle. Funktionale Programmierung bin ich (noch) nicht.

Gleiches gilt für Datenbanken. Ich verstehe Normalisierung. Ich habe Probleme mit einigen der esoterischeren JOINs und vermeide sie. Ich fühle mich mit etwas nicht wirklich wohl, wenn ich nicht verstehe, was unter der Haube vor sich geht.

Ich möchte in der Lage sein zu "sehen", wie der Computer das Programm in meinem Kopf ausführen würde.

tcrosley
quelle
1
"Ich fühle mich mit etwas nicht wirklich wohl, wenn ich nicht verstehe, was unter der Haube vor sich geht." - das ist das Zeichen für verantwortungsbewusstes Engineering. +1 an Sie, Sir.
Luis.espinal