Cita: 1º Hoy yo se muy bien tipo de variable es foo y tal vez no requiera nada que me recuerde que es una lista... pero que pasará dentro de 2 años cuando vuelva a tomar el código para agregarle cosas o para reutilizarlo en otro lado.
Para entender cualquier código necesitas conocer el tipo de las variables que se están usando. Para conocer dicho tipo, lo normal es ir a la declaración de dicha variable, no a su nombre.
Si el programa está bien hecho, las funciones se explicarán por si solas, y serán "pequeñas", no grandes bloques con decenas de variables arrastradas.
Cita: 2º Hoy yo estoy dentro de la empresa y se muy bien lo que es foo, pero tal vez manaña me vaya y venga otro tipo que no tendrá la más remota idea de lo que es.
Que mire la declaración, tan simple como eso. Dicha declaración, en C, tendrá que estar en el inicio de la función; y en el caso de C++, cerca del lugar donde se usa (normalmente).
Cita: 3º Muchas veces yo tengo varios objetos que están destinados a la misma "operación"... Un botón, una caja de texto, una imagen, etc.. de esta forma puedo utilizar UN SÓLO nombre para todos ellos difiriendo tan sólo de su prefijo: btnFoo, txtFoo, picFoo.
Puede que para programar GUIs en IDEs sea útil... Sin embargo, para código "puro", normalmente otras maneras de identificar a cada cosa según su función.
Por ejemplo, un botón no podrá tener la misma función que una lista, pese a que uses las dos para obtener un nombre de una lista (por decir algo). Al botón le puedes llamar por su etiqueta, y a la lista por el plural de los elementos que contiene.