¿Qué hace que un programador sea mejor que otro? ¿No son todos iguales?

No, todos los codificadores no son iguales. Algunas cosas que he aprendido que creo que son útiles:

  • ¿Entiende cómo su sistema resuelve problemas y su negocio gana dinero? ¿Has dedicado tiempo a eso? Si no, simplemente no estás en la clase de buenos desarrolladores en tu negocio. Debe comprender cómo su código crea valor y, por lo tanto, cómo su trabajo genera dinero para la empresa.
  • Comprender las solicitudes de funciones y los usuarios. ¿Actúa como un camarero en un restaurante simplemente tomando pedidos o combina las solicitudes de funciones de manera coherente para que todos los usuarios puedan obtener valor de una solicitud?
  • No escribas el código más genial. Escribe un código que sea comprensible. Podría ser atropellado por un autobús y alguien más tendrá que hacerse cargo de su código.
  • No incluya muchas bibliotecas en su código. ¿Por qué? No todos tienen el mismo deseo por esa linda biblioteca js que solo tiene 9 descargas que tú. Mantenga las bibliotecas externas al mínimo.
  • Cuando use una biblioteca externa, use las populares, no use la quinta biblioteca más popular de una clase. A los programadores les gusta usar cosas geniales que otros no están usando. Si necesita la funcionalidad de jQuery, use jQuery, no use la cuarta herramienta más popular para la manipulación de dom html.
  • Comprender cómo funciona un sistema en conjunto. Por ejemplo, no me importa que los ORM oculten una base de datos para que no tenga que entenderla. Aprenda sobre bases de datos y sobre cosas como índices, procedimientos almacenados, claves, funciones, seguridad y demás. Si no conoce las bases de datos, no es el mejor desarrollador del mundo en el que trabajo.
  • Comprender los cuellos de botella y comprender cómo superarlos.
  • No cedas ante las creencias ampliamente difundidas. “Windows no escalará”, “Las bases de datos relacionales no escalarán”, <>. La realidad a menudo es diferente de algo que se repite sin datos para respaldar la declaración.
  • Barco, barco, barco. Escriba el código y póngalo en manos de otra persona. ¿Lo entienden? ¿Resuelve un problema? ¿Puede esta persona realmente usarlo?
  • No culpes a la tecnología cuando algo sale mal. El problema probablemente sea el código que se escribió. Busque mejores formas de hacer las cosas. Hay más de una forma de pelar un gato.
  • ¿Pueden empatizar con el usuario? Es posible que tenga una lista de cosas que hacer, pero ¿son realmente lo que quiere el usuario? Lo más probable es que una lista de requisitos sea solo un punto de partida para las discusiones, especialmente con las startups. ¿Puedes enfatizar con los usuarios y resolver el problema de negocios frente a ti / ellos? ¿Se puede hacer que los usuarios sean más productivos?

Estas son las cosas que encuentro que hacen que algunos desarrolladores sean mejores que otros. El problema es que no descubres estas cosas hasta que estás en un proyecto. Estoy seguro de que hay otras cosas que hacen que algunos desarrolladores sean mejores que otros. Estas son solo las fallas generales que he visto.

************************************************** **************

Es cierto que esta es una historia bastante cruda. Pido disculpas por ello. Escuché a alguien decir una vez: “Los programadores son como prostitutas, todos hacen lo mismo, paguen un poco, paguen mucho, obtienen lo mismo pase lo que pase”. Respondí con “Tomas $ 50 y vas a la calle XYZ esta noche. Tomaré $ 500 y compararemos las notas en la mañana para ver quién la pasó mejor”.

Otra analogía que he escuchado es “No hay cosas como los malos privados, solo los malos generales”. Claramente hay una diferencia entre las personas.

El punto de la historia no son las declaraciones argumentativas de ida y vuelta ni las analogías. El punto es que hay una diferencia entre las personas que trabajan. No es diferente con los desarrolladores. Desea personas que puedan tomar un problema y resolverlo de manera positiva, no personas a las que tenga que ayudar en todos los niveles y vigilar.

No, no todos podemos ser iguales. Incluso entre los codificadores muy hábiles y prolíficos no hay iguales. Por eso trabajamos en equipo. En mi equipo aporto un cierto conjunto de habilidades y conocimientos que otras personas de mi equipo no tienen, a su vez tienen competencia en ciertas habilidades que yo no tengo.

Si bien puedo hacer lo mismo que ellos, no puedo hacerlo tan bien como ellos. Si bien pueden hacer lo mismo que yo, no pueden hacerlo tan bien como yo. Existe tal disparidad entre los expertos en diversas áreas que a menudo me sorprende que las personas con las que trabajo puedan hacer lo que hacen, y a menudo expresan sorpresa por las cosas que yo también hago.

Lo que lo convierte en un programador generalmente mejor no es ser mejor en la codificación, porque honestamente, en algún momento, desea reinar en el tipo de código que escribe de todos modos. Está escribiendo un código comunal que la persona más débil de su equipo necesita comprender, no está tratando de demostrar que puede manejar sistemas increíblemente esotéricos con destreza (de hecho, aunque poder manejar un estado mental complejo es una habilidad importante, es una habilidad más importante aprender a no hacerlo cuando no es necesario, algo que los hackers recién post-larvales todavía tienen que aprender). No, lo que lo convierte en un mejor programador en general es hacer cosas. Cuando aprendes algo, probablemente fue algo que encontraste interesante, impleméntalo. Hazte muy bueno implementando cosas.

Porque nuestro trabajo es resolver problemas y hacer las cosas. No debe ser llamativo para otros programadores. Los mejores programadores son los que hacen la mayoría de las cosas, con una calidad aceptable.

Algunas de estas son buenas respuestas, pero por lo que acabo de leer, todas pierden el punto principal que nos distingue (incluido yo mismo) del resto …

INSIGHT, puedes enseñarle a un mono cómo escribir código, y a un codificador promedio para ser un programador justo. Pero, es una visión lo que realmente nos distingue, y no estoy seguro de que realmente puedas enseñar eso desde una escuela porque es más una disciplina.

Por perspicacia me refiero a estar un paso por delante del usuario final, previniendo e implementando medidas que tengan en cuenta la posibilidad de escalar, manejar errores y ajustar código en general para permitir características que no siempre son evidentes durante la fase inicial de planificación .

Tengo un dicho favorito: “El pasado es pasado y no se puede cambiar. Mientras que el futuro está determinado por las acciones tomadas en el presente”.

En otras palabras, me he entrenado para vivir en el futuro dentro de mi cabeza. Cuando escribo el código, estoy en el futuro, escribiendo un camino para llegar a donde ya estoy.

La analogía puede parecer un poco extraña para algunos, pero créanme que la habilidad es la piedra angular no solo de grandes programadores sino también de grandes personas que se destacan en otros campos.

Los otros rasgos de personalidad más buscados …

La ética laboral, la honestidad, el compromiso, el entusiasmo, la devoción juegan un papel importante, pero no leí ninguna respuesta que aborde la calidad / habilidad definitoria anterior, que es vital para un gran avance en cualquier campo.

El rasgo común de los mejores programadores y desarrolladores es que son perezosos y hambrientos al mismo tiempo. Quieren seguir adelante con su trabajo. Pero al mismo tiempo quieren minimizar el esfuerzo a medida que lo hacen.

En mi experiencia profesional, los peores programadores son los tipos de conciencia que llegan a la oficina todos los días a las 9 y tratan de trabajar 8 horas al día. Se adaptan lentamente a las nuevas ideas y tecnologías porque están más acostumbrados a su forma de hacer las cosas.

La productividad de la mayoría de los buenos programadores es como una curva sinusoidal. Cuando generen una buena idea, se volverán locos y trabajarán más. Los otros días cuando solo están trabajando y soldando se cae. A veces lo contrario también puede suceder.

La publicación de Wallace B. McClure resume el resto de los rasgos.

No. Puedes saber quién es un mejor programador con solo leer el código.

Le llevará mucho menos esfuerzo agregar una nueva característica al código que esté bien escrito.

EDITAR: Después de reflexionar un poco más sobre esta pregunta, aquí hay una actualización:

Hay 2 tipos de programadores.

1. Proactivo.
2. Reactivo.

# 1 prestará atención a los detalles más finos, tratará de cubrir todos los casos, probará bien el código escrito.

# 2 hará el trabajo como se le solicite.

El # 1 es obviamente un programador más superior y del tipo que desea en su equipo.

Habilidad natural (difícil de superar a menos que lo natural no lo intente en absoluto) y exposición a las cosas correctas mediante la escritura / lectura de códigos, experiencia, capacitación, compañeros, etc.

OMI no hay cierta igualdad en términos de profesión. A alguien se le paga más bajo o más alto, mejor vida, promoción y valoración diferente. Incluyendo un programador. Lo que los hace mejores es una pregunta complicada, pero desde mi punto de vista, es una experiencia. La experiencia en sí contiene muchos aspectos, como las horas de trabajo acumuladas, la dificultad que enfrentan, las habilidades técnicas, los softwares implementados y su calidad y muchos más.

Muchos programadores se declaran mejor a sí mismos o en base a sus habilidades. En mi caso, algunos graduados nuevos, por ejemplo, tienden a quejarse de cómo se escribe el código de ejecución del producto en la empresa. Esto es parcialmente correcto, pero escribir un código sofisticado no es un objetivo real para la creación de software.

Los codificadores pueden ser iguales pero generalmente no lo son. A veces se trata de su habilidad con un lenguaje o sistema en particular, en otras ocasiones hasta qué tan bien entienden el problema, la mejor manera de abordarlo y resolverlo de manera más eficiente de manera oportuna (por ejemplo, cuando el jefe dice “un una buena solución hoy es mejor que la mejor solución la próxima semana “) para cumplir con todos los requisitos del sistema, etc.

Los equipos donde los dos tipos se unen y pueden trabajar en colaboración sin problemas de ego o desacuerdos destructivos tienden a hacerlo extremadamente bien.
He tenido la suerte de haber trabajado en varios de estos equipos. Hace que quieras volver corriendo al trabajo todos los días y hacer que tu contribución cuente, en el buen sentido. No muchos lugares ofrecen ese tipo de ambiente, pero si lo encuentra, lo sabrá.

¿Qué es mejor?

Definamos mejor en este contexto como generalmente ser más rápido, crear un código más flexible y robusto que haga el trabajo y requerirá menos trabajo adaptarlo o reutilizarlo en el futuro, trabajar bien con un equipo y seguir buenas metodologías de ingeniería de software, pero no con el fin de retrasar un proyecto (por ejemplo, no es necesario tener un UML para todo antes de escribirlo).

Esa es una definición aproximada, pero lo suficientemente buena para este contexto. Tal vez arrojar algo sobre algoritmos en la parte superior.

Algunas personas serán mejores en esos elementos. Algunos apenas podrán codificar porque no saben mucho. Otros sabrán mucho pero pueden no haber inculcado los hábitos correctos, o no en el mismo grado. Es posible que otros nunca puedan alcanzar la misma velocidad, como lo inhibe solo su capacidad cognitiva (aunque incluso aquí la aplicación correcta de las herramientas adecuadas y la creación de bibliotecas pueden hacer que sean significativamente superiores al promedio). Algunos pueden ser pollas antisociales que no funcionan bien con las personas (aunque puede considerar o no el trabajo en equipo como parte de la definición de bien).

La gente caerá en diferentes áreas en los espectros. Puedo ver áreas donde puedo mejorar.

Algunas personas simplemente no comprenden los conceptos tan rápido, no solo en el aprendizaje, sino que al trabajar en un proyecto, es posible que no puedan ver las mejores arquitecturas de inmediato. Algo de esto puede mitigarse con más experiencia y práctica, otros no.

No creo que sea una idea particularmente sorprendente que algunos sean mejores que otros. Algunas personas son mejores velocistas o maratonistas. Algunos son mejores cantando. Algunos son mejores en los negocios. Esta es solo otra área (si es compleja, sin un espectro único, muy parecido al canto) donde las personas tienen diferentes niveles de habilidad.

Aquí hay un enlace a un artículo que considera los diversos mitos sobre programadores altamente efectivos versus programadores “promedio”. [Tres mitos sobre la efectividad del desarrollador].
Generalizando, yo diría: –

Un mal programador puede hacer un programa con 1000 líneas que es difícil de mantener con 100 errores y nunca resolverlos todos.
Un buen programador puede crear un programa bien documentado con 300 líneas que sea fácil de mantener con 2 o 3 errores y resolverlos muy rápidamente.

Programador 1:

if (algo_es_verdadero) {
// Hacer cosas
regresar algunos_datos
}
más{
// Haz otras cosas
regresar algunos_otros_datos
}

Programador 2:

if (algo_es_verdadero) {
// Hacer cosas
regresar algunos_datos
}
// Haz otras cosas
regresar algunos_otros_datos

No. La aptitud es más importante que cualquier otra cosa. He trabajado con un programador que simplemente no podía programar porque simplemente no podía comprender el flujo de la lógica ni siquiera en un programa simple. He trabajado con un programador que no pudo programar porque había perdido su aptitud porque era alcohólico.

Un programador competente puede trabajar dos veces más rápido que un programador adecuado y esto se debe principalmente a la aptitud y continúa en la escala. La mayoría de las grandes empresas tienen demasiados programadores por debajo del promedio que a menudo reciben tanto o casi lo mismo que los programadores genuinamente buenos.

Todos los programadores no son iguales, nunca pueden serlo. Cada uno tiene una exposición diferente, una experiencia diferente. Diferente conjunto de valores de programación.
Si bien el objetivo principal es el mismo “resolver el problema en cuestión” pero algún programa con estilo y otro programa para marcar su dominio (más o menos). También en función de su experiencia y exposición, pueden resolver el problema pero con diferentes diseños.

La arquitectura (diseño) del programa es importante a medida que comienza a trabajar en problemas complejos. Por lo tanto, ningún programador varía según la personalidad, la exposición y la experiencia.

En su mayor parte, no hay tal cosa como mejor o igual, por lo que he visto. Hay programadores que se especializan en un área (cadena de tecnología o dominio de problemas) y apestan en todo lo demás. Hay programadores que son generalistas. Algunos son más teóricos, algunos son más prácticos. Algunos intentan planificar y construir sistemas antes de trabajar, mientras que otros intervienen y piratean hasta que terminan.

Hay lugares donde cualquiera de estas personas es un pez fuera del agua y lugares donde prosperarán. Muchas personas que pensé que eran absolutamente horribles resultaron tener enfoques diferentes a los que yo tenía, y muchas personas que pensé que eran brillantes no pudieron lograr nada.

De acuerdo, también están las personas que son terribles. Se frustran, se niegan a aprender cosas nuevas, no les importa el panorama general, y uno se pregunta por qué no abren una tienda de yogurt congelado en algún lugar. Pero afortunadamente son bastante raros, ya que no puedes nevar a un gerente por mucho tiempo.

Pero sobre todo, no hay una forma real de medir de manera significativa a un programador, al igual que no hay una medición lineal de un atleta o un político. Hacemos muchas cosas diferentes y, a menudo, resolvemos muy diferentes tipos de problemas.

Preguntar esto es como responder a una pregunta si todos somos inteligentes. No somos. Algunos son más sabios e inteligentes que otros y, dado que la codificación es pesada, la respuesta es obvia. 🙂

Hay algunos que pueden traducir ideas del lenguaje humano a un lenguaje de computadora. No es diferente de los autores que conocen dos idiomas diferentes y traducen las ideas de un libro a otro idioma.

Luego, hay quienes podrían tomar ideas de un libro y escribir poemas en otro idioma.

¿Puedes pensar en * cualquier * profesión, donde todas las personas que lo hacen, son iguales en habilidad?

No puedo

¿Qué hace que un programador sea mejor que otro? Realmente no se puede dividir en una razón, a menudo es una experiencia simple, a veces es un trabajo duro o una habilidad natural, o solo el idioma en el que está trabajando, o el dominio en el que está trabajando (es decir, puedo hacer GUI aplicaciones bastante bien, pero no tengo mucha idea sobre los microcontroladores).

La programación es como cualquier otra profesión, hay algunas personas mejores que otras, y mejores de diferentes maneras.

Todos los codificadores son iguales. Todos los programadores no lo son.

Las diferencias entre programadores y codificadores

Bueno, la programación es en realidad un arte de comunicación. Lo competente que sea en la programación depende de qué tan bien entienda el idioma y qué tan bien pueda expresar el idioma para comunicarse efectivamente con la máquina.

Un cocinero necesita comprender cómo funcionan / saben todos los ingredientes y cómo funcionan todas las herramientas [estufa / gas / horno / cucharas …] y cómo mezclar todo esto para que sea sabroso / saludable para el consumidor objetivo. Un cocinero que comprende todo esto mejor es un mejor cocinero.

En mi experiencia, el 90% se reduce a ética laboral y simpatía / empatía.

Buen programador = alguien que no soporta la idea de que un usuario va a tener una mala experiencia y hace lo que puede para evitar problemas antes de que aparezcan mientras sigue haciendo su mejor esfuerzo para enviar a tiempo. Esencialmente, alguien que toma la iniciativa y prefiere pasar 10 minutos adicionales antes de salir del día para dejar las cosas en un mejor estado de lo que las encontraron. es decir, la regla de los Boy Scouts. Contrataré a este tipo todo el día.

No es tan buen programador = alguien que prueba una vez, dice que es bueno ir y cuando el usuario encuentra un problema dice “bien dígales que no hagan eso” o “el usuario parece tonto, ¿por qué trataría de hacer eso?”. Siempre es culpa de otra persona o problema de otra persona. Estas personas y realmente quieren señalar esto. Quieren que las personas sepan cuán inteligentes son y cuán tontas son otras personas. Muy divertido estar cerca.

En lugar de considerar este problema como qué habilidades técnicas debería tener para ser mejor que otro programador, observe la vida en general. El tipo de codificador que quiero es el que saldrá de su zona de confort y se acercará y hablará con el equipo de ventas cuando llegue una solicitud de función. No son un tipo sentado en un armario que escribe correos electrónicos concisos e intenta burlarlos. todos con sus respuestas. Quiero a alguien que esté dispuesto a estar en las trincheras con el resto del equipo. Si nunca ha escuchado esa conversación incómoda que tienen las ventas, el soporte o un entrenador, entonces es difícil para usted mejorar el código. Debe anticipar las preguntas y los problemas que surgen de su solución. Para hacerlo, debes salir de tu zona de confort.

More Interesting

¿En qué área debería centrarme para un buen trabajo de software en India?

¿Cuáles son los mejores recursos en ingeniería de requisitos de software?

¿Cuál es la mejor manera de escribir un CV para una pasantía de ingeniería de software?

¿Puede un ingeniero de software indio conseguir un trabajo de forma independiente en los Estados Unidos sin hacer una maestría en los Estados Unidos?

¿Cómo usan Python las grandes compañías tecnológicas de manera eficiente dada su falta de verificación de tipos estáticos y otros aspectos de la ingeniería de software moderna?

¿Cuáles son las principales industrias que utilizan software personalizado?

¿Qué se requiere para convertirse en un ingeniero de redes en Silicon Valley?

¿Dónde está el mejor lugar (no Craigslist) para encontrar contratistas independientes con habilidades de desarrollo de software en SF?

¿Alguien puede afirmar honestamente que el enfoque ágil para el desarrollo de software no tiene un impacto negativo en la calidad general del producto?

¿Cuánto tiempo te llevó aprender vim a un nivel que te satisface?

¿Qué tan difícil es ingresar a las principales compañías tecnológicas de Silicon Valley desde un entorno universitario extranjero de bajo rango?

¿Cuáles son los desafíos que enfrentan las empresas cuando subcontratan procesos comerciales o desarrollo de software a tiendas en el extranjero?

¿Cuál es el mejor sitio de aptitud?

¿Puedo hacer la transición al campo de la gestión de productos en software después de 2 años de experiencia en el desarrollo de productos de software y un MBA?

¿Por qué los profesionales indios en América del Norte están tan ridículamente sobrevalorados?