Hoy no hablaremos de aspiraciones ni ideales, ni tampoco de tecnologías concretas; hablemos de varios errores típicos en la forma de pensar de los programadores. Los siguientes problemas son los que yo mismo he encontrado, o los que mis amigos han encontrado. Estas son mis comprensiones personales, y espero que sean útiles para todos.

typical-errors-of-Programmer-view

Sobre patrones de diseño y principios de diseño

Algunos piensan que con dominar los patrones de diseño y los principios de diseño, ya se aprende diseño. En realidad, los patrones y principios de diseño son solo resúmenes y refinamientos hechos por los predecesores a partir de la práctica del diseño. El diseño, en definitiva, se trata de resolver problemas: transformar las soluciones a problemas concretos, mediante cierta abstracción, en el lenguaje de los programadores.

He visto a algunas personas que tienen un gran conocimiento y una amplia erudición; incluso pueden explicarte teorías de manera muy grandilocuente, pero cuando llega el momento de resolver problemas reales, no pueden ofrecer soluciones ingeniosas ni elegantes. Son típicas personas de la torre de marfil.

Por otro lado, también hay quienes menosprecian a los que estudian patrones de diseño; creen que ya dominan los secretos del diseño de software, y que estas palabras no significan nada para ellos. Ante esto, lo mejor es simplemente sonreír y restarle importancia.

A veces, por el contrario, nos vemos atados de pies y manos por una comprensión rígida de los patrones o principios de diseño. Por ejemplo, me encontré con una situación así: un programador esforzado usaba composición en todo el código que diseñaba (por ejemplo, colocando el objeto User dentro de Administrator). Le pregunté con curiosidad: algunas relaciones entre clases y objetos claramente cumplen las características de la herencia, ¿por qué no quieres usarla? Él dijo: los principios de diseño nos dicen que usemos más composición y menos herencia. Pienso que, si no podemos dominar a fondo estos excelentes patrones, principios y metodologías, ni aplicarlos adecuadamente según las situaciones reales, ¿no sería mejor, en todo caso, no conocerlos?

Sobre el aprendizaje de múltiples lenguajes de programación

Algunos piensan que basta con aprender un lenguaje, y que no es necesario aprender tantos. De hecho, dominar un lenguaje de programación adecuado adicional no solo significa tener una herramienta más para ganarse la vida; si un nuevo lenguaje puede cambiar en gran medida tu forma de ver la programación y el diseño, entonces quizás valga la pena aprenderlo.

Por ejemplo, el lenguaje C puede cultivar un pensamiento riguroso; los lenguajes dinámicos pueden ayudar a los programadores a hacer mejor coding orientado a objetos; los lenguajes funcionales tienen un papel irremplazable en la producción industrial y en el ámbito de la computación.

Dicho esto, como dice el refrán, cada uno se especializa en su oficio; es muy necesario dominar a fondo un lenguaje de programación concreto (incluyendo el entorno de ejecución que requiere, y los principios de su compilación o interpretación).

Además, a menudo vemos muchas discusiones sobre qué lenguaje de programación es mejor o peor. Un lenguaje de programación es, en última instancia, una herramienta; las herramientas se actualizan y cambian con el desarrollo de los tiempos. Discutir simplemente cuál es mejor o peor no tiene mucho sentido.

Sobre el inglés

¿Por qué los chinos tenemos que aprender inglés? ¿Por qué los programadores tienen que aprender inglés? Si pongo todos los nombres de métodos y variables en pinyin, también funciona. ¿Quién hizo esta maldita regla?

Lamentablemente, muchos materiales de estudio, artículos y documentación técnica (especialmente las tecnologías que acaban de salir) están en inglés. Por otro lado, los estándares internacionales y las formas comunes de comunicación entre programadores son en inglés. Creo que seguramente es difícil imaginar cómo se verían las variables en los códigos fuente de esos famosos frameworks y librerías si estuvieran escritas en pinyin.

Por lo tanto, si tu inglés no es bueno (al menos en lectura y escritura), no te busques excusas. El inglés es una herramienta para dominar otras herramientas, a menos que creas firmemente que el chino pronto se convertirá en el idioma universal número uno en el mundo de la informática.

Sobre los algoritmos

La importancia de los algoritmos siempre ha sido un tema muy controvertido.

El software, en última instancia, se usa para resolver problemas. Al hablar de algoritmos, es inevitable mencionar las matemáticas (esta es también la razón por la que muchos maestros en el campo del software tienen una sólida formación matemática). Para resolver problemas, aquí se puede resumir simplemente en dos pasos:

  • (1) Abstraer el problema real en un modelo matemático simplificado
  • (2) Usar algoritmos para resolver este problema matemático

Algoritmo, aquí debería ser un concepto en sentido amplio (aquí no solo se refiere a los algoritmos específicos y restringidos que se estudian en la universidad); un algoritmo es la forma de resolver el problema matemático antes mencionado. Si en tu trabajo no te das cuenta de su existencia, solo significa que el modelo matemático que abstraes es relativamente simple, y la forma de resolver este modelo también es simple; o hay métodos existentes que puedes imitar, o hay frameworks existentes que te ayudan a completarlo, hasta tal punto que no le prestas atención ni le das importancia.

Si lo que haces está lleno de significado innovador, es algo que nadie ha hecho antes, entonces el algoritmo quizás se convierta en el factor que decida tu éxito o fracaso.

En el entorno actual de China, es fácil encontrar personas con amplia visión y rica experiencia, pero para las empresas es realmente muy difícil contratar a personas que posean las dos capacidades mencionadas para resolver problemas.

Sobre la experiencia

Hay muchas personas que creen solo en la experiencia; piensan que en las empresas de software, el puesto, el salario e incluso la capacidad de toma de decisiones dependen de la experiencia. Un ingeniero con 5 años de experiencia seguramente encontrará un mejor puesto de trabajo que un ingeniero con 3 años de experiencia:

"Soy un empleado veterano, llevo 5 años trabajando. ¿Por qué él, que lleva 3 años, tiene un salario mucho más alto que el mío?"

En realidad, muchos factores, incluyendo la acumulación en el dominio (esto es a nivel de negocio, por ejemplo en el campo de Internet o en el campo del software tradicional; no tiene relación directa con la llamada tecnología pura), la visión, la capacidad de soportar presión, etc., a menudo dependen en gran medida de la acumulación de "experiencia". Pero esto no es absoluto. Hay un dicho: "La carrera profesional se logra mitad trabajando y mitad resumiendo." Efectivamente hay algunos programadores sobresalientes que son buenos resumiendo, buenos observando y acumulando, y buenos pensando continuamente. Estos programadores poseen una experiencia más excelente.

Por otro lado, los programadores existen para resolver problemas; la experiencia no puede sustituir a la resolución de problemas. Si alguien tiene una capacidad superior para resolver problemas, ¿por qué no podría recibir un salario más generoso?

Fuente: http://www.raychase.net/359