# [OFF TOPIC] Aprender a programar desde cero.

## gsardou

Ante todo, pido humildemente disculpas por el off-topic.

Soy un usuario de gentoo desde hace muchos años. 

Mi profesión no está relacionada para nada con la informática, pero me gustaría aprender y devolverle a la comunidad al menos un poco de todo aquello que me brindó.

La pregunta es:

¿Como aprendo a programar?

Estoy dispuesto a comprar y estudiar a fondo cualquier material que me sugieran.

Intenté leyendo algo de codigo escrito, pero no puedo comprender como se dividen las partes de un programa.

Intente leyendo libros sobre C, pero no comprendo de donde surge la "algoritmia".

En otras palabras...

¿Por donde empiezo?

Trato de no ser pretencioso, y con que alguien con algún "pinito" en programación me oriente, ya estaría conforme...

Me doy cuenta de lo dificil que es programar, y del cambio de mentalidad que se necesita; pero me resisto a creer que es imposible...

Gracias

----------

## DiKoN_

hombre, creo que la mayoria hemos empezado con un pseudolenguaje. Este te ayudara a ver como funciona esa maraña de codigo 

que te puedes encontrar. No es mas que unas ideas basicas y reglas en castellano para que te vayas familiarizando con el tema.

Luego, como lenguaje de programacion para empezar.... sobre gustos los colores, pero para mi C, no es de los mas faciles. Me resulto  

mas sencillo java y menos confuso, pero bueno, cada uno es cada uno jejeje. Sobre libros no se decirte, lo que si te puedo decir es 

que busques apuntes de facultad de informatica, de primer año, que ahi te explican todas las cositas. En las redes de descargas 

habituales vas a encontrar un monton de apuntes, solo con poner introduccion a la programacion o elementos de programacion.

Un saludo y que la suerte te acompañe xDD

----------

## gsardou

Pues ya me has dado algo con lo que empezar   :Smile: 

Está claro que google está lleno a rebozar de guias de programación e introducciones a distintos lenguajes.

El problema es que en todos los casos, esas guias presuponen conocimientos de los que no dispongo (al menos por ahora).

Otro problema, es iniciarse sin caer en malas practicas, que deriven en vicios (mira por ejemplo Visual Basic).

Quiero aprender por placer, pero me gustaría hacerlo bien...

Gracias DiKoN_ !

----------

## JotaCE

Hola

Las mismas guias que uses y sobretodo la experiencia que vallas adquiriendo te diran cuales son las buenas y malas practicas a la hora de programar.

hace mucho que no programo asi que no puedo darte consejos de que lenguaje tomar.

Como dato te puedo decir que casi todo aqui esta escrito en C/C++

Si quieres aprender a hacer las cosas bien te siguiero que comiences por pseudocódigo y diagramas de flujo.

La idea es que aprendas a hacer un diseño en papel de tu aplicacion antes de ponerte a programar.

----------

## i92guboj

Hay muchas formas de aprender, y cada uno por aquí tendrá la suya.

Si quieres empezar con un lenguaje sólido y que tiene una sólida base en el mundo linux (y en unix en general), yo me decantaría por C. Es sencillo, estructurado y limpio. El lenguaje en si no tiene mucha complicación, se puede aprender en una tarde si se tiene soltura. Lo que es más complicado es aprender a hacer algo útil con él. Pero eso depende más de la algorítmica y la lógica que vayas desarrollando poco a poco, y no se tu capacidad para aprender un lenguaje.

Si eres novato, te aconsejo un libro que recuerdo de mis primeros días de facultad. Es muy básico, por lo que solo te lo recomiendo si realmente no tienes base como programador. Enseña de forma limpia y estructurada, y con un estilo limpio y claro desde la base más sencilla. El libro es Programación estructurada en C, de J.C. Antonakos y K. C. Mansfield, editado en españa por Prentice Hall con el ISBN: 84-89660-23-9

Existe otro libro muy interesante y que recomiendo a todos los programadores, ya sean novatos o auténticos fieras de C o C++, y que seguramente algunos conoceréis: The C++ programming languaje, third edition, de Bjarne Stroustrup. Este libro no es una guía de aprendizaje en si, es más bien un manual de referencia que debería tener todo programador encima de su mesa para consultar en cualquier momento. El ISBN para este es 0-201-88954-4

Y aunque tenga estructura de referencia, no deja de ser un libro que se puede leer y del que se puede aprender mucho, sobre todo en lo que respecta a técnicas distintas para hacer las cosas. Este tío sabía lo que escribía  :Razz: 

Hay muchos tutoriales por ahí además. Es bueno ver varios y todo eso, pero siempre mirándolos con lupa, porque también hay mucho becerro por ahí suelto que maneja C como si fuera un arado.

Y si bien C es la panacea para mi, te recomiendo que no te estanques en un solo lenguaje. Es buena tener una visión panorámica del tema, y estudiar varios porque te da una amplitud de miras que hace todo el conocimiento teórico más general y consistente, y evita que aprendas a hacer las cosas simplemente memorizando snippets de código como haciá más de uno en la universidad (como si fueran niños de instituto aprendiéndose párrafos de historia de carrerilla). Hay muchos lenguajes. Perl y python están bastante difundidos y tienen una aceptación generalizada.

El pseudocódigo y la algorítmica son necesarios también. Pero bajo mi punto de vista, en la mayoría de casos la lógica humana se resiste a estos temas teorizantes tan espinosos. La práctica entra mejor, y una vez que a una persona le has enseñado que es lo que hace un bucle for, entonces le puedes hablar de un "esquema iterativo", y lo entiende sin pestañear, mientras que si se hace al contrario lo más normal es que la persona se agobie y termine dando portazo.

----------

## elchicosinhada

Yo llevo ya dos años en la carrera y he experimentando tanto en Java como en C/C++.

Depende de lo que quieras... El C y C++ son más usados y te permiten hacer muchas más cosas al ejecutarse directamente sobre el sistema, sin embargo, las herramientas y librerías son menores y más complicadas de usar. No podemos comprar la STL de C++ con la API de Java.

Java es muy más sencillo y tienes herramientas a espuertas, para generar interfaces gráficas entre otras cosas. Además, para java dispones del todo poderoso y omnipresente Eclipse.

En definitiva, si quieres dedicarte a programar tiraría hacia C++ y si es solo por hobby, a Java.

Por otro lado, te recomiendo más la programación orientada a objetos (C++, Java) que la estructurada (C), pues bajo mi punto de vista es lo que se esta imponiendo, aunque en Linux sigue habiendo muchísimos programas en C, por su eficiencia, sin embargo la comodidad de la POO es indiscutible.

----------

## abecedarix

Personalmente, también añadiría Python a la lista de opciones a considerar: es limpio, sencillo, se aprende bien manejando el intérprete, y generalmente haces pronto cosas interesantes. Ahora, que aprender lo básico de la programación no depende mucho del lenguaje que uses (antes aprender lo poco que sé de programación, lo más cercano que hice fue el editor de mapas del Warcraft III   :Laughing:  )

----------

## lanshor

Saludos!

Pues mi humilde consejo personal es el siguiente:

Si sólo quieres matar el gusanillo y hacer cosas que estén bien deberías empezar por un lenguaje interpretado o pseudo interpretado, débilmente tipado, y que tenga un montón de buenas librerías para hacer cosas útiles con poco esfuerzo (python, php, etc).

Luego puedes estudiar un poco de teoría sobre programación orientada a objetos, y entonces saltar a java.

La otra opción es, si quieres meterte a fondo y hacer cosas a más bajo nivel, entonces deberías ir directamente a un lenguaje con tipado fuerte, compilado, y por supuesto con buenas librerías. Los típicos y archiconocidos, C y C++.

Yo empezaría directamente con C++ sin usar nada de orientado a objetos, luego estudiaría teoría de orientado a objetos, y ya empezaría a usar este paradigma con C++.

----------

## gsardou

Nuevamente, gracias a todos por las respuestas.

Quizas fuí un poco escueto a la hora de describir mi situación de partida   :Laughing: 

Soy un usuario autodidacta, lo cual suele terminar en un montón de conocimientos teoricos sueltos, y muchos muchos puntos oscuros.

Hace algunos años, tuve contacto con los diagramas de flujo, Pascal y algo de Dbase (uff, que antiguedad).

Conozco la diferencia entre codigo fuente, objeto y ejecutable.

Sabía de la importancia de C en el mundo de linux, por lo que intento arrancar por allí.

Mi nivel de programación no es basico, es nulo.

En los pocos libros que leí, al pasar de un "hello world" a un ejemplo un poco mas complejo, aparece la algoritmia. Empiezan a mencionarse paradigmas de programación y un monton de cosas teóricas que no termino de conocer.

Quiero leerlo todo, y saber más; pero si no sigo algún metodo más o menos preciso, termino dando circulos y "atragantandome".

No importa que me lleve mil años. De algún modo voy a aprender a programar   :Laughing: 

Gracias de nuevo. Me encanta la comunidad de Gentoo, en serio...

----------

## JuanSimpson

Para programar necesitas como 3 cosas:

1. Tener un problema.

    Me refiero a tener algo específico que resolver/hacer

2. Pensar en una solución.

    Cómo debería de hacerse, siempre hay muchas formas de hacerlo. Esto es lo mas difícil.

    También deberías tener la capacidad de escribirlo en un diagrama de flujo.

3. Escribir código.

    Ya que sabes lo que tienes que hacer y como hacerlo, escribir código es lo mas fácil. Es como traducir un doc. o algo así.

El lenguaje que uses para escribir código depende de lo que tengas que hacer y cómo lo tengas que hacer. Sí vas a hacer reportes, bases de datos, páginas web, cálculos matemáticos, etc. usas algo enfocado a eso.

Cómo lenguaje general y también para aprender: C

Puede parecer difícil, pero no lo es, es mas coherente y sencillo que otros lenguajes.

Aquí hay un enlace de referencia al lenguaje C:

http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C

----------

## skormel

Tambien hay un libro bastante bueno llamado, "Programar en C/C++" de H.M. Deitel /J.M. Deitel de la editorial prestice Hall. En él se describe C y C++ de forma extensiva, tanto para aquel no que tenga ni idea de programación, como atajo/trucos para los programadores del lenguaje.

----------

## mad93

En mi humilde opinión, no soy programador, es mucho más fácil empezar por c, un lenguaje estructurado, que no por C++, un lenguaje orientado a objetos, la base teórica del lenguaje estructurado es mucho menor que el de la programación a objetos.

También decir que en C aprendes los 4 "controladores" (for, while, if, switch..., ya he dicho que no soy programador  :Razz: ) y ya puedes hacer algo, en cambio java me tiró atrás tener que saberme la api (tampoco fui muy persistente con este lenguaje).

Por último, eclipse también tiene IDE para C/C++, de hecho estoy programando con el una aplicación en rails (para mostrar la versatilidad con otros lenguajes de eclipse).

Yo personalmente empecé con el curso de borland de programación (en fascículos hace ya algunos años xD) y luego me compré "C++ cómo programar" de Deitel y Deitel ISBN: 970-17-0254-9 .

----------

## pcmaster

C no es un buen lenguaje para aprender a programar. A alguien que no tenga ni idea de programación le puede resultar bastante difícil aprender los conceptos con él. De acuerdo con que es de los más usados, pero no es para empezar con él.

Un buen lenguaje para empezar es pascal. Sí, ya sé que casi todo se hace en C, pero en Linux también tienes FPC (Free pascal Compiler) y lazarus (parecido a Delphi de Borland) con los que aprender en pascal.

También puedes aprender algún lenguaje de script, como por ejemplo la simple shell de bash. Aplicaciones simples pueden hacerse con scripts que, aunque no llegan a la potencia de C o pascal, permiten resolver ciertas tareas sencillas.

Cuando ya domines un poco la programación, entonces ya puedes pasar a C.

----------

## unai001

 *pcmaster wrote:*   

> C no es un buen lenguaje para aprender a programar. A alguien que no tenga ni idea de programación le puede resultar bastante difícil aprender los conceptos con él. De acuerdo con que es de los más usados, pero no es para empezar con él.
> 
> Un buen lenguaje para empezar es pascal. Sí, ya sé que casi todo se hace en C, pero en Linux también tienes FPC (Free pascal Compiler) y lazarus (parecido a Delphi de Borland) con los que aprender en pascal.
> 
> También puedes aprender algún lenguaje de script, como por ejemplo la simple shell de bash. Aplicaciones simples pueden hacerse con scripts que, aunque no llegan a la potencia de C o pascal, permiten resolver ciertas tareas sencillas.
> ...

 

Estoy de acuerdo con pcmaster, C es un tanto complicado para empezar a programar, muchos punteros y movidas diria yo...Sin embargo pascal es muy simplote, y la sintaxis es practicamente ingles, asique tampoco es dificil de memorizar.

Tambien estoy de acuerdo con lo de aprender la shell de bash, que con los 4 comandos que me se no veais lo que flipan mis amigos de la uni  :Very Happy: 

----------

## aj2r

Yo mepezaría por ensamblador   :Twisted Evil: 

----------

## unai001

 *aj2r wrote:*   

> Yo mepezaría por ensamblador  

 

JAJAJAJAJAA mUY BUENO!!! XD XD

(Aunque yo no me llevo especialmente mal con el   :Rolling Eyes: )

----------

## abecedarix

¿Por qué no LOLCODE, Ook! o Brainfuck?  :Laughing: 

----------

## the incredible hurd

Yo estaba en tu misma situación, con mucha dedicación y tiempo, comencé con el libro de la sección PROGRAMACIÓN/C de la serie Biblioteca del programador, titulado: C, Guía de autoenseñanza, cuyo autor es Herbert Schildt de la editorial Osborne - McGraw-Hill, cuyo ISBN es 84-481-3204-1.

Sencillo, práctico e intuitivo... En los primeros capítulos expone que los ejemplos contienen instrucciones explicadas con mayor detenimiento en otro posterior (y no se deja ni una sola de ellas sin explicar).

Yo empecé con C, después me dio por java y volví a C, C++ es mi asignatura pendiente. En cuanto vuelva a disponer de tiempo me pongo a estudiarlo.

Básicamente sólo es necesaria una cosa: pequeños ejemplos para ver cada cosa por separado y entenderla a la perfección. Después, con libros como el de programación estructurada en C que ya mencionó i92guboj llega el momento de coordinarlo y estructurarlo todo, también con mucha paciencia, además de ir aprendiendo todas las funciones que glibc ya proporciona de por sí al mismo tiempo (yo cometí el error de empezar a programar cosas para las que ya existían funciones mucho mejor elaboradas, pero con ello también aprendí).

C tampoco es como si tuvieras que aprender a escribir en chino, yo (ahora), no lo veo ni lo ví tan complicado.

El librito "C, guía de autoenseñanza" cuesta ahora 37,50€  peero merece la pena.

Olvída todos esos comentarios de que C es muy difícil, insisto sólo requiere dedicación y tiempo, a mí no me ha hecho falta estudiar nada relacionado con la informática para aprenderlo y, es más, yo diría que es fácil. El propio Linus Torvalds empezó escribiendo el kernel en ensamblador y cuando empezó a hacerlo en C dijo que el desarrollo se aceleró considerablemente.

En fin, a mí C no me parece tan difícil y el único truco para ello es que disfruté mientras lo aprendía... Las palabras de i92guboj, como casi siempre, son enciclopédicas   :Wink: 

¡¡¡¡Que nadie te desanime con C!!!!

www.mcgraw-hill.es  (no pretendo cobrar por la publicidad, pero me fastidia mucho hacerla).

----------

## anacoreta

Hola, yo también me encuentro en una situación similar, pero no estoy perdido, o eso creo...   :Wink:  Después de pasar el "no se por donde coger esto" o en el intering, descubrí un manual o mejor dicho dos de la universidad Jaume I de Castellón, estos constan de una iniciación a la programación con python y luego profundizar un poco y pasa al segundo manual en el que se aprovecha lo aprendido con pyton para empezar y profundizar con C, todo muy claro y muy bien explicado y bajo linux....

http://marmota.act.uji.es/MTP/teoria.shtml

Otra forma muy buena es programando microcontroladores o microprocesadores, yo en concreto he tenido varias experiencias con arduino http://www.arduino.cc/es/, que por cierto libre hardware es..... 

Creo que la solución a tus preguntas comienza por imaginar como encender y apagar un intermitente y que este proceso pare si se da determinada condición......

Creo que es un error entender la programación desde la perspectiva de las ventanas, de una forma gráfica.

Creo que usando linux y experimentando un poco se esta muy cerca de programar por no decir que se está programando..... Había leído muchas veces que es una tubería pero el concepto en si no lo acababa de entender, no lo ponía en práctica!!!!!!!!! pero todo cambió un día, un día que ejecute "ls -l | more"....

El gran problema en mi opinión es que la "informática" es muy amplia y es difícil encontrar la esencia, por esto te recomiendo que si puedes y tienes ganas te agencies un arduino u otro microcontrolador, microprocesador o chip y a ser posible que ensambles tu la placa desde cero y te plantees empezar haciendo cositas sencillas..... De esta manera se mama todo desde la esencia.....

Y otro consejo más, si no sabes ingles apréndelo antes de empezar a programar, el ingles es la llave...

Yo he aprendido algo de python algo de c algo sobre que es programar, algo sobre linux....... pero en todas estas situaciones me he encontrado castrado por decirlo de alguna manera, así que hace un año día más día menos me di cuenta que si no sabía ingles todos mis esfuerzos estaban castrados, mucha de la información que necesitaba para aprender estaba en ingles y a día de hoy me encuentro invirtiendo unas cuantas horas a la semana en aprender ingles. Y a temporadas microcontroladores, a temporadas me da por python, a temporadas......

Se me olvidaba, un buen comienzo también podría ser la web, empezar haciendo algo en html, luego css, luego algún script en javascript, y rodando rodando la pelota de nieve probablemente llegues a php que creo también es un lenguaje cojonudo con muchas posibilidades................

Bueno creo que me encuentro en una situación similar a la tuya, pero no ando tan perdidooo, o posiblemente si.... estas son mis soluciones, ahora las voy poniendo en práctica y creo que no ando muy desencaminado, si alguien encuentra errores en este planteamiento agradecería que me los dijese.

----------

