Hace 11 años | Por --175549-- a youtube.com
Publicado hace 11 años por --175549-- a youtube.com

Primera sesión del Curso de Programación en Lenguaje C. Impartido por Richard Couture en las instalaciones de LinuxCabal A.C., el día 22 de Octubre del 2011. En el canal de Youtube se encuentra el resto de lecciones (18 más por ahora) con una duración media de 1 hora cada una. Curso completo para descargar en formato webm: ftp://ftp.linuxcabal.org/pub/Videos/CursoDelLenguaje_C_enLinuxCabal_AC/

Comentarios

D

#2 Añadido, gracias.

D

#2 Desde luego que no es habitual,y por lo que llevo visto hasta ahora parece muy ameno

takamura

#11 Puffff... para empezar, todos los lenguajes orientados a objetos, funcionales y lógicos en cuanto a semántica y muchos otros lenguajes en cuanto a sintaxis.

takamura

#7 ¿Qué tiene de potente el C?

Aitor

#16 cry

#17 Sí claro, es uno de los casos que tenía en mente cuando he dicho "cuando por lo que sea necesitas hacer algo donde necesitas saber con más precisión qué o cómo va a hacerse por debajo realmente", optimizar también es una necesidad.

#21 #30 Sí, pero en cualquier caso es divertido oírle pronunciar palabras como grrratis (0:00:36).

#31 No sé explicar las emociones como me siento con tu pregunta lol ¿Bromeas verdad?

takamura

#39 No, en absoluto.

D

#45 No veo la relacion entre el conocimiento de un lenguaje y la potencia del lenguaje en si mismo. Si sabes PHP y no sabes C, no quiere decir que PHP sea mas eficiente, solo quiere decir que sabes PHP y no sabes C. Si sabes C y PHP entonces esto quiere decir que conoces dos lenguajes, pero C siempre sera mas eficiente que PHP. Lo mismo para C y Ensamblador. Tu conocimiento del lenguaje no hace mas eficiente al lenguaje, te hace mas eficiente a ti. Es el creador o creadores del lenguaje,plataforma, su objetivo y estructura lo que hace que el lenguaje sea eficiente. Espero haber podido mostrar algo mejor el matiz.
#43 Te dejo un link que te puede ser util:
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CD0QFjAD&url=http%3A%2F%2Fpage.mi.fu-berlin.de%2Fprechelt%2FBiblio%2FjccpprtTR.pdf&ei=V66fT4yNJtHP4QS45JSyAw&usg=AFQjCNFu_ssl95ydl5t2VWsq58EBdJ6lRQ
Saludos

takamura

#48 Gracias por el enlace, aunque ya lo conocía.

Saludos.

takamura

#48 De paso, aquí te dejo un artículo con una visión diferente de qué significa potencia en un lenguaje: http://www.google.com/url?sa=t&rct=j&q=why%20functional%20programming%20matters&source=web&cd=1&sqi=2&ved=0CDsQFjAA&url=http%3A%2F%2Fwww.cs.kent.ac.uk%2Fpeople%2Fstaff%2Fdat%2Fmiranda%2Fwhyfp90.pdf&ei=sbKfT_XjA8uU8gOu-7WEAQ&usg=AFQjCNEBbTAPkPRho_ATUFuAP0hTNlOQlA&cad=rja (sobre todo el capítulo 4, pero a lo mejor necesitas leer los anteriores para entenderlo).

D

#50 Gracias. Le echare un vistazo, pues no conocia este paper.

D

#48 De nada.
Debo confesar que me gusta C. Me gusta mucho. Pero no todo es blanco o negro. Cada lenguaje tiene su objetivo y por mucho que me guste C, uso otros lenguajes ,sobre todo interpretados, para realizar scripts de parseo de datos y scripts de sistema (UNIX como norma general). A veces se debe tener en cuenta el tiempo de desarrollo, el objetivo del software, la plataforma, el hardware etc ... para hacer un buen uso. Con esto quiero decir que no todo es correcto dependiendo del ambito en el que nos encontramos. Lo mas inteligente es saber elegir bien. Esa es la clave para que al final nuestro codigo y nuestro tiempo merezcan la pena.
Saludos

D

Directo a la hemeroteca. Documento histórico con aire oldschool mas curioso que útil.

D

Es como juntar a Eric S. Raymond con Sid Vicious Joe Strummer, pero mola

D

#15 Dios, casi lo has clavado. Solo te faltado poner al tipo este de la teletienda.

D

printf("Me gusta\n");

D

Esto no es un curso de programación en C. Esto es un curso de lenguaje de programación C.
Si quieres aprender a programar, no es buena idea hacerlo desde el punto de vista de uso de un lenguaje en concreto. Para nada.

#17
Y no sólo eso, es posible que no estés aprovechando la localidad espacial y estés machacando continuamente las líneas de caché del procesador. Para suerte de muchos el padding y blocking lo hacen los compiladores sin despeinarse.

D

#include Eso creo que no es C, lo procesa el preprocesador antes de compilar.

faelomx

Realmente C solamente son 3 o 4 palabras reservadas y de lo mismo de operadores.
Sin STDIO.H haríamos poco o simplemente tardaríamos mucho tiempo en hacerlo.
El potencial reside en las bibliotecas de cabera.

raharu

#26 Siendo puntillosos, stdio.h trata solo de entrada/salida. A lo que te refieres es a la libreria de C en general. A parte, C no tiene muchas palabras reservadas, pero son más que 3 o 4.

D

Lo que hubiese deseado tener un profesor así de guay an mis años mozos.

D

#23 "int a = 0; ¿eso es una función? No." . No, eso es la inicializacion de la variable int a a cero, comun en muchos lenguajes.
"#include ¿eso es una función? Tampoco." Es una cabecera (header) .h con multiples funciones.
Dando por hecho que necesitamos el uso de las variables, el resto de C se puede considerar funciones. Asi se considera que la herramienta fundamental de C, son las funciones. Al menos para que un programa de C funcione debe tener una funcion.
Saludos

c

#37 Perdona, pero el intento de puntero a función que has intentado hacer es sintácticamente incorrecto.

#38 Discrepo, hay MUCHAS cosas en C aparte de declaración de variables y funciones: macros, declaración de tipos, estructuras de control (que no son funciones), etcétera etcétera.

Que no, que lo de que en C todos son funciones está mal y punto. Hay lenguajes como Python y Ruby en lo que todo es un objeto y se puede considerar como tal, pero C no es así.

D

#56 Lo entiendo de forma diferente que tu. El alma, y la limpieza del codigo en C, depende mucho de funciones. Normalmente programar en C requiere muchas mas lineas que otros lenguajes a cambio de otras bondades, con lo que la necesidad del concepto de funcion toma mucho peso cuando programamos en C. Entiendo que es a lo que se refiere, y algo que desde ese punto de vista comparto. Hay cosas que se pueden hacer en perl (por ejemplo) sin el uso de metodos que en C seria una locura sin funciones.
Asi lo entiendo yo cuando este hombre dice eso. En cualquier caso cada uno es muy libre.

Aitor

#29 Cierto, lo que corrobora mi teoría de que es óptimo para controlar lo que haces, pero... ¿No es eso programar en C? Tienes que saber manejarte en C para hacerlo en cualquier caso.

Además, los hombres de verdad programan en C para controlarlo todo, y es cuando quieren controlar más aún cuando llaman a otro lenguaje: ensamblador lol

Aitor

#42 No por usar código enteramente tuyo controlas todos los detalles del comportamiento de tu código necesariamente más, ni por usar bibliotecas (¿quién os enseña a decir librería?) controlas menos todos esos detalles: Si usas sólo código tuyo pero de muy alto nivel, entonces en muchas ocasiones por cada comando que escribas por debajo se harán veinte cosas sin que seas consciente necesariamente (a no ser que lo hayas estudiado con mucha profundidad ese lenguaje) y por otro lado si sólo usas bibliotecas muy bien especificadas (aunque no te digan cómo lo hacen, que si te digan qué es exactamente todo lo que hacen) eso no hace que pierdas el control de absolutamente ningún detalle.

#41 Jajaja captado el mensaje, supongo que se sobreentiende que todas esas afirmaciones son en broma

Javi-_Nux

#44 a lo que me refería es....si queremos calcular la inversa de una matriz 1 millón x 1 millón de la forma más eficiente posible, donde tengo más control, en ensamblador llamando a una rutina de una bibilioteca escrita por otro o en c++ en un método escrito por mí utilizando el algoritmo que yo quiero.

Aitor

#45 ¿Eso es una pregunta?

D

Valoro su esfuerzo, pero su español es insufrible.

Mejor que mi alemán en todo caso.

p

#10 Raro no, muy "rrarro"! Desde luego las fotografías de su página web no tienen desperdicio lol
#21 Totalmente deacuerdo, parece que esté gritando constantemente, me pone de los nervios.

Aparte de esto, es interesante que por fin haya un buen videotutorial en español

D

A los que quieran seguir el curso algo situados, aconsejo tener algunas nociones previas en sistemas informáticos para darle sentido al esfuerzo de aprender C si sois profanos en informática. Para el que quiera seguir, intentaré agrupar algunos conceptos que creo son necesarios y básicos para sacarle jugo a C. Al final de todo tenéis algunos links muy útiles

(Animo al que quiera ayudar a que me corrija o añada lo que considere que se debe saber. Intentaré poner conceptos en negrita que figuren en wikipedia o fáciles de buscar. La wikipedia y sus enlaces internos son vuestros amigos!!)

A groso modo:

Nociones básicas de máquinas de estado, buscad máquinas de Turing*.
Nociones de estructuras de datos muy elementales, que son los bits, sus "hermanos mayores" y el primo baudio así como que significan en relación al elemento que nos refiramos. Eso nos lleva a lo siguiente.
Nociones de estructura de computadores: Que es o que se entiende por computador/ordenador. Que es la entrada/salida y el concepto de BIOS y como interacciona con el sistema operativo. Que son y como funcionan las memorias en general, memoria principal y memoria secundaria, la CPU y sus registros -para mas adelante entender sistemas operativos y sus singularidades, como paso previo a ello- que tipos hay y como funcionan, lo que es un BUS en general y si queréis y recomiendo, su genealogía. También como entienden los distintos elementos el significado de bit y sus resultados y la relación con los registros de la CPU.
Es decir la lógica de bit.
Nociones sobre sistemas operativos, a lo básico, como ve un sistema operativo la maquina que gestiona, en ese sentido, buscad kernel o nucleo, sus tipos, que es espacio de usuario, espacio de kernel. Que es una shell, prompt o consola, pasos que sigue un ordenador desde el encendido hasta que se puede interactuar con el mediante E/S. Que es la multitarea y el multiusuario, que son y de que manera se comunican los procesos (síncronos o asíncronos) así como gestión de procesos y capas de abstracción, gestión de memoria principal, accesos a memoria, modos protegidos, violaciones de segmento o segmentation fault -la RAM en general- así como métodos de paginación y gestión de memoria secundaria sobre todo nociones sobre organizaciones internas o mas a groso modo sistemas de ficheros y memoria virtual.

La relación entre todo esto y estructura de computadores es importante saberla, así que intento poner por orden como yo lo estudié ya que es un poco recursivo y lo importante es una vez entendidos los elementos la relación que se establece entre ellos. En general todo deriva en la necesidad de saber que grandes familias existen de sistemas operativos y un poco el porqué de la elección de sus distintos diseños, no tanto en relación a lo comercial si no en relación al funcionamiento. No es lo mismo programar en C para linux o para ecosistemas windows de Microsoft aunque C sea un estándar, tiene peculiaridades según el sistema operativo en el que corre. Si has entendido las negritas y navegado un poco por sus enlaces en la wikipedia sabras el porqé. En ese sentido es importante saber conceptualmente que es POSIX y la api de win32 -o la que sea para la familia de SOs que corresponde- ya que es la capa de abstracción que provee el sistema operativo que para permitir la comunicación entre el programa y el núcleo de un modo estandarizado.

También es imprescindible saber, para programar en general, lógica formal (aquello de Si A luego B para entender el control de flujo de un programa). En cierta medida también algo sobre cálculo matemático básico, como mínimo muy mínimo calculo de funciones de primer grado. Aconsejable saber resolver sistemas de ecuaciones de grado N.

Para los que nunca hayan programado en un lenguaje funcional, fuera de un entorno de ventanas o API como QT o MFC orientados a eventos, es importante controlar también el flujo de datos. Esto es saber de bucles (en C do, while, for...), condicionales (if, "? : "...) y interruptores (switch...) así como el ámbito local o general de una variable y en que influye eso. Es cierto que C tiene librerías que lo extienden, pero entiendo que tanto el curso como mi parrafada hablan del estándar. La potencia de C es que se puede llegar a hacer todo lo que hacen los demás si uno tiene claro como hacerlo. Pero para ello hay que saber con quién tratamos. De ahí que debamos saber todo lo anterior. Hacer un circulo en pantalla en C sin ayuda es saber como se accede a la memoria de video, como es la fórmula matemática de un circulo y como implementar un algoritmo que lo haga en base a una gráfica discreta de pixeles y no continua. Un poco por eso se le conoce como el padre de ellos. Aunque es cierto que es todo un árbol genealógico lo de los lenguajes, así que existen abuelos, sobrinos y primos jajaja
Me desvió. Básicamente un diagrama de flujo y sus elementos gráficos son las piezas básicas para el control de la ejecución o flujo del programa. De ahí, obviamente su nombre. Recordad, dibujar ayuda siempre. El cerebro juega malas pasadas cuando intenta emular la ejecución de una parte del código y lo que a veces parece una obviedad es un espejismo. Si no queréis ir dando puñetazos en el escritorio, en el teclado o acordándoos de la madre de alguien y generar canas, respirad y dibujad. Ayuda y mucho tanto diagramas de flujo como de estado (máquina de estado).

Otra cosa que me gustaría que quedara clara, tanto Entrada como Salida son conceptos muy genéricos. Entrada hace referéncia desde la presión de un botón de teclado a la lectura de un dato en memoria tanto lecturas como comunicaciones entre procesos. Así como el estado de los registros de la CPU, una división por zero, un resultado negativo etc... También es una entrada un clic de ratón en un botón de una ventana o un evento del SO (ver api del SO). Del mismo modo Salida puede hacer referencia desde encender un led a enviar un e-mail. Así pues, un programa, aunque hay peleas sobre su definición que es interesante saber pero no estrictamente necesario, es una serie de instrucciones que la CPU entiende y que en función de unas Entradas genera unas Salidas. Es necesario para saber que es un programa a nivel abstracto, tanto desde el punto de vista del diseño del programador como desde el punto de vista de la gestión de procesos del SO anteriormente comentada, saber que la explicación se hace prescindiendo del concepto humano de programación. Es decir , C, C++, Pascal, Cobol, Java -en parte, pero no viene a cuento- solo son construcciones semánticas que hacen posible que un humano no tenga que estar picando instrucciones interminables de 0s y 1s o ensamblador. Recordemos, si no lo sabéis que básicamente ensamblador poner etiquetas a las instrucciones máquina en 0s y 1s que entiende la CPU. Si mover la posición 0001 de RAM a la 0002 en código máquina es 000010101 0001 0002, el lenguaje ensamblador solo hace que 000010101 (instrucción mover) se llame MOV. Así cuando el compilador ASM (de ensamblador) ve algo como MOV 0001 0002 sabe que debe traducirlo a 000010101 0001 0002. Por tanto a parte de hacer fácil memorizar los centenares de instrucciones que entiende una CPU en 1s y 0s a un humano, estrictamente no crea un lenguaje nuevo. Solo etiqueta. Acercar a la manera de pensar y escribir de los humanos lo que debe hacer una maquina con 1s y 0s es lo que hacen los lenguajes llamados de tercera generación. Así pues, se debe traducir el lenguaje humano condicional a instrucciones en lenguaje máquina. Si uno piensa en un condicional tal que "Si a igual a 0 entonces b será b + 1 si no b = 0" puede traducirlo a C de inmediato (bueno, si uno es angloparlante mas aun lol). Así que queda

if (a == 0)
else

trivial, ¿no?. No hay que memorizar códigos numéricos ni saber que una comparación activa un registro de la CPU o un resultado de resta negativa otra etc... De ahí el compilador y el proceso de compilación, que traducen de lenguaje humano (aunque a mas de uno no se lo parezca jajaja) a 1s y 0s. Con todo y con eso, el compilador de C entiende trozos de código ensamblador debidamente etiquetados. Es mas, podemos llegar a la paradoja de que el 99% del código sea ensamblador. Esa es su potencia.

En el curso seguro que se explica como compilar, solo entrar en el matiz de que un compilador traduce pero no corrige. Cada arquitectura y cada sistema operativo tienen el propio. Hablar con la BIOS en linux significa hacer la petición al SO mediante el estándar POSIX que es el interfaz con el kernel y este lo es con la BIOS.
Si os atrevéis buscad que es un compilador en wikipedia y como se diseña. Compiladores I y II son de las ultimas (o eran con mi plan jejeje) las ultimas asignaturas de la carrera y de las mas hueso. Ahí queda.
Entender la relación con que puede hacer y que no puede hacer según que tipos de acceso permite el SO al hardware (de ahí las capas de abtracción, los núcleos, la gestión de memoria, multitarea, multiusuario, buses, sincronía...) y el papel de la BIOS en todo el fregado. Es decir, si uno no tiene claro que un programa lo que hace es recoger unas entradas y en función de ellas muestra unas salidas, en C, estas muerto en general.

Para finalizar y aunque parezca obvio, saber qué es un lenguaje de programación. Mas que nada y como ya hemos visto, saber el porque se habla de lenguaje máquina, de segundo nivel, tercer nivel etc... y que grandes familias hay. No tanto desde el punto de vista del origen empresarial si no que necesidades han venido a cubrir. También las distintas familias conceptuales que existen, sobre todo diferencias entre lenguajes funcionales, procedimentales y orientados a objetos. Aunque claro está, saber de la existencia del

m

#64 Tienes una paja mental bastante gorda, me extraña muchisimo que de verdad hayas hecho la ingenieria como das a enteder, ya que parece que has puesto aqui una retahila de cosas de las que has ido absorviendo en internet, retahila de que cualquier profesor te daria un capon por decir tantas sandeces sin tener ni idea, dicho desde el respeto hacia tu persona. Un saludo

D

#65 ayúdame a contarlo mejor si quieres . He intentado hacerlo lo mejor posible. Gracias por el comentario, pero te agradecería fueses mas específico.

D

Yo soy mas de papel y boli.

maelstromm

Interesante personaje... ha sido carpintero, detective privado, barman, y consultor de seguridad informática.. Ha trabajado incluso en la Casa Blanca..

Para el que le interese mas una entrevista..

http://www.nautilus.iteso.mx/?p=4146

Ahora vive en Mexico, en Guadalajara.. donde fue tomado el video.

Me ha llamado la atención como ve a la sociedad mexicana...

"El tiempo Mexicano fue un gran problema. La gente me decía, nos vemos a las diez y pueden pasar horas sin que llamen, tal vez lleguen, tal vez no. Y la falta de formalidad y la inpuntualidad no es la excepción, es la normalidad, es increíble."

"A mi, en el centro de Guadalajara, me han robado tres veces…¡Los policías! Es increíble. Por eso aprendí a salir a la calle con poco efectivo y plástico. Ellos no te roban el plástico"

D

Hala, bajados con Clive en webm. En Linux: clive -f best "

" "
" y así con todos.

Aunque se caiga Youtube ya tengo suficiente.

editado:
mierda, están en la entradilla. Entonces:

wget --mirror ftp://ftp.linuxcabal.org/pub/Videos/CursoDelLenguaje_C_enLinuxCabal_AC/ o también podéis hacerlos vuestro propio programa con libcurl

D

Sigo viendo sesiones posteriores del curso. Hay momentos grandiosos.

D

quack...quack...quack me encanta.

c

Qué tío más raro. Además, dice cosas incorrectas, como que "todo en C es una función"... wtf? No sé, no me convence.

D

Lo mejor es el tio que esta en el curso bebiendose una cerveza!

#18 en C no todo son funciones? dime un ejemplo, porque lo que yo se de C todo son funciones, quiza sea que estamos hablando de lenguajes distintos.

c

#22 int a = 0; ¿eso es una función? No.

#include ¿eso es una función? Tampoco.

Etc.

D

#23 Bueno, vale, me has pillado, pero no hay que ser tan quisquilloso.

pawer13

Como javero tengo el problema de que me cuesta, tras 5 años dedicado a la POO, pensar sin objetos, pero llevo unas semanas intentando desoxidarme, con C y con Go (el nuevo lenguaje de Google). Tendré que apuntarme este curso...

#23 Siempre puedes interpretar la asignación como una función:
int a=0 --> =(int a, 0)

incluso puedes hacer cosas rebuscadas como:
int zero()

UbaldoPerez

#18 El código activo, son todo funciones: Él está en lo cierto. El inicio de programa es la FUNCIÓN main. El resto es preparación de datos. Lo dice un dinosaurio del C

D

Yo ya empece con C#; lo siento, he dado mi alma a Microsoft.

RANDOMIZE_USR_0

entonces, si ya he visto el video ¿ya se C? ¿ya puedo hacer mi propio sistema operativo?....

D

Hay GOTO en los comentarios! Con tantas citas ya no se si voy pro el 50 o por el 15 lol

d

C es para nenazas. Yo estoy aprendiendo ensamblador del Z80.

b

¿ Este tio no dejo el C, se hizo cocinero, gano una estrella michelin y se dedica a hacer un programa de tv donde machaca sin piedad a la gente que trabaja en restaurantes ?

g

curioso personaje!!

y las charlas por ahora interesantes!!

Aitor

Pero qué... ¿Soy el único al que le parece algo "extraño" ese tipo? Desde luego C es un gran lenguaje de programación, si a alguien que le pueda interesar le sirve de ayuda un formato como este adelante, aunque sigue pareciéndome más práctico un manual de calidad, los hay para todos los niveles .

Aitor

#12 Parece que en cualquier momento pueda dejar el portátil coger una guitarra de tres cuerdas y empezar a cantar los grandes éxitos de Sex Pistols. ¿Verdad? lol

No es que a C tengas que dárselo todo hecho, sino que la evolución de los lenguajes diría que es al contrario, que es a los lenguajes más modernos a quienes no se lo tienes que dar. Los últimos te lo "camuflan", el problema es que como dices en tu última frase esa no es siempre una buena cualidad cuando por lo que sea necesitas hacer algo donde necesitas saber con más precisión qué o cómo va a hacerse por debajo realmente.

D

#14: Y que a veces tienes que realizar muchas veces una tarea, y conviene saber cómo se hace por debajo para poder optimizarla al máximo.

Por ejemplo, si vais a copiar un mapa de bits y anidáis dos bucles for y metéis dentro algo como "destino[i][j] = origen[i][j];" os resultará un poco lento, porque aunque no lo veáis, estáis metiendo dos multiplicaciones, porque "destino[i][j]" se traduce algo así como "destino + anchomatriz * i + j", y esa multiplicación es lenta en el procesador.

i

#14 en la mayoría de lenguajes de alto nivel cuando necesitas controlar al milímetro lo que se va a hacer puedes llamar a código C.
De todas formas está bastante claro que cada lenguaje es más apropiado para una tarea

Javi-_Nux

Controlar lo que haces no creo que dependa del lenguaje sino de si usas código enteramente escrito por tí o estas usando librerias escritas por otros.

g

El lenguaje C NO ES UN LENGUAJE DE BAJO NIVEL. Evidentemente es menos abstraido que por ejemplo c# pero repito NO ES DE BAJO NIVEL.

mojopicon.net

#53 El alto o bajo nivel no es tanto una cualidad que, o se tiene o no se tiene. Más bien se puede hablar de grados, de que un lenguaje es de más alto nivel en comparación con otros. Desde ese punto de vista, se puede establecer una jerarquía de niveles en los lenguajes donde el nivel más bajo correspondería al ensamblador. A continuación estaría el C, luego otros lenguajes de 3ª generación tipo Pascal, Basic, Cobol..., y por encima de ellos lenguajes con más abstracción, orientados a objetos, etc.

g

Estrictamente se habla de "lenguaje de bajo nivel" cuando necesitas conocer en profundidad las características del hardware a usar dado que no hay "capas transarentes" entre tu y el hardware. Es una definición un tanto personal pero lenguajes de bajo nivel solo son código máquina y ensamblador. Apartir de ahi no se considera "lenguaje de bajo nivel" ni aqui ni en pekin.

m

#61 Alto nivel o bajo nivel se refiere al nivel semantico del lenguaje, el lenguaje maquina es el mas bajo porque es inmediato en al semantica, es decir una instruccion atomica tiene un significado inmediato para la maquina, que la unidad de control actua conforme al codigo de operacion. El ensamblador tiene el mismo nivel semantico, pues no es mas que un codigo mnemotecnico para llamara a 0 y 1 de una manera mas facil de recordar. Los lenguajes han ido subiendo de nivel semantico y su evolucion ha ido para la aplicacion sistematica de los conceptos de abstraccion, modularidad y encapsulacion, por eso c es un lenguaje de sistemas, hoy en dia el diseño y desarrollo de software se hace orientado a objetos, y por eso hoy en dia se utiliza la poo o lenguajes funcionales (por que los lenguajes son como talleres que te dan herramientas para hacer cosas) para hacer software, porque sirven para tener un mejor software