2011-03-06 14 views
64

¡Me doy cuenta de que para convertirte en un mejor programador, necesitas programar! Así que, obviamente, cuanto más práctica, mejor te vuelves.¿Programas muy pequeños para mejorar las habilidades de programación?

Mi problema es esto. Actualmente estoy en la universidad y encuentro que la carga de mi curso es un tanto desalentadora y no tengo mucho tiempo libre. No creo que realmente pueda asumir un gran proyecto, particularmente no creo que tenga motivación para llevarlo a cabo, sería más fácil para mí seguir posponiéndolo a favor del trabajo que se debe colegio.

Pero todavía quiero practicar. Así que estoy buscando cualquier recurso que tenga desafíos de programación que se pueden completar en un período de tiempo bastante corto. Idealmente, podría hacer algo en menos de 10 horas de trabajo (por lo tanto, más de una hora de trabajo al día), si no es más pequeño.

He oído hablar de Google Code Jam, pero no estoy seguro de la duración de los programas que especifica ni del nivel de habilidad.

¿Alguien tiene alguna sugerencia? Incluso tal vez un compendio de tutoriales para diferentes funciones podría ser útil. Por ejemplo, un tutorial en archivo IO valdría la pena (si no lo sabía ya), aunque puede ser un tema bastante pequeño.

+0

Hello World es siempre un proyecto pequeño. En una nota más seria, intente construir ajedrez o damas. Es un proyecto bastante simple en general, pero la lógica que entra en cada pieza te permite aprender bastante ... Hay mucho que aprender sobre OOP allí también (p.polimorfismo, una torre es una extensión de una pieza, que tiene una fila y una columna). –

+2

+1 para la verdadera realización. :-) Por cierto, Google Code Jam es un evento de una vez al año, pero el concurso está organizado conjuntamente por [TopCoder] (http://www.topcoder.com/tc), que tiene concursos similares cada semana. . Es muy divertido, pero necesitas saber bastante sobre algoritmos. –

+0

@Aasmund, estaba pensando más en usar sus concursos anteriores. – Blackbinary

Respuesta

3

http://codegolf.stackexchange.com puede tener algunos desafíos de programación a su gusto. Muchas de las respuestas en ese sitio están golfizadas (implementan el programa en el menor número de caracteres) pero definitivamente hay algunos ejemplos interesantes de los que aprender.

+2

Eso seguramente no es una buena práctica, ya que el último código corto no es nada que necesites en la vida real, es sobre todo contra todos los estilos de codificación. –

+0

@usuario desconocido, pero los desafíos reales son interesantes. Gracias Mootinator. – Blackbinary

+1

¿Quién dijo algo sobre aprender algo del estilo de las respuestas? El sitio todavía está repleto de acertijos de programación cortos y decentes. * Algunas * respuestas * están * incluso escritas bien o tienen explicaciones detalladas. De nada @Blackbinary. –

20

Project Euler tiene algunos problemas relacionados con matemáticas/números que son muy interesantes y van desde fáciles hasta muy desafiantes. Puede elegir el idioma de su elección y enviar solo la solución (un número entero grande). Después de enviar la solución correcta, tiene acceso a una página de foro/comentario donde otros publicaron sus comentarios y soluciones.

33

Deberías mirar en code katas, ellos hacen exactamente de lo que estás hablando. Ejercicios cortos que están diseñados para perfeccionar tus habilidades de codificación/thining.

Otras referencias:

  1. http://kata.coderdojo.com/wiki/Overview_of_Learning_Resources
+0

Me gusta mucho Codificar Kata, porque separa los desafíos con 'cinturón', que es mucho más agradable que tener que mirar a través de cada uno para ver si es demasiado difícil o no. – Blackbinary

+0

Los enlaces de referencia están rotos. – Kasisnu

+0

@Kasisnu Sí, aparentemente ese sitio se cayó. Encontré una muy buena alternativa. – Nix

5

Code Jam es un buen concurso de programación, aunque, como usted ha mencionado, la mayoría de los problemas no son para principiantes.

Hay una buena selección de problemas de concursos de algoritmos de topcoder pasados. (Se llevan a cabo ~ 2 veces al mes durante casi 10 años, por lo que hay un montón.)
Rango de dificultad desde very simple (pero sigue siendo interesante) problemas en la 2da división a muy difícil. Además, hay editorials con soluciones y entorno en vivo donde puede enviar y probar su código. También puede aprender de las presentaciones de otras personas.

Verificar the problem listing.
Otra ventaja de topcoder son los concursos regulares en línea que tienen. Encuentro que competir contra otras personas en tiempo real es un gran impulso para la motivación.

Hay muchos más archivos problemáticos, como SPOJ, UVA y Timus, aunque raramente ofrecen soluciones o incluso sugerencias.

+0

Gracias por los consejos, son archivos como los que estoy buscando. En particular, me gustaría clasificarlo en diferentes dificultades. – Blackbinary

+0

@Blackbinary Topcoder proporciona muchos filtros, incluyendo dificultad y temas (ver el enlace en la publicación). En otros archivos, a menudo puede juzgar la dificultad del problema por el número de personas enviadas (por ejemplo, [en timus] (http://acm.timus.ru/problemset.aspx?space=1&page=1)). –

1

Ya que estás en la Universidad y buscas mejorar tus habilidades de codificación, el libro en papel Cracking the Coding Interview puede ser una buena opción para ti. Tiene grandes preguntas generales de programación y algunas curiosidades sobre entrevistas con algunas de las mejores compañías en tecnología. No solo hay grandes preguntas, sino que también hay problemas deficientes.

[Revelación:. I poseer el libro pero por lo demás tienen ninguna asociación a ella]

+0

Hmm, este libro se ve muy interesante, ¡Gracias! – Blackbinary

17

Por experiencia, recomiendo encontrar una tarea que hagas repetitivamente y convertirla en un programa. También recomiendo, en serio, reinventar la rueda para practicar con la programación. No permita que las personas le digan que no haga algo solo porque ya existe. Si no sabes cómo funciona, intenta escribirlo tú mismo.

No sé exactamente en qué nivel de programación estás, pero no trates de hacer algo demasiado alocado, es solo un demotivador (como intentar escribir un juego para la PS3).

Si ya puede navegar con IO, entonces debe intentar realmente aprender a usar Collections de manera efectiva. Creo que una de las mejores prácticas que he hecho fue reescribir la clase Java TreeMap. Fue un gran desafío y aprendí mucho al hacerlo.


Estas son algunas sugerencias para las asignaciones de práctica:

Tome un archivo de texto que tiene una buena cantidad de información contenida en él, agarra cualquier cosa, usted puede obtener algo de aquí, si desea: http://www.gutenberg.org/ y hacer un programa que hará lo siguiente:

  1. Leer en el archivo
  2. Crear una colección de palabras y sus ocurrencias
  3. Crear una colección de anagramas
  4. Crear una colección de palabras y las posiciones en que se producen (línea #, posición de la palabra)
  5. Desarrollar estadísticas sobre las palabras en el archivo, es decir, tratar cada palabra como individuo, que las palabras aparecen antes y después.
  6. eliminar todo el espacio en blanco del archivo
  7. escribir todos los datos anteriores a sus propios archivos

Una de mis cosas favoritas para hacer es meterse con datos de la web, ir a una sitio de votación, encontrar la página que tiene los datos de la encuesta en forma de tabla y haga lo siguiente:

  1. Descarga los datos
  2. analizar a través de los datos y gire el datos de tabla en un archivo CSV
  3. abrirlo en Excel sin error

O sólo tiene que buscar los datos del sitio y extraer de ella, sólo asegúrese de que el sitio es simpático robot http://www.robotstxt.org/, no desea que cualquiera sitio para sentir que está bajo ataque. La mayoría de las veces esto normalmente no es un problema porque si lee los términos de uso del sitio, indica claramente que tiene permiso para descargar 1 copia de lo que sea que esté viendo, siempre que no tenga la intención de venderlo. Por supuesto, esto cambia para cada sitio.


Vaya a un sitio web y obtenga todos los enlaces fuera de la página mediante programación.


Aquí es una diversión, el Programa de Susan (no me acuerdo por qué se llama Susan) que en un principio escribí usando un programa de C y dos scripts Bourne en un entorno Unix. La idea en este programa es bifurcar 4 procesos secundarios y darles una tarea como esta:

Niño 1: Lee en un archivo, crea un diccionario de cada palabra y su posición en el archivo, esto se emite a un archivo.

Niño 2: Toma la salida de Child 1 y reconstruye el documento, esto se envía a un archivo.

Niño 3: Toma de salida de Niños de 2 y hace lo infantil 1 de nuevo hizo

niño 4: Toma la salida del niño de 3 y hace lo infantil 2 de nuevo

El objetivo aquí es tener una réplica exacta de lo hizo el archivo original una vez que Child 4 lo emite. Esto es un desafío y algo sin sentido, pero el objetivo de este ejercicio es obtener la práctica.

En su caso, no sienta que necesita usar diferentes hilos para esto, puede simplemente usar un solo programa con dos funciones diferentes y simplemente llamarlas en orden.


Una vez más, no estoy seguro si usted está en este nivel todavía, pero intenta reemplazar cualquier "a favor" o "foreach" bucle que tiene en su programa con la recursividad, al igual que la práctica. La recursividad es un dolor en el trasero, pero es valioso conocerla y comprenderla.

Estas son algunas sugerencias que creo que realmente te ayudarán a agudizar tus habilidades.

Disfrute

0

Puede intentar resolver problemas de ACM.Hay miles de problemas allí y puede encontrar el nivel de dificultad para que pueda elegir qué problemas hacer primero. El sitio oficial para esto es:

http://uva.onlinejudge.org/. Puedes aprender más allí.

respecto Arefin

2

Siempre he pensado que la práctica con preguntas de la entrevista de la muestra fue una gran manera de perfeccionar las habilidades de uno y obtener expuestos a los tipos de problemas que normalmente no resolvería. Además, si va a buscar un trabajo, lo ayuda aún más.

Aquí es una muy simple que hice para la diversión, el otro día:

escribir una rutina para imprimir los números 1 a 100 y de nuevo a 1 de nuevo sin utilizar ningún bucles.

Glassdoor.com tiene muchas buenas preguntas de entrevistas enviadas por personas que realmente las obtuvieron en una entrevista.

0

Puede parecer un poco obvio, pero últimamente he notado un verdadero impulso en mis habilidades de expresiones regulares simplemente al responder preguntas de expresiones regulares en Stack Overflow. La enseñanza te obliga a descomponer los problemas en piezas fácilmente explicables, y también guiará tu investigación en aquellas ocasiones en las que sabes más, pero no del todo, de una solución.

Sugiero encontrar un tema que ya domine un poco, ya que este tipo de cosas no es tan bueno como el tutorial para principiantes. Busque SO para las preguntas etiquetadas con ese tema e intente descubrir las respuestas. No solo los codifique en su cabeza; adelante y escríbalos, pruébelos y explíquelos. Si no está seguro de que su respuesta sea correcta, simplemente escríbala sin publicarla.

1

Si te gusta programar y quieres mejorar tus habilidades como programador, debes probar cocode.co. Es un sitio social joven, similar a StackOverflow pero basado en publicar y resolver desafíos de programación, en lugar de hacer y responder preguntas. Desde desafíos muy fáciles hasta difíciles.

http://cocode.co

3

intente inscribirse en cualquier curso de TI en los siguientes sitios web:

Estos sitios web ofrecen programas informáticos educativos libres de pr escuelas estigiosas en las que hay muchos ejercicios desafiantes para agudizar sus habilidades de programación. Aprendí a programar la percolación, el reconocimiento de patrones, la pelota que rebota y muchas cosas más interesantes debido a esto. Cargarás tu programa una vez que termines los ejercicios y recibirás una calificación acorde (básicamente, se verificará tu programa).

Al final de cada curso, incluso recibirá un certificado de finalización. Genial, ¿verdad?

Cuestiones relacionadas