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?
Respuestas:
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.
fuente
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.
fuente
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 .
fuente
:)
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.
¿Solo usa una función?
std::min
ya existe.std::array<T, N>
Ya inicializa su contenido.El primer paso es conocer el idioma que está utilizando.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente