Quiero profundizar en C y normalmente cuando quiero aprender un nuevo lenguaje pienso en un objetivo de proyecto simple / alcanzable que tiene un propósito práctico (hacer uso de una API, automatizar una tarea, etc.)
Me está costando más trabajo encontrar uno para C, principalmente porque todo lo que leo apunta al hecho de que el uso principal de C actualmente es en sistemas embebidos y proyectos de software más complejos como los sistemas operativos.
¿Esto me señala el hecho de que no necesito aprenderlo o que solo necesito ser un poco más complicado en mi estrategia de aprendizaje?
¿Referencias a recursos prácticos de aprendizaje? (tutorial / cómo hacerlo produce un resultado final que tiene algún propósito / beneficio)
Respuestas:
Solo recomendaría recoger una copia de Kernighan y Ritchie's The C Programming Language (2nd Edition) . Tiene una serie de ejercicios al final de cada capítulo que puede hacer, además de proporcionar una muy buena introducción al lenguaje C. No lo convertirá en un maestro del lenguaje, pero debe tener una buena comprensión al final del libro y los ejercicios para quizás encontrar un proyecto de código abierto escrito en C en el que pueda leer la fuente y quizás contribuir a.
Si desea ver proyectos reales del mundo real con código C en ellos. Se está volviendo más difícil: muchos proyectos usan un lenguaje de "nivel superior", pero C todavía está vivo y coleando. Si quieres aprender C, no tengas miedo de reinventar la rueda para lograr el aprendizaje. No es una buena idea reinventar soluciones en el reloj, pero está perfectamente bien hacerlo como un ejercicio académico.
fuente
Tendrás que entender realmente la asignación de memoria. Parece que ha usado otros idiomas anteriormente, pero es probable que esos otros idiomas le oculten los detalles sangrientos de la administración de memoria. En C, la gestión de la memoria siempre es explícita. Hay algunas ventajas en esto, pero significa que debes tener cuidado para hacerlo bien o todo el infierno se desatará.
Utilice las funciones de depuración de memoria disponibles para la plataforma que utilice. Para Linux hay Electric Fence, en Mac OS X hay Guard Malloc. También existe Valgrind, que admite varios sistemas operativos.
Si no puede liberar la memoria que debería liberarse, tendrá una pérdida de memoria. Sigue haciendo eso y te quedarás sin memoria. Incluso con la tienda de respaldo (lo que la mayoría de la gente llama memoria virtual), puede hacer que el sistema pagine en exceso o incluso se quede sin espacio de intercambio.
Si libera memoria que ya se ha liberado, dañará el montón y se bloqueará, pero probablemente no de inmediato. También dañará el montón si sobrepasa un búfer. Las herramientas de depuración de memoria ayudarán con todo esto.
Las pruebas unitarias también ayudan.
fuente
Estoy de acuerdo con la mayoría de las personas aquí que hoy los idiomas están determinados por la tarea en cuestión. Hubo un tiempo en que tenías opciones limitadas a este respecto. Hoy en día, C se usa principalmente en el dominio de programación Embedded / System donde existe la necesidad de optimización de código. Necesitas escribir códigos precisos para obtener el máximo porque si alguna vez comienzas a usar esa abstracción, entonces el material subyacente tiene que ser muy robusto. Yo diría que intentas sortear algunos proyectos GNU de código abierto como Linux o algo que necesite desarrolladores C. Prueba tu suerte en esos proyectos en lugar de escribir algo nuevo en C. Esta es probablemente la mejor manera de escribir códigos y aprender un idioma.
fuente
Vas a querer hacer algo que funcione desde la línea de comandos. La programación de GUI en C es una molestia importante, incluso con un buen marco de GUI.
Mi sugerencia habitual para una experiencia práctica de aprendizaje de C ha sido una lista de contactos u otra aplicación de administración de datos simple. Eso cubrirá la mayoría de los bits importantes (E / S, administración de memoria, procesamiento de texto, etc.), y no tendrá que usar nada fuera de la biblioteca estándar de C para lograrlo. C no tiene ningún soporte incorporado para gráficos, redes, sonido o mucho más 1 , por lo que para su primera incursión en la programación de C es mejor evitar cualquier cosa que se base en ese tipo de cosas.
C puede usarse para programación de propósito general; solo tiene que reducir sus expectativas un poco (imagine que es 1983 y está sentado frente a un VT52 conectado a un VAX 11/750, y tendrá la mentalidad correcta).
Solo recuerda, C no tiene protectores de cuchillas y no te impedirá hacer algo estúpido. La definición del lenguaje es un poco floja en algunos lugares, y hay algunas operaciones que no son ilegales como tales, pero tampoco están bien definidas.
1 - La última revisión (2011) del estándar del lenguaje ha agregado soporte de subprocesos incorporado
fuente
Recomiendo el Proyecto Euler . Lo usé para mejorar mi C ++ y es increíble. Es genial porque cada problema es una tarea pequeña que puede tardar menos de una hora en completarse (al menos las primeras).
Necesitará un generador de perfiles y un libro sobre la optimización del código para la velocidad. Asegúrese de cumplir con la regla de 1 minuto: debe obtener la respuesta en 1 minuto.
fuente
Si ya eres un programador, y SOLO necesitas aprender C, y no te importa aprender una versión anterior del lenguaje (el núcleo sigue siendo prácticamente el mismo), entonces "C for Programmers" de Leendert Ammeraal no puede ser mejor. . Trabaja en ello, de principio a fin.
fuente