Aprendiendo a programar en C (viniendo de Python) [cerrado]

22

Si este es el lugar equivocado para hacer esta pregunta, hágamelo saber.

Soy un programador de Python por ocupación. Me encantaría aprender C. De hecho, lo he intentado muchas veces, pero siempre me desanimo. En Python, escribes algunas líneas y el programa hace maravillas. En C, parece que no puedo hacer nada útil.

Parece muy complicado incluso conectarse a Internet.

¿Tiene alguna sugerencia sobre lo que puedo hacer para aprender C? ¿Hay buenos sitios web? ¿Algún proyecto genial?

Gracias

Honza Pokorny
fuente
44
Es agradable poder pararse sobre los hombros del genio, ¿no es así? El intérprete de Python está escrito en C. Ahora tiene una verdadera apreciación de lo que realmente hicieron los diseñadores. Es bastante asombroso.
Pemdas
@Pemdas C se usa normalmente para crear programas del sistema.
Searock
¿Puedo recomendar comenzar leyendo el contenido de un archivo y posiblemente realizar alguna transformación básica en otro archivo? Ejemplo: tome un CSV y analícelo en un archivo delimitado por tabulaciones. Alternativamente, puede aprender a leer la información del encabezado de un archivo BMP de imagen JPEG.
Joshua Burns el
Llego tarde para agregar una respuesta, pero hay este folleto en línea de C para programas de Python . Además, los creadores de "Aprenda a programar de la manera difícil" están haciendo un libro llamado " Aprenda C de la manera difícil ", que está dirigido a personas que ya conocen un poco de Python o similar.
naught101

Respuestas:

31

No te desanimes.

Python es un lenguaje de programación de alto nivel. En comparación con C, puede producir maravillas en una pequeña cantidad de código. No empiece tratando de imitar los resultados de Python en C: se desanimará rápidamente. Programar en una C requiere un estilo diferente de pensamiento y comprensión porque al interactuar con la computadora a un nivel más íntimo. Aquí hay un buen punto de partida para aprender C:

Libros

Material en línea

JK
fuente
1
¿Puedes sugerir un ejercicio de programación? Algo útil preferiblemente. Gracias.
Honza Pokorny
12

Si quieres aprender C, no comiences por conectarte a Internet. Puedes hacerlo en cualquier otro idioma. Eso no es lo más importante en C.

En su lugar, echar un vistazo a los punteros, arrays, referencias, estructuras de este C Tutorial . Esto lo ayudará a comprender la administración de la memoria y muchas de las características que "lo acercan a la máquina".

Si puede aprender y comprender este material, busque expandirse en un posible proyecto. Estos conceptos son fundamentales para cualquier programación profesional C real.

Este tutorial de puntero también parece útil.

jmort253
fuente
el C_Tutorialenlace está roto ...
user3768495
11

Que es muy complicado para conectarse a la Internet! Piénsalo:

  • Su computadora puede tener múltiples formas de conexión: WLAN, Bluetooth, Ethernet, etc. Cada una de ellas tiene su propia configuración, que debe configurar. Tienes suerte de que ya haya estándares y controladores para estos ... usarlos podría ser mucho más difícil de lo que ya es ahora.

  • Las direcciones IP pueden ser IPv4 o IPv6, y debe poder manejar ambas.

  • Puede o no haber servidores proxy configurados para el sistema.

  • Debe admitir FTP, HTTP u otro protocolo.

  • Es posible que deba usar el acceso telefónico, por lo que debe especificar una guía telefónica con contraseñas y números de teléfono, si aún no está conectado. Lo mismo ocurre con los nombres de usuario / contraseñas de WLAN.

  • Es posible que deba trabajar con cookies.

  • El sistema puede almacenar en caché algunos datos, entonces, ¿desea usar el caché o no?

Y la lista sigue y sigue.

Entonces, el hecho de que es fácil hacer esto con Python significa necesariamente que muchos de estos están ocultos para usted (o son difíciles de configurar), por lo que cambia la simplicidad por el poder. La biblioteca C es todo lo contrario: tiene toda la potencia que necesita (puede realizar fácilmente llamadas al sistema), pero no tiene ningún valor predeterminado (o, de hecho, ninguna función para conectarse a Internet).

En lugar de pensar que C es tedioso, piense que es poderoso. Pero, en cualquier caso, no intentes conectarte a Internet con él, es algo muy difícil de hacer. En su lugar, comenzar a aprender cómo utilizar la biblioteca para tareas más básicas (por ejemplo, archivo de E / S), aprender acerca de cómo apuntadores y arreglos realmente funcionan, y cuando se aprende a todos aquellos, a continuación, tratar de hacer frente a grandes proyectos. También apreciarás Python más de esa manera. :)


Editar :

Yo personalmente sugiero que, si tienes tiempo libre, aprendas C # primero. Tan pronto como se sienta cómodo con él, comience a aprender sobre la unsafepalabra clave y cómo usar los punteros y realizar la clasificación en C #. Todavía tendrá una biblioteca realmente grande para trabajar, como con Python, pero podrá hacer muchas cosas que puede hacer en C. Luego haga la transición a las API del sistema de llamadas manualmente (como InternetOpen ) y aprenda cómo conseguir que funcionen. Aún tendrá mucha flexibilidad, pero obtendrá una excelente introducción a los conceptos de nivel inferior. Después de que hayas hecho esto, entonces comience a aprender C, entonces encontrará que es pan comido y verá (C? entiéndelo?) las ventajas y desventajas de los lenguajes de alto y bajo nivel, y podrá para encontrar el que se adapte a tus necesidades.

Dicho esto, creo que un curso intensivo en C podría ser útil como punto de partida para saltar al mar C.

Mehrdad
fuente
8

No lea el código del núcleo cuando esté aprendiendo C. Está lleno de trucos para exprimir hasta el último rendimiento. Algunos de ellos son muy no estándar. Te volverá loco.

En cambio, eche un vistazo a algunos proyectos pequeños y de alta calidad de código:

  • Lua : si no está interesado en los lenguajes de programación, puede saltear este. De lo contrario, es un código realmente hermoso y sorprendente ver cuánto logran con tan poco (algo por lo que parece frustrado ya que viene de Python).
  • ZeroMQ - Me encanta este proyecto. Es una cola de mensajes ligera y súper rápida. De nuevo, cosas de alta calidad.
  • DarkHttpd : un servidor web de 2700 líneas en C. Cubre algunos temas divertidos, como la programación de sockets, el análisis y el trabajo con protocolos.
Roger escaso
fuente
0

Un propósito de un lenguaje de alto nivel superior es ocultar cosas complicadas. Si desea aprender un idioma de "nivel inferior" y no quiere comenzar con cosas realmente complicadas (que antes le estaban ocultas); intente comenzar con algunos proyectos de aprendizaje más simples, ordenando una serie de números, o invirtiendo una cadena de caracteres, o algo así ...

Es más fácil subir una colina empinada dando pequeños pasos.

hotpaw2
fuente
-3

En cuanto a los proyectos geniales a tener en cuenta: los núcleos de Unix están escritos en C.

Edward extraño
fuente
¿Querías agregar un enlace?
jmort253
-3

Aprenda primero la gramática C y luego úsela para escribir la estructura de datos y el algoritmo. Por supuesto, puedes leer el kernel de Linux como experto en lenguaje C.

Hola 福气 鱼
fuente