Test: ¿eres buen programador?


Decía Darwin que la ignorancia engendra más confianza que el conocimiento, una observación que coincide con el llamado efecto de Dunning–Kruger, que dicta que las personas incompetentes tienden a sobrestimar su habilidad al no tener conocimiento suficiente para reconocer su propia ineptitud. También es común que personas más preparadas tiendan a subestimar sus logros y su competencia, fenómeno que recibe el nombre de Síndrome del impostor.

La conclusión es que es bastante complicado valorarse a uno mismo si no es por medios lo más objetivos posibles. Una herramienta interesante, y que puede servir también como referencia para entrevistadores o como metas u objetivos para programadores con ganas de mejorar, es esta matriz de competencias del programador creada por Sijin Joseph. Simplemente selecciona la respuesta que más se ajuste a tus conocimientos y consulta tu puntuación al final del test.

¡También puede ser interesante dejar tu puntuación en los comentarios y volver a evaluarte en el futuro para ver cómo has evolucionado!

Ciencias de la computación

Estructuras de datos

No conoce la diferencia entre matriz y lista enlazada

Capaz de explicar y usar matrices, listas enlazadas, diccionarios, etc. en tareas prácticas de programación

Conoce las ventajas y desventajas en espacio y tiempo de las estructuras de datos básicas. Matrices contra listas enlazadas. Capaz de explicar cómo implementar tablas hash y cómo manejar colisiones. Colas de prioridad y formas de implementarlas

Conocimientos de estructuras de datos avanzadas, como árboles binarios, montículos binomiales y de Fibonacci, árboles AVL y Rojo-Negro, árboles biselados, listas con saltos, tries etc.

Algoritmos

No es capaz de calcular la media de los números almacenados en un array

Algoritmos básicos de ordenación, búsqueda, recorrido y recuperación

Algoritmos de árboles y grafos, algoritmos simples voraces y de divide y vencerás

Capaz de reconocer y desarrollar soluciones de programación dinámica, buen conocimiento de algoritmos de grafos, buen conocimiento de algoritmos de computación numérica, capaz de identificar problemas NP

Programación de sistemas

No sabe qué es un compilador, un enlazador o un intérprete

Conocimientos básicos de compiladores, enlazadores e intérpretes. Entiende lo que es el código ensamblador y cómo funcionan las cosas a nivel de hardware. Conocimientos básicos de memoria virtual y paginación.

Entiende la diferencia entre modo kernel y modo usuario, multi-hilo, primitivas de sincronización y cómo se implementan, capaz de leer código ensamblador. Entiende cómo funcionan las redes, entiende los protocolos de red y la programación a nivel de sockets.

Entiende cómo funciona el hardware (CPU + Memoria + Caché + Interrupciones + microcódigo), código binario, ensamblador, enlazado estático y dinámico, compilación, interpretación, compilación JIT, recolección de basura, heap, pila, direcciones de memoria

Ingeniería del Software

Control de versiones

Copia de seguridad de carpetas por fecha

Usuario principiante de VSS o CVS/SVN

Usuario avanzado de CVS y SVN. Sabe cómo utilizar ramas, parches y configurar propiedades del repositorio

Conocimientos de sistemas de control de versiones distribuidos. Ha probado Bzr/Mercurial/Darcs/Git

Automatización de la compilación

Sólo sabe compilar desde el IDE

Sabe cómo compilar desde la consola de comandos

Puede configurar un script para compilar el sistema base

Puede configurar un script para compilar el sistema y generar documentación, instaladores, notas de versión y etiquetar el código en el control de versiones

Automatización de las pruebas

Piensa que las pruebas son responsabilidad de los tester

Ha escrito pruebas unitarias automatizadas y crea buenas pruebas unitarias para el código que está escribiendo

Ha escrito código siguiendo la técnica TDD

Entiende y es capaz de crear pruebas funcionales, de carga/rendimiento y de interfaz de usuario

Programación

Descomposición de problemas

No divide el código y utiliza copiar y pegar para reutilizar

Capaz de dividir el problema en múltiples funciones

Capaz de crear objetos/funciones reutilizables que resuelvan el problema

Utiliza estructuras de datos y algoritmos apropiados y desarrolla código genérico/orientado a objetos que encapsula aspectos del problema propensos al cambio

Descomposición de sistemas

No es capaz de pensar por encima del nivel de un único archivo/clase

Es capaz de dividir el espacio del problema y diseñar una solución siempre que sea dentro de la misma plataforma/tecnología

Es capaz de diseñar sistemas que utilicen múltiples tecnologías/plataformas

Es capaz de visualizar y diseñar sistemas complejos con múltiples líneas de producto e integración con sistemas externos. También debería ser capaz de diseñar sistemas de soporte de operaciones como monitorización, reporte, recuperación de fallos, etc

Comunicación

No puede expresas sus pensamientos/ideas a sus compañeros. Pobre ortografía y gramática

Sus compañeros pueden entender lo que comunica. Buena ortografía y gramática

Es capaz de comunicarse efectivamente con sus compañeros

Es capaz de entender y comunicar pensamientos/diseños/ideas/especificaciones de una forma no ambigua y es capaz de ajustar la comunicación al contexto

Organización del código en un archivo

No hay evidencia de organización dentro del archivo

Agrupa los métodos por lógica o por accesibilidad

El código se agrupa en regiones y está bien comentado, con referencias a otros archivos

El archivo tiene cabecera con licencia y resumen, está bien comentado y hace un uso de espacios en blanco consistente

Organización del código en archivos

No dedica tiempo a pensar en la organización del código en archivos

Agrupa archivos relacionados en carpetas

Cada archivo físico tiene un propósito único, por ejemplo, la definición de una clase, la implementación de una característica, etc

La organización del código a nivel físico se asemeja al diseño y el nombre de los archivos y su distribución en carpetas proporciona pistas respecto al diseño

Organización en árbol

Todo en una carpeta

Separación básica del código en carpetas lógicas

No existen dependencias circulares. Binarios, librerías, documentación, compilaciones y código de terceros organizados en carpetas apropiadas

La estructura físca del árbol coincide con la jerarquía y organización lógica. Los nombres de los directorios y su organización proporcionan pistas respecto al diseño del sistema

Legibilidad del código

Nombres monosílabos

Buenos nombres para archivos, variables, clases, métodos etc

Sin funciones largas. Comentarios explicando código inusual, arreglos de bugs y asunciones

Las asunciones se verifican usando asserts, el código fluye naturalmente – sin niveles profundos de identación de condiciones y métodos

Programación defensiva

No entiende el concepto

Comprueba todos los arguments y las asunciones críticas en el código

Se asegura de comprobar los valores de retorno y comprobar excepciones en el código que puede fallar

Tiene su propia librería para ayudar con la programación defensiva, escribe pruebas unitarias para simular fallos

Manejo de errores

Sólo codifica el caso básico

Manejo de errores básico alrededor del código que puede lanzar excepciones/generar errores

Se asegura de que los errores/excepciones dejen el programa en buen estado. Los recursos, conexiones y la memoria se limpian apropiadamente

Escribe código para detectar posibles excepciones antes de que ocurran, mantiene una estrategia de manejo de excepciones consistente en todas las capas de código, define líneas básicas para el manejo de excepciones para el sistema

IDE

Utiliza el IDE principalmente como editor de textos

Conoce la interfaz, es capaz de utilizar los menús del IDE efectivamente

Conoce los atajos de teclado para las operaciones más utilizadas

Ha escrito macros propias

API

Necesita consultar la documentación frecuentemente

Ha memorizado las API más utilizadas

Conocimiento extenso y profundo de la API

Ha escrito librerías que se apoyan sobre la API para simplificar tareas habituales y rellenar huecos en la API

Frameworks

No ha utilizado ningún framework fuera de la plataforma base

Conoce, pero no ha utilizado los frameworks más populares disponibles para la platforma

Ha utilizado más de un framework a nivel profesional y está bien versado en los modismos utilizados en los frameworks

Autor de un framework

Requisitos

Escribe código de acuerdo con la especificación

Pregunta acerca de casos que no se tienen en cuenta en la especificación

Entiende la imagen completa y descubre nuevas áreas que necesitan especificarse

Capaz de sugerir mejores alternativas y flujos para los requisitos dados basándose en su experiencia

Scripting

Sin conocimiento de herramientas de scripting

Scripts Batch/shell

Perl/Python/Ruby/VBScript/Powershell

Ha escrito y publicado código reutilizable

Bases de datos

Cree que Excel es una base de datos

Conoce los conceptos básicos de bases de datos, normalización, ACID, transacciones y puede escribir consultas simples

Capaz de diseñar esquemas de bases de datos buenos y normalizados teniendo en cuenta las consultas que tendrán que ejecutarse, competente en el uso de vistas, procedimientos almacenados, disparadores y tipos definidos por el usuario. Conoce la diferencia entre índices agrupados y no agrupados. Competente en el uso de herramientas de ORM

Puede hacer tareas básicas de administración, optimización de rendimiento, optimización de índices, escribir consultas avanzadas, capaz de reemplazar el uso de cursores con SQL relacional, entiende cómo se almacena la información internamente, entiende cómo se almacenan los índices internamente, entiende cómo replicar bases de datos. Entiende cómo funciona el commit en dos pasos.

Experiencia

Lenguajes con experiencia profesional

Imperativo u Orientado a objetos

Imperativo, Orientado a objetos y declarativo (SQL), puntos extra si entienden la diferencia entre tipado estático y dinámico, tipado débil y fuerte y tipos estáticos inferidos

Funcional, puntos extra si entienden la evaluación perezosa, currificación, continuaciones

Concurrente (Erlang, Oz) y Lógico (Prolog)

Plataformas con experiencia profesional

1

2-3

4-5

6+

Años de experiencia profesional

1

2-5

6-9

10+

Conocimientos

Conocimiento de herramientas

Limitado a su IDE principal (VS.Net, Eclipse etc.)

Conoce algunas alternativas a herramientas estándar y populares

Amplio conocimiento de editores, depuradores, IDEs, alternativas de código abierto, etc

Ha escrito herramientas y scripts, bonus si han sido publicados

Lenguajes a los que ha sido expuesto

Imperativo u Orientado a objetos

Imperativo, Orientado a objetos y declarativo (SQL), bonus si entiende la diferencia entre tipado estático y dinámico, tipado débil y fuerte y tipos estáticos inferidos

Funcional, bonus si entiende la evaluación perezosa, currificación, continuaciones

Concurrente (Erlang, Oz) y Lógico (Prolog)

Conocimiento de próximas tecnologías

No ha escuchado hablar de las próximas tecnologías

Ha escuchado hablar de próximas tecnologías en el campo

Ha descargado la versión alpha/beta y ha leído algún artículo/manual

Ha jugado con versiones preliminares y ha desarrollado algo utilizándolas y como bonus, lo ha compartido con el mundo

Funcionamiento interno de la platforma

Cero conocimientos sobre el funcionamiento interno de la plataforma

Tiene un conocimiento básico de cómo funciona la plataforma internamente

Conocimiento profundo del funcionamiento interno de la plataforma y puede visualizar cómo la plataforma toma el código fuente y lo convierte en código ejecutable

Ha escrito herramientas para mejorar o proporcionar información sobre el funcionamiento interno de la plataforma. Por ejemplo, desensambladores, decompiladores, depuradores, etc

Libros

Colección Unleashed, 21 días, 24 horas, para tontos…

Code Complete, Don’t Make me Think, Mastering Regular Expressions

Design Patterns, Peopleware, Programming Pearls, Algorithm Design Manual, Pragmatic Programmer, Mythical Man month

Structure and Interpretation of Computer Programs, Concepts Techniques, Models of Computer Programming, Art of Computer Programming, Thinking Forth, Little Schemer

Blogs

Ha escuchado hablar de ellos pero nunca tuvo tiempo

Lee blogs sobre tecnología/programación/ingeniería del software y escucha podcasts regularmente

Mantiene un blog de enlaces con alguna colección de artículos útiles y herramientas que ha recopilado

Mantiene un blog en el que comparte su percepciones y pensamientos sobre programación

Has obtenido 0 puntos.

Comentarios
  1. 43 puntitos, mucho que mejorar, solo falta tener tiempo 😉 Gracias, ha sido curioso.

    Responder

  2. Zanahoria

    Siendo sinceros: 58 puntitos

    No está mal ¿no?

    Responder

  3. El puntaje que da el test, ¿sobre qué escala se evalua?

    Responder

    • ¿Te refieres a cuánto es el máximo? 90 puntos. Pero no creo que un 45 se pueda considerar sólo un suficiente raspado.

      Responder

  4. Alguien

    Hola, no doy mi nombre porque no quiero presumir. Solamente quería evaluar qué tal funciona este test.
    He sacado 84 puntos.
    Soy un “viejo” programador, con más de 30 años de experiencia.
    Saludos a todos.

    Responder

    • otro mas

      También otro viejuno pero no tanto.

      73.

      Creo que la clave está en la experiencia 🙂

      Responder

    • Muy impresionante. No me importaría tenerte de compañero 😉

      Responder

  5. Berserk Fury

    64 puntos :/

    Responder

  6. Gerard

    51 puntos. Con los años que llevo trabajando me ha abierto los ojos y lo mucho que uno puede seguir avanzando.

    Responder

  7. pufff

    Seguimos en la brecha y con más que aprender que nunca.

    84 puntos

    Responder

  8. Daniel

    60 puntos… Y con mucho por aprender.

    Responder

  9. Anónimo

    Muy buenas preguntas 🙂 52 punticos

    Responder

  10. 34 miserables… 🙁
    volveré en 6 meses a ver que tal…

    Responder

    • No te desanimes Gabriel. Lo importante es la voluntad de seguir mejorando 🙂

      Responder

  11. rul

    46 puntos me falta mucho por aprender, el conocimiento es extenso y muy poco el tiempo

    Responder

  12. 66 puntos, pero con una idea bastante clara de qué fortalecer. Gracias por el test. Saludos!

    Responder

  13. Antonio G.

    69 puntos.

    Responder

  14. anonimo

    31 puntos en 3 años :S ¿es bueno? ¿es malo? practicamente soy freelancer sin conpañeros de apoyo

    Responder

  15. Anonimo

    70 puntos

    Responder

  16. Ultimo año de carrera 37 puntos

    Responder

  17. 56 para no ser un programador (soy administrado de redes y sistemas unix) creo que no está mal, me esperaba mucho menos. Solo programo para mi, scripts en el curro, desarrollo web como hobby y algún juego también como hobby.

    Responder

  18. 28 madafaker

    Responder

    • Alejandro

      Tambíen 28, no me desanimo soy un desarrollador muy habíl, he desarrollado cientos de aplicaciones exitosas para mis clietes y no fuy a la universidad, así que no entiendo mucho de patrones complejos de programción solo he puesto logica a todos mis desarrollos que han sido en HTML5, PHP, C#, JAVA, Node JS, etc

      Responder

  19. Edugar

    90 puntos, nada mal si sólo eliges la cuarta respuesta en todos los puntos! XD XD XD

    Responder

  20. Asd

    53 puntos. Identificando puntos de mejoras en el mundo del software

    Responder

  21. 45 puntos, sin experiencia profesional 😅

    Responder

  22. kev

    Sin duda me falta demasiado, solo un 36. Ah seguir superándome :/.

    Responder

  23. me dio 66 puntos. aun que veo que en algunas preguntas le faltan ocpiones.

    Responder

  24. rolf

    43 puntos, Excelente test! hay que seguir estudiando!

    Responder

  25. Ivan

    30 puntos, Debo mejorar de manera drástica

    Responder

  26. byletor

    52 puntitos , mucho por mejorar.

    Responder

  27. Anónimo

    5 puntos… ok, sólo llevo 3 meses en esto.

    Responder

  28. Phermidex

    optube 48 puntos, pero tengo satisfaccion boy por buen camino. haci que tengo ansias de segir aprendiendo.

    Responder

    • LOL

      optube, boy, haci. Amos no me jodas, ni a posta.

      Responder

      • alguien

        Sí, va por muy buen camino, 9 faltas de ortografía y varios errores de sintaxis gramatical en una sola línea. Va por muy buen camino.

        Responder

  29. Ricardo

    25 puntitos, soy un principiante, no es malo para un humanista como yo.

    Responder

  30. 4

    obtuve 81, creo que aun me faltan algunos puntos por afinar.

    Responder

  31. LORD

    saque a la primera 59 a la segunda 55 y a la tercera 89

    Responder

  32. Fernando

    90 puntos. Se notan los 30+ años de experiencia

    Responder

  33. Anónimo

    76 puntos y solo llevo 4 años de trabajo fuera de la universida

    Responder

    • alguien

      Sí, seguro que sí.
      Hoy es 28 de diciembre, qué bonito día 😉

      Responder

  34. alexander

    apenas 23 puntos, regresare en unos meses y seguro me ira mejor

    Responder

  35. Gustavo

    34 puntos, menos de lo que esperaba, la verdad que tengo más experiencia como técnico de redes y programar ahora es tipo hobby. Pero he trabajado 3 años de programador (VB6, PHP, Oracle)

    Responder

  36. NewGenesis

    38 puntos 🙁 me falta mucho por aprender, pero ahora ya sé que puntos debo mejorar gracias por el post

    Responder

  37. AFVS

    58 espero me puedan compartir conocimieno!! afvs1989@gmail.com y dedicarnos a algún proyecto open source

    Responder

  38. Marionelo

    Solo 47 Puntitos, mucho por aprender y mejorar

    Responder

  39. DDiana

    56 puntos, me falta experiencia

    Responder

  40. Gabriel

    63, pense que saldria peor.
    Me consegui con esta pagina porque voy a evaluar un posible compañero para la oficina y hay cosas que conozco pero no por los nombres que dan aqui, por ejemplo los “lenguajes imperativos” Basic Pasca Cobol, los estudie, pero para mi se llama orientado a Eventos. Sino me equivoco hay unos buenos titulos de libros en una pregunta, los leere. Gracias muy util

    Responder

  41. lety

    Has obtenido 70 puntos. creo q no me fue tal mal para ser recien egresada

    Responder

    • alguien

      Claro, nosotros te creemos.
      :p

      Responder

  42. Juan

    veo que por mas que intento mejorar no sirvo para esto que pudiera hacer? 19 ptos

    Responder

  43. Juanmi

    Último año de carrera y 39 puntos. Seguro que pronto lo iré incrementando, por las buenas o por la malas.

    Responder

  44. Eduardo

    35 puntos último año de carrera.
    I need learn more.

    Responder

  45. “Has obtenido 54 puntos” A los cuantos puntos puedo considerarme buen programador?

    Responder

  46. Charly G. G.

    46 puntos a mis dos años y medio de experiencia, veo que aun necesito mejorar y mucho por aprender 😀

    Responder

Deja un comentario