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.

    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.

    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.

    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 “.

    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铆.

    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 “.

    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.

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *