Hace 6 meses | Por ccguy a lysator.liu.se
Publicado hace 6 meses por ccguy a lysator.liu.se

Una forma de vida para no sufrir más de lo necesario como programador en C.

Comentarios

Polarin

#19 ... he he... has dicho conio.h... he he...

El dia que le tuve que decir a un angloparlante lo que significaba... el tio casi se mea de la risa.

xalabin
David_VG

#14 Hoy en día sería más bien Electric Pascal o eHybrid Pascal lol

Dr.Maktub

#14 lo puntero ahora es visual COBOL...hace cuánto no oía/leía borland c++...remember en toda regla

Polarin

#68 Pues... mas MFC... que eran mejor que programar windos a lo cafre con la API, y mirarte lo de lo de llamar a funciones en win32 a base de poner segmentos de memoria y todo eso....DIOS!!! como difrute esa clase, pero que mal lo pase para hace un puto notepad. Ese bucle de eventos con 50 case dependiento de si habian movido el raton o le habian dado con la poila al teclado!!!!

c

#72 Ese bucle de eventos con 50 case

Joer, casi vómito. No me recuerdes eso

Polarin

#79 Yo tambien tengo pesadillas.... No se ni donde tengo el codigo de ese clase: Windows Programming... lo que si se es que en el 90-91 por alguna razon, empezaron a traer al kiosco de mi barrio la revista "Microsoft Programmer Journal" que te contaba todo eso, y me sirvio para mi clase de Windows Programming en el 96.

Pero ... Motif... eso si que es para superheroes... Motif es ... para "Real Programmers don't quiche".... . La madre que los pario.

c

#89 Si. La "programación dura" en X es otra cosa... lol lol lol

Es el assembler de.los GUI

Polarin

#92 Joder, ... yo iba a hacer un compilador para un sistema en tiempo real de un profesor, ... y despues de 20 semanas, mi colega y yo lo dejamos.

Vaya cipostio. Menos mal que luego con GNome y KDE la cosa no estaba tan mal.

Fingolfin

11. Aprende Rust

Polarin

#4 Iba a decir una gilipollecez, pero no la voy a decir... .. que conio, ...RUST no tiene punteros?

prejudice

#3 Supongo que Carbon en todo caso
CC #4

Laro__

#4
use std::cell::RefCell;
use std::rc::Rc;
type Link = Option;

struct Node

struct DoublyLinkedList

impl DoublyLinkedList
}

fn append(&mut self, value: T) ;
let new_node = Rc::new(RefCell::new(new_node));
match self.tail.take() ,
None =>
}
}

fn pop_front(&mut self) -> Option ,
None =>
}
Rc::try_unwrap(old_head).ok().unwrap().into_inner().value
})
}
}

d

#11 ¿Seguro que es doblemente enlazada?

xyzzy

#11 A esto venia, hay que leer más

N

#11 Con la ventaja de que la LinkedList de la librería estándar no usa reference counting en vano. Mandamiento 7, hay que seguirlo más.

D

#26 Y cuál sí usa reference counting en vano y pa qué?

N

#37 El ejemplo del meneante, usa Rc para que el compilador no se queje de que los nodos puedan quedar huérfanos al modificar la lista.

D

#10 Hola ChatGPT

omegapoint

#10 el resurgir de lisp

Option
Option(Rc(RefCell(Node(T)))))))))))))))))))

Laro__

#30 Tengo astigmatismo. Lisp es ilegible para mí.
...y para tí también :)

d

#30 a mi es que me da risa

V

#4 Y tu me puedes decir como cambiar una bañera por un plato de ducha? lol
Mandamiento numero 1. Ves haciendo un curso de fontaneria.
El futuro esta en ser fontanero, aun veo muy lejos que un terminator suba a tu casa a cambiarte la cisterna, pero programacion, sysadmin y demas hierbas, vamos a quedar cuatro gatos con la IA, donde antes habian 10, quedaran uno o dos.

#23 Ves Ve

V

#25 ME-LA-PE-LA lol lol lol

selina_kyle

#23 cualquier informatico puede aprender a cambiar un plato de ducha pero muy pocos fontaneros pueden aprender a programar. Tranquilo, estais muy a salvo.

hideputa

#31 Se ve que no frecuentas a muchos informáticos.

selina_kyle

#36 de hecho trabajo codo a codo con ellos todos los días y alguna vez he tenido que escribir algo en Python con su consecuente review destructora lol

hideputa

#42 ¿Y en serio crees que cualquier informático podría cambiar un plato de ducha? No es esa la experiencia que yo tengo con mis compañeros de carrera y de trabajo. Ha llegado un punto en que la mayoría ni cambiar un disco duro.

crateo

#43 "cualquier informatico puede aprender a cambiar un plato de ducha"

Los profesionales de la informatica tienen que lidiar con aprender cosas que no saben hacer todos los putos dias de su vida.

hideputa

#45 Lo sé, soy uno de esos profesionales. Y sigo creyendo que no funcionaría. Cuando una persona lleva años haciendo trabajo de oficina es muy complicado que se pueda adaptar a hacer trabajos "sucios". Además con una importante rebaja de sueldo y empezando por abajo. Eso y que el perfil del informático medio es más bien introvertido... No lo veo.
Ni siquiera en mi caso me atrevería a hacer una excepción, y eso que me pasé toda la adolescencia ayudando a mi padre en la obra. Pienso en volver a trabajar asado en verano, helado en invierno, con la piel cuarteada del frio, el calor y el polvo de cemento, rodeado de compañeros prácticamente analfabetos que solo hablan de mujeres y fútbol y me entra ansiedad. Antes solicito un IMV y me pongo a pan y agua.

selina_kyle

#43 Cualquiera puede aprender a cambiar un plato de ducha si realmente necesita hacerlo. Pero los que se dedican a cambiar platos de ducha no creo que puedan aprender a programar en condiciones.

Tus compañeros de carrera y trabajo no saben un disco duro porque no lo necesitan y porque pueden pagar a alguien para hacerlo. Tu pagas para que alguien te haga el pan, esso no significa que no puedas aprender a hacerlo en 1 dia.

hideputa

#60 Cuanto desprecio por el saber hacer ajeno. ¿De verdad crees que mi primer pan saldría igual de rico que el de un panadero que lleva toda la vida haciendo pan? ¿Que mi primer plato de ducha no estaría torcido ni tendría fugas? Y por otra parte, a programar puede aprender cualquiera con un CI por encima de 85 en un par de semanas. A programar bien... Eso es otra historia.

Y aquí no hablamos de poner un plato de ducha como hobby, sino como empleo. Poner un par de docenas de platos de ducha cada semana si uno quiere comer. ¿En serio piensas que los oficinistas que llevamos trabajando sentados toda la vida aguantaríamos ese ritmo? Mucho wishful thinking veo yo ahí.

selina_kyle

#62 si es muy facil. Con practica y con un mindset de ingeniero no es que puedas, es que seguro que lo vas a hacer mejor y mas eficientemente que el que lleva toda la vida. En unas semanas puedes estar vendiendo pan y poniendo platos de ducha sin problema (spoiler: los obreros profesionales hacen chapuzas y ponen platos de obra torcidos y con fugas)

Pero ningun albañil o panadero podria escribir un codigo que vaya a producion en semanas. Es totalmente imposible. Solo un pequeño porcentaje podria despues de años de estudio y practica pero para la mayoria seria algo imposible.

hideputa

#64 La prepotencia es fuerte en tí.

En fin, creo que no nos vamos a poner de acuerdo. Que tengas buena tarde.

D

#23 "Vamos a quedar cuatro gatos"

frg

#4 Por lo que veo es algo imgosible de implementar en Rust.

Polarin

#3 ... no se... pero lo he estado mirando y ahora no tengo tiempo, pero me da la impresion que lo que hace es lo hacia JAVA: no te dejo tener punteros nulos, pero de strangis.

Pero esto solo digo porque C es mi amor de adolescencia... cuando creci me econie con C++, ... y termine casado con JAVA.

xalabin

#6 ¿Soy el único que hablando de C y viéndote escribir sin la ñ piensa que ncurses molaba más que conio? 😂

D

#6 Lo mismo, yo por el boom de Android.

Polarin

#20 Yo aprendi android, ... y ... no se ... a ver que que los moviles son ordenadores muy pequenios... . Estaba muy bien eso de aprender esas gilipolleces, esos frameworks, ... pero ... cualquier persona que quiere que un puto cahcarro que le cabe en la mano, vaya a hacer lo mismo que mi desktop que tiene un huevo de poder, es que es gilipollas.

c

#76 Un móvil de hoy con Android es mucho más potente que un Desktop de hace 15 años.

u

#80 solo si compras un móvil caro, los normales no tanto...
Y como bien dices, un móvil (caro) es como tener un ordenador viejo de cojones.

De todas formas, l la limitación de un móvil no es el hardware desde mi punto de vista, es el software. No puedes meter sistemas operativos a tu antojo, no puedes tener sistemas virtualizados, el control de red es una mierda, la interfaz usuario máquina es incomodísima para crear contenido...

Cómo herramienta de consumo de información y cámara de fotos/video. Genial, eso sí. Yo no podría vivir ya con un móvil tonto sin echar de menos todo lo que puedo consultar y consumir con uno inteligente. Pero a los que nos gusta crear, un móvil se nos queda muy manco sin un sobremesa o portátil de compañero inseparable

c

#84 Si entiendes 200€ por "móvil caro", si.

En el resto tienes razón. El problema es el software.

La.UE debería legislar de modo que asegure que nuestros móviles son realmente nuestros.

u

#85 el mío es de 200€ y no es tan potente (tampoco es nuevo lol)
Me puedes dar alguna recomendación de ese precio?

A

#6 y el divorcio para cuando??

Polarin

#21 Pues JAVA se me ha divorciado hace 2 anios y quiere su distancia (ahora soy SRE) y yo tamben, pero Python y Data Science es mi nuevo amor de senectud. Aunque RUST me esta haciendo morritos, pero su padre es un puto mafioso (Microsoft) que no me da nada de confianza.

N

#6 Java te deja tener punteros nulos, simplemente da error al acceder a uno en tiempo de ejecución.

Polarin

#28 Es que JAVA nos lo vendieron hace 30 anios con "no hay punteros"... pero luego si los habia.

Igual que lo de es multiplataforma... si, pero no multiversion. La de ostias que habia en los 1999-2005 por esos errores de que no existia le metodo porque lo habian quitado de una version a otra.

Y luego el noclassdeffound de los cojones... que todo el mundo se quedaba a cuadros y es un error del linker. Pero la gente que no habia linkado codigo no sabian de que estabas hablando. A partir de ... alrededor del 2007, habia gente que no sabia que era linkar el codigo y se quedaban anodado/as cuando les explicabas que habia fallado el linker: la definicion estaba ahi, pero la biblioteca no la tenia. En C o C++ era normal, en JAVA no es tan normal, pero cuando pasa es un: " EIHN!!?!?!?!?!?"

c

#74 Te cuento un secreto: Todos los lenguajes tienen punteros. Son imprescindibles, sin ellos por ejemplo no habría llamadas por referencia.

Polarin

#81 Really?

Me acuerdo de mi profesor de lenguaje Ensamblador y Fortran:
-Ensamblador de la 370: "no la cagauies, cuando corrais incluso un programa de los de ejercicio de la clase, teneis que poner las instrucciones de cambio de rutina al principio, porque si no el sistema no sabra desde donde os ha llamado y os habeis cargado el maiframe de la universidad." Basicamente guardar el puntero desde donde te iban a llamar a tu programa.
-Fortran: "El ejercicio 7 es sacar la direccion del programa, a partir de una funcion.". Basicamente ire para atras en la pila.

Eso eran los punteros a funciones y programas.

c

#88 Je, que tiempos.

512M de RAM para 20 tíos y una potencia de proceso menor a la de un Pentium (que no existía)

N

#74 Es que JAVA nos lo vendieron hace 30 anios con "no hay punteros"

Pero si en Java todo son punteros. Salvo los tipos básicos todo lo demás, hasta los arrays, son punteros. No es posible pasar argumentos por valor, y no existen los punteros siempre válidos como las referencias en C++ o Pascal. El problema llega hasta tal punto que existen métodos en la librería estándar para validar argumentos en los constructores[1] de lo habitual que es ese boilerplate, porque no hay forma de indicar al lenguaje que no acepte argumentos nulos.

[1] https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#requireNonNull(T)

Polarin

#82 Nooooo... el marketing en el 95-97 era que "no habia punteros" ... cuando nos vimos el "null pointer" entonces nos dimos cuenta que que era todo marketing.

Los llamaban "referencias".

c

#6 Java "parece que no tiene punteros" precisamente porque todo son punteros.... lol lol lol lol lol

llorencs

#48 En Java todo son variables por referencia aka punteros?

Así que es como Python, que también las variables son por referencia/punteros. Y si no lo sabes, la puedes liar parda y tener comportamientos raros. Es lo que me he encontrado con novatos de programación y al manejar listas les pasaban "cosas raras".

c

#53 En Java todo son variables por referencia aka punteros?

Si, salvo los tipos primitivos que son completamente innecesarios y existen solo por eficiencia.

llorencs

#54 Pero supongo que ocurrirá lo mismo que en Python, y por ejemplo una variable inmutable, tipo entero, si haces algo así:
A=8
B=A
A=10

Resultado:
A=10
B=8

Per suponiendo que pudieras hacer algo así con arrays (obviamos las declaraciones necesarias)
A= ["a","d"]
B=A
A=["a","C"]

Resultado:
A=["a","C"]
B=["a","C"]

¿verdad? O no podrías hacer esas operaciones en Java de manera tan fácil?

c

#57 Claro. Pero a lo que tu te refieres es a objetos inmutables, no a variables inmutables.

En tu caso, ni A ni B son inmutables. El objeto 10 y el objeto 8, en cambio, si lo son.
Cuando haces A=10 lo que estás haciendo es cambiar la referencia que había en A (que apuntaba al objeto al objeto 10.

Todo eso suponiendo que el entero 8 y el entero 10 son objetos. Normalmente por eficiencia no es así.

El segundo caso que expones es similar y tu suposición sobre el resultado es errónea. Cuando haces A=[.... estás cambiando la referencia que hay en A, y ya no es la misma referencia que B.

Otra cosa es que cambies el objeto referenciado por A y B.

Espero que se entienda la chapa...lol lol

En Java, es igual. Solo cambia el modo de expresarlo ligeramente (java no tiene las listas integradas en el lenguaje)

Polarin

#48 #53 Pero hace 30 anios nos lo vendieron con que "no habia punteros ya"... habia referencias que eran lo mismo, pero no podias modificarles (sumar cosas a punteros o asignarlas).

c

#73 ¿?
Un puntero y una referencia son exactamente lo mismo. Y claro que puedes modificar tanto la referencia que almacena la variable como el contenido de la información referenciada (salvo las "constantes", claro)

Polarin

#78 Joder... son y no son, el putero puedes asignarlo y hacer tu +1, pero una referencia no puedes cambiarla. Eso es lo que nos vendieron con JAVA.

c

#90 Claro que puedes cambiarla. Por ejemplo:

Object x=null;
x=new ArrayList();
x=new Ladrillo()

Lo que no puedes hacer es poner "un número" en una referencia. Cosas del tipado fuerte.

M

#6 null pointer assignment

c

#3 Rust es un bluff

D

#24 Entonces me puedo ahorrar el aprendérmelo? Casi parecía como si ahora estar en C++ y no perder el culo en aprender Rust es como uh, adiós trabajo como cuando te lo quita la IA.

c

#40 Rust no sirve para sustituir a C++.

No es más que un C para acojonaos.

barcelonauta

Como la vida misma

m

#39: Tienes Python 3, copiaste el código a Menéame y perdiste la indentación, así que ya no tienes código. #Python_no_gracias

Gol_en_Contra

Aaaaaaaa la saaaca de favoritos.

h

C es el lenguaje de los machotes. Todo lo demas son mariconadas

omegapoint

#17 porque le compila a hostias

Los hombres de verdad usan tarjetas de cartón, aguja y pulso firme.

D

#32 Los hombres de verdad usan mariposas. Las liberan y dejan que éstas aleteen delicadamente, creando perturbaciones que acaban modificando los flujos de aire de la atmósfera superior, creando bolsas momentáneas de aire a alta presión, que actúan como lentes que deflectan los rayos cósmicos y los enfocan hacia un disco duro magnético para cambiar los bits deseados.

D

#34 Al final eso que dices no deja de ser un lenguaje de alto nivel, aunque sea con mariposas y elementos físicos. Así que ese método está por encima de C.

cc #32

h

#34 bits? pero aún con programación digital? pasate a la computación analógica!

X

#32 Yo he usado tarjetas de cartón y una aguja para perforarlas, pero no para programar, solo para duplicar alguna estropeada. Y no soy un hombre de verdad, solo un yayo mirando meneame.

omegapoint

#69 yayo no te sulfures, que solo es un meme de informaticos.

Abeel

Creo que los que os debatís por aquí estáis más cercanos de la jubilación que de ser juniors en algún sitio lol

hideputa

#0 Ese panfletillo hereje no vale un duro. Las verdaderas Sagradas Escrituras del C son estas:

https://gustedt.gitlabpages.inria.fr/modern-c/

llorencs

#56 Ya, yo hablaba en general. Java, PHP o Javascript tampoco me acaban de entrar. Sobre todo Java. PHP lo acabé usando y dominando más o menos.

Supongo que si me pusiera lo podría entender y hacer cosillas. Pero, me cuesta. Y hoy en día no tengo nada que me lleve a aprenderlos.

Y si tuviera que aprender algo relacionado con C, sería C++ que podría tener cierta utilidad práctica para mi en el trabajo.

O si hiciera bibliotecas Python y tuviera que crear código en C para Python. Pero no creo que nunca me haga falta llegar a ese nivel. Y no tengo nivel para hacerlo.

zeioth

Intente volverme bueno en C, pero despues de leer código en C decidí esperar a los ordenadores cuánticos.

c

#50 Pues el código C es fácil de leer a no ser que lo hagas difícil queriendo. La sintaxis de la mayoría de lenguajes está cogida de C y desde luego la obligación de declarar variables justo después de inicio de bloque es un acierto.

llorencs

#52 Depende a mi siempre se me hace duro leer el código basado en C. Lo entiendo, pero no sé, tiene algo que no me gusta y hace que me cueste mucho acabar de cogerle el punto y que pueda hacer lo mismo que hago con otros lenguajes de programación.

c

#55 Pues salvo los punteros (que son importantísimos por otra parte) el resto no se diferencia demasiado de un programa en PHP o Java....

El aspecto, me refiero.

t

#56 Ya, luego coges un código C lleno de macros y directivas de preprocesador y no dirás lo mismo.

d

El acento es importante. No se debe cecear.

Sinopeus1

1. Amarás a C sobre todas las cosas.
2. No tomarás el nombre de una variable en vano.
3. Santificarás las listas.
4. Honrarás a Dennis Ritchie.
5. No matarás procesos zombis.
6. No cometerás actos impuros (violación del segmento).
7. No robarás código sin licencia.
8. No harás falsas declaraciones de variables.
9. No consentirás pensamientos ni deseos impuros. (Programar en otro lenguaje)
10. No codiciarás el código ajeno.