Puntero Nulo: El error de los mil millones de dólares

Sir Charles Antony Richard Hoare

Sir Charles Antony Richard Hoare

El británico Tony Hoare conocido por inventar el algoritmo Quicksort en 1960, dará una conferencia en el QCon de Londres llamada “Null References: The Billion Dollar Mistake“, donde asegura que desde la invención del puntero o referencia nula en 1965 para un lenguaje orientado a objetos (ALGOL W), esta ha causado dolores de cabeza a programadores en los innumerables errores, vulnerabilidades y fallos de sistema que probablemente han causado mil millones de dólares en daños en lo últimos 40 años.

Asegura que su objetivo principal era que todo manejo de referencias estuviera completamente seguro.

Si alguna vez has programado en un lenguaje orientado a objetos sabrás de que dolores de cabeza se trata, ¿Pero que sería de Java, C/C++ y Visual Basic sin punteros (nulos) bajo responsabilidad y uso adecuado por parte del programador?

Link: Null References, the Billion Dollar Mistake (Slashdot)

Compartir Compartir
Publicado por Boxbyte el 4 de March 2009 en la categoría Software con los tags , , , . Tiene 57 comentarios.

57 Comentarios

Puntero Nulo: El error de los mil millones de dólares

Deja tu Comentario ↓
fjfuente

DesaprobarAprobar19fjfuente dijo el 4-3-2009 a las 22:31:

1

el null pointer exception es legendario xD

laullon

DesaprobarAprobar49laullon dijo el 4-3-2009 a las 22:34:

2

El problema no es el NULL, el problema es que hay mucho inútil programando….

Ver Comentario... Christian Muñoz dijo el 4-3-2009 a las 22:36 ...

Ver Comentario... Leonardo dijo el 4-3-2009 a las 22:50 ...

Ver Comentario... mistico dijo el 4-3-2009 a las 22:50 ...

meteoro2012

DesaprobarAprobar-3meteoro2012 dijo el 4-3-2009 a las 22:59:

6

no es un dolor de cabeza , aplica division por 0.

Claudio

DesaprobarAprobar-3Claudio dijo el 4-3-2009 a las 22:59:

7

como que faltó mas información boxbyte, entiendo poco o nada de esta noticia…

Ver Comentario... Franco Ferrari dijo el 4-3-2009 a las 23:15 ...

lolcito

DesaprobarAprobar18lolcito dijo el 4-3-2009 a las 23:17:

9

java te soluciona bastantes problemas de punteros :D … el verdadero cacho es programar decentemente en C++ donde todo debe ser explicito .___.

franxjam

DesaprobarAprobar13franxjam dijo el 4-3-2009 a las 23:17:

10

noticia solo para programadores

kotelo

DesaprobarAprobar-4kotelo dijo el 4-3-2009 a las 23:19:

11

Sinceramente, me apesta todo esto de los punteros xD

ONi

DesaprobarAprobar5ONi dijo el 4-3-2009 a las 23:21:

12

yo creo que si a todos de chiquititos nos enseñaran a declarar nuestros punteros entonces no habría necesidad de punteros nulos, pero de todas maneras se sienten como necesarios, si no existiera, definiríamos alguna constante como tal, y el software no sería escalabe ni universal.

Fredy

DesaprobarAprobar8Fredy dijo el 4-3-2009 a las 23:23:

13

Ya que se referencia a Visual Basic, no creo que pueda haber generado tantos dolores de cabeza con punteros, pues simplemente NO los soportaba (hasta la aparición de .NET)…

udon

DesaprobarAprobar-5udon dijo el 4-3-2009 a las 23:46:

14

haran falta una buena googleada para que pueda entender algo de lo que dicen…

Ver Comentario... esteban dijo el 4-3-2009 a las 23:50 ...

yo

DesaprobarAprobar-4yo dijo el 4-3-2009 a las 23:50:

16

no caché niuna

alter

DesaprobarAprobar20alter dijo el 4-3-2009 a las 23:57:

17

NullPointerException …. o como dicen por ahí WeonPencaException
:P

pin

DesaprobarAprobar1pin dijo el 5-3-2009 a las 00:10:

18

me, no entender nada del puntero. algun programador que nos lo explique mejor

Ese man me

DesaprobarAprobar-5Ese man me dijo el 5-3-2009 a las 00:20:

19

Por eso fué que me salte el capítulo de memoria dinámica.

alexserver

DesaprobarAprobar-1alexserver dijo el 5-3-2009 a las 00:30:

20

se supone que el famoso recolector de basura de java y c# enmiendan el descuido de los programadores despistados, no ?

cimoc

DesaprobarAprobar-2cimoc dijo el 5-3-2009 a las 00:33:

21

hummm…

Porfin una buena razón para convencerme de que fue bueno no haber estudiado civil informatica xD (me mata la programacion)

Saludos, gente que entiende la noticia :-\

mrjavo

DesaprobarAprobar1mrjavo dijo el 5-3-2009 a las 00:54:

22

WeonPencaException jajajajaja

Q wea mas penca debuggear en c/c++ y darte cuenta que el maldito puntero tenia el valor 0×0 … azi no mas

mrjavo

DesaprobarAprobar-2mrjavo dijo el 5-3-2009 a las 00:54:

23

… despues de HORAS de depuracion xD

mastermind

DesaprobarAprobar18mastermind dijo el 5-3-2009 a las 01:12:

24

Sabes que eres un mal programador cuando tus colegas informaticos te dicen,

“Ey, NullPointerException, ¿ vamos a almorzar ?”

Vicho

DesaprobarAprobar0Vicho dijo el 5-3-2009 a las 01:24:

25

punteros NULL o referencias NULL?

mistico

DesaprobarAprobar11mistico dijo el 5-3-2009 a las 01:26:

26

Bueno para los que no entiendan…punteros son variables que almacenan direcciones en memoria, más simplemente; los punteros sirven para acceder a la memoria de la pc y realmente ocasionan problemas o confusiones, de hecho cualquier pequeño detalle no permiten ejecutar el prgrama o se puede ejecutar pero se ejecuta de una mala forma. A VECES ES TARDADISIMO O IMPOSIBLE ENCONTRAR EL ERROR.

Jams

DesaprobarAprobar-5Jams dijo el 5-3-2009 a las 02:05:

27

Toda la razon quee weaa mas perdida de tiempo que encontrar los errores de los punteros wn. Gracias a Dios llego Java a salvarnos!

agua_light

DesaprobarAprobar2agua_light dijo el 5-3-2009 a las 02:10:

28

realmente me encabrona mucho cuando muevo el mouse y a veces el puntero salta como loco.

y de la noticia no entendi ná.

rex hauser

DesaprobarAprobar11rex hauser dijo el 5-3-2009 a las 02:23:

29

El uso explicito de punteros en Java casi no existe, el nullpointerexception es de rookies. En C el tema es distinto, ahí si hay un uso explicito por parte del programador y no existen cosas como el infame garbage collector y demases, todo es a punta de malloc, realloc, free y es fácil confundirse sobre todo si se desarrolla en grupo, memory leaks, segfaults imposibles de tracear por errores infantiles como no añadir un 1 al strlen dentro de un malloc. Eso es C. Java es a prueba de idiotas.

jijiji

DesaprobarAprobar-5jijiji dijo el 5-3-2009 a las 02:30:

30

puntero nulo? sorry pero la traduccion suena rancia

MaLMaX

DesaprobarAprobar1MaLMaX dijo el 5-3-2009 a las 04:48:

31

NullPointerException y la ctm…

ajajaj el viejo se parece a don miguel xD le falta el puro “piercing” en el cuello…

saludos!

Ramzendo

DesaprobarAprobar6Ramzendo dijo el 5-3-2009 a las 05:31:

32

Disculpen mi ignorancia, pero creo que en JAVA no se utilizan los punteros de forma explicita como en C o C++
Asi que hay mejores formas de tratar las excepciones en Java.

Andrés

DesaprobarAprobar0Andrés dijo el 5-3-2009 a las 06:08:

33

la verdad que a mi me dio más que un dolor de cabeza tratar de entenderlos y creo que nunk termine de entenderlos por completo :P

livetnediser

DesaprobarAprobar0livetnediser dijo el 5-3-2009 a las 06:48:

34

Una de las razones para usar C son los punteros, con sus enormes ventajas y sus desventajas. Los punteros son la unica razon por la que me planteo usar C.
Razmendo, aunque en JAVA no se usan punteros como tales, tambien puede salir el error al usar una variable sin inicializar (sin valor).

ZEROmaverick

DesaprobarAprobar2ZEROmaverick dijo el 5-3-2009 a las 08:05:

35

si le temes a los punteros, es que eres muy chanta como informatico….

rockdrigo

DesaprobarAprobar2rockdrigo dijo el 5-3-2009 a las 08:30:

36

y siempre son errores re weones…

CLAUDIO

DesaprobarAprobar-1CLAUDIO dijo el 5-3-2009 a las 08:32:

37

Nunca tuve problemas en puntero con c++ lastima que no e probado con otros leguajes

Ancelot

DesaprobarAprobar1Ancelot dijo el 5-3-2009 a las 08:59:

38

Jajjaja, NullPointerException….
Debes ser su mejor amigo o él te traicionará xD

JotaMachuca

DesaprobarAprobar2JotaMachuca dijo el 5-3-2009 a las 09:01:

39

Si los punteros son los primeros entes con inteligencia propia!!!

Cuantas veces no tenian todo ok y al final su mitico “null pointer assignement” o algo así….

Carlos Le Mare

DesaprobarAprobar0Carlos Le Mare dijo el 5-3-2009 a las 09:40:

40

@rex hauser

Abosultamente de acuerdo…. cuando mencionaron java (y no es que programe tanto en java tampoco) no podía acordarme de haber usado un puntero nulo… y claro, nunca he necesitado punteros en Java…. Poco me acuerdo de cuando programaba punteros en Pascal en la U. pero definitivamente era un tema el no equivocarse con los punteros.

Viva Java y su infame Garbage collector.

clemare
PD: Tampoco recojo la basura en mi casa…. :-)

mastermind

DesaprobarAprobar1mastermind dijo el 5-3-2009 a las 09:42:

41

Aunque Java maneje tremendamente bien los punteros, igul el NullPointerException es el error o la excepcion mas comun encontrada al programar en Java.

Pedro A.

DesaprobarAprobar0Pedro A. dijo el 5-3-2009 a las 09:45:

42

¿Pero que sería de Java sin punteros (nulos)?

Se usaría try catch

Con null
str = in.readLine();
if (str == null) break;

con try-catch

try {
    str = in.readLine();
} catch (EndOfFileException e {
    break;
}

Franco Catrin

Franco Catrin dijo el 5-3-2009 a las 09:58:

43

Recuerdo una frase de Horst von Brand (UTFSM):

“Lamentablemente, la inmensa mayoria de los “programadores” debieran dedicarse a plantar papas, asi resultarian mas
productivos para la sociedad”

M

DesaprobarAprobar5M dijo el 5-3-2009 a las 10:45:

45

Frases Célebres:

“La gestión manual de bloques de memoria en C es como hacer malabarismos con pastillas de jabón en la ducha de la prisión: todo diversión hasta que cometes un fallo”
– Un usuario anónimo de un foro Usenet

Pa los fans de Java:

“Java es lo más penoso que le ha ocurrido a la informática desde MS-DOS”
– Alan Kay

“Bien, Java podría ser un buen ejemplo de cómo debería ser un lenguaje de programación. Sin embargo, las aplicaciones Java son buenos ejemplos de cómo las aplicaciones no deberían ser”
– Pixadel

“Si Java dispusiera de un mecanismo real de recolección de basura, la mayoría de los programas deberían autoeliminarse al ser ejecutados”
– Robert Sewell

xD

Javier

DesaprobarAprobar1Javier dijo el 5-3-2009 a las 11:11:

46

Pero como no mencionan core dumped segmentation fault. Complicarse con los punteros en C no es algo que te vuelve incompetente, sino que natural. No hay excepciones ni avisos de que está pasando, nada de direcciones 0×0 y volas así, sino que apuntando a basura, apuntando a direcciones de memoria utilizadas, el lenguaje no te proteje en lo absoluto.

Pero bueno, de ahí C sea unos de los lenguajes más entretenidos para programar :P .

Celso

DesaprobarAprobar0Celso dijo el 5-3-2009 a las 11:34:

47

Son la raja los punteros hay que saber usarlos nomás.
Pero ya c, c++ es raro ver programas, la mayoría de los nuevos desarrollos son en java y c#.

inventionary

DesaprobarAprobar2inventionary dijo el 5-3-2009 a las 12:10:

48

Anteriormente los programadores (por ej. coboleros) trabajaban en “bases de datos” donde utilizaban para especificar que un campo no estaba seteado en la base de datos un 99999 (si era numérico) hoy con un preciado null que es mucho más acertado podemos definir que un campo no tiene un valor asociado.

Si uno programa de manera prolija y tiene en cuenta los posibles NullPointerException que pueden ocurrir en la ejecución de una aplicación no deberian aparecer esos errores.

Para los que no comprenden el significado de este NullPointerException doy un ejemplo:
Existe un cliente que tiene una dirección de la cual quiero obtener la calle. El día que quiera obtener la calle de ese cliente, pero nadie especificó cual era la dirección, me puedo encontrar (si no tomo los recaudos) con un NullPointerException.

null

DesaprobarAprobar0null dijo el 5-3-2009 a las 13:50:

49

null

Dario

DesaprobarAprobar-1Dario dijo el 5-3-2009 a las 15:51:

50

No es por nada pero visual basic no tiene punteros nulos……. (pa que corrigan la noticia)

rex hauser

DesaprobarAprobar1rex hauser dijo el 5-3-2009 a las 17:34:

51

@Celso no es tan así. C y C++ son aun ampliamente utilizados en todo tipo de programas, sobre todo en componentes tipo core que requieren de rapidez y eso claramente no se obtiene desarrollando en Java y su byte code o en C# y su common language runtime (que en lo personal nunca le vi algún sentido). El lenguaje compilado por excelencia es C y sus hermanitos (no se me enojen los fortran, ada, pascal, delphi también los quiero). Si bien existen lenguajes que hacen la vida mas fácil hoy en día, creeme, que nadie haría un kernel, modulo, driver, game engine, whatever en Java. No es que odie Java o algo así, pero para que estamos con cosas… Java es para jueguitos de celular.

Nomad

DesaprobarAprobar0Nomad dijo el 5-3-2009 a las 19:24:

52

Pues, el error es de los programadores al no entender bien el uso de los apuntadores, cosa mas que basica para la programación en c/c++ principalmente.

Juan

DesaprobarAprobar0Juan dijo el 5-3-2009 a las 19:53:

53

Java es para jueguitos de celular —> Wow !

Creo que son orientaciones distintas. Tampoco veo construir componentes de negocio typo EJB en C o C++. Por otro lado, rex hauser tiene razón (por ahora). Y en realidad, si, Java es para jueguitos de celular, aplicaciones móviles de todo tipo, portables, desarrollo de componentes de negocio, componentes web, mapeo Objetal-Relacional, plataformas distribuídas, etc. Sres. no a la guerra santa por favor.

alejandro

DesaprobarAprobar0alejandro dijo el 5-3-2009 a las 20:27:

54

La verdad siempre imagine que c++ era para desarrollos complejos, donde el contacto era muy cercano con las características del hw y que para los desarrolladores comunes y silvestres (aplicaciones de negocios), estaba java y c#. ¿Me equivoco?

en lo personal ocupo c# por el desarrollo rápido, aunque aún soy newbie.

Saludos

Alfredo

DesaprobarAprobar0Alfredo dijo el 5-3-2009 a las 22:58:

55

Jajajaaj y Clasico y Legendario Null Pointer Exception xD

Javier

DesaprobarAprobar0Javier dijo el 6-3-2009 a las 09:27:

56

@Celso: C Es raro si no juegas juegos con NVidia. Revisa que lo que es CUDA y te vas a dar cuenta que C es la base de muchos de estos juegos.

sergio

DesaprobarAprobar0sergio dijo el 9-3-2009 a las 00:31:

57

nunca me cayo en logica el puntero nulo, pero si era lógico para saber que no estaba direccionando algo.

Deja tu Comentario

XHTML: Puedes usar: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Previsualizar comentario?