2009-03-02 11 views
20

¿Cómo encuentras problemas interesantes para resolver?¿Cómo encuentras problemas interesantes para resolver?

A menudo quiero aprender nuevos lenguajes de programación. Sin embargo, siento que a realmente lo entiendo, tengo que escribir algo que es:

  • real que debe resolver algunos problemas del mundo real. Ese problema no tiene que ser nuevo (de hecho, tener una solución de referencia podría ser una buena idea), pero tiene que ser algo que me obligue a resolver algunos detalles sucios y sucios. No quiero resolver acertijos matemáticos ni implementar algoritmos y estructuras de datos, porque eso solo me enseña a resolver problemas matemáticos (o A & DS) en 'new-language.

  • Algo que me apasiona: lleva tiempo aprender los pormenores de un nuevo lenguaje de programación. Eso significa que tengo que ponerme en ese momento. Para ayudarme a mantenerme motivado, quiero resolver problemas que me atraen en algún nivel. Creo que esta parte es la más difícil, al menos para mí, a juzgar por todos mis proyectos a medio terminar; también es la parte más importante. No importa cuán real sea el problema, si no trabajas en él, no aprendes de él.

  • Terminado en conexión con el aspecto apasionado, quiero algo que estoy seguro de poder llevar a un estado enviable cuando solo trabajo en mi tiempo libre. Aunque el "compilador C" es muy mundo real y realmente me gustan los compiladores, es un bocado bastante grande. Incluso un simple evaluador de expresiones es algo que puede rediseñar, depurar y optimizar muchas veces cuando no está familiarizado con las expresiones idiomáticas de un idioma en particular.

Entonces, ¿cómo (o lo haría) resolver el problema de encontrar algo interesante para trabajar?

Las soluciones particulares, es decir, los problemas para trabajar, serán muy apreciadas, pero (perdón por la arrogancia) son solo "conocimiento tonto". Lo que más me impresionará son nuevas formas de pensar y atacar el problema (es decir, algoritmos >> datos: D).

EDIT: los ganadores hasta el momento son "hacer un juego" y "arreglar algo que te molesta (programación | utilizando comptuers)".

La sugerencia del juego es que hay muchos juegos bastante simples que puedo reimplementar (que me dan una gran selección de problemas para atacar), definitivamente son del mundo real, y yo soy un jugador así que ' Me apasionan los buenos juegos.

El "arreglar algo molesto" tiene la pasión y el mundo real integrados, pero requiere que no me arruine que las cosas funcionen y que la solución no modifica ningún programa no escrito en el idioma que quiero aprender

(Ambos ganaron un upvote. Un acepta puede estar en camino)

+0

debería ser wiki de la comunidad – Malfist

Respuesta

2

Cada vez que veo algo está haciendo una y otra vez veo una oportunidad de crear alguna pieza de código reutilizable. Fue eso con mi DAL y muchos otros proyectos en los que trabajé.

+0

Dayam - esa fue mi respuesta ... ¡así que +1 lo es! –

0

Normalmente me parece que ya hay un problema que me he encontrado que podría hacerse más fácilmente en un idioma diferente. Ejemplo: trabajar con archivos PDF en varios idiomas.

3

He recogido este problema "estándar" que he utilizado varias veces para aprender un nuevo idioma.

http://homepage.mac.com/s_lott/books/oodesign.html

Es real. Tiene un valor tangible. Es finiseble

+0

El problema puede ser interesante, pero me da la sensación ineludible de que el diseño propuesto en el libro contiene muchas generalizaciones de YAGNI y muchas clases que simplemente modifican el diseño. –

+0

Algunas de las generalizaciones están ahí para ayudar a aprender las características del idioma. Algunos están allí para enseñar los principios de diseño OO. Entonces, puedes argumentar que son "demasiado generalizados". El "extensible" de una persona siempre es YAGNI de otra persona. Extensible siempre es discutible hasta que realmente lo necesite. –

0

Hmm. Si ese es tu objetivo, entonces puedes intentarlo en dos etapas ... para el lado de los algoritmos, recomiendo mirar algunos de los desafíos de programación out there, y hacerlo junto con la lectura del libro de Skeina Programming Challenges. Proporciona una gran cantidad de teoría acerca de cómo abordar los problemas desde un punto de vista de algoritmos y estructura de datos, y luego lo señala a un grupo de preguntas de muestra donde puede tratar de poner estas ideas en acción por su cuenta. Definitivamente lo pondrá a través del escurridor mental, de una manera muy buena. Muy similar al Proyecto Euler, pero para los algoritmos de núcleo duro y las personas de estructuras de datos, en lugar de las personas de matemáticas.

Por solo "aprender el idioma lo suficiente como para sentir que realmente puedes usarlo", bueno, hay muchas ideas para eso ... para mí, solo para usar un ejemplo, me gusta construir una base de datos sitio web impulsado. Me obliga a hacer muchas cosas que vas a tener que hacer para entrar en un lenguaje de cierta amplitud/profundidad.

Si necesita un ejemplo específico de un sitio, y realmente quiere ser empujado a hacer algo real, puede ponerse en contacto con algunas organizaciones benéficas que le gustan y ver quién necesita un sitio web u otra aplicación para ellos. gratis. Te obligan a aprender, y tienes una razón para hacerlo en un plazo razonable, y obtienen una aplicación útil gratis. Ganar-ganar

+0

"podría contactar a algunas organizaciones benéficas que le gustan [...]" - Me motivaría más el sentido de la obligación (evitar el castigo de tener a la gente decepcionada) que el interés intrínseco (ser recompensado por lograr lo que Lo quería por alguna razón personal). –

+0

¡Exactamente! Sería un excelente motivador si la persona sintiera que necesitaba una buena razón para superar algunas dificultades. Por supuesto, una vez que hubieran terminado, obtendrían las recompensas de haber hecho una buena acción y aprendido lo que querían aprender. – Beska

3

Encuentra algún "problema" en tu propia vida que puedas solucionar con la programación. Si bien es más fácil decirlo que hacerlo, te daré un ejemplo. Recibí uno de esos calendarios con una palabra mezclada para cada día del año (real). Me gustan los acertijos de palabras y tal (pasión) y en ese momento deseaba un proyecto para bucear en python. Así que creé un script de línea de comandos simple para resolver el revoltijo con un back-end sqlite, y he estado haciendo bastante con Python desde entonces. El proyecto está tan terminado como quiero que sea, aún le agrego cosas y sigo mejorando y agregando, pero cumplió su propósito como un proyecto inicial para mí. Así que realmente creo que el truco es encontrar algo en lo que puedas trabajar que esté conectado fácil y directamente a tu vida cotidiana.

12

Para generar ideas, encuentro que siempre es útil preguntar "lo que me molesta de la programación" y "lo que me molesta de trabajar en la computadora".

Terminando cosas es otra historia. Terminando cosas es realmente difícil. Creo que serás más feliz si aceptas que tendrás una cartera de proyectos, muchos de los cuales siguen sin terminar. Si termina todo, tendrá la oportunidad de explorar muchas menos ideas y tecnologías.

elegir cuidadosamente qué proyectos desea terminar, y recordar las palabras de Piet Hein:

acondicionadas en un lugar
donde es fácil ver
la advertencia críptica

T. T. T. 

Cuando sientes lo deprimentemente
Se sube lentamente,
Es bueno recordar que

Things Take Time. 
+1

+1, la paciencia se adquiere y desafortunadamente no es contagiosa. –

7

hacer un juego. Aprenderás muchísimo sobre cualquier idioma. No tiene que ser elegante. Haz un rastreo de mazmorra o algo así.

+0

+1 :) Mi juego favorito de todos los tiempos es 'el cuento del bardo' ...es divertido implementar algo así cuando se aprende un nuevo idioma. –

+0

Mi ejercicio estándar para aprender un nuevo idioma o plataforma es implementar un simulador de video poker. Es lo suficientemente complejo como para no ser trivial, pero es factible en un fin de semana. –

1

que no van en busca de problemas, en clave o de otra manera. En cambio, mantengo los ojos abiertos tanto como sea posible para no perderme la inspiración de soluciones más simples a viejos problemas :)

A veces solo veo a las personas ser personas ... o una cucaracha que realiza sus actividades diarias.

Muchas veces, si lo hace, encontrará nuevos problemas para resolver. No trate de pensar en problemas complejos, hacerlo generalmente conduce a soluciones complejas. Cada pensamiento que piensas entrena tu cerebro, eres tanto lo que comes como lo que piensas.

1

Otra fuente de "inspiración" para los bits de software para desarrollar (o simplemente explorar cómo funciona la tecnología) es la siguiente: "¿Por qué no lo hace?" o "¡Debería funcionar con eso!" momentos. He tenido algunos de esos momentos con cosas como la generación de código de XSD.

Otra fuente es la siguiente: "¡Debe haber una forma más elegante de hacerlo!" momentos. Pequeñas cosas simples como C# "if (x es typea) do_a else if (x es type_b) bo_b else ....". Empieza a pensar sobre mejores formas de hacer las cosas.

Otra fuente, que algunos han mencionado antes, es "¿Podría escribir un sistema para hacer eso?" momento (o la pregunta retórica). Conozco programadores que han jugado con un sistema ISAM por año, retocando aquí y allá simplemente porque gusta jugar con él. Ni idea de siquiera terminar el proyecto, solo jugando con diferentes ideas e implementaciones.

0

Mantengo una lista de proyectos/clases/funciones para crear "cuando obtengo el tiempo y la inclinación". Mantengo listas similares para otros pasatiempos. Luego, siempre hay algo que hacer si me siento aburrido o si quiero un desafío.

1

Aunque no parecer mundo real, he tenido una idea para una buena fuente de proyectos que son al menos terminable, y probablemente algo que debe estar motivado para hacer (una vez más, se debe usar hilo dental todos los días: p).

Para revisar y probar la comprensión, implemente varios algoritmos que haya aprendido como parte de su educación CS.Algunos proyectos:

  • implementan una biblioteca de autómatas de estado finito, con pruebas de pertenencia lingüística, construcción de productos y minimización de brzozowski.
  • implementa flujo máximo, flujo de costo mínimo y un programa lineal de solución.
  • implementan reducciones entre problemas selectos de NP-complete, aproximaciones de tiempo polinomiales y solucionadores de fuerza bruta.
  • escribir su propia implementación de algoritmos criptográficos (pero no los usa: D)

IIRC, mona es una thingie autómata de estados finitos utilizado para verificar la exactitud de un circuito eléctrico; ISTR mi profesor habla de las aplicaciones de la programación lineal en economía, y gcc no registra la asignación (que es el coloreado de gráficos, que es NP-completo). Crypto, por supuesto, asegura todas las transacciones con tarjeta de crédito en línea. Entonces, no es completamente irreal: mundo :)

1

¿Estoy demasiado tarde? aquí hay un problema "sub-real". Como te gustó el juego. Compruebe esto Java4K, debe hacer un juego en 4096 bytes solamente. Aprenderá mucho sobre Java, la optimización de muchos códigos y, por supuesto, cómo pensar de manera simple.

Y al final del día, tendrá un nuevo juego :)

0

Usted podría tratar de codificación de una solución a un problema real de un amigo o miembro de la familia tiene en un ordenador. Esta podría ser una forma particularmente buena de practicar la codificación si estás creando la solución para alguien que relativamente no tiene experiencia con las computadoras: ese tipo de personas te harán preguntas que ningún codificador nunca haría. Estas preguntas del mundo real sobre su solución podrían ser cosas como "¿Por qué aparece esto en una ventana negra con toda esta escritura?" - en referencia a un script que se ejecuta desde un símbolo del sistema de DOS. Cuando recibe preguntas como esa, necesita tener una comprensión firme de su propia comprensión del idioma y debe ser capaz de responder en términos sencillos para poder responderlas.

Estoy en proceso de aprender perl por el momento y lo estoy usando para diseñar un sistema de administración de propiedades para un miembro de la familia que dirige un complejo de apartamentos.

Al crear algo para alguien que está cerca de ti y esperar que lo termines, es posible que te sientas más motivado para escribir la solución completa en lugar de parar a mitad de camino.

Cuestiones relacionadas