Técnicas generales de programación para acelerar el tiempo de codificación.

20

Me estoy preparando para un concurso de programación donde tenemos que codificar en C ++ y se trata de producir código de trabajo en poco tiempo. Un ejemplo sería usar una macro para obtener el mínimo de dos entradas o usar memsets para inicializar matrices (pero me dijeron que no debe usar ninguna de las dos aquí ).

Esto lleva a la pregunta, ¿qué tipo de técnicas de codificación existen para usar en un trabajo real?

Marktani
fuente
26
Supongo que las técnicas que usa en una competencia de codificación pueden no tener nada que ver con las técnicas que usaría en un trabajo real.
Doug T.
1
No estaba pidiendo técnicas en un trabajo real, estaba pidiendo técnicas en una competencia de codificación.
marktani
1
@DougT. Estoy de acuerdo, los trucos para una competencia de codificación no están en el tema, pero también creo que podría expandirse para hablar sobre la productividad en un entorno de trabajo y cómo reducir el tiempo dedicado al código de mono
James
1
¿Por qué no deberías usar memsets para inicializar matrices dinámicas?
James
3
No uses c ++. Usa el lenguaje de más alto nivel que puedas.
Kevin

Respuestas:

52

La forma de producir código de trabajo rápido es ... reducir la velocidad. Toma pasos muy pequeños. Asegúrese de saber para qué sirve cada paso. Asegúrese de que después de cada paso su código se compila y se ejecuta.

Lo mejor de todo, use Test-Driven Development. Escribe una prueba reprobatoria. Escriba el código suficiente para pasar la prueba. Refactorice para limpiar el código, asegurándose de que todavía pase todas las pruebas. Repetir.

Si no hace esto, entonces es muy fácil escribir una gran pila de código, que no funciona. A continuación, le tomará un muy largo tiempo para averiguar por qué no funciona.

Dima
fuente
21
¿En serio? TDD para concurso de programación?
Codismo
1
@Codism: las preguntas se ampliaron para incluir técnicas aplicables al desarrollo normal de software.
Dima
2
TDD definitivamente ayuda a mejorar mi código, pero nunca me ha ayudado a escribir el código más rápido. Un entorno de programación interactivo (por ejemplo, consola Groovy, Lisp REPL, etc.) ha sido el mayor ahorro de tiempo en mi experiencia.
Erturne
3
-1 para TDD. Eso tiene sentido si el proyecto es a largo plazo, no un hackatón corto.
TheLQ
1
@TheLQ El hecho de que prefiera pasar todo su tiempo usando un depurador no significa que TDD sea una mala sugerencia.
byxor
29

Revise las bibliotecas estándar intensamente, particularmente los algoritmos STL. Esto le ahorrará muchas líneas de código y mucho tiempo. La clave para ganar concursos de programación está en programar al nivel más alto posible. En C ++, sin bibliotecas externas, esto significa llamadas STL en lugar de bucles for.

Kevin Cline
fuente
+1 - Estoy totalmente de acuerdo con esto. Saber cómo escribir código rápidamente en STL es enorme en este tipo de competiciones.
Jordan Parmer
23

Participo regularmente en competiciones de ACM, espero que algunos de estos consejos te ayuden a:

  • Como otros dijeron, familiarícese con el lenguaje , en C ++ especialmente el STL, tiene funciones comunes que le gustaría usar (binary_search, min, max) y estructuras de datos robustas para ahorrarle tiempo (apile para evitar una recursión directa) , cola para BFS, incluso prioridad_queue para Dijkstra si así lo desea).

  • Identifique la categoría del problema, si es matemática, programación dinámica, teoría de grafos, etc. Pregúntese: ¿Qué tan familiarizado está con ese tipo de problema? Después de hacer esto, debe tomar decisiones con respecto al orden en que las resolverá , que va de la mano con el siguiente punto ...

  • Desea comprender el problema completamente antes de escribir, resolver el problema correcto , en mis primeras competiciones pensé que si no estaba escribiendo estaba perdiendo el tiempo; Más tarde descubrí que esto era un error.

  • No piense que los comentarios son una pérdida de tiempo, al menos en un código "inteligente", no desea depurar línea por línea para ver qué salió mal (eso es una verdadera pérdida de tiempo), valorar la claridad .

  • Tener diversión .

lccarrasco
fuente
66
+1 para comprender el problema por completo antes de escribir. De lo contrario, está perdiendo el tiempo del equipo (la competencia ACM es de 3 personas y una computadora)
Codism
Buena respuesta. :)
Jared Farrish
13

Bueno, me parece que solo conoces C y no C ++ en absoluto. Estas preguntas son respondidas fácilmente por alguien con un conocimiento básico del idioma.

Un ejemplo sería usar una macro para obtener el mínimo de dos entradas

¿Solo usa una función? std::minya existe.

o usando memsets para inicializar matrices

std::array<T, N> Ya inicializa su contenido.

¿Qué tipo de técnicas de codificación existen para usar en un trabajo real?

El primer paso es conocer el idioma que está utilizando.

DeadMG
fuente
Estoy tratando de conocer el idioma que estoy usando, ¡por eso hice esta pregunta! Gracias por el aporte sobre esto .
marktani
77
Oh. Debo haber entendido mal su pregunta entonces. Yo recomendaría un libro . Presentamos amablemente solo los libros que vale la pena leer, en lugar de aquellos que enseñan basura C.
DeadMG
10

Además de conocer el idioma, conozca sus herramientas, especialmente su editor. He estado codificando profesionalmente durante más de 15 años, y he visto que, por lo demás, los grandes programadores se desaceleraron porque los únicos comandos del editor que usan son las teclas de cursor y crtl-x / c / v.

¿Su editor admite una sola pulsación de tecla para eliminar una línea? ¿Volver a sangrar una línea? Moverse entre funciones / métodos? bloquear seleccionar / pegar? marcadores? ¿Moverse por palabra? ¿Puede el editor generar automáticamente clases / métodos / funciones? ¿Admite plantillas que puede crear con anticipación? Refactorización rápida? Grabación de macro?

Conocer su editor puede acelerar enormemente el tiempo de desarrollo.

Garion911
fuente
1
Amén. Solo estoy trabajando con un chico nuevo que es muy rápido ... y usa vim. Funciona para él porque se ha tomado el tiempo de aprender a usarlo.
gbjbaanb
Además ... si su editor no admite casi todas las funciones enumeradas aquí, encuentre un mejor editor.
Abhi Beckert
entrevista en google docs ... peor experiencia por este motivo.
UmNyobe
6

Piensa antes de actuar. Es mejor pensar y planificar antes de escribir una implementación de clase que después de tres fallidas. Además, piense mientras actúa: hacer cosas en pequeños pasos simplifica enormemente el proceso de desarrollo.

Escriba solo el código que necesita en este momento. Es decir, no comience a escribir código con mentalidad como: " Necesitaré estas funciones más adelante, así que también podría escribir sus prototipos mientras estoy en eso ". Las cosas cambian, los planes cambian. Terminarás con un código que quizás ni siquiera sea utilizable. Es una perdida de tiempo.

Sepa lo que está haciendo No hay nada peor que tratar de recordar cómo funcionan las funcionalidades y características básicas del lenguaje y / o la biblioteca. Familiarícese con las herramientas que utiliza.

zxcdw
fuente
+1 para YAGNI .
Brendan Long
4

Ya ha habido muchas respuestas, pero me gustaría agregar mi opinión.

Para acelerar su codificación, conviértase en un mecanógrafo táctil a una velocidad tal que mientras escribe puede concentrarse tanto en la lógica como en el código. Hay muchos programas para aprender a escribir (Typing Master, Rapid Typing, KTouch, gTypist, por ejemplo), úselos

He visto muchos programadores experimentados que todavía son mecanógrafos de dos dedos. Esto lleva a un código desagradable sin documentación y un código realmente críptico con macros y nombres de tipo abreviados.

Sarvex
fuente
Downvoted con un dedo índice :)
mlvljr
Gran respuesta. Agregaré que las personas que miran el teclado en lugar de la pantalla a menudo escriben basura antes de darse cuenta y tienen que retroceder. O escribirán en la ventana equivocada. Y lo triste es que no se dan cuenta de cuánto esto los frena.
Dave Markle
2

El desarrollo de software es una de esas actividades clásicas de 80-20, es decir, donde el primer 80% del trabajo lleva el 20% del tiempo, y el último 20% del trabajo toma el 80% del tiempo.

La clave para acelerar su trabajo en general es, por lo tanto, trabajar para mejorar su rendimiento para que dure el 20% del esfuerzo. Esto suele ser las etapas de depuración y el trabajo para unir todo y hacerlo utilizable.

Puede mejorar esto teniendo más cuidado en las primeras etapas. El trabajo de planificación y diseño al comienzo de un proyecto puede parecer una pérdida de tiempo cuando se siente tentado a sumergirse en la programación hardcore, pero pueden ahorrar una gran cantidad de tiempo más adelante.

La gente hablará sobre metodologías específicas como TDD o BDD. Estos son geniales, pero si no los está haciendo ahora, le tomará un poco de tiempo adaptarse, por lo que probablemente no sean algo con lo que quiera comenzar para un concurso de programación. Pero detenerse para planificar lo que está haciendo antes de sumergirse y hacerlo, cosechará recompensas pase lo que pase. Y son los primeros pasos hacia TDD y BDD de todos modos. Aquí es donde quieres comenzar.

SDC
fuente
-2

Si es para una competencia de programación real, no use C ++. Use un lenguaje de scripting RAD rápido e interactivo. Esto es algo en lo que VB6 domina absolutamente. Vaya armado previamente con las bibliotecas que escribió previamente. División de cadenas, inversión de matrices, búsqueda, clasificación, gráficos groseros, control de consola.

Si es por trabajo, haz exactamente lo contrario. Aprenda lo que hay allí, use un lenguaje sólido (C ++ está bien), comente todo, etc. Los dos tipos de entornos no podrían estar más separados.

Bryan Boettcher
fuente
3
No fui uno de los que votaron negativamente, pero supongo que probablemente te atrajeron porque la pregunta era sobre programar más rápido en C ++ .
Gordon Gustafson
99
VB6? ¿Seriamente? ¿Eres del pasado?
Konamiman
2
@ Konamiman: je, sí, lo estoy. No podría decir si quería decir "Me estoy preparando, en C ++, para un concurso de programación" o "Me estoy preparando para un concurso de programación de C ++". Oh, bueno, las fichas yacen donde pueden. Aún así, nada supera un entorno RAD muy rápido para programar competiciones, donde literalmente cada segundo cuenta.
Bryan Boettcher
Edité la pregunta para aclararla.
marktani
En RAD: Delphi 6 será la mejor apuesta entonces, posiblemente.
mlvljr