En orden de importancia, si es posible hacerlo y puede no serlo, ¿cuáles son los fundamentos más importantes para saber programar? Algoritmos, iteración, recursividad, etc.
Tenga en cuenta que donde pongo, etc., es donde radica mi pregunta. ¡Recientemente leí una publicación en Internet que decía que 9 de cada 10 programadores no pueden quedarse sin aliento !
http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html
Quiero tener un conocimiento profundo de lo que realmente estoy tratando de lograr al programar y una comprensión exhaustiva de las herramientas básicas a mi disposición. Básicamente quiero poder pintar con todos los colores del viento.
Respuestas:
Esta lista es un comienzo ... ¡estás haciendo una gran pregunta!
Respondí otra pregunta a lo largo de líneas similares (con contenido similar) aquí:
consejos, pautas, puntos a recordar para representar código profesional?
fuente
Bajo el título de " etc. " viene algo que fácilmente puede tomar el 50% o más de su tiempo.
Aprende a depurar.
Esto significa aprender el Método Científico . Me refiero a realmente aprenderlo. Y luego aplicarlo con brutal honestidad . Aprende a decir con precisión lo que sabes que es verdad, lo que sabes que no es cierto y las cosas que no sabes. Cada vez que asigna descuidadamente un elemento a la categoría incorrecta, acaba de hacer su vida mucho más difícil.
Aprende a decir "pienso" en lugar de "sé". ¡Solo puedes decir "lo sé" cuando "piensas" que algo es verdadero (o falso), y luego lo pruebas!
Muchos errores son triviales, pero pueden ser difíciles de ver porque "sabe" cuál debería ser el código ... excepto que no lo es. Encuentra un amigo para explicárselo. Pídales que sean un "idiota experto": alguien que no conoce su código, pero que sabe que no puede dejar pasar a BS. No se sorprenda si en medio de una descripción para ellos, de repente se detiene y dice: "y así puede ... ver ... ver eso ... sh * t. Gracias".
Los errores no triviales requieren un arsenal de técnicas. Un clásico que puede destacar rápidamente la mayoría de los errores no relacionados con el tiempo es Wolf Fence en Alaska. Hay un lobo en algún lugar de Alaska; construir una cerca cortando el estado por la mitad. ¿De qué lado está el lobo? Corta ese lado por la mitad. Enjabonar, enjuagar, repetir. Hacer esto 20 veces en lugares bien elegidos en el código reduce el área donde el error (lobo) puede estar a 1/1048576. Mata a ese lobo.
Consejo: busque ondas manuales, físicas, mentales o de cualquier otro tipo. Tan pronto como usted (o su colega) retroceda / desvíe / minimice la atención prestada a una parte del código, se volverá totalmente rabioso . Debido a que el área donde se sabe que el error no puede ser, a pesar de que ha pasado horas / días buscando lo d * mn y todavía no puede encontrarlo ... esa es la ubicación de mayor probabilidad para el error. Nadie recibe un "adiós" , nadie (incluida la máquina, el sistema operativo, el compilador o usted ) recibe ningún tipo de "debido respeto". Hay un error Período. Fin de la oración. Ahora ve a matar a la maldita cosa.
No conozco ninguna escuela que enseñe la depuración como un tema en sí mismo. IMNSHO, esta puede ser la evidencia más evidente de que ellos (universidades / profesores) no te están enseñando a ser programador, sino que te están enseñando a ser ... ¿como ellos? ¿Duro? Quizás. ¿Cierto? Decídete de una vez. Ahora pruébalo.
fuente
Me temo que esta es una pregunta bastante grande para que cualquiera pueda responder de manera concluyente o autorizada, especialmente dado que desea una lista priorizada. Hay muchos programadores por ahí, y trabajan en cosas muy diferentes: seguro, los fundamentos permanecen igual, pero lo que necesita para mantenerse activo en su memoria puede ser realmente diferente, y de hecho hay muchas tareas en las que puede permanecer bonito de alto nivel sin profundizar.
Sin embargo, parece que está realmente preocupado por cómo ser un mejor desarrollador, y no solo por un intercambio de divisas. Lo encuentro admirable y puedo compartir algunas de las cosas que me han ayudado a aprender a programar.
Casi toda la programación se reduce a algoritmos y estructuras de datos. Ellos, a su vez, son ejemplos de la gran pregunta: ¿cómo modelamos cosas y procesos del mundo real en una representación tal que una computadora pueda entender? Si recién está comenzando, puede ser útil usar un lenguaje de programación de nivel superior (como Java, Python, lo que sea) para familiarizarse con la implementación de estructuras de datos y algoritmos.
En cierto punto, después de haber jugado con estructuras de datos y algoritmos, puede comenzar a recibir esa pregunta persistente "pero ¿cómo pasamos de decirle a la computadora qué hacer, a la computadora que realmente lo hace?" Luego puede ver cómo una computadora realmente calcula: cómo la memoria y la CPU trabajan juntas para ejecutar instrucciones, cómo los sistemas operativos abstraen el hardware para que pueda escribir un programa que, por ejemplo, abre un archivo, sin codificar a un nivel bajo particular interfaz de disco duro
Este es probablemente un buen punto de partida: cómo los algoritmos y las estructuras de datos modelan los problemas del mundo real y cómo una computadora realmente realiza el cálculo. Conocer esto último es muy útil para dominar lenguajes de nivel inferior como C, que utilizan mucho menos humo y espejos que OO y lenguajes de script :)
fuente
YAGNI : "Siempre implemente las cosas cuando realmente las necesite, nunca cuando prevea que las necesita".
En mi experiencia, es común que los "programadores" prevean muchos casos en el futuro e intenten "mejorar" el código agregando códigos para anticiparlos. En la mayoría de los casos, el código que agregaron simplemente hinchará el código y agregará complejidad al código.
fuente
Lo más importante que debe saber acerca de ser un programador es que escribir código es una rutina, y una actitud profesional de "cuello azul" hacia la producción de lo que se le paga por producir lo llevará más lejos que cualquier aprendizaje esotérico.
Aprende a entrar en la zona. Con eso me refiero al estado mental cuando estás enfocado solo en tu tarea y puedes comenzar a mantener muchas cosas en tu cabeza y cómo interoperan todas a la vez. Una vez que tenga el hábito de ingresar a la zona a voluntad, comience a preocuparse por el resto. Hasta que pueda descifrar el código como una especie de código que explota, el resto es prácticamente inútil.
EDITAR:
Si no crees esto y me rechazaste, creo que no sabes si tienes la determinación de hacerlo durante 20 años. Sé que lo hago porque acepto esto. ;)
fuente
Una pregunta reciente, relacionada de alguna manera con esta, y Answer tenía un enlace a este blog que analiza el mismo problema desde un ángulo diferente.
Probablemente el concepto más importante para cualquier desarrollador es la "humildad" ... Una vez que acepte que no lo sabe todo, está abierto a explorar soluciones. La mayoría de las personas que escriben blogs en programación están en el percentil superior, y el problema es que muchos aún no han controlado sus tendencias narcisistas ... por eso escriben en blogs ... Necesitas aprender a identificar a estos bloggers y ignorar allí despotricar
El blog vinculado no es más que una queja: en todas las industrias, las quejas de que los recién graduados son inútiles son comunes, que lleva años conseguir que sean útiles y productivas. Quizás el problema es que estos autoproclamados gurús realmente esperan demasiado y han olvidado que una vez no habrían podido resolver FizzBuzz. No todos pueden estar en el percentil 10 superior, por definición, la mitad de los programadores están por debajo del promedio ......
fuente