¿Cómo saber si una empresa sigue las mejores prácticas en desarrollo? [duplicar]

He estado en Stack Overflow y Code Review durante algún tiempo y admiro a las personas que ayudan allí y brindan revisiones de código increíbles. Yo mismo tengo también un poco de experiencia. Desafortunadamente, conocer y trabajar con personas así en la vida real es casi imposible.

Todas y cada una de las empresas para las que trabajé (aproximadamente 8-12 hasta ahora, también como contratista) eran tan poco profesionales que me pregunto cómo funcionan todavía. La gente allí no tenía idea de los conceptos más básicos. En todas partes cadenas mágicas, espacios de nombres llamados Clases, clases con varias responsabilidades, todo lo que puedes hacer mal lo lograron de esta manera.

Lo que es peor, no se esforzaron por mejorar. Necesitaban una gran cantidad de tiempo para implementar los cambios más simples porque su código era muy malo.

Decidí intentar encontrar un nuevo trabajo donde pueda trabajar con verdaderos profesionales, así que creé esta nueva cuenta para hacer esta pregunta (porque uso la otra para los CV).

La pregunta es: ¿Cómo saber si los empleados de una empresa son buenos en lo que hacen?

¿Diría que es una buena idea pedir una muestra de su código? Si quieren comprobar lo que puedo, también me gustaría ver si merecen mi tiempo. No quiero perder casi todo mi tiempo en el trabajo depurando un código antiguo donde cada variable es tmp1, str1, lst3 a tmp23.

No quiero ser solo un codificador, sino un ingeniero y crear software que sea robusto y extensible debido a su diseño y no por intentar/atrapar en todas partes y cientos de ifs para corregir algunos errores estúpidos o cientos de líneas de código dentro de un controlador de eventos.

Probé Linkedin y Xing, pero cerré ambas cuentas después de notar que la mayoría de las personas solo tienen confirmaciones falsas sobre sus habilidades.

¿Qué debo hacer no solo para ser entrevistado sino también para entrevistar a la posible empresa? ¿Tienes alguna experiencia con eso y podrías darme algún consejo?

¿Debo pedir un trabajo de prueba?

¿Debo llevar mis propias preguntas a la entrevista?

Pregunta muy relacionada, ¿quizás incluso un duplicado? lugar de trabajo.stackexchange.com/q/4259/2322
"¿Debería traer mis propias preguntas a la entrevista?" - Sí, independientemente del puesto.
Consulta el recurso laboral de Stack Overflow: careers.stackoverflow.com/jobs
Definitivamente pida muestras de código. Esta sería una buena manera de juzgar la calidad de su trabajo y quizás incluso darte una idea de su nivel de profesionalismo.
@DavidK: incluso si la pregunta no es la misma; la respuesta definitivamente es lo que está buscando el OP.
Sí hay empresas con prácticas de código profesional, son selectivas y tienden a mantener a los empleados. En lo que respecta a los profesionales, su pregunta es más diatriba que pregunta.
Pregunte por su puntuación en la prueba de Joel www.joelonsoftware.com/articles/fog0000000043.html
"Mejores prácticas" es en sí mismo un término obstinado. Por lo general, cuando alguien acusa a otros de no ser profesionales, ambos lados se sienten culpables. Esta pregunta es más una queja que una solicitud de ayuda para navegar cualquier cosa.
@eckes Una vez traté de entrevistarme con una empresa que figuraba en Careers.SE y cumplía con todas las métricas de Joel. La entrevista nunca sucedió porque su servicio de correo electrónico que se suponía que me enviaría el problema del código falló, y nadie se molestó en verificarlo o responder a mis correos electrónicos durante 4 horas. Una buena puntuación de Joel está bien, pero no dice todo lo que le gustaría saber sobre una empresa.

Respuestas (8)

No es una cuestión de sacar el tema en la entrevista o pedir trabajo de prueba, es mucho antes de eso: debes hacer tu tarea antes de postularte para un determinado puesto/empresa y entender si ofrece lo que estás buscando.

Usted ha declarado que es un contratista. Es probable que lo contrataran para solucionar problemas o crear soluciones para empresas que no son de TI (empresas cuyo negocio principal no está relacionado con TI).

Para mí, está claro que si solicita, por ejemplo, una empresa minorista, encontrará un departamento de TI interno en el mejor de los casos con un conocimiento limitado sobre sus habilidades. Mantendrán personal para realizar el mantenimiento básico de los sistemas que tienen y, para proyectos más grandes, probablemente lo subcontratarán.

En su lugar, solicitaría una empresa de consultoría de TI (las empresas de consultoría le exigirán más, pero normalmente trabajará con profesionales muy capacitados y llevados al límite) o una casa de software con una presencia relativamente grande en el mercado. Sin mencionar a las grandes tecnológicas como Google o Microsoft, para las que nunca he trabajado, pero supongo que su personal debe estar cerca de los mejores disponibles.

Buena suerte

En primer lugar, buena suerte para que le den el código de producción a un candidato.

Tengo una sugerencia que te puede gustar o no. Tal vez debería intentar solicitar una puesta en marcha. Si la empresa no tiene productos existentes y usted es parte de un equipo muy pequeño, puede dar forma a las prácticas de codificación y, con suerte, crecer con la empresa, es decir, tener información sobre sus decisiones de contratación.

Como sugiere @User012876768, la alternativa es postularse para las empresas de TI de Marquee, ya que a menudo tendrán su selección de graduados. Nunca he trabajado para una empresa como esa, pero te imaginas que tienen estándares de codificación bastante estrictos.

No siempre es un hecho. Cualquier organización grande proporcionará muchos lugares para que los malos programadores pasen el rato. Las pequeñas empresas emergentes son un buen punto, es mucho menos probable que tengan malos hábitos y es mucho más probable que puedas influir en ellas.

Aquí está la cosa: las entrevistas van en ambos sentidos. Así que asegúrate de hacerles preguntas para que te convenzan de su competencia. Por ejemplo, pregúnteles qué herramientas usan, qué estándares de código tienen, cuál es su proceso, cómo aseguran la calidad del código, qué piensan sobre su base de código, incluso en qué creen que su empresa puede trabajar, qué hacen. para tratar de identificar y solucionar problemas, y en qué es buena su empresa. Cuando realice entrevistas técnicas, utilícelas como una oportunidad para iniciar un diálogo bidireccional y también piense si su entrevistador parece saber de lo que está hablando.

Utilice esta técnica y funcionará para usted, ya que lo hará parecer un buen candidato, Y también obtendrá una idea de la calidad de la empresa.

Con prácticamente todas las empresas, no podrá ver el código privado antes de ser contratado. Lo que puede intentar hacer es encontrar personas que trabajaron allí anteriormente y ver si están dispuestas a comentar sobre el estado de las cosas.

Si desea ver cantidades significativas de un código de empresas antes de ser contratado, tendrá que ser selectivo en qué tipos de empresas solicita. Para la mayoría de los campos de desarrollo de software, estará limitado a las empresas que realizan una gran cantidad de trabajo de código abierto y son las más fáciles de hacer: averigüe en qué proyectos trabajan, observe qué está comprometiendo su gente con los repositorios públicos y vea qué están abogando en listas de discusión/etc. La única excepción parcial importante son las empresas que realizan desarrollo web de cara al público; en esos casos, puede ver el aspecto del lado del cliente de la mitad de sus sitios, aunque el backend seguirá siendo en gran medida una caja negra.

¿Qué debo hacer no solo para ser entrevistado sino también para entrevistar a la posible empresa? ¿Tienes alguna experiencia con eso y podrías darme algún consejo?

La mejor manera de aprender cómo funciona realmente la empresa/departamento es hablar con alguien que realmente trabaje allí.

Si tiene a alguien en su red con conocimiento interno de la empresa y sus prácticas de desarrollo, hable con ellos.

Si no, durante sus entrevistas trate de hablar con alguien que sea uno de sus compañeros en la empresa. Cuando soy el gerente de contratación, me aseguro de incluir a un compañero como parte del proceso de entrevista. Cuando soy el candidato, pido hablar con uno de los compañeros de la posición abierta.

Durante esta discusión, puede preguntar sobre la empresa, el gerente y todos los procesos en uso.

No se limite a preguntar "¿Sigue las mejores prácticas?" porque "mejor" es muy contextual. En su lugar, pregunte sobre los detalles que le interesen.

¿Debo pedir un trabajo de prueba?

Tú podrías. Algunas empresas tienen la costumbre de contratar personas durante un período de prueba inicial y agradecerían esa oferta.

¿Debo llevar mis propias preguntas a la entrevista?

Siempre traiga sus propias preguntas.

Eso no solo garantizará que obtenga las respuestas a los elementos que necesita saber, sino que también demostrará su interés en la empresa, el trabajo y su carrera. Todas esas son buenas señales para los gerentes de contratación.

Pida opiniones de sus compañeros, profesores y mentores orientados a la tecnología sobre la reputación de cualquier empresa que esté considerando, junto con sugerencias de otros lugares que debería considerar.

Hago hincapié en "orientado a la tecnología" porque una gran cultura para los vendedores o clientes de una empresa podría no traducirse en lo mismo para sus ingenieros.

Una fuente ideal de información sería un hackathon, donde puede trabajar directamente con tecnología y otras personas dentro de la empresa.

Otra fuente de información son las valoraciones de los clientes/las quejas sobre el servicio: si los productos apestan y el servicio es terrible, es poco probable que sea un gran lugar para trabajar, especialmente si se trata de una empresa de tecnología.

En este sentido, si es posible, conviértase en usuario de los productos y servicios de la empresa. Esto proporcionará una perspectiva excelente.

Por último, sí, tenga preguntas para su(s) entrevistador(es), pero asegúrese de que no sean preguntas simples que ya hayan sido respondidas en su sitio web o en otro lugar. Preguntar "¿Cuántos empleados tiene?" lo hace parecer flojo y desprevenido. ¡Buena suerte!

Claro ;-) No preguntaría nada obvio o algo que uno pueda buscar en Google. Definitivamente serían preguntas muy específicas para ver qué tan profundo es su conocimiento. Realmente no me gustan las situaciones en las que necesito explicar cómo hice algo de una manera particular (no lógicamente sino técnicamente (era algo realmente básico))... o incluso algunas personas me pidieron que preferiría no usar algo porque no lo entienden.

Las empresas pueden ser grandes lugares. Un grupo o división puede tener prácticas completamente diferentes a las de otro.

No me preocuparía demasiado por lo que hacen otras personas en la empresa. Por lo general, cada programador trabaja en sus propias cosas. En 25 años de programación, nunca alguien se metió con mi código en un nivel significativo. Cuando las personas se apoderan del código de otras personas, encuentro que siempre lo reescriben por completo.

En cuanto a depurar el código de otras personas, eso es inevitable. Cuanto más junior y menos productivo seas, más trabajo de limpieza y chatarra obtendrás. Si es muy productivo, dedicará muy poco tiempo a la codificación de segunda mano. No hay nada más molesto que un programador junior de 3000 líneas al año quejándose del estilo del código base. Una vez, una empresa en la que estaba contrató a un contratista de habilidades débiles que fue asignado para trabajar en algunos componentes que eran una pequeña fracción de mi producción y se quejó de mi código "espagueti". Por supuesto, Mr. Beautiful Code en realidad no escribió mucho código hermoso y, en consecuencia, fue despedido después de unas pocas semanas.

Personalmente, nunca tengo problemas con el código de otras personas. No me importa lo malo que sea, o qué idioma sea, o cuál sea su estilo. Soy un maestro programador, así que puedo manejarlo y no me molesta en absoluto.

Una vez quise jugar al tenis con alguien y se negaron, diciendo: "Lo siento, no juego con malos tenistas porque eso arruina mi juego". Esa es la marca de un aficionado total. Si crees que jugar con un novato "perjudicará tu juego", tienes un largo camino por recorrer para llegar a la clase magistral.

Si desea saber cómo es un buen código, consulte Google Code Jam. Las presentaciones de los mejores chicos allí me sorprenden por completo. Soy un muy buen programador, pero ver esas cosas es como ver a un gran maestro jugar al ajedrez, simplemente increíble. Olvídense de las tonterías de OO que dicen sus profesores, no valen nada; deja que los chicos de Code Jam sean tus modelos, porque son dioses. Aprenderás MUCHO más leyendo su código que con un manual de diseño tonto.

Mi experiencia ha sido más bien la contraria, tengo que modificar mucho el código escrito por otros y otras personas también tienen que modificar mucho mi código. Cuando las personas dejan una empresa, se van de vacaciones o simplemente no están disponibles en ese momento, su antiguo código aún debe mantenerse/ampliarse.

Nadie está 100% de acuerdo con las mejores prácticas, especialmente porque las recomendaciones siguen cambiando.

Nadie implementa al 100% las mejores prácticas, por razones que van desde el historial del proyecto hasta las necesidades del negocio y el costo inicial de adoptarlas.

Y 100% no importa. Si eres bueno en tu oficio, puedes adaptarte al entorno que tienen, aprender cuáles son las limitaciones y luego trabajar con ellos para introducir mejoras donde tengan sentido.

Un buen trabajador puede hacer un buen trabajo incluso si las herramientas no son las mejores ni las más modernas. Y eso incluye herramientas cognitivas y de proceso, así como las más comúnmente reconocidas como herramientas.

Eso no pretende defender las herramientas antiguas... solo defender a sus usuarios, y sugerir que establecer este requisito en particular puede hacer que rechace algunas muy buenas oportunidades.

Eso es cierto, nadie es 100% perfecto pero prefiero y busco trabajar en un ambiente donde las cosas son casi un 90% perfectas que en uno que apenas llega al 5%.
Le irá excepcionalmente bien si alcanzan el 50% de manera confiable, a menos que opte por una startup que no tenga un código anterior que mantener y que esté de acuerdo con su idea particular de cuáles son las mejores prácticas y su prioridad relativa. Si es tan crítico para usted, no lo discutiré, pero creo que se está convenciendo de algunos buenos trabajos y, a menos que tenga una buena reserva de efectivo, puede ponerse en la posición de eventualmente tener que conformarse con algo peor. que los que dejaste pasar. Tu llamada; si ese es tu sine qua non, adelante