¿Qué habilidades debería alguien ver en sí mismo para convertirse en un súper programador?

No me voy a preocupar demasiado por el ‘súper programador’, ¿qué tal un buen programador? Tendrás que ser así primero.

Hay algo que llamo la prueba App-titude. Si puede hacer que una aplicación funcione y disfrutarla, es posible que tenga lo necesario para ser un programador. Pero lograr que una aplicación funcione no es suficiente para ser un gran programador o producir un gran código.

Recientemente me he encontrado con una aplicación de Android que estoy cambiando. Me hizo darme cuenta de que el autor pasó la al menos parte de la prueba de App-titude; consiguió que la aplicación funcionara. El programador puede ser un programador típico, incluso puede ser decente, pero no fue un programador profesional. Las ideas se extendieron por todo el código. No fue escrito para que alguien lo entienda, ¡pero funcionó!

Tomemos un poco más la prueba App-titude. ¿Puedes responder la mayoría de estas preguntas con un “sí”?

¿Te gusta resolver problemas? ¿Eres bueno resolviendo problemas? ¿Puedes pensar claramente sobre causa y efecto? ¿Tiene la capacidad de agrupar ideas relacionadas y separar ideas no relacionadas?

Se necesitan muchas habilidades, aunque creo que hay tres áreas de habilidades críticas:

Diferenciar el código bueno contra el mal

Debe poder identificar el código bueno y el código malo. No me refiero a la definición habitual de código incorrecto como se expresa en esta función ruby

def bad_code? código
volver no code.written_by_me
fin

def good_code? código
código de retorno escrito_por_me
fin

Debes entender los olores de código. No así: “Este código apesta”. Debe compartir un vocabulario común para expresar los problemas en el código y el diseño. En el libro de Refactorización de Martin Fowler, define una serie de olores de código. Me parece que si puede nombrar un problema, tiene la oportunidad de comunicarlo a otros y resolverlo.

Imagine mejores soluciones

Tenga en cuenta que code.written_by_me == true no es el criterio. Para visualizar mejores soluciones, debe conocer los principios de diseño, la estructura del código y los patrones de diseño. Necesita saber cómo hacer código con alta cohesión y bajo acoplamiento. ¿Alta cohesión? ¿Acoplamiento bajo? ¡Todos saben eso! No, ellos no. La aplicación que mencioné anteriormente tenía detalles repartidos por la aplicación. El principio de diseño más ignorado o desconocido es el más simple. Se llama Principio de responsabilidad única (parte de los principios SÓLIDOS de Bob Martin). En esencia, el principio fomenta tener funciones, clases y módulos que incorporen una sola responsabilidad. Otros principios dan orientación sobre el acoplamiento, haciendo módulos sustituibles.

Mejor disfruta aprendiendo sobre diseño. Hay mucho que aprender aquí. Hasta ahora creo que lleva toda una vida. No puedes dejar de aprender.

Mantenga el código funcionando

La última de mis tres habilidades críticas es una familia de habilidades con el objetivo de mantener el código funcionando todo el tiempo. Aquí algunas de las habilidades relacionadas: automatización de pruebas, desarrollo basado en pruebas, refactorización y establecimiento de causa y efecto.

Para mantener el código funcionando, necesitará muchas pruebas automatizadas. Tendrá que programar con GUT (Good Unit Tests, gracias Kevlin Henney). La mejor manera que conozco de programación con GUT es TDD. También necesita saber qué es una buena prueba de unidad. Hay mucho que aprender y dominar aquí. Pero no te preocupes, si te gusta resolver problemas, será divertido.

También va a ser decente en la depuración, aunque ser bueno para encontrar y corregir errores no es excelencia técnica. Es parte de la prueba App-titude. Realmente quieres ser bueno para prevenir defectos. TDD y GUT son esenciales.

Cuando realiza mejoras estructurales, desea ser bueno para hacer pequeños cambios y asegurarse de que nada se rompa. Tener GUT y conocimiento de la refactorización paso a paso es posible cambiar su diseño y no romper nada.

No recuerdo haber sido enseñado, hace tantos años, sobre el establecimiento de causa y efecto en la programación. He llegado a confiar en esto como una práctica y habilidad crítica. Fue TDD lo que me hizo consciente de esta práctica de programación fundamental.

Cuando encontré lugares en mi código donde no podía probar, como evolucionar mi sitio web de Rails, hacía los varios cambios que los documentos de Rails decían que necesitaba. Algo no funcionaría. La página se estrellaría. Aunque cavaría y haría cambios. La página sigue fallando. Entonces, finalmente, algún cambio hace que funcione. ¡La magia de todos esos pequeños cambios lo hizo! Más tarde descubriría otro error. Uno (generalmente más) de esos cambios tuvo un problema que finalmente aparece como defecto más tarde. Volvería a depurar. Con TDD rara vez depuro algo significativo. Así que estaba muy consciente de que estaba haciendo esto que trato de evitar.

Empecé a trabajar de manera muy diferente. Hago cambios uno a la vez. Reconozco cuando el mensaje de error cambia al mensaje de error esperado (o finalmente una ruta de trabajo a través del código). Si mi cambio no resultó en el error esperado, retrocedería el cambio e intentaría nuevamente, avanzando lentamente, un comportamiento a la vez. Este enfoque aparentemente lento mantuvo el código funcionando. Mantener el código funcionando es mucho más fácil que arreglarlo después de romperlo.

Pensé que esta sería una respuesta más corta

Gracias por leer hasta el final de esto. Buena suerte en su viaje. Debería ser divertido.

Cualesquiera que sean las habilidades, para ser realmente bueno en algo que tiene que gustarle. Aquí hay una lista de los ingenieros que tomaron mi entrenamiento sobre programación. Puede comprobar que le gustan las cosas similares. Si no lo hace, encuentre algo que le guste hacer.

Tomaré “súper programador” para referirme a alguien 10 veces más mejor que el resto de nosotros. En muchos oficios o profesiones hay una brecha mucho menor entre los profesionales realmente buenos y los profesionales promedio. Me gusta hablar de carreras alternativas (a la programación) donde el espectro de dominio es más obvio.

Primero, mira a los músicos. La mayoría de los buenos músicos enseñan en la escuela secundaria. Los músicos realmente buenos no son solistas en orquestas y compañías de ópera, trabajan en las bandas de rock rock donde realmente pueden ganarse la vida, tocar en clubes, cantar en iglesias o sinagogas, etc. Luego están los músicos realmente buenos, el virtuoso. Estos realmente son 10 veces más mejores que el promedio. Pueden o no ser muy inteligentes en general, pero en la música son muy, muy inteligentes.

La teoría de las inteligencias múltiples de Howard Gardner (ver Wikipedia ) es realmente útil aquí. Una de sus “inteligencias” es el musical, y puedes ser un genio en eso. Fui buen amigo durante varios años con uno de esos genios (Jerry García antes de que se hiciera famoso) y la diferencia de nivel fue fácilmente reconocible y casi universalmente aceptada.

El problema puede confundirse si el individuo también es muy inteligente en el significado tradicional del término. Esto generalmente significa tener habilidades significativas para “comunicarse”. (Gardner llama a esto inteligencia verbal-lingüística ). Pero las personas pueden tener una alta inteligencia verbal-lingüística y seguir siendo terrones absolutos. Es realmente sorprendente cuando un novelista o poeta favorito resulta no ser muy inteligente. Compare, si tiene sentido, los poetas Ezra Pound, William Butler Yeats o Dylan Thomas con Alan Ginsberg. Los primeros tres fueron 10 veces más mejores que los simplemente buenos como poetas, y menos que asombrosos de lo contrario. Ginsberg fue un poeta justo y medio y sorprendentemente dotado en otros lugares. Leonard Cohen es un gran poeta y un compositor realmente bueno (y un intérprete adecuado), que muestra lo que sucede cuando eres un genio en más de un área.

Una de las ventajas del enfoque de Gardner es que reconoce un gran talento en los oficios de menor prestigio. Puedes ser un genio reparando autos o carpinterías. Asimismo, hay inteligencias que comparten bailarines, gimnastas y boxeadores. Al mostrar que hay muchas áreas en las que se puede encontrar esa diferencia de más de 10 veces, encontrarlo en la programación no es tan extraño.

Si naces con mucha inteligencia, puedes cultivarlo a través de la educación, la práctica y el rendimiento. Pero si no lo tiene, ninguna cantidad de compromiso, práctica y sudor lo empujará más allá del promedio anterior. Hubiera vendido mi alma para ser tan buen músico como mi amigo Jerry, pero, sin contar la intervención activa del Maligno, no había esperanza.

¿Cómo sabes si naciste con la habilidad / inteligencia? Práctica práctica práctica. Si su nivel de habilidad aumenta cada vez más lentamente mientras su rendimiento sigue siendo mejor que el promedio, deje su ambición de ser un súper programador antes de que su mente se arruine con la amarga frustración. Contentate con una carrera normal.

Y, si su función eventual implica contratar programadores, siempre contrate a otros que sean mejores que usted. Prepárate para luchar para poder pagarles más de lo que obtienes.

Los programadores que conozco tienen 1 característica distintiva: les gusta resolver acertijos (cubo de Rubik, crucigramas, búsquedas de palabras, etc.). Por lo general, disfrutan trabajar solos y prefieren encontrar el camino a la solución a su manera, no en un consenso o enfoque de equipo. He tenido amigos programadores que ignoraron mis instrucciones y lo hicieron a su manera y tuve que aprender a darles su camino. Son matemáticamente inclinados y, a menudo, les gusta la fotografía y la música como pasatiempos. Algunos incluso tienen un segundo trabajo como músicos. Son inteligentes y con frecuencia son acusados ​​de hacer las cosas “de la manera difícil” porque no les gusta la convención y hacer las cosas de la manera común y aceptada. En mi experiencia, muchos de ellos, particularmente en sistemas, son zurdos, mucho más de lo que ocurre en la población general. Con frecuencia, su tipo Meyers / Briggs es INTP, al igual que el mío.

Paciencia…

Necesita paciencia porque encontrará errores de compilación, errores de tiempo de ejecución, excepciones de E / S, excepciones de sistema, excepción de dispositivo, requisitos de energía, requisitos de velocidad, incoherencias gráficas, condiciones mal probadas, escenarios extraños producirán fallas, debe pensar en todo lo posible o limitar lo que es posible para lo que desea que haga el usuario, y esto tendrá que repararse porque estará lleno de errores.

Te llevará un año, como si estuvieras pintando La Mona Lisa.

Pintar es como codificar.

Algunas personas toman pedazos de pintura en algún lugar, cortan y pegan en su álbum de recortes.
Bueno, pintar es exactamente como codificar.

Cuanto más tiempo le dedicas, más perfecto es el resultado. Excepto si no te tomas el tiempo para pintarlo. También puede asociarse con otros pintores y comenzar a pintar un puente de arcoíris al cielo en un edificio si lo desea.

Lo mismo en la codificación.

  1. Capacidad para sentarse frente a la computadora y codificar si tiene ganas de hacerlo o no.
  2. Capacidad para resolver problemas (utilizando su propio conocimiento y experiencia + búsqueda efectiva en Google)
  3. Interesado en aprender y mejorar conocimientos y habilidades

Nadie puede decir que es un súper programador, y creo que no hay necesidad de convertirse en un súper programador. Se necesita un programador para resolver problemas. Si usted es un pensador crítico y tiene buenas habilidades para resolver problemas, considérese un súper programador. Nuestro objetivo final, ser un desarrollador o cualquier otra cosa, es obtener altos salarios y nada más. Para este propósito, refina tus habilidades tanto como puedas, eso es todo.

Creo que se necesita tenacidad y curiosidad. Curiosidad para probar lo que nadie más intentó y tenacidad para seguir intentándolo después de fallar una y otra vez. Al igual que los gimnastas olímpicos, obtienes nuevas habilidades con la repetición. Puede leer tutoriales cuando está bloqueado, pero no antes. Recuerda que el camino hacia el lado oscuro es más corto y tentador. Siempre estará tentado a leer un blog o libro sobre buenas prácticas de programación y tendrá el respeto inmediato de los intermedios.

More Interesting

Cómo prepararme para el IoT 'como estudiante de informática'

Cómo convertir YouTube mp4 a mp3 sin ningún software

¿Dónde puedo encontrar prácticas de invierno para estudiantes de informática?

Como estudiante de humanidades (lingüística), ¿cuáles son las clases de informática más útiles que puedo tomar?

Cómo comenzar una carrera en Indian Railways como más reciente en ingeniería informática

¿Por qué el desarrollo de la interfaz de usuario toma tiempo?

¿Debo dejar mi trabajo y centrarme solo en aprender a codificar?

¿Qué profesión tiene un futuro mejor: animador o ingeniero informático (ciencia)?

¿Cuáles son las cualidades integrales que hacen un excelente desarrollador web o empresa de desarrollo web?

Soy un estudiante de segundo año de B-Tech Computer Science. Deseo convertirme en desarrollador de Android. ¿Cuáles son mis opciones y cuáles son las empresas en las que puedo trabajar?

¿Qué debo saber sobre una especialización en informática, como estudiante de primer año?

¿Cómo puedo parecer valioso para un programador en el área de la bahía?

Quiero un trabajo de seis cifras. ¿Debo obtener un título en informática o asistir a un campamento de programación?

¿Cómo debe un estudiante de informática continuar su primer año?

Soy un segundo año de B.Tech en informática. Quiero ingresar al servicio civil en mi primer intento, y estoy listo para dedicar mi sincero esfuerzo. ¿Cómo puedo construir una sólida formación en CSE en mis dos años restantes?