design - thinking - ¿Cómo puedo mejorar el diseño de mi programa y la técnica de resolución de problemas?
metodologia design thinking en español (20)
He estado codificando desde hace un tiempo y estoy cómodo con algunos lenguajes de programación, pero ahora siento que necesito mejorar mi resolución de problemas o la técnica de diseño de programas.
¿Qué habilidades necesito para poder diseñar un programa como solución a un problema?
Más: la pregunta es sobre cómo diseñar una solución en lugar de cómo codificar mejor.
Busque un mentor (alguien que haya trabajado en su dominio problemático en particular durante muchos años) y aprenda de ellos.
Mi mejor código proviene de las revisiones por pares, formales e informales. Leer libros y aprender sobre patrones de diseño es genial, pero la mejor respuesta es cuando alguien puede señalar directamente el código en el que está trabajando y decir "Necesita cambiar esto, esto y aquello".
Los comentarios específicos y constructivos de tus compañeros son inmediatamente útiles.
Comienza a jugar en idiomas diferentes al que estás usando ahora. Y con eso no quiero comenzar a usar Java como desarrollador de .Net.
Elija un idioma que no considere utilizar en un entorno de producción. Un lenguaje que funciona de manera totalmente diferente y que tiene por alguna razón un devoto siguiente. Lisp viene a la mente aquí.
La idea aquí es que comiences a usar un lenguaje que cambie tu forma de pensar. A veces necesitas golpear tus engranajes oxidados con una gran almádena para que vuelvan a girar. Un lenguaje extraño podría ser este martillo.
En mi opinión, la mejor manera de pasar del nivel intermedio al avanzado es:
Lea el buen código escrito por otras personas.
Primero debe comprender la teoría básica, por supuesto. Pero hay un punto que no se puede superar simplemente leyendo la teoría. Pasar de allí requiere mucho trabajo, y eso significa experiencia práctica para leer y escribir código.
Encontré este libro como una muy buena guía para escribir software fácil de mantener y bien diseñado. Enseña cómo crear una solución, explicando cómo reconocer cuándo usar técnicas de programación orientadas a objetos para crear un enfoque más modular y bien diseñado.
texto alternativo http://headfirstlabs.com/Images/hfooad_cover.gif
Estoy de acuerdo con la publicación anterior sobre Code Complete, también investigo sobre Test Driven Development y The SOLID Principles.
Hay muchos enfoques / sugerencias diferentes.
Libros. El diseño por patrones, diseño elegante, etc., algunos se aplican al software de otros a cómo los problemas de ingeniería fueron resueltos en general.
Código de código de código Codifique por diversión, codifique solo por codificar, tome un problema que ABSOLUTAMENTE no tiene nada que ver con el trabajo, y simplemente codifíquelo (en su propio tiempo, por supuesto). Terminará resolviendo el mismo problema de múltiples maneras, y con suerte comenzará a ver los problemas de manera diferente. O podríamos decir "pensar fuera de la caja".
Estar a la altura. Cuando te encuentras con un problema, la única solución que puedes encontrar es "feo" o "sucio". Asómbrese al desafío de encontrar una solución elegante. Las soluciones elegantes son 90% obsesivo compulsivo, 10% sádico, al menos cuando comienzas.
No seas tímido para hacer preguntas. Creo que puedes tener esta abajo. Así que sigue haciendo preguntas.
La solución más efectiva que he encontrado es encontrar un problema y atacarlo. Comience con pequeños problemas y siga subiendo. Si es necesario, cree problemas (aunque no en el trabajo, y ciertamente no en una rama primaria).
Una vez que comprenda el problema, trate de resolverlo usted mismo. Si fallas, busca la mierda de esto. Incluso si el primer golpe en Google soluciona tu problema, mira los demás de todos modos. le ayudará a comprender el proceso de resolución de problemas y cómo funcionan las mentes de las personas.
Lea sobre estructuras de datos y algoritmos. Puse las estructuras de datos primero porque cuanto más tiempo estoy en el negocio del software, más me doy cuenta de que realmente se trata de estructuras de datos. Muéstrame tus estructuras de datos y probablemente pueda adivinar tus algoritmos de todos modos. Debe comprender cómo la selección de las estructuras de datos correctas puede hacer o deshacer un sistema, y cómo decidir entre ellos. Sugiero leer acerca de los algoritmos porque algunos algoritmos son muy contraintuitivos, y es poco probable que los descubras por ti mismo cuando te estás dando vueltas con un problema. Los libros de algoritmos de Sedgewick son bastante buenos, si aún están en papel.
Code complete es un excelente libro (vale la pena el precio para el capítulo sobre optimización - "ajuste de código" - solo), pero para el diseño ... no estoy tan seguro. La segunda edición puede ser mejor en esto, solo tengo la primera ... y ahora está muy cabreada :-)
Leer y hablar sobre esto ayudará. La experiencia también es excelente (suponiendo que no solo refuerce los malos hábitos).
Un mentor es el mejor.
En ausencia de eso, escriba algo, luego bórrelo. Luego escriba otra vez un par de días después.
Suena raro, pero la segunda vez harás un trabajo mucho mejor :-) Al igual que las hormigas, nuestras líneas se vuelven más rectas cuanto más viajamos por el mismo camino.
Pablo.
Mantenga una lista de todos los problemas que usted u otros tienen extendiendo o manteniendo su código.
Revise regularmente esa lista y ordene por la cantidad de dificultad. Luego, cree o encuentre prácticas que minimicen las dificultades y las incluya en su lista de "mejores prácticas" en constante evolución.
Me sorprende cuánta gente sugiere código completo u otros libros. En mi experiencia, las personas obtienen mayores logros / habilidades de ganancia al trabajar con otros desarrolladores más experimentados. Un modelo de mentor / aprendiz funciona muy bien aquí. Los dos trabajan junto con las decisiones que guían al mentor, pero analizan todos los asuntos para ayudar a la persona más joven a entender.
Ver a un maestro en acción y cómo funcionan y en qué piensan es una excelente forma de aprender. Además, si las personas tienen diferentes formas de trabajar o pensar, pueden ver otros puntos de vista / aspectos de cómo hacer el trabajo / trabajo.
IMO nada puede coincidir con el modelo de mentor. Hacer muchas codificaciones y diseños también es una forma de obtenerlo, pero no se obtiene esa ayuda que es tan crucial para apoyarse en los hombros de los demás.
Para la técnica de resolución de problemas, observe cómo otras personas han resuelto problemas. Recomiendo The Algorithm Design Manual y Algorithms in a Nutshell . Estos dos libros lo llevan de una declaración de problema a través de varias iteraciones de soluciones para mostrarle el proceso de pensamiento, en lugar de ir directamente a la solución final.
Para los principiantes sugeriría leer el libro de Steve McConnell "Code Complete, 2nd Edition"
Para mejorar en la codificación, codifique más.
Creo que disfrutarás de Programming Pearls . Es muy legible, repleto de consejos, y me dio mucha información sobre cómo abordar los problemas.
También practica en una clase de problemas repetidamente hasta que comiences a reconocer sus patrones y características. Los jueces en línea como SPOJ son buenos para esto.
También me requirieron tomar una introducción al diseño y análisis del curso de algoritmos en la universidad. Como han mencionado otros, tener a alguien más informado como un mentor puede ahorrarle una mirada de tiempo y dolor cuando se queda atascado. Pero para mí solo poder hablar y mis pensamientos con personas como mis compañeros de clase me obligaron a pensar con más cuidado.
Ahora si supiera lo que ese tipo de Donald Knuth está fumando ...
Hablando de libros, sugiero este genial, por Martin Fowler
utilice la gran biblioteca de proyectos de código abierto como source forge o google code. intenta implementar una parte de uno de esos proyectos y luego compara. figura qué es mejor en cada diseño. el aprendizaje es una investigación que conduce al descubrimiento.
lo siento accidentalmente enviar una respuesta duplicada, no he descubierto cómo eliminar
utilice la gran biblioteca de proyectos de código abierto como source forge o google code. intenta implementar una parte de uno de esos proyectos y luego compara. figura qué es mejor en cada diseño. el aprendizaje es una investigación que conduce al descubrimiento.
1) Lee todos los libros que puedas.
2) Estudia la mayor cantidad de código fuente abierto que puedas.
3) Código, revisión de código y programación de pares tanto como sea posible.
buena suerte :)