Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
miércoles, 28 de febrero de 2007
Vía el magnífico Coding Horror he encontrado un interesante post en el que se comenta algo tan curioso como increíble: durante entrevistas de trabajo para cubrir vacantes de puestos de programación, se constata que la inmensa mayoría de los candidatos no son capaces de codificar ni los programas más simples.

Habitualmente se trata de personas con titulaciones medias o superiores, cierta experiencia previa y un conocimiento de tecnologías de programación, al menos en teoría, relativamente alto, perfectamente capaces de mantener una conversación sin soltar barbaridades destacables.

Y lo más increíble de todo es una de las técnicas que usan para "filtrar" el personal en las entrevistas de selección: el "test FizzBuzz". La prueba consiste en solicitar a los candidatos:

Escribir un programa que imprima los números del 1 al 100. Sin embargo, hacer que en los múltiplos de tres se imprima la palabra "Fizz" en vez del propio número, y en los múltiplos de cinco se imprima "Buzz". Para aquellos números múltiplos de tres y cinco simultáneamente, se debe imprimir "FizzBuzz".

Si piensas que esta prueba es una chorrada, atento a las conclusiones que sacan los que la han puesto en práctica. La mayoría de los graduados, ingenieros, diplomados en informática no pueden hacerlo. Incluso muchos auto-proclamados programadores expertos tardan más de diez minutos en escribir una solución.

No sé si se trata de una exageración, pero en realidad se toca un tema muy espinoso y cierto como la vida misma: la falta de preparación de los futuros (y algunos actuales) programadores.

Y está claro que una de las medidas a tomar, desde el punto de vista de una empresa, es reforzar las pruebas y criterios de selección de su personal. No sé si el "FizzBuzz" es la solución, pero sin duda es un buen ejemplo: intentar conocer al candidato, sus habilidades y limitaciones básicas puede ayudar a descartar tarugos que pululan por el ciberespacio y han anidado masivamente en sitios web de ofertas de empleo. De esta forma, se evitará que entren en casa.

Pero el origen del problema es anterior a todo esto. ¿Qué se está enseñando en los centros de formación? ¿Qué nivel se exige a los estudiantes? ¿Existe todavía vocación en esta profesión?

Preocupante, ¿no?

17 Comentarios:

Anónimo dijo...

Cuanta razón tienes. En los centros de formación se trabaja con materiales arcaicos y las asignaturas de informatica (programacion, S.O., BDD) son las que la gente menos aprecia y son las que tienen las notas media mas bajas.
Como tu bién dices, hay una gran cantidad de personas que estudia informática por que le han dicho que esto tiene futuro, y otra gran cantidad que se piensas que por que sean unos cracks en wl WOW o se tiren todo el dia bajando de los P2P ya les gusta la informática. Los restantes somos lo que realmente tendriamos que estar, aquellos que con 9 años ya utilizaban el LOGO o que cuando tienen un rato libre se ponen a hacer cualquier tipo de programa, renobar tu LINUX u otro tipo de cosas.

Existen mucho personas que llevan colgado el cartel de informático o programadores y lo único que saben hacer es cojer el VISUAL y crear aplicaciones a ratón.

Anónimo dijo...

void main()
{
for(int i = 1; i < 101; i++)
{
if( i % 3 == 0 && i % 5 == 0)
printf("\nFizzBuzz");
else
{
if( i % 3 == 0)
printf("\nFizz");
else
{
if( i % 5 == 0)
printf("\nBuzz");
else
printf("\n%d",i);
}
getch();
}
}
}


Con compilador 2 minutos a mano seguramente hubiera tardado un poco mas, saludos muy buena la pagina.

Anónimo dijo...

Me fascino el tema, he estado buscando test como este y la verdad lo resolví en pensamiento en menos de 1 minuto (claro la lógica de lo que necesitaba hacer) el programa en 2.

Fue parecido al anterior solo que guardo en una variable varchar el Fizz y el Buzz por lo que si paso por los dos al final la variable es FizzBuzz, y si la variable es igual a "" imprimo el numero sino imprimo la variable.

Que divertido. ¿Tienen mas?

Jorge Iván Meza Martínez dijo...

Es en serio ?

Qué tal esta implementación ? Será que funciona ?


int main()
{
for(int i=0; i<100; i++)
{
if(i+1 % 3 == 0)
printf("Fizz");

if(i+1 % 5 == 0)
printf("Buzz");

if(i+1 % 3 != 0 && i+1 % 5 != 0)
printf("%d", i+1);

printf("\n");
}
return 0;
}

yelinna dijo...

En ocho minutos, en C#. A la primera corrida me salió mal, je je (debía ser or lógico, no and)

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

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// FizzzBuzz
int t = 0, c = 0, tc = 0 ;

for (int i = 1; i <= 100; i++)
{
t = i % 3;
c = i % 5;
tc = i % 15;


if (t == 0 || c == 0 || tc == 0)
{
if (t == 0)
Console.WriteLine("Fuzz");

if (c == 0)
Console.WriteLine("Bizz");

if (tc == 0)
Console.WriteLine("Fuzz Bizz");
}
else
Console.WriteLine(i);

}

Console.ReadLine();

}
}
}

yelinna dijo...

Creo que tengo la respuesta:
A los programadores ahora se los orienta más al manejo de bases de datos, las cuales ya prácticamente se manejan solas, que a desarrollar verdaderos algoritmos.

No sé en qué estaba pensando, mi código es espantosamente largo, caray, esto me pasa por querer hacer las cosas de una manera distinta...

yelinna dijo...

No puedo dejar esta vaina, he acortado el código :D :D

static int recurd(int i)
{
int t2, c2, tc2;

if (i == 101)
return 0;

else
{
t2 = i % 3;
c2 = i % 5;
tc2 = i % 15;

if (t2 == 0 || c2 == 0 || tc2 == 0)
{
if (t2 == 0 && i > 2)
Console.WriteLine("Fuzz");

if (c2 == 0 && i > 4)
Console.WriteLine("Bizz");

if (tc2 == 0 && i > 14)
Console.WriteLine("Fuzz Bizz");
}
else
Console.WriteLine(i);

return i = recurd(i+1);

}

}

La función se llama así:
int h = recurd(0);

Con métodos anónimos:

Se declara:
delegate void Del(); // fuera de Main

Del ts = delegate() {

for (int i = 1; i <= 100; i++)
{
t = i % 3;
c = i % 5;
tc = i % 15;

if (t == 0 || c == 0 || tc == 0)
{
if (t == 0)
Console.WriteLine("Fuzz");

if (c == 0)
Console.WriteLine("Bizz");

if (tc == 0)
Console.WriteLine("Fuzz Bizz");
}
else
Console.WriteLine(i);
}

};

Para llamarla se secribe:
ts();

Espero poder hacerla con expresiones lambda, quiero aprender programación funcional :D :D

Amador Cuenca dijo...

Bueno yo lo hice en 3 minutos en C#...

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

namespace FizzBuzz {
class Program {
static void Main( string[] args ) {
for ( int i = 1 ; i <= 100 ; i++ ) {
if ( i % 3 == 0 && i % 5 == 0) {
Console.WriteLine(string.Format("{0} - FizzBuzz",i));
} else if( i % 3 == 0) {
Console.WriteLine(string.Format("{0} - Fizz",i));
} else if ( i % 5 == 0 ) {
Console.WriteLine( string.Format( "{0} - Buzz", i ) );
} else {
Console.WriteLine( string.Format( "{0}", i ) );
}
}
Console.ReadLine();
}
}
}

Marcos dijo...

y si a esto le agregamos que a la par de la palabra FizzBuzz le antecede el numero en cuestion para corroborarlo visualmente...

eso suena aun mas interesante...

Anónimo dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...

#include
#include

using namespace std;

int main(int argc, char *argv[])
{
int i;

for (i=1; i<=100; i++)
{
if ((i % 3 == 0) || (i % 5 == 0)) {
if (i % 3 == 0)
printf("Fizz");
if (i % 5 == 0)
printf("Buzz");

printf(" ");
} else
{
printf("%i ", i);
}

}

system("PAUSE");
return EXIT_SUCCESS;
}

Anónimo dijo...

#include
#include

using namespace std;

int main(int argc, char *argv[])
{
int i;

for (i=1; i<=100; i++)
{
if ((i % 3 == 0) || (i % 5 == 0)) {
if (i % 3 == 0)
printf("Fizz");
if (i % 5 == 0)
printf("Buzz");

printf(" ");
} else
{
printf("%i ", i);
}

}

system("PAUSE");
return EXIT_SUCCESS;
}

Gerardo dijo...

Un poco tarde... usando C# solo con el objetivo de ver cómo se podía hacer usando Lambdas :)

Func FizzBuzz = () =>
{
var s = "";
for (var i = 1; i < 101; i++)
s += (i % 5 == 0 && i % 3 == 0 ? "FizzBuzz" : i % 3 == 0 ? "Fizz" : i % 5 == 0 ? "Buzz" : i.ToString()) + "\n";
return s;
};
Console.WriteLine(FizzBuzz());

Unknown dijo...

excelente test aunque es una pena que los seudo-programadores de ahora ya no les va bien este aspecto o solo no le toman un comun interes.
tome esta prueba a tres practicantes a los cuales demoraron 10 minutos que es el tiempo q les pedi obteniendose el siguiente resultado.

1 VB Bien
2 VB se repetia los resultados
3 C# Bien

el caso es ser preciso ligero y puntual los dos que acertaron su codgo era extenso.

como no tenia a la mano un lengiaje opte por javascript aqui mi solucion.

for (var i = 1; i <= 100; i++) {

if ((i % 3 == 0) && (i % 5 == 0)) {
console.warn("FizzBuzz");
continue;
}

if (i % 3 == 0) {
console.warn("Fizz");
continue;
}

if (i % 5 == 0) {
console.warn("Buzz");
continue;
}
console.warn(i);
}

Anónimo dijo...

Me parto;