¿Dónde comenzar (auto) aprender C, o debo aprender un idioma diferente?

Últimamente, descubro cada vez más que es bueno tener un amplio conocimiento de los fundamentos de la progtwigción. Lamentablemente, soy (uno de los muchos) desarrolladores de PHP autodidactas y no me arrepiento de haber elegido ese camino.

Sin embargo, sigo pensando que debería ampliar mi conocimiento a algunos lenguajes de progtwigción “reales” a partir de cero y acumular mi conocimiento a partir de ahí. No tengo ninguna intención de cambiar mi trayectoria profesional, pero creo que sería bueno pensar fuera del cuadro de desarrollo web.

Prefiero no tomar clases o cursos, porque simplemente no tengo tiempo para esto. Asi que:

  • ¿Cuál es la mejor manera de enseñarme C paso a paso, comenzando desde el nivel cero?

  • Como mi principal objective es aprender más conceptos básicos de progtwigción, ¿es C una buena opción para esto?

  • Si no, ¿qué idioma sería?


Resumen hasta ahora:

En primer lugar, gracias por todas las grandes respuestas. Estos serán muy útiles. Aunque la mayoría de las personas parecen estar de acuerdo en que comenzar con C no es una mala elección, también he visto que las personas afirman que es probablemente una mejor idea omitir C e ir con C ++ o incluso C # , ya que estos idiomas son más actuales.

Mi opinión personal es que sería bueno comenzar desde el nivel cero , incluso si el lenguaje en sí no contribuye directamente a las cosas que hago. Todavía creo que indirectamente me hará un mejor progtwigdor. Pero una vez más, como he dicho, mi conocimiento de estos idiomas es bastante limitado, por lo que me encantaría escuchar sus pensamientos sobre el tema también.

Lea Kernighan y Ritchie “El lenguaje de progtwigción C”. Es el clásico.

Es el libro escrito por los creadores originales del lenguaje. Es corto, y muy legible y bien escrito.

Tengo que estar en desacuerdo con las dos respuestas anteriores que recomiendan la famosa guía “K&R”. No pude aprender nada de ese libro; Simplemente me di por vencido después de leer el primer tercio del libro unas tres veces. Tal vez solo soy tonto.

Sugiero, en cambio, este maravilloso libro: Progtwigción en C: un enfoque moderno (descargo de responsabilidad: enlace de Amazon)

Aprendí todo lo que necesito saber sobre C de ese libro, y cubre la historia tanto como se necesita hacer, sin dejar de tener un punto de vista “moderno”.

Advertencia: no llegué a C “para C”, lo pasé de camino hacia mi objective final, la progtwigción de Objective-C y Cocoa para aplicaciones de escritorio en Mac OS X de Apple. Si realmente desea un conocimiento profundo de C, puede que no te duela conseguir los dos libros mencionados y leer la guía de K&R después de leer Modern C

Mi primer paso para seleccionar C fue una copia de “El lenguaje de progtwigción C”. Es un libro simple, pero el lenguaje es bastante simple.

Bueno, si desea “comenzar desde el nivel cero”, recomiendo aprender ensamblaje. si asamblea Aprendí 6502, puedes aprender x86 si te gusta o armar o mips. Encuentra un emulador o un interruptor y lee algunos tutoriales. Comprenderá exactamente cómo funciona una CPU y el código tendrá mucho más sentido (por ejemplo, ¿por qué getkeys no se actualiza hasta que usted ejecuta pollkeys, etc.)?

Después de eso recomiendo C # porque no es tan desagradable como c / c ++ (principalmente uso c ++). Comprenderá cómo una línea C # podría representarse en ensamblaje. C # le permite hacer más cosas que desea hacer a diferencia de c y c ++ (aquí hay una lista de cosas que podemos hacer en c ++ que podremos hacer en el siguiente estándar http://en.wikipedia.org/wiki/ C% 2B% 2B0x , C # tiene algunos de estos).

Si quiere aprender mucho, puede intentar aprender el idioma que recomiendo aquí https://stackoverflow.com/questions/498964/the-difficulty-in-learning-new-languages-by-yourself/578618#578618, que creo Es una buena idea después del assembly.

Si habla alemán, le sugeriría un libro abierto de Galileo Computing .

Otra opción si desea aprender los fundamentos de la progtwigción es leer El arte de la progtwigción de computadoras de Knuth. Esto le introducirá a los fundamentos desde el principio de los tiempos. Para una comprensión extra, implementa los algoritmos tu mismo en C.

Hay un curso universitario en las universidades de Indiana y Purdue sobre progtwigción en C. El curso tiene video conferencias que puedes encontrar aquí .

Si también está interesado en ver C ++, hay un montón de conferencias en el Proyecto de Archivo de Lecturas Web llamado “C ++ para Físicos de Partículas”. Encuentras esas conferencias aquí . Las conferencias están a cargo de Paul Kunz de la Universidad de Stanford.

Para obtener más conferencias de C ++, también puede consultar estas conferencias en Redes de reconexión.

C es una buena opción para la educación general. Sin embargo, antes de leer los libros, seguiría algunos tutoriales de IDE, por lo que te familiarizarás con los proyectos de construcción y los archivos make, esos dos serán los mayores desafíos a los que te enfrentarás inicialmente, y rara vez se tratan en ningún libro.

Lea “El lenguaje de progtwigción C”. Escribir ejercicios cortos (algunos están en el libro). Utilice un comstackdor, como gcc .

El lenguaje de progtwigción C es un buen punto de partida.

Además, C en sí mismo es un buen punto de partida para aprender los fundamentos de la progtwigción: puede encontrar software para C y desarrolladores de C en casi todas partes y muchos otros lenguajes tienen raíces en C, como C ++, C #, Objective-C, …

Después de leer “El lenguaje de progtwigción C” como muchos sugirieron, comenzaría a buscar en proyectos de código abierto y aprendería de ejemplos prácticos. Hay mucho y no es fácil encontrar el correcto, pero aprender de leer un buen código es la mejor alternativa para aprender de un buen progtwigdor 🙂
Si tiene uno: la progtwigción en pares o simplemente las revisiones de códigos mutuos es la mejor manera de aprender.

1) El lenguaje de progtwigción C K&R 2) Lee un montón de código fuente C. Búsqueda de código de Google

Eso es todo.

Si desea leer un buen código fuente, le sugiero sinceramente a Simon Tatham’s Puzzle Collection ( http://www.chiark.greenend.org.uk/~sgtatham/puzzles/ , desplácese hacia abajo hasta la parte inferior para obtener documentación del desarrollador). De ella, puedes aprender:

  • Cómo realizar una progtwigción similar a un objeto en C (cada juego es, en cierto sentido, una clase que implementa la interfaz del “juego”).
  • Cómo escribir C portátil (oculta todas las cosas que no se pueden portar detrás de tu propia interfaz).
  • Cómo comentar y documentar su código.
  • ¿Cómo hacer la progtwigción GUI en C.
  • Cómo implementar estructuras de datos en C (recuerdo el hallazgo de unión y los 2-4 árboles que se están realizando).

Creo que su enfoque actual es incorrecto. C es actualmente un subconjunto de C ++ y no tiene muchos de los conceptos de un lenguaje moderno de OO. En la mayoría de los casos, está relegado a sistemas heredados, y la mayoría de los nuevos desarrollos que no están vinculados al código heredado no están escritos en C. Personalmente, comencé con C ++ (autodidacta) y me trasladé a C #. Comenzar en C ++ le brinda todos los elementos básicos que necesita para comprender la orientación a objetos y lo que sucede a un nivel bajo. Sin embargo, para alguien que acaba de comenzar, ahora recomendaría C # por la sencilla razón de que es mucho más fácil despegar y comenzar a correr con él. Además, varios de los conceptos en c # tienen pocos análogos en el mundo C y hacen que la progtwigción sea mucho más intuitiva (LINQ, lambdas, etc.). Si bien la administración de la memoria es importante (y ocasionalmente aparece en C #), es doloroso de administrar, y es más fácil no preocuparse al comenzar. Cuanto antes pueda comenzar un proyecto interesante, menos probabilidades tendrá de darse por vencido.

1) Kernighan y Ritchie

2) Escribir código sólido

3) Código Completo

Acerca de aprender c

Si realmente desea aprender el libro C, [Kernighan and Ritchie “The C Programming Language”] ( http://en.wikipedia.org/wiki/The_C_Programming_Language_(book)) es un buen comienzo.

Sin embargo, hoy en día, en mi opinión, aprender C es solo un ejercicio mental, puedes aprender muchos detalles importantes como, por ejemplo:

  1. Diferencia entre el operador igual ( == ) y la instrucción de asignación ( = ),
  2. La expresión puede tener valor (es decir, a = 1 tiene valor 1),
  3. Punteros aritméticos,
  4. Operaciones directas de memoria (es decir, memset() , memcpy() ).

Estas cosas son interesantes para los desarrolladores, pero la mayoría de ellas no se usan en el desarrollo actual de aplicaciones (excepto los dos primeros puntos anteriores).

Sin embargo, si intenta participar en alguna computadora desde las competiciones, el lenguaje C puede ser útil.

Mi recomendación

Aprendería C # porque es un lenguaje de progtwigción moderno, bien diseñado (en mi opinión) orientado a objetos con IDE bueno y gratuito – Visual Studio Express Edition , buen soporte (amplia comunidad, mucho código fuente para estudiar, mucho tutoriales y ejemplos). Con C # puede escribir aplicaciones de consola, aplicaciones de escritorio o aplicaciones web, lo que facilita el aprendizaje al resolver una amplia gama de problemas reales.

Además, en la plataforma .NET hay otras opciones interesantes: IronPyton o F # funcional.

Déjanos C por Yeshvant P Kanitkar