Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Como empezar a aprender a programar?

Iniciado por Felixhr2000, 17 de Enero de 2015, 08:33:11 PM

« anterior - próximo »

Felixhr2000

Hola, soy un chico de 14 años y la programación es algo que me llama mucho la atención. Cómo puedo empezar a practicar? También me gustaría saber si ingeniería informática es una buena opción para hacer la parte de programación de videojuegos (o si no, de otro tipo de software). De momento estoy intentando aprender a programar en C con Codelite, siguiendo un curso de Nacho Cabanes. Gracias por vuestras respuestas de antemano.

Gallo

Hola Felix, lo principal es que si lo estas mirando por tu cuenta ya estas en el buen camino por que a programar se aprende en casa jeje, sobretodo si hablamos de programación de videojuegos. En general una ingeniería siempre puede estar bien, pero si lo que quieres es centrarte en la programación, un grado superior bien orientado también puede ayudarte.

Una ingeniería es algo mas larga y mas difícil pero te dará acceso a materias que no se dan en un grado superior, eso si, la mayoría no estarán explicitamente relacionadas con los videojuegos, ni te enseñarán como usarlas en videojuegos, eso es algo que seguramente deberás aprender tu por tu cuenta, si haces ingeniería en teoría debería serte mas fácil.

Me ha chocado un poco lo de Codelite y C# por que tengo entendido que ese IDE es mas bien para C/C++, estamos seguros de que es C# y no C/C++? De cualquier manera tanto si es uno como si es otro está bien, Unity 3D, uno de los motores para hacer videojuegos mas populares utiliza C#, otros motores utilizan C/C++ mas algún lenguaje de scripting en su mayoría. Otra opción para que veas resultados mas rápido puede ser HTML5, pero si ya estas con C# o C/C++ adelante con eso.

Eso si, muy importante, la programación de videojuegos va muy acompañada de las MATEMÁTICAS, yo no era muy bueno en mates y al final he tenido que volver a repasar muchas cosas que se dan en Bachillerato, así que te aconsejo que te pongas a saco con las mates, sobretodo vectores, geometría y también las formulas de física de movimiento rectilíneo uniforme, acelerado, etc..., serán fundamentales. Por cierto en la ingeniería, al contrario que en un grado superior, se sigue estudiando matemáticas, aunque con lo que se da hasta Bachillerato (al menos lo que yo di) es suficiente mientras lo vayas poniendo en práctica, técnicamente lo que un videojuego pinta en pantalla es el resultado de un puñado de formulas matemáticas.

Tienes la ventaja de ser joven, de estar interesado, y de poder preguntar lo que quieras por internet como has hecho en este foro, aprovéchalo, en esto de la programación cuanto antes empiezas, mejor, así que no tengas problema en seguir preguntando tus dudas por aquí y de seguir aprendiendo. Todo el tiempo que inviertas ahora en aprender esto es oro puro el día de mañana.


Felixhr2000

#2
Sí, me he confundido, no es C# sino que aprendo con C (ahora lo edito). Gracias por contestarme. Supongo que me miraré también el HTML5 ya que me lo has recomendado. Una duda ¿es mejor aprender muchos lenguajes o intentar hacer cosas mejores con uno sólo?¿ Y qué es la programación con objetos?
A parte de eso, supongo que tiraré hacia ingeniería ya que me dices que me acabará siendo más fácil al final, y porque de momento no me cuesta estudiar. A demas, debe tener más salidas no?
Otra cosa ¿Puedo seguir aprendiendo sin mirarme los temas de matematicas que dices hasta que no me toquen en bachillerato? O sería bueno que me los mirase antes de seguir con lo de aprender C y/o HTML5?

Gallo

Las matemáticas las puedes aprender cuando te toque aprenderlas, pero si quieres empezar a hacer algún juego 2d es posible que algún vector veas (te suena lo de coordenadas cartesianas? usar una coordenada x,y para indicar una posición en un plano? pues eso mismo se usa para indicar posiciones en una pantalla) mas allá de eso al empezar no creo que te haga falta adelantarte a nada.

Lo de lenguajes de programación, es importante empezar con un lenguaje y aprenderlo bien, el C me parece perfecto para empezar, una vez tengas uno bien dominado, conozcas sus características, como usarlo bien etc... es bueno que veas y experimentes con otros lenguajes, el día a día del programador es aprender cosas nuevas, y los lenguajes de programación es una de ellas, es normal utilizar varios lenguajes a la vez en un solo programa hoy en día, pero recuerda, primero domina uno bien. Si ya estas con C quédate con ese, lo del Javascript (lenguaje para programar en HTML5) lo comentaba por si te cuesta mucho entender el C, ya que HTML5/javascript es mucho mas sencillo y los resultados son mas inmediatos.

La programación con objetos, o mejor dicho, orientada a objetos, es un poco complicada de explicar así a bote pronto, digamos que consiste en representar a las entidades o componentes de tu programar en una definición (llamada clase) que encapsula sus funciones y propiedades. Creo que es mas fácil explicarlo con un ejemplo, por ejemplo si programamos un coche en C seria algo como:


#include <stdio.h>

//definiciones no existentes en C puro,
//no necesarias en un compilador de C++
typedef int bool;
#define true 1
#define false 0

//propiedades del coche
typedef struct coche_def
{
float puertas;
float velocidad;
bool encendido;
} Coche;

void incializaCoche(Coche* coche)
{
coche->puertas = 4;
coche->velocidad = 0.0f;
coche->encendido = false;
}

void encenderCoche(Coche * coche)
{
coche->encendido = true;
printf("coche encendido\n");
}

void apagarCoche(Coche * coche)
{
coche->encendido = false;
coche->velocidad = 0.0f;
printf("coche apagado\n");
}

void acelerarCoche(Coche * coche, float velocidadExtra)
{
if(coche->encendido)
{
coche->velocidad += velocidadExtra;
}
printf("velocidad actual del coche %f\n", coche->velocidad);
}

int main()
{
//instanciado en memoria estática
Coche miCoche;

incializaCoche(&miCoche);
encenderCoche(&miCoche);
acelerarCoche(&miCoche, 20.0f);
apagarCoche(&miCoche);

//instanciado en memoria dinámica
Coche * miCocheDinamico = (Coche*)malloc(sizeof(Coche));

incializaCoche(miCocheDinamico);
encenderCoche(miCocheDinamico);
acelerarCoche(miCocheDinamico, 30.0f);
apagarCoche(miCocheDinamico);

//al ser dinámico lo tenemos que borrar a mano
free(miCocheDinamico);

return 0;
}



En este caso, tenemos una entidad de tipo Coche y una serie de funciones para manipular su información, en un lenguaje orientado a objetos, coche seria un claro candidato a ser una clase. Si utilizáramos C++, que es una ampliación de C con orientación a objetos, seria algo así:


#include <iostream>

class Coche
{
private: //propiedades y métodos solo visibles dentro del propio objeto
float puertas;
float velocidad;
bool encendido;

public: //propiedades y métodos visibles fuera del objeto

//constructor del objeto
Coche() : puertas(4), velocidad(0.0f), encendido(false)
{
std::cout << "nuevo coche creado " << std::endl;
}

void encender()
{
encendido = true;
std::cout << "coche encendido" << std::endl;
}

void apagar()
{
encendido = false;
velocidad = 0.0f;
std::cout << "coche apagado" << std::endl;
}

void acelerar(float velocidad)
{
if(encendido)
{
//this es una palabra clave que se refiere al propio objeto
//aquí se usa para distinguirse del parámetro velocidad con el mismo nombre
this->velocidad += velocidad;
}

std::cout << "velocidad actual del coche " << this->velocidad << std::endl;
}
};

int main()
{
//instanciado en memoria estática
Coche miCoche;

miCoche.encender();
miCoche.acelerar(20.0f);
miCoche.apagar();

//instanciado en memoria dinámica
Coche * miCocheDinamico = new Coche();

miCocheDinamico->encender();
miCocheDinamico->acelerar(30.0f);
miCocheDinamico->apagar();

//al ser dinámico lo tenemos que borrar a mano
delete miCocheDinamico;

return 0;
}



En este segundo ejemplo la funcionalidad referente al coche está definida dentro de su clase, en primer lugar es una forma diferente de encapsular funciones y estructuras, pero obviamente la orientación a objetos va mucho mas allá, por ejemplo, con orientación a objetos puedes hacer una nueva clase que en lugar de partir de zero, herede la definición que ya has hecho en otra, podríamos definir una clase de tipo CocheMilitar, que "hereda" de Coche y agrega nuevas funciones como lanzar cohetes por ejemplo, eso en C requeriría repetir mucho código, ya que las funciones escritas para Coche no servirían para CocheMilitar, pero en C++ si.


#include <iostream>

//código de la clase Coche

//con : public Coche, heredamos la funcionalidad de Coche
class CocheMilitar : public Coche
{
private:
int cohetes;
public:
//este constructor también llamará por defecto al de Coche
CocheMilitar() : cohetes(5)
{
};

void lanzarCohetes(int numCohetes)
{
this->cohetes -= numCohetes;
std::cout << "Cohetes disponibles " << cohetes << std::endl;
}
};

int main()
{
CocheMilitar miCocheMilitar;

miCocheMilitar.encender();
miCocheMilitar.lanzarCohetes(3);
miCocheMilitar.apagar();

return 0;
}


Este ejemplo no tiene equivalencia en C por que no se puede hacer, no al menos de forma tan sencilla, no hay una sintaxis que nos permita hacerlo tan directamente como en C++ u otros lenguajes orientados a objetos. Comentar que esto era un ejemplo y lo normal es poner las clases en diferentes archivos,  normalmente la declaración va en los .h y la definición de las funciones en los .cpp, aunque no te preocupes por esto ahora mismo.

Si aprendes C te recomiendo que una vez lo tengas dominado te pases a C++, que actualmente es uno de los lenguajes mas utilizado para hacer videojuegos, al menos yo lo uso a diario, además los conceptos que aprendas sobre orientación a objetos están presentes en muchos otros lenguajes como C# o Java,.

Espero que te sirva de ayuda y no te confunda mucho este código, lo he improvisado pero lo he probado antes por si quieres copiar y pegar para ver lo que hace.

Saludos.


Felixhr2000

#4
Muchas gracias por tus consejos y el programa. Lo he probado en la consola, pero no logro comprender muy bien como lo has echo, supongo que con el tiempo lo sabre mejor, aun soy muy novato. Intentaré seguir haciendo cosas con C a ver que tal me sale. Muchas gracias por tu ayuda y el tiempo que debes haber dedicado a escribir ese programa.

tirsod

#5
Debes tener paciencia y dedicación, y pronto podrás hacer lo que quieras ^^

Felixhr2000

#6
Muchas gracias por tu consejo también, tirsod. Ya tengo un PDF sobre la programación en C con el que me voy orientando. También me baje uno de Python, antes de empezar a aprender, pero al final me decante por el C.
Yo con 12 años lo único que hacia era hacer archivos de esos .bat para entretenerme, que hacían preguntas y el if y  eso pero realmente no me puse a aprender programación digamos más difícil.

tirsod

#7
Si necesitas ayuda con python o con cualquier otra cosa, me puedes preguntar a mi tranquilamente.

Felixhr2000


sarita tally

Hola yo te recomiendo que, si no tienes tanto tiempo libre, mires algunos cursos que se ofrecen online si tienes guita y si no puedes mirar en youtube, hay muchísimos buenos cursos para hacer!
Chercheur contre nature
tuqueur, sur l'honneur qui jure






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.