Siento que soy bueno escribiendo código en partes y piezas, pero mis diseños realmente apestan. La pregunta es, ¿cómo mejoro mis diseños y, a su vez, me convierto en un mejor diseñador?
Creo que las escuelas y las universidades hacen un buen trabajo al enseñar a las personas cómo ser buenos en la resolución de problemas matemáticos, pero admitamos el hecho de que la mayoría de las aplicaciones creadas en la escuela generalmente tienen alrededor de 1000 a 2000 líneas de largo, lo que significa que es principalmente un ejercicio académico que no refleja la complejidad del software del mundo real, del orden de unos cientos de miles a millones de líneas de código.
Aquí es donde creo que incluso los proyectos como topcoder / project euler tampoco serán de mucha ayuda, podrían agudizar su capacidad de resolución de problemas matemáticos, pero podría convertirse en un programador académico; alguien que está más interesado en las cosas agradables y limpias, que no está interesado en el día a día, las cosas mundanas y peludas con las que se ocupan la mayoría de los programadores de aplicaciones.
Entonces, mi pregunta es ¿cómo mejoro mis habilidades de diseño? Es decir, la capacidad de diseñar aplicaciones de pequeña / mediana escala que se incluirán en unos pocos miles de líneas de código. ¿Cómo puedo aprender habilidades de diseño que me ayuden a construir un mejor kit de editor html o algún programa de gráficos como gimp?
Respuestas:
La única manera de llegar a ser realmente bueno en algo es intentarlo, fallar espectacularmente, volver a intentarlo, fallar un poco menos que antes y, con el tiempo, desarrollar la experiencia para reconocer las causas de sus fallas y poder manejar las posibles situaciones de falla más adelante. Esto es tan cierto para aprender a tocar un instrumento musical, conducir un automóvil u obtener algo de PWN-age serio en su juego de disparos en primera persona favorito, como lo es aprender cualquier aspecto del desarrollo de software.
No hay atajos reales, pero hay cosas que puede hacer para evitar que los problemas se salgan de control mientras adquiere experiencia.
fuente
Bueno, no hay una manzana de oro para este tipo de preguntas, y creo que tal vez sea para que cada codificador encuentre lo que es adecuado para él. Aquí está mi opinión, de todos modos.
Usted podría leer libros sobre el tema. Grandes libros Libros fantasticos. Pero creo que estos libros solo lo ayudan una vez que ha intentado crear y diseñar una aplicación, y ha fallado.
Para mí, todo se trata de experiencia. Cuando comencé como novato, leía libros sobre cómo diseñar. No entendía mucho del contenido en aquel entonces. Cuando comencé a trabajar y tuve que diseñar aplicaciones yo mismo, hice aplicaciones muy desordenadas. Funcionaron, pero fueron un dolor de mantenimiento. Luego volví a leer esos libros, y esta vez los entendí mejor.
Ahora, sigo cometiendo nuevos errores y aprendiendo de los viejos.
fuente
Deja de diseñar y aprende a refactorizar el código. El desarrollo incremental con refactorización continua y agresiva dará como resultado un producto final mucho más limpio que cualquier diseño inicial.
fuente
Lea sobre patrones, claro, pero antes que nada lea sobre antipatrones. Reconocer los antipatrones es importante, y es más fácil entender por qué algo no debe hacerse de tal manera que por qué debería hacerse.
Ver http://sourcemaking.com/antipatterns/software-development-antipatterns por ejemplo.
Escriba el código para que pueda ajustarse rápidamente si los requisitos cambian (lo cual es muy común en el entorno de producción).
Sea súper escéptico sobre agregar "solo un pequeño truco más" Uno más aquí, uno más allá, y el código se vuelve imposible de mantener.
Valorar el principio abierto / cerrado .
Escribir pruebas (como en TDD). Te obligan a pensar en tu diseño incluso antes de implementarlo.
Explore el código de proyectos de código abierto (es decir, de tamaño razonable). Solía sorprenderme, por lo general, ver tantos niveles de abstracción. Ahora entiendo que no es arte por el arte, hay una razón por la que se hace de esta manera.
fuente
Un principio que considero muy importante para un buen diseño es la descomposición: si una clase es demasiado grande (más de, digamos, 300-400 líneas de código), divídala en clases más pequeñas; si un método es demasiado grande (digamos, más de 50 líneas de código) descomponerlo; Si un proyecto contiene más de 50 clases, descomponga.
La clave es estimar el tamaño de su sistema y construir varias capas de abstracción (por ejemplo, subsistema, aplicación, proyecto, módulo, clase, método) que le permitan descomponer su código en unidades comprensibles con relaciones claras entre ellos y pocas dependencias.
fuente
Es difícil, de lo que realmente estamos hablando es de la capacidad de abstraer en lugar de crear un mejor código, pero dos cosas lo harán mejor y una cosa lo hará más feliz:
"Mejor"
A) Encuentre el mejor diseñador que pueda y empareje el programa / haga un diseño juntos. Pídales que expliquen lo que están pensando mientras abordan el problema, no se conforme con "simplemente se siente bien" y siga investigando. Ese proceso también ayudará a la fiesta de "tutoría"
B) Imagina todo como actores individuales y conversaciones entre ellos. Cada uno de los actores debe tener un solo rol / responsabilidad y grupos de ellos manejan diferentes sistemas. Si esa conversación funciona y cada actor se siente coherente y cohesivo, entonces estás en camino.
Y "más feliz"
C) Si ha hecho todo lo posible y todavía no está sucediendo, entonces no hay nada de malo en aceptar que algunas personas no pueden hacer algunas cosas. Podrías escribir código apretado y brillante, pero nunca ser capaz de diseñar o diseñar. ¿Y qué? No puedo practicar deportes físicos por el caramelo, no soy guapo y la conducción de mi automóvil nunca será mejor que el promedio. Disfruta y utiliza en lo que eres bueno.
fuente
En mi experiencia personal, leer el código de otros es una buena fuente de "inspiración". Me refiero a tratar de entender los diseños de otras personas y preguntarte por qué él / ella hace las cosas de esa manera.
puedes encontrar muchos proyectos de código abierto para investigación.
de todos modos necesitas práctica.
fuente
No vivas con miedo
Lucha por la simplicidad
Escucha a tus usuarios
Prueba muchas ideas
Crea algo, luego hazlo mejor
Trabaja en cosas que agregan valor, abandona cosas que no
fuente
Aprende a hacer las preguntas correctas. La mayoría de las veces mejorará su diseño al ver el problema desde un ángulo diferente. En particular, esto le ayudará a dejar de centrarse en resolver el problema en cuestión y buscar más soluciones que resuelvan múltiples problemas relacionados.
fuente