¿Cuáles * son * los conceptos de programación que debo dominar para tener una comprensión profunda de mi oficio (programación)? [cerrado]

13

En orden de importancia, si es posible hacerlo y puede que no lo sea, cuáles son los fundamentos más importantes de saber cómo programar. Algoritmos, iteración, recursión, etc?

Tenga en cuenta que donde coloco etc. es donde radica mi pregunta. Recientemente leí una publicación en Internet que decía que 9 de cada 10 programadores no pueden jadear .

enlace

Quiero tener un conocimiento profundo de lo que realmente estoy tratando de lograr cuando programo 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.

    
pregunta Kewigro 30.01.2013 - 02:21

6 respuestas

18

Esta lista es un comienzo ... ¡estás haciendo una gran pregunta!

  • Cómo aclarar y anotar lo que quieren los clientes ("requisitos"). Esto es un arte en sí mismo. Si puedes hacer esto, tu trabajo de programación será mucho mejor.
  • Cómo estimar y planear el proyecto. La gente le pedirá un presupuesto, esté preparado.
  • Cómo revisar constructivamente el código de otras personas.
  • Patrones de diseño. Este es un grande. Pero no los uses con demasiado celo por el simple hecho de hacerlo.
  • Aprenda la diferencia entre un error, un problema y las solicitudes de características
  • Manténgase actualizado con los marcos / bibliotecas. No tienes que usarlos, pero necesitas saber qué hacen y sus pros y contras. Si algo parece demasiado difícil, entonces probablemente (con suerte) haya una forma mucho más fácil de hacer las cosas.
  • Cómo documentar algoritmos complicados en un diagrama de flujo o simplemente escribirlo en inglés. No espere que alguien pase 2 días tratando de aplicar ingeniería inversa a su código.
  • Cómo organizar la estructura de su código para que cualquier otra persona pueda entenderlo
  • Cómo comentar tu código
  • Cómo escribir pruebas unitarias
  • Sepa qué está pasando bajo el capó. Por ejemplo, llamar a un servicio web, ¿qué está haciendo realmente?
  • Cómo abstraer la lógica en clases.
  • Cómo refactorizar el código
  • Aprende la esencia de bastantes lenguajes de programación. Te sorprendería lo que puedes aprender de otras áreas
  • Cómo decirle a otros programadores qué escribir.
  • Cómo explicar a la gerencia lo que estás haciendo y por qué.
  • Como dijo Peter, cómo depurar. Estoy de acuerdo con todo lo que dice, los programadores reales depuran, no solo adivinan.
  • Cómo trabajar con maníacos. Hay muchos de ellos ahí fuera.
  • Cómo hacer las cosas. Toda la teoría en el mundo no te ayudará si no puedes hacer las cosas.

Aquí respondí otra pregunta en líneas similares (con contenido similar):

consejos, directrices, puntos ¿Recordar para representar código profesional?

    
respondido por el Rocklan 30.01.2013 - 05:13
21

Bajo el encabezado de " etc. " aparece algo que puede tomar fácilmente el 50% o más de tu tiempo.

Aprende a depurar.

Esto significa aprender el Método científico . Quiero decir realmente aprendiéndolo. Y luego aplicándolo con brutal autoestima . Aprenda a expresar con precisión lo que sabe que es verdad, lo que sabe que es no y las cosas que no sabe. Cada vez que asignas un artículo a la categoría incorrecta de manera descuidada, acabas de hacer de tu vida un lote más difícil.

Aprende a decir "Pienso" en lugar de "Lo sé". Solo puedes decir "Lo sé" cuando "piensas" que algo es verdadero (o falso), y luego lo demuestras.

Muchos errores son triviales, pero pueden ser difíciles de ver porque "sabes" 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 conozca su código, pero a quien usted conoce, no puede dejar atrás a BS. Don No te sorprendas si en medio de una descripción para ellos, de repente te detienes y dices, "y así puedes ... ver ... ver que ... sh * t. Gracias".

Los errores no triviales requieren un arsenal de técnicas. Un clásico que puede enfocar 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 valla cortando el estado por la mitad. ¿De qué lado está el lobo? Cortar ese lado por la mitad. Hacer espuma, enjuagar, repetir. Hacer esto 20 veces en lugares bien elegidos en el código reduce el área donde el error (lobo) puede ser 1/1048576. Mata a ese lobo.

Consejo: busque handwaves : físico, mental o de cualquier otro tipo. Tan pronto como usted (o su colega) se estremezca / desvíe / minimice la atención prestada a una parte del código, vaya totalmente rabioso . Debido a que en el área donde simplemente sabes no se puede encontrar el error, aunque hayas pasado horas / días buscando el objeto d * mn y aún no lo puedas encontrar ... eso es lo más alto ubicación de probabilidad para el error. Nadie recibe un 'bye' , nadie (incluido el equipo, el sistema operativo, el compilador o usted ) obtiene cualquier tipo de "debido respeto". Hay un error. Período. Fin de la oración. Ahora ve a matar la cosa d * mn.

No conozco ninguna escuela que enseñe la depuración como un tema en sí mismo. IMNSHO, esta puede ser la evidencia más clara que ellos (las universidades / profesores) no le están enseñando a ser programador, sino que, en cambio, ¿le están enseñando a ser ... como ellos? ¿Duro? Quizás. ¿Cierto? Toma una decisión. Ahora demuéstralo.

    
respondido por el Peter Rowell 30.01.2013 - 02:58
3

Me temo que esta es una pregunta bastante grande para que cualquiera la responda de manera concluyente o autoritaria, especialmente porque desea una lista de prioridades. Hay muchos programadores por ahí, y trabajan en cosas muy diferentes; claro, los fundamentales permanecen igual, pero lo que necesitas para mantenerte activo en tu memoria puede ser realmente diferente, y de hecho hay muchas tareas en las que puedes mantenerte guapa de alto nivel sin ir más profundo.

Sin embargo, parece que estás realmente preocupado por cómo ser un mejor desarrollador, y no solo un intercambio de dinero. Me parece 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. A su vez, son ejemplos de la pregunta más amplia: ¿cómo podemos modelar las cosas y los procesos del mundo real en una representación tal que una computadora pueda entender? Si 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 un momento dado, después de haber jugado con estructuras de datos y algoritmos, puede comenzar a hacer esa pregunta "pero, ¿cómo pasamos de decirle a la computadora qué hacer, a la computadora que realmente lo está haciendo?" 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 en particular interfaz de disco duro.

Este es probablemente un buen punto para comenzar: 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. Saber lo último es muy útil para dominar idiomas de nivel inferior como C, que utilizan mucho menos humo y espejos que OO y lenguajes de scripting :)

    
respondido por el RuslanD 30.01.2013 - 02:34
2

YAGNI : "Siempre implemente cosas cuando realmente las necesite, nunca cuando simplemente 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 solo aumentará de tamaño y agregará complejidad al código.

    
respondido por el Louis Rhys 30.01.2013 - 07:59
1

Lo más importante que se debe saber acerca de ser programador es que escribir código es una rutina, y una actitud de "obrero" similar a un trabajador para producir lo que se te paga por producir te 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 tener muchas cosas en tu cabeza y cómo se interoperan todas al mismo tiempo. Una vez que tenga la costumbre de ingresar a la zona a voluntad, comience a preocuparse por el resto. Hasta que puedas eliminar el código como una especie de código, el resto es prácticamente inútil.

EDITAR:

Si no crees en esto y me bajas, creo que no sabes si tienes la determinación de hacerlo durante 20 años. Sé que lo hago porque acepto esto. ;)

    
respondido por el Nathan C. Tresch 30.01.2013 - 03:31
0

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 "humildad" ... Una vez que aceptes que no lo sabes todo, estás abierto a explorar soluciones. La mayoría de las personas que escriben blogs sobre programación se encuentran en el percentil más alto, y el problema es que muchas aún tienen que controlar sus tendencias narcisistas ... por lo que hacen un blog ... Debes aprender a identificar a estos bloggers y ignorar que hay rants

El blog vinculado no es realmente nada más que una perorata: en todas las industrias, las quejas de que los recién graduados son inútiles son comunes, que lleva años para que sean útiles y productivos. Quizás el problema es que estos gurús autoproclamados en realidad esperan demasiado y se han olvidado de que una vez no hubieran 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 ......

    
respondido por el mattnz 30.01.2013 - 02:47

Lea otras preguntas en las etiquetas