› Foros › Off-Topic › El rincón del eoliano
¿Cree que las matemáticas o la física son un conocimiento importante para un programador? ¿Por qué?
Dave Heinemeier Hansson: Para nada. Al menos no resulta útil para el tipo de programación de negocio necesaria para crear aplicaciones web. Considero que es mucho más importante ser un buen escritor.
Red Ninja Wonder escribió:Además que, de nuevo como con las mates. no entiendo ni papa del puto argot. ¿Qué coño es eso de devolver un valor a la función? ¿Para qué?
double valor = sqrt(4);
Red Ninja Wonder escribió:¿Para qué hay que decirle al programa que la compilación ha sido exitosa (o algo así) con eso del return 0? ¿Es que si está mal no da ya él solito el fallo al compilar? ¿Y si le devuelvo otro valor que no sea 0, se queda con las vueltas o cómo? (por poner un ejemplo ).
Castel_ escribió:No estoy nada de acuerdo con esa cita, por cierto.
amchacon escribió:
Salvo que vayas a desarrollar un software matemático o un juego que requiera físicas.
Claro que se entrena. Yo estoy más o menos como tú, además estudio programación, y me cuesta el doble que a algunos compañeros que en su momento cogieron los itinerarios de matemáticas y se les daba bien. Se nota esa manera de pensar o de enfocar las cosas más matemática, por decirlo de alguna manera. Aún así, te digo que poco a poco vas acostumbrando a tu cabeza a pensar de esa manera.
En todo caso, esas preguntas que has puesto no tienen que ver con la manera de pensar lógica, sino con que desconoces qué es una función y cómo funciona en programación. Es un asunto teórico.
Creé un código para que si una suma da X resultado, diga el resultado, y si no diga "No". Al final tras quebraderos de cabeza, conseguí lo siguiente:
#include <iostream>
using namespace std;
int main()
{
int a;
int b;
int c;
c=8;
cin>>a;
cin>>b;
getchar (); // no se por qué, pero para que se quede fija la pantalla tras finalizar el programa, me hace poner el getchar dos veces
if( a+b==c ) {
cout<<c ;
}
else
{
cout<<"no" ;
}
getchar ();
}
Pues bien, luego intenté hacer simplemente un programa que sume, o que reste, o multiplique...
Con la suma, y de nuevo tras muchos quebraderos porque la lógica mía no funcionaba, conseguí esto:#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int a;
int b;
cin>>a>>b;// estas son las variables que se mueven.
getchar ();// no se por qué, pero para que se quede fija la pantalla tras finalizar el programa, me hace poner el getchar dos veces
cout<< a+b << endl; //parece que en cout se pueden manejar operaciones solas sin necesidd de declarar nueva variable
getchar ();
return 0;
}
De algún modo funcionaba. Bien, dando palmas con las orejas y tal .
Pero después, al intentar hacer la resta, claro, simplemente cambié
cout<< a+b << endl;
por
cout<< a-b << endl;
Al declarar una funcion puedes decirte si va a devolver un valor o no.
Si devuelves un valor, el punto del programa de donde se llama a esa función recuperara ese valor.
Lo cual tiene algunas ventajas, por ejemplo sqrt es una función que devuelve el valor de la raiz cuadrada:
Buenas, yo soy programador y te digo que mejorarse se mejora con el uso y la práctica, pero también te digo que la persona que de forma innata piensa de esta manera, siempre estará por delante en estos temas. A mi por ejemplo, siempre se me dieron bien las matemáticas y mal la lengua, esta claro que puedo escribir lo que quiera, pero nunca podría ser un buen escritor por ejemplo.
De todas formas como bien se dice, a programar se aprende programando, que lo mismo necesitas echarle más horas al principio???, pues échaselas y ya está, con el tiempo te cambiará el chip y pensarás de la manera que hay que enfocar estos problemas directamente, sin darte cuenta siquiera. Lo único que debes plantearte es que lo mismo te cuesta más trabajo al principio que a otros, pero si te esfuerzas, estoy seguro que lo consigues.
Un saludo
Red Ninja Wonder escribió:
Por cierto alex, tú que has hecho el módulo que quiero hacer yo, ¿por qué lenguaje me recomiendas empezar? Yo he empezado por C++ porque es lo que estudiamos en el módulo que empecé yo, y el profesor decía que si sabes ese, es más fácil aprender el resto...
Un saludo.
alexrikelme escribió:
Pues si quieres hacer el de desarrollo de aplicaciones web yo te recomendaría ir a por java, es un lenguaje no demasiado complicado, bonito y con muchas salidas, en mi primer año, en la asignatura de programación solo dimos java, en el segundo año dimos PHP, javascript, JSP y ASP. Si quieres continuar con C++ sigue, al fin y al cabo la metodología de programación es básicamente la misma en todos los lenguajes, por lo que si aprendes uno sabrás domar a los demás con poco esfuerzo.
Saludos.
Eruanion escribió:Yo te voy a dar un consejo práctico: Usa las tabulaciones. Que las { estén siempre a distinta altura, te ayudará a leer el código. Te lo digo porque veo que no los usas correctamente en el código que has pasado.
cipoteloth escribió:Es entrenable como casi todo, pero no quita que es mejor que se te de bien, porque es posible que acabes frustrado. Si quieres seguir, adelante, vas por el buen camino, práctica.
jorcoval escribió:Las matemáticas son importantísimas en la programación, en dos vertientes:
- el razonamiento lógico y abstracto
- la aplicación directa
En cuanto a aplicación depende del área, claro. Pero hay lógicas de negocio imposibles de entender si una base matemática.
Por ejemplo, yo hago software industrial.
Y no me veo haciendo un algoritmo adaptativo, un PID o una regulación más sencilla incluso sin matemáticas.
En programación web depende. Pero hay muchas aplicaciones web que manejan muchas matemáticas.
En cuanto al razonamiento supongo que se puede entrenar, pero mi fuerte siempre han sido las matemáticas y la abstracción, así que no puedo ayudarte.
jorcoval escribió:Te he añadido un párrafo. Creo que eso te puede ayudar.
"Programa" cosas del día a día.
cipoteloth escribió:Lo de ser mediocre es relativo, a mi me gusta, considero que se me da bien, y he acabado los estudios con notas muy altas, sin embargo no puedo ni medirme con los genios que hay por ahí sueltos.
Lo importante de que se te de bien, es que eso anima a renovarse y hacer cosas por tu cuenta. De verdad creo que ser programador sin vocacion debe ser de las peores profesiones del mundo.
De hecho, supongo que algo te tiene que gustar, porque la verdad no es una profesion que alguien busque por el dinero xD.
Red Ninja Wonder escribió:¿Pero para qué necesita un valor una función? ¿Para qué quiere recuperarlo? ¿Ese 2 de la raíz cuadrada para meterlo en otra variable por qué? ¿No vale con escribir otro 2?
double valor;
double resultado;
cin>>valor;
resultado = sqrt(valor)
cout<<"La raiz cuadrada es: "<<resultado<<endl;
amchacon escribió:Red Ninja Wonder escribió:¿Pero para qué necesita un valor una función? ¿Para qué quiere recuperarlo? ¿Ese 2 de la raíz cuadrada para meterlo en otra variable por qué? ¿No vale con escribir otro 2?
Es un ejemplo sencillo y didactico. Evidentemente en ese caso puedes poner un 2 directamente.
Si quieres un ejemplo real:double valor;
double resultado;
cin>>valor;
resultado = sqrt(valor)
cout<<"La raiz cuadrada es: "<<resultado<<endl;
Este es un programa que le pide al usuario un numero y le saca por pantalla su raíz cuadrado. Sqrt es una función que devuelve la raíz cuadrada del número que le introduzcas, por lo que es vital captar el valor que devuelve.
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int a;
int b;
int c;
c = a + b;
cin>>a>>b;
getchar ();
cout<<c<< endl ;
getchar ();
return 0;
}
cout<<c<< endl
cout<<a+b<< endl
if (a+b) {
cout<<c<< endl;
}
amchacon escribió:@Red Ninja Wonder Primero hay que leer del teclado con cin y después sumar (lo digo porque lo estás haciendo al reves).
jorcoval escribió:Piensa que la memoria siempre contiene "algo" aunque a veces es imposible saber qué.
Si declaras 2 variables (a y b) sin valor inicial (inicializadas) "algo" tienen.
Entonces haces que c=a+b, por lo que c es la suma de dos valores desconocidos.
Y a continuación le das valor a a y b...pero es que ya le has dado valor a c.
Por tanto, debes sumar después de asignar valores a a y b.
jorcoval escribió:Hacer
int b;
Es declarar una variable de tipo entero, en una zona de memoria. Lo que contenga esa zona, tú no lo sabes y ese valor puede ser 17880, 14 ó algo más raro aún.
Si quieres que sea 0, debes hacer
int b=0;
Hay lenguajes que ni te dejan utilizar una variable a la que no hayas asignado valor previamente. Como c#, por ejemplo.
amchacon escribió:O Java.
Por eso te recomendé Java. Que ademas es muy parecido a C++
Red Ninja Wonder escribió:jorcoval escribió:Hacer
int b;
Es declarar una variable de tipo entero, en una zona de memoria. Lo que contenga esa zona, tú no lo sabes y ese valor puede ser 17880, 14 ó algo más raro aún.
Si quieres que sea 0, debes hacer
int b=0;
Hay lenguajes que ni te dejan utilizar una variable a la que no hayas asignado valor previamente. Como c#, por ejemplo.
comprendo... pero en ninguna parte de mi codigo le he dado yo ningun valor...
la manera de asignar valores aquí es mediante el comando cin que da la orden al teclado, no? entonces el ordenador sabe que debe devolverte la suma hecha, pero después de que meta el teclado esos valores no? por eso se pone después...
¿es así?
jorcoval escribió:@red_ninja_power
Piensa que la memoria siempre contiene "algo" aunque a veces es imposible saber qué.
Si declaras 2 variables (a y b) sin valor inicial (inicializadas) "algo" tienen.
Entonces haces que c=a+b, por lo que c es la suma de dos valores desconocidos.
Y a continuación le das valor a a y b...pero es que ya le has dado valor a c.
Por tanto, debes sumar después de asignar valores a a y b.
retamal1990 escribió:Yo en mi carrera el primer año no entendia ni jota de programacion, fue un desastre, al segundo año, todos los conceptos que me sonaban a chino pasaron a ser claros. A medida que vayas programando, iras cambiando tu forma de pensar y razonar y al final te saldra "solo". Y cuando cambies de paradigma y seas capaz de adaptarte a el de forma rapida te sentiras "orgulloso" xD
PD: Haskell tiene su puntito de amor
una cosa es declarar y otra es dar valor a una variable (o hacer las dos cosas a la vez que tambien se puede).
Si yo digo:
int variable1;
estoy diciendo que tengo una cosa que se llama variable1 que es de tipo numero entero (sin decimales) pero que no tiene ningun valor.
ejemplo:
int edadIntroducida; // tengo una variable que se llama edadintroducida pero no tiene ningun valor, es de tipo int.
cout<< edadIntroducida; // si hago esto sin darle ningun valor pueden pasar 2 cosas dependiendo del lenguaje, que pete el programa o que muestre un valor basura: por ejemplo 36789126893321
finalmente, si hago:
int edadIntroducida;
edadIntroducida = 10; //le asigno a esa variable el valor 10 y ya la podre mostrar correctamente
cout<< edadIntroducida;
esto mostraria un 10 por la pantalla o la que fuera la salida estandar
Red Ninja Wonder escribió:o es que la manera de asignar valores aquí es mediante el comando cin que da la orden al teclado, no? entonces el ordenador sabe que debe devolverte la suma hecha, pero después de que meta el teclado esos valores no? por eso se pone después...
¿es así?
int a;
int b;
int resultado;
a = 2;
cin>>b;
resultado =a+b;
cout<<"El resultado es: "<<resultado<<endl;
Red Ninja Wonder escribió:entonces el ordenador sabe que debe devolverte la suma hecha, pero después de que meta el teclado esos valores no? por eso se pone después...
retamal1990 escribió:Haskell tiene su puntito de amor
Red Ninja Wonder escribió:@amchacon
Gracias mil.... he ejecutado un código como el que me has dado pero cambiando a=2 por bin>>a; y funciona...
Lo que sigo sin entender es por qué hago una resta y sale
O por qué pongo resultado= a-b; y en vez de hacer una resta, hace las operaciones al reves... (cuando sumo, resto y cuando resto, sumo).
amchacon escribió:Red Ninja Wonder escribió:@amchacon
Gracias mil.... he ejecutado un código como el que me has dado pero cambiando a=2 por bin>>a; y funciona...
Lo que sigo sin entender es por qué hago una resta y sale
O por qué pongo resultado= a-b; y en vez de hacer una resta, hace las operaciones al reves... (cuando sumo, resto y cuando resto, sumo).
Pues sin ver el código ni idea
#include <iostream>
#include <stdlib.h>
using namespace std;
int main ()
{
int a;
int b;
int resultado;
cin>>a;
cin>>b;
resultado = a+b;
cout<<"El resultado es: "<<resultado<<endl;
system ("pause");
}
amchacon escribió:Ese código funciona correctamente
Si cambias a+b por a-b te hará la resta con total normalidad.
retamal1990 escribió:recuerda que tienes que guardar el proyecto antes de compilarlo, si compilas sin guardar los cambios tu veras el codigo cambiado pero compilara lo ultimo guardado.
Red Ninja Wonder escribió:amchacon escribió:Ese código funciona correctamente
Si cambias a+b por a-b te hará la resta con total normalidad.
Pues yo lo ejecuto y si hago a+b en consola lo hace bien, pero si hago en consola a-b también hace la resta...
y si cambio en el codigo a+b por a-b, me hace en consola las operaciones al revés... 5-4 =9 o 5+4=1...
y no hay en ese codigo absolutamente nada más que no haya puesto aquí...
amchacon escribió:Tú problema es matemático.
Restar un negativo significar sumarlo, y sumar un negativo significa restarlo.
amchacon escribió:Solo tienes que poner los numeros. El simbolo ese sobra.
Tal y como lo estas poniendo, el programa entiende que a = 5 y b = -4.
Deberías poner un 5, pulsar enter, poner un 4 y pulsar enter.
PD: Y eso... Devcpp está bastante anticuado no es por nada *_*
Eruanion escribió:Es un problema de no saber. No tiene nada que ver con la lógica. No sabías que no te hacía falta poner el signo y ya está. Tampoco te agobies mucho, que es perfectamente normal.
Eruanion escribió:Si de verdad te gusta programar, aprenderás a programar. He visto a gente capacitada para programar dejarlo porque simplemente no le gusta. Es de esas cosas que como no te gusten se convierten en un coñazo. Si de verdad quieres, puedes. Con que seas consciente de que no se aprende en 3 días tienes bastante, sé paciente. Yo llevo 6 años desarrollando en java y aún hay muchas cosas que no sé. Y bueno, los hay peores que yo xD. Ahora mismo ando arreglando un código que es un despropósito, que carga la memoria con cada click del ratón con cosas que no debería. Y eso está hecho por alguien que se supone que sabe programar.
Así que nada, mucho ánimo y poco a poco. Ya irás cogiendo conceptos básicos.
armandokevin escribió:Yap, pero con que empiezo, para alguien que viene de 0 es muy complicado el estudio autodidacta.
Sí no h alguien que te vaya indicando estudia esto, después esto en fin....
Un saludo
Red Ninja Wonder escribió:armandokevin escribió:Yap, pero con que empiezo, para alguien que viene de 0 es muy complicado el estudio autodidacta.
Sí no h alguien que te vaya indicando estudia esto, después esto en fin....
Un saludo
Hola, soy el creador del hilo, perdona por no contestar antes. No había visto tu respuesta, y no me gusta dejar a otra gente con los mismos problemas que tuve yo una vez se me han ayudado.
Yo también estoy aprendiendo de forma autodidacta. Te puedo decir que lo primero, primerito, aprendas la Lógica de programación. Un libro muy bueno que me ha ayudado muchísimo es "Esencia de la Lógica de Programación", de Omar Trejos Buitirica, o algo así se llama él.
Ese libro te explica, te da ejercicios prácticos, y te establece un poco el orden en que ir aprendiendo las cosas.
El Lenguaje de programación, pues según tus preferencias, mírate las respuestas que me dieron a mí. De todas formas, por ahora que sea simplemente para poner en práctica lo que vayas aprendiendo de Lógica (manejar bucles... etc). No te líes a profundizar mucho en un Lenguaje ahora, creo yo.
Otro foro muy bueno que te recomiendo (en inglés), es
http://stackoverflow.com/
Y eso: practica, practica, y practica. E intenta que alguien que sepa te explique dudas (gracias a cierta persona del foro, por cierto ).
Esa persona sabe que he estado a punto de dejarlo varias veces por eso, porque soy de Letras y sigo dudando si voy a valer; pero por ahora voy avanzando.
Estos días mismo andaba desesperado porque quería hacer un array que me leyera los valores que yo quiero, y me los ordenase de menor a mayor. ¿Cómo lo conseguí al final? Recortando varios papeles con los valores dados, en las posiciones indicadas al ordenador, y observando cómo se mueven esos números o cómo deberían hacerlo para que se haga lo que yo quiero. Cada movimiento una instrucción. Vi dónde fallaba mi lógica... y di con ello
Lo que te quiero decir es que a veces hay que mandar la pantalla del ordenador a la mierda. sentarse con un lapiz y papel o algo físico (como mis cuadraditos), que represente por ejemplo lo que pasa en la memoria del ordenador al jugar con las variables...
Es el mejor consejo que me dieron a mí: lapiz y papel. Y empieza por programar cosas reales, del día a día. Sírvete del libro que te he dicho, de internet y foros y, sobre todo, de Google... No hay casi ninguna duda que alguien no haya tenido antes.
A veces me hacen falta pistillas, sí, pero con esas pistas suelo poder acabar resolviendo las cosas (de momento).
Otras veces me lo han tenido que explicar directamente y me ha costado un triunfo entenderlo, pero imagino que eso les ha pasado a todos en algún momento...
Sobre CFGS y tal, yo también ando con pegas -ya que aún no sé ni siquiera si quizá me estoy metiendo en algo que no se me da bien y la estoy cagando por ello-, así que poco te puedo ayudar en eso; pero sí te digo que un título te abrirá muchas puertas. Conozco gente que ha aprendido a programar sola también, pero no sé laboralmente cómo les irá.
Y eso, PRACTICA, PRACTICA Y PRACTICA. Consigue el libro que te he dicho, métele horas, y nos cuentas
Un saludo!