Preparación para una entrevista de desarrollador de Python

En este artículo daré mis opiniones y sugerencias para colocarse en la mejor posición para superar a los candidatos de la competencia en un programa de Python...

Introducción

En este artículo, daré mis opiniones y sugerencias para colocarse en la mejor posición para superar a los candidatos que compiten en una entrevista de programación de Python para que pueda conseguir un trabajo como desarrollador de Python.

Puede estar pensando, con la escasez de programadores en el mercado laboral, todo lo que necesito hacer es presentarme y responder algunas preguntas sobre la sintaxis básica de Python y dejar que mi título o certificado de bootcamp se encargue del resto. Bueno, déjame ser el primero en decirte que es muy poco probable que ese sea el caso, e incluso si funciona, no es probable que permanezcas empleado por mucho tiempo una vez que los otros miembros de tu equipo se den cuenta de que no tienes las habilidades para cortarlo en su equipo.

Entonces, si está buscando ingresar al espacio de programación de Python o incluso ascender a un rol de desarrollador senior de Python, lo invito a seguir leyendo mientras diseño algunos consejos importantes para ser lo más competitivo posible en el juego de entrevistas. Tenga en cuenta que la mayoría de estos consejos, si no todos, también se aplican a trabajos remotos, que suelen tener procesos de contratación similares a los que requieren que trabaje en el sitio.

Conozca Python

Parece obvio que si se ha postulado a una lista de trabajos para un rol de desarrollador de Python, probablemente debería conocer Python. Sin embargo, si no lo hace y se las arregló para llegar a una entrevista sin el conocimiento necesario de Python, tiene que hacer un gran esfuerzo. Es mejor que bloquee un tiempo significativo de inmediato para ponerse al día al menos en lo básico. de Python y se da cuenta de que, a menos que tenga años de experiencia en otro lenguaje de programación orientado a objetos de alto nivel (es decir, Java, JavaScript, C#, etc...), probablemente tenga muy pocas posibilidades de hacerlo lo suficientemente bien en esta entrevista como para conseguir el trabajo. Perdón por las malas noticias... deja de mentir en las solicitudes de empleo.

Como mínimo, debería poder incluir en la pizarra algunas construcciones idiomáticas de Python, como bucles, estructuras de flujo de control, comprensiones de listas y definir algunas clases básicas. Si algo de esto no te suena familiar, te recomiendo que visites el artículo [Tutorial de Python para principiantes absolutos] de Scott Robinson aquí en [Abuso de pila] (/).

Muestre sus proyectos de ejemplo

Me doy cuenta de que ha estado ocupado con la escuela, un campamento de codificación o su trabajo actual o anterior, pero no puedo enfatizar lo suficiente la importancia de esto. Cuando solicita un trabajo de desarrollador de Python, está tratando de convencer al gerente de contratación de que posee las habilidades que necesita para hacer una contribución significativa a un producto o proyecto que algún día será un producto que aporte valor a esa empresa.

Desde mi experiencia, la mejor manera de demostrar que puede programar es entregar una cantidad razonable de código que demuestre su capacidad para producir una pieza de software utilizable. Esto podría ser una aplicación web simple, un script de procesamiento de datos o una aplicación de escritorio mínima. La clave aquí es dar una idea de su capacidad para escribir código que esté bien organizado, idiomático y legible.

La mejor manera de hacer esto es tener un repositorio público de GitHub, BitBucket o GitLab que aloje sus proyectos de ejemplo. Esto hace algunas cosas por ti:

  • Te coloca en la comunidad de código abierto, lo que en sí mismo es algo grandioso.
  • Demuestra que también conoces los conceptos básicos del control de versiones de Git.
  • Da a conocer su nombre y aumenta sus posibilidades de ser contactado para trabajos también.

Con respecto al segundo punto, cuando esté construyendo su proyecto de código de ejemplo, trátelo como un proyecto real. Complete pequeñas piezas de funcionalidad a la vez y luego confírmelas al control de versiones con confirmaciones descriptivas. Te sorprenderá el efecto de esto. Los gerentes de contratación otorgan un gran valor a su comprensión y capacidad para usar el control de versiones de Git.

Repasar estructuras de datos y algoritmos {#repasar estructuras de datos y algoritmos}

En primer lugar, debe conocer las estructuras de datos comunes de Python, como listas, diccionarios, tuplas y cómo crear clases.

A continuación, debe conocer las estructuras de datos más generalizadas, como las listas vinculadas, las pilas y las colas, que no están necesariamente implementadas en la biblioteca estándar de Python, pero que pueden implementarse mediante el lenguaje.

También debe poder comparar y contrastar las estructuras de datos básicas de Python con las estructuras de datos generalizadas antes mencionadas y describir cómo puede usar estructuras de datos de Python existentes, como listas, para implementar la funcionalidad de una pila o, por otro lado, hacer un implementación personalizada de una clase como una Lista enlazada.

A continuación se muestra un ejemplo de una implementación personalizada de una lista vinculada, que utiliza una clase interna Elemento (también conocida como Nodo) para administrar elementos de datos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
class Element:
    def __init__(self, value):
        self.value = value
        self.next = None

class LinkedList:
    def __init__(self, head=None):
        self.head = head

    def append(self, value):
        if self.head is None:
            self.head = Element(value)
        else:
            current = self.head
            while current.next is not None:
                current = current.next
            current.next = Element(value)

    def pop(self):
        if self.head is None:
            return None

        if self.head.next is None:
            value = self.head.value
            self.head = None
            return value
  
        current = self.head
        while current.next.next:
            current = current.next
        value = current.next.value
        current.next = None
        return value

    def peek(self):
        if self.head is None:
            return None
        current = self.head
        while current.next:
            current = current.next
        return current.value

    def remove(self, value):
        if self.head is None:
            return None

        if self.head.next is None:
            if self.head.value == value:
                self.head = None
                return True
            return None

        if self.head.next.next is None:
            if self.head.next.value == value:
                self.head.next = None
                return True

        current = self.head
        while current.next.next:
            if current.next.value == value:
                current.next = current.next.next
                return True
            current = current.next
        return None

    def insert_first(self, value):
        next_element = self.head
        self.head = Element(value)
        self.head.next = next_element
    
    def delete_first(self):
        if self.head:
            new_first = self.head.next
            self.head = new_first

Debería poder identificar instancias en las que sería beneficioso utilizar una estructura de datos particular, como una lista vinculada.

Por ejemplo, si sabe que insertará y eliminará elementos del principio de una lista con frecuencia, entonces es significativamente más eficiente usar algo como LinkedList en lugar de la lista estándar de Python. Sin embargo, vale la pena mencionar que dicha operación se usa más comúnmente con una cola o una pila, para lo cual se puede usar LinkedList, pero el módulo de colecciones de Python ya tiene una estructura de datos incorporada útil para esto llamada deque que sería importante mencionar también durante la discusión con los entrevistadores.

El objetivo principal de mencionar la implementación personalizada de una LinkedList en una entrevista de Python sería demostrar su capacidad para codificar una clase personalizada y describir las diferencias entre la lista estándar de Python y la mecánica de una LinkedList.

Además, tenga en cuenta algunos algoritmos básicos que se utilizan para realizar tareas comunes, como ordenar y buscar.

Por ejemplo, sería bueno explicar cómo y por qué una búsqueda binaria funciona significativamente mejor que una búsqueda lineal en una lista. Específicamente, una búsqueda lineal siempre será O(n) mientras que una búsqueda binaria será O(log n). También querrá explicar cuándo es apropiado usar una búsqueda binaria en lugar de una lineal. En los casos en los que espera buscar en una lista moderadamente grande muchas veces, es probable que valga la pena el gasto incurrido para ordenar una lista y hacer que sea capaz de realizar búsquedas binarias, pero si una lista se va a buscar solo un par de veces, es posible que no sea así. vale la pena el gasto de clasificarlo.

También vale la pena mencionar si es mejor usar otra estructura de datos, como un diccionario, en los casos en que la clave que está buscando es una estructura hashable, que esencialmente le dará búsquedas e inserciones de elementos O (1).

Capacidad para comprender y resolver problemas {#capacidad para comprender y resolver problemas}

Ser un desarrollador estrella del rock es mucho más que simplemente memorizar la sintaxis de un lenguaje en particular o las estructuras de datos y algoritmos de uso común, por muy valiosos que puedan ser. Lo que lo diferenciará de la multitud es su capacidad para comprender un problema, un caso de uso, la oportunidad de implementarse en el software o cualquier otra cosa a la que pueda referirse a las cosas que se nos pide que traduzcamos en código.

Lo que esto requiere es una combinación de habilidades duras y blandas. Debe poder escuchar activamente el requisito de la función o la descripción del error e identificar los hechos pertinentes y hacer preguntas para eliminar aspectos clave adicionales. Luego, debe poder dividir toda esa información en tareas o componentes individuales que se pueden llevar a cabo para luego trabajar colectivamente para realizar la funcionalidad deseada.

Créame, en última instancia, esto es en lo que un empleador quiere evaluarlo, cómo maneja que se le presente una tarea o problema de programación y su capacidad para identificar información clave y usarla para idear una solución.

Esto es más fácil dicho que hecho. Sin embargo, hay algunas cosas que aumentarán su probabilidad de éxito, a saber, practicar mucha y exponerse a una variedad de problemas. Cuantos más problemas esté expuesto, más podrá comenzar a reconocer patrones comunes en problemas y soluciones recurrentes que a menudo varían solo mínimamente. Una buena forma de adquirir experiencia resolviendo problemas de programación es utilizar un servicio como Problema de codificación diaria.

The Daily Coding Problem es un servicio en el que puede registrarse y que le enviará por correo electrónico un problema de programación diferente presentado en Python todos los días para que lo resuelva. Por ejemplo, la página de inicio de The Daily Programming Problem ofrece un ejemplo de los tipos de problemas que puede esperar recibir, como "Hay una escalera con N escalones, y puede subir 1 o 2 escalones a la vez. Dado N, escribe una función que devuelva el número de formas únicas en que puedes subir la escalera. El orden de los escalones es importante".

Curiosamente, las permutaciones de diferentes combinaciones de pasos se simplifican a una suma de las combinaciones de pasos para (N - 1) + (N - 2) que podría reconocer como la lógica principal para implementar el algoritmo para una secuencia de Fibonacci de número N.

Permítanme elaborar más sobre esto.

¿De cuántas maneras diferentes puedes subir una escalera (N = 1) tomando 1 o 2 escalones a la vez? Un conjunto de exactamente un [1].

1
N = 1 => [1]

Ahora, ¿qué tal dos escaleras (N = 2)?

1
N = 2 => [1, 1], [2]

Luego, para una fórmula de f(N) = f(N - 1) + f(N - 2) siempre que N > 0

1
[1] + ([1,1], [2]) = [1,1,1], [1,2], [2,1] 

Como mencioné anteriormente, esta es la implementación recursiva de la secuencia de Fibonacci y en Python se ve así.

1
2
3
4
def step_combinations(stairs):
    if stairs <= 1:
        return 1
    return step_combinations(stairs - 1) + step_combinations(stairs - 2)

Con Daily Coding Problem, no solo tendrás problemas de práctica todos los días, sino que también puedes [obtener soluciones detalladas] (https://stackabu.se/daily-coding-problem-subscribe) para esos problemas, por una pequeña tarifa con descuento , para ayudarlo a resolver los problemas complicados adicionales o permitirle comparar sus soluciones con las proporcionadas por el servicio.

La guinda del pastel

Dado que este es un artículo sobre entrevistas para un trabajo de Python, me he centrado en las habilidades técnicas específicas de Python; sin embargo, en mi experiencia, rara vez un desarrollador de Python solo codificará en Python. De hecho, probablemente ni siquiera sea una buena idea desde el punto de vista de la empleabilidad a largo plazo pensar que solo trabajará con una tecnología o lenguaje de programación.

Mi consejo es prestar atención a las tecnologías auxiliares que a menudo se encuentran en la lista de trabajos en secciones como "Es bueno tenerlas", que pueden enumerar cosas como JavaScript, CSS, Java, etc... y estar preparado para profundizar ligeramente en esos también. Esto demuestra que puede y está dispuesto a aprender otras cosas que aportarán valor a la empresa que está solicitando.

Otra cosa beneficiosa que hacer es tener algún conocimiento de la empresa. Haz una investigación básica sobre la empresa para la que has solicitado trabajar. Concéntrese en cosas como la identificación de fuentes de ingresos clave y cualquier identidad cultural que la empresa pueda tener o esté tratando de establecer.

Por último, pero no menos importante, me gustaría referirme a cómo vestirse para una entrevista. No hace falta decir que vale la pena vestirse para impresionar, pero, de hecho, he oído hablar de desarrolladores y los he visto aparecer en entrevistas con jeans y sudaderas con capucha… ¡Doinke! Como mínimo, si la cultura de la empresa es lo suficientemente relajada, deberías vestirte de manera informal, pero aun así recomiendo un traje.

Ya te has esforzado para poder mostrar tus locas habilidades con Python y sorprenderlos con tu conocimiento de la compañía, así que no lo arruines dejándolos con la impresión duradera de “sí, parecía que sabía sobre programación, pero también lo hicieron los otros N candidatos que parecían no haber entrado simplemente de la sala de juegos”.

En pocas palabras, enorgullécete de tu apariencia y no solo de tus habilidades con Python.

Conclusión

En este artículo, he tratado de articular lo que he llegado a encontrar como diferenciadores clave que pueden ponerlo por delante de la competencia durante una entrevista para un puesto de desarrollador de Python. He mencionado la importancia de conocer realmente Python, la utilidad de las estructuras de datos y algoritmos comunes, convertirse en un mejor solucionador de problemas al exponerse a muchos problemas a través de servicios como The Daily Coding Problem, e incluso los conceptos básicos, como la investigación de la empresa y la vestimenta adecuada. Espero que hayas encontrado algún valor en este artículo pero, sobre todo, espero que te ayude a concretar la próxima entrevista de Python.

Como siempre, les agradezco su lectura y agradezco los comentarios y críticas a continuación.

Recursos