¿Alguna vez solicitó un trabajo de desarrollador de software donde no conocía el idioma?

¡En todos mis trabajos donde me contrataron!

Usemos una analogía: si puedes hablar puedes hablar en cualquier idioma. Lo mismo con la informática: si sabe programar , puede hacerlo en cualquier idioma.

Un lenguaje de programación (PL) es solo una herramienta que se utiliza para hacer el trabajo (es decir, satisfacer los requisitos). El mismo requisito se puede implementar a través de PHP, C #, Java, Scala, Haskell, Lisp, etc., la elección de PL depende de varios factores como la composición del equipo, la familiaridad, las herramientas / marcos existentes / de código abierto, la facilidad de mantenimiento, la facilidad de contratación personas para mantenimiento continuo, etc.

P: Entonces, ¿qué hace que los PL sean más fáciles de aprender que los idiomas humanos / hablados?

R: Gramática y sintaxis rigurosas, comprensión de la programación, prácticas de código limpio y principios de diseño de software.

  1. Gramática y sintaxis rigurosas:
    Literalmente, esto es aprender el idioma: cuáles son las palabras clave, cómo se declaran las funciones / métodos / variables, cómo se escriben bucles / condicionales, cómo se heredan / resumen (si es posible), etc., esto es lo que todos los Learn PL- Los libros X in 10 Days te enseñan.

    Es más fácil aprender PL que lenguajes humanos porque los PL siguen reglas bien definidas y estructuras sintácticas. Por ejemplo:

    a = 1
    int a = 1;
    $ a = 1
    if (a == 1) {…} más {…}

    No puede simplemente decir a => 1 si la sintaxis PL no permite => y tampoco puede cambiar cómo se escribe if/else . Básicamente, no se permite romper las reglas: el compilador puede quejarse o el sistema se romperá en tiempo de ejecución. Intente hacer esto con el idioma inglés y se sorprenderá de lo poco riguroso que es con tantos casos excepcionales que incluso puede doblar según sus caprichos y fantasías. Los PL tienen menos matices que los idiomas hablados. Entonces, si conoces uno, es fácil elegir el (los) otro (s). Es aún más fácil si sabes programar.

  2. Comprensión de la programación:
    Esto es como decir que entiende cómo comunicarse con la computadora, no importa si es a través de Assembly, C, Java o Lisp / Haskell. Usted comprende que la computación es una serie de pasos (o funciones si está funcionalmente conectado) que hacen lo que desea, para alcanzar el objetivo final.

    Ejemplo: hacer un sándwich PBJ : esto es simple para los humanos. Pero para decirle a la computadora que haga una virtual, debes ser explícito siguiendo las reglas del lenguaje :

    a. Pan a = getSliceOfBread ()
    segundo. Mantequilla pb = getPeanutButter ()
    C. BreadSliceWithStuff pbSlice = applyToOneSideOfBread (a, pb)
    re. Pan b = getSliceOfBread ()
    mi. Jelly j = getJelly ()
    F. BreadSliceWithStuff jellySlice = applyToOneSideOfBread (b, j)
    sol. Sandwich s = StickSlicesWithStuffTogether (pbSlice, jellySlice)

    Estos pasos ag, constituyen un programa. Puede dividir todos los pasos en un diagrama de flujo largo que muestra la lógica de hacer un emparedado. La capacidad de pensar en términos de pasos lógicos es lo que constituye la programación (hablando en términos generales). Si comprende eso, todo lo que necesita aprender es cómo expresar sus pasos en el PL que elija. Esta lógica puede no ser realmente precisa y puede provocar errores. Por lo tanto, la depuración es tan crucial como la programación. Más diría yo. Mucho mas.

  3. Prácticas de código limpio:
    El ejemplo anterior muestra que el código es fácil de leer y está bien resumido detrás de las funciones relevantes que hacen que el programa lea como la lógica que está tratando de implementar. Cada función hace una pequeña cosa y puede reutilizarse y probarse (por ejemplo, la función applyToOneSideOfBread(...) ). Estas cosas se transfieren de un PL a otro, sin tener en cuenta la sintaxis. La idea de dividir esto en componentes más pequeños y construir programas a partir de eso también es de lo que se trata la programación. Estos componentes podrían llamarse clases en OOP o funciones en Haskell / Lisp. Esta capacidad de escribir código limpio también es independiente de PL.
  4. Principios de diseño de software:
    Estos son principios de abstracción, estratificación, separación de preocupaciones, etc., son abstracciones de nivel superior que no tienen mucho que ver con la sintaxis PL; más bien, enfóquese en la organización y abstracción del código como un todo para que el código sea más fácil de mantener / evolucionar con el tiempo. Nuevamente, esto es mucho más valioso que aprender la sintaxis y la semántica PL.

A medida que va bajando la lista, más valioso será para la organización. Las compañías están bajando la lista, arriba, para encontrar el ingeniero general adecuado . Si todo lo que sabes es cómo programar , lo más probable es que seas un desarrollador junior. Escribir código realmente limpio? Ingeniero de nivel medio. SOLID comprensión de los principios de diseño de software? Mayor. Gran comprensión de la arquitectura de software? Principio / Personal. ¿Se pueden vincular las iniciativas de software con los objetivos comerciales? Camino a CTO. ¿Conocimiento profundo de ingeniería de software e ingeniería de personas? Ruta gerencial o gran ruta CXO quizás y así sucesivamente.

Entonces, sí, ¡solicitamos empleos donde no conocemos el PL, todo el tiempo!

Mi primer trabajo fue Java (aunque lo sabía, a la compañía no le importaba). Luego trabajé en Golang / Python y tampoco sabía nada al respecto. Luego C # .Net, a pesar de que no tenía idea de ellos y ahora PHP / Scala donde realmente no usé ninguno y nunca usé programación funcional. Sin embargo, creo que, sin embargo, me está yendo bastante bien en mi trabajo 😉

Ahora que tiene la lista anterior, le ayudará a comprender mejor por qué los PL no importan al solicitar trabajo y qué tan fácil es aprender idiomas, si comprende bien los conceptos .

Las personas que no entienden Informática (sí, C mayúscula, S mayúscula) equiparan “conocimiento de programación” con “alfabetización lingüística”. Si bien esto puede ser igual para los puestos de nivel de entrada, los desarrolladores con más de 5 años de experiencia no están vinculados a alguna lista de idiomas previamente conocida o incluso plataformas.

En 2009, hice un contrato de seis meses en C #, nunca había usado C # pero tenía una base sólida de conocimientos de programación de MFC y Win32, no fue un gran problema

En 2010, hice un contrato similar para una importante empresa de automóviles para trabajar en aplicaciones de teléfonos inteligentes en Objective-C y Java. No conocía Objective-C per se pero tenía años de experiencia en C ++ y aprendí lo suficiente como para escribir una aplicación en aproximadamente dos semanas usando un libro de texto.

En 2011, hice la transición a una compañía de big data, ya que nunca antes había usado Python. Aprendí los fundamentos de Python en 3 días y nunca miré hacia atrás.

¿Entiendes la idea o debería continuar?

Me contrataron en Microsoft como C ++, pero el equipo en el que estaba era dueño de C ++ y C #. En ese momento yo era competente en C y C ++, había jugado un poco con Java y apenas había oído hablar de C #.

Después de unos meses de centrarme en el lado C ++ de las cosas, mi gerente me pidió que hiciera algo de trabajo en C #. Me tomó algunas semanas orientarme antes de ser moderadamente productivo, pero también fue divertido (y todavía creo que es un lenguaje fantástico).

Mi siguiente trabajo fue en Java, que fue un cambio más fácil, pero aún así: nueva sintaxis, nuevo conjunto de herramientas, nueva biblioteca, etc. Nuevamente, hay un período de ajuste, pero no fue excesivo.

El resultado es que la programación es mucho más que escribir código sintácticamente válido en algún lenguaje. Se trata de resolver problemas. La mayoría de las habilidades relevantes se traducen muy bien entre los idiomas más comunes, especialmente los que en última instancia son muy similares, como los que estamos hablando.

Continúa y aplica. Si eres bueno, inteligente, efectivo y de mente abierta, un empleador inteligente te contratará, sabiendo muy bien que necesitarás algo de tiempo, quizás un mes o dos, para entrar en tu ritmo. En el gran esquema de las cosas, vale totalmente la pena para ellos.

Fui contratado por tres. Microsoft me reclutó para escribir sistemas distribuidos en C # que nunca antes había visto (SkyDrive ahora OneDrive), Amazon me consiguió para sistemas distribuidos en Java que vi una vez pero no admití en mi currículum (almacenamiento en caché, Dynamo, S3) y un un cliente de consultoría me consiguió para Java cuando aún no lo había tocado (su problema era que los programadores no estaban familiarizados con la complejidad computacional).

Los buenos ingenieros pueden ser productivos inmediatamente en nuevos idiomas, pero tardan más en escribir código idiomático.

Por el contrario, la ingeniería de software general y la experiencia de dominio tardan mucho más en desarrollarse. Me tomó 17 años pasar haciendo ajustes significativos en la forma en que construí productos basados ​​en el aprendizaje de proyectos anteriores, y he hablado con los CTO que sienten que los desarrolladores líderes necesitan más de 15 años de experiencia para madurar.

Muchas empresas lo tienen en cuenta al contratar y no se preocupan por los idiomas.

De todos modos, en productos no triviales, la complejidad del código propietario supera con creces las partes del lenguaje utilizado, por lo que la diferencia no afecta apreciablemente el tiempo de rotación, siempre que el desarrollador pueda hacer frente a los paradigmas involucrados: orientado a objetos, funcional, impulsado por eventos, multihilo, etc. Esto todavía es válido para lenguajes “complejos” como C ++.

¿Alguna vez solicitó un trabajo de desarrollador de software donde no conocía el idioma?

Mi historia no es exactamente la misma que otros podrían tener, por varias razones, pero creo que responde la pregunta.

Hay dos fases en mi historia. Mi primer trabajo en el desarrollo de software fue en IBM, en 1956. En ese momento, no conocía ningún lenguaje de programación, en gran parte porque realmente no había ningún otro idioma que no fuera el código de máquina. Entonces, pasé dos semanas en un armario aprendiendo mi primer lenguaje de computadora.

En realidad, eran tres idiomas a la vez: códigos de máquina para IBM 704 y 650, más el “idioma” cableado para IBM 607.

La segunda fase de mi historia tiene lugar algunos años después, cuando me convertí en consultor. En esa función, he ayudado a muchos, muchos clientes que usaban idiomas que no conocía, a pesar de que conocía bastantes para ese momento, incluidos LISP, Smalltalk, APL, PL / I, COBOL, FORTRAN, C, Pascal. , Simula, varios lenguajes de aplicaciones especiales locales y el código de máquina para IBM 7090, 1410, 705, STRETCH, PDP-1 de Dec y algunas otras máquinas. También había estudiado en forma de libro muchas otras máquinas mientras hacía análisis competitivos para IBM.

Pude ayudar a esos clientes en gran medida porque sus problemas rara vez tenían mucho que ver con los detalles de los idiomas elegidos. En cambio, eran problemas de personas de todo tipo. Los problemas que terminaron con una encarnación del lenguaje generalmente fueron fáciles de detectar utilizando mi conocimiento general de los lenguajes de computadora y los errores típicos que las personas cometieron al usarlos. Es por eso que siempre he insistido en que los desarrolladores profesionales deben saber al menos un puñado de lenguaje diferente.

Creo que aquí hay una analogía con el término “madurez matemática”, algo que podríamos llamar “madurez de programación”. Así es como Wikipedia define la madurez matemática:

La madurez matemática es un término informal utilizado por los matemáticos para referirse a una mezcla de experiencia matemática y perspicacia que no se puede enseñar directamente. En cambio, proviene de la exposición repetida a conceptos matemáticos. Es un indicador de la erudición del estudiante de matemáticas en estructuras y métodos matemáticos.

Podríamos usar fácilmente la mayoría de esas palabras para definir la “madurez de programación”, la capacidad que le permite a uno tener éxito en un trabajo de desarrollador utilizando un lenguaje en el que no tienen experiencia previa.

Comprensión del programador profesional

La honestidad es la mejor política, ¡siempre!

Por supuesto, aplique, pero sea honesto sobre sus antecedentes, pero también sobre su disposición a aprender y entrenar.

No soy competente en ninguno de C, C ++, C # o Java, pero sé que la habilidad de ‘Ingeniería de software’ es transferible. Si eres un buen ingeniero de software, aprenderás la sintaxis, la simmática y las bibliotecas asociadas de C # / Java con relativa rapidez.

Las dos habilidades más importantes (en mi opinión) en cualquier campo son la actitud y la aptitud. ¡Exponga esos, y cualquier compañía de software decente lo atrapará!

Sí, el trabajo que tengo ahora.

El propietario que acababa de conocer dijo que el empleador de su compañero estaba buscando personal nuevo en su empresa de desarrollo de software / web. Este compañero era el secretario que no sabe nada de programación. Ella me preguntó si me gustaría unirme. Estaba aprensivo y expresé claramente mi posición, diciendo que realmente estaba buscando algún tipo de puesto de pasantía o algo así porque no tenía experiencia en absoluto.

“No hay problema.”

En la entrevista me preguntaron qué sé. Les dije C #, C ++ básico, y les mostré algunos proyectos que había hecho. Todas las cosas de novato, seguro.

“Ah, bueno, tendrás que aprender sobre HTML, CSS, javascript, jquery, programación MVC, EF, ADO.NET, AJAX y SQL”.

“Bueno, claro, pero sinceramente, no sé nada de nada de eso “.

“Está bien, puedes aprender”.

¡4 semanas después y mis conocimientos de HTML, CSS, javascript, jquery, MVC, EF, ADO.NET, AJAX y SQL están llegando muy bien!

Al final es básicamente una pasantía / pasantía (y me siento muy afortunado de haber tropezado), pero sí, de hecho, obtuve el puesto sin conocer los idiomas relevantes de antemano. Es cierto lo que dicen: una vez que dominas los conceptos de programación, realmente no es un gran problema moverse y hacer cosas en un nuevo lenguaje.

Solicité un trabajo que requería trabajar en una base de código en PHP usando el marco Zend. No conocía ni PHP ni Zend. Un buen programador profesional puede aprender un idioma lo suficientemente bien como para escribir código de funcionamiento en tres semanas. Ahora, “funcionamiento” es muy diferente de “bueno”, “mantenible” y “comprensible”. Esos tres atributos tardarán meses en alcanzarse, pero esta es la marca de un buen programador. Los idiomas son solo herramientas, al igual que el martillo y el avión: están diseñados para ser buenos en la realización de tareas particulares, y cualquier artesano decente aprenderá a usarlos y en qué tareas se destacan.

Me ofrecieron, aceptaron y todavía tengo este trabajo.

Sí. Una startup para la que trabajé una vez desarrolló y mantuvo modelos matemáticos de mercados de electricidad y la mayoría de su código ya estaba escrito en un lenguaje propietario y muy antiguo que nadie, excepto los economistas, realmente usa. Para hacerlo más extremo, me contrataron a pesar de que no tenía conocimientos de programación en ese momento. Tuve que aprender en el trabajo.

De manera más general, se espera que los programadores aprendan las herramientas necesarias para sus trabajos. No contratarías a un mecánico que solo pudiera usar una llave inglesa, pero no un martillo o un destornillador o cualquier otra herramienta, ¿verdad?

Completamente desconocido – no.

Un poco familiar a través del autoestudio, sí, más de una vez y con éxito.

Ser desarrollador de Java es más que solo escribir código Java. Debe estar familiarizado con todo el ecosistema.

Si fuera usted, comenzaría a aprender un idioma que está ganando popularidad, pero aún no ha recibido una amplia adopción. Scala y Go vienen a la mente. Cuando es difícil encontrar personas experimentadas con una tecnología en particular, a veces las empresas contratan sin experiencia previa y la enseñan en el trabajo.

Fui contratado para un trabajo como desarrollador nativo de reacción con solo unos pocos días de conocimiento sobre React.

Me hicieron construir una aplicación de clima simple completamente en React-Native en un máximo de tres semanas, para lo cual la construí dos.

Después de saber lo suficiente sobre los lenguajes de programación, aprender otra biblioteca o sintaxis solo lleva unos días. Creo que es la misma sensación que sienten las personas que conocen múltiples idiomas verbales: cuando conoces más de uno, aprender otro es mucho más fácil.

Mientras estaba en la escuela, me contrataron para ser TA en la clase de programación de introducción. Esencialmente estaría asistiendo a la enseñanza de Java. En ese momento, Java tenía solo unos pocos años y no tenía experiencia en Java. Creo que funcionó bien.

Mi primer trabajo fuera de la universidad me contrataron como desarrollador de C ++, pero rápidamente me instalé en la programación en XSLT, un lenguaje que ni siquiera había escuchado antes de ese trabajo.

Otro trabajo que no fui contratado con ningún lenguaje en particular en mente, aunque pensaron que harían algunas cosas en Python (un idioma que aún no había aprendido). Terminamos trabajando un año en Java antes de que la empresa volviera a girar. En un momento tuve la tarea de hacer un trabajo PHP (otro lenguaje que nunca había usado). Fui una de las personas que estuvo de acuerdo en que deberíamos cambiar a C # (y VB.NET por algún código heredado), a pesar de que (lo adivinó) no tenía experiencia en ningún lenguaje .NET.

¡Ciertamente, ya que el dominio del lenguaje y el dominio de la programación son dos cosas muy diferentes!

Después de la universidad, solicité un puesto que estaría principalmente en JavaScript, que nunca había tocado (y lo sabían).

Utilicé C ++ durante la entrevista (que era mucho más sobre algoritmos y enfoque que la sintaxis), y recibí una oferta.

Ingenieros de software que no dependen de ningún idioma. Si solicita un trabajo donde no conoce el idioma, no importa. Conoces el enfoque orientado a objetos (OO). Si lo sabes …

Las ideas clave del enfoque orientado a objetos son:

  • Objetos
  • Encapsulamiento
  • Clase y herencia
  • Instancias e Instancias
  • Métodos y mensajes

entonces puedes aprender o entender cualquier otro idioma fácilmente.

El entrevistador sabe qué tipo de persona necesita si lo nombra, lo que significa que usted cumple con los requisitos de su empresa.

Una vez que me propusieron trabajo en C # solo porque tengo buenas habilidades de Haskell. La necesidad de alguien bueno en el desarrollo de algoritmos, el aprendizaje de C # se consideraba un problema.

Pero la verdad es que no tuve mucha competencia. Si tienen acceso a más desarrolladores de C #, definitivamente podrán encontrar a alguien bueno en C # y algoritmos.

Para usted, es mejor aprender C # / Java, al menos teóricamente, y luego buscar un trabajo donde su experiencia previa sea importante. Puede ser la traducción del código de C ++ a C # o algún conocimiento en el área de aplicación.

Personalmente prefiero C ++: para mí, el lenguaje no es un problema, pero define áreas de aplicación. C ++ es lo mejor para mí, ya que se trata de desarrollar código de bajo nivel y altamente optimizado. C # / Java son aburridos, ya que se trata más de grandes aplicaciones corporativas.

Solicité una vez para un trabajo de VB.net, aunque no tenía experiencia en VB (principalmente C #), y obtuve el trabajo, pero el lugar al que postulé tenía personas que me conocían y mi nivel de experiencia, por lo que no es la misma situación como el tuyo.
Sugeriría aprender / escribir código de muestra antes de aplicar. Si bien puede obtener los conceptos de C # o Java en un día de estudio intenso, muchos lugares no lo considerarán mirando su currículum si no se cumple la experiencia necesaria. Por otro lado, los trabajos de nivel de entrada o aquellos que requieren 1-2 años de experiencia pueden considerarlo.

Sí, mi primer trabajo de programación profesional …

Fue para un programador AppleScript, no conocía AppleScript.

Sin embargo, afortunadamente, fui entrevistado por otros programadores, que entendieron que no era un gran problema, y ​​que respondí bastante rápido, lo cual hice.

Sí. En 2005 había estado escribiendo en Java durante 5 años. La compañía que estaba entrevistando tenía un viejo sitio web asp escrito con vb.net. Les dije en la entrevista que estaríamos de acuerdo si nos contrataban. Y ellos hicieron justamente eso. Construimos un nuevo sitio web en c # y asp. net (no necesita la url) en 2006.

Los fundamentos de la programación son generalmente más importantes que el lenguaje.

Sí, lo hice. Y me sucede dos veces que era un desarrollador junior y la compañía está buscando a alguien que esté interesado en el objetivo J (marco de capuchino, está bien si no sabes lo que es). Ya que era junior y no tengo nada para perder y querer tener más experiencia, así que tomé la oferta y la aprendí en el trabajo.

Otro está trabajando para una startup. En ese momento, ya tengo una gran experiencia en Java, pero quieren a alguien que pueda hacer Ruby. Les expliqué y están contentos de que lo haya aprendido en el trabajo, así que terminé tomando la oferta también.

Si varias veces.

No importaba.

Los idiomas son como los autos.

Lo que cuenta es saber conducir.

Jacques de Hooge

http://www.transcrypt.org