c - framework - tutorial django
¿Cómo practicar la programación de Unix en C? (8)
Después de cinco años de programación profesional Java (y en menor medida, Python) y poco a poco sentí que mi educación CS se escapaba, decidí que quería ampliar mis horizontes / utilidad general para el mundo y hacer algo que se sienta más (para mí) como Realmente tengo una influencia sobre la máquina. Elegí aprender programación C y Unix, ya que creo que es ahí donde se encuentran muchos de los problemas más interesantes.
Mi objetivo final es poder hacer esto profesionalmente, solo por el hecho de que tengo que gastar 40-50 horas por semana en el trabajo que paga las facturas, así que también puede ser el tipo de codificación que quiero mejorar en. Por supuesto, no te contratan para hacer cosas que no has hecho antes, así que por ahora estoy aumentando por mi cuenta.
Con este fin, comencé con K & R, que fue un gran recurso, en parte debido a los ejercicios repartidos a lo largo de cada capítulo. Después de eso pasé a Computer Systems: A Programmer''s Perspective , seguido de diez capítulos de Advanced Programming in Unix Environment . Cuando termine con este libro, leeré la Programación en red de Unix .
Lo que me estoy perdiendo en los libros de Stevens es la falta de problemas de programación; documentan principalmente la funcionalidad y proporcionan ejemplos, con algunas preguntas al final del capítulo siguientes. Siento que me beneficiaría mucho más si tuviera el desafío de utilizar el conocimiento en cada capítulo de K & R. Podría escribir algún programa de prueba para cada función, pero este es un método menos deseable ya que (1) Probablemente estaría menos motivado que si estuviera enfrentando algún desafío externo, y (2) naturalmente solo pensaré en usar la función en las formas en que ya se me ocurrió.
Entonces, me gustaría obtener algunas recomendaciones sobre cómo practicar. Obviamente, mi primera opción sería encontrar algún recurso que tenga desafíos de programación de Unix. También he considerado encontrar e intentar contribuir con algún proyecto de código abierto C, pero esto es un poco intimidante ya que habría algunos gastos generales para aprender a usar el software y luego aprender la base del código. El único proyecto C de código abierto que puedo pensar que uso regularmente es Python, y no estoy seguro de qué tan fácil sería comenzar.
Dicho esto, estoy abierto a todo tipo de sugerencias, ya que hay cosas probables que ni siquiera he pensado.
Yo recomendaría una cosa altamente.
Intenta y vuelve a escribir todas las herramientas habituales de líneas de comandos de Linux como ls, mkdir, cd, etc.
Ganarás muchos conocimientos sobre programación y Linux, ambos al mismo tiempo.
Elija los comandos más fáciles, diga "tiempo" y avance hasta los más complicados.
¿Estás abierto a sugerencias de libros? Aunque está un poco pasado de moda (donde "un poco" quizás sea una gran subestimación), "The Design of the Unix Operating System" de Maurice Bach es un gran libro. Pertenece al lado de K & R en su estantería.
La mejor manera de consolidar tus aprendizajes para practicar. Así que solo elija un tipo de aplicación que le interese y comience a desarrollarla (por ejemplo, una aplicación simple de cli / server de red). Intenta probar al máximo la API de Unix (archivos, conectores, etc.) para ver cómo funciona. Por ejemplo, podría obtener un libro de programación de Unix, seguir sus capítulos y probar en su aplicación todo lo que lea creando sus propias funciones. De esa forma, puede comenzar a desarrollar su propia biblioteca de funciones para usar en futuros proyectos.
Puede intentar abrirse camino a través de todos los ejemplos en el libro Software Tools (Amazon). Gran parte es bastante peatonal (justifica el texto, descifra, etc.), pero es una gran introducción a la filosofía de Unix y la programación básica de C.
Reinventa muchas de las utilidades centrales de Unix. La mayoría de estos fueron (y aún están) escritos en C, por lo que son una buena manera de comenzar a aprender. Dependiendo de su habilidad, elija utilidades más difíciles o más fáciles de copiar.
Intenta escribir tu propio malloc. Aprenderá mucho sobre Unix y mucha programación de C también.
Cursos de Google para el sistema operativo CS y hacer los proyectos allí. Muchas escuelas tienen estos proyectos en sitios web públicos para que pueda obtener todo lo que necesita. Aquí hay un enlace al sitio de Purdue. Dale una oportunidad al proyecto del caparazón, fue difícil pero realmente educativo.
Escribe un servidor web.
Hazlo multihilo.
Haga que sea compatible con un nuevo lenguaje de scripting que desarrolle (a la PHP, etc.)
Permitir cargas de usuarios autenticados.
Escriba un plugin para su herramienta favorita (es decir, integre con SVN para dar una vista web).
Esto es bastante interesante. Como sabemos que Unix está diseñado usando el lenguaje C, puede que no sea difícil de aprender. Si usa Windows OS, puede usar la aplicación "Servicios de Windows para Unix" para practicar sus programas. Si está usando Unix, entonces podemos usar editores como vi.
Aquí hay algunas publicaciones de que analizan los libros de programación de C / Unix. Su principal reclamo a la fama es una gran cantidad de fanáticos de otros recursos.
Practique algunos de los modismos (comprenda los pormenores de los indicadores, etc.) y elija proyectos que lo ayuden. El tercer elemento de la lista tiene una respuesta (cláusula de exención de responsabilidad, lo escribí) con un montón de modismos en C de alto nivel en los que un programa C idiomático sería diferente de Java.
Aprender la programación de GUI de XLib o Win32 con C es probablemente menos útil ya que casi todo es mejor que C para la programación de GUI y envolver un motor de núcleo C con otro idioma es generalmente mucho más fácil, a menos que realmente le preocupe la velocidad. Como punto de partida, concéntrese en las aplicaciones de programación de "sistemas", que es donde es más probable obtener un kilometraje real de C. Aprenda cómo funciona la interfaz C de uno de los lenguajes de scripting como Tcl o Python.
Escribir un código pesados y un puntero pesado (por ejemplo, seleccionar paquetes de red o interpretar un protocolo), o elementos del lado del servidor usando sockets te llevará directamente a las competencias centrales de C. Si tiene algunos de los libros de WRS, intente hacer que pthreads funcionen (IIRC UNP2 tiene una gran sección sobre pThreads). Para un contraste, escriba algo que use E / S sin bloqueo. Este es el territorio de C y obtendrás un buen conocimiento de C al hacer esto. Troll a través de los RFCs para algunas ideas de protocolos de red para implementar.