Revisi贸n del curso: Domine la entrevista de Python

    Introducci贸n

    Este art铆culo ser谩 una continuaci贸n del tema de mi art铆culo anterior Preparaci贸n para una entrevista de desarrollador de Python, donde di mis opiniones y sugerencias que creo que lo pondr谩n en la mejor posici贸n para superar a otros desarrolladores que compiten por un rol de desarrollador de Python. En este art铆culo, revisar茅 el popular curso de Udemy sobre c贸mo prepararse para una entrevista de desarrollador de Python por Nicolas Georges llamado Domine la entrevista de Python: obtenga el trabajo para personas mayores y bien remunerado.

    Antes de comenzar, debemos mencionar que hay muchas formas de practicar la programaci贸n de preguntas de entrevistas, incluidos servicios como Problema de codificaci贸n diario, que le enviar谩 por correo electr贸nico un nuevo problema para resolver todos los d铆as.

    Estructura y temas cubiertos en el curso

    La estructura de este curso est谩 compuesta por secciones que cubren los temas que se enumeran a continuaci贸n, donde cada secci贸n termina en uno o m谩s ejercicios o cuestionarios para reforzar el material.

    Los temas tratados por Nicolas en su curso son los siguientes:

    • Colecciones con listas y tuplas
    • Introducci贸n a la programaci贸n orientada a objetos en Python
    • Examen de la unidad
    • Python idiom谩tico: pide perd贸n, no permiso
    • Debe conocer las construcciones de programaci贸n de Python
    • Debe conocer las estructuras de datos de Python
    • M谩s sobre OOP en Python
    • Comprensiones de estructura de datos

    En las secciones que siguen, analizo brevemente el contenido de cada secci贸n junto con las cosas que me gustaron y no me gustaron de cada una. Concluyo con una secci贸n adicional que discute cosas que creo que beneficiar铆an a este Curso Udemy si se incluyeron o se hicieron de manera diferente.

    Antes de entrar en las secciones individuales, me gustar铆a se帽alar que este curso se imparti贸 utilizando Python 2.7 “heredado”, que creo que es un peque帽o defecto en el curso. La comunidad de Python tiene poco m谩s de a帽o lejos de perder completamente el apoyo del equipo de desarrolladores de Core con respecto al mantenimiento de Python 2. Por esta raz贸n, creo que es necesario que los productores de contenido de Python adopten y usen Python 3 al 100%.

    Colecciones con listas y tuplas

    Las colecciones son un tema de enorme importancia en todos los lenguajes de programaci贸n de alto nivel y Python ciertamente no es una excepci贸n a esto, por lo que estoy muy contento de que se hayan cubierto en este curso. Nicolas hace un buen trabajo al diferenciar entre inmutabilidad y mutabilidad en relaci贸n con listas y tuplas que, en mi opini贸n, son los principales diferenciadores entre los dos.

    Desafortunadamente, se hizo un cargo sobre la implementaci贸n de listas y tuplas que encontr茅 muy enga帽oso o completamente incorrecto. En esta secci贸n, Nicolas afirma que “las listas contienen tipos de datos homog茅neos, mientras que las tuplas est谩n destinadas a contener tipos de datos heterog茅neos”. Al principio pens茅 que esto era simplemente un error inofensivo al que todos son susceptibles en la vida, pero m谩s adelante en esta secci贸n se reiter贸 e incluso se reforz贸 en uno de los ex谩menes finales de la secci贸n.

    Me gustar铆a tomarme un tiempo para corregir esta afirmaci贸n, ya que creo que Nicolas probablemente estaba tratando de describir una tendencia de uso com煤n donde las listas a menudo contienen tipos de datos homog茅neos, mientras que las tuplas a menudo pueden contener tipos de datos heterog茅neos. En mi experiencia, es cierto que cuando utilizo listas, los datos que contienen suelen ser del mismo tipo. Sin embargo, es importante saber que tanto las listas como las tuplas pueden contener diferentes tipos de datos, as铆 como los mismos.

    Aqu铆 hay un ejemplo de listas y tuplas que contienen los mismos tipos de datos que son cadenas que representan las letras de mi nombre:

    >>> x = ['a','d', 'a', 'm']
    >>> y = ('a', 'd', 'a', 'm')
    

    Y aqu铆 hay un ejemplo de listas y tuplas que contienen diferentes tipos de datos de una cadena que representa mi nombre y un n煤mero entero que representa mi edad:

    >>> x = ['Adam', 30]
    >>> y = ('Adam', 30)
    

    Introducci贸n a la programaci贸n orientada a objetos en Python

    En esta secci贸n, Nicolas explica una caracter铆stica muy importante del lenguaje de programaci贸n Python en que cada elemento del lenguaje tiene la forma de un objeto. A partir de esto, puede extrapolar que el lenguaje es un lenguaje totalmente orientado a objetos. Nicolas contin煤a demostrando y explicando el uso y la utilidad de muchas funciones integradas que permiten al programador inspeccionar objetos como dir(), id(), help() as铆 como otros.

    Sin embargo, Nicolas contradice sus declaraciones anteriores sobre la homogeneidad / heterogeneidad de los tipos de datos en las listas durante esta secci贸n, que espero que se puedan limpiar, ya que creo que la mayor铆a de los primeros usuarios de Python se confundir铆an bastante en este punto del curso.

    Examen de la unidad

    Lo que m谩s me impresion贸 fue esta secci贸n del curso. Siento que muchos, si no la mayor铆a, de los cursos de programaci贸n a menudo no abordan la importancia de probar el c贸digo. Nicolas hace un excelente trabajo cubriendo los conceptos b谩sicos del unittest m贸dulo e incluso dedica un tiempo considerable a explicar c贸mo utilizar el desarrollo basado en pruebas y por qu茅 es importante.

    Python idiom谩tico: pide perd贸n, no permiso

    Esta es la parte del curso en la que Nicolas comienza a hacer la transici贸n a las convenciones comunes, o modismos, de la comunidad de programaci贸n de Python. No quiero robar el trueno de Nicolas yendo demasiado lejos en la explicaci贸n del material cubierto aqu铆 porque creo que hace un gran trabajo explicando lo que significa “pedir perd贸n y no permiso” y c贸mo esta convenci贸n difiere en Python en oposici贸n a otros lenguajes, como Java.

    Debe conocer las construcciones de programaci贸n de Python

    Estaba un poco confundido sobre por qu茅 existe esta secci贸n de los cursos y por qu茅 se coloc贸 en el medio del curso. Los temas que se tratan en esta secci贸n repasan las construcciones sint谩cticas muy b谩sicas como expresiones booleanas, condicionales y bucles. Para un curso dirigido a desarrolladores de Python de nivel medio a superior, sent铆 que esta secci贸n deber铆a asumirse como conocimiento, pero supongo que para completarlo no es inapropiado incluirlo. Sin embargo, creo que quiz谩s tenga m谩s sentido poner este material al comienzo del curso.

    Con lo dicho anteriormente sobre esta secci贸n, quiero dejar mi revisi贸n de esta secci贸n con algo que encontr茅 bastante positivo. Me gust贸 que Nicolas explicara lo que significaba en el lenguaje ser considerado verdadero / falso, robar un t茅rmino de la comunidad Javascript. Nicolas hizo un gran trabajo al tomarse el tiempo para describir la utilidad de los dispositivos integrados. bool() funci贸n para probar los equivalentes booleanos de las expresiones condicionales de uso com煤n para probar valores como listas vac铆as, cadenas vac铆as, Ninguno y otros.

    Debe conocer las estructuras de datos de Python

    Aqu铆 Nicolas introduce un tipo de datos de recopilaci贸n adicional, que se conoce como set y sigue con comparaciones de conjuntos y listas. Durante esta explicaci贸n, cubre la noci贸n de lo que significa ser hash.

    Sin embargo, una cosa que sent铆 que faltaba aqu铆 fue una explicaci贸n de los beneficios de rendimiento de buscar un conjunto para la inclusi贸n de un valor en comparaci贸n con una lista, que es un beneficio importante de usar conjuntos.

    M谩s sobre OOP en Python

    Esta secci贸n da un vuelco para profundizar en la programaci贸n orientada a objetos en Python. Nicolas explica adem谩s la sintaxis y el significado de definir una clase personalizada y crear objetos a partir de ella. Introduce los conceptos de definici贸n de atributos y m茅todos de instancia personalizados, as铆 como tambi茅n analiza qu茅 son los m茅todos m谩gicos y c贸mo se utilizan. En general, sent铆 que esta secci贸n estaba bien cubierta y es un conocimiento importante para un desarrollador de Python de nivel medio a superior.

    Comprensiones de estructura de datos

    El curso termina con una secci贸n sobre una de mis caracter铆sticas Pythonic favoritas, las comprensiones. Aqu铆 Nicolas demuestra c贸mo se utilizan las comprensiones y por qu茅 podr铆a utilizarlas al trabajar con listas y diccionarios.

    Temas para agregar que beneficiar铆an al curso

    Dado que el t铆tulo de este curso indica que su p煤blico objetivo est谩 orientado a los roles de desarrollador de Python de nivel medio a superior, creo que no hay suficiente contenido destinado a describir m谩s caracter铆sticas del lenguaje de nivel medio a avanzado. A continuaci贸n se muestra un conjunto de temas que creo que elevar铆an el curso para que se adapte mejor a su p煤blico objetivo.

    A. Se necesitan t茅cnicas de programaci贸n de Python m谩s idiom谩ticas. Un ejemplo de lo que quiero decir con esto es simplemente descomprimir tuplas y listas en elementos componentes. Veo que esto se demuestra a menudo en textos avanzados, as铆 como en blogs, y personalmente lo encuentro congruente con el conocido idioma de Python que expl铆cito es mejor que impl铆cito.

    Creo que un ejemplo de codificaci贸n demostrar铆a mejor mi argumento aqu铆. Considere el caso en el que tiene una lista de tuplas donde cada tupla representa la longitud y el ancho de un rect谩ngulo y le gustar铆a iterar sobre ellas para calcular y mostrar el 谩rea de cada una. Puedo pensar en dos variaciones en las que podr铆a implementar esto: (i) una usa la indexaci贸n de los elementos de la tupla, y (ii) la otra utiliza la descomposici贸n de la tupla en variables con nombres significativos.

    Usando indexaci贸n:

    >>> shapes = [(1,1), (2,2), (3,2)]
    >>> for shape in shapes:
    ...     print "Area of shape %.2f" % (shape[0] * shape[1])
    ... 
    Area of shape 1.00
    Area of shape 4.00
    Area of shape 6.00
    

    Usando desembalaje:

    >>> for width, height in shapes:
    ...     print "Area of shape %.2f" % (width * height)
    ... 
    Area of shape 1.00
    Area of shape 4.00
    Area of shape 6.00
    

    Para m铆, el segundo ejemplo que usa el desempaquetado es m谩s legible y demuestra una mayor implementaci贸n idiom谩tica de Python.

    SEGUNDO. Una discusi贸n sobre las funciones integradas de Python que realizan operaciones en colecciones ser铆a una gran adici贸n a este curso. Muchas de las funciones integradas se han proporcionado porque brindan soluciones a problemas de programaci贸n comunes, pero tienen implementaciones altamente optimizadas que a menudo brindan mejoras significativas en el rendimiento. Algunas de las funciones integradas que creo que valdr铆a la pena mencionar son C贸digo Postal, filtrary mapa.

    Por ejemplo, supongamos que desea filtrar una lista de n煤meros y seleccionar solo aquellos que son pares. Puedo pensar en dos enfoques comunes que se tomar铆an. Uno que usar铆a un ciclo para iterar sobre los elementos junto con un condicional para probar cada n煤mero para ver si es par o no y cu谩ndo incluso agregar el n煤mero a listas separadas designadas para los n煤meros pares. Es probable que este sea el enfoque adoptado por un desarrollador junior que est茅 menos familiarizado con el idioma. El segundo ser铆a utilizar el incorporado filter() funci贸n junto con una funci贸n lambda para probar n煤meros pares.

    En el c贸digo, estos dos enfoques se ver铆an as铆:

    Primer m茅todo:

    >>> nums = [1, 2, 3, 4, 5, 6, 7, 8]
    >>> even_nums = []
    >>> for num in nums:
    ...     if num % 2 == 0:
    ...             even_nums.append(num)
    ... 
    >>> even_nums
    [2, 4, 6, 8]
    

    Segundo m茅todo:

    >>> even_nums = filter(lambda num: num % 2 == 0, nums)
    >>> even_nums
    [2, 4, 6, 8]
    

    C. Otro tema que creo que ser铆a beneficioso agregar al contenido existente ser铆a la cobertura de algunos de los tipos de datos de recopilaci贸n avanzados, como tuplas con nombre y diccionarios ordenados. A menudo he buscado una tupla con nombre en los casos en los que quer铆a representar un objeto del mundo real, pero ser铆a quiz谩s inc贸modo o excesivo usar una clase personalizada o el diccionario demasiado usado. No solo son una excelente manera de organizar datos que representan algo en la palabra real, sino que tienen un rendimiento excelente, particularmente mejor que un diccionario.

    RE. Por 煤ltimo, pero ciertamente no menos importante, realmente me hubiera gustado que se mencionaran las diferencias entre Python 2 y 3. En particular, creo que habr铆a sido importante dar algunos consejos para migrar sistemas existentes de Python 2 a Python 3, que se est谩 convirtiendo r谩pidamente en un elemento prioritario para muchas empresas y que conduce a una mayor demanda de desarrolladores senior de Python.

     

    Etiquetas:

    Deja una respuesta

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