222 meneos
3543 clics
El monumental impacto del lenguaje de programación C [ENG]
C es un lenguaje tan fundamental que muchos de nosotros olvidamos cuánto ha cambiado. Técnicamente un lenguaje de alto nivel en el sentido de que requiere que un compilador para que el código sea ejecutable, aunque es lo más parecido al lenguaje ensamblador que a la gente le gusta tener en estos días (fuera de entornos especializados de poca memoria). También se considera que es el lenguaje que hizo posible casi todos los lenguajes que vinieron después.
|
comentarios cerrados
- Su único y verdadero mérito fué fundar, dirigir y popularizar su empresa (Apple). No diseñó ni creó nada para la posteridad.
- Era un tipo de cuidado que maltrataba a sus empleados.
- Acabó por deshacerse como si nada de la verdadera mente pensante que diseñó sus primeros ordenadores, Steve Wozniak, el cual supuestamente era su amigo.
- Y más cosas que hubo y que seguramente no han contado.
Y de Ritchie, como muchos otros genios que si nos dejaron un legado científico/tecnológico/artístico, algo realmente útil para la humanidad, ninguna mención en absoluto.
- Su único y verdadero mérito fué fundar, dirigir y popularizar su empresa (Apple). No diseñó ni creó nada para la posteridad.
- Era un tipo de cuidado que maltrataba a sus empleados.
- Acabó por deshacerse como si nada de la verdadera mente pensante que diseñó sus primeros ordenadores, Steve Wozniak, el cual supuestamente era su amigo.
- Y más cosas que hubo y que seguramente no han contado.
Y de Ritchie, como muchos otros genios que si nos dejaron un legado científico/tecnológico/artístico, algo realmente útil para la humanidad, ninguna mención en absoluto.
Y lo mismo podría decir de Lisp, que con tantos paréntesis no hay quién se aclare.
Con lo de Python discrepo. Cuantas menos llaves, paréntesis, corchetes, etc. mejor.
en.wikipedia.org/wiki/Whitespace_(programming_language)
Vaya tonterías que lee uno últimamente por aquí.
Las llaves sirven para tener discusiones sobre estilos, ocupan un montón de espacio (sobre todo vertical, salvo que las pongas junto al código y entonces pierden su utilidad visual).
Una de las muchísimas cosas que Python hace bien es utilizar el nivel de intentación como marcador de bloque. Las llaves son innecesarias.
Yo es que Python no tengo por dónde agarrarlo, es horroroso.
Ahora, y aunque no venga al caso, la forma estandard de representar un tabulador son 8 caracteres. Si tu tienes tu editor configurado para que el caracter tabulador se vea como 2 o 4 espacios genial, se verá así en tu editor, pero en un editor estandar tienes muchas posibilidades de que se vean 8 espacios, siendo como has dicho, ilegible.
Y claro, si tienes un buen editor puedes hacer que reemplace los tabuladores con espacios, pero como algún día tengas que editarlo usando otro editor no tan bien configurado y pulses el tabulador, como todos estamos acostumbrados a hacer, estarás introduciendo errores que no detectarás hast que el intérprete te los escupa.
Y esto de editar nos lleva al climax del sinsentido de usar identación para definir bloques.. El refactoring. En cualquier lenguaje normal que use llaves o bloques do end o lo que sea, tu mueves un pedazo de código de un lado a otro y no tienes que rezar porque no esté a distintos niveles de identación para que funcione sin tener que reidentarlo a mano, lo pegas y dejas que el editor idente eso por tí. Si estás en un apuro y usando un editor de mierda puedes hasta pasar de la identación, va a funcionar igual de bien.
Python tiene un estándar de estilo de código (PEP8) para el que hay herramientas de validación (como flake8) que hacen todo el trabajo por ti, y por supuesto cualquier editor actual te ayuda en tiempo real. Convertir "todo a espacio" o "todo a tab" lo hace cualquier editor.
Desde luego, no usar un editor en condiciones por si algún día tienes que hacer una edición en una puta mierda de editor es bueno, no sé que decirte Trabaja con herramientas adecuadas.
La tabulación de 8 caracteres, igual que los terminales de 80 columnas, son restos de un pasado al que no vale la pena tenerle tanto cariño si estás utilizando herramientas modernas y programando para entornos modernos. Python tiene su propias recomendaciones. Siguelas si usas python. Si no te gusta python pues no lo uses y ya está.
Si usas un editor de código de mierda para cortar y pegar en cualquier otro lenguaje, al compilador le dará igual y el binario funcionará, pero el código será inteligible e imposible de mantener.
¿por qué estás usando un editor de mierda, para empezar? ¿te obliga alguien?
Eso sí, el problema de tener que adaptar tu la identación en la refactorización no te lo quitas con ningún editor, precisamente por ser la identacion la que define los bloques y no los bloques los que definen la identación.
Y en Python concretamente además no puedes usar los espacio y tabulador para identar, o uno u otro, o tendrás un TabError.
Yo no he dicho que no me guste Python, aunque no me gusta.. Excepto cuando me he referido al TabError siempre he hablado genéricamente, porque me inflé a programar en coffeescript antes de poder usar es6 y las arrow function porque me compensaba más perder el tiempo arreglando identaciónes que escribiendo "function" 300 veces al dia. Lo que vine a decir con mi primer comentario es que reemplazar llaves por identación no solo no aporta nada, si no que empeora.
O es que alguien te obliga a usar monitores pequeñitos pequeñitos y no te caben las llaves de apertura y cierre??
Reemplazar llaves con indentación soluciona muchos problemas. De espacio, de estilo y de legibilidad. Ahora, si no te gusta el lenguage el problema es otro.
Yo junto con c, son los únicos lenguajes que conozco y no hay color, me quedo con python mil veces. No lo uso a diario ni mucho menos pero cuando tengo que hacerlo es que me resulta super fácil e intuitivo.
"Python 3 disallows mixing the use of tabs and spaces for indentation."
Pero no edites con nada que mezcle...
Solo puedo decir eso sobre este pedazo de lenguaje. Mi preferido en todo.
Python usa los tabuladores para separar los bloques precisamente para obligar a escribir código legible.
Con bloques separados por llaves puedes escribir código de distintos bloques en el mismo nivel de indentación, con bloques separados por el nivel de tabulación no, por lo que te obliga a escribir código legible.
Se entiende mejor con un ejemplo, este código en C, Java o en cualquier otro lenguaje con bloques separados por llaves es correcto:
if (x==3) {
funcion();
}
En cambio este mismo código en Python no es correcto;
if (x==3)
funcion();
Y te obliga a escribirlo en distintos niveles de tabulación, haciéndolo más fácil de leer;
if (x==3)
—— funcion();
Obviamente es un ejemplo tonto, que se podría poner en una línea e incluso sin llaves en la mayoría de lenguajes, pero creo que se entiende. Y sino imagínate lo mismo pero con un if, elseif, else con mucho código dentro, todo en el mismo nivel de indentación, suerte para leerlo sin hacerte la picha un lío.
En C la indentación puedes hacerla a tu gusto, y esa libertad a mi me gusta. Pero además, hay indentación automática, muchos editores la tienen, así que si te pasan un código cuya indentación no te gusta, sólo tienes que usar es función y ya está, un código a tu gusto.
Es que C incluso permite "ocultar" programas en Whitespace en su interior, con Python eso es imposible porque no tienes libertad de indentación. En todo caso, incluso creo que para programar un ciego, C es más accesible que Python.
Lo de la indentacion si que es verdad. Yo no tengo ese problema porque el código que escribo son muy pocas líneas, pero me creo que pueda pasar.
Excepto en los lenguajes que te obligan, como Go.
Empieza con C.
www.holamundo.es/lenguaje/c/
Has entrado a vendernos tu moto y ni lees lo que estás respondiendo.
"Sencillamente, encontrar algo en el mundo de la computación actual que no haya sido tocado por el genio de Ritchie es una tarea muy difícil": thingoldedoriath.wordpress.com/2012/01/04/thompson-and-ritchie-the-phi
También recuerdo que me vacunaron contra la Viruela, pero no conozco al que la descubrió!! aunque he visto el método en un par de películas.
El trabajo de Richie si lo conozco, porque: "Sencillamente, encontrar algo en el mundo de la computación actual que no haya sido tocado por el genio de Ritchie es una tarea muy difícil":
thingoldedoriath.wordpress.com/2012/01/04/thompson-and-ritchie-the-phi
Aparte de las mentes de los que deseáis que GNU/Linux esté en el "escritorio"; yo no conozco a ningún desarrollador (de las principales distribuciones, en las que se inspiran todas las demás: Slackware, Debian, Red Hat) que se plantease ese objetivo o esa meta!! ninguno.
Y no tengo claro que por el hecho de que un magnífico "director de orquesta" tan preocupado en acumular dinero (como Jobs o Gates), hubiese podido llevar un clon de UNIX a la mayor parte de las computadoras personales... entre otras cosas, porque de hecho, tanto el uno como el otro echaron mano (o compraron) sistemas UNIX propietarios
Xenixy muy libresFreeBSDpara desarrollar esos OS que copan más del 95% de los "escritorios", cerrando el software final y vendiendo licencias.Pero... supongo que en sus primeros tiempos pudo ser posible.
Yo no me quejaba de que la gente los conociera o no, sino del agravio comparativo de los medios de comunicación a la hora de tratar las noticias. Menosprecio a los medios, no a la gente. No puedes ir tan de listo y con ese tono de autosuficiencia si no comprendes el sentido de lo que lees.
Si tu primer OS hubiese sido Unixware (principios de los 90), te aseguro que conocerías de sobra a Dennis Richie y Kenneth Thompson. Este enlace que puse en el comentario #47 thingoldedoriath.wordpress.com/2012/01/04/thompson-and-ritchie-the-phi lo escribí yo en 2012... y ahora llegas tu a decir que soy un "cansino" y a tirarte una de "tres vacunas" cuando a unos cuantos de los que venimos por aquí no nos pusieron más de 1 o 2 (porque cuando nacimos no había más.
Y como te respondo las que conozco, sales con lo de la Wikipedia...
Eso es de mal perdedor... la gente como tu siempre va a encontrar un viejo que responda a sus retos; pero no solo porque seáis jóvenes e inexpertos, sino por la "chulería" con la que os expresáis en muchas ocasiones.
No me no me no me ... que me conozco (es coña).
Pero, ¿se puede programar a bajo nivel como es capaz de hacer C? Pregunto.
Dale un tiento.
----funcion()
Aunque no me termino de apañar cuando por ejemplo, la línea se hace muy larga y hay que cortarla.
Soy neófito, pero me gusta editar a veces con el Geany. Me cae bien.
Pero buscando un sentido práctico, te aconsejaría que le echaras un ojo al tema Arduino, que son unos procesadores chiquititos y baratos, preparados con usb (el esp32 es parecido y tiene hasts wifi y bluetooth, lo puedes conectar con alexa,...) con muchos ejemplos. Va en una especie de java (java mola porque hay una parte de la programación para Android que va en otra especie de java). Con estos procesadorcillos puedes encender luces intermitente, sensores de temperatura y humedad, pitiditos, sensor de movimiento, pantallitas lcd, motorcitos... Muy divertido y didáctico.
En todo caso, hay una aplicación para el móvil, SoloLearn, donde tienes cursos muy interactivos y con nada de paja. Te la aconsejo, hay de todo lo que quieras. No sé si también tendrán versión en web.
Éxito!
www.redox-os.org/
lwn.net/Articles/797828/
www.reddit.com/r/rust/comments/dc5kky/writing_linux_kernel_modules_in_
mssun.me/assets/ares19securing.pdf
Pero agradezco tu docu
Para aprender y tener una buena base yo también te recomendaría pseudocódigo (en papel) y C. Con C puedes aprender las estructuras de control típicas de la programación estructurada e implementar algoritmos clásicos y a parte entenderás y verás más allá que si empiezas con un lenguaje de más alto nivel, por ejemplo como se gestiona la memoria o hacer llamadas al sistema. Es poco abstracto y puedes aprender desde un punto de vista real como son las distintas fases dentro del proceso de desarrollo de un programa como editar código, compilarlo y enlazarlo o depurar. A parte con C puedes hacer casi cualquier cosa desde una aplicación gráfica hasta un servicio de red, aunque puede ser laborioso. Otra ventaja es que C++ es un superconjunto de C mientas que Java, Javascript, PHP, Perl, Rust y muchos otros tienen influencia de C en mayor o menor medida, por lo que C también te va a dar un buena base no solo para aprender a programar si no para aprender otros lenguajes.
Si me tuviera que llevar un libro a la tumba sería el "Lenguaje C, de Kerninghan y Ritchie" y creo que este libro debería estar en los museos de antropología porque ha marcado el devenir de la humanidad.
Si solo te interesa el desarrollo Web, tal vez puedas empezar con ECMAScript (Javascript), pero puro, nada de librerías ni frameworks imposibles. Con un editor de textos y un navegador que interprete lo que has escrito en el editor bastaría para empezar. Deben contarse por quintillones los tutoriales de Javascript que hay en la red pero no te recomiendo ninguno en particular porque no es mi fuerte.
También está Python que cada vez se usa más y más. Es un lenguaje multipropósito y multiparadigma, de alto nivel que lo mismo se emplea para programación backend, administración de sistemas, machine learning o desarrollo de aplicaciones de cualquier tipo. Tiene una sintaxis bastante rígida lo que a mi no me gusta pero puede ser bueno para aprender buenas prácticas. En educación y para enseñar programación a niños se usa bastante, por ejemplo tienes un framework para hacer juegos que es pygame y un módulo parecido a la tortuga del lenguaje logo que es bastante pedagógico.
Por último te propongo una combinación poco ortodoxa pero que podría funcionar si solo quieres usar la programación como medio para el crecimiento personal (y espiritual), no para ganarte la vida. Puedes aprender cualquiera de los dialectos de Lisp y usar el editor Emacs que se programa en Emacs Lisp. El editor GNU/Emacs es gratuito y libre, funciona casi en cualquier cosa con procesador y podrías aprender a usarlo y configurarlo combinado con el libro "Land of Lisp" que me pareció muy divertido.
landoflisp.com/
La programación es arte y expresividad, hay programas que son bellos poemas con exquisitas construcciones lógicas, la programación puede hacerte ver las cosas de otra manera, a pensar de otro modo, ser más organizado y puede resultar una actividad muy placentera. Otra cosa es que te metas de forma profesional, a interpretar código de otros, programar fuera de plazo, con presión o con especificaciones imposibles, así que si tu caso es el otro te animo a que des el paso.
Tengo 40 tacos. Aún recuerdo mi ordenador con cassette y luego el de disco de 5 y cuarto. Ahí tenía el lenguaje basic. Había revistas que te enseñaban y que tenían mil ejemplos de programillas. Copiabas 500 líneas (a mano), y tenías un juego chungo, pero juego. Y aprendias.
Eso es lo que hecho de menos hoy. Ejemplos y ejemplos para copiar y aprender, pero que veas resultados "chulos" más allá de Hello world
Por cierto, de esa etapa no me acuerdo casi nada del basic... GOTO 2019
Una vez que conoces el lenguaje, debes plasmar tus ideas en C en texto plano, bien con un editor de textos o bien con un IDE que también es un editor de textos pero orientado al desarrollo. Para dar tus primeros pasos y realizar tus primeros programas es mejor que te olvides de usar un IDE ya que le va a añadir complejidad a la curva de aprendizaje y vas a distraerte de lo importante con sus mil opciones y herramientas.
Es más yo ni usaría un editor, yo empezaría con pseudocódigo, algo que todavía uso cuando diseño una función. Es decir papel y lápiz. Lo malo es que necesitas alguien que te valide/corrija tu pseudocódigo.
Por lo tanto abre el editor de textos más simple que ya conozcas como el bloc de notas en windows o nano en Linux. Se trata de que empieces motivado haciendo tus primeros programas en C que serán serán de 10 líneas al principio y posteriormente no pasarán de 50. Busca "hello world C languaje" casi todos serán ejemplos muy parecidos de un programa que imprime "Hello World!", cópialo a tu editor de textos y guárdalo como hello.c
Luego necesitas un compilador de lenguaje C, que es el que traduce tu programa a código ejecutable por tu ordenador. gcc es el compilador de GNU y creo que es el compilador por excelencia. Es gratis y libre y lo tienes para casi todos los sistemas operativos.
En sistemas Unix/Linux incluyendo MacOs viene de serie o es fácil de instalar, en Windows es mejor instalarte Cygwin en el que viene ya todo.
Desde una consola en el directorio en el que hayas guardado hola.c, haces "gcc hola.c", si no te da mensajes de error ejecutas el programa resultante que será a.out.
En resumen el proceso será este:
Ideas
>[tu]> lenguaje C -> [Compilador] -> Código ejecutable.El proceso de compilado es más complejo, pero de momento con saber esto te sirve. Ahora tienes que centrarte en el [tu]. Aprender a pensar de forma estructurada y dominar la sintaxis de C para transcribir tus ideas en código.
Es mejor aprender poco a poco, aprender a usar correctamente las estructuras de control implica un cambio en la forma de pensar y eso es mejor hacerlo de cero y a tu ritmo. Es la forma en la que nos enseñan a usar otros lenguajes, comienzas con vocabulario y construcciones sencillas. La forma que me dices de copiar un tocho y trastear con el es como aprender ingles leyendo un fragmento de Shakespeare y jugar a modificar partes. Es mejor que nada pero cuando te den un folio en blanco no vas a saber ni como empezar a escribir.
Dicho esto, si das el paso, aunque tengo muy poco tiempo, te ofrezco mi ayuda personal para que puedas al menos comenzar en este mundo. Me añades como amigo y me puedes enviar un correo con tus dudas también te puedo ir orientando hacia el siguiente paso y corregir tu pseudocódigo.
La libertad que puede darte C, Java, PHP... y otros lenguajes que no tienen unas pautas de escritura específicas dan origen a un código a veces ilegible y mal organizado.
Cada lenguaje tiene sus particularidades, pero no creo que Python sea mejor por utilizar {}
Es más, si está trabajando en un grupo y hay unas normas, tendrá que seguirlas y punto.
Pero si esa persona hace el código en su tiempo libre o por su cuenta... programará como a él le parezca, no como el autor del lenguaje decida. Yo lo veo bien, porque siempre puedes usar un formateado automático, muchos editores tienen esa función.
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell
o, world!n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}
Donde va a parar.
Y esto lo digo utilizando diariamente GO y con conocimientos leves de Rust.
Go para crear utilidades de sistema, "backends" o incluso frontales web es casi insuperable por su balance de rendimiento, simplicidad y bajo esfuerzo en el desarrollo. El binario estático hace que los despliegues sean muy fáciles sin necesitar contenedores para las dependencias.
Pero en sistemas empotrados, "firmwares", sistemas operativos, etc se necesita mas flexibilidad y rendimiento.
El problema del lenguaje va a ser que un formato pensado para la impresión no te permite hacer copia/pega correctamente.
Pero el origen de mi troleo esta dirigido a la supuesta legibilidad de C gracias a su delimitador de bloque.