¿Tienes algún consejo para convertirte en el mejor programador?

Mi mejor consejo es comenzar con un buen lenguaje de enseñanza

Siempre recomiendo Smalltalk como el primer lenguaje de programación para todos los principiantes. ¿Por qué? Es uno de los pocos lenguajes que fue diseñado para enseñar programación. Es sumamente simple y fácil de aprender (¡aún más fácil que Python!). Es la mejor manera de aprender acerca de la programación orientada a objetos , el paradigma más utilizado en la industria de TI.

Los lenguajes industriales como Java, Python, JavaScript y C no son buenos lenguajes de enseñanza. Llevan demasiado equipaje que puede interponerse en el camino de un principiante, que debe centrarse en aprender conceptos básicos de programación y NO en las peculiaridades de su lenguaje de programación.

Smalltalk, por otro lado, es tan puro como la nieve conducida. Es hermosamente simple y elegante. ¡La sintaxis de Smalltalk puede caber en la parte posterior de una postal!

Y aquí está el truco: una vez que haya aprendido a programar con Smalltalk, aprender un segundo idioma como Java o Python es muy fácil. Tendrás una base sólida en la programación orientada a objetos.

He proporcionado algunos recursos de aprendizaje: En espera de la edición final antes de la publicación: aprender a programar.

Una cosa importante a recordar es que una vez que haya aprendido los conceptos básicos de programación (por ejemplo, con Smalltalk), debe desarrollar y perfeccionar sus habilidades de programación mediante la práctica de software de escritura . Estoy hablando de miles de horas de práctica. Haz los cálculos: esto podría significar años.

Pero eventualmente serás un muy buen programador, quizás incluso el mejor.

Comencemos con lo básico: ser un programador requiere un cierto tipo de mente. Si no tienes ese tipo de mente, nunca serás un programador decente, y mucho menos el mejor.

Ahora … para convertirte en un programador realmente bueno, debes hacer dos cosas:

  1. Programa. Escribir programas. Pruébalos y arregla los errores. No pocos programas de cursos universitarios, sino programas que realmente hacen algo y son lo suficientemente complicados como para tener errores graves.
  2. Estudiar. Nunca serás un excelente programador a menos que aprendas cosas. Nunca tomé un Comp. Sci. Por supuesto, pero he absorbido una cierta cantidad de ella. El problema de la detención. El tipo más rápido. Funciones de “trampilla” y otras cosas que necesita para la criptografía, la seguridad, etc. Pero para convertirse en un excelente programador debe aprender, y debe aprender constantemente cosas nuevas.

¿Cuánto de su tiempo se debe gastar haciendo cada una de esas cosas? Tendrás que descubrirlo por experimento. Pero sé que no puedes ser un excelente programador sin hacer mucha programación, y tampoco puedes ser un excelente programador sin aprender muchos idiomas diferentes, muchas técnicas diferentes.

Tienes una “caja de herramientas” mental de técnicas que usas para resolver problemas. Quieres que la caja de herramientas sea grande y llena de herramientas diferentes. Algunos de los que obtienes haciendo, averiguando qué funciona para ti y qué no, y almacenando todas las técnicas que has aprendido en la memoria, y algunos por estudio. Pero vas a necesitar los dos.

No estoy diciendo que necesites un Comp formal. Sci. la licenciatura. Fui un programador hotshot y nunca tomé un solo curso en él. CompSci ni siquiera existía como disciplina cuando comencé a programar en 1965. Pero necesitarás leer libros, consultar revistas de ACM y / o cualquier especialidad en la que te interese (por ejemplo, SIGPLAN si quieres escribir compiladores o diseñar idiomas), conseguir libros y leerlos, etc.

Así es como te conviertes en el “mejor” programador. No es que haya un programador “el mejor”. Hay muchos programadores * realmente buenos *, pero son buenos en diferentes cosas. Pero puedes llegar a ser * realmente bueno *, y lo anterior es cómo lo haces.

Creo que lo más importante es creer que es posible escribir código sin errores, creer que con niveles crecientes de abstracción no hay límite para la productividad y trabajar continuamente para alcanzar esos objetivos.

Necesitas aprender a manejar la complejidad. De hecho, administrar la complejidad realmente significa evitarla o eliminarla, ya que la complejidad se agrava rápidamente, por lo que no requiere muchos aspectos complejos para que una base de código se salga de control.

Debe diseñar la arquitectura de software de alto nivel para que los aspectos comunes de la dificultad en el dominio del problema se puedan resolver de una vez por todas de una manera en la que pueda estar seguro de que es correcto. La arquitectura del software debería proporcionar abstracciones en el dominio del problema para implementar características únicas por composición y la arquitectura debería permitir que esas nuevas características se reutilicen como abstracciones de nivel superior.

Su arquitectura debe tener en cuenta la escalabilidad, la confiabilidad (confiabilidad, disponibilidad, capacidad de servicio, seguridad), el rendimiento y la usabilidad.

Debe tener estrategias para la gestión de la memoria, la concurrencia y la coherencia (por ejemplo, una estrategia de bloqueo).

Debe aprender a descomponer la solución en componentes con API definidas con precisión y descomponer esos componentes en subcomponentes, y así sucesivamente hasta que esté escribiendo un código muy simple en un ámbito local que no pueda estar equivocado.

Debe aprender a realizar esta descomposición para que cada problema se resuelva solo una vez por un componente que solo solucione un problema con un acoplamiento mínimo a componentes de nivel inferior y sin acoplamiento a componentes de nivel superior para lograr la máxima reutilización interna dentro del proyecto y Posteriormente en futuros proyectos.

Necesitas entender perfectamente las API contra las que estás codificando. Si esto no es posible, debe crear fachadas que estén definidas con precisión para poder codificar contra ellas y limitar los posibles errores de la mala comprensión de las API subyacentes a la implementación de la fachada.

Debe aprender cómo codificar para cada caso posible que puede ocurrir y controlar las rutas de código que no pueden con aserciones para que el código haga exactamente lo que espera o falla cerca de la causa raíz del problema.

Necesita aprender a probar su código a fondo y es posible que desee aprender cómo escribir el código de forma correcta y, además, demostrar la exactitud.

Debe aprender a hacer todo esto de manera incremental y flexible, de modo que pueda realizar sus entregas con anticipación, obtener retroalimentación y responder a los requisitos cambiantes.

Lo más importante es que debe aprender a trabajar con su equipo y ayudarlos a convertirse en los mejores programadores también, ya que la productividad y la calidad están limitadas por los peores aspectos de una base de código y no son las mejores.

  • Escribir código que sea fácil de entender para otros
  • No seas un idiota

Funciona bastante bien

Lo primero: cuanto más practiques, más aprenderás.

Y lo segundo es construir lógicas, que se basan totalmente en la capacidad de pensamiento del individuo.