Friday, January 09, 2009

saber programar

Esto es lo que YO creo debería de ser un examen para saber si alguien sabe programar:

1. ¿Que es la programación orientada a objetos?
2. Explica que es la recursión
3. ¿Qué es el isomorfismo?
4. Explica que es una pila y como funciona
5. Explica como es una cola doblemente ligada
6. ¿Qué es el algoritmo de Dijsktra? Explícalo
7. ¿Qué algoritmos para recorrer árboles conoces?
8. ¿Qué algoritmos de Ordenamiento conoces?
9. ¿Qué significa que el grado de complejidad de una función o método sea del orden de x^2?
10. Cuando te dicen que un lenguaje de programación está fuertemente tipado, ¿A qué se refieren?
11. ¿Qué es un camino hamiltoniano?
12. Explica el funcionamiento de la máquina de Turing
13. ¿Qué es un problema NP completo?
14. Realiza en pseudo-código el algoritmo de ordenamiento que más te guste
15. Explica porque escogiste ese algoritmo de ordenamiento


------
Bueno, todo esto es porque no creo que preguntas como:
- Haz una página web que se conecte a la base de datos fulana y saque todos los datos de la base y me los pinte.
- Haz una página web en donde pueda editar la info que tengo en la base perengana

Realmente nos indiquen si alguien sabe programar.
En la escuela me enseñaron que ser un buen programador, no significa dominar el lenguaje fulanito, si no, entender conceptos de estructuras de datos, análisis de algoritmos, teoría de gráficas, teoría de la computación, compiladores y por supuesto la teoría que envuelve a los lenguajes de programación con sus diferentes paradigmas, pero bueno, eso es lo que a mi me enseñaron.
Por cierto, espero les sirva como examencito para reclutar programadores :P

18 comments:

Bucio said...

A ponerme a estudiar... aja.. pero si quieres hago la bd que se conect y la pinte en laweb D: jjaja

Ismael said...

Unos cuantos detalles:

* Responder la primer pregunta no te da la menor idea de si alguien sabe programar o no. Puedes tener a un experto que trabajó con Mainframes, programó una Apple 2, ha usado COBOL, RPG, C, Pascal, Ensamblador y otro montón de cochinadas que afortunadamente ya no tenemos que usar, y que aún así no sepa nada de programación orientada a objetos. Igualmente puedes tener a un idiota que se metió a wikipedia antes de la entrevista...

* Hay un problema similar con la pregunta 8... con el catch de que saber enumerar está lejos de saber escoger el algoritmo correcto.

* Mismo problema con la 11, quizás la 10 también.

* Hay una sutil pero importante contradicción en la pregunta 14 y 15 (sin ánimos de ofender, pero si en una entrevista me hicieran estas preguntas así como están, yo tildaría al entrevistador de imbécil): Si le pides a alguien que escoja algo porque le gusta y luego le preguntas por qué lo escogió la respuesta obvia sería porque le gusta. Ese fue el único criterio que le pediste para escoger. Puedo escoger bubble sort porque se me hace que es bonito y me gustan las cosas bonitas. Claro que tendría que ser alguien muy cínico para contestarte así en una entrevista.

Supongo que la pregunta que querías hacer es: "Explica las características del algoritmo que escogiste".


Claro, estas preguntas son mucho mejores que preguntar si sabes hacer paginitas web...

Diviértanse.
-Ismael C

Anonymous said...

Tu post es completamente ridículo... yo te deseo suerte A TI encontrando trabajo respondiendo esas preguntas y creyendo que sabes programar.

Anonymous said...

Mamadas posteas, solo lo haces pa' joder gente.

Estas son preguntas equivalentes a creer que porque tu compañero pendejo saco más calificación que tu en el examen es más chingon programando. vil mentira.

Un buen programador tiene razonamiento lógico y abstracto, capaz de innovar. No de aprenderse pendejadas(sin embargo, útiles) que salen en los exámenes.

arrivederci

kno said...

Supongo que con programador te refieres a alguien que además de programar sea capaz de diseñar el algoritmo a programar (que creo yo no es necesariamente lo mismo), entonces, coincido con mucho de lo que dice Ismael, aunque más que conocer esos temas lo que necesita un buen diseñador es entenderlos y saber cuando y cómo aplicarlos, puesto que saber lo que es un árbol y cómo recorrerlo no implica que sepas cuando usar uno.

Por lo que creo que el mejor examen para un diseñador de algoritmos sería:

Descripción del problema: Blablablabla.

Describa un algoritmo, si es que existe, tal que resuelva el problema en tiempo polinomial de manera óptima. Demuestre formalmente que el algoritmo es polinomial y óptimo.

De no existir tal algoritmo, ¿A que clase de problemas pertenece el problema?, demuestre formalmente su respuesta.

Con dos preguntas así, una con un problema que pueda ser resuelto en tiempo polinomial, y otra con un problema NP, donde los problemas no sean "tradicionales" y con respuesta poco evidente, pero que puedan ser resueltos teniendo los conocimientos que mencionas.

Creo que con esas dos preguntas matas al 90% de las que pusiste.

Saludos!

Abe Estrada said...

Entonces si memorizo esas preguntas ya se programar?.

Anonymous said...

Eso parecen preguntas de examen ceneval.

Mmm no creo que con eso puedas definir si sabes programar o no, mas bien puede determinar si estudiaste una carrera de Sistemas .....


pd: Durante el lapso de estudios de mi carrera podria responder a las preguntas. Ahora ya no me acuerdo!

Unknown said...

Bucio. Jajaja ok, conectate a la BD y haz la página web.

Ismael, estoy de acuerdo contigo, responder la primer pregunta no me dice si alguien sabe programar, pero si me dice como entiende la orientación a objetos, que es un punto que me interesaría saber, en la prregunta 8 solo quiero que me diga que algoritmos conoce, no si sabe escoger el algoritmo correcto, en la pregunta 11 no me dice si sabe programar, pero si me ayuda a conocer el perfil de la persona, ya que si conoce sobre caminos hamiltonianos, su formación es más matemática, en la pregunta 10 creo que es importante saber características básicas de los lenguajes de programación a los que estamos acostumbrados, en la contradicción que mencionas, no estoy de acuerdo, si a ti te gusta bubble-sort, está bien, pero a mi me interesa saber porque te gusta, no sólo porque sea bonito, debe de haber algo que te guste, lo más importante no es contestar bien las preguntas, si no la creatividad que muestras al realizar este tipo de pruebas, no solamente se evaluan conocimientos, también se evalua la creatividad.

anónimo 1. ok, si te parece ridículo allá tu, tengo mas de 10 años de experiencia laboral y no tengo problemas encontrando trabajo, también he reclutado mucha gente para puestos en TI.

anónimo 2. Estoy totalmente de acuerdo, la calificación de un examen no refleja si eres bueno o no programando, como ya le dije a Ismael, lo importante en este tipo de pruebas es la creatividad y la forma en que la persona contesta, y no me gusta joder gente.

kno. yo creo que un programador debe ser capaz de diseñar algoritmos, ¿qué es un programa? es un algoritmo escrito en algún lenguaje de alto nivel el cual es pasado a una computadora para su ejecución, si quieres a alguien que teclee codigo a lo tonto, seguro lo vas a encontrar, es como tener un ejército de monos capuchino escribiendo código, pero alguien que sabe programar debe entender lo que está haciendo y hacerlo de una manera óptima, hay muchas formas de programar una misma cosa, y muchas de esas formas son óptimas y otras no, lo que interesa es encontrar a alguien que optimizará su código y para esto requiere entender, abstraer y tener un pensamiento lógico.

abe. es como decir que si memorizas como conectar a una base de datos y pintar los resultados en web sabes programar, o como decir que si sigues los pasos para hacer un pastel ya eres repostero.

zodman, ya no te acuerdas pero tienes las bases, seguramente tu experiencia y lo que aprendiste durante tu carrera te ayudaría a contestar de manera muy creativa las preguntas, y no necesariamente la gente que estudio una carrera de sistemas tiene ese conocimiento, hay mucha gente autodidacta que a fuerza de aprender y resolver problemas conoce las estructuras como colas, listas, pilas, etc
y seguro el examen del ceneval es mas largo :P

Ismael said...

Un par de detalles:

Primero que nada, yo (y no fui el único) asumí que tus preguntas tenían la intención de saber si alguien "sabía programar" (es el título del post, ¿no?). Para ésto no te interesa saber si sabe qué es orientación a objetos ni tampoco qué algoritmos conoce. Es por esto que hice el comentario. Pero por tu respuesta me parece que la intención de las preguntas era más bien averiguar si el programador siendo cuestionado es al que necesitas para tu empresa... en ese caso no puedo (ni me interesa) opinar porque no conozco las necesidades de ésta.

El otro detalle es que con las preguntas 14 y 15 yo estaba jugando con la literalidad. Déjame explicarme mejor: lo que haces es similar a decir primero "Escoge un X basándote en Y" y luego preguntar "¿En qué te basaste para escoger X?" la respuesta obvia es "Y". Además, el gusto es un asunto normalmente subconciente... no necesitas un motivo lógico para que algo te guste y lo más usual es que sea por alguna causa emocional y después te convenzas de alguna razón lógica para este gusto.

Anonymous said...

Bravo ismael, bravo.... lo dejaste sin que poder decir. es decir lo cayastes, deveras que com hay gente que porque sabe tantito de algo ya se siente bil geits

Unknown said...

Ismael. Pues creo que cualquier programador es capaz de escribir un algoritmo, ¿qué es un programa? es un algoritmo escrito en el lenguaje de tu preferencia, entonces si me interesa saber que algoritmos conoce y por supuesto que me interesa saber si conoce la orientación a objetos, ya que en la actualidad es uno de los paradigmas más usados, desde el inicio puse "Esto es lo que YO creo debería de ser un examen para saber si alguien sabe programar" con el yo en mayúscula precisamente para aclarar que es meramente mi concepción de las cosas, puedo estar equivocado o no, al igual que tu, nunca mencioné que esa era la forma de hacerlo.
Por otro lado estoy totalmente de acuerdo en el concepto de que te guste algo, pero insisto a mi lo que me interesa es saber porque te gusta bubble sort y no quick sort por ejemplo, insisto en la parte de la creatividad

Anónimo 3. Bueno, me queda claro que tienes mucho tiempo para hacer críticas bastante "constructivas", que bueno que aplaudas a Ismael, el tiene el valor de comentar en mi blog diciéndome quién es y sin esconderse detrás de la etiqueta de anónimo, y ya que tienes tanto tiempo libre, ¿Porqué no tomas un curso de ortografía? creo que te haría mucho bien, no me sorprendería verte caminar con los nudillos por la calle, y por cierto, me cae mal Bill Gates, lo respeto como mercadólogo, pero nada más, supongo que a él te referías, porque busque en google sobre Bil geits y no encontré nada interesante.

Y@c@tem@trix said...

Comparto tu opinion... considerando que actualmente muchas personas piensan que programar es solo sentarte y usar un lenguaje y mostrar datos... nooooo va mas alla de eso!!! es precismaente loq ue comentas, entender la logica de las cosas que quieres abstraer en un software usando metodologias o estandares predeterminados. Creo que la valia de un programador va mas alla de su capacidad de usar uno o N lenguajes, para mi la valia de un programador esta dada en con que eficacia y sofisticacion logras resolver un problema y convertir un requerimiento en algo usable y "tangible" al usuario final, y ademas combinar todas las herramientas posibles y adecuadas para la solución de un problema.

Bueno es mi punto de vista =) y me puedo extender mas jejejeje buen post!!! Saludos y ... Happy Coding!!

Ruber said...

...mm.. pues muchas preguntas solo se basan en la parte teorica.. no crees?

recuerda un principio que creo que a toda ciencia exacta, llega a presentarse:

es muy diferente la teoria que la practica..

Dani said...

Buenas!

Me parece que llego un poco tarde, pero no estoy de acuerdo en algunas cosas que planteas.

En mi opinion existe una gran diferencia entre programador amateur/ocio y los que nos dedicamos a ello. En el primer caso considero que se pueden llamar a si mismos programadores aunque sus conocimientos sean basicos, en el segundo caso creo que se te olvida que la malloria de la gente que trabaja como programador son gente sin estudios de informatica, y que en segun que casos lo hacen mil veces mejor que los que si hemos estudiado, mas vale un economista con conocimientos de programación que un programacion que un programador con conocimientos de economia, ya que al mercado que se dedican lo que importa es la economia, en casos muy concretos(S.O. y programas de aplicación), pero en la programación empresarial muchas veces lo que mas importa es conocer el mercado.

Un saludo.

Pd: COBOL sigue siendo uno de los más usados, todas las finanzas mundiales siguen funcionando con él.

Anonymous said...

Hola, muy interesante el post, felicitaciones desde Panama!

Anonymous said...

Muchos saludos, muy interesante el articulo, espero que sigas actualizandolo!

Anonymous said...

Es en serio? O estás parodiando a alguien?

Anonymous said...

Que preguntas mas pendejas, estas bien pendejo si eso te indica si sabes programar. solo haces perder el tiempo.