Sollte .NET Entwickler *wirklich* werden die Ausgaben Zeit mit dem lernen von C für low-level-Exposition?

StackOverflow https://stackoverflow.com/questions/125791

  •  02-07-2019
  •  | 
  •  

Frage

Wenn Joel Spolsky und Jeff Atwood begann die Uneinigkeit in Ihrem podcast über die Frage, ob die Programmierer lernen sollte, C, unabhängig von Ihrer Branche und Plattform der Lieferung, es funkelte schon eine explosive Debatte innerhalb der Entwickler-community, die wahrscheinlich noch tobt unter bestimmten Gruppen heute.Ich lese eine Reihe von Passagen aus einer Reihe von Programmierer, Blogger Ihre Sicht auf die Angelegenheit.Die Argumente beider Seiten durchaus Gewicht hat, was ich nicht finde, ist eine Perspektive, die einzigartig abgewinkelte aus der Sicht der Entwickler konzentrierten sich nur auf die .NET Framework.Praktisch alle von Ihnen wurden kommentieren eine Allgemeine Programmierer-Standpunkt aus.

Was bin ich versucht zu bekommen?An Jeff Atwood Meinung, dass die meisten der Zeit, die die Entwickler bei solch hohen ausgeben würde, würde auf das erlernen der business/domain, auf top von was auch immer notwendig ist zu lernen, die Technologien zur Erreichung dieser domain-Anforderungen.In meiner Erfahrung, ist eine sehr genaue Beschreibung der Arbeit das Leben von vielen.Nun angenommen, die .NET-Entwickler können die Gabel-die Zeit, die für "extra-curricular" lernen sollte dass C?

Für die Aufzeichnung, ich habe gelernt, C zurück in der Schule selbst, und das kann ich absolut verstehen und zu schätzen, was die Befürworter sind Gründe für eine.Aber, wenn das denken die Dinge durch, die ich persönlich fühlen .NET-Entwickler stehen, sollten nicht Tauchen gerade in C.Weil die Sache, die ich wünschte, mehr Entwickler würde einige Zeit dauern, zu lernen, ist - MSIL und CLR.

Vielleicht bin ich stecken mit der eine ungewöhnliche Reihe von Kolleginnen und Kollegen, ich weiß es nicht, aber es scheint mir, dass viele Leute nicht halten Sie einen Bewusstsein dass Ihre C# - oder VB-code kompiliert IL zuerst, bevor JIT-kommt und macht es raw machine code.Die meisten wissen nicht, ILLINOIS, und haben kein Interesse daran, wie genau die CLR übernimmt die code, die Sie schreiben.Lesen Jeffrey Richter CLR via C# war ziemlich schockierend für mich in so vielen Bereichen;froh, dass ich es gelesen habe trotz Kollegen, indem es Sie als "zu niedrigem Niveau".Ich bin kein Experte in IL aber mit dem wissen um die Grundlagen, fand ich mich nach seinem text einfacher, da war ich bereits vertraut mit dem stack-Verhalten von IL.Ich finde mich Demontage von Baugruppen zu schauen, wie die IL stellt sich heraus, wenn ich Schreibe bestimmten code.

Ich lernen Sie die CLR-und MSIL, weil ich weiß, dass die direkte layer unter mir.Die Schicht, die ermöglicht mir zu tragen heraus meine eigenen Ebene arbeiten.C, ist tatsächlich weiter nach unten.Näher an unsere "Realität" ist die CLR und MSIL.Das ist, warum ich würde empfehlen, das andere zu einem gehen, denn ich sehe nicht genug Leute eintauchen zu dieser Schicht.Oder, ist Ihr team bereits alle vertraut mit MSIL?

War es hilfreich?

Lösung

Ich weiß schon, C -, und das half mir während der 1.1 Tag, wo es gibt eine Menge Dinge, die noch nicht in der .NETTO-Basis-Bibliotheken und ich P/Invoke etwas aus dem Plattform-SDK.

Mein nehmen ist, dass wir immer vergeben Sie einen Zeitpunkt für das erlernen etwas, das wir noch nicht wissen.Um deine Frage zu beantworten, ich glaube nicht, dass es für Sie wichtig, zu erfahren, C -, aber wenn Sie einige Zeit zu ersparen, C ist eine gute Sprache zu lernen und ist genauso gültig ist wie jede andere Sprache gibt.

Andere Tipps

Natürlich sollten Sie.Der beste Weg, um sich übermäßig spezialisiert und single-minded (und, entsprechend, beschränkt haben, marktfähige Fähigkeiten) ist nur mit einer einzigen Art der Sprache und meiden alle anderen als "nicht bezogen auf Ihre aktuelle Aufgabe."

Jeder Programmierer sollte etwas Erfahrung mit einem modernen JIT würde OO-Sprache (C#/Java), einen niedrigeren Ebene einfacher Sprache (C, FORTRAN, etc.), ein sehr hohes Niveau interpretierte Programmiersprache (Python, Ruby, etc), und eine funktionale Sprache (Scheme, Lisp, Haskell, etc).Auch wenn Sie nicht alle verwenden Sie auf einer Tag-zu-Tag-basis, die Erweiterung Ihres Denkprozesses, dass dieses wissen gewährt, ist sehr nützlich.

True, C weit unter der Kette.Wissen MSIL helfen können devs nachvollziehen, wie der Optimierung Ihrer apps besser.Als für das lernen C oder MSIL, warum nicht beide?:)

.NET Entwickler sollten lernen, über die CLR.Aber Sie sollten auch lernen, C.Ich sehe nicht, wie jemand wirklich nachvollziehen kann, wie sich die CLR-funktioniert ohne einige low-level-Verständnis von dem, was geschieht, auf das blanke Metall.

Zeit zu verbringen lernen über übergeordnete Konzepte ist sicherlich von Vorteil, aber wenn Sie konzentrieren sich zu sehr auf die hohe-Ebene auf Kosten des low-level -, riskieren Sie immer eine von diesen "Architekten" Menschen zeichnen kann, der Felder und Linien auf whiteboards, aber wer nicht in der Lage sind zu schreiben jeden code.

Lernen Sie, wie Sie durch das lernen der C-wird nützlich sein, für den Rest Ihrer Karriere.Was erfahren Sie über die CLR ist veraltet, da Microsoft die änderungen Ihrer Plattform.

Meine Meinung ist, dass das erlernen der kompilierte Sprache und die Montage ist muss.Ohne, dass Sie nicht bekommen, die Vielseitigkeit erforderlich, zwischen den Sprachen zu wechseln und stapeln.

Um genauer zu sein-ich denke, dass eine gute/sehr guter Programmierer muss wissen, diese Dinge von der direkten Erfahrung:

  • Was ist der Unterschied zwischen einem register und einer Variablen?
  • Was ist DMA?
  • Wie wird ein pixel auf dem Bildschirm (auf niedrigem Niveau)?
  • Was sind interrupts?
  • ...

Das wissen um diese Dinge ist der Unterschied zwischen der Arbeit mit einem system, das Sie verstehen und ein system, dass für alles, was Sie wissen, arbeiten von Magie.:)

Um einige Kommentare

Sie am Ende mit zwei verschiedenen Arten von Entwicklern:

  • Menschen, die eine Sache zu tun ist in 10 Arten in einer oder zwei Sprachen
  • Menschen, die das tun, eine Sache in eine oder zwei Möglichkeiten, die in 10 verschiedenen Sprachen

Ich fest davon überzeugt, dass die zweite Gruppe sind die besseren Entwickler insgesamt.

Ich denke daran, wie diese:

  1. Programmierer sollten wahrscheinlich tatsächlich arbeiten in der höchsten Ebene der Sprache angemessen ist.Was angemessen ist, hängt von Ihrem Szenario.Ein Gerätetreiber oder embedded-system wird in einer anderen Klasse aus einer CRUD-desktop-app oder web-Seite.
  2. Möchten Sie Ihre Programmierer so viel Praxis wie möglich in die Sprache, in der Sie arbeiten.
  3. Da die meisten Programmierer arbeiten auf generische desktop-und web-apps, die Sie wollen-Programmierung die Studierenden in den höheren Sprachen wie schnell wie möglich während der Schule.
  4. Allerdings werden die höheren Sprachen Anonymisierung ein paar grundlegende Programmieraufgaben, wie Zeiger.Wenn wir unser Prinzip, mit dem, was ist angemessen, auch die Studierenden, jenen höheren Sprachen kann nicht werden geeignet für die ersten Jahr Studenten.Throws Java, .Net, Python, und viele andere.
  5. Die Schüler sollten daher in C (oder noch besser:C++, da es "higher-level" - und deckt die meisten die gleichen Konzepte) für das erste Jahr oder zwei von der Schule zu umfassen grundlegende Konzepte, aber schnell zu bewegen auf eine höhere Ebene der Sprache zu ermöglichen komplizierteren Programme, die früher.

Weit genug Fortgeschritten im schreiben von C#, die Sie benötigen zu verstehen, die Konzepte in C, selbst wenn Sie nicht lernen, die eigene Sprache.

Generell aber, wenn Sie ernsthaft über alle Fähigkeit, die Sie wissen sollten, was geht, mindestens eine Abstraktionsebene, die unter dem primären Arbeitsebene.

  • Programmierung in jQuery werden sollte, gepaart mit einem Verständnis von JavaScript
  • Entwerfen von schaltungen erfordert wissen, Physik
  • Jeder gute basketball-Spieler werden lernen, über Muskeln, Knochen und Ernährung
  • Geiger erfahren mehr über das zusammenspiel von Kolophonium, Reibung, Bogen Haar, string, Holz und Trockenheit

Ich möchte eine neue Sprache lernen jedes Jahr.Nicht unbedingt, es zu meistern, aber zu zwingen, mein Gehirn zu denken auf unterschiedliche Weise.

Ich fühle lernen C ist eine gute Sprache zu lernen, über low-level-Konzepte, ohne die Schmerzen der Codierung in der Montage.

Ich glaube jedoch, dass die lehren von Sprachen wie Haskell, python, und auch wohl regex (nicht gerade eine Sprache, aber Sie fangen meine drift?) ebenso wichtig wie die lehren, die wir aus C.

Also würde ich sagen, erfahren Sie mehr über die CLR-und MSIL-auf der Arbeit, wenn das ist Ihr Gebiet, und in Ihrer Freizeit, versuchen Sie, Kommissionierung bis eine andere Sprache einmal jeder so oft.Wenn das passiert, werden C in diesem Jahr, gut für Sie, und genießen Sie spielen mit Zeiger ;)

Ich sehe keinen Grund, warum Sie sollten.Sprachen wie Java und C# wurden so konzipiert, dass Sie nicht brauchen sorgen über die low-level-details.Das ist das gleiche wie zu Fragen, ob eine WinForms developer zu verbringen Zeit lernen die Win32-API, weil das ist, was passiert darunter.

Während es nicht Schaden, zu lernen, würden Sie wahrscheinlich gewinnen mehr von den Ausgaben mehr Zeit für das erlernen der Sprachen und Plattformen, die Sie vertraut sind mit, es sei denn, es ist eine gute Notwendigkeit zu lernen, die low-level-technische details.

Es können keine schlechte Idee, zu lernen, MSIL, aber es ist nur ein weiterer .NET-Sprache, aber mit fiesen syntax.Es ist eine andere Schicht nach unten, obwohl, und ich denke, die Leute sollten zumindest eine vage Vorstellung von alle Ebenen.

C, wird so etwas wie die assembly-Sprache mit schöner syntax, ist ein schöner Weg, um eine Idee zu bekommen, was auf einem Recht niedrigen Niveau (obwohl einige Dinge sind noch von Ihnen versteckt).

Und aus dem anderen Ende, ich denke, jeder sollte wissen, ein bisschen etwas wie Haskell oder Lisp, um eine Vorstellung von höher-level-Zeug (und sehen Sie sich einige der Ideen eingeführt, die in C# 3 in einer reineren form)

Wenn Sie sich selbst betrachten ein Programmierer, ich würde sagen, ja, lernen C.

Viele Menschen, die code schreiben, der sich nicht als Programmierer.Ich Schreibe .NET-apps vielleicht 3 Stunden am Tag bei der Arbeit, aber ich glaube nicht, beschriften mich einen "Programmierer." Ich tun eine Menge Dinge, die nichts mit der Programmierung.

Wenn Sie verbringen Ihren ganzen Tag Programmieren oder denken über Programmierung, und Sie gehen, um Ihre gesamte Karriere revolve arround Programmieren, dann werden Sie besser sicher, dass Sie wissen, Ihre Sachen.Lernen C würde wahrscheinlich helfen, bauen eine Basis von wissen, das wäre sehr hilfreich, wenn Sie gehen sehr tief in die Programmierung Fähigkeiten.

Mit alles, es gibt trade-offs.Je mehr Sprachen Sie lernen, desto mehr Zeit verbringen Sie gewidmet Technologie, die weniger Zeit haben Sie für das erlernen anderer Fähigkeiten.Für Beispiel, es würde besser sein, C zu lernen oder Bücher zu Lesen auf Projekt-management?Es hängt von Ihren Zielen.Sie wollen die besten Programmierer EVAR?Lernen C.Verbringen Sie Stunden und Stunden an, code zu schreiben und widmete sich der Kunst.Sie jemals wollen, um zu verwalten, jemand anderes anstelle von Codierung ganzen Tag?Nutzen Sie die Zeit, die Sie würde in der Programmierung, und finden Sie Möglichkeiten zur Verbesserung Ihrer soft skills.

Sollte .net Entwickler lernen C?Ich würde sagen, "nicht unbedingt", aber sollten wir immer einmal in irgendeiner Sprache außerhalb unserer professionellen bailiwick weil jede Sprache bringt eine neue Art des Denkens über Probleme.Während meiner beruflichen Karriere als .net (und vor, dass, VB 2-6) - Entwickler, die ich geschrieben habe, bei kleinen Projekten in Pascal, LISP, C, C++, PHP, JavaScript, Ruby und Python und bin gerade einmal in Lua und Perl.

Anderes als C++, die ich nicht Liste alle von Ihnen in meinem Lebenslauf, weil ich bin nicht auf der Suche, um eine professionelle in alle von Ihnen.Stattdessen bringe ich wieder interessante Ideen von jedem von Ihnen zu verwenden, die in meinem .net-basierte Arbeit.

C ist interessant, dass es wirklich Sie bekommt in der Nähe des OS, aber das ist ja nicht die einzige Ebene, die Sie kennen müssen, um ein guter Programmierer zu sein.

Die CLR ist ein virtual Maschine, so, wenn das ist alles, was Sie lernen, dann sind Sie nur wissen, was passiert auf einer virtuellen Ebene.

Lernen C lernen Sie mehr über die physical Maschine so weit wie die Speichernutzung geht, die, wie Sie erwähnen, ist, was die CLR verwendet unter.Lernen, wie die CLR funktioniert, ist, nicht zu geben Sie, wie viel Einblick in das, sagen wir, garbage collection, wie das lernen C.Mit C, wirklich schätzen, was ist beteiligt bei der Speicherverwaltung.

Lernen CIL auf der anderen Seite, sagt Sie, ein bisschen mehr über Ausführung .NET als würden Sie durch das lernen C.Immer noch, wie IL Karten der Maschinen-Sprache wird immer noch ein Rätsel für die meisten Teil, also zu wissen, einige der high-level-Befehle, wie diejenigen, die für das casting von Typen, ist das nicht hilfreich, um zu verstehen, was wirklich vor sich geht, wie Sie sind undurchsichtig für die meisten Teil.Lernen C und Hinweise, aber wird Sie erleuchten, auf einige dieser Aspekte.

Ist das Thema learning C oder MSIL, oder ist es mehr grundlegend?Ich würde sagen, dass in Allgemeinen, mehr Entwickler stehen könnte, mehr darüber zu erfahren, wie Computer, physische oder virtuelle Arbeit.Kann eine person eine ziemlich kompetente Programmierer nur durch das Verständnis einer Sprache und API in einer box.Zu nehmen, den Beruf auf die nächste Stufe, ich fühle, dass die Entwickler wirklich brauchen, um zu verstehen, den ganzen Stapel.Nicht unbedingt im detail, aber in ausreichender Allgemeinheit zu helfen, die Probleme zu lösen.

Viele dieser Fähigkeiten sind gesprochen, die hier erworben werden können, durch das lernen mehr über Compiler und design-Sprache.Sie müssen wahrscheinlich C zu lernen, dies zu tun (Hoppla, hinterhältig), aber der compiler schreiben ist ein großartiger Rahmen, um zu lernen C in.Steve Yegge spricht über diese auf seinem blog hat, und ich völlig einig mit ihm in diesem Punkt.Mein compiler schreiben-Kurs in der Universität, war eines der am meisten die Augen geöffnet Kurse, die ich jemals getroffen, und ich wünschte wirklich, es war ein 200-Niveau-Kurs, statt eines 400-Ebene ein.

Ich stellte diese auf einen anderen thread, aber es gilt auch hier:

Ich glaube, Sie brauchen eine gute Grundlage, aber widmen Sie die meisten Ihrer Zeit zu lernen, was Sie verwenden werden.

  • Erfahren genug, assembler an zwei zahlen addiert und das Ergebnis auf der Konsole aus.Sie werden ein viel besseres Verständnis von dem, was eigentlich Los ist mit dem computer und es wird Sinn machen, warum wir verwenden die binary/Hex.(dies kann in einem Tag geschehen und getan werden kann, mit debug cmd.exe).
  • Lernen Sie genug C, um zu reservieren etwas Speicher und Zeiger verwenden.Eine einfache verlinkte Liste ist ausreichend.(dies kann durchgeführt werden in einem Tag oder zwei).
  • Verbringen Sie mehr Zeit für das erlernen einer Sprache, die Sie verwenden werden.Ich würde lassen Sie Ihren Interessen Steuern Sie, in welcher Sprache (C#, Java, Ruby, Python, etc.).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top