Tony Hoare, quien creó la idea de una referencia nula en primer lugar, lo llama su error de un millón de dólares .
El problema no se trata de referencias nulas per-se, sino de la falta de una verificación de tipo adecuada en la mayoría de los idiomas seguros (de lo contrario).
Esta falta de soporte, desde el lenguaje, significa que los errores "errores nulos" pueden estar al acecho en el programa durante mucho tiempo antes de ser detectados. Tal es la naturaleza de los errores, por supuesto, pero ahora se sabe que los "errores nulos" son evitables.
Este problema está especialmente presente en C o C ++ (por ejemplo) debido al error "duro" que causa (un bloqueo del programa, inmediato, sin recuperación elegante).
En otros idiomas, siempre está la cuestión de cómo manejarlos.
En Java o C #, obtendría una excepción si intenta invocar un método en una referencia nula, y podría estar bien. Y, por lo tanto, la mayoría de los programadores de Java o C # están acostumbrados a esto y no entienden por qué uno querría hacer lo contrario (y reírse de C ++).
En Haskell, debe proporcionar explícitamente una acción para el caso nulo y, por lo tanto, los programadores de Haskell se regodean con sus colegas, porque lo hicieron bien (¿verdad?).
Es, en realidad, el viejo debate sobre el código de error / excepción, pero esta vez con un Sentinel Value en lugar del código de error.
Como siempre, lo que sea más apropiado realmente depende de la situación y la semántica que está buscando.