¿Porqué es dificil programar?

A veces es un poco molesto encontrarte con un post donde alguien pide que le hagas su tarea.

Oigan necesito un programa que sume 6 cantidades y muestre el promedio y lo muestre en pantalla...además usando POO y herencia...gracias
pd. Lo necesito a más tardar en 2 horas

Asi nada más y cuando tratas de ayudarle pidiendole más datos, sale con que solo es para "pasar la materia de programación avanzada " , "asi me lo pidieron", "¿qué no hay nadie que lo pueda hacer? "

Leyendo un post de @OscarRyz
http://www.javamexico.org/blogs/oscarryz/aportacion_java_mexico_pcj_como_pasar_del_problema_al_codigo_en_4_pasos
me llama la atención que no usen el Search this site:_________Buscar que hay arriba y buscar lo que necesiten.

En el post hace referencia a 4 pasos para entender y llegar a la solución del problema.

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

Además pone un ejemplo de como usarlos. He aqui mi propia versión de a solucion:Llamadas.java

import java.io.*;
import java.util.Scanner;

/**
 *
 *@author Sr. Negativo 2011
 *
 */

public class Llamadas{
       
        //constantes
        public static final int Local=2;
    public static final int Celular=5;
    public static final int Larga=3;
   

   static int  tipoServicio(int t){
        if(t==1){
                System.out.println("[LLamada local]\n");
        }else if(t==2){
                System.out.println("[LLamada a celular]\n");
        }else {
                System.out.println("[LLamada de larga distancia]\n");
        }
        return t;
   }
   
   public static void main(String[] args)throws IOException,Exception{
   
   Scanner teclado=new Scanner(System.in);
   
   int tipo=0;double duracion=0,costo=0;
   
   
    while(true){
       
        //tipo
        do{
               
                System.out.println("\n\t[Tipo llamadas]\n");
                System.out.println("1. Local-->$2 por minuto");
                System.out.println("2. A celular-->$5 por minuto");
                System.out.println("3. Larga distancia-->$3 por minuto");
                System.out.println("4. Salir");
                System.out.println("\nOpcion: ");
                tipo=teclado.nextInt();
        }while(tipo<=0||tipo>4);
       
        if(tipo==4){
                System.exit(0);
        }else{
       
        tipoServicio(tipo);//muestra el tipo de servicio
       
        //duración
        do{
                System.out.println("Duracion (minutos): ");
             duracion=teclado.nextDouble();
        }while(duracion<=0);
       
          switch(tipo){
                case 1:costo=duracion*Local;break;
                case 2:costo=duracion*Celular;break;
            case 3:costo=duracion*Larga;break;
            default:System.out.println("\nOpcion incorrecta ");break;
        }
       
        System.out.println("Costo total llamada: [$"+costo+"]");
               
        }//fin else
       
       
    }//fin while
   
 

   }//fin main
   
   

}//fin Llamadas

Tan solo es necesario leer y entender un poco el problema y hallar la soluciön por ti mismo y no esperar a que "alguien del sitio" te de la solución completa.

Por que no hacer "un comic" de como resolverias el problema.
A ver que necesito:
*Entradas: 6 calificaciones
*Salidas: suma y promedio de esas cantidades

Fórmula: sumatoria_calificaciones/numeroTotal_calificaciones

Promedio.java

import java.io.*;
import java.util.Scanner;

/**
 *
 *@author Sr. Negativo 2011
 *
 */

public class Promedio{

public static void main(String[] args)throws IOException,Exception{

double promedio=0,suma=0;
double[] materias={6.7,8.9,6.3,9.4,7.8,8.7};
int n=0,i=0;

System.out.println("\t[Calificaciones]");
for(n=0;n<materias.length;n++){
        System.out.println("Calficacion:"+materias[n]);
}

for(i=0;i<materias.length;i++){
 suma+=materias[i];
}
promedio=suma/materias.length;

System.out.println("\nSuma total:  "+suma+"\nPromedio: "+promedio);
}//fin main

}//fin Promedio

Ya ven si se puede solo es necesario leer y entender lo que te piden y definir las operaciones a realizar
Te sale algo asi:

[Calificaciones]
Calficacion:6.7
Calficacion:8.9
Calficacion:6.3
Calficacion:9.4
Calficacion:7.8
Calficacion:8.7

Suma total: 47.8
Promedio: 7.966666666666666

Comentarios

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.

Yo he encontrado que el

Yo he encontrado que el desconocimiento de la sintáxis y de las bibliotecas se mete continuamente en el camino.

Por ejemplo cuando se intenta hacer un programa sencillo en otro lenguaje de programación ( que no sea de la familia de la JVM por ejemplo ) continuamente hay que estarse deteniendo para ver como se divide un número, como se escribe un arreglo, como se agrega un elemento, como se define un tipo de dato etc. etc.

Después de que se supera la barrera inicial de la escritura, viene el saber y conocer las bibliotecas base del lenguaje. Por ejemplo saber que clase se puede usar para X o Y cosa, sin tener que crear una implementación propia (querer hacer una clase para darle formato a una fecha cuando en Java hay java.text.SimpleDateFormat )

Escribir tu mismo ejemplo eeeeeen.... mmmhhh.... Ioke, costaría un esfuerzo extra, por no saber como se escribe un programa en ese lenguaje para empezar.

Si a esto le agregamos que muchas veces cuando se intenta resolver los problemas técnicos, se están resolviendo los problemas del dominio ( el problema mismo ) las cosas se hace más difíciles.

Es por eso que digo que.. primero hay que entender el problema que queremos resolver, luego establecer los pasos y la programada sale sola al final. Algunos contrapreguntan ¿Y como sabemos que lo entendimos en primer lugar? Pero esa ya es otra historia.

El sistema educativo

El sistema educativo ,esta diseñado para que memorices o repitas mecanicamente y nunca hagas esfuerzo para pensar o razonar(solo las matematicas pero solo que casi nunca dejan entregar problemas grandes) aunque paresca increible quizas la primera vez que los alumnos de nivel medio-superior o superior en toda su vida escolar se encuentran con algo que no pueden memorizar ni puede hacer en menos de 15 minutos(sin tener que copiar o pegar de internet) o la primera vez que tienen que razonar(no pueden poner excusas al compilador o llegar a un acuerdo con el programa en ejecucion) ,por lo que NO saben como enfrentrar algo para lo que nunca en su vida se han enfrentado y peor aun tomando que tampoco saben ser autodidactas ,mas que en todos el sistema se castiga el error cuando en programacion lo mas normal es equivocarse, es una ilusion que solo en una clase de una hora 5 veces por semana en un grupo de mas 20 alumnos aprendan a programar (cuando al final casi todo el tiempo se gasta en no compila o en no hace lo que dice que debe hacer) ,y ni se diga si el maestro tampoco sabe programar y piensa que es como seguir el libro y peor que los alumnos nunca estan acostumbrados a leer y menos un libro.

Por lo que el intento de aprender programar se toma como si memorianzando los conceptos de que es programacion o que un ciclo,una condicion o las "bases" de programacion orientada a objetos y al final se cae en el copia y pega este codigo.

Podria sumas mas causas,pero en resumen es programar cuesta mucho tiempo ,mucha frustacion,mucha paciencia y mucha diciplina,puntos que nunca se tocan en el sistema educativo,¿como se reacciona al miedo o a la frustacion? rindiendote y pedir en foros o copiar de internet.

Como arreglarlo creo que seria mejor iniciar con cosas basicas de algoritmos,mas de lo que se dan en los cursos,haciendo mas enfasis en los algoritmos y en problemas mas reales.

Imagen de Sr. Negativo

Re:Sistema educativo

je je Por eso ya no voy más a la escuela, pero en serio tienes razón al alumno le es más fácil rendirse y copiar las soluciones en Internet.

Superar la frustración es muy dificil cuando no tienes ninguna ayuda.

Imagen de Shadonwk

¿Porque es difícil programar?

¿Porque es difícil programar?

simple y sencillamente, porque no tienen la lógica necesaria...

simple sencilla y concisa, seamos sinceros.. lo demás ya es pura sintaxis que resuelves con ayuda de google, o bien aceptando la ayuda de alguien que ya paso por eso.

@Shadonwk Ojalá fuera tan

@Shadonwk Ojalá fuera tan fácil.

Imagen de Sr. Negativo

¿Por qué es dificil programar?...

Si es dificil, pero tampoco imposible. No es necesario rendirse y dejarle el trabajo a los demás.

No depende solamente de conocer el lenguaje (el que sea), también depende de cómo usarlo y para qué.

La lógica es importante. Y la práctica constante.

Imagen de Shadonwk

Creo que la pregunta está un

Creo que la pregunta está un poco mal enfocada...

Haz un hola mundo en java..
Haz una agenda sencilla en java..
Haz un editor de código plano en java..
Haz un chat en java...

eso es programar y no creo que sea ningún problema si tienes lógica e indagas en google o preguntas dudas especificas.Ees muy muy diferente preguntar: ¿Al intentar establecer la conexión en un socket de java me arroja el siguiente error ... ... ...) que ¿Cómo se usan los sockets en java?

Ya lo cabrón es integrar un proyecto con arquitectura bien definida y sobre todo configurar algún plugin, herramienta, framework que te ayude a optimizar tu código. Pero programar en si lo que se dice programar no es tan cabrón…

PD. Algo así bien difícil de hacer, es interpretar el código de alguien que genera fuentes de más de 1200 líneas de código sin identar y sin remover los comentarios basura o intentos de debug que puso para ver si "entre al if"....

mmhh escribir código ( mal )

mmhh escribir código ( mal ) vs. programar. vs. desarrollar.

Admito escribir simplemente puede ser muy fácil.

Pero entendamos acá programar como el hecho de construir algo que esta bien estructurado ( así subjetivamente hablando ) y que es completo. O sea no simplemente hacer que compile.

Quizá para tí resulta muy fácil. A mi no me lo parece tanto, pero definitivamente no es imposible ni nada.

Imagen de beto.bateria

Es dificil programar porque:

- La mente debe de estructurar bien el problema y su solucion.
Una forma de darnos cuenta cuando esto no sucede es en la escritura, muchas personas no terminan la oracion, no dan una introduccion, el desarrollo de la trama esta mal organizado, es decir la idea la tienen, pero no tiene una estructura.
Esta parte esta muy relacionada con las sentencias de control de flujo.

- La mente debe de conocer las herramientas para poder solucionarlo.
¿Conoces bien la api de java?.

- Debe de existir una sintesis entre cada parte del problema y el conocimiento del lenguaje.
¿Cuando y como verificar el tipo de dato?, ¿Cuando y en donde poner un boton?, podemos hacer mas granular el problema y cuestionar, ¿cuando usamos un if o un while al verificar el dato?.

Desgraciadamente no se ejercita el cerebro, y esto es desde nuestra familia, no se le enseña al niño a idear soluciones a problemas, los papas hacen todo. Hecharle la culpa al sistema educativo, pues es quitarnos la responsabilidad y no reconocer que nosotros somos parte del problema.

Ademas, platicando con maestros, me han comentado que conforme pasa el tiempo, las nuevas generaciones de estudiantes no quieren esforzarse, y menos, usar su cerebro.

Asi que el trabajo de programador con el tiempo se va a cotizar mas (eso espero).

Imagen de Sr. Negativo

El chiste es pensar

Un ejemplo.

"Quiero calcular el signo chino de 4 personas, que me muestre el nombre de la persona, el año de su nacimiento y el signo chino que le corresponde a ese año"

Entonces ¿qué debo hacer?

Identificar entradas:
nombres de las personas
el año de su nacimiento

Identificar salidas o lo que se va a mostrar
el nombre
el año de nacimiento
su signo chino

¿Cómo lo hago?
Divides el año entre 12 y obtienes el resto o residuo
y ese residuo lo comparas con el que le corresponde a cada signo

0:"mono"
1:horos="gallo"
2:horos="perro
3:horos="cerdo"
4:horos="rata";
5:horos="buey"
6:horos="tigre";
7:horos="conejo"
8:horos="dragon"
9:horos="serpiente"
10:horos="caballo"
11:horos="cabra";

Y asi quedaria en Java

import java.io.*;
 
 
 public class Chino{
       
        public static final int MAX=12;
       
        public static void main (String[] args)throws IOException,Exception {
       
        //personas
        String[] personas={"benek","ezamudio","OscarRyz","whistmaster77","Sr. Negativo"};
        int[] anyos={1978,1975,1982,1980,1981};
            //lo de los años es pura suposición je je

        int resto=0;
        String horos="";
        int i=0,tam=0;
        tam=personas.length;
        for(i=0;i<tam;i++){
       
               
              resto=anyos[i]%MAX;
                       
                        switch(resto){
                                case 0:horos="mono";break;
                            case 1:horos="gallo";break;
                            case 2:horos="perro";break;
                            case 3:horos="cerdo";break;
                            case 4:horos="rata";break;
                            case 5:horos="buey";break;
                            case 6:horos="tigre";break;
                            case 7:horos="conejo";break;
                            case 8:horos="dragon";break;
                            case 9:horos="serpiente";break;
                            case 10:horos="caballo";break;
                            case 11:horos="cabra";break;
                            }//fin switch
                           
                            System.out.println("\n"+personas[i]+"  nacio en el año "+anyos[i]+" \nle corresponde el signo del "+horos);
                               
       
                           
         }//fin for i
       
       
               
        }//fin main

 }//fin Chino

Listo:
benek nacio en el año 1978
le corresponde el signo del caballo

ezamudio nacio en el año 1975
le corresponde el signo del conejo

OscarRyz nacio en el año 1982
le corresponde el signo del perro

whistmaster77 nacio en el año 1980
le corresponde el signo del mono

Sr. Negativo nacio en el año 1981
le corresponde el signo del gallo

Imagen de ezamudio

lenguaje

Y si aprovechas algunas ventajas que te ofrece el lenguaje que estás usando? Si defines un enum para los años chinos por ejemplo...

Imagen de Sr. Negativo

Enum

Pensé hacerlo de esta manera, para el próximo asi lo haré gracias.

Imagen de rodrigo salado anaya

Nos hacen fácil la chamba

@Shadonwk. Programar es fácil? Pues eso dile a los que hacen Java, Scala, Linux, Spring, los plugin de X cosa, los que hacen reconocimiento de imágenes, los que crean el software para los telescopios. Una cosa es ser muy fregón usando frameworks y que nos ayuden con leguajes tan humanos (que los podamos entender y usar similar)como Java y que nuestra duda ya estuviera resuelta por alguien más (bendito Google), y otra muy diferente es tomar un lenguaje y crear algo que nadie antes imaginara o resolver algo muy complicado.

Programar no es fácil, lo que es fácil son los requerimientos de tus clientes o incluso los tuyos.

Saludos amigo, bye.

Update: Si fuera fácil stackoverflow no existiría jejeje y javamexico seria muy aburrido.

Imagen de bferro

Me gustaría conocer a esos genios

¿Es fácil programar?
A los que responden Sí, yo les preguntaría que significa para ellos "programar", y una vez que conozca su respuesta, entonces podré percatarme de lo que están hablando.
Hace ya 36 años que Edsger W.Dijkstra escribió la nota intitulada "How do we tell truths that might hurt?". Una de esas verdades:

Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians.

Otros muchos gigantes de la profesión han escrito cosas similares.Suerte para los que pueden programar problemas reales con relativa facilidad.

Para mi

Para mi programar es tan dificil como hacer música

Hay a quien le gusta la música (usuarios)

Hay quien sabe leer música y tocarla programadores

Y hay quien compone música los programadores muy chingones

Imagen de rojovizcaino

¿Y donde quedaron los Ramones?

Hay quienes hacen sinfonias y otros se conforman con una buena rola punk. Es decir, hay veces que puedes ser muy elegante (dado que tu dominio, lenguaje y astros se conjuguen) o hay veces que puedes ser tan directo y al punto que alguien puede verse ofendido.

Imagen de rojovizcaino

¿Por qué es dificil comenzar a programar?

La programación en la escuela, al igual que las matemáticas, la física o la química no pasan de ser rompecabezas. El profesor te enseña en clase algunos conceptos y te pone ejercicios donde debes utilizarlos. El primer problema es poder abstraer el concepto y entenderlo, si tus conceptos estan batidos no puedes entender lo que pide el ejercicio ni tampoco plantear una solución. Me enseñaron a declarar un arreglo y el día de hoy también vimos el ciclo for, seguramente el programa para calcular el promedio de un conjunto de números debe utilizar esas dos cosas.
Creo que uno de los problemas al comenzar es que son demasiados los conceptos nuevos y sólo después de trabajar un rato con ellos están suficientemente asimilados como para poder entender como se pueden mezclar. Hay que aprender a pasar las cosas de la canasta de lo difícil a la canasta de lo simple y solo la experiencia te permite hacerlo.

En una imagen

Podria poner miles de palabras para intentar explicarlo pero al final todo se reduce a esto.

Reconocimiento a Eduardo Salles.

Imagen de ecamacho

¿Basta con que te apasione?

En mi experiencia no,

como dice el Dr. Ferro, es una profesión difícil y "echarle ganas" no basta. Quizás para una consultora donde tienen 100 empleados y basta con que el 20% sea bueno pa medio sacar los proyectos. Pero caemos en lo mismo, eso no es programar.

Para mi es una línea recta,

Tienes talento -> Te apasiona -> dedícate a programar.

Y por cierto, yo tampoco creo que todos los que estudian carreras relacionadas a la computación tienen que dedicarse a programar. Creo que mucho de la infravaloración de la profesión pasa por ahí, porque gente que no le gusta ni le interesa, vive de esto, al final en el mercado es más fácil encontrar empleo de esto que de mecatrónico (sin ofender a estos últimos, conozco un par que son buenos programadores).

Imagen de beto.bateria

PROGRAMAR ES DIVERTIDO.

¿PROGRAMAR ES DIVERTIDO?

>Programar es divertido?

>Programar es divertido?

posluego?

Imagen de Sr. Negativo

Re: PROGRAMAR ES DIVERTIDO

>Programar es divertido?

Pos claro que lo es

Basta con ver la cara que pone @OscarRyz ja ja ja

Sonreir no empobrece

?:)

Imagen de CesarAlducin

yo pienso lo siguiente,

yo pienso lo siguiente, después de leer tu comentario @ecamacho

Te gusta programar ----> desarrolla tu talento----> dedícate a programar.

creo así como lo pones hace pensar que solo programan los que nacieron con ese Don Y creo no es asi, porque si no no existieran cursos, libros etc.

y los que desarrollan lenguajes, frameworks no tendrían gente que los ocupara.

Imagen de CesarAlducin

yo pienso lo siguiente,

yo pienso lo siguiente, después de leer tu comentario @ecamacho

Te gusta programar ----> desarrolla tu talento----> dedícate a programar.

creo así como lo pones hace pensar que solo programan los que nacieron con ese Don Y creo no es asi, porque si no no existieran cursos, libros etc.

y los que desarrollan lenguajes, frameworks no tendrían gente que los ocupara.

Imagen de CesarAlducin

yo pienso lo siguiente,

yo pienso lo siguiente, después de leer tu comentario @ecamacho

Te gusta programar ----> desarrolla tu talento----> dedícate a programar.

creo así como lo pones hace pensar que solo programan los que nacieron con ese Don Y creo no es asi, porque si no no existieran cursos, libros etc.

y los que desarrollan lenguajes, frameworks no tendrían gente que los ocupara.

Imagen de beto.bateria

Esa cara de OscarRyz era de

Esa cara de OscarRyz era de un viernes en la tarde, antes de salir de las oficinas en donde trabaja.

Las citas de las respuestas

De tira cómica:

"es para pasar la materia de programación avanzada " , "asi me lo pidieron", "¿qué no hay nadie que lo pueda hacer? "

La última es la joya "¿qué no hay nadie que lo pueda hacer? " y súmele a la frase " ...tarugos... " por no decir otra cosa...

Aparte se ponen reynas...

Bueno no aporte nada sólo se me hizo chistoso...

Saludos

Diferencias de conceptos

Pues el problema es que programación es un concepto tan ambiguo que es uno quien "crea su propio concepto".

Para algunos programar es el tirar el código en base a lo que alguien más ya hizo y que sólo sería convertir a la sintaxis de un lenguaje.
Otros le llaman programar a poner de manera ordenada un conjunto de instrucciones para que los entienda un procesador.
Hay personas que consideran que programar es ir desde la arquitectura el análisis y diseño; fuera de esto lo consideran cómo "cosas mecánicas".

Dicho esto es la razón por la cual es difícil programar, porqué explicar "¿qué es programar?" es algo difícil. Seguro si le preguntas a 3 personas que es programar te van a contestar de manera diferente.

Desde mi punto de vista, programar es todo lo que llamamos desarrollo de software. De nuevo, para redundar y dejarlo en claro, esto es mi punto personal de ver las cosas. Para mí la programación va desde el entrevistar a la personas que necesita el software hasta el teclear líneas de código ya sea para completar el programa o para probarlo. Eso para mí es programar. Sin embargo pues podemos decir que dentro de los programadores hay clasificaciones (codificadores, analistas, arquitectos, testers -no se cómo se traduzca al español-, etc), y dado lo que abarca la programación tenemos especialistas en cada una de esas áreas o clasificaciones.
De paso sea dicho que por ejemplo hay gente que no se le da o no le agrada codificar, por lo que será una labor difícil. Sin embargo, puede existir alguien que se le haga difícil el abstraer ideas o el entrevistar al cliente. Por lo que decimos que a la gente se le hace difícil una de estas cosas; o hay gente que simplemente NO TIENE EL PERFIL PARA NADA relacionado con programación.

Talento vs Esfuerzo. Bueno, seguro que yo elijo el talento, creo que es más fácil volcar las actitudes de una persona que las aptitudes; aunque debe haber casos donde me equivoque =). Sin embargo creo que ambos pueden ser pulidos. El talento con esfuerzo y el esfuerzo con motivación.