C, ¿cómo avanzar?

Iniciado por elabandonao, 25 Agosto 2019, 16:24 PM

0 Miembros y 1 Visitante están viendo este tema.

elabandonao

Que tal,
Soy nuevo en el foro, en la universidad aprendí C, creo que lo básico, siempre me guié con el libro The C Programming Language, actualmente he practicado y releído cada uno de sus ejercicios, mi pregunta es después de este libro como puedo avanzar con el lenguaje.
No se si C sea tan usado o no en la industria ayuda con esa inquietud también jeje; pero personalmente quiero aprender más del grandioso C, pero no se que línea seguir, por eso quiero que alguien más experimentado me puede dar su sugerencia, también manejo python y java en nivel medio-básico (lo que se aprende en los típicos cursos de facultad) por la universidad, pero quisiera saber mucho más de C, hasta ahora es el que más me ha interesado, y como creo q es mejor; me manejo con el ANSI C en linux :).
Toda sugerencia o crítica la acepto.
Todos los días se aprende algo nuevo, así que agradecería me ayuden :).

@XSStringManolo

Hola, depende de que objetivos tengas con el lenguaje. Lo mejor es que sigas leyendo libros, postees tus dudas que aquí hay gente con buenos conocimientos y que sigue buenas prácticas y sobre todo que te pogas a hacer cosas.

Si tu objetivo es formar parte de la plantilla de alguna empresa es mejor que te enfoques en los lenguajes mainstream. Java, Python, javascript, php y c# entre otros. Y aprendas a utilizar librerías y frámeworks populares y enfocadas a la productividad del lenguaje que elijas.

La mayoría de lenguajes mainstream vienen de C, asique todo lo que aprendas en él en mayor o menor medida será útil. Busca ofertas de trabajo por tu zona, y ya ves que es lo que demandan las empresas y puedes enfocarte en ello.

Si te interesa el opensource, contribuir, subir tus proyectos para que te ayude la comunidad y desarrollar como hobby o por tu cuenta con tus proyectos, o conocer más en profundiad las cosas, C++ está muy bien.
Muchos se han forrado de esta manera. Mira al creador de Minecraft que hicieron el juego creo que solos su mujer y él.

Puedes compilar C en el mismo código con el mismo compilador de C++, asique puedes convinar ambos lenguajes.
Para temás más orientados al hardware C está muy bien porque es más bajo nivel, ya sea drivers, placas, etc.

Lo importante es que leas libros y te informes sobre tus objetivos. El lenguaje no es la "finalidad" es una herramienta.

MAFUS

Prueba a pillar GLib y haces aplicaciones GUI para Linux, funciona en C.
O puedes decantarte por el mundo de los periféricos/microbótica/domótica y programar microcontroladores.

O puedes quedarte en el mundo intermedio del kernel de Linux o puedes realizar herramientas para usuario en modo texto.

RayR

Sigue leyendo y, sobre todo, haz programas. Un error que cometemos muy comúnmente es sobrestimar nuestro conocimiento. Cualquier libro, incluso de los buenos, por sí sólo únicamente te enseñará una pequeña parte de lo que hay que saber, así que lo que sigue es, además de buscar libros sobre cosas más avanzadas, hacer muchos programas para asegurarte de haber aprendido bien lo que leíste. Sólo con programas de libro no vas a llegar muy lejos. Puedes haberte leído un manual de 1000 páginas de C o C++ y haber hecho todos los ejercicios, y aún así, tu nivel no pasará de básico, a menos de que por tu cuenta intentes hacer cosas más complejas y bien hechas.

Te voy a dar un ejemplo muy sencillo que siempre me ha parecido muy útil para ilustrar el punto (es un ejercicio para hacerse uno mismo, no hace falta responderlo en un foro).  Imagina que tienes el siguiente fragmento de código:

printf("Escribe un numero: ");
scanf("%d", &num1);
printf("Escribe un numero: ");
scanf("%d", &num2);


Es un simple programa que pide dos números (y digamos que al final los muestra, para comprobar que los leyó correctamente). Es casi un "Hola mundo", un juego de niños, ¿cierto...? ¿Pero qué pasa si el usuario escribe letras en lugar de números? Sin consultar ningún libro, simplemente observando esas 4 líneas, ¿sabes exactamente de qué manera va a fallar el programa? ¿Que vería el usuario luego de teclear, digamos, "asdf" en el primer scanf? ¿Por qué falla de esa forma? E igualmente importante, ¿podrías corregirlo, de nuevo, sin consultar manuales e incluso sin recurrir a un compilador? No necesitaría ser perfecto; simplemente que lea dos números y, si el usuario escribió símbolos que no son números, lo detecte, informe del error, y vuelva a pedir el número, todo esto con scanf. Ojo, que hay mejores formas de leer datos, por ejemplo, usando fgets y parseando la cadena leída, pero en este caso de lo que se trata es de ver si sabemos cómo funciona scanf, que es una de las primeras funciones que se aprenden en C. Y ya que estamos ¿por qué en la enorme mayoría de los casos, al trabajar con ints, deberíamos usar el especificador %d en lugar de %i (que muchos tutoriales usan :-\)?

La cuestión es que muchísima gente que se ha leído libros enteros sobre C no es capaz de corregir mentalmente esto que es poco más que un Hola mundo. Y esto no es una crítica, ni a los programadores ni a los libros. Es entendible: escribir código correcto y (casi) libre de errores es muy difícil, tedioso, y conlleva muchísimo trabajo. Cualquier manual tendría que tener 2000 páginas o más. El punto aquí es entender que los libros únicamente nos dan una base. Enseñan poco sobre muchos temas. Lo que nos toca después de leerlos es profundizar en ellos. El ejemplo de arriba tiene como objetivo hacernos pensar (suponiendo que no podamos contestar todas las preguntas/corregir el programa sobre papel): si en un ejercicio tan simple ya tenemos algunas carencias, ¿cuánto nos falta aprender sobre tantos temas que creíamos dominados? Te recomiendo que intentes hacer programas con lo que ya sabes, pero tratando de que sean correctos. Intenta hacer que tus programas fallen, y cuando lo hagan, investiga por qué y corrígelos. Esto te ayudará a profundizar en la programación de una forma en que difícilmente se consigue sólo con libros. Cuando sientas que ya eres capaz de hacer programas más o menos correctos con todos los temas básicos de C, busca libros, no tanto sobre el lenguaje en sí sino sobre aplicaciones del lenguaje. Programación de aplicaciones en red, multihilo, bases de datos, videojuegos o lo que te interese. Y de nuevo, ten presente que los ejemplos que veas en libros y tutoriales son sólo para fines didácticos. Están muy, pero muy lejos de tener calidad de producción. Te toca a ti mejorarlos y hacerlos casi a prueba de fallos. La mejor forma de aprender cómo funciona algo es rompiéndolo y viendo qué tiene dentro.

Sobre tu otra duda, si te gusta programar en C, aprender C++ podría ser una buena opción. La mayor parte de lo que hay en C es válido en C++, además de que tiene más salida laboral, y aunque actualmente hay varios lenguajes mucho más solicitados por las empresas, hay muy pocos buenos programadores en C++. Las empresas sufren bastante para conseguir personal calificado y en muchas ocasiones tienen que traerlos de otros países, o terminan contratando gente que no cumple al 100% con los requisitos, y los tienen que capacitar, y aún así muchas veces al final no se quedan, y se pierde tiempo y dinero en eso. Si aprendes realmente bien C++, no vas a tener mucha competencia y seguro no te faltará trabajo.