¿Cómo mejoro mis habilidades de codificación? [cerrado]

76

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 principal de codificación.

El problema básico en mi universidad son los estándares de enseñanza. A nadie le preocupa enseñar el conocimiento de 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.

ykombinator
fuente
13
FYI: Desde mi experiencia, el conocimiento teórico ciertamente te ayudará en la parte posterior
Gopi
66
¿Puedes nadar con solo leer el libro "aprende a nadar en X días"?
pramodc84
99
"Practica deliberada". Haga algo que sea un poco más difícil que su nivel actual, resuélvalo, aprenda de él, repita.
77
@ pramodc84 Pero ciertamente leer un libro relacionado con la natación y luego saltar a un río sin duda ayudará que simplemente saltar directamente a un río y tratar de aprender a nadar
Gopi
55
Es así en la mayoría de las universidades. Un título no se trata de ser un buen programador; se trata de conocer las teorías detrás de eso y cómo aplicarlas; puede decir que ser un buen programador se deja como un ejercicio para el graduado.
configurador

Respuestas:

46

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 las preguntas SO 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.

P Shved
fuente
8
Code Complete es una buena lectura, ese es el libro que más desearía haber leído cuando salí de la universidad como programador.
glenatron
2
Ahora ese libro está en mi must-readlista. :) ¡Gracias!
ykombinator 01 de
2
@ykombinator:(push 'code-complete must-read)
Giorgio
98

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!


fuente
19
+1 para siempre tomar el camino más difícil. ¡Con el tiempo, se convierten en un camino fácil! Buena respuesta.
Ryan Hayes
3
Ciertamente parece una tarea desalentadora prepararse para un desafío, pero creo que genera motivación para tener éxito. Gran respuesta. Los idiomas que conozco mejor son los que me sumergí en la cabeza sin una pista y aprendí continuamente con cada proyecto.
Chris
2
Cambié más duro por más desafiante. Es más positivo
2
La buena programación no es un deporte para espectadores.
Incognito
44
@Pierre, quieres aprender 1) latín y 2) Perl. Código Perl en latín: csse.monash.edu.au/~damian/papers/HTML/Perligata.html
21

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.

JeffO
fuente
1
¡Exactamente! Ese es un gran punto. Probablemente todavía no tenga un mentor.
ykombinator
44
Escriba un código y publíquelo con una pregunta específica en StackOverflow.com y obtendrá mucho.
JeffO
2
Es por eso que sigo quejándome para tener revisiones de código en nuestro proyecto, pero "no hay tiempo para eso".
MetalMikester
1
@MetalMikester, pero siempre hay tiempo para hacerlo de nuevo.
JeffO
1
@JeffO Eso es exactamente lo que está sucediendo ahora. :(
MetalMikester
10

Aquí hay una presentación que 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 el código, 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
ysolik
fuente
8

Intenta escribir un compilador para un lenguaje simple desde cero. Mejorará mucho sus habilidades a lo largo del camino (con algunas buenas técnicas teóricas 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 buena 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! "

DL
fuente
5

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 tener en cuenta al escribir un juego de azar multijugador y un sistema de comercio.

sal
fuente
4
  • 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).
Amarghosh
fuente
4

Piénselo así ... Tiger Woods no llegó a ser "el mejor" golfista al mirar golf o al leer sobre él. Se puso así, como cualquier otro atleta, estudiando, practicando, encontrando dónde puede mejorar su juego y haciendo algo al respecto.

La codificación es igual. 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.

Muad'Dib
fuente
Sí, Tiger Woods se convierte en el "mejor" golfista al tener muchos amantes. :-) Entonces no es realmente un buen ejemplo.
DL
4

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 las artes marciales.

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

jmservera
fuente
4

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 de todos modos.

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

Jonathan
fuente
3

Sugiero aprender toda la sintaxis de su idioma favorito. Comprenda cómo usar funciones virtuales, herencia, lambda si existen. 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 bien, 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 la versión en la parte superior. Cometí el error al mirar una versión anterior más popular que no tenía la sintaxis que estaba buscando)


fuente
3

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 lenguaje de nivel inferior (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 puede encontrarse, 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 bases de código grandes, lidiando con proyectos a plazo, y trabajando con otros desarrolladores.

Cercerilla
fuente
2

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

glenatron
fuente
2

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 tendrá que relajarse de vez en cuando porque la programación puede ser demasiado.
Tjaart
fuente
2

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.

missingfaktor
fuente
1

"¡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 ascensor, 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.

Ming-Tang
fuente
1

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ás seguro de lo que significa NP-complete, o si la notación big-O te asusta, entonces probablemente deberías tomar algunas clases de teoría de computación y algoritmos.

Dima
fuente
1

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

Tim Claason
fuente
1

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 tengan 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 trata de 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.

Sangre fresca
fuente