Cómo ser perfecto para practicar la programación en C en los próximos 2 meses

La idea de ser “perfecto” en la práctica de la programación en C en 2 meses probablemente no sea un objetivo realista. Sin embargo, puede familiarizarse con todas las herramientas que ofrece el lenguaje C.

La competencia en C es un poco como ser competente con un conjunto de herramientas de 60 piezas. Debe conocer todas las herramientas del kit, dónde se usa adecuadamente y qué problemas puede causar su mal uso.

Las herramientas que necesitará para la programación incrustada en C incluyen punteros de datos, punteros de función, manipulación de bits, representación de complemento a dos (utilizada por prácticamente todas las arquitecturas incrustadas modernas), representaciones de estructura que incluyen el uso adecuado de la macro offsetof (), recursión, hilo seguridad, la diferencia entre variables globales, estáticas, automáticas y de registro, y el uso adecuado de la palabra clave “volátil”. Debería sentirse 100% cómodo con lo que hace exactamente un tipo de conversión, y qué tipo de sorpresas puede causar una conversión de tipo automática; por ejemplo, ¿qué sucede cuando pasa el número -1 a una función que espera un int sin signo? Debe comprender el alcance de la variable y lo que significa cuando una variable queda fuera de alcance.

También cerraré volviendo a lo primero que enumeré en el párrafo anterior: punteros de datos. Si no ha dominado totalmente el uso de punteros de datos, incluidos punteros a punteros, etc., entonces no es un programador experto en C. Por ejemplo, deberías poder explicar la diferencia entre estas declaraciones:

char * D;
char ** D;
char D [10];
char * D [10];
char (* D) [10];

Los primeros cuatro son paradigmas con los que puede esperar encontrarse con bastante frecuencia.
El quinto es menos común, pero sigue siendo razonable esperar que un programador de C entienda fácilmente el tipo de datos. Si desea probarse a sí mismo, vea si puede calcular los valores de sizeof (D) y sizeof (* D) para cada una de esas declaraciones.

Si se trata de (practicar) en lugar de (aprender), recomendaría encarecidamente desafiarse a sí mismo contra sus pares a través de alguna plataforma como http://www.hackerrank.com .

Este tipo de sitios web ofrece problemas, desde simples hasta intermedios o realmente complejos, y puede intentar resolverlos usted mismo.

También ofrecen competencias en todo el mundo y otorgan premios a los ganadores.

Realmente le recomendaría esto especialmente porque la tendencia en el examen técnico en muchas compañías ahora es pedirle que resuelva uno o más problemas de HackerRank.

Puedo ayudar en C / C ++ a través de mis servicios, ya sea a través de capacitación o soporte basado en proyectos

Estimado amigo mío, C y el diseño electrónico de un microprocesador son dos cosas diferentes. Si eres bueno con la programación en lenguaje ensamblador, aún necesitas entender cosas como “por qué los datos deben tener tipos”, qué es un compilador paralelo, cómo programar un microcontrolador [uno de 8 bits, aunque las aplicaciones muy básicas usan estos] que involucra varios archivos de encabezado que son específicos de la marca y modelo específicos del controlador, no se aplica directamente todo el C, etc.

Si tiene dos meses y nunca ha pasado una noche o dos escribiendo programas en C, la programación de nivel RTOS en C requiere saber no solo escribir un código muy eficiente, sino también saber cómo analizar la eficiencia del código que escribe. El mejor comienzo en C es del lenguaje de programación The C de Dennise Ritchie, escrito en 1988 con estándares ANSI. Se le permitiría pasar no más de 30-40 días leyendo este libro, e invariablemente significa que tiene que escribir los programas que sus ejercicios necesitan.

Ahora que mencionó que es minucioso con los conceptos, supongo que ya tiene ideas y un controlador favorito, PIC o AVR o ARM, tal vez, y está listo para intentar escribir código para programar un controlador para un proyecto específico. Luego puede intentar leer el código GitHub del kernel de Linux [sí, el kernel de Linux original que lanza Linus]. Si tiene una mente única, puede comprar un mega Arduino, instalar una distribución GNU / Linux como Ubuntu 14.04 o Apricity OS [Arch Linux clone] y escribir varios códigos en él para probar hasta qué punto sus habilidades de C pueden hablar con el controlador. El hack-a-day es una fuente encantadora donde puedes encontrar python y códigos C.

Por favor, no piense que estoy siendo un agujero, y si no lo ha hecho, lea rápidamente El libro, que es El lenguaje de programación C – Wikipedia. Tiene casi 40 años y todavía establece la mayoría de los estándares que usamos. Aunque tenían el estilo de sangría incorrecto (!) El resto del libro es perfecto.

También ayuda a desarrollar algunos proyectos rápidos y pequeños en su plataforma de elección, sea lo que sea. Y, dependiendo de su relación e impresión que haya tenido y dejado allí, podría ser (podría haber sido) útil pedirle a su entrevistador algunos consejos sobre qué temas desarrollar.

Finalmente, si tiene acceso a algunos proyectos de muestra de la organización u otras organizaciones con actividades similares, leerlos también sería útil.

Lee el código de otras personas.

Realiza proyectos reales en hardware real. Si no lo ha hecho con éxito, no tiene “un conocimiento profundo de los conceptos”.

Intenta poner esto en funcionamiento: greiman / NilRTOS-Arduino. Haga algo significativo con él (plataforma de estabilización, controlador CNC, lo que sea). Llévelo con usted a la próxima entrevista. Muestra cómo funciona; explica cómo funciona Por lo menos, esto le permite conducir la entrevista en sus términos.

Si desea practicar, puede intentar escribir sus propias implementaciones de la biblioteca estándar de C. Si hace esto, aprenderá la biblioteca estándar en profundidad y también practicará algunos casos de esquina bastante extraños en C.

Buena suerte consiguiendo el trabajo.