¿Los ingenieros de software excepcionales leen libros / publicaciones de blog sobre cómo convertirse en un ingeniero de software excepcional o simplemente resuelven problemas sin descanso?

Me volví excepcional en algún momento a finales de mis 20 años, eso fue hace un tiempo, así que no puedo recordar exactamente cómo trascendí de un lamer n00b al Dr. Dre de programación que soy hoy.

Solo bromeaba, por supuesto …

Todos los grandes programadores que conozco llegaron allí por puro trabajo y perseverancia. ¿Libros? La mayoría están dirigidos a principiantes, pero también hay algunos buenos. Blogs y cosas, sí, a veces.

¿Resolviendo problemas? ¿Como en esos sitios de codificación competitivos? No, no conozco a ningún buen programador que haga esto.

Los buenos programadores hacen un buen software.

Los grandes programadores hacen un gran software.

Uno engendra al otro, no puedes ser bueno sin escribir cosas buenas, y no puedes escribir cosas buenas sin ser un buen programador.

Suena extraño, pero si quieres mejorar en la programación, debes dejar de estudiarlo y comenzar a hacerlo .

Ataque de tres puntas.

Básicamente, no desea resolver un problema resuelto y desea pasar la mayor cantidad de tiempo posible agregando valor en lugar de rehacer lo que se ha hecho.

Estratégico: panorama general y lecturas más teóricas. Libros, artículos y algunos blogs más profundos.

Táctico: cómo resolver un problema en particular: Google es tu amigo. Todos los sospechosos habituales responden preguntas como “esta interfaz no funciona de la manera que creo que debería”, “cómo hago xxxx”, etc.

Hacer: uno solo mejora al convertir ideas en código. Toda la profundidad de la comprensión no sirve de nada si no da como resultado un código que haga algo.

También debe ser lo suficientemente consciente de sí mismo para comprender sus fortalezas y debilidades. Durante mucho tiempo, la gente encontraba partes parcialmente implementadas de mi código donde comencé a explorar una idea y me distraje antes de terminar. La implementación basada en pruebas solucionó ese punto ciego para mí.

Mejoras principalmente haciéndolo . La mayoría de los libros están dirigidos a principiantes, eso no es del todo malo, ya que tenderá a ser un principiante en muchas nuevas tecnologías (y técnicas) a medida que comience a usarlas. Entonces, si decides que Java es algo que quieres aprender, un libro sobre Java es una buena idea. Si ya conoces Java modestamente bien, el 99% de los libros de Java no valdrán nada para ti.

Recuerdo algunos libros aquí y allá que se destacan como útiles, los que recuerdo:

  • Brian W. Kernighan, PJ Plauger: Los elementos del estilo de programación: muestra algunos programas del mundo real que tuvieron problemas y, en general, por qué lo hicieron y, a veces, qué se hizo para solucionarlo. NOTA: este libro es realmente muy antiguo (como en anteriores a cualquier lenguaje que pueda usar, excepto quizás C), pero creo que aún tiene valor.
  • Software práctico reutilizable por Balachander Krishnamurthy: esto no solo cubrió cosas como “por qué no deberíamos dar por sentado la interfaz de malloc” que me abrieron los ojos en ese momento, sino que tiene una muy buena sección sobre depuración.
  • Descubrí que leer sobre Modula-3 era muy interesante, solo en parte porque Modula-3 era interesante, pero más aún porque no era un lenguaje muy popular, pero muchas de sus ideas aparecieron más tarde en Java y otros lenguajes. Haberlos visto antes hace que sea más fácil verlos en un nuevo contexto. Sin embargo, no estoy seguro de que valga la pena leer esto 😉
  • Amazon.com: The C ++ Standard Template Library por PJ Plauger, Alexander A. Stepanov, Meng Lee, David R. Musser: esto no solo cubre cómo usar varias partes del STL, sino cómo escribirlas . Esto es útil no porque espero que todos quieran salir corriendo y escribir su propio STL, sino porque te ayuda a aprender habilidades para escribir cosas similares al STL.
  • Algunos de los libros “Swift avanzado” e “implementación de un árbol B * en Swift” parecen buenos, pero aún no han pasado la prueba del tiempo, por lo que no creo que sea justo incluirlos aquí.

Para ser honesto, el resto de los libros que recuerdo estaban dirigidos a alguien nuevo en un idioma en particular (por lo que puedo recomendar un buen libro de ObjC / Cocoa para alguien que quiera aprender ObjC, pero realmente no lo ayudará una vez que sepa algunos ObjC).

… a veces los blogs pueden darte ideas interesantes. Cosas para replicar o utilizar como punto de partida para su propio código.

Pero aún lo más útil es escribir código. Principalmente escribir código que es algo similar al código que realmente podría usar mientras trabaja, por lo que no creo que las competencias de código sean súper útiles (lo entrenan para escribir código compacto , en la vida real desea escribir código legible y correcto , y a veces código que funciona rápido , pero casi nunca das un higo volador si es compacto ; también te entrenan para escribir código rápidamente, lo cual está bien, siempre que no te entrenen para escribir código rápidamente que no funciona muy bien, o es difícil de mantener).

Una buena combinación podría ser algo así como 90% o 95% escribiendo código para leer de 5% a 10% sobre escribir código.

Ah, también útil: hacer que la gente revise tu código. Puede obtenerlo enviando código a proyectos de código abierto donde los encargados de la revisión realmente revisan parches. También puede obtenerlo haciendo amigos con otros programadores que quieran revisar el código (tal vez a cambio de revisar el suyo). Lo obtendrá si trabaja en una empresa grande porque la mayoría de ellos hacen revisiones de código.

Contestaré con una pregunta similar: ¿Los jugadores de fútbol excepcionales leen libros / publicaciones de blog sobre cómo convertirse en un jugador excepcional o simplemente juegan sin descanso?

Ser “excepcional” en cualquier esfuerzo es bastante similar. Los ingenieros de software excepcionales están constantemente aprendiendo de otros ingenieros, otros equipos, libros, recursos en línea, etc., pero eso es solo teoría, se vuelven excepcionales al hacer las cosas mal hasta que un día descubren cómo hacerlo bien.

Dudé en responder porque hacerlo implica que creo que soy un ingeniero de software excepcional. Lo cual no creo. Creo que lo que soy es un ingeniero de software experimentado . Lo he estado haciendo durante 35 años y más, así que debería estarlo.

Pero aquí está la cosa: puedo recordar cualquier cosa que escribí en casi cualquier momento en el pasado y encogerme. Wow, eso es malo, creo. Lo haría mucho mejor ahora. Es raro que revise un trabajo antiguo y sienta la misma satisfacción que sin duda sentí cuando lo escribí. Y tengo que revisar mi propio código con bastante frecuencia porque es un legado que he construido y estoy atascado en numerosos proyectos, eso solo es un gran controlador para escribir un mejor software hoy, sabiendo que estaré atrapado en él durante años .

Ese proceso (revisión y encogimiento) no muestra signos de desaceleración. Lo que escribo hoy será lo mejor que pueda, pero espero que en unos años lo revise y me avergüence.

Sí resuelvo problemas sin descanso, pero también leo mucho sobre el desarrollo de software y siempre hay algo nuevo que aprender. Igualmente, sé que puedo transmitir a otros para ayudarlos a mejorar. Quora es un canal ocasional para eso. Hay muchos mejores desarrolladores que yo y siempre los habrá. Intento y aprendo lo que puedo de ellos. Pero hay desarrolladores mucho peores que yo y siempre lo estarán, así que trato de ayudarlos donde puedo también.

Ambos. Porque y es mejor que o.

El conocimiento proviene de otros expertos. La habilidad proviene de la práctica. Necesitas ambos para ser un desarrollador de primer nivel.

More Interesting

¿Son iguales los ingenieros de software de Amazon y Addepar?

¿Necesito aprender Oracle DB para convertirme en ingeniero de software Java?

¿La mayoría de los ingenieros de software solo están haciendo mantenimiento de software?

¿Qué debe hacer un ingeniero de software sénior de manera diferente cuando se convierte en el líder del equipo?

¿Qué nivel de ingenieros de software están autorizados para volar en clase ejecutiva en Google?

Comenzaré mi primer día en FB en dos semanas como nuevo ingeniero de software graduado. ¿Cómo le pido a un ingeniero sénior en el mismo equipo que sea mi mentor?

Siendo realistas, como ingeniero de software, ¿qué podría hacer con una maestría en estudios internacionales?

¿Cómo puede un ingeniero de software encontrar trabajo en el campo de la robótica? Estudié ingeniería eléctrica e informática y trabajé como ingeniero de software. Tengo experiencia con sistemas embebidos y programación en el entorno Linux kernel / userspace.

¿Te gusta realizar entrevistas con ingenieros de software?

¿Por qué no hay una cultura de excelencia entre los ingenieros de software de Apple?

¿Es posible que un SDE 1 de Amazon sin MBA pero con cierta experiencia en marketing sea contratado para el rol de PM de Amazon en 2 o 3 años?

Ingenieros de software: ¿Su trabajo le proporciona teclados deficientes o tiene un buen teclado mecánico?

¿Cómo es ser ingeniero de software de una universidad de mierda?

Cómo estudiar bien en ingeniería de software (M.Tech)

Cómo ganar dinero mientras aprende ingeniería de software