discovery - song - tags para hacer con amigos
¿Cómo encuentras problemas interesantes para resolver? (15)
¿Cómo encuentras problemas interesantes para resolver?
A menudo quiero aprender nuevos lenguajes de programación. Sin embargo, siento que para entenderlo realmente , debo escribir algo que es:
Real: debería resolver algún problema del mundo real. Ese problema no tiene que ser nuevo (de hecho, tener una solución de referencia puede 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 o implementar algoritmos y estructuras de datos, porque eso solo me enseña cómo resolver problemas de matemáticas (o A&DS) en
''new-language
.Algo que me apasiona, lleva tiempo aprender los entresijos de un nuevo lenguaje de programación. Eso significa que tengo que poner en ese tiempo. Para ayudarme a mantenerme motivado, quiero resolver los 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 qué tan real sea el problema, si no trabajas en él, no aprendes de él.
Terminable: conectado con el aspecto apasionado, quiero algo que confío poder llevar a un estado enviable cuando solo trabajo en mi tiempo libre. A pesar de que "compilador C" es un mundo muy real y realmente me gustan los compiladores, es un bocado algo 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) resolvería el problema de encontrar algo interesante para trabajar?
Las soluciones particulares, es decir, los problemas en los que se trabajará, serán muy apreciadas, pero (perdón por la arrogancia) son simplemente "conocimiento tonto". Lo que más me impresionará son las nuevas formas de pensar y atacar el problema (es decir, algoritmos >> datos: D).
EDITAR : los ganadores hasta ahora son "hacer un juego" y "arreglar algo que te moleste (programación | uso de comptuers)".
La sugerencia del juego es que hay muchos juegos razonablemente simples que puedo reimplementar (que me dan una gran variedad de problemas para atacar), definitivamente son un mundo real, y soy un jugador, así que me apasiona el bien. juegos.
El "arreglo de algo molesto" tiene la pasión y el mundo real integrados, pero requiere que no me estropee que las cosas simplemente funcionen y que el arreglo no modifique algún programa que no esté escrito en el idioma que quiero. aprender.
(Ambos ganaron un voto a favor. Una aceptación puede estar en camino)
Aunque no es aparentemente del mundo real, he tenido una idea para una buena fuente de proyectos que al menos se pueden terminar, y probablemente debería motivarte a hacer esto (nuevamente, debes 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 en CS. Algunos proyectos:
- implementar una biblioteca de autómatas de estado finito, con pruebas de pertenencia al idioma, construcción de productos y minimización de brzozowski.
- implementar el flujo máximo, el flujo de costo mínimo y un solucionador de programa lineal.
- implementar reducciones entre problemas NP-completos seleccionados, aproximaciones de tiempo polinomiales y solucionadores de fuerza bruta.
- escriba su propia implementación de algoritmos criptográficos (pero no los use: D)
IIRC, mona es un autómata de estado finito usado para verificar la corrección de un circuito eléctrico; Mi profesor de ISTR habla sobre las aplicaciones de la programación lineal en economía, y gcc sí registra la asignación (que es coloración gráfica, que es NP-completa). Crypto, por supuesto, asegura todas las transacciones de tarjetas de crédito en línea. Así que no es un mundo completamente irreal :)
Cada vez que veo que algo se está haciendo una y otra vez, veo la oportunidad de crear un código reutilizable. Fue con mi DAL y muchos otros proyectos en los que trabajé.
Encuentra algún "problema" en tu propia vida que puedas resolver 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 mezcla de palabras para cada día del año (real). Me gustan los rompecabezas de palabras y tal (pasión) y en ese momento quería un proyecto para sumergirme en Python. Así que creé un sencillo script de línea de comandos para resolver los jumbles con un backend sqlite, y he estado haciendo bastante con python desde entonces. El proyecto está tan terminado como quiero, todavía le agrego cosas y sigo mejorándolo y añado, pero cumplió su propósito como proyecto de inicio para mí. Así que realmente creo que el truco es encontrar algo en lo que pueda trabajar que se conecte fácil y directamente a su vida diaria.
Hacer un juego Aprenderás mucho sobre cualquier idioma. No tiene que ser lujoso. Hacer un rastreo de mazmorra o algo así.
Hmm Si ese es su objetivo, entonces puede intentarlo en dos etapas ... por el lado de los algoritmos, sugeriría encarecidamente que analice algunos de los desafíos de programación que hay por ahí , y hágalo junto con leer el libro Desafíos de programación de Skeina. 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 ejemplo donde puede intentar poner estas ideas en acción por su cuenta. Definitivamente te 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.
Solo por "aprender el idioma lo suficiente como para sentir que realmente se puede usar", bueno, hay muchas ideas para eso ... para mí, solo para usar un ejemplo, me gusta crear un sitio web basado en bases de datos. Me obliga a hacer muchas cosas que vas a tener que hacer para aprender un idioma en profundidad.
Si necesita un ejemplo específico de un sitio, y realmente quiere que lo empujen 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 que se haga de forma gratuita. Se ve obligado a aprender, y tiene una razón para hacerlo en un plazo de tiempo razonable, y obtienen una aplicación útil de forma gratuita. Ganar-ganar
Jeff Atwood escribió en su blog sobre la práctica de codificación "código kata" hace un tiempo.
http://www.codinghorror.com/blog/archives/001138.html
Ver también (referencia en el blog de Jeff):
Mantengo una lista de proyectos / clases / funciones para crear "cuando obtengo el tiempo y la inclinación". Mantengo listas similares para otras aficiones. Entonces siempre hay algo que hacer si me siento aburrido o quiero un desafío.
No voy buscando problemas, ni en código ni en ningún otro. En vez de eso, mantengo mis ojos abiertos tanto como sea posible para que no me pierda la inspiración de soluciones más simples a problemas antiguos :)
A veces solo veo a las personas ser personas ... o una cucaracha haciendo sus actividades diarias.
Muchas veces, si haces eso, encontrarás nuevos problemas que resolver. No intente pensar en problemas complejos, ya que esto generalmente conduce a soluciones complejas. Cada pensamiento que piensas entrena tu cerebro, eres tanto lo que comes como lo que piensas.
Otra fuente de "inspiración" para que partes de software se desarrollen (o simplemente explora cómo funciona la tecnología) son esos "¿Por qué no hace frente a eso?" 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 son esos "¡Debe haber una manera más elegante de hacer eso!" momentos Pequeñas cosas simples como la C # "si (x es typea) do_a else if (x es type_b) bo_b else ....". Empieza a pensar en mejores formas de hacer las cosas.
Otra fuente, que algunos han mencionado anteriormente, es "¿Puedo escribir un sistema para hacer eso?" Momento (o la pregunta retórica). Conozco a programadores que han jugado con un sistema ISAM durante un año, y han hecho ajustes aquí y allá solo porque les gusta jugar con él. No tengo idea de siquiera terminar el proyecto, solo jugar con diferentes ideas e implementaciones.
Para generar ideas, siempre me resulta útil preguntar "qué me molesta de la programación" y "qué me molesta de trabajar con la computadora".
Terminar las cosas es otra historia. Terminar las cosas es muy difícil . Creo que estará más contento si acepta que tendrá una cartera de proyectos, muchos de los cuales quedan sin terminar. Si termina todo, tendrá la oportunidad de explorar muchas menos ideas y tecnologías.
Elija con cuidado qué proyectos desea terminar y recuerde las palabras de Piet Hein:
Poner en un lugar
donde es fácil de ver
la amonestación críptica
T. T. T.
Cuando sientes lo deprimente
lentamente subes,
es bueno recordar eso
Things Take Time.
Por lo general, encuentro que ya hay un problema con el que me he encontrado y que podría hacerse más fácilmente en un idioma diferente. Ejemplo: trabajar con archivos PDF en varios idiomas.
Puede intentar codificar una solución a un problema real que tenga un amigo o familiar en una computadora. Esta podría ser una manera particularmente buena de practicar la codificación si está creando la solución para alguien que no tiene experiencia con las computadoras. Ese tipo de personas le harán preguntas que otro programador nunca lo haría. Estas preguntas del mundo real acerca de su solución podrían ser cosas como: "¿Por qué aparece esto en una ventana negra con todo esto escrito?" - en referencia a un script que se ejecuta desde un indicador de comando de DOS. Cuando te golpean con preguntas como esas, necesitas tener un conocimiento firme de tu propio entendimiento del idioma y debes poder responder en términos sencillos para poder responderlas.
Estoy en el proceso de aprender perl en este momento y lo estoy usando para diseñar un sistema de administración de propiedades para un miembro de la familia que maneja un complejo de apartamentos.
Al crear algo para alguien que está cerca de ti y esperar que lo termines, quizás te sientas más motivado para escribir la solución completa en lugar de detenerte a mitad de camino.
Recolecté este problema "estándar" que he usado varias veces para aprender un nuevo idioma.
http://homepage.mac.com/s_lott/books/oodesign.html
Es real. Tiene algún valor tangible. Es terminable
Soy demasiado tarde Aquí hay un problema "sub-real". Desde que te gustó el juego. Verifica este Java4K , deberías hacer un juego solo en 4096 bytes. Aprenderás mucho sobre Java, la optimización de muchos códigos y, por supuesto, cómo pensar simple.
Y al final del día, tendrás un nuevo juego :)