Aportación Java México - PCJ - Como pasar del problema al código en 4 pasos.

Estuve pensando y pensando y repensando que podría escribir, pero no me decidía por ningún tema.

Contestando esta pregunta me encontré con que es muy común no saber como pasar de la descripción del problema ( la especificación funcional ) al código.

Esto pasa en todos los niveles y es mucho, muchísimo más difícil cuando se se está empezando a programar, pero incluso programadores profesionales fallan en alguna parte ( sobre todo en el primer paso: "entender el problema" ).

Pensando en eso y en los muchos principiantes que se encuentran en una situación totalmente desesperada de no saber ni por donde empezar, mi aportación es explicar como en 4 pasos se puede pasar del problema al código.

  • Paso 1.- Lee el problema y entiéndelo ( hasta que todo este claro )
  • Paso 2.- Identificar variables y funciones
  • Paso 3.- Escribir paso a paso como se resuelve el problema ( escribir el algoritmo o pseudo-código )
  • Paso 4. - Escribir el código!!

La descripción del problema que tiene nuestro compañero es:

En un café internet se pueden realizar llamadas locales, de larga distancia y a celular, el dueño del café registra al final de la llamada el tipo y el tiempo de la llamada para conocer el costo total de acuerdo a lo siguiente:

Llamada local = 2.00 el minuto
Llamada a celular= 5.00 el minuto
Llamada de larga distancia=3.00 el minuto

Finalmente se despliega el tipo, duración y costo total de la llamada en una pantalla.

Así que vamos a resolverlo con estos 4 pasos.

1. Lee el problema y entiendelo ( hasta que todo este claro )

El objetivo aquí es que en terminos funcionales ( que lo pueda entender tu abuelita , nada de programación ) puedas saber que diablos se quiere obtener del programa. Si no estás seguro difícilmente podrás programarlo.

Abue... fijate que... ( bueno mejor tu abuelita no, que tal tu hermano que aún va en secundaria )

Hermano: Hay un café que te en el que puedes hacer llamadas y cuestan:

$2 las locales
$3 las de LD y
$5 a celular.

Necesito saber cuando me cuesta hacer una llamada de tiempo X

2. Identificar variables y funciones

Ya que sabes de que se trata y que es lo que se requiere ( ya sabes cuales son las entradas y cuales son las salidas ) lo siguiente es identificar las variables ( las cosas que cambian en el problema) , las constantes ( las que no cambian ) y las reglas ( que se convertirán en funciones ) y ya podemos saber lo que es irrelevante y debe de ser ignorado:

Me importa el café internet? No
Me importa el dueño ? No
etc. etc.

Hasta que llegues a algo como:

- variables
duracion de la llamada
tipo de llamada

- constantes
Costo por minuto de: local = 2, largadistancia=3, celular=5

- reglas o funciones

El costo de una llamada es igual a duración de la llamada x el tipo de llamada

3. Escribir paso a paso como se resuelve el problema ( escribir el algoritmo o pseudo-codigo )

Ok
paso 1
Capturar la duración de la llamada
paso 2
Capturar el tipo de llamada

( aunque tiene más sentido si primero se hace al revés, primero el tipo, luego dejar que hable y después cuanto duró , en fin )

paso 3

calcular el costo usando la regla duración x tipo

Escrito en pseudo código sería:

 

NOTA:Cuando tengas dudas de como hacer algo auxiliar ( algo que no es relevante para tu programa ) pon una funcion imaginaria y piensa, "Ya con eso se resuelve" y regresa a lo importante, en este caso mis funciones imagina-axuiliares son "capturaDuracion() y capturaTipo()"

Ya que tienes el pseudo código lo examinas y ves si va a funcionar o no para lo que quieres ( también se le dice a esto prueba de escritorio ) lo corres a papel y lápiz las veces que sean necesarias y finalmente:

Paso 4. - Escribir el código!!

Esto es ya lo más fácil y varia para cada lenguaje de programación ( en nuestro caso Java ) pero los 4 pasos anteriores los puedes aplicar para cualquier otro lenguaje de programación ( casi ).

Para escribir el código necesitas saber las reglas de ese lenguaje ( como en toooodos los lenguajes, sean de programación o no )

Esto se aprende con la práctica, lo más sencillo es traducir directamente el pseudo-código:

 

Importante Si te fijas, mi pseudo-codigo y el código java son ¡extremadamente! similares. No hay necesidad ( al principio ) de hacer cosas muy rebuscadas, con la experiencia se van aprendiendo y se va corrigiendo el estilo. Lo importante es que puedas poner tus pensamientos en pseudo-codigo y pasarlo lo más fácilmente posible a código.

Vamos a ver si corre... ( debe de salir 10 por que 2 minutos a celular ( 5 ) , son 10 ... panchodolares )

mmhhh fallo
 

Esto siempre, siempre de los siempres pasa. Lo más normal es que me falte un punto y coma o algo así. Lo mejor es aprender a leer los mensajes de error y familiarizarse con ellos.

Veamos. Ahh ya, me falto un   en la linea 20 y cerrar con un   en la linea 47

Se los pongo y listo!!!

 

Siguientes pasos

Primera versión corriendo, jala correctamente, hace lo que tiene que hacer, es caaaasi perfecta.

El resto es cuestión de trabajar y buscar en internet ( algo que se llama Google ) y probar y probar y probar y probar.

Dependiendo de los requerimientos, se puede o no capturar el costo desde la pantalla, se puede hacer una aplicación con GUI y todo, se puede hacer una pagina web, se puede recibir desde un servicio web etc. etc. etc.

Como la descripción no dice como hacer la captura, puedes hacerlo del modo más sencillo que te sea posible. En el mundo real, debes de preguntar como se requiere y/o proponer opciones

Por que no ponemos un rayo lector de mente que ...

Yo te sugiero que captures desde la consola lo que el usuario debe de teclear ( tip   ) para que te quede más o menos así

Que conste que de solo se necesitan 8 lineas de código más.

Espero que este mecanismo de 4 pasos te sirva en de aquí en adelante.

No es el único, pero así es como yo aprendí. Con el tiempo esos 4 pasos se automatizan en tu mente y sin que te des cuenta ya estas escribiendo código en automático.

Saludos.

EDIT Aquí hay otro ejemplo de como pasar del "problema" al "código" usando estos cuatro pasos:

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

PCJ

Primero que nada, no me salieron las cuentas, el título y el principio del artículo hablan de 4 pasos que incluso enumeras, pero la conclusión dice con el tiempo esos 5 pasos… cuál fue el quinto? es una prueba para ver si estábamos poniendo atención?
Ya en serio, el procedimiento que describes me parece muy bueno para resolver problemas sencillos que pueden pasar directamente de la conceptualización a la codificación, y esto ayuda mucho a programadores novatos (lo cual a mi entender es el objetivo del artículo). Sin embargo creo que sería importante mencionar que para problemas más complejos existen otros procedimientos como distintas metodologías de diseño (UML, diseño conceptual, diagramas de flujo, etc) que muchas veces no requieren de mayor tecnología que papel y lápiz, igual que el procedimiento que describes. Al final lo importante es desarrollar esa capacidad de abstracción y de identificar las partes importantes del problema antes de ponerse a echar código. En general muy buena aportación.

jejej yieap.. el problema es

jejej yieap es un "Awarenes test" :) :) .. el problema es que le dí publicar y cuando me fijé dije: Aaachis pos cuales 5 si son 4? y corregí el contenido, pero pues el URL nomás ya no lo pude editar :-S

Si, la idea es tener algo extra simple con que responder al clásico Ayuda en Java aunque no salió tan conciso como quería.

Imagen de Jhanno

Revisado PCJ

Un aporte interesante.. Sobre todo en la contabilización de los pasos a seguir :D Una introducción funcional para los novatos.

Imagen de Jhanno

Ganador Lugar PCJ

Queremos anunciarte que eres uno de los seleccionados para ser alumno en PCJ. Felicidades.

Imagen de jali

Felicidades

Muchas felicidades y gracias por este buen aporte :)

Yupiiiii!!! A donde paso por

Yupiiiii!!! A donde paso por mi cheque?.... :)

Imagen de benek

Muy buen tema,

Muy buen tema, ¡felicidades!

Y lo mejor es que ya comenzaste a aplicarlo en otros posts, sin duda será una referencia para muchos usuarios.

Saludos y nos vemos en clase.

Javier Ramírez Jr.

Imagen de carterlash

Una Gran ayuda

Gracias OscarRyz

Espero y más gente suba este tipo de info para nosotros los novatos.

De nada. Todos fuimos

De nada.

Todos fuimos novatos alguna vez y/o lo somos de alguna otra cosa.

Por ahí tengo un par de cosas más que escribir. Pero pasará un tiempo antes de que lo haga.

Saludos.