sábado, junio 30, 2007

Mitos y realidades

Hay simplemente algo que no soporto.

Que es?

Gente discutiendo en forma ilógica. Gente añadiendole nieve a la bola mito de turno y además creyéndose los seres mas tesos del universo.

Hablando desde mi ignorancia casi fingida hago que un recién conocido diga que Linux es una Mierda, que FreeBSD es el BSD de las putas, que al kernel de Linux todo el mundo le mete la mano, que el kernel de BSD de estilo pseudo-microkernel es mas rápido que el de linux (En serio necesito que alguien me explique como se mide la "velocidad" de dos kernels distintos).

Cuando sepa al respecto entenderé algo respecto a esto.

(PD... me dijeron desarrollador y no me gustó)

jueves, junio 28, 2007

"False Advertising"

Inicialmente hice este blog como reemplazo al pedazo pseudoliterario que tenia en msn spaces. Sin embargo, por razones del destino (Y con esto me refiero a que no sé porqué) este blog se ha vuelto en cierta forma monotemático hablando de lenguajes de programación, software y renegando de la ineptitud de todo el mundo.

En la imagencita se da uno cuenta que realmente es "false advertising" porque no volví a escribir de sci-fi ni tampoco de matemáticas.

siendo asi... dejare este exclusivamente para cosas de computación... y de matemáticas... Lo cual tiene su estrategia yo creo que de target :P

Dejaré aqui las cosas "duras"... (Después cambio el letrerito).

Y las criticas literarias de alguien que no sabe nada, las descargas psicomorboafectivas y temas para el noingenierodesistemas irán en el otro

lunes, junio 25, 2007

Anti-Objetos

Leí un articulo hace poco que muy interesante sobre la noción de antiobjeto.

Hacen el ejercicio de poner estudiantes a que generen códigos de inteligencia artificial para los fantasmitas de pacman. En estos intentos sucede esto:

The psychology of programming attempts to explain
programmer’s intuition. Syntonicity [31] is an introspective
behavior that makes us want to be the ghost in order to think
about what the ghost should do and how it should do it.


En el contexto que habla el artículo, pareciera (y aqui hablo soy yo, el artículo en ningún momento resulta una crítica) que la orientación a objetos favorece esta introspección. La delimitación de un programa a "entidades abstractas con identidad, comportamientos y relaciones entre si" es un escenario mas apto para la introspección que un programa digamos lógico ó estructurado.

Me explico:

El razonamiento usando la modularidad de objetos da esto: "huy tengo una clase fantasma (probablemente con una posición y algo mas) y otra pacman... que haría si yo fuese un fantasma para cazar a pacman?"... que tiene esto de malo?... en el artículo muestran como puede lograrse con una cosa que llaman "difusión colaborativa", obtener una propiedad emergente simplemente asociando una función de cercanía a pacman que es computada por las "baldosas?" del piso (quien habría tenido en cuenta las baldosas en el UML... yo no :P)

Ahora bien, aquí es donde radica mi infundada teoría... creo que la noción del programa estructurado, como totalidad (aquí olvídense de módulos y esas maricadas... programas horribles en quick basic sin funciones donde todo esta en un archivo y todo está mezclado) impide esta introspección y en cierta forma puede permitir descubrir estas soluciones que dependen no de la reacción de la suma de las partes sino de las reacciones de un sistema holístico.

Ya solo falta tomar el conjunto de ratas de laboratorio de primer semestre y hacer la prueba.

(No sé hasta que punto los lenguajes funcional inhiban la introspección)

jueves, junio 14, 2007

"Orientado a Objetos" 2

Please don't fall into the trap of believing that I am terribly dogmatical about [the goto statement]. I have the uncomfortable feeling that others are making a religion out of it, as if the conceptual problems of programming could be solved by a single trick, by a simple form of coding discipline! (Edsger Dijkstra)

Anteriormente dijimos como OO surge como una forma adicional de agregar modularidad, en forma análoga a como en algún momento lo hizo la programación estructurada; sin embargo, muchas veces el hype resulta contraproducente y degenera las buenas ideas en abominaciones imprácticas. Estas abominaciones no son mas que mitos de las especie "OMG it have to be OO!!!" y sobre eso será este post, Los mitos de la programación orientada a objetos

OO Flexible
Inicialmente creo que la flexibilidad siempre será un trade-off do otras propiedades del software. Este blog dice lo que pienso al respecto. A la hora de echar código comience por la brevedad y luego optimice las otras propiedades en la medida de lo necesario.

Pero sin importar lo que yo piense, algo incomprensible, son las formulitas con las que trabajan los que solo conocen de objetos (habrán excepciones obviamente)

K * clases = Flexibilidad
C * (interfacesImplementadas) = Flexibilidad

Es Decir a mas clases y mas interfaces implementadas mayor flexibilidad.

Clases de la forma: public class Point implements Serializable, Collection, Cloneable, List, Geometry, Observable, Map, Enumeration...

Que no tienen nada de malo si uno usa todas las interfaces... sino botadera de tiempo y memoria.

La verdad olvide que mas iba a decir en este post... era mas bien una critica a ciertos programadores. En fin

lunes, junio 11, 2007

Nuevo C++

Pues en estos momentos se esta diseñando lo que sería el nuevo estándar de uno de los lenguajes mas usados del mundo. Hace poco vi aqui la descripción de algunos de los nuevos features por puño y letra del mismo Stroustrup.

Me parecen muy bacanas algunas de las cosas que se tienen planeadas. Y a modo de repetición mencionare (o parafraseare?) las que a mi mas me gustaron :P

1: template <> using Vec = vector <>>;
2: Vec v = { 2.3, 1.2, 6.7, 4.5 };
3: sort(v);
4: for(auto p = v.begin(); p!=v.end(); ++p)
5: cout << *p << endl;

Que es lo nuevo?
1. El using, es una especie de typedef pero permite tener definidas algunas cosas dentro de la definición del template, ahi utilizan el allocator "My_Alloc" pero permiten que uno defina el tipo T.
2. Asignamos el vector con una lista de elementos. Esto solo se podía con los "agregados" (i.e arreglos y estructuras)
3. Usualmente habría que definir un montón de cosas para hacer las cosas asi tan campantes. Pues esto ilustra el mayor cambio en el estándar, se llaman "Concepts". Según Stroustrup es:

Basically, a concept is the type of a type; it specifies the properties required of a type.


Algo parecido a las jerarquía de clases de haskell? tal vez. Eso fue lo que me pareció.

4. Esto es lo que mas me llamó la atención... hay un blog que me dejo marcado respecto a a forma de pensar respecto a los lenguajes de programación.
hablaba de:
Rule #2: Dynamic typing with optional static types.

Pues esto esta lejos de ser tipado dinámico, pero el auto es para seleccionar el tipo dependiendo de lo que devuelva la expresión (supongo en tiempo de ejecución). Lo cual resulta mas corto que:
for (Vec <> ::const_iterator p = v.begin(); p!=v.end(); ++p)
cout << *p <<>

y Además mas apto para programación genérica.
Dentro del otro tipo de cosas que piensan agregar es:

*Garbage collection opcional.
*Hash Maps
*ReEx

Y depronto una librería de sockets y una de hilos :)
Todo esto sin perder compatibilidad con el estándar anterior (C++98) y sin aumentar el overhead.

PD: si jaime, use el formato (copiado del source de geekorito) para el código, gracias :)