varios - ¿Por dónde empezar(auto) C, o debería aprender un idioma diferente?
duolingo (17)
1) El lenguaje de programación C K & R 2) Lee mucho código fuente C. Búsqueda de código de Google
Eso es todo.
Últimamente, descubro más y más que es bueno tener un amplio conocimiento de los fundamentos de la programación. Lamentablemente, soy (uno de los muchos) desarrolladores de PHP autodidacta y no me arrepiento de elegir ese camino.
Sin embargo, todavía creo que debería extender mi conocimiento a algunos lenguajes de programación "reales" comenzando desde cero y desarrollar mi conocimiento a partir de ahí. No tengo intención de cambiar mi carrera, pero creo que sería bueno pensar en la caja 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 objetivo principal es aprender más fundamentos de programación, ¿C es incluso una buena opción para esto?
Si no, ¿qué idioma sería?
Resumen hasta el momento:
Antes que nada, gracias por todas las excelentes respuestas. Estos serán bastante útiles. Aunque la mayoría de la gente parece estar de acuerdo en que comenzar con C no es una mala opción, también he visto a personas decir que probablemente sea mejor idea omitir C e ir con C ++ o incluso con C # , ya que estos idiomas son más actuales.
Mi opinión personal sigue siendo que sería bueno comenzar desde el nivel cero , incluso si el lenguaje en sí mismo no contribuye directamente a las cosas que hago. Sigo creyendo que indirectamente me hará un mejor programador. Pero, de nuevo, como dije, mi conocimiento de estos idiomas es bastante limitado, por lo que también me gustaría escuchar sus opiniones sobre el tema.
C es una buena opción para la educación general. Sin embargo, antes de seguir con los libros, seguiré algunos tutoriales de IDE, para que te familiarices con los proyectos de construcción y los archivos make, esos dos serán los mayores desafíos que enfrentarás inicialmente, y rara vez se cubren en ningún libro.
Creo que su enfoque actual es incorrecto. C es actualmente un subconjunto de C ++ y no tiene muchos de los conceptos de un lenguaje OO moderno. En la mayoría de los casos, se relega a sistemas heredados, y la mayoría de los nuevos desarrollos que no están vinculados al código heredado no se escriben en C. Personalmente, comencé con C ++ (autodidacta) y se movió a C #. Comenzar en C ++ le brinda todos los conceptos básicos que necesita para comprender la orientación del objeto y lo que está sucediendo en 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 programación sea mucho más intuitiva (LINQ, lambdas, etc.). Si bien la administración de la memoria es importante (y de vez en cuando aparece en C #), es doloroso de administrar y es más fácil no preocuparse a medida que se inicia. Cuanto antes pueda comenzar un proyecto interesante, es menos probable que se dé por vencido.
Después de leer el "The C Programming Language", como muchos sugirieron, comenzaría a buscar 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 codificador :)
Si tiene uno alrededor: la programación de pares o simplemente las revisiones de códigos mutuos es la mejor forma de aprender.
Hay un curso universitario en las universidades de Indiana y Purdue en C-programación. El curso tiene video conferencias que puedes encontrar aquí .
Si también está interesado en mirar C ++, hay un montón de conferencias en el Proyecto de Archivo de Conferencia Web llamado "C ++ para Físicos de Partículas". Encuentra esas conferencias aquí . Las conferencias están en manos de Paul Kunz de la Universidad de Stanford.
Para más conferencias en C ++, también puede consultar estas conferencias de Reconnect Networks.
Lea "El lenguaje de programación C". Escribir ejercicios cortos (algunos están en el libro). Use un compilador, como gcc .
Lea Kernighan y Ritchie "The C Programming Language". Es el clásico.
Es el libro escrito por los creadores originales del lenguaje. Es corto, muy legible y está bien escrito.
Mi primer paso para recoger C fue una copia de "The C Programming Language", es un libro simple, pero el lenguaje en sí mismo es bastante simple.
Otra opción si desea aprender los fundamentos de programación es leer Knuth''s The Art of Computer Programming . Esto te presentará los fundamentos desde el principio de los tiempos. Para una mayor comprensión, implemente los algoritmos usted mismo en C.
Si habla alemán, le sugiero un libro abierto de Galileo Computing .
Tengo que estar en desacuerdo con las dos respuestas anteriores que recomiendan la famosa guía "K & R". Fui completamente incapaz de aprender algo de ese libro; Simplemente me di por vencido después de leer el primer tercio del libro unas tres veces. Tal vez soy tonto.
Sugiero, en cambio, este maravilloso libro: C Programming: A Modern Approach (descargo de responsabilidad: Amazon Link)
Aprendí todo lo que necesito saber sobre C de ese libro, y cubre la historia tanto como debe hacerse, manteniendo un punto de vista "moderno".
Advertencia: No vine a C "por C", lo revisé en el camino hacia mi objetivo final, la programación Objective-C y Cocoa para aplicaciones de escritorio en Mac OS X de Apple. Si realmente quieres un conocimiento profundo de C, puede que no duela obtener los dos libros mencionados anteriormente y leer la guía K & R después de leer Modern C
Vamos a C por Yeshvant P Kanitkar
El lenguaje de programació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 programación: puede encontrar software C y desarrolladores C casi en todas partes y muchos otros lenguajes se basan en C, como C ++, C #, Objective-C, ...
Si desea leer un buen código fuente, le sugiero encarecidamente la Colección de rompecabezas de Simon Tatham ( http://www.chiark.greenend.org.uk/~sgtatham/puzzles/ , desplácese hasta la parte inferior para obtener la documentación del desarrollador). De él, puedes aprender:
- Cómo hacer una programació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 (ocultar todas las cosas no portables detrás de su propia interfaz).
- Cómo comentar y documentar tu código.
- Cómo hacer programación de GUI en C.
- Cómo implementar estructuras de datos en C (recuerdo el hallazgo de unión y 2-4 árboles en ejecución).
Sobre aprender C
Si realmente quiere aprender C, [Kernighan and Ritchie, libro de "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 ejercicio mental: puedes aprender muchos detalles importantes como, por ejemplo:
- Diferencia entre operador igual (
==
) e instrucción de asignación (=
), - La expresión puede tener valor (es decir,
a = 1
tiene valor 1), - Aritmética de punteros,
- Operaciones de memoria directa (es decir,
memset()
,memcpy()
).
Estas cosas son interesantes para los desarrolladores, pero la mayoría de ellas no se usan actualmente en el desarrollo de aplicaciones convencionales (excepto dos primeros puntos más arriba).
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 programació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, un montón de código fuente para estudiar, una gran cantidad de tutoriales y ejemplos). Con C # puede escribir aplicaciones de consola, aplicaciones de escritorio o aplicaciones web, lo que hace que sea fácil de aprender al resolver una amplia gama de problemas reales.
Además, en la plataforma .NET hay algunas otras opciones interesantes: IronPyton o F # funcional.
Bueno, si quieres "comenzar desde el nivel cero", recomiendo aprender a ensamblar. sí montaje. Aprendí 6502, puedes aprender x86 si te gusta o armar o mips. Encuentre un emulador o un interruptor y lea algunos tutoriales. Comprenderá exactamente cómo funciona una CPU y el código tendrá mucho más sentido (por ejemplo, por qué las teclas de acceso no se actualizan hasta que hace 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 el 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 quieres aprender mucho, puedes intentar aprender el idioma que recomiendo aquí https://.com/questions/498964/the-difficulty-in-learning-new-languages-by-yourself/578618#578618 que creo es una buena idea después del montaje.