Erste Schritte mit der Systemprogrammierung? [geschlossen]

8

Seit ich vor fünf Jahren die Programmierung entdeckt habe, habe ich viele Dinge getan. Ich habe zahlreiche Programmiersprachen und -technologien gelernt und viele interessante Dinge ausprobiert. Ich habe Spiele geschrieben, sowohl Konsolen- als auch Grafik-, Konsolen- und Fensteranwendungen, die auf dem Desktop ausgeführt werden, CRUD-Webanwendungen, meine eigene (beschissene) PHP-XML-basierte Flatfile-Datenbank. Zusätzlich zu Web und Desktop habe ich die mobile Entwicklung mit Android ausprobiert, aber es hat mir nicht gefallen, also habe ich damit aufgehört. Ich habe kürzlich ein Webprojekt von mir abgeschlossen und lerne gerade funktionale Programmierung (Haskell).

Aber ich habe mich noch nie mit Systemprogrammierung beschäftigt. Die Idee, Software (ich bin mir nicht einmal sicher, ob dies die richtige Terminologie ist) auf einer niedrigen Ebene zu erstellen, die mit dem Betriebssystem interagiert, scheint interessant. Das Problem ist, ich bin mir nicht sicher, wie ich genau anfangen soll, und brauche weitere Beispiele dafür, was ich damit mache.

Soll ich zunächst die Win32-API lernen? Ich kenne etwas C ++, da ich damit einige Konsolen-Apps und -Spiele erstellt habe, es aber seit einigen Jahren nicht mehr verwendet habe. Ist das der richtige Weg? Und was ist mit C? Ich plane, mehr über C zu lernen (mithilfe des K & R-Buches), bevor der Sommer endet und das College beginnt. Ich möchte einen guten Vorsprung als Studienanfänger mit einem soliden Programmierhintergrund haben.

Ryan
quelle
Ich denke, Sie sollten Ihre Frage klären: Was möchten Sie tun? Ein Betriebssystem schreiben? Folgen Sie dem SIGOPS-Tutorial und lesen Sie das Tanenbaum-Buch. Win32 lernen? Es gibt das Petzold-Buch (obwohl ich nicht sicher bin, warum jemand es ohne ein starkes Motiv tun möchte). Gerätetreiber? Systemprogrammierung ist ein so weit gefasstes Konzept.
Vitor Py
Warum sagen Sie, dass etwas Win32 ohne ein starkes Motiv nicht lernen möchte?
Ryan
2
Da die rohe Win32-API viel Cruft enthält: Sie stammt von der Win16-API, und es gibt eine Menge Dinge, die wenig sinnvoll erscheinen. Die Verwendung eines modernen GUI-Toolkits für den größten Teil Ihrer Anwendung und das Aufrufen einiger Methoden der Win32-API, wo Sie sie wirklich benötigen, ist normalerweise ein besserer und weniger schmerzhafter Ansatz.
Vitor Py

Antworten:

6

Die Idee, Software (ich bin mir nicht einmal sicher, ob dies die richtige Terminologie ist) auf einer niedrigen Ebene zu erstellen, die mit dem Betriebssystem interagiert, scheint interessant.

Ich glaube, Sie verwechseln die Systemprogrammierung mit der Anwendungsentwicklung . Die Systemprogrammierung würde eher dem Schreiben des Betriebssystems entsprechen und nicht mit diesem interagieren. Ich würde wahrscheinlich vorschlagen, mit der regelmäßigen Anwendungsentwicklung zu beginnen (unter Windows wäre dies die WinAPI ) und dann mit der Erforschung von Subsystemen fortzufahren, die Sie in der Tiefe interessant finden.

K & R ist offensichtlich die endgültige Anleitung zu C, und wenn Sie auf Windows-Anwendungen abzielen, würde ich dringend empfehlen, eine Kopie von Programming Windows zu erwerben .

Wenn Sie wirklich an Interaktionen auf "niedriger Ebene" interessiert sind, kann ich Ihnen auch die Win32 Assembly- Tutorials von Iczelicon vorschlagen ( MASM ist großartig und auch kostenlos).

Wenn Sie es schaffen, auch nur einen Bruchteil dieser Informationen vor Ihrem ersten Studienjahr zu erfassen, sind Sie wahrscheinlich fast allen anderen um Lichtjahre voraus.

Brandon Moretz
quelle
Es fällt mir wirklich schwer, die Win32-API jemandem zu empfehlen. Warum nicht etwas Moderneres und Verwendbareres wie Qt, GTKmm oder sogar MFC ins Visier nehmen? Ich sehe keine Verwendung für die Win32-API-Programmierung, obwohl ich sie für einige Jobs gelernt habe.
Vitor Py
@ Victor Ich denke, es kommt wirklich auf die persönlichen Vorlieben an. Ich habe mir auf Win32 C "die Zähne geschnitten", also habe ich wohl eine persönliche nostalgische Verbindung dazu. Obwohl ich es in meinem aktuellen Job nicht sehr oft benutze, benutze ich es immer noch regelmäßig für Personenprojekte / Freizeitentwicklung (hauptsächlich über Interop- oder CLI / C ++ - Wrapper und dergleichen). Ich denke, dass direktes Win32 C "näher am Metall" ist, wie es das OP wünscht, als die Abstraktionsebenen, die Frameworks bieten (insbesondere MFC, guter Herr ...).
Brandon Moretz
10

Schreiben Sie ein kleines eingebettetes Projekt auf einen eingebetteten Controller wie den Arduino. Dies ist eine großartige Möglichkeit, um mit dem Programmieren von Lernsystemen zu beginnen, da Sie damit auf einer grundlegenden Ebene beginnen und in diese hineinwachsen können.

Robert Harvey
quelle
+1 für "auf den Punkt" Antwort. Können Sie mehr erklären und mehrere Referenzen hinzufügen?
Md Mahbubur Rahman
Auf der Arduino-Website werden wichtige Informationen zur Plattform und ihrer Verwendung sowie zu vielen anderen Ressourcen, die bereits im Internet verfügbar sind, ausführlich beschrieben.
Robert Harvey
4

Wenn Sie an Systemprogrammierung interessiert sind, gibt es nichts Schöneres, als tatsächlich auf einem Betriebssystem zu arbeiten (entweder auf dem Kern des Betriebssystemkerns oder auf den zugehörigen Gerätetreibern).

Ich würde daher vorschlagen, sich an der Linux-Entwicklung zu beteiligen - es ist eine sehr gute Community, um mehr über Betriebssystem-Interna zu erfahren. Ich habe eine Menge über Betriebssysteme gelernt, indem ich einfach den Diskussionslisten für Linux-Kernel gefolgt bin .

Es ist auch eine Gelegenheit, ein konkretes Projekt anzunehmen und Ihre Fähigkeiten zu verbessern. Als Personalvermittler von Softwareentwicklern nehme ich es sehr zur Kenntnis, wenn jemand zu einem Open Source-Projekt beigetragen hat - es ist fast immer ein positiver Indikator für Können und Engagement!

mikera
quelle