Preparación para una entrevista de desarrollador 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 de la competencia 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éjeme ser el primero en decirle que es muy poco probable que sea el caso, e incluso si funciona, es probable que no permanezca empleado por mucho tiempo una vez que los otros miembros de su equipo se den cuenta de que no tiene las habilidades para cortar. en su equipo.

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

    Conoce tu camino en Python

    Parece obvio que si ha presentado una solicitud para un puesto de trabajo para un rol de desarrollador de Python, probablemente debería conocer Python. Sin embargo, si no lo hace y logró engañar a su manera en una entrevista sin el conocimiento necesario de Python, tiene un gran esfuerzo que hacer. Será mejor que se reserve un tiempo significativo de inmediato para ponerse al día con al menos los conceptos básicos de Python y darse cuenta de que, a menos que tenga años de experiencia en otro lenguaje de programación de alto nivel, orientado a objetos (es decir, Java, JavaScript, C #, etc.), es probable que tenga muy pocas posibilidades de que le vaya lo suficientemente bien en esta entrevista para aterrizar el trabajo. Perdón por las malas noticias … deja de mentir en las solicitudes de empleo.

    Como mínimo, debería poder poner en pizarra algunas construcciones idiomáticas de Python como bucles, controlar estructuras de flujo, enumerar comprensiones y definir algunas clases básicas. Si algo de esto no te suena familiar, te recomiendo que consultes el artículo de Scott Robinson Tutorial de Python para principiantes absolutos aquí en Pharos.sh.

    Muestre sus proyectos de ejemplo

    Me doy cuenta de que ha estado ocupado con la escuela, un bootcamp de programación o su trabajo actual / 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.

    Te puede interesar:Usando cURL en Python con PycURL

    Según mi experiencia, la mejor manera de demostrar que puede codificar es entregar una cantidad razonable de código que demuestre su capacidad para producir una pieza de software utilizable. Puede 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 bien organizado, idiomático y legible.

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

    • Lo coloca en la comunidad de código abierto, lo que en sí mismo es una gran cosa.
    • Demuestra que también conoce 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é creando su proyecto de código de ejemplo, trátelo como un proyecto real. Complete pequeñas piezas de funcionalidad a la vez y luego confiérelas al control de versiones con confirmaciones descriptivas. Te sorprenderá el efecto de esto. Los gerentes de contratación valoran mucho su comprensión y capacidad para usar el control de versiones de Git.

    Repase las estructuras de datos y los 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 listas vinculadas, pilas y colas que no están necesariamente implementadas en la biblioteca estándar de Python, pero que pueden implementarse utilizando el lenguaje.

    También debería 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 utilizar las estructuras de datos de Python existentes, como listas, para implementar la funcionalidad de una pila, o por otro lado, hacer una implementación personalizada de una clase como LinkedList.

    Te puede interesar:Implementación de una aplicación Flask en Heroku

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

    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 en particular, como una lista vinculada.

    Por ejemplo, si sabe que insertará y eliminará elementos del frente 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 la cual se puede usar una LinkedList, pero el módulo de colecciones de Python ya tiene una estructura de datos incorporada útil para esto llamado deque lo cual sería importante mencionar también durante la discusión con los entrevistadores.

    El objetivo principal de presentar 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 utilizar una búsqueda binaria en lugar de una lineal. En los casos en los que espera buscar muchas veces en una lista moderadamente grande, es probable que valga la pena el gasto incurrido para ordenar una lista y hacerla capaz de realizar búsquedas binarias, pero si se va a buscar en una lista solo un par de veces, puede que no sea así. vale la pena el gasto de clasificarlo.

    Te puede interesar:Comprender la palabra clave «rendimiento» de Python

    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 hash, que esencialmente le brindará búsquedas e inserciones de elementos O (1).

    Capacidad para comprender y resolver problemas

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

    Lo que esto requiere es una combinación de habilidades tanto físicas como 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, esto es en última instancia en lo que un empleador quiere probarlo, cómo maneja que se le presente una tarea o problema de programación y su capacidad para identificar piezas clave de información y usarla para diseñar 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, si practica mucha práctica y se expone a una variedad de problemas. Mientras más problemas esté expuesto, más podrá comenzar a reconocer patrones comunes en problemas y soluciones recurrentes que a menudo varían mínimamente. Una excelente manera de ganar experiencia en la resolución de problemas de programación es utilizar un servicio como Problema de codificación diario.

    The Daily Coding Problem es un servicio al que puede suscribirse 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 da 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 las que puedes subir la escalera. El orden de los escalones importa «.

    Te puede interesar:Detección de objetos con ImageAI en Python

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

    Permítanme desarrollar más sobre esto.

    ¿De cuántas formas diferentes puede subir una (N = 1) escalera dando 1 o 2 pasos a la vez? Un conjunto de exactamente uno [1].

    N = 1 => [1]
    

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

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

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

    [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í.

    Te puede interesar:Python para la PNL: trabajar con la biblioteca FastText de Facebook
    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 obtener soluciones detalladas a esos problemas, por una pequeña tarifa con descuento, para ayudarlo a resolver los problemas extra complicados o permitirle comparar sus soluciones con las que brinda el servicio.

    Glaseado en el pastel

    Dado que este es un artículo sobre entrevistas para un trabajo en 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 un lenguaje de programación.

    Mi consejo es que prestes 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 prepárate para profundizar en ellas como bien. Esto demuestra que es capaz y está dispuesto a aprender otras cosas que aportarán valor a la empresa que está solicitando.

    Otra cosa beneficiosa que se puede hacer es tener algún conocimiento de la empresa. Haga una investigación básica sobre la empresa para la que ha solicitado trabajar. Concéntrese en cosas como identificar las fuentes de ingresos clave y las identidades culturales que la empresa pueda tener o esté tratando de establecer.

    Por último, pero no menos importante, me gustaría hablar de vestirse para una entrevista. No hace falta decir que vale la pena vestirse para impresionar, pero, de hecho, he oído hablar y he visto a los desarrolladores presentarse a las entrevistas en jeans y sudaderas con capucha … ¡Doinke! Por lo menos, si la cultura de la empresa es lo suficientemente relajada, debes vestirte con ropa informal de negocios, pero aún así te recomiendo un traje.

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

    Te puede interesar:Leer y escribir YAML en un archivo en Python

    En pocas palabras, siéntete orgulloso de tu apariencia y no solo de tus habilidades con Python.

    Conclusión

    En este artículo, he tratado de articular lo que he descubierto que son diferenciadores clave que pueden ponerlo por delante de la competencia al realizar 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 los 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 haya encontrado algo de valor en este artículo, pero, sobre todo, espero que le ayude a concretar la próxima entrevista de Python.

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

    Rate this post

    Etiquetas: