Programadores que no programan

16 Ene 2011

A raíz del artículo Programando para la Administración Pública, he recibido muchos correos y llamadas de colegas que se sentían plenamente identificados con el relato. Incluso ha habido quienes han indentificado a algunos de los aludidos y que no han dudado en contactarme con más historias sobre esta gente ya fuera del ámbito de la Administación.

Pero algo que me ha resultado francamente interesante es que, además de los comentarios de otros programadores, he tenido la oportunidad de hablar con quienes están al otro lado: consultoras y empresas. Responsables de algunos importantes departamentos de Recursos Humanos a nivel nacional me comentaban que el panorama actual a la hora de contratar personal es desolador: casi ninguno de los candidatos que se presentan como programadores son capaces de escribir algún tipo de código. Esto significa que, en muchas ocasiones, la demanda del sector obliga a destinar recursos sin la formación mínima que el cliente solicita, algo que la mayoría de estos, ha asumido con resignación.

Esta afirmación no me resulta nueva. Los años de experiencia me han llevado a estar numerosas veces presente en varios procesos de selección tanto a un lado como a otro de la mesa: cuando me ha tocado entrevistar a un programador para cubrir un puesto en mi empresa, muchas veces he dudado sobre si el Currículum que he leído corresponde realmente con la persona que tengo delante: todo lo que por escrito eran conocimientos sólidos, en la práctica pasan a ser nociones sobre algo que ha leído en Internet.

Como este tema ha llamado mi atención, me he puesto a investigar un poco sobre los procesos de selección y la información que obtienen las consultoras y empresas sobre el candidato en cuestión.

Algunas de las organizaciones más importantes de este país en términos tecnológicos, tienen un proceso de selección muy duro que dividen en varias entrevistas tanto teléfonicas como presenciales. En ellas, además de evaluar el perfil académico o los méritos, nos piden resolver algunos problemas técnicos para evaluar nuestros recursos. Es el sistema por ejemplo de Google, Softonic o Tuenti entre muchas otras.

Estas pruebas son las que más me han interesado ya que permiten medir con cierta precisión el nivel real del solicitante. Y el resultado es, tal y como me habían advertido, inquietante. Según una estadística rápida, de cada 10 candidatos que solicitan un puesto en la empresa, 7 de ellos no son capaces de escribir el algoritmo más simple en aquellos lenguajes en los que se definen como expertos.

Elena, jefa del departamento de Recursos Humanos de una conocida consultora, me confiesa que criban más del 80% de las candidaturas con una simple prueba sobre papel:

– Le pedimos al candidato que seleccione un par de lenguajes de programación de entre aquellos que figuran en su CV y que escriba para cada uno un programa capaz de contar de 1 a 100. Como entendemos que es una prueba muy sencilla, solo facilitamos lápiz, papel y 5 minutos. De cada 10 entrevistados, 3 comienzan a excusarse y no realizan la prueba; otros 3 la comienzan pero no la resuelven en el tiempo facilitado. Con suerte, otros 3 la completan correctamente porque realmente saben lo que hacen y, finalmente, la persona restante se siente ofendida en su orgullo y solicita abandonar la entrevista. Esto en una fría estadística supone un 70% de fracasos. Algo alarmante si tenemos en cuenta que tratamos con licenciados, ingenieros o graduados en Ciclos Formativos.

Javier, desde su departamento en otra conocida empresa española, me facilita datos similares: a los aspirantes les hacen una prueba desde casa para evaluar su habilidad en aquellos lenguajes que ellos mismos escogen. Amablemente, me hace llegar uno de los enunciados para un puesto de ingeniería de Front-End: un PDF en inglés con el enunciado de un problema en el que tenemos que usar Javascript orientado a objetos. La prueba está planteada para ser resuelta en un par de horas, espacio de tiempo que personalmente estimo muy optimista. Se evalúa la compresión del problema, la calidad del código entregado y la eficiencia del algoritmo implementado.

– Tenemos diversos modelos de examen creados por nuestro equipo de ingenieros. Generalmente damos un par de horas a los candidatos para que realicen el ejercicio en aquel momento que estimen oportuno. Sólo tienen que solicitarlo y se les envía casi de inmediato; incluso fuera del horario de oficina. De cada diez propuestas que enviamos, solo recibimos 2 ó 3 respuestas. De los archivos recibidos, podemos concluir con que prácticamente nadie ha completado la prueba en el tiempo estimado: la media de tiempo para la entrega es de tres horas, por lo que nos hemos decidido por valorar más el resultado que la velocidad en ejecución. Nuestro criterio de evaluación se basa en la calidad del algoritmo y en la estructura del código: si el programador aspira a formar parte de un equipo de desarrollo, su código tiene que ser fácilmente interpretado por el resto de colegas. No queremos personas insustituibles por el simple hecho de que sus aplicaciones sean inaccesibles para el resto del equipo. En definitiva, de cada 10 propuestas enviadas, tramitamos para una segunda fase de 0 a 1.

Para aquellos interesados en ojear el problema, pueden descargarse el PDF desde aquí.

Me queda claro que las grandes corporaciones han establecidos unos eficaces filtros para seleccionar a su personal. El dato, sin embargo, es escalofriante: la mayoría de aspirantes no son capaces de resolver problemas triviales desde la comodida de su propio salón. Me pregunto si la situación es similar en empresas más modestas, por lo que contacto con algunas pymes para recoger más datos.

Juan, director de Marketing de una empresa poco conocida pero responsable de las más importantes tiendas de comercio electrónico de este país, me comenta que no disponen de mecanismos para evaluar candidaturas. Hasta ahora, se han basado en la evaluación de CVs a través de conocidos portales de empleo y de una entrevista personal. Ni siquiera confían en las consultoras. Cuando le pregunto qué resultado le ha dado hasta ahora su sistema, no puede esconder frustración.

– Mal; no has ido muy mal. Necesitamos analistas y desarrolladores capaces de escribir código PHP orientado a objetos. Ocasionalmente, necesitamos implementar mejoras en nuestra plataforma o replicar alguna de nuestras tiendas con éxito para un nuevo cliente. Hemos puesto diversos anuncios y se nos han presentado programadores con un perfil académico altísimo; sin embargo, en la práctica diaria del trabajo, no terminan siendo resolutivos: en muchos casos nos hemos encontrado con informáticos que no son capaces de leer un código y trabajar sobre él. Se pasan las mañanas escondidos tras sus monitores haciendo como que escriben cientos de líneas; sin embargo, al final de la jornada, el trabajo continúa como al principio. A veces, cuando no saben cómo resolver algo, sugieren cosas tan radicales como reescribir todo el código; da igual que se trate de un framework con más de un millón de líneas o un CMS utilizado por miles de usuarios con éxito. La solución del programador mediocre es volver a reescribirlo todo: al final, reinvetamos la rueda tantas veces como damos de alta en la Seguridad Social a un nuevo miembro en el equipo.

Es cierto; estoy plenamente de acuerdo con Juan y la reescritura de código: la solución rápida parece que es siempre rehacerlo todo. Por lo general, no estamos hablando de software mal escrito, sino de programadores que no poseen los conocimientos técnicos suficientes para entender cómo funciona.

Mi último contacto es un empresario madrileño dedicado por entero al mundo de los cruceros online. Se trata de un señor de mediana edad al que he tuve como alumno hace un par de años. Yo sabía que realizaba pruebas a los candidatos a los que entrevistaba, por lo que su opinión me resultaba muy interesante.

– Hace tiempo leí un artículo de un señor al que citabas en tus clases de informática, Jeff Atwood. En él, comentaba cómo era cada vez más frecuente encontrar a programadores titulados incapaces de escribir una sola línea de código o realizar una operación aritmética básica. Como ya había tenido problemas con un par de empleados, decidí coger un ejemplo de ese artículo para evaluar a los futuros candidatos. Se trata de escribir un simple programa que imprima en pantalla los primeros 100 números. Si un número es múltiplo de 3, se escribe “Fizz” en su lugar. Si el número es múltiplo de 5, se escribe “Buzz”. Si el número es múltiplo de ambos se escribe “FizzBuzz”. El único requisito es que el aspirante teclee el código delante de algún empleado para que lo supervise. Con esta prueba tan sencilla, he conseguido evitarme sorpresas.

Conocía el ejemplo; revisé el artículo de Atwood y busqué la referencia. Mirando en los comentarios del post, lo más sorprendente es que muchos erraron la respuesta: estamos hablando de que parte del público objetivo de un blog puramente técnico, tampoco supieron dar con una respuesta óptima desde la tranquilidad de su casa. Para aquellos lectores no programadores, el problema planteado puede resolverse en un par de minutos; al final del post, he puesto un par de soluciones para PHP y Javascript.

En definitiva, las conclusiones de algunos responsables de Recursos Humanos tanto de grandes empresas como de pymes, son cuanto menos inquietantes: un alto porcentaje de los programadores titulados que se presentan a un proceso de selección no son capaces de escribir el más simple de los programas en aquellos lenguajes en los que dicen ser expertos. Puedo entender que para algunos, escribir un algoritmo sobre un papel puede ser antinatural: cuando yo mismo lo intento durante mis clases, me doy cuenta de que a veces no recuerdo la sintaxis correcta de algún comando: parece que por lo general, nos defendemos mejor frente a un teclado que sobre una pizarra. También entiendo que la presión del momento puede jugarnos una mala pasada y hacernos quedar en blanco. Pero al fin y al cabo, para conseguir un trabajo, en la mayoría de especialidades tendremos que realizar algún tipo de prueba, por lo que esto no debe ser una excusa.

Jeff Atwood concluía su artículo con un párrafo que me parece inmejorable y que paso a transcribir íntegramente:

“Al menos, los malos programadores pueden ser reeducados; los no-programadores no son sólo inútiles, sino que también restan valor a los profesionales de su alrededor. Deben ser erradicados, comenzando con un simple test que debería formar parte de todo proceso de selección.”

Y ahí encontramos otro problema muy común en las empresas: ya que el rendimiento de la media de programadores en plantilla es limitado, se precisan más recursos para cubrir un proyecto. Si a esto sumamos que los presupuestos suelen estar limitados, cuanto mayor es el número de desarrolladores, menor es el salario que percibe cada uno. Finalmente, el empresario establece un rango salarial en función a su experiencia que termina modificando el mercado. Los sueldos tienden a la baja y los equipos al alza: hay muchas ofertas, pero casi todas mal remuneradas.

Solución a los problemas

En Javascript, legible:

for( var x = 1; x < 101; x++ ){
  if( x % 15 === 0 ){
    console.log( 'FizzBuzz' ); // 15 es el mínimo común múltiplo de 3 y 5
  } else if( x % 3 === 0 ) {
    console.log( 'Fizz' ); // Número múltiplo de 3
  } else if( x % 5 === 0 ) {
    console.log( 'Buzz' ); // Número múltiplo de 5
  } else {
    console.log( x );
  }
}

En PHP, legible:

for( $x = 1; $x < 101; $x++ ){
  if( $x % 15 === 0 ){
    echo "FizzBuzz\n";
  } elseif( $x % 3 === 0 ) {
    echo "Fizz\n";
  } elseif( $x % 5 === 0 ) {
    echo "Buzz\n";
  } else {
    echo $x . "\n";
  }
}

Además de estas, hay muchas otras. Podemos, por ejemplo, compactar el código para reducir su tamaño a costa de su legibilidad. Por ejemplo, en Javascript podríamos eliminar algunas llaves:

for( var x = 1; x < 101; x++ ){
  if( x % 15 === 0 ) console.log( 'FizzBuzz' );
  else if( x % 3 === 0 ) console.log( 'Fizz' );
  else if( x % 5 === 0 ) console.log( 'Buzz' );
  else console.log( x );
}

O simplificar los condicionales en un código más elegante:

for( var x = 1, y; x < 101; y = "" , x++ ){
  if( x % 3 === 0 ) y += 'Fizz';
  if( x % 5 === 0 ) y += 'Buzz';
  console.log( y || x );
}

Si queréis participar con más soluciones en otros lenguajes o mejorar los ejemplos propuestos, podéis escribir vuestro código en los comentarios indicando el tiempo que os ha llevado. Puede ser una prueba personal interesante para comprobar si pasaríamos o no algunas de las entrevistas aquí planteadas.

Más:

{51} Comentarios.

  1. master profesorado

    La verdad es que estar como externo en la administración es cuanto menos fustrabte, podría contar mil anecdoras

  2. UnLectorAnonimo

    Me ha resultado muy interesante este post.
    Personalmente estoy acabando la carrera de Ing. superior en informática y después de 5 cursos (que no años) veo el final del camino universitario y empiezo a adentrarme en el mundo empresarial. Hace poco vino una empresa grande en informática a realizar unas entrevistas a todo el que quisiese presentar su CV y hacían 2 tipos de pruebas: un psicotécnico y uno de idioma de inglés. No sé cómo salió, pero sí me llamó la atención que para un puesto de informática se presentaran físicos, químicos, telecos…etcs. Y ningún informático (nos conocemos todos en la universidad). Además, este verano estuve trabajando de becario-mal-pagado en una empresa de software y flipé con los titulados, pues ninguno tenía la carrera de Ing. Informática, en mi departamento había un biologo, 2 fisicos, 2 matemáticos y el resto de módulos.
    A lo que voy es que todo el problema radica en las empresas, son ellas quien hacen la selección y son ellas quien estiman sus costes. Si ellas creen que pueden avanzar en proyectos contratando a gente que no tiene la cabeza para resolverlos ellas serán las que lo sufran.
    De todos los casos que pones, no he visto ninguno que no sea difícil hacer, el contar del 1 a 100 me parece de risa, un ingeniero informático los resolvería sin problemas. ¿Porqué? pues porque no importa el lenguaje…si es c++, java, ada… al final el algoritmo es lo mismo. ¿Cuántas asignaturas habrá estudiado un informático en las cuales le enseñan métodos de resolución? Yo que recuerde empecé por programación (el cual enseñaban a pseudoprogramar), estructura de datos (ya enseñaban colas, pilas, listas…), algoritmica (algoritmos de ordenación y optimización), Inteligencia artificial… y etcs etcs… Además de muchas otras asignaturas que amueblan la cabeza de un informático para enfrentarse a los problemas.

    Son las empresas las que deberían valorar más al perfil contratante y saber qué coger, no me creo que un ing. informático no sepa resolver estos procesos de selección, sino que las empresas no saben qué pescar en un mundo de ofertas/demandas. Juntarán todos los CV’s y les darán la misma prueba… falta hacer la criba, si no has estudiado informática olvidate. No vale con un curso de .net o java para considerarse un programador, sino conocer el concepto de la programación, ese gran problema. Y si las empresas no lo tienen claro, los solicitantes menos.

    Y este problema da lugar a un gran debate: el instrusismo informático. El miedo que tengo a la hora de buscar trabajo y que ya he visto con mis propios ojos.

    • Etnas

      #1, Interesante aportación. ‘Físicos, químicos para un puesto de informático…’. Con la candidatura de los telecos estoy de acuerdo; la mayoría de programadores que conozco hicieron Telecomunicaciones y son muy buenos profesionales; de hecho siempre hay pique entre quiénes salen más preparados de la Universidad. Lo que me interesa, UnLectorAnónimo, es qué han hecho el resto de tus compañeros de universidad; ¿trabajan como informáticos?

  3. Juan Ramon Fernandez

    EN Java:

    for (int i = 1; i <= 100; i++)
     if (i % 3 == 0)
      if (i % 5 == 0)
        //EL numero es multiplo de 3 y de 5
         System.out.println("FizzBuzz");
      else
         //El numero es multiplo de 3 pero no de 5
         System.out.println("Fizz");
      else
       //El numero no es multiplo de 3
        if (i % 5 == 0)
         //El numero es multiplo de 5
         SYstem.out.println("Buzz");
       else
        //El numero no es multiplo de 3 ni de 5
        System.out-println(i);
    

    No tardé ni 2 minutos 1 en pensar la idea y otro en hacer esta chorrada de código. Evidentemente se podría mejorar.

    for (int i = 1 ; i<= 100; i++)
    {
    String salida = "";
      //Si el numero es multiplo de 3 escribimos Fizz
      if (i % 3 == 0)
        salida+= "Fizz";
      //Si el numero es multiplo de 5 escribimos Buzz
      if (i % 5 == 0)
        salida+= "Buzz";
      //Si no es multiplo de 3 ni de 5
      if (salida.equalsIgnoreCase(""))
         salida+= i;
      System.out.println(salida);
    }
    

    ————————————————————————————–
    Yo al respecto del tema puedo decir que hace poco hice una entrevista para una empresa para realizar una prueba para otra empresa. Todavía sigo esperando….
    La prueba consistía en continuar el código que había realizado otra persona añadiendo una funcionalidad, una parte del código que finalmente iría al proyecto final que debían entregar.

    • Etnas

      Hola Juan Ramón;
      podemos optimizar tu respuesta de una manera simple: un número que es a la vez múltiplo de 3 y 5, lo es de 15, su mínimo común múltiplo. Ahí está uno de los criterios para evaluar este algoritmo.
      Por lo tanto, podemos reemplazar

      if (i % 3 == 0)
      if (i % 5 == 0)

      por:

      if (i % 15 == 0)

      Por lo demás, perfecto.
      Un saludo.

  4. mhergon

    Ahí va código en Objective-C

    	for (int x = 1; x <= 100; x++){
    		if (x % 15 == 0) {
    			NSLog(@"FizzBuzz");
    		}else if (x % 3 == 0) {
    			NSLog(@"Fizz");
    		}else if (x % 5 == 0) {
    			NSLog(@"Buzz");
    		}else {
    			NSLog(@"%d", x);
    		}
    	}
    

    Saludos

  5. UnLectorAnonimo

    Pues hombre, conociendo a gente que ha acabado te puedo decir que hay algunos que están cursando masters, otros están con alguna beca muy interesante, alguno ha emprendido, otros currando de profesores auxiliares y en investigación, y algunos como yo en el PFC y en la recta final, también habiendo currado en empresas de informática.

    Lo de los telecos sí, es la rama hermana. Aunque discrepo en el tema de las BD. Sé que los informáticos tenemos mucho más nivel en temas de BI, MD o BD. El tratamiento de datos y generación de información es algo que los telecos no pisan mucho, lo básico.

    El caso no es discutir quién está más preparado o no, hay matemáticos muy buenos programando. Porqué? pues porque ellos tienen y estudian a saco los algoritmos. Y no dependen de un lenguaje para saber programar, sino dependen del concepto. Además, no soy quien para valorar las capacidades de la gente, quizás un físico o biologo me da mil vueltas programando y rinde mucho más que yo, pero por lo general, creo que cada uno tiene la cabeza amueblada para hacer su trabajo…

    El gran fallo es considerar que sabes programar solamente haciendo un curso o sabiendo un lenguaje. Y que las empresas admitan este tipo de solicitudes sin ningún criterio. En mi región no hay muchos informáticos, pero me sorprendo en infojobs cuando veo que hay como 100 o 200 CV’s para un puesto el cual requiere como mínimo inge. téc inform… y la universidad ni oferta este tipo de titulación. ¿Qué son? ¿ emigrantes que vuelven a casa por navidad o gente que echa el cv para ver si cuela?

  6. Oscar

    En java

    for(int i = 0; i<=100;i++)
    {
       if(i%15==0)
          System.out.println("FizzBuzz")
       else if(i%3==0)
          System.out.println("Fizz")
       else if(i%5==0)
          System.out.println("Buzz")
       else
          System.out.println(i) 
    }
    
  7. Yskatll

    en vb.net, seria asi :

    'agregamos un ListBox al formulario, para mostrar el conteo
    For x As Integer = 0 To 99
         If x Mod 15 = 0 Then
               ListBox1.Items.Add("FizzBuzz")
         ElseIf x Mod 5 = 0 Then
               ListBox1.Items.Add("Fizz")
         ElseIf x Mod 3 = 0 Then
               ListBox1.Items.Add("Buzz")
         Else
               ListBox1.Items.Add(x)
         End If
    Next
    
  8. Lluis Franco

    Otra muestra en C# (muy similar como todos los derivados del viejo y bueno C)

    StringBuilder output = new StringBuilder();
    for (int i = 1; i <= 100; i++)
    {
        if (i % 15 == 0)
            output.AppendLine(string.Format("{0}: {1}", i, "FizzBuzz"));
        else 
            if (i % 3 == 0)
                output.AppendLine(string.Format("{0}: {1}", i, "Fizz"));
        else 
            if (i % 5 == 0)
                output.AppendLine(string.Format("{0}: {1}", i, "Buzz"));
        else
            output.AppendLine(string.Format("{0}: {1}", i, string.Empty));
    }
    Console.Write(output.ToString());
    

    Realmente si un programador (por muy novel que sea) no sabe resolver eso, lo mejor que puede hacer es dedicarse a otros menesteres. Mejor para él y para sus compañeros de trabajo…

  9. Elrohir

    Bueno, en el último ejemplo incluimos ya no sólo un problema de programación, si no matemático ( el mínimo común múltiplo). La mayoría de los que conozco, hubieran optado por un algoritmo del tipo

    if ( x mod 3 = 0 ) and ( x mod 5 = 0 ) then begin
       writeln('FizzBuzz');
    end else begin
          if x mod 3 = 0 then begin 
             writeln('Fizz');
          end else begin
             if x mod 5 = 0 then begin
                writeln('Buzz');
             end;
          end;
    end;
    

    o incluso del tipo

    str:='';
    if x mod 3 = 0 then str := 'Fizz';
    if x mod 5 = 0 then str := str + 'Buzz';
    if(str'') writeln(str);
    

    (Pascal, que por cierto, tengo un poco atrofiado).

    En cualquier caso, los problemas más grandes con los que me he encontrado con los programadores son dos. Uno si, que no tienen ni idea de escribir un código. Como mucho te encuentras el “mientras funcione”. Trabajo en Webs y Multimedia y hay maravillas de diseño, pero de programación os puedo asegurar que hay muchas veces que es mejor reescribir ( sobretodo con el Flash … adobe puede estar tranquila, no es problema del Flash que no funcione bien en dispositivos móviles, es problema de los programadores de ActionScript, por así llamarlos).

    El otro es sobretodo de motivación. Algunos recién licenciados, que aún sabiendo programar “algo” en Java, necesitan hacer tres diagramas UML para completar el caso anterior, y te piden cobrar 3.000€ al mes. Y el que no te pide eso, le da igual programar que vender churros. Eligió informática por que oyó que se ganaba muy bien la vida, se ha copiado la mayor parte de las prácticas de la carrera y ahora que ve que los sueldos cuando empiezas no son gran cosa, tiene 0 motivación. ¿Es lógico llamar a un candidato hasta dos veces en plan “recibiste mi email”? ¿”realmente estás interesado”?.

    Desolador.

  10. Tomcask

    Lo he hecho en javascript, porque lo tenia un poco oxidado (3 años en Java + 4 .Net + 3 como PM)

    for(var i = 1; i<101;i++){
    	document.write((i%15==0)?"FIZZBUZZ":(i%3==0)?"FIZZ":(i%5==0)?"BUZZ":i);
    }
    

    Se hace camino al andar, quiero decir que cualquier programador que se enfrenta a su primer puesto lo normal es que lo haga muy pero que muy mal porque no tiene ni idea, en la universidad nos dan unas bases pero la experiencia es lo que nos hace llegar a la madurez profesional y productividad.

    En ese camino no se hasta que punto es importante que tengas la carrera de informatica….

    • Etnas

      Buen código Tomcask!

  11. Fernando miras

    Aunque la solución de Juan Ramón,a priori es menos simple que usar el módulo de 15, tiene una ventaja, es un algoritmo más eficiente, pues va a realizar menos operadores que con el otro método.

    N%15 sera igual que 0 solo en 6 ocasiones (para N=100).por lo que estamos realizando una operación innecesaria en el 94% de las ocasiones. La única mejora que se me ocurre (puedo estar errado), es: en vez de dividir por 3 y luego comprobar si tb es divisible por 5, lo haría al revés. El conjunto de divisores entre 3 es mayor que el de 5, por lo que disminuimos el número de aplicaciones.

    Esto es trivial en el ejemplo propuesto, pero cuando se tratan millones de datos y/o el número de operaciones es elevado, cualquier optimización es muy favorable.

    • Etnas

      Gran apunte Fernando!

  12. Juan Jose

    Definitivamente Tomcask se lleva la palma.

    Si nos vamos a poner a optimizar… optimicemos para hacer el mínimo de operaciones manteniendo la legibilidad. No vale con reorganizar lo que hay si directamente sobran cosas o los tipos de datos son claramente incorrectos.

    La manipulación y comparación de cadenas es excesivamente horrorosa. No caigáis en el error de suponer que todas las instrucciones tienen el mismo peso. 😉

  13. Luis

    Hola,
    muy interesantes tus dos artículos. Quería comentarte que creo que esto pasa por pretender licenciados para programar, y no programadores (de FP, autoformados, o lo que sea). Tengo 25 años de experiencia profesional en programación, pero no titulación. Puedo escribir la solución en al menos 3 lenguajes en este momento (de echo, lo estaba haciendo mientras lo leía). Pero nunca presentaría el currículum a un puesto de programador con titulación universitaria, porque simplemente no la tengo.
    Si quieren programadores, que los busquen. Si quieren titulados, que los busquen. Titulados programadores?: pocos, y ocupados.

  14. Unidad

    Hola,

    yo soy estudiante de Ingenería Técnica en Informática y hace poco realicé una entrevista para unas prácticas en una pequeña empresa (unos 15 trabajadores) de mi ciudad. El entrevistador apenas me preguntó nada, sólo me pidió que hiciera un examen, para el que me dió 25 minutos. Yo era la primera vez que me enfrentaba a una entrevista así y aunque no la superé, me sirvió para aprender a prepararme mejor las que vengan más adelante. En cualquier caso, el tiempo que me dio me pareció muy escaso.

    Por si os interesa, la prueba consistía en hacer 5 funciones sencillas, luego un ejercicio en el que había que diseñar dos clases relacionadas (para ver mi habilidad en POO) y, por último, unas consultas sobre un BDD detallada. A mí en esos 25 minutos me dio tiempo a hacer las 5 funciones y el ejercicio de clases, pero las consultas no. Utilicé C# porque era lo que tenía más fresco.

    Los métodos incluían uno de intercambiar los valores de dos enteros, una función que calculara el factorial de un número (ejemplo clásico de recurriencia) y alguno para tratar con arrays, muy sencillo. La pena es que con los nervios hice sólo bien 3 ó 4 de los 5.

    Un saludo.

  15. Victor

    Como nadie lo ha puesto, añado el de python:

    for i in range(1,101):
        if (i % 15 == 0):
            print "FizzBuzz"
        elif (i % 3 == 0):
            print "Fizz"
        elif (i % 5 == 0):
            print "Buzz"
        else:
            print i
    

    Y eso que ni programo, soy administrador de sistemas. Seguro que se puede hacer mejor.

  16. Victor

    PD:
    El comentario se ha comido el indentado
    y claro, así no funcionará en la vida en python, donde el indentado designa los bloques de código XD

    • Etnas

      No te preocupes Victor, se entiende perfectamente. Gracias por el aporte en Phyton!

  17. ivan

    Si es que los programadores somos la leche, no me extraña que nos traten como nos traten.. siempre tragamos con todo.

    Este hilo me recuerda al de Jeff Atwood “Why Can’t Programmers.. Program?”: http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

    En el mismo, se destaca el hecho de que después quedar demostrado que un XX%% muy elevado de programadores no sabría implementar un cierto código trivial (ej: el clásico “FizzBuzz”), una avalancha de lectores y programadores bombardea su blog con el problema resuelto.
    SEÑORES!! es obvio que sabemos resolverlo, somos programadores!! no tenemos que demostrar que pertenecemos al 99% de programadores competentes que espero pueble el mercado (o mejor, no tenemos que demostrar que no pertenecemos al 1% de incompetentes!). Eso no nos atribuye ninguna medalla!

    Es como si después de que un periódico publicase un artículo destacando que un 0.5% de los médicos no sabe usar el estetoscopio, recibiera una avalancha de vídeos y fotografías de médicos de todo el país demostrando que ellos sí saben usar el susodicho aparatito (tan trivial herramienta para ellos como el FizzBuzz para nosotros)

    paz y salud, (y suerte para nuestro gremio!)

    • Carlos Benítez

      Si, hubo muchos comentarios en aquel post del amigo Atwood, pero ya he resaltado que me pareció curioso que la mayoría de soluciones al problema, no eran correctas: es por eso que indicaba que el público de un blog eminentemente técnico, también erraban en el algoritmo más simple desde la comodidad de sus casas.

      Por lo demás, no nos da medallas, pero si que despierta nuestra inquietud: ¿cuánto tiempo necesito para superar una prueba real en cualquiera de las muchas consultoras de este país?
      Es más curiosidad personal que otra cosa. 🙂

      Saludos!

  18. nacho

    @UnLectorAnonimo lo que dices de que las empresas deberían buscar un diplomado de Informática es (con perdón de la palabra) una idiotez.

    En Informática los verdaderos crack son los que lo hacen porque les gusta.

    Y no hay que ser diplomado para ser buen programador. Quizás te enseñen estructuras de datos, algoritmos y demás cosas. Pero a pensar como programador, es medio complicado que te enseñen.

    Conozco un montón de gente que o bien es diplomada o bien estudia informática y no tienen la menor idea a la hora de programar. Saben la teoría muy bien, pero a la hora de la inventiva, de hacer un desarrollo para solucionar un tema específico no saben como afrontarlo.

    Y eso nadie te lo puede enseñar.

    PS: Comencé a programar a mis 8 años en una Commodore 64, nunca estudié una carrera de informática y entre otras cosas desarrollo en PHP + MySQL, Zend Framework, JS, JQuery, Java, J2EE, Objective C, Appengine, GWT, Google APIs, ect, etc.

    No enumero mis skills por orgullo, sino para remarcarte la tontería que has dicho.

  19. Juan

    en C#

    for (int i = 1; i <= 100; i++)
                {
    
                    if (i % 3 ==0 && i %5==0)
                        System.Console.WriteLine("FizzBuzz" + " el numero es "+i );
                    else if (i % 3 == 0)
                        System.Console.WriteLine("Fizz");
                    else if (i % 5 == 0)
                        System.Console.WriteLine("Buzz");
        
                }
    
                System.Console.ReadLine();
    

    me tomo 3 minutos decidi postearlo de esta forma a pesar de que se encontraron soluciones mas eficientes. Pero muy weno jejej saludos ojala en cada post pusieran un algoritmo . .jejeje para hacer calistenia de neuronas antes de leer . .jejeje

  20. Jota

    Conozco una empresa en Holanda que tiene un proceso de selección muy práctico. Tras evaluar el CV y realizar una entrevista por Skype para evaluar el nivel de inglés, dan 10 días para realizar un juego o aplicación sencilla en la plataforma móvil o web para la que oferten el trabajo.

    A pesar de que éste sistema ralentiza un poco el proceso, lo considero un buen ejemplo para evaluar el desempeño real del programador, la calidad de su código, etc.

  21. Juan

    Sobre el tema que el título otorga automáticamente conocimeeintos hay mucho de qué hablar.

    Yo soy un “intruso” sin título (mero papel que se tarda años en conseguir) el cual cada día pasan por mi mesa supuestos sabios, es decir titulados, buscando mi ayuda sobre aspectos obvios que resolver.

    Francamente, me felicito de haberme ahorrado años encerrado en un ente público llamada universdad por que en mi experiencia de más de 12 años, en contandas ocasiones (óscar, natalia, abel y luis) me han demostrado que el tiempo invertido en la titulación era rendible.

  22. Juan

    Sobre la resolución de los múltiplos de 3 y 5.

    1.- preguntar sobre %15 es añadir es añadir un operación de más porque si es %3 se impremir FIzz si es %5 se imprime Buzz, como la salida es en serie es el mismo efecto que imprimir FizzBuzz si %15.

    Además es una operación en la que 14 de cada 15 casos no ahorramos ejecución porque no se cumple.

    2.- Por otro lado, olvidamos las operaciones internas de los lenguages. Es más rápido en el bucle comparar ==0 que comparar <=100 incluso que 0;x–)

    	for(x=100;x>0;x--).write (x % 3==0) ? ((x % 5==0) ? 'fizzbuzz' : 'fizz') : ((x % 5 == 0) ? 'buzz' : x);
    
  23. Alejandro

    Mi caso es el siguiente: este año estoy terminando el CFGS ASI (la FP de Admin.Sist.Inform.) y el problema que he podido ver es que el sistema de enseñanza no funciona: O los profesores no tienen mucha idea (cuando preguntas ¿me puedes ver a ver que falla? se quedan mirando tu código, de problemas sencillos como el que propuesto aquí, y no saben que hacer y entonces se buscan una excusa y desaparecen) o algunos son unos crack (te resuelven en seguida la duda de mil formas si hace falta) pero son incapaces de enseñarte. Se enseña muy a saco de ¡ala! a resolver esto y aquello, pero nunca te queda claro la esencia del problema y el constructo. Se enfatiza el como hacer y se relega el porque cuando creo que debería ser al revés.
    El caso es que mi visión del asunto puede ser más crítica que el de los otros alumnos porque yo vengo de una carrera de 5 años donde se enfatizó mucho las técnicas y sistemas de enseñanza (iguales para cualquier tipo de conocimiento) y la puesta en práctica de las mismas (cosa que en 15 años de trabajo de todo tipo he tenido ocasión de aplicar: he dado clases de cosas que nunca había dado simplemente accediendo a la información a dar y aplicando estos sistemas de enseñanza).
    El problema es más complejo de lo que parece:
    1. Se enseña mal y se esta echando al mercado cantidades ingentes de gente mal preparada (por desgracia me incluyo).
    2. El pensamiento general es “cuando tabaje ya aprenderé” (o sea, se aspira a formarse en periodo de trabajo dando por echo que el titulo conseguido sólo es papel).
    3. Todo el que conozco habla de inchar el currículum porque dicen que todo el mundo lo hacen. Yo siempre les digo: que más da que te cojan, si después eres incapaz de hacer el trabajo que te piden ya estás fuera.
    4. La mayoría de gente que accede a los estudios de FP de informática lo hacen sin formación previa adecuada y muchos van con la idea de jugar en clase.
    5. Generalmente he tenido que recurrir al autoaprendizaje por Internet o Biblioteca por la incompetencia del profesorado, pero como ya se sabe no todo lo que hay por ahí es bueno (si el profesor hiciera esta labor por nosotros y discriminara lo inutil ahorraríamos tiempo y esfuerzo) por lo que eso sumado a la presión de haz esto y aquello pues terminas aprendiendo rápido y de mala manera.

    Bueno este es mi caso, supongo que habrá sitios muy competentes, pero me temo que serán los pocos.
    Un saludo.

  24. Claudio

    Muy bueno tu sitio. Te felicito.
    Yo también me sorprendí mientras leía el artículo y me puse manos a la obra antes de seguir leyendo.
    Primero hice un script php sobre la marcha y luego lo comprimí.
    Ya que logré hacerlo en 10 minutos (+/-) y me quedo diferente pero no mejor (aclaro), lo comparto al final de esta nota.
    Quisiera agregar que he conocido personas que son universitarias con capacidades increíbles para el desarrollo y personas que han aprendido de manera autodidacta y sin embargo son tan capaces como un universitario. Creo que la diferencia la hace cada persona cuando se preocupa y a la vez disfruta su trabajo y aprendizaje.
    Alejandro, ser programador se basa en resolver problemas, así que, te animo a que uses esto como filosofía de vida y sigas reforzando tu aprendizaje de forma autodidacta como lo has hecho y puedas llegar a la meta que te hayas propuesto.

    // Ejemplo 1 PHP
    // Por convencion
    // No utilizo la variable control del bucle ($i) para ningun calculo
    // No realizo operaciones dentro de los condicionales (if, elseif)
    // El codigo es mas extenso pues esta hecho sobre la marcha pero me sirve como algoritmo base para comprimirlo
    $tres= 3;
    $cinco= 5;
    echo “FizzBuzz”; // Primero imprimo el cero
    for($i=1;$i<101;$i++){
    $printing= "";
    echo "”;
    $numero= $i;
    $cuenta3= $numero % $tres;
    $cuenta5= $numero % $cinco;
    if($cuenta3===0 && $cuenta5===0){
    $printing= “FizzBuzz”;
    }elseif($cuenta3===0){
    $printing= “Fizz”;
    }elseif($cuenta5===0){
    $printing= “Buzz”;
    }else {
    $printing= $i;
    }
    echo $printing;
    }

    // Ejemplo 2 PHP
    // El resutado en pantalla es el mismo pero aqui la convencion es comprimir el codigo
    echo “FizzBuzz”;
    for($i=1;$i<101;$i++){
    echo "”;
    echo $printing= ( ($i % 15)===0 ) ? “FizzBuzz” : ( ( ($i % 3)===0 ) ? “Fizz” : ( ( ($i % 5)===0 ) ? “Buzz” : $i ) );
    }

  25. Un tema muy interesante , si ya que me quedo pasmado al saber que de 10 solo 3 saben lo que es un lenguaje de programacion es ilogico que gente que pretendio terminar la carrera de ing en sistemas o similar no sepa que es eso, ( que no dudo que existan personas que tengan el diploma, certificado comprado)

    tengo el gusto de estar frente a grupo( nivel medio superior ,,,,programacion e informatica) y creanme que hace falta, no mas ingenieros en sistemas o similares si no ganas de enseñar con logica para poder lograr que se entienda que es un programador ,

    este es mi punto de vista en tanto a la falta de informacion y capacitacion

  26. Alvaro

    Hey no aparece ruby!

    for i in 1..100
    print “Fizz” if i % 3 == 0
    print “Buzz” if i % 5 == 0
    print i unless i % 3 == 0 or i % 5 == 0
    print “\n”
    end

    Y un poco de action script que estoy usando recientemente:

    for (var i:int; i<=100;i++){
    if(i % 3 == 0)
    trace("Fizz");
    else
    if(i % 5 == 0)
    trace("Buzz");
    else
    if(i % 15 == 0)
    trace("FizzBuzz");
    else
    trace(i);
    }

  27. jneira

    (escrito sin mirar ninguna referencia ni compilar o evaluar nada 5 m)

    ;;clojure
    (defn fizzbuzz []
    (doseq [n (range 1 100)]
    (println (cond (= 0 (rem n 3)) “fizz”
    (= 0 (rem n 5)) “buzz”
    (= 0 (rem n 15)) “fizzbuzz”
    :else n))))

    –haskell (este he tenido que probar en la consola emacs alguna cosa, 15 m)
    fizzbuzz n | mod n 3 == 0 =”fizz”
    | mod n 5 == 0 = “buzz”
    | mod n 15 == 0 = “fizzbuzz”
    | otherwise = show n

    main=putStrLn map fizzbuzz [1..100]

  28. Marcos

    En Java no podria ser:

    for(int i = 1;i<=100;i++)
    {
    if(i%3==0){
        System.out.print("Fizz");
    }
    if(i%5==0){
        System.out.print("Buzz");
    }
    
    System.out.println("");
    }
    

    De esta forma en vez de comparar 3 veces se realiza solo 2. Creo yo.

  29. carmen

    hola deseo que me ayuden con este ejercicio de programacion por favor es asi: Determine la cantidad de numeros que son multiplos de 3 en los 200 primeros terminos de la siguiente serie:6,8,10,12,etc por favor les agradeceria bastante

  30. diego

    Interesante post, te pongo la solución @carmen:

    for( var i = 0, next = 6; i < 200; next += 2, i++) {

    if( next % 3 === 0)
    console.log('El número: ' + next + ' es múltiplo de 3');

    }

    Supongo que la entrada se refiere a este tipo de cosas…

  31. anonimo

    var x;
    for (x = 0; x < 101; x++) {
    console.log(x, (((x % 3 === 0) && 'Fizz') || '') + (((x % 5 === 0) && 'Buzz') || ''));
    }

  32. juan

    Supongo que ya que evaluar un 0 es como evaluar un False, se podria resescribir tal cual, (con tu ultimo ejemplo).

    for( var x = 1, y; x < 101; y = "" , x++ ){
      if(!(x % 3)) y += 'Fizz';
      if(!(x % 5)) y += 'Buzz';
      console.log( y || x );
    }
    

    Por cierto, interesante eso de incluir la y en la cabecera! no tenia ni idea de que fuese posible.

    Asi quedaría en Python

    for i in range(1,101):
    	if not i%15:print 'FizzBuzz'
    	elif not i%3:print 'Fizz'
    	elif not i%5:print 'Buzz'
    	else: print i
    
  33. josejuan

    Me sorprende que nadie haya puesto ninguna solución sin divisiones (la forma más eficiente).

    Se pueden hacer muchas versiones como la que pongo (eg. sin usar un vector, únicamente desenrollando el código), pero creo que se ve la estrategia.

    function fz(n) {
        var v = [1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'Fizz', 'Buzz'];
        var i = 1, m = n % 15, t = n - m;
        while(i <= t) {
            console.log(v.join(""));
            v[0] += 15;
            v[1] += 15;
            v[3] += 15;
            v[6] += 15;
            v[7] += 15;
            v[10] += 15;
            v[12] += 15;
            v[13] += 15;
            i += 15;
        }
        console.log(v.splice(0, m).join(""));
    }
    
  34. josejuan

    Aunque no lo parezca, ésta en Haskell es muy similar a la anterior en javascript.

    fz     = fz00 1
    fz00 n = (show n)  : fz01 (n + 1)
    fz01 n = (show n)  : fz02 (n + 1)
    fz02 n = "Fizz"    : fz03 (n + 1)
    fz03 n = (show n)  : fz04 (n + 1)
    fz04 n = "Buzz"    : fz05 (n + 1)
    fz05 n = "Fizz"    : fz06 (n + 1)
    fz06 n = (show n)  : fz07 (n + 1)
    fz07 n = (show n)  : fz08 (n + 1)
    fz08 n = "Fizz"    : fz09 (n + 1)
    fz09 n = "Buzz"    : fz10 (n + 1)
    fz10 n = (show n)  : fz11 (n + 1)
    fz11 n = "Fizz"    : fz12 (n + 1)
    fz12 n = (show n)  : fz13 (n + 1)
    fz13 n = (show n)  : fz14 (n + 1)
    fz14 n = "FizzBuzz": fz00 (n + 1)
    
    fzString n = concat $ take n fz
    
    • Carlos Benítez

      Wow! Gran aporte José Juan.

      La solución es realmente interesante y ciertamente es muy parecida a su versión en Javascript.

      Gracias!

  35. maseo

    Hola, muy interesante este articulo. desafortunadamente solo muestra un lado y es el de las empresas. me gustaria dar mi punto de vista ya que soy programador.

    en el articulo se dice que las empresas estan adoptando el modelo de google al momento de contratar. algo que es completamente absuro y sinico, debido a que un programador en google gana mas de 80.000 dolares al año y un programador en españa no gana ni siquiera el 20% de esto..

    yo soy de colombia de la ciudad de medellin y por experiencia les puedo contar que he hido a muchas entrevistas donde los procesos son muchos y que al final solo ofrecen salarios miseros de 800 dolares o menos. por eso digo yo, si una empresa quiere un excelente programador tambien debe tener un excelente sueldo para que se beneficien ambos, no solo a uno. por eso cuando voy a una entrevista lo primero que yo pregunto es.. CUANTO PAGAN.. a muchas empresas no les gusta esto, pero por mi experiencia prefiero preguntar esto y no estar de prueba en prueba para que al final me digan “felcitaciones has pasado todas las pruebas con exito tu salario mensual sera de millon cuatrocientos (700 dolares)” para concluir solo agrego algo. las empresas de software no pueden aspirar a poner pruebas y pruebas solo por seguir el metodo de google. debido a que no pueden pagar como google. el dia que lo puedan hacer pues ese dia tambien deben tener con que pagar.

    he conocido casos donde programadores pasan las pruebas, pero las empresas no tienen con que pagarles, en ves de eso prefieren contratar no-programadores y asi no tener que pagar tanto, en este caso existe mediocridad de parte y parte, por un lado los no-programadores y por otro lado las empresas que no tienen dinero y contratan a los no-programadores.

    DESPUES QUE NO SE QUEJEN.

    • Carlos Benítez

      Respeto tu punto de vista, pero me gustaría matizarte la cuestión de los sueldos en España: ya te adelanto que por el 20% de 80.000 no trabaja aquí nadie…

      Los sueldos son competitivos siempre que los proyectos son serios y los puestos demandados precisan de alta cualificación. Actualmente, el grupo de trabajo que he constituido, seleccionado a dedo aquí en Madrid, está disfrutando de sueldos de más de 50.000$ al año además de contar con otras interesantes ventajas.

      Y no estoy hablando de un caso extraordinario; cuando buscas a personas con talento, que pasan sus días estudiando e investigando, hay que pagarles: aportan valor a un proyecto con únicamente estar ahí.

      Si los sueldos caen, es en la mayoría de casos por nuestra culpa: aceptamos puestos mal remunerados por miedo a no encontrar otras ofertas o simplemente porque no buscamos mejor. Y ahí está el error… como profesional, tú debes imponer tus condiciones; tú sabes cuánto valen tus conocimientos y qué puedes aportar a una empresa.

      El problema, es que existe mucha desidia en nuestra profesión y no se hace nada por progresar: pensamos que con saber lo básico, ya es suficiente. Trabajamos nuestras 8 horas y luego desconectamos. No estudiamos, no leemos, no estamos al día… En definitiva, lo que sabemos (o creemos saber) queda rápidamente obsoleto y a menudo incluso cae en el olvido… ¿Programar en C? ¿Si sé ensamblador? ¿Fundamentos de Ingeniería del Software? No… yo se hacer un CRUD normalito en PHP (pero sin PDO, que eso no me ha dado tiempo a verlo todavía)… ¿Agilismo? En mi empresa no se hace… ¿TDD? En mi empresa no hay tiempo para pruebas…

      Una lástima. En la mayoría de casos nos encontramos con ‘profesionales’ que no saben programar… Y, como es normal, si producen menos y no aportan calidad, hay que pagarles en consecuencia.

      Saludos!

  36. John Quezada

    Hay muchos programadores que solo lanzan códigos copiados de un lado a otro, mientras un desarrollador crear verdaderos sistemas desde cero, algunos piensan que conocen todo el lenguaje y es falso ya que para conocer un lenguaje bien tienen que haber trabajado un par de años en ese lenguaje y haber creado un sistema, lamentablemente muchos solo se han enfrascado en una sola cosa y no leen ni se prepararan y no ven como los lenguajes cambian y salen nuevas cosas para mejorar la optimización y la seguridad y solo se quedan estancados otros solo programan para trabajos de la universidad y nada mas eso eh visto mucho y algunos ni siquiera ayudan en proyectos de grupo en la U que eso les hace más mediocres en otras palabras el trabajo del vago y creo que eso es un gran problema que se ve en los estudiantes de sistemas, porque casi todos los proyectos de la U son en grupo.

  37. Diego Mendez

    Me alegra haber visitado esta página, no la conocía pero me ha parecido muy buena, excelentes post y excelente documentación, soy estudiante de Ing. de sistemas y los post que he encontrado acá me han confirmado algo que creía imposible, trabajo en el área de testing en una consultora y he visto ingenieros de sistemas ya titulados que no tienen ni idea de programación “me dicen que es que no les gusta la programación” ¿entonces porque diablos estudiaron esta carrera?, se asombran cuando me ven haciendo algún trabajo en java para la universidad, a pesar de que son programas realmente sencillos (considero que me falta mucho para tener un nivel decente) no me cabe en la cabeza como hicieron para conseguir el título. Paginas como esta me animan a seguir estudiando para no ser un profesional mediocre.

  38. anonimo_cabreado_con_su_formacion

    Sobre lo que decís yo veo un problema increible en la formación de profesores. Me encuentro en DAM en el 1ºaño, y en programación tenemos un profesor de 10 tanto conocimientos como en explicaciones sobre el temario, nos mete muchísima caña y nos ha enseñado a realizar todas las pruebas que ponéis a papel y lápiz, de hecho estuvimos un trimestre entero sin encender el ordenador haciendo las cosas a seudocódigo, de ahí que el problema de recorrer del 1 al 100 y decir cuales son múltiples me parezca absurdo hasta plantearlo como prueba. A lo que iba, que igual que tenemos un profesor de 10 tenemos otro de 0 y digo 0 cuando un profesor intenta enseñar php a los alumnos y resulta que tiene problemas con el método get, porque nos suelta “no se porque me está mostrando lo que envío por get en la url…” e ahí el problema, hay profesores que si es por ellos no salimos preparados ni para poner cafés. Es ingeniero de Minas da clases de lenguaje de etiquetas sin siquiera saber el mismo ya que nos escribe en la pizarra los códigos, no los explica y tiene dudas tan básicas como el uso de get en php. Hay gente de clase que sabe mas y explica mejor las cosas que algunos profesores, ese el verdadero problema.

  39. fizbvuz

    Como veo que nadie lo ha hecho un en visual basic .net lo pongo yo
    [CODE]
    For I = 1 To 100
    If I Mod 3 = 0 And I Mod 5 = 0 Then
    MsgBox(“FizzBuzz ” & I)
    ElseIf I Mod 3 = 0 Then
    MsgBox(“Fizz ” & I)
    ElseIf I Mod 5 = 0 Then
    MsgBox(“Buzz ” & I)
    End If
    Next
    [/CODE]

  40. Rafael

    Un buen programador haria un codigo como:

    if (a % 3 )
    {
    ……………………
    }

    pondria los corchetes no importando que fuera una linea

    Si se consideran bueno programadores sabrian porque.

    Y lo otro : JavaScript no es orientada a objeto,
    La orientacion a objetos supone encapsular codigo a nivel binario

    Hay una especie de creencia que construyendo una clase ya estoy progamanado
    orientado a objetos.

    • Carlos Benítez

      De acuerdo en cuanto a las llaves (no corchertes); siempre resulta una buena práctica para evitar errores, sobre todo si el código se va a minificar antes de su puesta en producción.

      En cuanto a tu segunda afirmación, no la comparto: Javascript es un lenguaje orientado a objetos y, de hecho, bastante puro en ese aspecto. No estamos hablando de escribir clases, sino de arquitectura en la definición del propio lenguaje: jerarquía estructurada, prototipado, herencia, etc… La orientación a objetos es un paradigma aplicado como metodología y no hay que olvidar que Javascript nació precisamente en la transición que se experimentó hacia esa tercera generación que supuso la POO en cuanto al desarrollo de software. Javascript no posee clases como las que solemos ver en otros lenguajes, pero si comparte su lógica a través de los prototipos.

      A día de hoy, tras todas las revisiones que sobre el lenguaje que se han ido sucediendo a lo largo de la última década, no creo que nadie aún comparta la opinión de que Javascript no es un lenguaje orientado a objetos.

      Saludos!

  41. Rafael

    Hola Carlos,

    con respecto a JS hablo mas por lo poco que lo conozco y usado, ademas no me interesa conocer mas
    de lo que se pues siempre ha sido un parto para mi desarrollar algo en JS.

    Pero mi experiencia con OOP y que es bastante avanzada donde caracteristicas como clases abstractas, metodos virtuales e interfaces son partes de los lenguajes OOP tengo la intuicion que no son parte de las caracteristicas de JS.

    Y la mas importantes y que hace la diferencia con JS : la reusabilidad a nivel binario, es decir, que el codigo quede encapsulado en una dll y no en fuente .JS

  42. Y3linna

    Olvidaron la versión Python recursiva, qué vergüenza!

    def FZ(i):
    if i==0:
    return 0
    else:
    if i%3 == 0 or i%5 == 0:
    if i%3 == 0 and i%5 == 0:
    print “Fizz Buzz”
    else:
    if i%3 == 0:
    print “Fizz”
    if i%5 == 0:
    print “Buzz”
    else:
    print i

    return FZ(i-1)

    FZ(100)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *