Cómo mejorar en la escritura de código

Aquí está la cosa. Escribir código no se trata tanto de la sintaxis o del lenguaje que usa, se trata de resolver problemas. El estrés siempre será parte de este proceso y tendrá ganas de levantar las manos y decir que simplemente no le importa. La marca de un buen programador comienza no con el conocimiento de varios idiomas, sino con el deseo de atravesar las partes complicadas y aprender sobre las cosas que no entienden para poder hacer todo. Es difícil, especialmente al principio. Pero si sigues practicando, mejorarás. No te rindas todavía.

En cuanto a cómo mejorar … ¿Mejor cómo? ¿Qué parece demasiado complicado: los conceptos o el proyecto?

Si considera que los proyectos en sí mismos son demasiado complicados, no los conceptos, puede omitir esta primera sección, aunque si aún desea leerlo.

También es posible que desee ver algunas otras respuestas que he dado a preguntas similares. Estos se vincularán al final de la respuesta.


Si tiene dificultades para comprender los conceptos, es un poco más difícil ayudarlo. Podría tratar de explicarle los conceptos, pero creo que sería más beneficioso para usted si tratara de comprenderlo usted mismo con un poco de investigación en línea. Digo esto porque te encontrarás haciendo este tipo de cosas mucho, especialmente si tienes la intención de hacer una carrera fuera de la programación. Dependiendo de lo que le cuesta entender, puede hacer algunas búsquedas como:

“¿Qué son los objetos en la programación orientada a objetos?”
“¿Qué son las clases en la programación orientada a objetos?”
“¿Cómo funcionan las matrices?”

… Y así. Tenga en cuenta que agregué “en programación orientada a objetos” a los dos primeros porque “clase” y “objeto” son palabras lo suficientemente comunes como para que la búsqueda sea más específica.

Siempre puede pedirle ayuda a su instructor para comprender los conceptos también. Dependiendo de cómo sea él o ella, eso podría ser todo lo que necesita.


El consejo más simple pero más largo para dar (debido al ejemplo) es si el proyecto es demasiado complicado : divídalo en partes más pequeñas. Eso es lo que hacen muchos programadores profesionales. Divide el proyecto en piezas más pequeñas y divide esas piezas en piezas más pequeñas hasta que tengas un montón de cosas pequeñas que lograr. Un ejemplo sería hacer un juego de blackjack (teníamos esto en CS2): tienes un mazo de cartas que se barajan, luego el jugador recibe dos cartas. El jugador puede elegir tomar otra carta o quedarse con lo que tiene, con el objetivo de tener un total lo más cercano a 21 posible sin pasar. El crupier hace lo mismo, tratando de obtener un total igual o mayor que el jugador. Si cualquiera supera los 21, pierden. El más cercano a 21 sin pasar gana.

Nota: En el Blackjack normal, el As puede tener un valor de 1 u 11. Por el bien de este ejemplo, solo tendrá el valor de 1.

Comencemos dividiendo esto en partes:
(Quora solo permite viñetas de tres capas de profundidad, lo que arruinó la lista de jugadores: /)

  • Mazo de cartas
    • Cuatro trajes (diamante, corazón, jota, espada)
    • Trece cartas en cada palo (As, 2–10, Jack, Reina, Rey)
    • Tiene que ser barajado
    • Necesito una forma de sacar la carta superior del mazo
  • Jugador
    • Pregúnteles si quieren otra tarjeta y actúen según la entrada
      • Si el jugador quiere una carta, dale una carta desde la parte superior del mazo
      • Si el jugador tomó una carta, verifique el nuevo total del jugador para ver si es superior a 21
      • Si el total es superior a 21, el crupier gana automáticamente
      • Si el total es exactamente 21, vaya al turno del repartidor
      • Si el total es inferior a 21, pregunta si el jugador quiere otra carta
      • De lo contrario, pasa al turno del repartidor
  • Comerciante
    • Comprueba si el total es menor que el jugador o mayor de 21
      • Si es así, roba una carta
      • Si no, deja de tomar cartas
      • Repita hasta que el total sea mayor o igual que el jugador o mayor que 21

Si observa la lista anterior, notará que cada uno de estos puede implementarse fácilmente en unas pocas líneas de código (con la posible excepción del barajado, pero lo ignoraremos por ahora).

Así que ahora pensamos en qué tipo de estructuras de datos necesitamos. Personalmente, tendría una clase Card con un campo de valor, un método getValue () getter y un toString () para imprimir la tarjeta (básicamente para que podamos traducir 1 a A, 11 a J, etc.). Como nunca usamos el traje en Blackjack, no necesitamos incluirlo, aunque podríamos hacerlo y luego formar parte de toString ().

También podemos simplificar las cosas al tener una variable entera que tenga el total del jugador / distribuidor, en lugar de hacer un seguimiento de las cartas que tienen.

Pero primero preocupémonos por la cubierta. Necesitamos poder tener una colección cuyo tamaño puede cambiar a medida que sacamos las tarjetas. En Java y C #, probablemente usaríamos una ArrayList, C ++ sería std :: vector, y JavaScript o Python serían simplemente una matriz, ya que se implementan con longitud variable en esos lenguajes.

Entonces creamos una colección de estas cartas y la llenamos con cuatro de cada uno de los trece tipos de cartas (o una de cada 52 si incluye palos). La combinación aleatoria podría ser tan simple como generar dos índices aleatorios en la colección e intercambiar los valores en esos dos lugares, y luego repetir ese proceso, digamos, 50 veces. La clase de colección (ArrayList, vector o array) debe tener algún tipo de función “eliminar el primer elemento de esta colección y devolverla”, generalmente llamada pop (). Entonces usaremos eso para tratar.

Para el turno del jugador, observe cómo repetimos la acción varias veces dependiendo de si quieren volver a dibujar. Podemos implementar eso como un ciclo while:

// Queremos que este ciclo deje de ejecutarse si el jugador dice “no”
// al dibujo o si el total es 21 o mayor
while (/ * Una función que devuelve un valor booleano para preguntar si dibujarán * / AND playerTotal <21)
{
// Roba una carta y agrégala al total del jugador
// Muestra el nuevo total
{

// Pasar al distribuidor

Espero que pueda entender cómo traduje los requisitos para el Reproductor y el mazo en una implementación de programación: el código real dependerá del idioma que use. Te lo dejaré a ti para tratar de descubrir cómo implementar el distribuidor y averiguar quién gana.


Ahora para algunos otros enlaces, posiblemente útiles. Algunos de estos están dirigidos a personas que nunca antes han codificado, pero que siguen siendo útiles si tiene dificultades.

Este fue enviado en el Quora Digest: la respuesta de Michael Bryant a ¿Cómo puedo desarrollar habilidades de programación rápidamente como novato?

¿Cómo mejorar como programador? ¿Cómo puedo mejorar al escribir código?

Qué no hacer mientras se programa: la respuesta de Michael Bryant a Hay muchos temas sobre qué hacer para ser un mejor programador, pero ¿qué pasa con lo que no se debe hacer? ¿A qué has tenido que renunciar?

Las calificaciones “malas” no son fallas, solo significa que tienes más que aprender: la respuesta de Michael Bryant a ¿Cómo puedo mejorar las habilidades de programación?

Más información sobre cómo resolver problemas / proyectos de programación: la respuesta de Michael Bryant a ¿Es normal encontrar problemas en mi libro de Java que parece que no puedo resolver? ¿Cómo los superaste?

Ideas de proyectos al azar para más práctica: la respuesta de Michael Bryant a ¿Qué proyectos puedo hacer para ampliar mi conocimiento de lenguajes de programación como Java, Python, PHP, JavaScript y C ++?

Gracias por el A2A!

En primer lugar, ser hombre o mujer no tiene nada que ver con este problema o su solución. Dejemos caer esas referencias.

Escribir es una habilidad diferente de la lectura, y sí, debes practicar la escritura. Pero, al igual que con la escritura del lenguaje natural, usted desarrolla su habilidad y confianza al leer. Entonces, encuentre ejemplos de código bueno y claro y lea, lea, lea hasta que entienda cada pieza.

Sin embargo, tenga cuidado, hay muchos códigos terribles. Puede leer un código terrible, por supuesto, y aprender a analizar por qué es terrible, pero su primera atención debe estar en un buen código.

¿Dónde puedes encontrar un buen código? Sería cauteloso con los libros de texto. Kernihan y Plauger mostraron cuán terrible puede ser el código de textook (y su libro puede enseñarle mucho). Parte del código fuente abierto es bastante bueno y es fácil de obtener, aunque puede ser demasiado complejo para un comienzo. Con suerte, participará en las revisiones de códigos, donde podrá ver muchos códigos y escuchar diversas opiniones sobre lo que es bueno y lo que no es bueno.

Pídales a sus compañeros programadores que compartan el código con usted, aunque no todos serán buenos ejemplos. Aprende a discernir la diferencia entre un código bueno y uno malo, luego usa este discernimiento en tu lectura. Después de un tiempo, estará listo para comenzar a escribir código simple y luego avanzar a tareas más complejas.

¡Buena suerte y buen aprendizaje!

Al escribir más código. Es importante hacerlo en una comunidad de desarrolladores de nivel mixto de experiencia. Porque escribes código para que la gente lo lea. El único aspecto crítico de todo el código es que sea legible y comprensible por otros desarrolladores.

A la computadora no le importa si su código es comprensible, a sus colegas desarrolladores sí. Su código escrito una vez, luego es leído muchas veces por desarrolladores cuyo tiempo vale mucho dinero. Si no pueden entender lo que creaste, entonces deben dedicar mucho tiempo a la ingeniería inversa de lo que creaste. Probablemente terminarán reescribiéndolo en el proceso, lo que costará aún más.

Cuando codificas en una comunidad, obtienes comentarios de tus compañeros desarrolladores. Aprenderá lo que es legible y lo que no. Si no está en una comunidad, únase a un proyecto de código abierto. Entonces realmente no solo estás aprendiendo, sino que también estás devolviendo. Además, se ve muy bien en tu currículum.

Otra de sus formas de mejorar es leer el código. Elija un proyecto de código abierto que le interese y aprenda cómo se elabora. La capacidad de recoger rápidamente una base de código es otra habilidad valiosa. JNo empiece con el proyecto Apache Lucene. Su código está extremadamente optimizado y es muy difícil de comprender.

Intentaría algunas cosas:

  • Encuentre un tutor con el que pueda trabajar y supere sus dificultades una por una. Esto te ayudará a resolver lo que te obstaculiza.
  • Cuando esté manejando un proyecto grande, divídalo y concéntrese en un área en lugar de todo el proyecto, y construya desde allí.
  • Programe un proyecto de su elección en su tiempo libre.
  • Investigue los recursos en línea y lea: esto le da otro ángulo y explica las cosas de una manera diferente

Algunas respuestas han mencionado el sexo. Tu sexo no tiene nada que ver con eso: algunos de los nombres más importantes en informática son las mujeres.

Quizás ninguno sea más destacado en la historia de la computación que la Contralmirante Grace Hopper, quien fue instrumental en el desarrollo del primer lenguaje informático, COBOL. Ella tiene un destructor de la Marina de los EE. UU. Que lleva su nombre, y una supercomputadora.

Otra es Adele Goldberg, quien fue instrumental en el desarrollo de Smalltalk y de la programación orientada a objetos.

Hay muchos otros, ¡así que no te rindas y no te desanimes!

Hay muchos recursos que puede usar para mejorar la escritura de código para responder preguntas específicas. Algunos de mis favoritos personales son HackerRank y LeetCode. Si te cuesta actuar en situaciones de alta presión, también vale la pena echarle un vistazo a CodeFights. Otra forma efectiva de mejorar la escritura de código es leer un buen código. Los proyectos de código abierto pueden ser un gran recurso para esto en particular, solo asegúrese de apegarse a proyectos más establecidos.

Suponiendo que esté tomando su primera clase de programación, supongo que los problemas actuales que enfrenta son matrices, bucles y objetos. Si esto es cierto, y sus problemas provienen de una falta de familiaridad con los conceptos básicos de programación, entonces me temo que no hay muchos materiales a su disposición. La mayoría de los recursos en línea para la programación están hechos por programadores que olvidaron los difíciles primeros pasos para escribir código. En consecuencia, su material no será completamente útil para usted hasta que pueda escribir soluciones simples a respuestas simples.

Mi recomendación es que comience su propio proyecto, como una aplicación de consola para resolver una pregunta simple. Haga algo que funcione con cadenas, matrices, bucles y objetos (si cree que los objetos son necesarios).

Práctica práctica práctica. Escriba toneladas de código para resolver todo tipo de problemas. Los problemas del mundo real son mejores que los abstractos. También ayuda mucho estar en un equipo con otros programadores junior y experimentados para que pueda ver la gran variedad de formas en que puede manejar la misma situación. Si no puede hacerlo profesionalmente, intente encontrar un grupo de amigos y codifique con ellos. Una gran parte de la codificación es hacer que tu mente piense en el código y hablar y resolver problemas con otros es una excelente manera de hacerlo.