Sollte ich als Programmierer niedrige und hohe Programmiersprachen beherrschen? [geschlossen]


18

Ich wurde kontaktiert, um einige Arbeiten zur Fernsteuerung von LED-Anzeigen über TCP / IP auszuführen, aber meine Erfahrung und Vorbereitung sind hauptsächlich Programmiersprachen auf hohem Niveau. Ich sagte das zu der Person, die mich wegen der Arbeit kontaktierte und er sagte mir:

"Wenn Sie sich Programmierer nennen, sollten Sie all diese Dinge wissen"

Sollte ein Programmierer die Details der Low-Level-Programmierung wirklich kennen? Oder kann ich es als Black-Box-Konzept behandeln, als theoretisches Wissen, aber nicht unbedingt als Umsetzung von Low-Level-Sprachlösungen, wenn ich bedenke, dass Low-Level-Programmierung nicht mein Fachwissen ist?


8
Wenn Sie auf einer höheren Ebene programmieren, müssen Sie die niedrigeren Abstraktionsebenen ausblenden, sonst würden Sie nichts tun. Es ist jedoch sehr nützlich, auf niedrigeren Ebenen arbeiten zu können. Versuchen Sie jedoch nicht, alle Abstraktionsebenen gleichzeitig zu bearbeiten. Das müssen Sie nicht, aber wenn nicht, bewerben Sie sich nicht für Jobs auf niedrigem Niveau.

1
@delnan: Wenn Sie auf der oberen Ebene arbeiten, müssen Sie natürlich die Details der unteren Ebene maskieren. Ich denke jedoch, jeder Programmierer sollte wissen, wie die Maschinen, die er programmiert, auch auf der unteren Ebene funktionieren. Das Wissen muss nicht zu detailliert sein - es reicht völlig aus, nur zu wissen, wie ein grundlegender Computer von Grund auf neu aufgebaut wird.
Schedler

4
"Wenn Sie sich Programmierer nennen, sollten Sie all diese Dinge wissen." Wenn sie Sie so sehr wollten, dass sie wegen Ihres mangelnden Hintergrunds verfluchten, stimmt etwas nicht. Ich würde ihren Kommentar als überhaupt nicht sinnvoll ansehen. Entweder wollen sie dich mit deinem Hintergrund oder sie wollen dich nicht und sollten dich nicht für den Hintergrund verfluchen, den du nicht hast.
S.Lott

3
Ein weiterer Fall von "Puh, ich bin froh, dass ich diese Kugel verpasst habe!" Sie wollen nicht wirklich für oder mit so einem Snob arbeiten, oder?
Edward Strange

2
@Schedler - und wenn sie nicht ihre eigenen Bretter brennen, sind sie total Newbs.
Edward Strange

Antworten:


37

Ihr Kontakt weiß nicht, wovon er spricht. Es gibt viele Sprachen, Methoden, Technologien usw., so dass eine einzelne Person möglicherweise nicht alle erforderlichen Details genau kennen kann. Was Sie als Programmierer wissen müssen, ist, wie Sie lernen, was Sie brauchen, um die Arbeit zu erledigen, und wie Sie Probleme lösen können, um zu einer Lösung zu gelangen, unabhängig davon, welche Programmiersprache Sie verwenden müssen.

Zugeben, was Sie nicht wissen, ist in Ordnung, aber Sie können auch nachweisen, dass Sie in der Lage sind, genug zu lernen, um das gewünschte Ergebnis zu erzielen, unabhängig davon, womit Sie konfrontiert sind. Gute Programmierer sind einfach gute Problemlöser, die ihre Lösungen in verschiedenen Programmiersprachen implementieren können.

Ich würde nicht für jemanden arbeiten, der die Einstellung hat, die Ihr Kontakt hat.


4
+1: Der Kommentar macht überhaupt keinen Sinn.
S.Lott

Obwohl ich wetten werde, dass es eine Menge Entwickler gibt, die nur für die Montage zuständig sind und ihn gerne stundenweise in Rechnung stellen würden.
Erik Reppen

22

"Wenn Sie sich Programmierer nennen, sollten Sie all diese Dinge wissen"

Ich stimme dieser Aussage überhaupt nicht zu. Das wäre so, als würde man einen Koch bitten, etwas zu kochen, einen Fahrer, ein Kraftfahrzeug zu bedienen, oder einen Arzt, um alle Krankheiten zu kennen, was eine lächerliche Annahme ist.

Um ein Programmierer zu sein, muss man wissen, wie man Schreibsoftware in einer Sprache gibt, um eine Aufgabe automatisiert ausführen zu können. Die Sprachen und Aufgaben variieren von Programmierer zu Programmierer, so wie die Gerichte, die ein Koch zubereiten kann, der Fahrer zu bedienen weiß oder der Arzt zu diagnostizieren weiß, je nachdem, wie spezialisiert man in den einzelnen Berufen sein möchte.


2
Ja, bis eine Abstraktion zusammenbricht und sie keine Ahnung haben, warum ihr Code ein Leistungsproblem aufweist, warum eine externe Bibliothek Daten abstürzt / beschädigt usw. Nach meiner Erfahrung sind Programmierer, die nur höhere Sprachen beherrschen, einfach nicht so gut bei ihrer Arbeit als diejenigen, die beides können.
Ed S.

4
Sie verpassen den Punkt. Ja, High-Level-Programmierer sollten in der Lage sein, die Low-Level-Aspekte zu verstehen, aber sollte er wissen, wie man ein Firmware-Upgrade für einen Linksys-Router schreibt?
maple_shaft

7
Ich denke, sie sollten wissen, wie sie es herausfinden können. Ein großer Teil der modernen Programmierung besteht darin, zu wissen, woran man sich erinnert und was man als Referenz ablegt.
Michael K

8

Gesprochen wie eine Person, die in ihrem Leben nie eine Codezeile geschrieben hat. Dies ist die gleiche Person, die das Gefühl hat, dass Sie dies in der Hälfte der von Ihnen angegebenen Zeit tun sollten. Streite nicht mit einem Idioten.

Sie zeigten viel mehr Wissen und Charakter, indem Sie Ihre Grenzen kannten. Diese Person spricht über Dinge, die sie nicht kennt.

Ich denke, jeder Schreiner sollte wissen, wie man ein verziertes Möbelstück schnitzt. Wenn eine Pilotin ein Flugzeug fliegen kann, kann sie alle fliegen.


Ich bin damit einverstanden, denn es ist wie zu sagen, dass Sie als Arzt wissen sollten, wie man eine Operation am offenen Herzen durchführt. Aber im wirklichen Leben weiß man, dass er ein Spezialist sein muss, um es zu tun, aber wenn man den Unterschied programmiert, ist es schwer zu erkennen, wenn man es nur von außen als die "mächtigen Programmierer" ansieht.
job

6

Die meisten CS-Programme in der Schule vermitteln Ihnen Kenntnisse in der Programmierung auf niedrigem Niveau. Ich hatte zum Beispiel Assembler-Klassen, die den 8088-Prozessor verwendeten (OK ... das datiert mich ein bisschen). Ich denke jedoch, dass viele Handelsschulen heutzutage dieses Wissen umgehen - melden Sie sich mit einem Kommentar, wenn das nicht stimmt.

Unterm Strich ist es immer gut zu wissen, was auf Chipebene passiert - außerdem landen Ihre Hochsprachen irgendwann dort, wenn sie ausgeführt werden.

Es ist jedoch ignorant, sich von jemandem sagen zu lassen, dass Sie kein Programmierer sind, weil Sie derzeit nicht wissen, dass es sich um Low-Level-Programmierung handelt. Wenn Sie diese Fähigkeiten für das aktuelle Projekt benötigen, sollten Sie über genügend Intelligenz oder Motivation verfügen, um die von Ihnen benötigten Fähigkeiten zu erlernen und sie dann anzuwenden.

Ich müsste ernsthaft in Erwägung ziehen, dieses Projekt nicht zu übernehmen, wenn der Kunde bereits so mit Ihnen spricht - Sie wissen nie, wohin das führen könnte.


6

Ich verachte es wirklich, wenn Leute sagen: "Sie müssen X kennen, um sich selbst Programmierer zu nennen." "Ja wirklich?" Nun, einige Leute arbeiten den ganzen Tag an COBOL und LIEBEN ES. Sie sind vielleicht so gut darin und in ihrer Problemdomäne geworden, dass wir alle neben ihnen so tun, als ob wir etwas vorgeben würden.

Im Ernst, geben Sie den Menschen Respekt für die Lösung der Probleme, mit denen sie konfrontiert sind, auf coole und interessante Weise. Verstehen Sie, dass großartige Problemlösungen aus einer Vielzahl von Hintergründen stammen. Nicht, ob sie eine vermeintliche "Checkliste" von Fähigkeiten gemeistert haben, die jeder wissen sollte, damit sie alle gleich denken können. Das ist genau das Gegenteil von dem, was wir wollen. Jede "Checkliste" ist und sollte anders sein. Je unterschiedlicher, desto besser. Programmierung ist heutzutage eine Problemlösung. Respektiere diejenigen, die es gut machen und verstehe, dass jeder mit unterschiedlichen Stärken an den Tisch kommt. Nur so können wir uns gegenseitig dabei helfen, effektiv als Team zu arbeiten. Nur weil das Kennen von "C" oder etwas wirklich dazu beiträgt, dass dieser eine Typ großartig ist, heißt das nicht, dass du es nicht tust.


3

Ich schlage vor, dass Sie dies lesen:

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

Wenn Sie eine Abstraktion verwenden, hat die niedrigere Ebene immer einen Einfluss auf das, was Sie tun. Dies kann die Leistung, die Fehlerursache, Sicherheitsgründe usw. sein.

Also definitiv, sollten Sie jetzt über diese Sachen. Nicht gerade ein Spezialist für Asm- oder CPU-Architektur. Aber genug zu wissen, um sich selbst zu dokumentieren, wenn Sie mehr wissen müssen, ist in der Tat ein Muss.


Vielleicht muss ich klarstellen, dass ich weiß, wie TCP / IP funktioniert =). Mein Punkt ist die Implementierung von Sockets über TPC / IP. Kann ich das spontan lernen? natürlich will ich es lernen nicht wirklich, hauptsächlich, weil ich nicht sicher bin, ob das Endergebnis für eine Produktionsumgebung vollständig bewiesen ist oder alle Anforderungen in der vorgegebenen Zeit erfüllt. Ich denke nur, dass ich in der Zeit, die ich gebraucht habe, das Niveau der Fachkenntnisse in Hochsprache erreicht habe, und ich glaube nicht, dass die angegebene Zeit ausreichen wird, um alle Fallstricke zu kennen, die mir ein riskantes Gefühl geben.
job

Das ist der Punkt: Sie müssen kein Experte sein. Aber Sie müssen die Grundlagen kennen. Sie kennen also die Grenzen der von Ihnen verwendeten Abstraktion - das ist das Minimum - und wissen, wie Sie sich dokumentieren, wenn die Grenzen erreicht sind.
Deadalnix

2

Sein Argument ist ein gutes Beispiel für den logischen Irrtum No True Scotsman .

Der Unterschied zwischen Low- und High-Level-Programmierung liegt jedoch nicht in der Sprache, sondern in der Domäne des Anwendungswissens. Das Zuweisen eines Werts zu true kann das Einschalten einer LED oder das Aktivieren von Mausklickereignissen in einem Widget bedeuten. Die Sprache ist mir egal.

Schauen Sie sich zum Beispiel diese Bibliothek an, um mit einer LED-Matrix auf einem Arduino zu arbeiten. Es ist hier keine Raketenwissenschaft, und wirklich jeder Programmierer würde es mit ein wenig Mühe verstehen können, wenn er kein "Low-Level-Oh nein!" mentale Blockade.


1

Jede Programmiersprache hat ihre eigenen Vor- und Nachteile. Wenn Sie ein paar davon lernen, erhalten Sie eine gute Vorstellung davon, was Sie bei einem bestimmten Projekt verwenden und wie Sie es effektiv einsetzen können.

Als Programmierer können Sie sich auf einen bestimmten PL spezialisieren und ihn als einziges Werkzeug zur Lösung eines Problems verwenden. Sie können auch eine Menge PL kennen, sich aber auf nichts und noch viel mehr zwischen diesen Extremen spezialisieren.

Vielleicht Person, die Ihnen sagte, dass "Phrase" frustriert ist, vielleicht waren Sie nicht die einzige Kontaktperson, mit der er gesprochen hat.

Das Problem zu kennen und zu wissen, welche Fähigkeiten erforderlich sind, um das Problem effektiv lösen zu können, ist eine gute Eigenschaft eines Programmierers. Leider können Sie in Ihrem Fall, da Sie nicht über die erforderlichen Fähigkeiten verfügen, Ihre Kontaktperson an einen anderen Programmierer mit den erforderlichen Fähigkeiten verweisen.

Prost,

Wardy


1

Das theoretische Wissen ist gut. Es ist sehr wichtig , die einfache Sprache bei Bedarf lernen zu können .

Aber wer kann schon alles über alles wissen, wenn man sich Programmierer nennt? Bevor sie sie überhaupt machen?


-2

Ich werde neu formulieren

"Wenn Sie sich Programmierer nennen, sollten Sie all diese Dinge wissen"

ZU

"Wenn Sie sich als Programmierer bezeichnen, sollten Sie genug wissen, um all diese Dinge schnell zu lernen."

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.