Tuve una entrevista con ChatGPT
Tags: chatgpt, django, interview
Published: 2023-04-10 17:57:41

ChatGPT no para de generar buenas ideas: todos los días encuentro algo nuevo, o incluso integraciones de otras librerías con este chat que nos está cambiando la forma de trabajar para siempre.

Hoy decidí probar un invento, basado en el siguiente promnt que encontré por ahí:

> Actúa como entrevistador de [PUESTO DE TRABAJO]. Yo seré el candidato y tú me harás las preguntas de la entrevista para el puesto. Quiero que solo respondas como el entrevistador. No escribas toda la conversación de una sola vez. Solo quiero que hagas la entrevista conmigo. Hazme las preguntas y espera mis respuestas. No escribas explicaciones. Hazme las preguntas una por una, como lo hace un entrevistador, y espera mis respuestas. Mi primera frase es "Hola".

En mi caso, en el puesto escribí "Desarrollador Django Senior".

Y así comenzó una charla de lo más interesante, donde pude desenvolverme un poco más en cada paso, dado que la entrevista me resultó super entretenida.

## La entrevista completa

A continuación, les comparto el Chat entero, donde las preguntas del Chat estan en itálica.

_Hola, gracias por presentarte para la entrevista. ¿Podrías hablarme un poco sobre tu experiencia previa en Django y desarrollo web en general?_

Si claro, tengo 12 años desarrollando web y mobile. Con respecto a Django, armé distintas aplicaciones como un juego de rol, sitios de gestion de usuarios, entre otras. En general, trabajé con PHP, HTML, CSS y Javascript, asi como varios frameworks.

_Genial, parece que tienes una amplia experiencia en desarrollo web. En cuanto a Django, ¿podrías explicar cómo se relacionan las vistas, modelos y templates en el patrón de diseño MVC utilizado por Django?_

Las vistas en django se definen en views.py, luego se pueden vincular en urls.py. Los modelos se pueden consultar desde una vista, por ejemplo Modelo.objects.all() puede traer todos los registros de Modelo. Los templates se pueden retornar tambien en las vistas, y pueden contener lógica mediante un engine de templates llamado Jinja.

_Muy bien, parece que estás familiarizado con la arquitectura MVC y cómo se aplica en Django. ¿Podrías explicar cómo implementarías una autenticación de usuario segura en una aplicación Django?_

Utilizaría el modelo AbstractUser, el cual seria mi clase padre para crear mi modelo User. Luego implementaría el método authenticate para validar si el usuario y contraseña indicados son correctos. Todo esto lo implementaría en una vista. Luego utilizaría las funciones login y logout para manejar la sesión.

_Entiendo. ¿Cómo manejarías el acceso a ciertas vistas o funcionalidades para usuarios autenticados y no autenticados?_

Utilizaría el decorador @login_required() para proteger las vistas, con un redireccionamiento a la pantalla de ingreso, si el usuario no esta autenticado.

_Buen enfoque. Ahora, ¿cómo asegurarte de que la aplicación Django sea escalable y pueda manejar grandes cantidades de tráfico y solicitudes concurrentes?_

En principio me enfocaría en dividir las funcionalidades en apps de Django. Por ejemplo en un sitio de gestión de empleados, crearía apps para companias y empleados. Luego tendría una app que pueda llamar a cada una cuando sea necesario.

_Excelente punto. Además, ¿qué otras medidas de rendimiento o escalabilidad implementarías en la aplicación?_

Quizá usaría alguna librería de cache para almacenar solicitudes que se repiten.

_Buena idea. ¿Qué tipo de caché utilizarías? ¿Sería una caché en memoria o una caché en disco?_

Depende la situación: si se trata de un sitio que siempre muestra el mismo contenido, utilizaría cache en disco. Para contenido relacionado con la sesión de usuario, utilizaría el cache en memoria.

_Muy bien. ¿Cómo manejarías la integración de Django con otras tecnologías o servicios externos, como bases de datos NoSQL, servicios en la nube o integraciones con APIs de terceros?_

Integraría BDs mediante el archivo settings.py, donde puedo especificar como accederlas.

_Sí, eso es correcto. ¿Y qué me puedes decir sobre integraciones con servicios en la nube o APIs de terceros?_

Depende del servicio, por ejemplo AWS tiene su propia librería para manejar sus servicios. Probablemente crearía una app de Django que se dedicara a acceder a los mismos. En cuanto a APIs mas tradicionales, podría usar el método request de Python.

_Interesante. Por último, ¿podrías mencionar algún proyecto en Django del que estés especialmente orgulloso y explicar cómo lo abordaste?_

Estoy creando un motor de juegos de rol. Se pueden crear personajes, los cuales tienen equipamiento que pueden comprar en una tienda. Cada entidad que mencioné pertenece a una app distinta, la cual tiene sus rutas y vistas específicas. Estoy utilizando SQLite para persistir la información, y la librería de auth de Django para trabajar con las sesiones. También tengo un portal de noticias con un usuario que tiene determinados permisos para escribir en el mismo.

_Suena como un proyecto interesante. Parece que has usado varios aspectos de Django, incluyendo la autenticación de usuarios, la creación de apps y el uso de bases de datos. Muchas gracias por compartir tus experiencias y conocimientos conmigo. Esto concluye nuestra entrevista. ¡Buena suerte en su búsqueda de trabajo!_

## La evaluación
Como estaba hablando con ChatGPT y no un entrevistador real, me tomé el "atrevimiento" de pedirle una devolución técnica sobre las respuestas que fui dando, y me respondió lo siguiente:

> En general, demostraste un conocimiento sólido de Django y sus principales componentes, como las vistas, los modelos y los templates, así como también la integración de librerías externas, el manejo de autenticación de usuarios y la implementación de medidas de escalabilidad y rendimiento. Además, tu proyecto de juego de rol mostró que puedes aplicar estos conocimientos en proyectos más complejos. En general, diría que tu entrevista fue muy bien y que pareces ser un desarrollador de Django experimentado y capaz.

Como ven, podemos sacarle mucho partido a este promnt en el chat, los invito a que escriban el suyo y lo compartan!