Aprender a programar, ¿cómo y donde?

helicon

Con muchos meses por delante sin hacer nada, a la espera de encontrar un trabajo, estoy obsesionandome un poco ultimamente con el tema de programación.

He estado leyendo hilos que he encontrado por el buscador y tal y bueno, básicamente lo poco que me ha quedado claro es que debería de primero entender qué es la programación realmente y en que consiste y cómo funciona y demás, y una vez ya tenga un mínimo de conocimientos meterme a algun lenguaje de lleno, que no sea extremadamente complejo, con el que poder obtener resultados decentes en poco tiempo para no perder la paciencia, y que tenga un mínimo de futuro y no sea un lenguaje obsoleto / inútil que no me sirva para nada si realmente todo esto me lleva a algo.

El problema es que no me ha quedado claro ni qué lenguaje escoger, ni donde aprender las bases del tema, ni nada.

Para intentar especificar un poco más, lo que más me atrae es el tema de videojuegos y tal -algo que supongo que no será nada raro en el campo-, si es que sirve de algo para elegir un lenguaje que me pueda ser útil o algo.

Igualmente ya de paso comentar que con la prueba de acceso a cfgs ya realizada, estoy planteandome entrar en desarrollo de aplicaciones multiplataforma en vez de a sonido (que es lo que tenía intención de hacer), por si acaso al tener esta posibilidad debería de tirar mejor por otro lado o lo que sea.

en fin... a ver si podeis iluminarme alguno o algo que no tengo ni puta idea de por donde coger el tema.

edit: ah, sé un mínimo de html y css (del grado medio de esi), y una minucia de php, por si sirve de algo (que lo dudo, pero meh)

Meleagant

A la gente siempre le llama la programación de videojuegos lo que más, pero lo cierto es que es de lo más chungo que hay.

Maneja bastantes matemáticas.

2 respuestas
Deoxys

#2 A la gente le llama la programación de videojuegos porque se piensan que con 10 minutos de teclear en el bloc de notas sacan un skyrim. Programar para juegos es igual de coñazo que la programación de aplicaciones de contabilidad. Es la misma puta mierda.

#1 Si quieres aprender empieza por programación normal (Por ejemplo, C). Mírate el libro 'El lenguaje de programación C'. En un par de semanas deberías dominarlo perfectamente, no tiene ningún misterio. Si al acabar no te estás cagando en todos los difuntos, pasa a programación orientada a objetos y empieza a hacer cosas.

PD: Y el lenguaje da igual. Si sabes uno, adaptarse a cualquier otro es cuestión de minutos con un vistazo a un manual y una tabla de referencia a mano.

PPD: Ni se te ocurra tocar java.

2 1 respuesta
helicon

#2 Eso es algo a lo que le tengo algo de miedo, el tema de matemáticas y tal. Vamos, que tengo entendido que matematicas y física a saquísimo en cuanto a estudios relacionados con el tema así que me imagnio que será por algo. Pero bueno, supongo que mas que un requerimento es algo que se va desarrollando dedicandole horas mientras tanto, ¿no?

#3 A ver, doy por hecho que skyrim no se hace en diez miutos en el bloc de notas. Doy por hecho que jamás en mi vida llegaré a hacer algo como skyrim más que nada porque solo soy un simple humano y ni siquiera sé si realmente me va a acabar gustando esto. Cuando pienso en el tema más bien me imagino típico sidescroller a resolución primitiva con pixelacos como castillos hechos por alguien que no tiene ni zorra de dibujar, de hacer un sprite, ni de nada. Sé más o menos mis limitaciones en ese sentido, vaya.

He estado mirando lo del libro y parece interesante, pero ¿es una lectura accesible a alguien que no entiende NADA?
ah, ¿y por qué de java nada? quiero decir, en este mismo foro he leído de varios usuarios que lo usan / han usado o incluso han aprendido con java, pero no tengo ni idea de si es más chungo o menos util o qué.

2 respuestas
LOc0

http://algoritmia.net/

http://mec21.etsii.upm.es/ayudainf/aprendainf/AnsiC/leng_c.pdf

Salu2 ;)

B

www.jutge.org tiene muchos problemas de programación que tú mandas el código sin compilar,el servidor te lo compila y comprueba que de la solución correcta y lo haga en un tiempo razonable.

Por otro lado,de videojuegos no lo sé, pero de demos (básicamente,se parece mucho a los videojuegos pero con la diferencia de que no son interactivos) te puedo decir algo,y es que ni es fácil,ni lo que alguien que no sabe del tema se cree que es.

Cuando sepas algo (mucho más) del tema podrás decidir qué es lo que te gusta.

El asunto de los lenguajes , normalmente se suele elegir en función del contexto y necesidades y,sobre todo en los orientados a objetos, se parecen bastante entre sí. La idea es que aprendas lo esencial de lo que es la programación y,luego,el resto,ya viene sólo.

Meleagant

#4 El tema es que los videojuegos, hasta los más sencillos, tienen una serie de cálculos bastante complejos. Sobre todo si entras en videojuegos 3D.

En 2D es más asequible, pero sigue siendo complejo. Por ejemplo, la detección de colisiones, que se encuentra en casi cualquier videojuego, tiene distintos niveles de complejidad. Si quieres hacer una detección de colisiones por píxel con rotaciones, ya tienes que andar haciendo cálculos matriciales. No es que sea complicadísimo, pero es que hablamos de algo básico básico en los videojuegos.

Luego a nivel de algoritmos pues ya tiene también su complicación. Un ejemplo muy clásico es el Pac-Man. Es un juego en apariencia bastante simple, pero sólo calcular el movimiento de los fantasmas tiene bastante miga.

Yo te recomiendo que empieces a aprender C tranquilamente. Luego programación orientada a objetos (C++ en este caso). Y cuando manejes todos los conceptos de clases, interfaces, herencia, polimorfismo, etc. ya te metas con alguna librería específica para videojuegos.

A mi me gusta XNA para empezar porque simplifica bastantes procesos tediosos que de otra manera tendrías que hacer manualmente, y no son parte intrínseca de la creación del videojuego, pero tienes muchas para elegir.

1
Deoxys

#4 Sí, 'El lenguaje de programación C' es un buen libro para empezar de cero. Es muy accesible, está muy bien explicado y no te deja con ninguna duda.

Lo de java ya es preferencia personal. A mí me parece un lenguaje engorroso, incómodo, ineficiente, lento, lioso y asqueroso. Te recomiendo que empieces por C y luego pases a C++, y cuando entiendas la base de la programación no lineal (C) y la orientada a objetos (C++) vayas mirando otros lenguajes que se adapten a lo que tú quieras hacer.

1 respuesta
Cryoned

Aprender a programar con C, C++, Java, etc es una locura.

Empieza por racket, python, scheme o tal vez haskell que funciona bien en principiantes, aprende bien las bases de la programación y ya pasarás con el tiempo a c/c++/java.

Como empieces por estos últimos te vas a dar de hostias en la cabeza, vas a coger muchísimas manías erróneas y funcionales y vas a terminar codeando peor.

2 1 respuesta
Deoxys

#9 ¿Por qué es una locura? C es un lenguaje bastante simple y que no da pie a ninguna confusión, no se me ocurre nada más fácil para empezar.

2 respuestas
Cryoned

#10

C es un lenguaje complejo, malamente tipado, sucio y que crea muchísimas manías erróneas en la gente que empieza con ello. Se tarda muchísimo más de media en amueblar la cabeza a la programación que usando otras metodologías.

Los últimos estudios demuestran que la metodología htdp para gente que se inicia en la programación es muchísimo más eficiente en el aprendizaje que empezar con lenguajes del estilo de c/c++/java. El problema es que es lo que se enseña en las universidades españolas y que son los lenguajes más conocidos y de los más potentes con lo que la gente intenta aprender directamente con ellos llevándolos a un error de iniciación.

http://www.ccs.neu.edu/scheme/pubs/jfp2004-fffk.pdf

El problema del post es que doy por hecho de que "se un poco de php y html" para mi significa "no tengo ni puta idea de nada", y aprender las bases de la programación no es aprender a usar un lenguaje, necesita asentar muchos pilares para luego usar más tarde sin problemas en otros lenguajes. Y C/C++/Java/etc son unos lenguajes horripilantes para los principiantes.

Yo recomendaría empezar con Scheme o hasta ocaml para aprender diseño funcional básico y luego seguir con haskell o incluso python. A partir de ahí cuando ya tenga unas buenas bases fuertemente aprendidas que pase a otros temas, pero si no le costará más y tendrá peores resultados.

1 3 respuestas
Deoxys

#11 Nunca lo había visto así, la verdad. Miraré lo del htdp a ver cómo va :)

1 respuesta
Cryoned

#12

http://www.htdp.org/

http://mitpress.mit.edu/sicp/

BLZKZ

#11 haskell es un paradigma distinto. Programando en haskell como quieras pasar a java/.net/c++ te vas a morir

+1 a python

2 respuestas
Cryoned

#14

Lo sé pero es un lenguaje buenísimo para aprender unas bases esenciales.

Esto no es una carrera de sprints, es algo a largo plazo y tener la cabeza lo más estructurada posible te hace ganar la maratón. Yo empecé a lo bestia con c++ hace ya tanto que ni me acuerdo y cuando veo la metodología usada actualmente en las universidades punteras para aprender me dan ganas de pegarme un tiro xD

1
Meleagant

¿Pero estáis de coña? Aprender C de primeras es totalmente asequible.

A lo más, si no tienes ni idea de programación y te cuesta pillar los conceptos, te diría que empieces con Pascal o algún lenguaje que utiliza una sintaxis más cómoda de entender, pero ¿Haskell? Eso es programación funcional. Es una pérdida de tiempo para lo que quiere #1.

1 respuesta
1nd0m4bl3

#1 Yo en la carrera empecé con C++ y al año siguiente, en otra asignatura me pidieron programar en C y como comentan por ahí es más tedioso.

Te recomendaría que empezaras con C++.

BLZKZ

#16 empecé con pascal y no lo recomiendo.

Sinceramente recomendaría python. Es bastante intuitivo y puedes obtener resultados visibles rápidamente, además de que me parece un lenguaje correctísimo y muy educativo.

1 respuesta
Meleagant

#18

Yo empecé con C, pero cuando llegué a la universidad nos daban la introducción con Pascal y no me pareció ni tan mal.

Lo digo porque a la gente parece que le cuesta menos entender begin y end que { y }

Python no he usado nunca, la verdad, así que no opino.

ElectNewt

c y luego c++

y quien diga que c++ no tiene nada que ver con C miente y/o no tiene ni puta idea

busca libros po ahi aunque sin MU la cosa esta chunga

Kartalon

Pues si lo que quiere es "aprender a programar videojuegos", #11 podrá decir misa, pero debería empezar con C. Los videojuegos tienen una base de programación de sistemas muy grande y el lenguaje por excelencia de la programación de sistemas es, sin duda alguna, C.

Estoy de acuerdo en que el que quiera aprender a programar sin más, es tontería, y quizás le vendría bien empezar con un paradigma objetural directamente. Pero empezando por C podrá tener una buena visión procedimental, y entender bien de verdad temas como la aritmética de punteros que son ESENCIALES en la programación de sistemas (y, por tanto, en videojuegos).

Luego ya adquirir una visión del paradigma objetual y aprender (obviamente) C++. Claro que el principio será duro, ¿una tontería? ¿Para alguien que quiera "programar videojuegos"? En absoluto.

Eso sí, si no se tiene ni puta idea de programar puede que antes se quiera tener una visión más general, en tal caso lo mejor sería leerse libros como SICP ( http://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering/dp/0262510871/?tag=anttsyka-20 ) o The Pragmatic Programmer ( http://www.amazon.com/dp/020161622X/?tag=stackoverfl08-20 ).

1
eisenfaust

+1 para Racket/HtDP o directamente bajarse cualquier implementación de Scheme R5RS (mi favorita es Chicken) y darle duro a Concrete Abstractions, The Little Schemer y The Scheme Programming Language (importante que sea la tercera edición, la cuarta cubre R6RS). Finalmente termina con SICP si quieres dedicarte profesionalmente a esto.

Si no te gusta la sintaxis de Scheme, olvida todo lo que he dicho y prueba con Concepts, Techniques, and Models of Computer Programming.

No recomiendo Haskell ni Ocaml. Tienen demasiada sintaxis y creo que para aprender tipación estilo Hindley-Milner no hay nada mejor que Standard ML.

Para empaparse de OOP nada mejor que Smalltalk http://squeak.org/

Una vez tengas los fundamentos, necesitas un libro que le de caña a C++ y que esté actualizado. Para esto nada mejor que Accelerated C++.

También tendrás que darle duro a los algoritmos (Introduction to Algorithms), cálculo (Spivak o similar) y algún libro de matemáticas aplicadas a los videojuegos.

Related: http://norvig.com/21-days.html

3 3 respuestas
ZJM003

#22

[...] y en sólo dos semanas estarás compitiendo directamente con Blizzard!

MTX_Anubis

#14 Lo ideal es aprender cuantos más paradigmas, mejor. Cada vez pegan con más fuerza los lenguajes multiparadigma que soporten el funcional en empresas (mientras que antes solo se utilizaban en la docencia y Ericsson xD). Java y C++ están demasiado asentados para que desaparezcan pero por contra, muchas empresas están utilizando Ruby o Scala y adivina qué? Hay 4 programadores contados de estos lenguajes, los 4 que hay vienen a cobrar "lo que quieran". Yo mismo ando con un libro de scala aprendiendo por mi cuenta, a ver si cuando tenga más tiempo le doy duro xD

Yo recuerdo cuando me enseñaron Haskell, el profesor nos dijo "por qué aprenderlo? Pues porque siempre es bueno conocer un amplio abanico de paradigmas y porque nunca sabes qué es lo que se va a utilizar en el futuro". Este tipo de cosas es como las modas, siempre se vuelve al pasado y se le cambia algo. Con esto ocurre lo mismo, se supone que era un paradigma en desuso del que no se había conseguido "nada" y ahora los nuevos lenguajes recurren a él para añadir funcionalidad y evitar carencias que otros tienen. Vamos cubrir necesidades que van surgiendo, en este caso sobre todo es a reducir los tiempos de desarrollo y la complejidad.

y sobre #1, como cada vez que postea, haz caso a #22.

1
EnZo

#1 No les hagas mucho caso a todos estos ingenieros emocionados de la vida, que te recomiendan C y C++ para empezar, o lenguajes que no conoce nadie y ni se usan. Además de que para poder hacer un juego con ellos vas a flipar.

Mi recomendacion es que aprendas algo sencillo. Te aconsejo que empieces con Javascript. Por que?

  • No es estricto.
  • Es facil de aprender.
  • Hay mucha informacion en internet.
  • Gran comunidad.
  • Solo necesitas un editor de texto para empezar a probar.
  • Puedes hacer juegos con canvas con relativa facilidad. A no ser que quieras empezar haciendo un Call of Duty http://www.canvasdemos.com/type/games/
  • La gente podra jugar a tus juegos en la web :P
  • Una vez que lo tengas controlado podras hacer cosas como http://mrdoob.github.com/three.js/
  • Pero el mas importante: Es el futuro. Y lo que aprendas ahora te servirá siempre.

Y si javascript no te convence mis otras dos propuestas son ActionScript3 o Unity.

3 respuestas
Soltrac

#25 Serán ingenieros emocionados y todo lo q tú quieras, pero al menos no creen que ActionScript3, Unity o JavaScript sean lenguajes de programación y si crees que esos lenguajes que han nombrado por arriba no se utilizan es que te queda aún un largo camino por recorrer en este mundillo.

Recomendar sabemos todos. Hacerlo bien? No.

1 respuesta
BLZKZ

#25 tus entradas en el foro dev están siendo épicas. Buen trabajo desprestigiando (o intentandolo) aportaciones razonadas, insultado y luego diciendo gilipolleces sin pies ni cabeza o/

1 respuesta
Igneus

#8 sera mejor java k c++, entre otras cosas porque se va a abstraer de muchas de las labores de limpieza y asignacion de memoria ¿no? vale que sea mas ineficiente dependiendo de lo que quieras hacer, pero para un principiante sera mejor.

D

#1 échale un ojo a esta web

www.codeacademy.com

EnZo

#26 Sabia que con mi comentario no iba a crearme muchos amigos y que mas de uno me echaria la cruz. Pero me dá igual, porque no puedo entender como se le puede recomendar a alguien que no tiene ni idea de programar empezar con C. Lo siento, no me entra en la cabeza. Ni tampoco como se le puede recomendar un lenguaje en desuso o poco conocido. Donde no vas a poder pedir ayuda a casi nadie ni vas a encontrar documentacion mas que la oficial y en ingles (Suponiendo que sabe ingles).

Y por ser lenguajes interpretados ya dejan de ser lenguajes de programacion? Por que no he entendido esa parte.

Y sí, a mi me queda muchisimo que aprender, tanto que creo que nunca lograre llegar al nivel de programacion que tienen algunos en este post, de hecho no creo que tenga ni puta idea en comparacion con los que he criticado.

Sin embargo si creo que tengo una mini virtud, y es la empatia. Algo de lo que al parecer, tú careces. Por que a alguien que no tenga ni idea de programar, quiera aprender de forma autodidacta y sin ser un genio. No se le puede recomendar C. Y menos aún si quiere realizar juegos.

"Recomendar sabemos todos. Hacerlo bien? No." Amén.

2 respuestas