Pregunta

Acabo de perder el 50% de mi respuesta en una prueba porque escribí el código en lugar de un algoritmo en mi mitad de período, llevándome de una A a una C. ¿Escribir el código todavía se considera una representación algorítmica?

Wikipedia: Representación de algoritmo (ya que el estilo de programación se basa bastante en el consenso)

EDITAR: Ok, déjenme aclarar algunos puntos:

  1. La prueba solicitó un pseudocódigo, que nunca realmente "definimos". en la clase; acabamos de escribir en inglés para nuestros algoritmos.

  2. Es una clase Java, y escribió la solución completa en un método Java, junto con comentarios. Todo esto fue escrito a mano y tardó más en escribir que el pseudocódigo. Pensé que sería más claro.

  3. Normalmente no haría un problema sobre tales cosas, pero es la diferencia entre una A y una C, y tengo una beca en mis exámenes.

  4. Finalmente, estoy haciendo esta publicación por dos razones:

    4.1 Quiero mostrar lo que la comunidad de programación moderna piensa sobre el pseudocódigo y la representación algorítmica.

    4.2 Quiero saber qué es aceptable en el "mundo real"; He estado programando durante algún tiempo, pero quiero poder contribuir a proyectos de código abierto pronto, y no quiero pisar los pies de nadie. (Aunque estoy bastante seguro de que este tema tiene pocas posibilidades de aparecer en el mundo real).

Nuevamente, gracias por cualquier ayuda / consejo.

¿Fue útil?

Solución

Es posible que desee dar un ejemplo. Si su código se enfoca demasiado en los detalles del lenguaje que no son parte del algoritmo, entonces, comprensiblemente, se podría decir que tenía un algoritmo no mezclado con su algoritmo, lo que resulta en un resultado incorrecto.

Siento el razonamiento, el objetivo de aprender es mostrarle que comprende el concepto, no inclinarse y marcar todas las casillas correctas.

Se puede enseñar a una computadora a pasar la universidad, pero aún no se puede enseñar a una computadora a pensar por sí misma y aplicar el conocimiento.

Comer y regurgitar la mentalidad es por eso que nunca me gradué.


Con respecto a su comentario reciente, es importante darse cuenta de que el pseudocódigo no está definido. Generalmente hay términos reutilizados en él, pero no es un idioma estricto más que el inglés (de lo contrario, sería sería un lenguaje de programación, que podría analizarse y ejecutarse textualmente)

La importancia del pseudocódigo es desarrollar la parte lógica del sistema y no tener que preocuparse demasiado por la sintaxis más allá de "tiene sentido"

A menudo, esto puede hacer que el pseudocódigo sea más conciso y más comprensible.

El pseudocódigo tampoco se basa en que el lector comprenda la "sintaxis mágica" en el lenguaje para procesarla, todo lo que necesita entender son los términos utilizados.

Si le dieras a la persona promedio un algoritmo en perl, por ejemplo, la mayoría de las personas morirían de horror porque no ven más allá del ruido de la línea.

Mientras:

sub foo { 
   my @args = @_ ; 
   my( $a, $b )=(@args[0],@args[1]); 
   for( @{ $a } ){
       $b .= 

Es posible que desee dar un ejemplo. Si su código se enfoca demasiado en los detalles del lenguaje que no son parte del algoritmo, entonces, comprensiblemente, se podría decir que tenía un algoritmo no mezclado con su algoritmo, lo que resulta en un resultado incorrecto.

Siento el razonamiento, el objetivo de aprender es mostrarle que comprende el concepto, no inclinarse y marcar todas las casillas correctas.

Se puede enseñar a una computadora a pasar la universidad, pero aún no se puede enseñar a una computadora a pensar por sí misma y aplicar el conocimiento.

Comer y regurgitar la mentalidad es por eso que nunca me gradué.


Con respecto a su comentario reciente, es importante darse cuenta de que el pseudocódigo no está definido. Generalmente hay términos reutilizados en él, pero no es un idioma estricto más que el inglés (de lo contrario, sería sería un lenguaje de programación, que podría analizarse y ejecutarse textualmente)

La importancia del pseudocódigo es desarrollar la parte lógica del sistema y no tener que preocuparse demasiado por la sintaxis más allá de "tiene sentido"

A menudo, esto puede hacer que el pseudocódigo sea más conciso y más comprensible.

El pseudocódigo tampoco se basa en que el lector comprenda la "sintaxis mágica" en el lenguaje para procesarla, todo lo que necesita entender son los términos utilizados.

Si le dieras a la persona promedio un algoritmo en perl, por ejemplo, la mayoría de las personas morirían de horror porque no ven más allá del ruido de la línea.

Mientras:

| there is a subroute foo which can take a list of strings, and a default string, 
\-  which then iterates all items in  that list, 
| \-  and for each item in that list 
|     1. appends the contents of that item to the end of the default string
|     2. removes all instances of the string "id" in that item
| 
 \ and returns a list, which contains 
    1. the concatentated default string 
    2. the modified input list 

puede tener un sentido coherente para alguien versado en perl, para el lector de código promedio todo lo que obtiene es un "qué demonios acabas de decir" respuesta. Documentarlo tampoco ayuda mucho.

<*>

De repente, se vuelve menos ambiguo y un mayor porcentaje de personas puede entenderlo.

Entonces, posiblemente, la mitad del ejercicio de escribir el algoritmo es un ejercicio en "No solo tienes que demostrar que lo entiendes, también tienes que demostrar que puedes explicar tu razonamiento a otros que no saben nada del problema". , que es una habilidad vital que necesitas. Si no puede comunicar lo que ha hecho, nadie puede usarlo.

también existe este pequeño y desagradable problema con el código, que no existe en un algoritmo, y es que el código puede verse correctamente, pero puede no hacer lo que usted piensa lo hace, y si no lo hace bien, y no te das cuenta, las personas que leen el código de ingeniería inversa lo estropearán y copiarán un algoritmo roto . no está bien. el algoritmo en forma humana traduce mejor "esto es lo que quiero que haga"

; s/id//g; } return [$b,$a]; }

puede tener un sentido coherente para alguien versado en perl, para el lector de código promedio todo lo que obtiene es un "qué demonios acabas de decir" respuesta. Documentarlo tampoco ayuda mucho.

<*>

De repente, se vuelve menos ambiguo y un mayor porcentaje de personas puede entenderlo.

Entonces, posiblemente, la mitad del ejercicio de escribir el algoritmo es un ejercicio en "No solo tienes que demostrar que lo entiendes, también tienes que demostrar que puedes explicar tu razonamiento a otros que no saben nada del problema". , que es una habilidad vital que necesitas. Si no puede comunicar lo que ha hecho, nadie puede usarlo.

también existe este pequeño y desagradable problema con el código, que no existe en un algoritmo, y es que el código puede verse correctamente, pero puede no hacer lo que usted piensa lo hace, y si no lo hace bien, y no te das cuenta, las personas que leen el código de ingeniería inversa lo estropearán y copiarán un algoritmo roto . no está bien. el algoritmo en forma humana traduce mejor "esto es lo que quiero que haga"

Otros consejos

En este caso, debe diferir al profesor.

Necesita proporcionar más información. Se le solicitó un algoritmo, pero se le proporcionó el código. ¿Comentaste el código? ¿Cuánto cuesta? (Me gustaría ver la pregunta y su respuesta, pero quizás eso es pedir demasiado).

Entonces responderé en base a mi propia experiencia. Si solicito un algoritmo, entonces quiero algo que explique, en inglés decente, cómo resolver el problema y / o cumplir con los requisitos de la pregunta. Los diagramas también son buenos (a veces mejores). Párrafo, forma de punto, lo que sea: solo debe ser claro, conciso y correcto.

Si me proporciona un código que hace lo anterior, entonces las marcas completas. Sin embargo, si proporciona un código que es puro "idioma" y bastante críptico, entonces se perderán las marcas, más o menos dependiendo de cuán críptico sea realmente el código. Incluso con el código, me gustaría ver un diagrama también, solo para mostrar una comprensión completa de los conceptos.

Una de las cosas más difíciles que enfrento al enseñar programación es lograr que los estudiantes escriban MÁS, no menos. A veces he tenido que recordarles que una tarea (o examen) no es una entrada en el concurso de código más ofuscado. ;-)

Saludos,

-R

Como calificador para un curso de algoritmos avanzados, siempre quitaría puntos si simplemente hubiera una solución codificada.

Algunas cosas simplemente no se pueden expresar de manera tan elocuente en el código como en inglés. El seudocódigo es un intento de liberarse de la sintaxis estricta del compilador y permitir cierta expresividad. Es un paso en la dirección correcta de la comprensión, pero no siempre es suficiente.

Especialmente en una clase de algoritmos, siempre es importante proporcionar una prueba de corrección (ya sea por inducción, contradicción, etc.), así como una notación de gran O para la complejidad espacial y temporal de su algoritmo .

Todo lo que sé es que no debes escribir ningún código hasta después de tener un algoritmo.

El problema con el uso de código en lugar de pseudocódigo es que, teóricamente hablando, uno podría suponer que era código, no pseudocódigo. De todos modos, el maestro lo califica por su respuesta, no por su conocimiento; sería mejor que respondiera lo que le pidieron, en los términos que le gustan al maestro. Sí, todos lo sabemos, lo sabes mejor. Pero nunca es un mal ejercicio tratar de razonar a la manera de otra persona, ya sabes. Y al menos en mi país, el maestro tiene el derecho de evaluarlo libremente, así que ... ¡llévese bien con él!

Solo habla con tu profesor y pregúntale por qué te equivocaste. Pregúntele cuál sería la respuesta correcta y cuál es la diferencia fundamental entre los dos.

¿Podría ser que el algoritmo que escribiste no era correcto?

El código es un algoritmo escrito para que una máquina pueda ejecutarlo. No hay nada en esa definición que diga que no está escrito también para que un humano lo entienda. ¿Escribir en Java oscureció su algoritmo? Eso determinaría si estaba de acuerdo con tu maestro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top