El desafío Chuck Norris... resuelto

Published 46 weeks, 15 hours ago
Tue Nov 20 2007

El viernes pasado la empresa Ilitia Technologies, a la que conozco por ser la empresa de uno de mis blogueros de cabecera, Miguel Jiménez, publicó en Infojobs la siguiente oferta (editada ligeramente, que Infojobs no admite HTML):

Un importante proyecto de decodificacion de mensajes para el gobierno que fúe 
desarrollado por el mismisimo Chuck Norris (que escribe cualquier programa en una sola linea) 
necesita ser puesto en marcha lo antes posible. Lamentablemente, Chuck Norris eliminó del control 
de codigo fuente su libreria de utilidades antes de irse de la empresa para probar 
nuevos retos, por lo que el código ya no compila.
Es necesario que alguien reconstruya las partes necesarias de esta libreria para volver a hacer 
funcionar el decodificador. Una pista, nadie hace librerias tan simples como Chuck Norris.

Ánimo y gracias por tu interés y tiempo. Espero te diviertas

Console.WriteLine(
new long[]{
292805444303323170,
-4455112766532738942,
579137309091315972,
1207248581508040306,
7033655460037132288 }
.SelectMany(l => 64.DownTo(0)
.Select(i => (l & ((long)1 << i)) != 0))
.Take(285)
.Select((b, i) => new { b, i })
.GroupBy(p => p.i / 3, p => p.b)
.Select(g => g.ToArray())
.Select(a => 0.To(3)
.Sum(i => a[i] ? (1 << (2 - i)) : 0))
.Select((a, i) => new { c = @" _()|/'\,"[a], i })
.GroupBy(p => p.i / 19, p => p.c)
.Select(g => new string(g.ToArray()))
.Aggregate((s, t) => s + "\r\n" + t));

public static class ExtensionesChuckNorris
{
public static IEnumerable.int To(this int a, int b)
{
//TODO: Completar código
}
public static IEnumerable.int DownTo(this int a, int b)
{
//TODO: Completar código
}
}

La oferta, original como pocas, recibió sus 15 segundos de fama (estoy seguro de que si Warhol hubiera conocido Internet, la frase hubiera sido en segundos) siendo vinculada por unos cuantos blogs y foros. A mí me interesaba más resolverla, la verdad. Así que llegué a casa el viernes por la noche y me puse a ello. Si le echamos un vistazo por encima (y somos de los que, al menos, leemos blogs) podemos ver que en ese pedazo de bloque de código aparentemente ilegible se declara un array de tipo long, que se rellena con un montón de números aparentemente sin sentido a los que a continuación y sin un pobre punto y coma que llevarse a la boca se le ejecutan un montón de operaciones con nombres como Select, GroupBy, o Aggregate. Esto tiene toda la pinta de ser LINQ. Primer problema: no tengo ni repajolera idea de LINQ.

Don't panic

Bueno, me dije, ignora ese bloque de momento. Sabes que es un array de tipo long al que se le hacen un montón de transformaciones mediante LINQ. Puedes suponer que el resultado no van a ser números sino caracteres, por la presencia de un sospechoso cast a String y un par de cadenas. Bien. ¿Qué pide exactamente el problema? Concretamente, nos piden que implementemos dos de esas transformaciones: To(int a, int b) y DownTo(int a, int b). Mirando en el código principal, vemos que las llamadas a estas funciones son 64.DownTo(0) y 0.To(3). Es una sintaxis un tanto extraña, y aparentemente no tiene nada que ver con la firma de las funciones, pero puedo suponer que 64.DownTo(0) es equivalente a DownTo(64, 0). DownTo se podría traducir por Hasta, y teniendo en cuenta que el tipo que debe devolver la función es un IEnumerable<int>, podemos suponer que DownTo debe devolver un rango de números desde a hasta b en orden descendente, y que la función To debe devolver un rango de números desde a hasta b en orden ascendente. Vale, ya entendemos el problema. Intentemos implementarlo.

Intento y error

LINQ está disponible a partir de la versión 3.5 del .NET Framework, y sinceramente no tengo ganas de ponerme a buscarlas e instalarlas. El problema de las betas, CTPs, RTMs y demás versiones de early-adopters es que suelen ser algo puñeteras en su instalación y configuración, y el problema ahora era de código, no tenía ganas de comerme la cabeza con configuraciones. Virtual PC 2007 con la imagen completa de Windows 2003 Server y la última Beta de VS2008 al rescate. Sí, es una descarga de 11 Gbs, pero para hacer pruebas locas es perfecto. Una vez tenemos las herramientas necesarias (aunque eché bastante de menos a mi ReSharper, a ver cuándo hacen versión para el 2008), nos ponemos a currar.

Intenté primero hacer las cosas a lo sencillo: un simple bucle for que creara un array de integers desde a hasta b, convertirlo a IEnumerable<int> y a tirar. Pero no hubo manera humana de hacerlo, o yo no la encontré... y menos mal, porque aunque hubiera funcionado ésa no era la respuesta. Tenía que haber una manera de hacerlo mediante LINQ.

Después de mucho googlear, me encontré con unos cuantos recursos valiosos, entre ellos esta wiki sobre LINQ, y sobre todo este artículo de MSDN, que me pusieron sobre la pista correcta. Concretamente, conocí la existencia de la clase System.Linq.Enumerable, concretamente de su operador Range que, mira por dónde, devuelve un rango IEnumerable<int>. Parece que la función To estaba resuelta. ¿Y la función DownTo?


Al principio intenté unas cuantas manipulaciones groseras de Range, pero recordé que el reto me pedía soluciones sencillas, pues tal es el estilo de programación de Chuck... cosa que, viendo sus películas, dudo mucho. Pero ésa es otra cuestión. Seguí leyendo e investigando y me encontré con otro operador de System.Linq.Enumerable, el Reverse, que efectivamente era la solución que andaba buscando. Un poquito de intento y error para hacer las cosas lo más limpias posibles y voilá!: el reto de Chuck está solucionado.

Aquí tenéis el código completo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ilitia
{
class Program
{
    static void Main(string[] args)
    {
      Console.WriteLine(
            new long[]{
            292805444303323170,
            -4455112766532738942,
            579137309091315972,
            1207248581508040306,
            7033655460037132288 }
            .SelectMany(l => 64.DownTo(0)
            .Select(i => (l & ((long)1 << i)) != 0))
            .Take(285)
            .Select((b, i) => new { b, i })
            .GroupBy(p => p.i / 3, p => p.b)
            .Select(g => g.ToArray())
            .Select(a => 0.To(3)
            .Sum(i => a[i] ? (1 << (2 - i)) : 0))
            .Select((a, i) => new { c = @" _()|/'\,"[a], i })
            .GroupBy(p => p.i / 19, p => p.c)
            .Select(g => new string(g.ToArray()))
            .Aggregate((s, t) => s + "\r\n" + t));
            
      Console.ReadLine();
    }
}

public static class ExtensionesChuckNorris
{
    /// <summary>
    /// Devolvemos un rango enumerable desde inicio a fin.
    /// </summary>
    /// <param name="a">Valor inicial</param>
    /// <param name="b">Valor final</param>
    /// <returns>Un rango ascendente</returns>
    public static IEnumerable<int> To(this int a, int b)
    {
        return Enumerable.Range(a, b);
    }

    /// <summary>
    /// Devolvemos un rango inverso enumerable desde fin a inicio.
    /// </summary>
    /// <param name="a">Valor inicial</param>
    /// <param name="b">Valor final</param>
    /// <returns>Un rango descendente</returns>
    public static IEnumerable<int> DownTo(this int a, int b)
    {
        //Invocamos To y le damos la vuelta
        return Enumerable.Reverse(b.To(a));
    }

Y éste es el resultado por pantalla:

Y esto es todo, amigos. Gracias a Fernando Lozano, gerente de Ilitia, que amablemente me ha dado permiso para escribir este post al haber terminado el reto y no aceptar más candidaturas para esa oferta.
Tuesday, November 20, 2007 10:08:25 PM (Romance Standard Time, UTC+01:00)
Gracias a tí por participar y resolver el reto. Y sin duda por pedirme permiso para hacerlo cuando era algo que manejabas tú.

Espero conocerte pronto.

Fer
Tuesday, November 20, 2007 11:09:39 PM (Romance Standard Time, UTC+01:00)
¡Excelente puzzle!

Yo creo que Chuck habría programado su clase así:

public static class ExtensionesChuckNorris
{
public static IEnumerable<int> To(this int a, int b)
{
for (int i = a; i < b; i++)
yield return i;
}

public static IEnumerable<int> DownTo(this int a, int b)
{
for (int i = a - 1; i >= b; i--)
yield return i;
}
}

Saludos,

Octavio Hernández
Autor del libro "C# 3.0 y LINQ"
Octavio Hernández
Wednesday, November 21, 2007 12:00:55 AM (Romance Standard Time, UTC+01:00)
Excelente puzzle, y muy bueno también el "upgrade" propuesto por el amigo Octavio, jejeje.

Por cierto, Carlos, no conocía tu blog, pero curioseando tus entradas anteriores he leído la de "Hibernando"... Estoy totalmente de acuerdo contigo, voy a leer las anteriores ya que parecen escritas con muy buen criterio ;-)

Un saludo!
Wednesday, November 21, 2007 12:01:41 AM (Romance Standard Time, UTC+01:00)
Sin palabras :)
Wednesday, November 21, 2007 8:45:37 AM (Romance Standard Time, UTC+01:00)
Estoy con Octavio, Chuck habría usado el yield :) Aunque la solución del Enumerable.Range y Enumerable.Reverse no la conocía y también mola :)

Un saludo!

Vicente

P.D.: [OT] Qué has usado para pegar el código de la solución? No he encontrado ningún formateador web bueno (aunque tampoco he buscado demasiado :( ) [/OT]
Wednesday, November 21, 2007 9:32:12 AM (Romance Standard Time, UTC+01:00)
Gracias a todos por vuestros comentarios y a Octavio por la refactorización... aunque me gusta más mi versión, en este caso. =)

Vicente, para los bloques de código utilizo Syntax Highlighter, en una entrada previa hablo de ello:

http://www.picacodigos.com/2007/11/14/SyntaxHighlighterYDasBlog.aspx

Saludos a todos.
Wednesday, November 21, 2007 4:46:12 PM (Romance Standard Time, UTC+01:00)
Soluciones alternativas:

1. Viajar al pasado y evitar la contratación de Chuck Norris.
¿Por qué? Claramente ha demostrado no ser una persona de fiar, borrando código del repositorio. (Mmm... por cierto que no dice nada bueno sobre una empresa el hecho de que Chuck Norris se vaya de ella de tan mala manera, pero ese es otro asunto ;) )


2. Viajar al pasado e implantar un sistema de backup apropiado.
¿Y si en lugar de borrar su código, Chuck hubiera borrado todo?


3. Viajar al pasado y diversificar el talento con una contratación mejor pensada.
¿Perdéis a Chuck Norris y ya nadie en la empresa sabe hacer dos simples funcioncillas?


4. Viajar al pasado y utilizar un sistema distribuído de gestión del código.
Sería bastante más difícil para Chuck borrar su librería de todos las copias del repositorio. Más aún si no tiene acceso a ellas.



Mmmm... Por cierto... un detalle con el Range.
Enumerable.Range(a,b) no va desde a hasta b, va desde a hasta a+b.
En este caso a es 0 de modo que no afecta al resultado, pero el nombre 3.To(7) o 7.DownTo(5) sugieren (3,4,5,6,7) y (7,6,5) y no (3,4,5,6,7,8,9) y (7,6,5,4,3).

Así que si Chuck hizo una librería con ese error, creo que la solución 1 se vuelve incluso más aplicable ;)

En cualquier caso, necesitais una máquina del tiempo.
Venkman
Wednesday, November 21, 2007 5:18:26 PM (Romance Standard Time, UTC+01:00)
Por cierto, que lo anterior lo digo con humor, eh. Que nadie se lo tome como ningún ataque hacia nadie.
Venkman
Wednesday, November 21, 2007 6:28:27 PM (Romance Standard Time, UTC+01:00)
Pues tienes bastante razón en todos tus comentarios, Venkman. Sin embargo, sí que se puede apostillar algo:

1, 2 y 4.- No es necesario viajar al pasado: de acuerdo que serían soluciones ideales y los escenarios que describes podrían herir de muerte a un proyecto... pero de los errores se aprende.

3.- La diversificación de talento no siempre es cosa de la contratación: si no encuentras a un tío que sepa NHibernate difícilmente podrás encontrar a dos. Lo que sí que es cierto es que habría que promover la diversificación de conocimientos de nuestros empleados para evitar tener esa figura del consultor que es el único que sabe cómo funciona la arquitectura del proyecto X y por lo tanto si se va nos jode para los restos.

Gracias por el dato sobre Range. No lo sabía. Pero es que yo no sé LINQ, aún. :)

En cuanto a lo de los "ataques", no te preocupes. Ojalá que todos los ataques que este blog ha recibido o recibirá estén la mitad de informados, bien redactados y sean la mitad de respetuosos que el tuyo.
Wednesday, November 21, 2007 7:05:25 PM (Romance Standard Time, UTC+01:00)
Mis felicitaciones y mi admiración a picacódigos. Desde el momento profesional en el que me encuentro ahora mismo sólo puedo admirar a una persona que por placer (por amor a esta profesión) se mete en este jardín cuando yo al ver el enlace que me mandó sólo pude suspirar y abrir el Microsoft Project.

Por tanto mi admiración hacia Picacódigos (no dudes que te contrataría si tuviera una buena oferta en mi empresa) y una sola reflexión: "¿sirve esto para contratar un buen programador?"
Wednesday, November 21, 2007 7:22:36 PM (Romance Standard Time, UTC+01:00)
picacodigos: "Pero es que yo no sé LINQ"

No si... yo tampoco, eh :) De hecho esto ha sido prácticamente lo primero que he tocado en mi vida de .Net en general xD
Venkman
Wednesday, November 21, 2007 7:39:34 PM (Romance Standard Time, UTC+01:00)
jomaweb: "¿sirve esto para contratar un buen programador?"

Pues mira, esa probablemente es la pregunta más interesante de todo este asunto. Y cada uno te dará una respuesta, porque seguramente para cada caso ofrezca unos resultados diferentes.

Lo cierto es que uno de los comentarios más extendidos entre la gente donde trabajo y entre otros conocidos que están en otras empresas ha sido... "¿Es esto una oferta seria?" u otras variantes similares. no puedo decir que todos los que han comentado eso sean "buenos" programadores, sin embargo sí sé que otra postura extendida en este caso en muy buenos programadores ha sido la de resolverlo por el mero hecho de resolverlo, por la diversión, pero en ningún momento se han planteado contestar a la oferta.

Pero seguramente más importante que los buenos programadores que te pierdas sea saber si los que "pasan la prueba" y sí te contestan son o no buenos. Mi opinión es que no necesariamente, pero es más probable que el porcentaje de buenos sea más alto que con una oferta estándar, sosa y aburrida. (Y eso que particularmente a mi lo de Chuck Norris no me hace ninguna gracia, eh xD)

Casualmente sé de una persona que ha hecho una entrevista con Ilitia tras contestar a esta oferta. No sé si era bueno, pero sí me ha contado (muy por encima) que en la entrevista le plantearon algunos problemas de lógica: el típico de encontrar la bola más pesada o el de cómo pesar un avión.
Mucho, mucho se ha discutido sobre ese tipo de problemas en las entrevistas. Pero en este caso (salvo el de pesar un avión, que es una pregunta francamente mala) la combinación de ese tipo de problemas con otros de programación (como el de la oferta) al menos seguro que da mejor resultado que la típica entrevista con una selectora que no sabe qué es C# cuando te pregunta qué sabes. Por sí solos no, pero en combinación, bueno, seguramente ayuda.


Ahora bien... ¿sirve? La contestación depende de los diferentes valores que toma "sirve". Ayuda a encontrar gente probablemente buena? Seguramente. Garantiza que encontrarás gente buena? Seguramente no. Entre medias... la valoración depende de cada caso, de cómo se haga, de quién lo haga, de qué busques, de qué entiendas por "buen programador".


Y bueno, ya lo dejo que estoy abusando aquí de un blog que no es mío xD
Venkman
Sunday, November 25, 2007 11:39:10 PM (Romance Standard Time, UTC+01:00)
¡Saludos de un Ingeniero de Primera!

No te asustes, que vengo en son de paz. Puedes ver cualquiera de mis comentarios en Ingenieros de Primera si quieres. No tengo nada que esconder. Me considero una persona razonable y espero que tú me consideres igualmente.

El caso es que este viernes me comentó un compañero de trabajo “El reto de Chuck Norris” y me remitió a tu blog. Estuvimos charlando un poco y determinando qué cosas son las que buscaban quienes pusieron esa oferta de trabajo. Nos pareció una forma interesante de buscar gente.

Yo ya conocía tu blog por un incidente pasado entre gente de Ingenieros de Primera y tú, pero he de confesarte que no te he seguido la pista. Ahora que mi compañero me llevó de nuevo hasta aquí, y viendo que podrías aportar tu opinión acerca de algo que acabo de publicar en Ingenieros de Primera relacionado con “El reto de Chuck Norris”, te remito el enlace:

http://www.ingenierosdeprimera.com/node/1177

Ni que decir tiene que estáis todos invitados a colaborar. Espero veros por allí pero, por favor, manteniendo la compostura.

Un saludo a todos.

P.D.: te voy a dejar otro comentario en tu entrada con enlaces varios.
agplaza
Tuesday, November 27, 2007 5:22:00 PM (Romance Standard Time, UTC+01:00)
Unos datos sobre la oferta:
Ese día puse 2 ofertas en infojobs, la del reto de chuck y una de Ingeniero I+D que, según yo, era una buena oferta.

En la de Chuck, han participado 20 personas, 10 han puesto comentarios de ánimo o no han sabido, pero de los 10 que lo han resuelto (2 por gusto) he quedado con 7 de los 8 que han acertado para hacer una entrevista.

Todavía tengo 2 entrevistas pendientes, pero puedo contar que hasta el momento, de los 5 que hemos visto, hemos contratado ya a 3 personas, estoy negociando con una 4ª y la 5ª va a cambiarse a ilitia durante el próximo semestre... o sea, que hasta el momento el éxito ha sido brutal (y aseguro que la calidad de estos nuevos ilitios es bastante alta).

En la oferta de "ingeniero I+D", se han apuntado 80 personas, he entrevistado a 10 y por el momento (tengo que seguir ya que este proceso sigue abierto), sólo he contratado a 1.

Yo creo que efectivo ha sido más que de sobra. Y si lo miramos en coste, todavía más, ya que Infojobs cuando nos retiró el anuncio, nos devolvió el dinero, es decir, no nos ha costado dinero.

Respecto a lo apropiado que sea pesar un barco, puede que esa u otra pregunta sea "tonta" pero creo que en conjunto si que me sirven para ver como tiene la gente amueblada la cabeza, como se ilusiona con los retos, etc. Y además, aparte vemos su CV y hablamos un poco de las tecnologías que controlan los candidatos.
Aunque despues de tantos comentarios, voy a tener que buscar una nueva lista de preguntas, que estas ya estarán en los braindumps ;-DDD

Gracias a todos por el interés (bueno y malo) que ha suscitado el reto. El simple hecho de que os pongáis a hablar al respecto, para ilitia una empresa tan insignificante, es algo increible... Y sin duda estoy aprendiendo mucho con todo el feedback que he recibido.

Fer, ilitia's rrhh manager
Wednesday, November 28, 2007 1:10:24 PM (Romance Standard Time, UTC+01:00)
Interesante, Fernando.

Mi comentario sobre la pregunta esa en concreto (es un barco o un avión? bueno, es igual) viene de ser una pregunta aparentemente interesante pero demasiado usada. ¿Y si *me sé* la pregunta? ¿Qué demuestra? ¿Que he hecho entrevistas en otros sitios donde hacían preguntas aparentemente interesantes?

Por eso, más que ser mala la pregunta en sí misma, quizá debería haber dicho que se ha convertido en poco útil y que sería mejor tener preguntas más originales.
Venkman
Wednesday, November 28, 2007 4:49:32 PM (Romance Standard Time, UTC+01:00)
Buenas d enuevo.

Fernando, a mí me parece una forma muy interesante de captar gente. Hoy en día se cree haberlo visto todo y hay que llamar la atención de alguna forma. Los anuncios publicitarios son un claro ejemplo de que las técnicas clásicas no funcionan. Además, para bien o para mal, el orgullo es algo que todos tenemos y los retos ponen a prueba si nuestro orgullo está a la altura de lo que somos capaces de demostrar, por lo que nos afanamos en dar lo mejor de nosotros mismos, curiosamente, para hacernos valer ante nuestros propios ojos. De ahí que haya gente que incluso sin intención de presentarse a la oferta se haya propuesto resolver el reto.

Cuando trabajas con gente lo más importante, por encima de la tecnología que se emple o de los conocimientos, es saber gestionar a esa gente y ofertas como esta me parece que denotan que quien las hace sabe con quién está tratando y aprovecha sus características para conseguir un beneficio común. Si, además, en su puesto de trabajo se aplica la misma filosofía, es decir, sacar de cada uno lo mejor que puede dar para que, siendo feliz, la empresa consiga mejores resultados, entonces estamos ante una buena candita a tener en cuenta como posible destino laboral, independientemente de su volúmen de negocio. No te voy a preguntar si en Ilitia trabajáis así, porque creo que es algo que tendría que decir un trabajador y no alguien de RRHH, pero me alegra ver que aún hay gente con ideas. Ahora, quisiera puntualizar que, aunque se trata de un buen filtro, este tipo de preguntas o retos no deberían ser el todo en el que basarse. No deja de sorprenderme que a la gente se le crucifique por no saber no sé qué concepto de moda. Uno no puede saberlo todo, es sencillamente imposible. Yo dudaría de alquien que al ser preguntado se queda con cara de estupefacción, pero no de aquél que diga que, aunque desconoce el término, no le sería un impedimento en su puesto de trabajo pues su capacidad de aprendizaje garantiza a la empresa tener un "experto" (cuidado con estas palabras, que hoy en día se usan para todo) en la materia en un lapso razonable de tiempo.

A este respecto, me gustaría conocer tu opinión acerca de la prueba que yo haría para buscar profesionales cualificados, con base. Ya os invité en su día a que comentáseis libremente, pero parece que nadie se ha animado. Pongo de nuevo la dirección:

http://www.ingenierosdeprimera.com/node/1177

Nada más. Un saludo a todos.
agplaza
Wednesday, November 28, 2007 10:06:15 PM (Romance Standard Time, UTC+01:00)
agplaza, hay que registrarse en esa página para comentar en ella (y además, si eres Ingeniero Industrial no eres bienvenido allí).

De todos modos, no está muy claro qué es lo que quieres que se comente. Quiero decir... Si no lo entiendo mal, tu "reto" a un posible candidato consistiría en comentar sobre esos extractos, no? Y quieres opinión sobre si ese es una buena forma de hacer una entrevista?

Si es eso, puede ser interesante pero yo quizá lo veo mejor como _parte_ de una conversación a mantener en la entrevista. En una entrevista puedes sacar temas como ese, u otros, y comentarlos. Yo, personalmente, más que como una prueba o como algo unidireccional, creo que sería mejor hacerlo de un modo más natural, como una conversación.

También, quizá, sería mejor idea no ir con una idea tan preparada. En tu supuesto reto, partes ya de una respuesta que tú has dado y, por lo que se intuye, la idea es usarla para comparar la respuesta que te den con la tuya. Eso en mi opinión es demasiado rígido.
Venkman
Thursday, November 29, 2007 5:25:03 PM (Romance Standard Time, UTC+01:00)
Hola Venkman.

El que haya que registrarse en una página no veo que sea motivo suficiente para no comentar en ella. Yo estoy registrado en montones de ellas, unas veces con datos reales y otras con ficticios, según la confianza que tenga en el sitio. Personalmente, creo que si lo que se busca es que la gente opine debería ponérsele el menor número de trabas, el menor número de excusas a las que acogerse. En ese sentido, yo habría habilitado los comentarios anónimos. Pero yo no administro esa página, sólo colaboro en ella, sin, por cierto, ninguna animadversión hacia nadie que me demuestre que vale lo que el puesto que ocupa necesita que valga, sea Ingeniero Industrial o cualquier otra cosa. Debes pensar que quien basa sus argumentaciones en el insulto al contrincante le está dando la razón de forma implícita. Por eso cuando yo sufro ese tipo de comentarios no me siento peor, sino mejor. Te animo a que colabores y ofrezcas tu visión. Aún no lo ha hecho nadie, y eso dice muy poco a favor de quien haya leído la entrada. Por lo que leo en esta página aquí comenta gente que trabaja con .NET y no son Ingenieros Informáticos. Pretendía abrir, si me permites la expresión, una batalla de argumentos. Si la gente hubiera respondido la llamada se habría visto rápidamente quién vale y quién no para realizar Informática de alto nivel (ojo a la coletilla, que no es de adorno), independientemente de sus estudios. Como nadie ha colaborado, sigo sin saber si de verdad hay no ingenieros que sepan lo que cuestiono y, al tiempo, si hay ingenieros que saben emplear lo que se les ha enseñado.

Si no está muy claro qué es lo que quiero que se comente, basta un comentario pidiendo aclaraciones. Siempre será mejor que no comentar nada. A este respecto, te respondo diciendo que lo que busco es que me digan, que me digas, cuál es tu opinión acerca de esos extractos. Si estás de acuerdo o si no y, sobre todo, POR QUÉ. La cosa es bien sencilla. En esos extractos el autor está cometiendo una serie de errores que alguien con conocimientos de Informática de alto nivel debería observar. Y no hablo de nada subjetivo. Es absolutamente objetivo pero, insisto, se necesitan conocimientos de alto nivel. Si, poniéndole al día sobre qué es .NET y las características de la plataforma que necesita conocer, quien opina no es capaz de darse cuenta de esos errores, entonces yo no le pondría NUNCA al frente del un diseño de un sistema informático. Que programe todo lo que quiera, pero que no DECIDA porque para decidir no basta con saber la sintaxis de un determinado lenguaje.

A Fernando le pregunté sobre si le parecía una buena entrevista porque, parece, se dedica a tareas de RRHH. No era esa mi intención al escribir la entrada, sólo una pregunta dirigida a una persona en concreto. A ver si me puede responder al respecto. Tú ya lo has hecho, en este sentido, que no en el técnico, así que te espero en Ingenieros de Primera o, si te sientes más a gusto, aquí. Te adelanto que no seré yo quien, si conservas las formas, te atacaré por el mero hecho de no ser Ingeniero en Informática.

Respecto a tu opinión acerca de la entrevista (e, insisto, espero que ahora me des la técnica), te comento que, efectivamente, esto sería algo que yo haría en una conversación. Le daría un papel al entrevistado con citas como las que puse en la entrada y luego le pediría su opinión dialogada. Si lo piensas, en un foro se hace lo mismo, y eso es lo que pretendía. La única diferencia es que el medio es escrito (aquél del que dispongo). Por otro lado, no tengo una idea “tan preparada”, te lo aseguro. Ya he dicho en alguna ocasión que no soy de los que tachan a nadie por no saber de no sé qué tema concreto, y aquí haría lo mismo (de ahí el diálogo). Ahora bien, hay determinadas cosas que, llegado el caso y con las ayudas razonables, TODO el que tenga los conocimientos necesarios para DECIDIR debería llegar a responder. Insisto en que no es algo subjetivo. Ya digo, te equivocas al pensar que pretendo comparar mi respuesta con la de nadie. Es más, en la entrada digo que, como humano que soy, en mi visión (mi correo) puedo haberme equivocado o haberme dejado cosas por el camino. Si fuera como afirmas, no habría escrito tal cosa.

En fin, nada más. Espero alguna respuesta, técnica y/o de RRHH, al respecto. Insisto en que es una buena oportunidad para hacerse valer, si es que uno vale. Y si no vale, no pasa nada. Bastará con que no DECIDA y se dedique a otras cosas, insisto, independientemente de sus estudios.

Un saludo a todos.
agplaza
Thursday, November 29, 2007 7:15:35 PM (Romance Standard Time, UTC+01:00)
AgPlaza, no he contestado al "reto" que has planteado por dos razones:

1) La más importante, no pienso volver a escribir nada en ese foro, y espero que nadie linke nunca más nada de lo que yo escriba en ese foro. Con una ración de sus insultos, odio, menosprecio, esnobismo, chulería y prepotencia ya tuve bastante para toda una vida, gracias. Que los Ingenieros de Primera se dediquen a diseñar compiladores y arquitecturas y que a mí me dejen con mi informática de gestión, que ambos estaremos muy a gusto(*).

2) La otra razón por la que no he comentado nada al respecto, ni allí ni aquí es bien sencilla: no estoy seguro de la respuesta. Tengo mi opinión al respecto, pero como no está fundamentada en unos conocimientos sólidos, no pienso decirla. Te lo voy a poner más claro, por si acaso: NO SÉ LA RESPUESTA. Por lo tanto, no la digo. Y permíteme que me explaye.

Hablemos primero del enfoque RRHH. Ese tipo de "hueso" lanzado en una entrevista me parece, a priori, erróneo; aunque también dependería muy mucho del puesto que quisiera cubrir. Si lo que quiero es un jefe de proyecto para el enésimo proyecto de gestión en .NET, me parecen exageradas. Si lo que quiero es crear un Framework que compita con Ruby, o Spring, o cualquier otro, me parecen muy acertadas. Pero volvemos a lo mismo, y es la razón principal que parece que los IdP no entienden muy bien: la aplastante mayoría de proyectos disponibles en nuestro mercado laboral, ese mismo que queréis colegiar y regular, son del primer tipo, no del segundo. Aqui (casi) nadie hace frameworks, ni compiladores, ni algoritmos de encriptación, ni nada por el estilo. Siguiendo esta premisa (que puede ser errónea) preguntar algo tan abstracto en una entrevista me parece directamente un error: vete tú a decirle a un cliente que vas a tardar tres meses más en diseñar su aplicación porque quieres refactorizarla de acuerdo a patrones de la GoF, a ver dónde te manda. O porque vas a implementar un framework propio MVP, que los que hay no te convencen del todo.

Ahora bien, lo dicho anteriormente no quiere decir NI MUCHO MENOS que esté de acuerdo con el actual esquema de entrevistas en este país: señor o señorita que no tiene ni la más remota idea de lo que está hablando te pregunta qué sabes o qué has hecho. Y tú se lo dices, y él/ella se lo creen. O no. Y ya está. Mientras no vayas oliendo a sobaco y no des muestras palpables de oír voces alienígenas en tu cabeza, el puesto será seguramente tuyo. Y esto no debería ser así, de acuerdo. Ahora, que por exceso también se puede pecar.

El segundo enfoque es más técnico, de preparación, de estudios, conocimiento o incluso personal; llámalo como quieras. Efectivamente, ya he confesado no estar seguro de la respuesta. Efectivamente, al no haber estudiado en una Universidad no tengo los mismos conocimientos teóricos que un Ingeniero. Pero, ¿cuándo he dicho yo lo contrario? ¿Cuándo me he postulado yo como arquitecto? ¿En cuántos posts discuto las ventajas internas de tal compilador frente a tal otro, desde un punto de vista de diseño de los mismos? El mismo título del blog debería darte una pista: yo soy un picacódigos. Y tengo un pequeño defecto: el esnobismo y el que me miren por encima del hombre me puede. Y salto. Quizá sea por culpa de llevar muchos años teniendo que tragar mucha mierda por haber trabajado en Visual Basic 6. Y no, no me tires de la lengua... ;)

Y sé que en IdP y otros sitios el término "picacódigos" es usado de forma insultante: un picacódigos es un chapuzas, uno que no tiene la carrera y elegí MUY CONSCIENTEMENTE el nombre del blog hace muchos años para, precisamente, intentar darle algo de dignidad y defenderlo. Porque uno puede ser un picacódigos y al mismo tiempo realizar su trabajo con todo el esmero y la dedicación posibles. Que uno no haya pasado por la universidad no significa que no pueda leer libros de programación, que no dedique esfuerzo y dedicación TODOS los días de su carrera a seguir aprendiendo, y mejorando. Y precisamente mi enfoque en estos últimos tiempos va encaminado a eso que tú mencionas: sé que estoy programando en un lenguaje OOP, pero que necesito mejorar mis conocimientos y mi comprensión de OOP. Y en ello estoy, leyendo y asimilando todo lo que puedo sobre el tema: desde lo más básico hasta patrones de diseño. Y sé que en algún momento del proceso se encenderá la bombillita, las cosas harán clic! y empezarán a encajar.

Y el código que pico ahora mismo todos los días es mejorable, por supuesto. Seguramente dentro de X tiempo, cuando la bombillita se haya encendido, revisaré código que estoy haciendo en estos momentos y me sonrojaré, como mínimo. Pero déjame asegurarte también una cosa: el código que produzco ahora mismo funciona; y es todo lo extensible, mantenible, compartimentado y sólido como sé hacerlo. Mañana sabré hacerlo mejor, y si puedo lo refactorizaré y si no, el código de mañana será mejor que el de hoy. Y espero tener 20 años más de experiencia a la chepa y pensar lo mismo: el código que he hecho hoy es mejor que el de ayer, pero peor que el de mañana.


(*) Conste en acta que todo lo dicho en el punto 1) no te incluye, y que TE AGRADEZCO que me leas y que comentes en este modesto sitio; y sobre todo la educación de la que haces gala.
Thursday, November 29, 2007 7:25:50 PM (Romance Standard Time, UTC+01:00)
agplaza, no tengo nada que reprocharte a ti, pero he estado ya registrado en esa página y me ha sido cordialmente (es un decir) indicado que "no pintaba nada ahí". No creo que este sea el sitio adecuado para discutir sobre los ingenieros de primera, pero creo que no me interesa tanto la discusión como para volver a registrarme en ese sitio. No es por los insultos, que francamente me resbalan, es por la cerrazón mental.


Aclarado esto, si en mi respuesta no te he dado un comentario técnico sobre las citas en sí es porque creía que sólo querías saber lo apropiado de una entrevista así, no que contestáramos las propias preguntas de la entrevista. Más que nada porque si he de "hacerme valer" aquí imagino que estás hablando de algún tipo de oferta por tu parte y si hay algo que tengo claro es que la entrevista va en dos direcciones: No voy a hacerla si no sé qué es lo que me podrías ofrecer.

¿Se trata de esto? ¿Realmente tienes algún tipo de oferta y estás buscando a alguien? Si es así, mándame un mail (gnz.garcia@gmail.com) y te contestaré encantado. Si no es así, lo siento, no veo por qué debería ponerme a discutir aquí por qué "dotnetmanía" no sabe lo que es el polimorfismo. Para demostrar... ¿qué exactamente?
Venkman
Thursday, November 29, 2007 10:28:06 PM (Romance Standard Time, UTC+01:00)
Hombre, Venkman, pues en teoria es para que lo aprendamos todos. :)
Thursday, November 29, 2007 11:45:55 PM (Romance Standard Time, UTC+01:00)
¿Tú crees? A mi me suena a una prueba para demostrar algo. Si fuera para que aprendiéramos, él empezaría dando su explicación en lugar de tanta insistencia en que otros contesten antes.

No sé, quizá soy muy desconfiado o rebuscado o lo que sea, pero si no, no veo a qué tanta insistencia en no explicarlo él mismo.
Venkman
Saturday, December 01, 2007 2:54:10 PM (Romance Standard Time, UTC+01:00)
Hola a todos.

Picacodigos, entiendo tus razones para no volver a escribir en Ingenieros de Primera. Soy consciente de que allí hay mucho maleducado pero, piensa, todos somos personas. Seguro que tú también has contestado alguna vez a alguien malhumorado porque lo que te ha dicho te ha dolido, y mucho. En mi opinión existe mucha tensión acumulada entre los Ingenieros en Informática, debido a la problemática a la que debemos enfrentarnos para demostrar algo que no deberíamos, porque no les es necesario al resto de titulados en otras ingenierías. Prueba de ello es que basta escribir una frase que pueda ser malinterpretada para que se malinterprete. A mí me pasa a menudo. Me he tenido que “pelear” con otros Ingenieros en Informática por cosas por las que, realmente, estábamos de acuerdo. Fíjate hasta donde llega la tensión… Me gustaría que entendierais este punto. Yo me considero, ante todo, persona, y duele mucho que se menosprecie tu esfuerzo. En el caso de los que hemos pasado las calamidades de la Universidad, no hace ninguna gracia que a nuestro título se le llame, por ejemplo, “papelito” porque el papelito, obviando que es una acreditación oficial del Estado, es un símbolo del esfuerzo que nos ha costado conseguir superar las pruebas (muchas y muy variadas, nada de tonterías) a las que se nos ha sometido y que, si se usan como es debido (y esto es una cuestión personal), nos colocan en una posición superior respecto a quien no las conoce. Duele, y mucho, que la sociedad no reconozca ese esfuerzo y que, y esto es lo peor, no te dé siquiera la oportunidad de demostrarle lo que vales. Duele más, si cabe, cuando estamos hablando de una carrera que cuesta tanto o más que otras que sí están valoradas como es debido. Eso está crispando a la gente y de ahí viene el cúmulo de tensión. Espero que entendáis con esta explicación, sin querer justificar los malos modos, por qué muchos compañeros se ponen de uñas cuando les hablan de ciertos temas. Por ejemplo, si su jefe, ese que no le da ninguna oportunidad, es Ingeniero Industrial, tenderán a ver a los industriales como ogros y les saltarán al cuello. Somos personas, insisto.

Volviendo al tema raíz de todo esto, el decir que no sabes la respuesta es una respuesta en sí misma. Gracias, por tanto, por responder. Ya has hecho más que otros.

Quisiera ahora comentar acerca de tu teoría, y la de muchos otros, que insiste en que los proyectos “de gestión” no requieren los conocimientos de alto nivel que yo pediría en una hipotética entrevista como la que planteé. Tengo que decirte que estás profundamente equivocado y, seré más claro esperando no molestar con esto, se debe a que no tienes los conocimientos que necesitas para verlo. Insisto en que no es un ataque, sino una realidad que quiero comentarte desde el más profundo de los respetos como profesional que eres. Personalmente admiro a todos y cada uno de los profesionales con los que me he ido cruzando, independientemente de sus conocimientos pero, seamos francos, cada cual debe ocupar el puesto que le corresponde. Te pongo un ejemplo claro. En estos momentos (y hasta dentro de poco, porque no es mi objetivo final ni mucho menos) trabajo como analista/programador en una pequeña empresa y uno de mis compañeros ha estudiado FP. El chico es majísimo pero, las cosas claras, sabe lo que sabe. Me dan igual sus estudios, sólo que sabe lo que sabe. Y lo que sabe no le permitió hace unos días estar al nivel de mi jefe de proyecto y yo, ambos ingenieros (bueno, a mí me falta “el papelito”, pero lo tendré en breve). Le pedí adrede la opinión a este chico, para ver de lo que era capaz, y no era de forma malintencionada, sino para darle una oportunidad (la misma que reclamo yo a la sociedad y que ésta no me da). Simplemente, no fue capaz. El problema no estaba a la altura de su conocimiento. Dio su opinión, sí, pero era una total barbaridad. Nosotros, lejos de decirle que era una barbaridad, le dijimos con buenas palabras que eso no podría ser la solución por “esto” y por “aquello”, y que el problema ni era tan fácil como él lo había visto ni iba, siquiera, por la vía que él creía. Ambos errores se debían a la falta de conocimiento. El chaval está haciendo, por cierto, una aplicación “de gestión” para uso interno de la empresa y, aunque a mi jefe no le disgusta, te puedo decir que es mejorable, por ser suave, en todos y cada uno de sus aspectos. Y no porque el chico no lo haya dado todo, que lo ha hecho (no sólo es majo sino, también, muy trabajador). Simplemente no sabe lo necesario. La aplicación funciona, sí, pero es un auténtico “tente mientras cobro”. Afortunadamente, no habrá un cliente detrás al que disculparse el día que la cosa reviente por alguno de los múltiples sitios por los que puede hacerlo. Ahora, sí habrá dinero que perder. Yo he comentado alguna vez que esa aplicación tiene, por muy interna que sea, toda la pinta de ir a mayores y que estoy ABSOLUTAMENTE seguro de que el día de mañana no podrá incluírsele más funcionalidad sin que sangre el bolsillo de la empresa.

Con esto lo que vengo a decirte es que la ingeniería está en todas partes y estos conceptos por los que pregunto en mi reto son necesarios, no sólo para un jefe de proyecto, sino para todo el que deba DECIDIR algo de un sistema informático. Si lees mis comentarios anteriores verás que nunca he mencionado a un jefe de proyecto, sino a alguien que decida. Decidir puede hacerlo un jefe de proyecto, un analista o un programador. Pero resulta que estas dos últimas figuras están hoy día ligadas: analista/programador, y si se quiere ocupar un cargo así hay que saber qué es lo que se hace, saber decidir. La diferencia es que cada uno lo hará a su nivel. El jefe de proyecto, debe decidir sobre una serie de temas que el programador no debería hacer, pero lo mismo sucede a la inversa. Para un analista puedo decirte que es absolutamente necesario conocer los conceptos por los que pregunto. No serían necesarios para un programador pero, repito, ambas figuras están ligadas hoy en día. Sin saber esos conceptos puedo decirte sin temor a equivocarme que las decisiones que requieren su conocimiento no estarán bien hechas. ¿Funcionarán? Puede. ¿Estarán bien hechas? Seguro, repito, SEGURO que no. Y a veces no basta sólo con que funcione (no debería bastar nunca, pero la realidad es otra). Estoy un poco harto de que la sociedad entienda que los sistemas informáticos fallan, como si fuera algo normal. Cuando fallan es porque no están bien hechos pero, hasta entonces, funcionaban. Algo bien hecho funcionará siempre. Y hablo de fallos por decir algo. Los malos diseños cuestan mucho dinero en diferentes conceptos. He visto cómo por no hacer bien las cosas se han perdido miles de euros en muy pocos días. Y el dinero se puede perder, por ejemplo, no obteniendo contratos porque no eres capaz de asumirlos. Y no eres capaz porque, por ejemplo, haces las cosas mal no porque tus recursos, de haber sido bien administrados (tarea de Ingeniero, por cierto), no te lo pudieran permitir.

Cambiando de tema, yo no te he leído nada que diga que tienes los mismos conocimientos teóricos que un ingeniero. Tampoco que te compares con un Arquitecto y tampoco que discutas aspectos internos de nada. Precisamente ese tipo de cosas son las que sacan a relucir que, efectivamente, no eres ingeniero (que no es nada malo, sólo que no lo eres). Ahora bien, afirmaciones como la que has hecho, acerca de que porque una aplicación sea de gestión no tiene por qué requerir los conocimientos que he propuesto, denotan, una vez más, falta de conocimiento. No te comparas con un ingeniero, pero haces una afirmación que requiere tener los conocimientos de uno, te lo aseguro. E insisto en que no es nada malo. Simplemente no estás capacitado (por ahora) para tomar determinadas decisiones que requieran ese conocimiento. Eso es lo que intento hacer ver. Yo sí los tengo (y puedo equivocarme, como persona que soy) y reclamo mi sitio, uno en el que pueda tomar decisiones acordes con mi nivel de conocimiento. El problema es que estas cosas hay que demostrarlas in-situ. Por ejemplo, coger una aplicación que alguien piense que es maravillosa y empezar a decir todos y cada uno de sus fallos, los que se ven y, más importante aún, los que se verán.

Por último, aunque es cierto que “picacódigos” se suele emplear a modo despectivo, no es menos cierto que es una connotación como otra cualquiera. Siéntete libre de darle la tuya. No seré yo quien te lo impida. Te voy a poner otro caso más cercano. Ahora bien, debes asumir que la connotación negativa es la mayoritaria y debes saber jugar con eso. Yo siempre digo que soy INGENIERO en Informática. Eso me ha llevado a oír cosas como que soy un prepotente y me creo más que los demás. Nada más lejos de la realidad. El que recalque que soy ingeniero no es, ni más ni menos, que por la connotación ya establecida que se tiene del término “informático”. Si dogo esto último nada más, me comparan hasta con quien se dedica a instalar el Word en sus ratos libres. Vuelvo a decir que hay cosas que duelen, y mucho. Comparar una carrera de 5 cursos, que no 5 años, con un curso de CCC o con lo que sabe el amigo de turno sobre cómo instalar el Word es injusto y duele muchísimo que se e haga. Así pues, la sociedad me obliga a recalcar que soy INGENIERO. Ojala no tuviera que hacerlo.

Venkman, no soy (por ahora, quién sabe qué me deparará el futuro) nadie de RRHH. Si lo fuera ya te habría mandado la oferta o te habría redirigido a ella de inmediato. Es curioso, pero con esta acción que llevé a cabo no se me ha hecho más que malinterpretar. Lo único que quise es abrir un debate para que la gente tuviera la oportunidad de hacerse valer con hechos, no con palabras. Lo hice porque estoy harto de oír de uno y otro lado (ingenieros y no ingenieros) todo lo que uno vale, sin más. Como ya he dicho, creo que si un ingeniero aplica lo que ha aprendido en la universidad parte de una posición de ventaja. Pero eso hay que demostrarlo en el día a día. Si tú tienes un título y luego no aplicas lo aprendido, tu título no sirve. Por otro lado, quiene son han estudiado una ingeniería y, sin embargo, no cansan de repetir que no valemos para nada y que hemos gastado nuestro tiempo pasando por la Universidad, luego no son capaces de dar la talla ante problemas que requieren el conocimiento que no paran de autoaribuirse. El “reto” que planteé debería ser resuelto por cualquier Ingeniero en Informática al que se le den una serie de pistas sobre la plataforma .NET, puesto que, en verdad, lo que se pretende buscar no tiene nada que ver con .NET, sino con POO. Un ingeniero no aprende a programar en .NET, aprende a programar, a secas. Un ingeniero no aprende a diseñar en .NET, aprende a diseñar, a secas. Un ingeniero no aprende a decidir en .NET, aprende a decidir, a secas. Si no he dado esas pistas es porque, creía, habría ingenieros con conocimientos en .NET que querrían mojarse y, por otro lado, sólo los no ingenieros con conocimientos en .NET se atreverían a opinar. Por tanto, no consideré necesario estas aclaraciones. Insisto, una vez más, que un ingeniero debería, sí o sí, ser capaz de responder el reto con, al menos, un razonamiento válido basado en una argumentación sólida. Un no ingeniero también podría, pero necesitaría los conocimientos generales, no de .NET, que precisamente requiere el reto. Insisto, el reto no busca que se pruebe saber sobre .NET sino, simplemente, saber. Me llamó mucho la atención en su día leer determinadas cosas en una revista “para profesionales”. Quien escribió esas líneas sabrá mucho de .NET, pero poco de los conceptos sobre los que se asienta. El artículo en el que me basé no es el único. De vez en cuando leo la revista en mi trabajo y me pongo enfermo ante determinadas afirmaciones. De hecho, creo que no es una revista para “los profesionales de .NET” sino “para los programadores (que no alalistas) de .NET”. Para eso sí está bien, porque está reventada de ejemplos de código. Ojala estuviera también reventada de otro tipo de cosas.

Contestando a tu teoría, Venkman, mi intención no era demostrar nada. Es más, mi primera idea fue publicar el correo, sin más, para denunciar que una revista que se dice profesional no puede realizar semejantes afirmaciones y, si las hace, es porque quien lo escribió no tiene el conocimiento suficiente para escribir de ese asunto. Que escriba de otra cosa, pero no de eso o, al menos, que no se meta donde no puede meterse, porque su conocimiento se lo impide. Yo llevo mi coche al taller y acato lo que el mecánico me diga (para mi desgracia). No sé de mecánica, luego no opino de ella ni se me ocurriría escribir en una revista de coches si no es para dar mi opinión personal sobre el que uso en la actualidad o cualquier otro que haya usado, porque para eso no hace falta ser ni mecánico ni Ingeniero Industrial, sólo usuario. Siguiendo con tu teoría, lo que pretendía al retrasar la publicación era no influenciar ninguna opinión, nada más. Si sabes de qué va todo esto, opinarás sin miedo, sin necesidad de nadie que haya opinado antes que tú, porque tienes una base y una convicción (muy importante) que te permiten hacerlo. Curiosamente no ha habido nadie, y digo NADIE que haya opinado sobre los aspectos técnicos. Unos porque “yo cobro por eso”, otros porque “no acostumbro a opinar sin estar debidamente informado” (por ejemplo, sin que te informen de .NET), otros porque “si no es una oferta de trabajo, no opino”, etc. Al final, como ves, el único que va a opinar soy yo, y ya lo había hecho antes de todo esto. No deja de llamarme la atención el elenco de excusas que se han puesto para no decir ni palabra. A mí no me hacen falta excusas. Si no sé de algo, no sé (gracias, Picacódigos, por ser sincero en este asunto). No sé de mecánica. Punto. No sé, no sé y no sé. Y no pasa nada. Simplemente no opino de mecánica. “yo cobro por eso”. Y yo, y eso no me ha impedido decir mi opinión. “si no es una oferta de trabajo, nada”. Vuelvo a decir lo mismo. Para mí no era una oferta de trabajo. Fue cuestión de indignación. De ver a alguien opinar sobre algo de lo que no tenía ni idea. Hay muchos motivos para opinar. No hacerlo es buscar excusas.

Dicho esto, voy a publicar, YA MISMO el contenido del correo. Lo haré como nueva entrada de mi blog en Ingenieros de Primera. Estáis invitados, una vez más, a participar si queréis, en Ingenieros de Primera o aquí. Los que supierais los conceptos de los que hablo, sabed que habéis perdido una oportunidad de demostrarlo ante los Ingenieros de Primera. De haberlo hecho les habríais dado donde más les duele. Los que no lo supierais, leedlo para aprender. No soy una persona que guste de esconder su conocimiento. Me gusta promoverlo (he dado alguna clase y me gustaría ser profesor en algún momento). Por ejemplo, mi Proyecto Fin de Carrera lo liberaré como software libre (no sé si lo he dicho ya por aquí). En su día os pondré sobre aviso para que podáis mejorarlo porque, creo, será mejorable en muchos aspectos.

Un saludo a todos.

P.D.: un ejemplo de mala decisión que espero que no se tome a mal. El script que muestra “en tiempo real” lo que se va escribiendo. Cuando el texto es largo (como los míos) es insufrible. Me ha costado Dios y ayuda poder enviar este texto.
agplaza
Saturday, December 01, 2007 3:44:24 PM (Romance Standard Time, UTC+01:00)
Muy muy brevemente.

- agplaza, sí querías "demostrar algo" desde el momento en que todo el resto de tu explicación así lo deja claro.

- No sé Picacódigos, pero a mi, aunque IdP me parezca una aceptable idea con una muy lamentable ejecución (y una serie de personas que hacen más daño que otra cosa), nunca ha sido mi interés "darles donde más les duele" :)

- Existen otros tipos de polimorfismo que no está basado en la herencia. (Por ejemplo, Polimorfismo Paramétrico, que está muy relacionado con lo que tú conocerás como Generics, o Duck Typing, que en cierto modo también es una forma de polimorfismo y no está basado en la herencia.) Quizá podrías investigarlo un poco más antes de marcar determinadas frases en negrita. No sé, leer "los clásicos": Meyer, Kay...

- Mi comentario anterior no pretendía ser "si no es una oferta no contesto" sino más bien "si tú no presentas tus verdaderas intenciones antes, no contesto".

De buen rollo :)
Venkman
Saturday, December 01, 2007 3:45:20 PM (Romance Standard Time, UTC+01:00)
s/que no está basado/que no están basados

:)
Venkman
Sunday, December 02, 2007 2:17:51 PM (Romance Standard Time, UTC+01:00)
Hola a todos.

Venkman, quizá tengas razón en que, según cómo se mire, sí quisiera demostrar algo. Si te digo la verdad, no lo hice conscientemente pero tu comentario me ha hecho releerme mi exposición y tengo que decir que sí puede extraerse de ella que se pretendiera algo. Si pretendí algo (ya digo, inconsciente o indirectamente) desde luego era demostrar que aquí lo que vale es ser un profesional cualificado, independientemente de tus estudios ero que, claro, es más probable encontrar un profesional cualificado entre titulados que entre no titulados. Esa es mi forma de ver y es lo que pretendía hacer ver. En cierto modo pretendía acercar posturas entre aquellos que, de uno y otro lado, se empeñan en decir que el otro no vale y lo mejor que se me ocurrió fue proponiendo un reto en el que demostrar la valía. Nada más. Desgraciadamente, y tengo que decir que no me lo esperaba, NADIE contestó. Y no me parece normal. Yo sí habría contestado a menos que mi conocimiento me lo impidiese y, en dicho caso, lo habría dicho sin problemas. Uno no puede saber de todo.

A mí la idea de IdP me parece aceptable, lo mismo que su ejecución. No he dicho que sea la mejor, pero desde luego no me parece ni mucho menos lamentable. Debes pensar que, ante todo, en ese foro (porque no deja de ser un foro) se prima la libertad de expresión. Sólo ante casos extremos se toman medidas. Yo mismo h sido insultado allí por hacer determinadas cosas, así que sé de lo que hablo. Ahora bien, sigo colaborando porque sé que la gran mayoría de la gente es más moderada de lo que parece. Piensa que hay mucha gente que no opina nunca (conozco muchos casos) por la razón que sea, como el tiempo. Yo, por ejemplo, no debería estar escribiendo ni aquí ni allí, y sin embargo lo hago. Por hacerlo estoy retrasando cosas que son más importantes en estos momentos, pero todo esto me puede. Me parece una situación tremendamente injusta la que estamos viviendo y quiero hacer lo posible porque cambie. Como ves, eso no me ha impedido hablar aquí y en donde haga falta. Creo que si se guardan las formas todos nos podremos entender. En realidad creo que todo el problema depende de eso. Creo que es cuestión de sentarse todos a hablar para ver que no se está pidiendo ninguna barbaridad y no afectará a nadie al que no deba afectarle. Porque, recuerdo, una regulación afectaría, por ejemplo, a titulados negligentes. No se trata de pedir sólo derechos, sino también responsabilidades y, sobre todo, estas últimas.

Sé perfectamente que existen otros tipos de polimorfismo no basados en herencia. Si lees la siguiente frase verás que hago alusión indirecta a ello:

“[el] polimorfismo […] es el que permite que bajo la misma signatura puedan abstraerse implementaciones distintas, aunque semánticamente relacionadas, en base a la clase que contiene la versión final de dicha implementación, y siempre, o al menos en la plataforma .NET, sujetas a los principios de la herencia y la realización”

El “o al menos en la plataforma .NET” no era casual. Si no me referí a otros tipos de polimorfismo se debió a que no venían a cuento. Pretendía criticar un artículo que hablaba sobre la sobrecarga de operadores, no sobre el polimorfismo. Si introduje el concepto de polimorfismo, digamos, clásico, es porque lo creí necesario y es al que entendí que el autor hacía referencia. Como bien dices, conozco la programación genérica (y sus distintas implementaciones, no sólo la de .NET) y el duck typing pero, insisto, no se trataba de un correo que hablase de los distintos tipos de polimorfismo, sino de los operadores y de la conveniencia o no de usarlos. Es preciso conocer una serie de conceptos a la hora de decidir usarlos y esos conceptos no sólo no los vi reflejados en el artículo sino que, en caso de aparecer, eran malinterpetados, algo que no me pareció de recibo en una revista “para profesionales”. Nada más.

Ahora vayamos por los clásicos. Puesto que en ningún momento he dicho que no exista otro tipo de polimorfismo sino que, como ya he dicho, dejé abierta la puerta adrede, no creo que tengas motivo para decir cosas como que debo investigar o leer nada. Quizá haya investigado o leído eso ya, ¿no crees? Insisto en que en ningún momento cierro la puerta a otros tipos de polimorfismo. Esto te lo digo no porque me lo hayas dicho a mí, que supongo que, como aclaras al final de tu comentario, no lo hacías a malas. Te lo digo porque las personas tendemos a tomar por ciertas demasiadas cosas sin las evidencias necesarias. Y este es un caso. Pero vamos, que no me importa que te hayas confundido porque al menos lo has hecho de buenas maneras ;-)

El “si no es una oferta, no contesto” lo deduje de la siguiente frase:

“la entrevista va en dos direcciones: No voy a hacerla si no sé qué es lo que me podrías ofrecer”

No me pareció que cupiera otra interpretación pero, en cualquier caso, te pido disculpas si te malinterpreté. Lo único que quise dejar patente en IdP es mi asombro ante la NULA participación. Me sorprende, y mucho, que todos (y digo todos) nos llenemos la boca de lo mucho que sabemos y luego no nos molestemos en demostrarlo cuando se nos ofrece la oportunidad. Desde luego, esto me ha dicho mucho acerca de la gente. Lo tendré en cuenta para el futuro.

De buen rollo ;-) Yo sólo me pongo de mal rollo cuando no se guardan las formas, te lo aseguro. Puedes tener la posición más distante del mundo conmigo que, si me lo dices con buenas palabras, yo no me voy a molestar. Intento no pensar mal cuando leo a alguien. Creo que es una “técnica” que evita bastantes problemas. En caso de duda, pregunto. Sólo espero que los demás hagan lo mismo conmigo.

Un saludo a todos.
agplaza
Tuesday, December 04, 2007 7:09:35 PM (Romance Standard Time, UTC+01:00)
Lamentablemente, agplaza, no consigues comprender lo que quería señalarte con los Generics. Lo que quería señalarte es que tus afirmaciones son demasiado categóricas.

Que si te quieres referir a un contexto preciso y concreto (por ejemplo ignorando que .Net soporta programación genérica), las afirmaciones que hagas no pueden ser tan generalizadas como "Como ya se ha comentado, herencia y polimorfismo son conceptos íntimamente ligados hasta el punto de que el segundo es un derivado directo del primero. Dicho de otro modo, sin herencia no hay polimorfismo" (la última parte en negrita en el original). No se trata de que lo que digas sea correcto en un contexto específico, se trata de que además lo digas correctamente y manteniéndote en ese contexto. Piensa que encima estás permitiéndote el lujo de corregir a alguien, así que lo mínimo es pedir que tu corrección sea mucho más precisa que el original.


En cuanto a IdP creo que ya he dejado clara mi posición y creo que ya he dejado clara la libertad de expresión que se respira ahí.
Venkman
Thursday, December 06, 2007 3:03:57 PM (Romance Standard Time, UTC+01:00)
Buenas.

Venkman, efectivamente no había entendido bien tu mensaje. Te doy la razón en que quizá afirmaciones como las que señalas son excesivamente contundentes pero es algo que no pensé cuando lo escribía pues, como dije, es una crítica a algo y ese algo es parte del contexto. Entendí que el contexto me permitía hacer ese tipo de cosas. Entendí, dicho de otro modo, que en .NET (porque no se habla de otra tecnología) cuando alguien habla de polimorfismo se refiere siempre al "clásico", y no a la programación genérica. Así lo entiendo tras haber leído bastante sobre esta tecnología. Así lo vi (lo veo) y así lo reflejé.

Por otro lado, pienso que quizá estés dando demasidada importancia a esas afirmacines por estar en negrita. Como ya dije en IdP, tuve que poner en negrita cosas que originalmente estaban subrayadas porque en IdP no se admite el subrayado. En el original no las puse en negrita porque, efectivamente, dotaban de excesiva contundencia. Paraque te hagas una idea, en el original sólo están en negritalas cosas que aparecen en IdP cuando hago alguna cita. El resto son siempre subyrayados. Yo mismo pensé que era demasiado la negrita y por eso expliqué su uso.

Un saludo.
agplaza
Comments are closed.