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.)
quelle
;)
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.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.
quelle
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.
quelle
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.
quelle
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.
quelle