C es un lenguaje muy importante en el «mundo real». Se utiliza en muchísimas aplicaciones realmente interesantes, que abarcan cosas como los microcontroladores, las redes de sensores, los sistemas en tiempo real, los sistemas operativos y los juegos, por poner algunos ejemplos.
Sin embargo, el C que se utiliza no es la introducción básica a la programación que se enseña con C, que emplea cosas como cin, cout, y una serie de «trucos» para no «ver» cosas como los punteros. Los punteros están ahí, y no puedes evitarlos: para que C sea útil como lenguaje, tendrás que usar sus punteros.
El problema de usar las características de C que lo han hecho -y lo hacen- grande es que es muy difícil de depurar. Además, los programas grandes en C tienen cientos de miles de líneas, y eso hace ingobernable el editor simple de texto. Y con frecuencia trabajan decenas de personas en el mismo proyecto.
Parece evidente que los programas en C se terminan, se terminan sin errores, incluso los más grandes y los que involucran muchas personas. Pero eso se debe a que C no es apenas un compilador: la persona que programa profesionalmente en C conoce multitud de herramientas, que le facilitan la tarea de desarrollo para obtener productividades similares a los lenguajes de más alto nivel.
Y de eso va el curso.
Mi objetivo en el curso es darte un repaso de C, para «refrescar» conceptos (o aprenderlos; pero en ese caso, el curso te llevará más tiempo que el estimado. De cualquier forma, si entras sin tener ni idea de C, tanto por la documentación del curso como por los foros y las preguntas que me hagas, puedes aprender). Después pasamos a los punteros, que son el «gran olvidado» de muchos cursos donde se aprende a programar, y se aprende con C.
Y finalmente, viene la parte «divertida»: las herramientas. Decenas de herramientas que se utilizan para:
- Depurar código: Aplicaciones como lclint son capaces de localizar errores comunes, de forma estática, en tu código. Errores en el paso de parámetros, y el uso de punteros. Valgrind también te permite depurar programas con facilidad.
- Optimizar código: Valgrind también genera informes muy detallados de dónde «pierde el tiempo» tu aplicación, y dónde te interesa optimizar. Esto puede incluir partes del código, o funciones del sistema que realmente sean el cuello de botella de tu aplicación.
- Desarrollar proyectos grandes: Herramientas como Makefile son imprescindibles para los proyectos grandes, al permitir compilar por separado partes del código, sin obligarte a recompilar partes ya compiladas.
- Desarrollar proyectos entre varios: Sistemas de control de versiones como CVS o Subversion, que te permite saber quién ha hecho qué en cada momento, y hacer y deshacer según tus necesidades.
- Hacer código portable: Herramientas como autoconf y automake te permitirán hacer código portable, e independiente de la plataforma.
- Acelerar las compilaciones: Mediante herramientas como ccache y distcc, podrás acelerar las compilaciones en órdenes de magnitud.
- Interpretar archivos de configuración: lex y yacc sirven para más cosas que para hacer compiladores: con una fracción del lex y el yacc, puedes leer e intepretar archivos de configuración muy complejos, con poco trabajo.
Además de todo esto, te enseñaré bibliotecas que me han sido de mucha utilidad y me han permitido desarrollar aplicaciones en el «mundo real» en muy poco tiempo, suponiendo mejora de eficiencia por utilizar estas bibliotecas una ventaja respecto a mi competencia. Dentro de estas, veremos RPC, que permite hacer aplicaciones cliente-servidor en red con una facilidad pasmosa (y sin tocar un socket); a intercomunicar procesos en una misma máquina con las bibliotecas de System V, y también te enseñaré algunos trucos y técnicas para hacer tus programas más seguros en C, así como a usar el splint para buscar agujeros de seguridad.
En el curso cubro muchísimas herramientas, por lo tanto. Todas las documento; y te responderé las dudas que tengo sobre todas ellas. Como en todos los cursos que imparto, me gusta dar mucho valor por el curso que ofrezco, y le podrás dedicar mucho tiempo al aprendizaje de muchas cosas útiles. Como en el caso del curso de LaTeX, tengo que acotar la parte necesaria para obtener el certificado de aprovechamiento a 25 horas; por lo que las actividades para el certificado de aprovechamiento será instalar el gcc, hacer un programa que implemente una lista en C, y manejar adecuadamente Makefile, lclint y CVS (o subversion, según elijas). El resto de las prácticas serán opcionales, y te las recomiendo para aprender más y sacar el máximo partido a este curso.
Según el Vicerrectorado de Relaciones Universidad-Empresa, la Univesidad de Málaga convalida dos créditos de libre configuración por curso para los alumnos de titulaciones de plan antiguo, y un crédito ETCS para los de plan nuevo (grados). El curso costará 50€ a alumnos de la Universidad de Málaga, y 70€ a alumnos del curso que no pertenezcan a la UMA. La matriculación, por lo tanto, está abierta a gente de todo el mundo, y quizás os interese el curso.
La matriculación puedes hacerla aquí: curso de C. Si estás con dudas, te recomiendo que preguntes a otros alumnos sobre los otros cursos que han realizado conmigo (el de LaTeX, el de informática forense, o el de Perl) y que te cuenten cómo les ha ido.
Además de este curso, también oferto otro curso de teleformación sobre LaTeX: curso de LaTeX
Espero verte en el curso.