¿Todavía se considera que la escritura del código es una representación algorítmica?

votos
2

Acabo de perder el 50% de mi respuesta en una prueba porque escribí el código en lugar de un algoritmo en mi término medio, llevándome de una A a una C. ¿Todavía se considera que escribir códigos es una representación algorítmica?

Wikipedia: Representación de Algoritmos (ya que el estilo de programación es bastante basado en el consenso)

EDITAR: Ok, déjame aclarar algunos puntos:

  1. La prueba solicitó un pseudocódigo, que en realidad nunca definimos en clase; simplemente escribimos inglés para nuestros algoritmos.

  2. Es una clase de Java y escribió toda la solución en un método de Java, junto con comentarios. Todo esto fue escrito a mano, y tomó más tiempo para escribir que pseudo-código. Pensé que sería más claro.

  3. Normalmente no plantearí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 moderna de programación 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 por un tiempo, pero quiero poder contribuir con proyectos de código abierto pronto, y no quiero pisar los dedos de nadie. (Aunque estoy bastante seguro de que este tema tiene pocas posibilidades de aparecer en el mundo real).

De nuevo, gracias por cualquier ayuda / consejo.

Publicado el 05/11/2008 a las 00:12
fuente por usuario
En otros idiomas...                            


8 respuestas

votos
0

Todo lo que sé es que no deberías escribir ningún código hasta después de que tengas un algoritmo.

Respondida el 05/11/2008 a las 00:15
fuente por usuario

votos
5

Es posible que desee dar un ejemplo. Si su código se enfoca demasiado en aspectos específicos del lenguaje que no son parte del algoritmo, entonces es comprensible que se pudiera decir que no se mezcló algoritmo con su algoritmo, lo que resultó en un resultado incorrecto.

Siento el razonamiento, el objetivo del aprendizaje es mostrar que entiendes el concepto, no agacharte y marcar todos los cuadros adecuados.

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

La mentalidad de comer y regurgitar es la razón por la que nunca me gradué.


Con respecto a su comentario reciente, es importante darse cuenta de pseudocódigo no está definido. En general, existen términos reutilizados en el mismo, pero no es un lenguaje estricto más de lo que es Inglés (de lo contrario sería ser un lenguaje de programación, lo que podría ser interpretada y ejecutada pie de la letra)

La importancia del pseudocódigo es dar cuerpo a 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 escueto y más comprensible.

El seudocódigo tampoco depende de que el lector tenga una comprensión de la "sintaxis mágica" en el lenguaje para poder procesarlo, todo lo que necesitan entender son los términos utilizados.

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

Mientras:

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

puede dar un sentido coherente a alguien versado en perl, para el lector de código promedio todo lo que obtienen es una respuesta "¿cómo diablos acabas de decir?". Documentarlo tampoco ayuda mucho.

| 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 

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

Así que posiblemente, la mitad del ejercicio con la escritura del algoritmo sea un ejercicio de "No solo tienes que demostrar que lo entiendes, sino que también debes demostrar que puedes explicar tu razonamiento a otras personas que no saben nada del problema", que es vital. habilidad que necesitas Si no puede comunicar lo que ha hecho, nadie puede usarlo.

También hay un desagradable pequeño problema con el código, que no existe en un algoritmo, y es que el código puede parecer correcto, pero puede no hacer lo que crees que es, y si no funciona bien, y tú no lo haces. No se dan 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'

Respondida el 05/11/2008 a las 00:20
fuente por usuario

votos
3

En este caso, debes ceder ante el profesor.

Respondida el 05/11/2008 a las 00:23
fuente por usuario

votos
0

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 docente lo califica para su respuesta, no para su conocimiento; sería mejor que responda lo que le pidieron, en los términos que le gusta al maestro. Sí, todos lo sabemos, tú sabes mejor. Pero nunca es un mal ejercicio tratar de razonar el camino de otra persona, ¿sabes? Y al menos en mi país, el maestro tiene el derecho de evaluarlo libremente, así que ... ¡llevarse bien con él!

Respondida el 05/11/2008 a las 00:29
fuente por usuario

votos
2

Debe proporcionar más información. Le pidieron un algoritmo, pero el código proporcionado. ¿Comentó el código? ¿Cuánto cuesta? (Me gustaría ver la pregunta y su respuesta, pero tal vez eso es pedir demasiado).

Entonces responderé basado en mi propia experiencia. Si estoy pidiendo un algoritmo, entonces quiero algo que explique, en un 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 necesita ser claro, conciso y correcto.

Si me proporciona un código que hace lo anterior, entonces marcas completas. Sin embargo, si proporciona un código que es puro "lenguaje" y algo críptico, entonces las marcas se perderán, 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 cuando enseño programación es lograr que los estudiantes escriban MÁS, no menos. A veces tuve que recordarles que una tarea (o examen) no es una entrada en el "concurso de códigos más ofuscado". ;-)

Aclamaciones,

-R

Respondida el 05/11/2008 a las 00:49
fuente por usuario

votos
0

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

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

Respondida el 05/11/2008 a las 01:56
fuente por usuario

votos
0

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 para que lo entienda un humano. ¿La escritura en Java oscureció tu algoritmo? Eso determinaría si estoy de acuerdo con tu maestro.

Respondida el 05/11/2008 a las 02:22
fuente por usuario

votos
2

Como alumno de un curso avanzado de algoritmos, siempre quitaba puntos si simplemente había una solución codificada.

Algunas cosas simplemente no se pueden expresar con la misma elocuencia en el código que en inglés. El pseudocó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 comprensibilidad, 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.

Respondida el 13/11/2008 a las 21:04
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more