Apesto en la programación pero realmente quiero ser bueno en eso. ¿Con qué rutina y libros debo empezar?

Gracias por preguntar. No entiendo parte de su pregunta: ¿qué significa “Estoy en el último año de MCA con dos respaldos”? Responderé sin esta información, pero hágame saber si cree que una mejor comprensión cambiaría mi respuesta.

Aquí hay algunas cosas que debe lograr, como fundamentos, para ayudarlo a ser bueno en la programación:

  • Leer literalmente Aprenda cómo suprimir todas las suposiciones y cómo descartar todas las hipérboles al leer, si está leyendo un código, un documento de diseño o la descripción de alguien de un producto. Si una palabra es ambigua, pregúntele al autor qué significa. Si parte de lo que está leyendo asume que algo más, ya sea simple o complejo, ya está en su lugar y funciona, dígalo y escríbalo. ¡A veces el autor no sabe la respuesta! Cuando el autor no tiene la respuesta, está bien: significa que está programando para ayudar al autor a determinar los requisitos en lugar de implementar los requisitos. Cuando el autor tiene la respuesta, también está bien: acaba de evitar la oportunidad de construir algo incorrecto, al obtener una aclaración.
  • Escriba como si nadie, ni siquiera usted, usará su código de la forma que desea. Los usuarios pasarán los punteros nulos al código, los valores negativos, los datos en el formato incorrecto y las devoluciones de llamada que no cumplan con sus contratos de interfaz. Intentarán utilizar su código que no es seguro para subprocesos en varios subprocesos o en el subproceso incorrecto. La forma de lidiar con esto es aplicar esos mismos filtros, sin suposiciones ni hipérboles, al código que escribe. Para hacer esto, debes desarrollar una disciplina mental cuando escribas, pensar en las formas en que se usará el código, descartar tu intención y ver solo las consecuencias puras de lo que has escrito.
  • Recuerde que la respuesta correcta demasiado tarde es la respuesta incorrecta. La mayoría de los casos de borde que diseñas nunca sucederán. El software real tiene que hacerse a tiempo, y tiene que hacer su trabajo “suficientemente bien” pero no perfectamente. Aprenda a equilibrar su paranoia con respeto y compromiso con el horario y la funcionalidad de la línea principal.
  • Falla mucho, y aprende de cada falla. Una de las ventajas que un programador muy experimentado tiene sobre un programador novato es que el programador muy experimentado ha desarrollado casi todo tipo de sistemas varias veces: a veces, muy mal; A veces, muy bien. Este conocimiento práctico ayuda al programador experimentado a diseñar mejores sistemas y escribir mejor código. Como un programador joven, puede aproximarse a esto escribiendo muchos códigos. Puedes escribirlo en competencias de programación, o en proyectos paralelos; lo que importa es que lo escriba en un entorno que le dé posibilidades de fallar.
  • Elija un idioma y apréndalo bien, incluidas sus bibliotecas. Muchos programadores sénior, incluido yo, afirman que podemos aprender un nuevo lenguaje informático en unos pocos días. ¡Es una exageración! La verdad es que hemos escrito suficientes sistemas, estudiado suficientes patrones, hemos trabajado con suficientes lenguajes de programación y hemos trabajado con suficientes bibliotecas asociadas para saber qué preguntas hacer y qué buscar para descubrir cómo funciona un nuevo idioma. es diferente de, y lo mismo que, un lenguaje que ya conocemos. Por ejemplo: elegir un idioma; probablemente tiene una manera de hacer una tabla hash; incluso si no sé el nombre exacto del tipo de datos incorporado o la biblioteca que lo implementa, sé lo que se supone que debe hacer una tabla hash (al igual que cualquier otro científico informático) y, por lo tanto, puedo esperar razonablemente que La implementación de tablas hash hará lo que se supone que debe hacer. Para aproximarse a esto como un joven programador, aprenda bien un idioma y sus bibliotecas; luego, continúe con un segundo idioma y sus bibliotecas. Con el tiempo, desarrollará la misma capacidad de saber qué esperar de un idioma, lo que le ayuda a aprenderlo o incluso a simularlo rápidamente.
  • Estudiar y utilizar algoritmos, estructuras de datos y patrones de diseño. Estos son grandes fundamentos para dominar. Son el “lenguaje meta” de la programación y representan la experiencia condensada de miles y miles de programadores: sus descubrimientos sobre soluciones generales para problemas frecuentes. Volver a inventar soluciones a problemas bien entendidos no lo convertirá en un mejor programador, excepto por el poder del fracaso que mencioné anteriormente. Si ya existe una buena manera de resolver parte del problema, es mejor dedicar el tiempo de programación a eso, no a intentar buscar una solución mejor.

Estas no son una rutina, y no he hecho recomendaciones específicas de libros, pero estas son las habilidades fundamentales que debes dominar. Muchos de ellos no son habilidades de “codificación” obvias, pero son parte de ser un buen programador. Seguiré con algunas sugerencias específicas de libros.

Si quieres ser un buen programador, escribe un programa. Es la única manera. No fui a la escuela Aprendí las manos en Acostúmbrate a NO saber la solución a tu problema de inmediato. Aprende a hojear rápidamente la información. Encuentra múltiples soluciones a los problemas y aprende las ventajas de cada uno.