Aprender a programar

Hace tiempo que queria aprender a programar en plan autodidacta, y queria saber mas o menos desde vuestro punto de vista porque lenguaje podria empezar. Habia pensado en empezar con C y las librerias SDL, ya que tengo algo de documentacion, pero tambien tengo de C++. He visto que comentais que quien sabe programar en C++ tambien sabe en C, pero no al contrario. Tampoco se que dificultad hay en uno u otro y que diferencias hay entre ellos, aunque supongo que el C++ sera una especie de actualizacion del C, no se.

¿Me podeis poner un poco en situacion?
Empieza por lo que más rabia te de; pero esto:

He visto que comentais que quien sabe programar en C++ tambien sabe en C


No es cierto.

Saludos.Ferdy
Yo te recomiendo que empieces por C, casi todo el mundo empieza por ahí, despues una vez que lo domines pues me pondria a aprender algo de Orientado a objetos (C++ o Java) te recomendaria Java, una vez que lo domines, te animaria a probar algo de programacion web (asp, jsp, php) te recomendaria php (ya que asp y jsp son por decirlo de alguna manera "sublenguajes", asp es visual basic en web, y jsp es java en web)

Una vez que domines esto, probaria cosas microsoft, por ejemplo .NET
que esta pegando fuerte en la actualidad


Yo empecé por C, despues Java, despues Visual Basic .NET, despues ASP, despues ASP.NET, despues Visual Basic 6 y ahora estoy aprendiendo JSP. Un Saludo!
Yo personalmente recomiendo un lenguaje serio de bajo nivel (C en mi caso), un lenguaje de scripting (bash en mi caso) y luego quizá un lenguaje web porque están de moda jeje (php). Además un lenguaje orientado a objetos para comprender tambien este paradigma, Java, C#, C++, ObjC; cada uno tiene sus cosas buenas y sus cosas malas.

Todo esto implica aprender a usar uno o varios sistemas de control de versiones (cvs, svn y probablemente git son básicos), aprender a utilizar autotools para gestionar la configuración/compilación de las fuentes.

Y creo que no me dejo nada más.

Saludos.Ferdy
Si no sabes nada de programación, yo no te recomendaría C, porque se cogen muchos vicios. El C se traga casi todo, y luego en otros lenguajes más estrictos te vuelves loco. Para aprender la disciplina de programación comenzaría con Pascal, solamente para aprender los tipos de datos y las estructuras básicas de control. Luego ya pasaría a C.
Con lo de que "se traga todo" te refieres a que tienes que saber lo que haces en cada momento, verdad? Y sinceramente, no creo que ése sea un mal hábito...

Ferdy escribió:Todo esto implica aprender a usar uno o varios sistemas de control de versiones (cvs, svn y probablemente git son básicos), aprender a utilizar autotools para gestionar la configuración/compilación de las fuentes.
Y recomiendas algo para cada una de estas cosas ó cualquier libro/tutorial que pille por Internet me servirá igual de bien? Ahora que estoy puliendo y ampliando mis conocimientos de C y C++ creo que es un buen paso empezar a entender también todas esas cosillas ;).

Salu2!
Y recomiendas algo para cada una de estas cosas ó cualquier libro/tutorial que pille por Internet me servirá igual de bien? Ahora que estoy puliendo y ampliando mis conocimientos de C y C++ creo que es un buen paso empezar a entender también todas esas cosillas


Ehm... bueno, realmente un sistema de control de versiones solo lo vas a aprender cuando lo uses. Si no vas a colaborar en ningún proyecto por ahora yo aprendería svn; que está muy bien y es facilito. ¡ Montate un repositorio y úsalo ! es la única forma de aprender. Una vez conoces svn, cvs te resultará facil y cuando conozcas estos, el paso a un sistema distribuido como git, arch, darcs, bzr... no es difícil. Te lo digo por experiencia propia jeje que ahora estoy migrando casi todo lo que tengo a GIT y no estoy teniendo ningún problema.

Sobre autotools pues mirar ejemplos realmente... lo malo de autotools es que es algo que todo el mundo 'conoce' pero nadie documenta. Una gran putada jeje yo por lo menos la documentación que he encontrado sobre autotools siempre ha sido 'subóptima' como quien dice.

http://dev.gentoo.org/~plasmaroo/devmanual//general-concepts/autotools/

Ahí tienes lo básico... luego con ejemplos te puedes ir aclarando :)

Saludos.Ferdy
Ferdy escribió:Ehm... bueno, realmente un sistema de control de versiones solo lo vas a aprender cuando lo uses. Si no vas a colaborar en ningún proyecto por ahora yo aprendería svn; que está muy bien y es facilito. ¡ Montate un repositorio y úsalo ! es la única forma de aprender. Una vez conoces svn, cvs te resultará facil y cuando conozcas estos, el paso a un sistema distribuido como git, arch, darcs, bzr... no es difícil. Te lo digo por experiencia propia jeje que ahora estoy migrando casi todo lo que tengo a GIT y no estoy teniendo ningún problema.

Sobre autotools pues mirar ejemplos realmente... lo malo de autotools es que es algo que todo el mundo 'conoce' pero nadie documenta. Una gran putada jeje yo por lo menos la documentación que he encontrado sobre autotools siempre ha sido 'subóptima' como quien dice.

http://dev.gentoo.org/~plasmaroo/de...epts/autotools/

Ahí tienes lo básico... luego con ejemplos te puedes ir aclarando

Saludos.Ferdy


Mercy mesié Ferdy [oki] , muy didáctico el enlace.


Sobre Git, ains , los sistemas de control de versiones son unas de mis asignaturas pendientes (nota mental, intentar de dejar de ser tan friki ;-) ) y me vendrían bien para automatizar mis programas...

..Total si a Linus le está resultando fácil la migración del kernel, porqué no ibas a ser menos... por cierto, en kernelTrap comentaban esa migración (y alguien decía que el propio linus podría tener problemas de licencia con el antiguo sistema por el cambio.. )

Alberlich escribió:Si no sabes nada de programación, yo no te recomendaría C, porque se cogen muchos vicios. El C se traga casi todo, y luego en otros lenguajes más estrictos te vuelves loco. Para aprender la disciplina de programación comenzaría con Pascal, solamente para aprender los tipos de datos y las estructuras básicas de control. Luego ya pasaría a C.


¿ C se traga todo ? no entiendo a qué te refieres... desde luego añadiendo -Wall ,gcc te da multitud de warnings y aprendiendo a programar en Ansi C no veo problemas... ¿podrías argumentarlo / explicarte mejor? estoy de un obtuso..

...No se como lo hago que entro para dar las gracias y acabo diciendo una parrafada.. xD

1 Salu2
FuckingFreaky escribió:Con lo de que "se traga todo" te refieres a que tienes que saber lo que haces en cada momento, verdad?


No, mer refiero a que aunque no sepas muy bien lo que estas haciendo, el compilador traga y el programa funciona. Por ejemplo, puedes asignar un entero a una variable de tipo carácter, se te olvida inicializar un puntero y el programa funciona unas veces si y otras no, por no hablar de poder tratar las cadenas de texto como arrays. Luego te pasas a Java y dices (ahí va, si no tira!) Insisto en que como primier lenguaje de programación, sin conocer los rudimentos y encima de manera autodidacta, el C no es la mejor opción.
Si aprendes a usar el compilador (aka -Wall -pedantic -ansi y esas cosas) no debería haber ningún problema.

Por otro lado, el tratar las cadenas como arrays de caracteres es LO NATURAL si entiendes las cadenas de caracteres tal y como son en C, es decir, un puntero que apunta a una zona de memoria acabada en \0. Si haces la equiparación puntero-array entonces verás que es lo natural.

Saludos.Ferdy
Para aprender a programar lo primero que hay que plantearse es el paradigma, no el lenguaje de programación en sí. Y comenzar con un lenguaje orientdo a objetos según mi opinión es incorrecto. Así qwue para empezar, mejor con un lenguaje estructurado, sea cual sea, ya que la diferencia será aprender una u otra sintaxis, pero la metodología será la misma para todos. Una vez que controles estructurado ya puedes plantearte los orientados a objetos. ;)
Pos eso, y tan sólo es mi opinión... que C te da una base buenísima para empezar en programación estructurada y general. Quizá sea por cómo me lo enseñarón a mí, pero no me resultó difícil y, llamadme flipado si queréis, me resultó mucho más liviano que Pascal.

Ferdy escribió:hm... bueno, realmente un sistema de control de versiones solo lo vas a aprender cuando lo uses. Si no vas a colaborar en ningún proyecto por ahora yo aprendería svn; que está muy bien y es facilito. ¡ Montate un repositorio y úsalo ! es la única forma de aprender. Una vez conoces svn, cvs te resultará facil y cuando conozcas estos, el paso a un sistema distribuido como git, arch, darcs, bzr... no es difícil. Te lo digo por experiencia propia jeje que ahora estoy migrando casi todo lo que tengo a GIT y no estoy teniendo ningún problema.

Sobre autotools pues mirar ejemplos realmente... lo malo de autotools es que es algo que todo el mundo 'conoce' pero nadie documenta. Una gran putada jeje yo por lo menos la documentación que he encontrado sobre autotools siempre ha sido 'subóptima' como quien dice.

http://dev.gentoo.org/~plasmaroo/de...epts/autotools/

Ahí tienes lo básico... luego con ejemplos te puedes ir aclarando

Saludos.Ferdy
Thank you Ferdy. Me encanta esta información de primera mano, XD. Aunque sea para mis cutre proyectos de aprendizaje montaré el server SVN si es lo que me recomiendas para empezar, y luego ya iré probando CVS, GIT etc...
Al igual que con mis cutreporyectos caseros intentaré ir aprendiendo autotools, cosas prácticas de Vim (ya no das consejillos de esos que solías poner en tu blog sobre EL EDITOR :)), etc... Supongo que si me voy acostumbrando a pequeña a escala a estos buenos hábitos no me costará ir avanzando según yo vaya avanzando también.

Muchas gracias! Taluegorrrrrrrl!
Aunque sea para mis cutre proyectos de aprendizaje montaré el server SVN si es lo que me recomiendas para empezar, y luego ya iré probando CVS, GIT etc...


Beh... si sabes svn la única cosa por la que puedas necesitar cvs es porque quieras colaborar en un proyecto donde usen cvs jeje :) Y git o arch o alguno distribuido te lo recomiendo porque personalmente ahora estoy cogiéndole el gusto a los sistemas distribuidos jeje.

ya no das consejillos de esos que solías poner en tu blog sobre EL EDITOR


Emmm.... si.... bueno.... ya no me da tiempo :) Cuando acabe los exámenes lo dejaré para postear esas cosillas que en el planet de gentoo no tienen cabida porque se las saben todas los jodios :)

Supongo que si me voy acostumbrando a pequeña a escala a estos buenos hábitos no me costará ir avanzando según yo vaya avanzando también.


Sin duda... nadie empezó con un kernel... oh bueno, se me ocurre uno que si :)

Saludos.Ferdy
Ferdy escribió:Beh... si sabes svn la única cosa por la que puedas necesitar cvs es porque quieras colaborar en un proyecto donde usen cvs jeje Y git o arch o alguno distribuido te lo recomiendo porque personalmente ahora estoy cogiéndole el gusto a los sistemas distribuidos jeje.
Si es bueno y útil, tarde ó temprano tendré que tocarlo. Este año tengo que reactivar mi aprendizaje que llevo unos años dados a la vagancia y no puede continuar así. Sin prisa, pero sin pausa... algún día pretenderé colaborar en algún proyecto :).

Ferdy escribió:Emmm.... si.... bueno.... ya no me da tiempo Cuando acabe los exámenes lo dejaré para postear esas cosillas que en el planet de gentoo no tienen cabida porque se las saben todas los jodios
Jajaja! Hombre, es de esperar que sepan la mayoría! Para los usuarios "de a pie" nos vienen guay esos truquillos. Aunque... el otro día descubrí un libro sobre Vim! Eso sí, de la 5.algo... pero bueno, seguro que algo se puede aprovechar.
Por lo que veo en el "blog" de gentoo (acabo de descubrirlo) no se puede responder, pero lo sindicaré de todas formas por las cosillas de gentoo interesantes que saques por ahí.

Ferdy escribió:Sin duda... nadie empezó con un kernel... oh bueno, se me ocurre uno que si
Jaja! That's a good one ;). Yo de momento a ver si empiezo con un gestor básico de ficheros, que me parece un buen programita para empezar: sencillo pero con el que puedo aprender bastantes cosillas.

Gracias!Salu2!
Por lo que veo en el "blog" de gentoo (acabo de descubrirlo) no se puede responder, pero lo sindicaré de todas formas por las cosillas de gentoo interesantes que saques por ahí.


Mmm... es que he tenido ataques de spam... por mail, google talk / jabber, y #gentoo-es me puedes contestar :)

Yo de momento a ver si empiezo con un gestor básico de ficheros, que me parece un buen programita para empezar: sencillo pero con el que puedo aprender bastantes cosillas.


Veo demasiada competencia ahí... pero tu sabrás claro. La idea es intentar innovar...

Saludos.Ferdy
Ferdy, yo se que todo se basa en innovar, pero yo creo que ya hay tanto que es dificil encontrar algo que a nadie se le haya ocurrido hacer.

Yo por ejemplo estoy practicando mis cosas (cosas sucks para ti, ferdy :P), por ejemplo ahora haciendo un navegador web. Es solo una practica porque hay alternativas muchisimo mejores, pero hay que practicar siempre, innovar sera dentro de mucho :P.

PD: Ya la semana que viene podre volver a conectarme a #gentoo-es que aqui tengo los puertos super capados :P.

Saludos.
Yo a ver si cuando termine los exámenes (23 de sept) me doy más vueltecillas por gentoo-es...

Lo del explorador de ficheros es simplemente por empezar con algo (aparte de que no acabo de encontrar uno 100% a mi gusto)... y porque creo que así aprenderé y afianzaré cosillas de todo el manejo de ficheros. Es sólo por practicar. Claro que no es nada innovador, pero me falta mucha técnica aún para poder innovar, aunque las ideas están ahí :).

Fox... a ti tenía yo ganas de pillarte :P! Estoy megahiperemocionado descubriendo el compilador Ahead-Of-Time de Mono... Eso de que los programas no tengan que pasar por la máquina virtual sino que estén compilados... puf! Me ha atraído mucho más hacia mono. Ya están empezando la introducción de compilación de CIL en GCC. En fin, es lo que les faltaba para conquistarme (AOT estaba desde siempre pero yo lo acabo de descubrir). Y Ferdy... no te enerves al escuchar la palabra "Mono" ;). Que por cierto el otro día también estuve viendo el "binding" ObjC#, jeje!

Saludillos!
Pos yo recomiendo: PHP, Python, C, C++, C#... por ese orden :)
Uhm, yo empezaría por Pascal, se inventó para eso, y yo aprendí con él XD

Sobre PHP y Python, empezar con lenguajes "sin tipado" no creo que sea muy bueno ;)
Churly escribió:Sobre PHP y Python, empezar con lenguajes "sin tipado" no creo que sea muy bueno ;)
A eso se le llama "tipado débil", ya que no defines el tipo de las variables.

Aunque no lo creas hay dos tipos de didáctica... la del "que quiere aprender" (por curiosidad...) y la del "que debe aprender" (por webos ya que se lo exigen). Para el primer tipo suelen ser más agradables los lenguajes de tipado débil y que són de nivel intermedio (Php y Python no son de bajo nivel como C... pero tampoco son de tan alto nivel como Visual Basic o Delphi*)... y a modo de introducción van bastante bien.

Una vez aprendido como funciona "un lenguaje de programación", se debe profundizar en los lenguajes de tipado fuerte, ya que estos son de más bajo nivel por lo general y requieren cierto interés, que se pierde muy facilmente por la dificultad del lenguaje.

A esta forma de ver el aprendizaje se le llama "Top-Down Aproach"... al menos a mi siempre me ha dado buenos resultados, pero cada maestrillo tiene su librillo :)

Saludos!!!

*Nota: para el que lee estas líneas y no está muy familiarizado recordar que a más "bajo nivel" de un lenguaje significa que nos aproximamos más a hablar directamente con la máquina... y por lo tanto el lenguaje suele ser más complicado. Los lenguajes de "alto nivel" suelen ser sencillos y pensados para desarrollar rápido, lo cual no suele ser muy recomendable para tener una idea muy real de lo que es programar. En este caso he creado un subconjunto algo "ficticio" llamado "nivel intermedio" y he puesto a PHP y Python, ya que considero que se puede llegar a tener lo mejor de los dos grupos anteriores. Por supuesto, esto es discutible... pero me da igual :P
A mi siempre me ha dado mucha curiosidad por aprender a programar.
Ustedes recomiendan en general empezar con el C y luego saltarse al C++ porque el C es mas fundamental y el C++ es lo mismo pero incluye la programacion orientada a objetos, ¿es asi?.
¿Que programa me recomiendan utilizar para el C?, ¿me sirbe el DevC++?

Saludos y gracias.
pepe2004 escribió:A mi siempre me ha dado mucha curiosidad por aprender a programar.
Ustedes recomiendan en general empezar con el C y luego saltarse al C++ porque el C es mas fundamental y el C++ es lo mismo pero incluye la programacion orientada a objetos, ¿es asi?.


Correcto.

pepe2004 escribió:¿Que programa me recomiendan utilizar para el C?, ¿me sirbe el DevC++?


Yo empecé utilizando TurboC++ por si te vale de algo
Para programar en C, si estas en Windows yo te recomiendo el Visual C++, a mi me gusta mucho ese programa y si estas en Linux, para mi el mejor es el Anjuta.

Saludos.
DevC++ es genial además de ser software libre. Cosa que VC++ no es.

Saludos.Ferdy
23 respuestas