2009-02-20 10 views
17

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.¿Cómo puedo mejorar el diseño de mi programa y la técnica de resolución de problemas?

¿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.

Respuesta

21

Hay muchos enfoques/sugerencias diferentes.

  1. 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.

  2. 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".

  3. Asciende al desafío. 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.

  4. No sea tímido para hacer preguntas. Creo que puedes tener esta abajo. Así que sigue haciendo preguntas.

+0

¿Dónde puedo encontrar algunos problemas agradables que pueda usar para codificar? – Ali

+0

Elija uno al azar. Depende del idioma, etc., en el que codifique. Pero, ¿qué le parece escribir un código para salir y leer todos los feeds de RSS y enviarle un correo electrónico con las palabras clave? Encontrar problemas para codificar es, hasta cierto punto, reinventar la rueda. Pero a tu manera única. – Infamy

+0

Ahora tengo claro a qué se refiere, gracias. Mi experiencia en .NET es que hay un sitio web donde las personas publican ideas y problemas que tienen en mente. – Ali

6
+0

De acuerdo, aunque puede ser un poco demasiado para principiantes, realmente es la biblia de la construcción de software. –

+1

Tiene alrededor de 1000 páginas, ¿realmente lo vale? – Ali

+0

@Ali: Definitivamente vale la pena. Ya no recomiendo este libro porque siento que es evidente, pero todo desarrollador profesional debería leerlo. –

2

me acuerdo con el comentario anterior sobre código completo, también investigue un poco sobre el Desarrollo impulsado por prueba y los Principios SÓLIDOS.

7

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.

2

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.

2

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, crea problemas (aunque no en el trabajo, y ciertamente no en una rama principal).

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.

+0

La misma pregunta que le hice a Infamy, ¿cómo puedo encontrar algunos buenos problemas para resolverlos? – Ali

+0

1: Únete al equipo de software de una gran empresa, siempre tienen problemas. 2: Únete a un proyecto de OSS como FireFox o MetaWeblog. 3. Rompe algo. – tsilb

0

Lea sobre las 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.

El código completo es un excelente libro (vale la pena el precio para el capítulo de 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 :-)

-3

Para mejorar la codificación, codifique más.

+0

La pregunta es sobre cómo diseñar una solución en lugar de cómo codificar mejor. – Ali

3

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 manera 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 conseguirlo, pero no se obtiene esa ayuda que es tan crucial para apoyarse en los hombros de los demás.

+0

Es una buena idea, pero ¿cómo se puede encontrar un mentor? – Ali

+0

Mis disculpas: escribía como una persona que pasó su vida profesional en empresas con los recursos para proporcionar esto. En cuanto a los aficionados, esa es una buena pregunta. Probablemente pueda encontrar gente por aquí dispuesto a discutir los pros y los contras de sus diseños si los publica. – Tim

0

En mi opinión la mejor manera de intermedio a nivel avanzado es:

leer bueno código escrito por otras personas.

Primero debe tener una idea de 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.

+0

¿Dónde puedes encontrar esos códigos? – Ali

+0

Existen muchos proyectos de código abierto en sourceforge, etc. Sin embargo, no todos los códigos son geniales, pero probablemente encontrará buenos ejemplos en muchos proyectos de código abierto establecidos. –

+0

Sourceforge.net no es el único lugar. Hay muchos otros como codeplex.com, code.google.com, github.com ... –

1

Comience a jugar en un idioma diferente al que está utilizando 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.

3

Encuentra un mentor (alguien que ha trabajado en tu dominio problemático en particular durante muchos años) y aprende 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".

La retroalimentación constructiva específica de sus compañeros es inmediatamente útil.

1

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.

Paul.

1

Creo que disfrutará 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 comienzas 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 curso de diseño y análisis 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 bien, si sólo supiera lo que Donald Knuth tipo es fumar ....

1

utilizar la gran biblioteca de proyectos de código abierto como forja fuente o código de Google. 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.

0

siento acccidently enviar una respuesta por duplicado, no han descubierto la manera de eliminar

utilizan la gran biblioteca de proyectos de código abierto como forja fuente o código de Google. 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.

0

1) Lea todos los libros que pueda.

2) Estudia la mayor cantidad de código fuente abierto que puedas.

3) Codifique, revise el código y programe los pares tanto como pueda.

buena suerte :)

Cuestiones relacionadas