¿Comenzando con la programación del sistema? [cerrado]

8

Desde que descubrí la programación hace cinco años, he hecho muchas cosas. Aprendí numerosos lenguajes y tecnologías de programación y probé muchas cosas interesantes. He escrito juegos, tanto de consola como con gráficos, consola y aplicaciones con ventana que se ejecutan en el escritorio, aplicaciones web CRUD, mi propia (horrible) base de datos de archivos planos basada en XML de PHP. Además de la Web y el escritorio, probé el desarrollo móvil con Android pero no lo disfruté, así que lo detuve. Recientemente terminé un proyecto web mío y estoy aprendiendo programación funcional en este momento (Haskell).

Pero nunca antes había incursionado en la programación del sistema. La idea de construir software (ni siquiera estoy seguro de si esa es la terminología correcta para usar) a un nivel bajo que interactúa con el sistema operativo parece interesante. El problema es que no estoy seguro de cómo empezar exactamente y necesito más ejemplos de lo que hago con esto.

¿Debo comenzar aprendiendo la API de Win32? Conozco C ++, ya que lo he usado para hacer bastantes aplicaciones de consola y juegos, pero no lo he usado en algunos años. ¿Es ese el camino a seguir? Además, ¿qué pasa con C? Estoy planeando aprender algo más sobre C (usando el libro K&R) antes de que termine el verano y comience la universidad. Quiero tener una buena ventaja como estudiante de primer año universitario con una sólida formación en programación.

Ryan
fuente
Creo que deberías aclarar tu pregunta: ¿qué quieres hacer? Escribir un sistema operativo? Sigue el tutorial de SIGOPS, lee el libro de Tanenbaum. Aprender Win32? Está el libro de Petzold (aunque no estoy seguro de por qué alguien querría hacerlo sin un motivo fuerte). ¿Controladores de dispositivo? La programación de sistemas es un concepto tan amplio.
Vitor Py
¿Por qué dices que algo no querría aprender Win32 sin un motivo fuerte?
Ryan
2
Debido a que la API Win32 sin procesar conlleva una gran cantidad de problemas: proviene de la API Win16, hay muchas cosas que parecen tener poco sentido. Usar un kit de herramientas GUI moderno para la mayoría de sus aplicaciones y solo llamar a algunos métodos de la API de Win32 donde realmente lo necesita es generalmente un enfoque mejor y menos doloroso.
Vitor Py

Respuestas:

6

La idea de construir software (ni siquiera estoy seguro de si esa es la terminología correcta para usar) a un nivel bajo que interactúa con el sistema operativo parece interesante.

Creo que está confundiendo la programación del sistema con el desarrollo de aplicaciones . La programación del sistema sería más similar a escribir el sistema operativo, no interactuar con él. Probablemente sugeriría comenzar con el desarrollo regular de aplicaciones (en Windows, que sería WinAPI ), y luego explorar los subsistemas que encuentre interesantes en profundidad.

K&R es obviamente la guía definitiva sobre C, y si va a apuntar a aplicaciones de Windows, le recomiendo que elija una copia de la Programación de Windows .

Si está realmente interesado en las interacciones de "bajo nivel", también podría sugerirle los tutoriales de ensamblaje Win32 de Iczelicon ( MASM es genial, y también es gratis).

Si logras captar incluso una fracción de esa información antes de tu primer año de universidad, estarás a años luz probablemente de casi todos los demás.

Brandon Moretz
fuente
Para mí es muy difícil recomendar la API Win32 a alguien. ¿Por qué no apuntar a algo más moderno y utilizable como Qt, GTKmm o diablos, incluso MFC? No veo ningún uso para la programación de la API Win32, a pesar de haberla aprendido durante algunos trabajos.
Vitor Py
@Victor Supongo que realmente se trata de una cuestión de preferencia personal. "Me corté los dientes" en Win32 C, así que supongo que tengo una conexión nostálgica personal. Aunque no lo uso con mucha frecuencia en mi trabajo actual, todavía lo uso regularmente para proyectos personales / desarrollo recreativo (principalmente a través de envoltorios Interop o CLI / C ++ y demás). Creo que el Win32 C directo está "más cerca del metal", ya que el OP es más deseable que las capas de abstracción que ofrecen los frameworks (especialmente MFC, buen señor ...).
Brandon Moretz
10

Considere escribir un pequeño proyecto integrado en un controlador integrado como el Arduino. Esta es una excelente manera de comenzar el proceso de programación de sistemas de aprendizaje, porque lo inicia en un nivel básico y le permite crecer en él.

Robert Harvey
fuente
+1 para la respuesta "al punto". ¿Puedes explicar más y agregar varias referencias?
Md Mahbubur Rahman
El sitio web de Arduino entra en detalles significativos sobre la plataforma y cómo usarla, así como muchos otros recursos ya disponibles en Internet.
Robert Harvey
4

Si está interesado en la programación de sistemas, no hay nada mejor que trabajar en un sistema operativo (ya sea en el núcleo del núcleo del sistema operativo o en los controladores de dispositivo relacionados)

Por lo tanto, sugiero participar en el desarrollo de Linux: es una comunidad muy buena para aprender sobre aspectos internos del sistema operativo. Aprendí muchísimo sobre los sistemas operativos simplemente siguiendo las listas de discusión del kernel de Linux ...

También es una oportunidad para asumir un proyecto tangible y mejorar sus habilidades. Como reclutador de desarrolladores de software, me doy cuenta cuando alguien ha contribuido a un proyecto de código abierto: ¡casi siempre es un indicador positivo de habilidad y compromiso!

mikera
fuente