it-swarm-es.com

¿Cómo mejoro mis habilidades de codificación?

Aquí hay un poco de información sobre mí, antes de comenzar con la pregunta.

Soy un estudiante de informática, Java es mi lenguaje de codificación principal.

El problema básico en mi universidad son los estándares de enseñanza. A nadie le preocupa enseñar el conocimiento de la codificación a los estudiantes, en lugar de solo el conocimiento teórico.

El efecto es que la mayoría de mis compañeros de la universidad no entienden la programación en absoluto.

Incluso no he podido salir del entorno de programación tradicional, lo que limita mi codificación hasta cierto punto.

¿Cuáles son las posibles formas en que puedo desarrollar y ampliar mis habilidades de programación/codificación?.

Además, ¿puede sugerir las fuentes para el mismo?

Editado: Fuentes que sugieren el desarrollo de habilidades de codificación.

76
ykombinator

La programación es uno de los campos donde la experiencia importa. Por lo tanto, para convertirse en un mejor codificador, debe codificar más. Sin embargo, escribir no es lo único que debe hacer. También debe leer el código de otros desarrolladores y aprender de él qué es un buen código. Consulte SO preguntas sobre esto .

También puede encontrar libros, que están específicamente dedicados a la codificación, útiles; como "Código completo". Contienen descripciones de lo que es un buen código que, combinado con su conocimiento fundamental, puede convertirlo en un buen programador.

46
P Shved

Mi cita favorita es de Confucio:

Escucho, lo se. Ya veo, lo recuerdo. Sí entiendo.

Todo el conocimiento que obtuve fue de aplicar una estrategia única:

Tome el camino más desafiante, siempre.

¿Quieres aprender C #? Consigue un trabajo como desarrollador de C #.

¿Quieres aprender italiano? Ve allí con un diccionario inglés/italiano y habla italiano

¿Quieres aprender codificación? ¡Código!

98
user2567

La codificación es un gran consejo, pero sin alguien allí que le dé su opinión, simplemente repetirá sus errores. Encuentre un trabajo, trabaje en un proyecto de código abierto, encuentre un mentor y haga que miren su código.

21
JeffO

Aquí hay un presentación Dan North dio y QCon sobre cómo pasar del programador novato al experto llamado Afilar las herramientas . A continuación se presentan sugerencias clave de la presentación:

  1. Practica lo básico: kata, código por diversión ...
  2. Aprende de otras personas: lee libros, blogs, etc., lee códigos, programa en parejas ...
  3. Comprender las tendencias: lo que está sucediendo en la industria ahora
  4. Compartir conocimiento: la mejor manera de aprender algo es entenderlo y enseñarlo
  5. Mantenga su caja de herramientas: use herramientas "intemporales" y nuevas
  6. Aprende a aprender: comprende cómo funciona el aprendizaje
10
ysolik

Intenta escribir un compilador para un lenguaje simple desde cero. Mejorará sus habilidades mucho en el camino (con algunas técnicas teóricas de Niza de la teoría del lenguaje formal como un bono). Traté de escribir una versión simple de Excel, y también es un ejercicio muy agradable.

Como otros dijeron, la única forma de mejorar sus habilidades de codificación es hacerlo realmente. Ensucia tu mano con algunos proyectos grandes. Pero luego, para un programa grande, es aún más importante que domine las técnicas de diseño de software, de lo contrario, el tamaño del programa parece inmanejable.

Hay una bonita cita de Nate Kirby:

"Los malos programadores ignoran los detalles. Los malos diseñadores se pierden en los detalles".

Entonces, cambiar entre estos dos niveles de abstracción es la habilidad que debes dominar.

Además, la velocidad de cuántas líneas de código puede escribir por hora no es lo que debe apuntar. Me gusta una cita de David Parnas :

"A menudo escucho a los desarrolladores descritos como 'alguien que sabe cómo construir un sistema grande rápidamente'. No hay ningún truco en construir sistemas grandes rápidamente; ¡cuanto más rápido los construyas, más grandes serán! "

8
D. L.

He implementado un grupo de apuestas o un juego de Baccarat en casi todos los idiomas que he aprendido.

Este tipo de software cubre

  • Fechas y horarios, con cálculos.
  • Tipos de moneda y cosas que se pueden convertir ay desde moneda
  • Un conjunto discreto de reglas que es fácil de probar.
  • Estados, transición entre estados y múltiples entidades responsables de la transición estatal
  • Múltiples usuarios con diferentes vistas del mismo modelo.
  • Múltiples condiciones finales

El blackjack y el póker para varios jugadores también funcionarían.

Una advertencia es que en mi trabajo diario trabajo en sistemas financieros y hay una gran superposición entre las cosas a considerar al escribir un juego de azar multijugador y un sistema de comercio.

5
sal
  • Seleccione buenos proyectos de código abierto y lea el código.
  • Empieza un proyecto de tamaño mediano y comienza a codificar
    • Si está interesado en el desarrollo web, intente construir un sitio existente desde cero utilizando su tecnología favorita; ¿Qué tal Twitter en django?
    • Si está interesado en el desarrollo de aplicaciones de escritorio, comience con un bloc de notas e improvise para admitir funciones avanzadas (búsquedas basadas en expresiones regulares, para empezar).
4
Amarghosh

Salta al agua, al principio puede estar frío y sentirás la tentación de salir, pero pronto tu cuerpo se acostumbrará y se calentará nuevamente y, a medida que te sientas cómodo en el agua, podrás nadar y quizás entrar a la piscina. final profundo.

Acabo de terminar la universidad hace un par de meses donde estudié Java. Igual que usted, no tenía ni idea de cómo codificar correctamente. Hace aproximadamente un mes, quería construir una aplicación web en PHP. No sabía lo que estaba haciendo, pero solo lo hice. Al principio fue intimidante y abrumador, pero a medida que practicas se vuelve natural. Incluso escribí la aplicación muchas veces, cada vez simplificándola aún más. Ahora estoy trabajando en la aplicación desde cero, pero esta vez estoy descubriendo cómo hacerlo objetivamente orientado y usando PEAR y su módulo de forma rápida, que es otro obstáculo que tengo que superar pero determinado y emocionado sin embargo.

Entonces practica. ¡Salta al agua! La mejor de las suertes :)

4
Jonathan

Piénselo de esta manera ... Tiger Woods no llegó a ser "el mejor" golfista al mirar golf o al leerlo. Se puso de esa manera, como cualquier otro atleta, estudiando, practicando, encontrando dónde puede mejorar su juego y haciendo algo al respecto.

La codificación es la misma. La mejor manera de mejorar es estudiar lo que hacen los demás, entender POR QUÉ lo hacen de esa manera y luego hacerlo usted mismo.

4
Muad'Dib

Como en cualquier otra actividad humana, la mejor manera de mejorar es practicar su conocimiento, pero necesita algunos ejercicios para eso. Dave Thomas , uno de los autores del libro The Pragmatic Programmer, introdujo el concepto de Code Katas , similar al concepto de kata en artes marciales.

Puedes echar un vistazo allí: http://codekata.pragprog.com/

4
jmservera

Sugiero aprender toda la sintaxis de su idioma favorito. Comprenda cómo usar funciones virtuales, herencia, lambda si existen. etc. Una cosa que hice fue tomar una gran biblioteca de miedo (hice esto con boost y STL para C++) y ver si cada línea y cada palabra clave tienen sentido.

O, alternativamente, puede leer la referencia de sintaxis del idioma si hay una buena que cubra la versión más actualizada. Como ejemplo, aquí está la referencia de C # (No es la versión en la parte superior. Cometí el error al buscar una versión anterior más popular que no tenía la sintaxis que estaba buscando)

3
user2528

El consenso general es "escribir más código", con lo que estoy de acuerdo, pero añadiré a ese consejo que debes escribir muchos tipos diferentes de código. Java está bien en lo que respecta a los idiomas, pero definitivamente debe escribir código tanto arriba como abajo del espectro de potencia. Además de Java, sugeriría hacer algunos proyectos pequeños en un nivel inferior lenguaje (C es bueno para esto), un lenguaje de secuencias de comandos (prefiero Perl, pero python también es una buena opción), un lenguaje funcional (LISP es la recomendación general aquí, pero OCaml y Haskell también son buenas opciones), y al menos se sienten cómodos leyendo un lenguaje ensamblador.

Además, elija alguna variedad en los tipos de programas que implementa. Considere implementar al menos una GUI de escritorio, una aplicación web enriquecida, un cliente y servidor de red, un controlador, una utilidad de mezcla de datos, un rastreador de rayos y una simulación física.

Todos los proyectos deben tener un alcance relativamente pequeño, el objetivo no es tener un programa completo, sino obtener una amplia experiencia en los diferentes dominios con los que se puede encontrar, para aprender los diferentes tipos de pensamiento necesarios para cada uno, y para averiguar dónde están tus intereses.

Una vez que haya hecho eso, tendrá una buena idea de qué tipo de programación le interesa más, y puede encontrar o comenzar un proyecto de código abierto para obtener experiencia trabajando en grandes bases de código, lidiando con proyectos a plazo, y trabajando con otros desarrolladores.

3
Cercerilla

Estás obteniendo algunas respuestas similares y la mía también será la misma. Escribir código Hay dos buenas maneras de hacerlo.

  1. Elija algo que realmente le atraiga o le interese y simplemente comience a implementarlo. Si te gustan los juegos, escribe un juego. Si estás interesado en cosas web, crea un sitio web interesante y original. Es posible que ni siquiera lo termines, pero la experiencia te enseñará mucho.
  2. Elija un proyecto de código abierto que le parezca interesante y participe en él. Aprenda del código existente y úselo para corregir errores, crear pruebas unitarias e implementar nuevas funciones.

Cualquiera de ellos le brindará la experiencia directa de programación que necesita, así como la participación en las comunidades de programación a medida que aprende y tiene que hacer preguntas para obtener más. Cometerás muchos errores. Esto es bueno: si deja de cometer errores, ha dejado de aprender y necesita encontrar una nueva forma de desafiarse a sí mismo.

2
glenatron

Mis sugerencias

  • Encuentre un proyecto para mascotas y escríbalo en un idioma diferente (lyke python/c #) al que conoce. Esto te enseñará más de lo que puedas imaginar. Mire otros proyectos que son similares e intente obtener paridad de características con ellos. Puede ir lento con esto y tener objetivos modestos, aumentando constantemente su nivel de dificultad con nuevas características. Esto también se convierte en su pieza de espectáculo cuando acude a una entrevista de trabajo.
  • Encuentre usos en su proyecto para tecnologías relevantes como servicios web, javascript, ajax, geocodificación y, básicamente, cualquier cosa que esté avanzando en el mundo del software.
  • Juega con otros sistemas operativos como Linux/freebsd. Mientras más exposición tenga a los diferentes tipos de sistemas, más comprenderá el pensamiento detrás de ellos y por qué hicieron las cosas de la manera en que lo hicieron.
  • Cuando haya terminado con partes de su código, vuelva a él e intente mejorarlo constantemente. Encuentre ineficiencias, agregue más comentarios cuando sea necesario, intente perfeccionarlo.
  • Excava en c2.com. Hay muchas buenas prácticas de codificación. Aprende estos e intenta aplicarlos en tu propio proyecto.
  • Lea libros como el programador pragmático y el código completo, le darán el conocimiento de la programación reforzada para la batalla.
  • Esto puede parecer no relacionado, pero encuentre otro pasatiempo técnico si aún no tiene uno como competir con autos RC, tocar un instrumento musical o aprender un idioma extranjero. Cuantas más piezas de su cerebro estén en uso, mejor, y necesitará relajarse de vez en cuando porque la programación puede ser demasiado.
2
Tjaart

Las revisiones por pares realmente ayudan a mejorar la calidad de su código. Si no tiene un mentor real, puede publicar su código [después de reducirlo al mínimo necesario] en StackOverflow o RefactorMyCode o en las listas de correo y las personas lo ayudarán a mejorar la calidad de su código.

2
missingfaktor

Sí, la práctica es extremadamente importante para desarrollar habilidades de programación y mantenerlas afiladas. Sin embargo, practicar solo solo te llevará hasta cierto punto. También debes aprender de las personas que saben más que tú. Existen técnicas de las que nunca ha oído hablar, prácticas cuyos beneficios no son evidentes de inmediato y trucos que nunca podría inventar usted mismo.

La forma de aprender nuevas técnicas, trucos ingeniosos y prácticas útiles son muchas. Leer libros. Habla con tus compañeros de trabajo. Hacer preguntas. Revise el código de otras personas y haga que revisen el suyo. Lea blogs y artículos sobre programación, incluido este sitio. En resumen, no trabaje en el vacío.

Ah, y si no está seguro de lo que significa NP-complete, o si la notación big-O lo asusta, entonces probablemente debería tomar algunas clases de teoría de computación y algoritmos.

1
Dima

Diría que debería leer sobre patrones de diseño, como Builder, Factory, Composite y, finalmente, Observer, Mediator y Flyweight. Los patrones de diseño no son el fin de todo para las soluciones de codificación, pero demuestran cómo implementar conceptos teóricos de programación orientada a objetos.

1
Tim Claason

Solo puedo sugerir lo que me ha funcionado. Soñé con aprender lenguaje de programación y crear un motor de ajedrez con él. He dejado pasar tiempo en libros, artículos y pequeñas muestras. Así que decidí verificar proyectos reales que tienen mejor documentación para el desarrollador. Elegí uno y comencé a leer el proyecto día a día. No pienses que pasar los días es una pérdida de tiempo mientras lees. Es mucho mejor que pasar tiempo leyendo artículos y libros. Encontrará muchas cosas que no están claras a primera vista, pero día a día esto cambiará si intenta investigar con paciencia. No esperes entender todo en una semana. Tienes que mantener tu baja autoestima cuando no entiendes algunas cosas. Solo intenta descubrir cómo funciona y disfruta esta increíble cosa.

Elija un proyecto existente que le apasione. Comience a leer códigos, depúrelo e intente comprender cómo funcionan las cosas todos los días. También usa el proyecto por ti mismo. Luego comience a agregar algunas características que desee. Incluso intente escribir la misma aplicación o una similar.

1
Freshblood

"¡Práctica!" Eso es un cliché.

Debes revisar lo que has aprendido en las clases de matemáticas y hacer algunos programas que aborden los problemas. Además, implemente un programa de elevador, una máquina expendedora (que calcula los cambios en las monedas), para agudizar sus habilidades lógicas. Piense en todo en la vida cotidiana e impleméntelos.

1
Ming-Tang