Hace 4 años | Por mr_b a opensource.com
Publicado hace 4 años por mr_b a opensource.com

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

D

#36 Yo sé al menos el nombre de uno: Alexander Flema

D

#46 normal. Yo también conozco al dependiente de mi panadería pero no conozco el nombre de cada uno de los grandes científicos vivos y vividos.

Pero porque conozca un nombre que tú no, no voy a venir de “ohhh cómo no puedes conocerlo, nos vamos a la mierdaa”.

Y menos Dennis Ritchie, que con la misma matraca que pegáis cada vez que sale una noticia sobre él, a esta hora debe ser ya más conocido que CR7

chu

#53 Yo no conozco a Dennis Ritchie. No lo pillas.

thingoldedoriath

#36 Algunos me consideran un poco friki... pero recuerdo que cuando me pusieron la vacuna de la Tuberculosis en un internado, en los papeles ponía Pasteur y las que no me pusieron porque por entonces (años 50) esa aún no era de uso masivo y la mayor parte de la gente del rural ni la conocía Poliomielitis: 1ª Jonas Salk. 2ª Albert Sabin.

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":
https://thingoldedoriath.wordpress.com/2012/01/04/thompson-and-ritchie-the-philosophy-of-the-code

D

#49 muy bien, sabes buscar en la wikipedia

thingoldedoriath

#52 Si tu hubieses tenido Poliomielitis a los 3 meses de edad en los 50 y sufrieses las secuelas durante las décadas que yo las he sufrido, porque a tus padres nadie les dijo nada de esa vacuna (ni de ninguna otra en aquella época); te aseguro que nombres como, Salk/Sabin y Ottobock, los tendrías grabados a fuego en el cerebro.

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 https://thingoldedoriath.wordpress.com/2012/01/04/thompson-and-ritchie-the-philosophy-of-the-code 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.

D

#36 ¿Y que comentario crees que es peor? El que se queja de no concer a Ritchie? o el que viene despues a defender al otro? Por que te crees moralmente superior si basicamente esas haciendo lo mismo? pero aún peor, el parte de un razonamiento lógico, en base a los méritos de esas personas, y lo tuyo es puro fanboyismo. Se nota que eres de los que lleva la manzanita en el corazón.

Shotokax

#36 para empezar negativo por descalificar.

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.

D

#2 Sobre un tio que amasó mucha pasta.

j

#2 "No diseñó ni creó nada para la posteridad." Joer, un poco de justiia. Ese tirano reventó industrias enteras, para bien.

D

#2 Todo lo negativo como déspota que era es cierto. Pero cuidado, que al decir que no hizo nada estás muy equivocado. Es como decir que Von Braun o no hizo nada porque el trabajo lo hicieron los obreros.

Jobs no era un obrero, era el director de la orquesta, y si en el software libre hubiera uno como él, hace años que Linux estaría en el escritorio en la mayoría de los computadores. No lo está porque ni siquiera saben cuál es el problema y mucho menos cómo solucionarlo, ni siquiera si se les dice serían capaces de verlo, entenderlo y corregirlo, tienen que pasar 50 años más para que comiencen a entenderlo y solucionarlo.

thingoldedoriath

#45 hace años que Linux estaría en el escritorio en la mayoría de los computadores.

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 Xenix y muy libres FreeBSD para 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.

D

#50 "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"

Linux domina en los servidores. ¿Para qué trabajan en un escritorio?, ¿solo para hacer piruetas y acrobacias técnicas?, ¿no les interesa que la gente use lo que debe estar diseñado para el uso de la gente? Creo que no saben como hacer que la gente lo use. No tienen la menor idea (ni les interesa). Por eso la frustración de Linus Torvals de que Linux no está en el escritorio. Es frustración por la incompetencia de los que hacen escritorios (junto con los programas que se usan allí)

"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 Xenix y muy libres FreeBSD para desarrollar esos OS que copan más del 95% de los "escritorios", cerrando el software final y vendiendo licencias"

La preocupación de ganar dinero de Jobs y Gates no viene al caso, el tema es Linux en el escritorio. Sus sistemas operativos se basan en Unix y FreeBSD, ellos sí pudieron llevar Linux al escritorio, La gente del software libre no sabe ni le importa. Pero aprenderán, aunque como no tienen uno como Steve Jobs (el director de orquestas) que apunte en la dirección correcta tardarán décadas en hacer lo que se puede hacer en pocos años, dando innecesariamente tumbos, y cometiendo errores, pero poco a poco lo lograrán.

thingoldedoriath

#51 Lo que tu digas

thingoldedoriath

#1 Casi... me encanta que no hayas generalizado, como #2 cuando escribe "ninguna mención en absoluto"; porque, pocas menciones o muchas pero en un ecosistema muy técnico, no son ninguna.

"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": https://thingoldedoriath.wordpress.com/2012/01/04/thompson-and-ritchie-the-philosophy-of-the-code

Am_Shaegar

#2 Como si hubieras descrito a Edison.

m

#4: Pues a mi la separación del código con llaves me ayuda mucho, lo de poner espacios me recuerda más a Whitespace que otra cosa.
https://en.wikipedia.org/wiki/Whitespace_(programming_language)

t

#4 Si quitas las llaves (que son visibles) y lo sustituyes con espacios o tabuladores (invisibles) tú me dirás en que mejoras..

ccguy

#9 el tabulado es visible. Y ahorra un montón de espacio.

ccguy

#12 Es que eso no es relevante para el código (aunque si estás usando 8 espacios para cada nivel de indentación tu código debe ser ilegible). 8 espacios y un tabulador (usando tabs = 8 espacios) son equivalentes tanto visualmente como a nivel de código para la mayoría de lenguajes. Única excepción que se me ocurre ahora mismo son los Makefiles.

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.

t

#13 Como que no es relevante para el código?? En python no puedes identar con espacios y tabuladores, usas uno u otro, pero nunca los dos a la vez, y eso con un editor de texto estandard no lo ves.

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.

t

#17 Pero quién ha dicho que yo uso un editor de mierda?? Para el dia a dia tengo mi querido Emacs que hace todo lo que necesito y más.. Pero no siempre estás editando algo tranquilamente en tu máquina.. Y en esos malos momentos los lenguajes que definen los bloques implícitamente te añaden una dificultad extra.

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??

ccguy

#18 En python puedes mezclar tabs y espacios si quieres. Pruebalo.

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.

t

#19 De https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces:
"Python 3 disallows mixing the use of tabs and spaces for indentation."

ccguy

#22 Yo lo he probado en p2
Pero no edites con nada que mezcle...

t

#20 anda, goto #18..

selina_kyle

#21 vale veo que en ese comentario te retractas con lo del editor

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.

selina_kyle

#15 Es que partes de la premisa absurda de que no tienes un editor en condiciones. Que vas a ponerte a programar en el bloc de notas de Windows? En editores así de básicos te puede tocar cambiar algún archivo de configuración o cosas así pero no programar python.

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.

redscare

#15 Ramen, hermano!

m

#15 yo en el sublime y en el phpstorm veo los espacios perfectamente, sólo hay que activar la opción.

a

#13 indentar con tabs = patada en la boca.

Excepto en los lenguajes que te obligan, como Go.

ccguy

#38 Todo tiene su origen y su explicación, que en tecnología de los 70 suele ser el coste de la memoria y el almacenamiento. Normalmente en estas discusiones puedes acertar la edad de los participantes por su preferencia personal.

D

#3
Las llaves y paréntesis van estupendas porque el editor puede seguirlas. Para navegar por el código es perfecto.

De otro modo hay que buscar bloques de espacios a la misma distancia. Si metes sentencias en una misma línea, olvídate.

xyzzy

#6 te obliga a formatear el codigo correctamente

D

#3 ¿Sería mucho mejor en qué? ¿Funcionaría más rápido?

Vaya tonterías que lee uno últimamente por aquí.

m

#7: En ver mejor lo que se programa.

Yo es que Python no tengo por dónde agarrarlo, es horroroso.

eltoloco

#14 Sin acritud, pero no tienes ni idea de lo que hablas.

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)

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.

m

#27: Me imagino que respondiéndome habrás encontrado uno de los principales problemas de Python, y es que si copias y pegas el código en foros de Internet basados en HTML, este deja de funcionar. El código de C en cambio nunca pierde la funcionalidad.

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.

n

#29 Cierto, es muy molesto copiar ejemplos de código de ejemplo y que siempre estén dando por culo las indentaciones.

Tiberina

#29 Como esa libertad existe.... siempre encuentras código escrito como sale le sale a cada uno de ahí....Llaves que se abren y se cierran en diferentes puntos sin un orden aparente....Con Python llevas un orden porque la escritura siempre se realiza igual porque además el propio código te obliga a ello.
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

m

#76: Eso es culpa del que programa, no del lenguaje.

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.

D

#27 por algún motivo a algunos os parece mejor restringir la libertad de que cada uno pueda indentar como le salga de las pelotillas. En C, Java yo tengo la libertad de definir el estilo de código que yo quiera y hay herramientas para obligar a que los desarrolladores sigan ese estilo. En python tu tienes que codificar como te impongan y punto. Por qué motivo se piensan en posesión de la verdad? Vamos a obligar a indentar así, que si no los desarrolladores se nos desmadran. No lo veo justificable.

Ako3

#27 if x == 3:
----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.

D

#14 Ah entonces es tu opinión personal. Tu comentario daba a entender que Python sería mejor para todo el mundo, no sólo para ti.

comadrejo

#14 Tiene usted razón.

int i;main(){for(;i["]

m

#78: Al menos funciona, prueba a copiar y pegar código de Python desde un PDF y luego mira si funciona o no.

comadrejo

#80 Pero que casuística infernal es esta. Y si "pintas" el código de C en un png luego no puedes hacer copia/pega.
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.

Penetrator

#7 Sería mucho más legible.

squanchy

#3 La pesadilla de los paréntesis vuelve en javascript, con librerías como lodash y con las funciones lambda.

ccguy

#3 ¿estás troleando?

soytumismo

C es dios y Unix su profeta.
Solo puedo decir eso sobre este pedazo de lenguaje. Mi preferido en todo.

PacoJones

Es el primer lenguaje de programación que aprendí y gracias a su sintaxis me fue más fácil trabajar con otros después, utilizaba Turbo C allá por el 2001, como si fuera ayer, qué recuerdos

logistark

#62 los sucesores de C son Rust y Go

soytumismo

#64 Sinceramente, los desconozco. Llevo tiempo fuera de la programación.
Pero, ¿se puede programar a bajo nivel como es capaz de hacer C? Pregunto.

soytumismo

#70 No lo sabía, hubiera servido con un sí.
Pero agradezco tu docu

comadrejo

#64 Solo Rust podría ser sucesor de C, Go esta demasiado limitado como para programar sistemas.
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.

logistark

No se puede negar el impacto de C, aún así debería morir y dejar paso a sus sucesores...

soytumismo

#59 No hay sucesor para C, y por favor no me digas Java, que me pego un tiro. lol

D

C es dios, C++ es su hijo legítimo directo todo lo que vino después relacionado con clases, objetos y demás parafernalia son sus nietos. Y es cierto que C tuvo "hermanos", pero no tuvieron tanta suerte.

u

#73 El lenguaje C, su sintaxis y su léxico (palabras reservadas) es un standard regulado por ANSI. Es como la lengua española, que el conocimiento de la misma es de dominio público y gratuito pero luego la regula la RAE. Un lenguaje en un concepto abstracto, no se puede cobrar por él. Otra cosa es la documentación, ciertas librerías o herramientas para programar con él, pero en el caso de C no hay problema, se puede programar en C sin pagar un duro.

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.

Putin.es.tu.papa

Que recuerdos de la universidad cuando programabas en C en VI y como buen mal programador que se respete metías un ' } ' de mas a ver donde diablos no habías cerrado el código.

P

Vaya por delante que no sé nada de programación pero me gustaría iniciarme...¿algún lenguaje sencillo, con tutoriales, con ejemplos didácticos y accesible? ¿qué aconsejáis? Gracias

Maelstrom

#31 Pseudocódigo, jaja.

D

#33 #31 que empiece con el código wiki, y luego que se pase a bash...

soytumismo

#39 ¿Algún problema con Bash?
No me no me no me ... que me conozco (es coña). lol lol

friguron_

#31 No es coña... RUST
Dale un tiento.

Ako3

#31 Yo estoy bastante pez en el tema,tal vez por eso espero que mi consejo te pueda ayudar. Aprender a programar, así, por las buenas sin buscarle un sentido práctico no sé si tiene mucha salida. En ese sentido te aconsejaría python. Es muy claro y muy cómodo a la hora de instanciar objetos "cotidianos", como una lista.
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!

u

#31 Puedes aprender con cualquier lenguaje aunque según matices los puede haber mejores y peores.

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.

http://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.

P

#72 Es que no se no por dónde empezar... C es gratuito? Dónde lo consigo?

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