Aprender a programar

smintcs

Me gustaria aprender a progamar desde cero.
He estado mirando y creo q debo enpezar por c para luego pasar a c+ y demas.
Debo enpezar por esto o tengo q ir a cosas mucho mas generales??
Como puedo aprender, intento bajar manuales y tutoriales o me compro algun libro?
thx

LiuM

Lo mejor son los libros y trastear haciendo programillas

SiPoX

Buenas!

Sip.. si no tienes ninguna noción de programación, es buena idea comenzar por un lenguaje como C. (o Pascal, este último mucho más obsoleto y menos potente, pero para aprender.. vale.)

En cuanto domines más o menos conceptos de metodología, pues pasas a otro lenguaje que te llame más la atención. :) ;) Saludos!

cabron

Confundes saber programar con saber un lenguaje de programación.

Saber programar es saber buscar la solución a un problema.

Ya que estamos en una Web de juegos, imagina que vas a hacer un juego de acción en primera persona. Tienes que conseguir que el ordenador dibuje personajes en la pantalla, que el personaje reaccione al teclado y al ratón, que simule la fuerza de gravedad sobre los elementos del juego, que las cosas se choquen entre si, etc...

Ese es el problema, y tienes que buscar la solución para que el ordenador haga todo eso.

Además tienes que intentar que la solución no tenga errores, que sea lo más sencilla posible, que sea fácil de entender y este bien ordenada por si tienes que modificar algo, etc...

Para conseguir eso tienes distintos métodos de programación. Que yo sepa los únicos que tienen sentido hoy en día son la programación estructurada y la programación orientada a objetos.

Saber un lenguaje de programación te vale para poder poner la solución en un lenguaje que el ordenador pueda "entender", si le cuentas por el microfono la solución que se te ha ocurrido casi que no te va a hacer mucho caso...

El lenguaje de programación que tienes que aprender, dependerá de lo que quieras hacer, no tienen por que ser C y C++

S

Si no tienes ninguna noción, es un suicidio empezar por C. Para empezar y aprender conceptos básicos, me inclinaría por Ada, Pascal, Modula o Python.

smintcs

veamos lo q es nocion algo tengo, y lo q qiero es aprender un lenguaje de programacion como me dicen por hay arriba, para hacer programillas y esto , pero mas que nada es para q cuando haga el modulo q tengo pensado hacer, el de desarrollo de aplicaciones informaticas, no llegar ahi y empezar de 0 no se si me esplico quiero aprender a hacer cosas basicas

m0rG

Hace poco estuve leyendo sobre el mismo tema en una entrada antigua de barrapunto y aun sigo con dudas.Este año acabo Bachiller y antes de ir a la uni me gustaría aprender algo de programación.El problema es que nadie se pone de acuerdo sobre la mejor manera de empezar.Dejando lenguajes aparte,algunos sugerían que lo mejor es comenzar por metodología de la programación y algoritmia,y una vez dominado lo básico empezar por algún lenguaje como Pascal,¿qué opináis?

R3DKNIF3

No se si tienes alguna idea de catalan, pero bueno yo aqui t dejo un manual de C para aprender desde 0, lo explica todo muy bien...

http://www.cvc.uab.es/shared/teach/a24965/IndexLP.htm#apunts

editado: #7 yo estoy en 1º de carrera informática superior y lo q hemos hecho es combinar algoritmica con lenguaje C, se dice que a partir de la algoritmica puedes hacer un programa en cualquier lenguaje simplemente traduciendo...

Yo la verdad q no tuve mucho x el tema... primero sabia mas de C q de algoritmos y luego al reves, al final acabe suspendiendo los 2 xD

SiPoX

Buenas!

Yo estoy a punto de terminar ese módulo :), así que te cuento. En la asignatura que aprenderás a programar es PLE (Programación en lenguajes estructurados). Antes de comenzar en lenguaje C (o cualquier otro estructurado) verás una "cosa" que se llama metodología de la programación. Eso es lo que han comentado de algoritmia y de cómo resolver un problema. Después, aplicarás esa metodología a un lenguaje en concreto. Por supuesto, antes de meterte con algún lenguaje.. se supone que hay ke saber que es un bucle, una variable... pero a mi no me parece que comenzar por C sea un suicidio.. (claro, si no se comienza por entrar en punteros y estructuras dinámicas y demás... xD!)

PD.- De todas formas en internete hay mucha documentación sobre todo esto... así que todo es cuestión de buscar.. ;) :) Saludos! ;)

PeLoTaSo

Te recomiendo que empieces con python, aquí tienes un tutorial bastante bueno que se utiliza en la universidad:

http://marmota.act.uji.es/IG04/pdf/python.pdf

El por que empezar con python y no con otro, entre otras cosas es porque no utiliza corchetes para abrir y cerrar condiciones, por lo tanto te obliga a tabular que es algo que a veces la gente olvida cuando está empezando y provoca el típico problema de que falta paréntesis a cerrar y los compiladores devuelven el problema en la linea que les sale de la polla.

Carcass

#10 Ojalá fuera sólo cuando están empezando X-D

Kansei

debes de empezar por el principio (no, no es broma).

si quieres saber programar bien debes de aprender metodología de programación, seguir con la resolucion de problemas de foma estructurada. Hacer esto y llegar a dominar los algoritmos en pseudocódigo es fundamental.

Saber estructurar un problema, dividirlo en partes simples y econtrar un solución rápida y eficaz, es lo que distingue un buen programador de un programador del montón, ya que programar en un lenguaje u otro es lo más sencillo.

De nada te vale saber la sintaxis de C, Delphi o VB, si despues utilizas if cuando puedes usar switch, o bucles y if cuando puedes usar recursividad. y por dios indenta el código!!!!!

editado:
una vez que sabes lo primero, para empezar, en mi opinion lo mejor es C, y en su versión del Turbo C 3.0 de Borland

PeLoTaSo

#12 Hombre por eso digo que empiece con python, porque te obliga a indentar (tabular) el código para que rule. Sobre la recursividad es un sistema que hace falta algo de práctica programando para poder entenderla y controlarla correctamente ya que una recursión mal hecha provoca que el programa se cuelgue y si es un intérprete que se cuelgue y pierdas los datos, por lo tanto no veo recomendable, si eres autodidacta, empezar usando recursividad, aunque sí es cierto que es una herramienta que te libra de escribir un huevo de código.

Si el python no te convence te recomiendo que empieces con C y algún compilador que permita depurar el código porque utilizar un compilador que únicamente te devuelve errores es un poco pesado porque igual un programa no devuelve ningún error al compilar pero luego no funciona correctamente y ponte a buscar donde está el fallo, sólo te queda la opción de ir poniendo coutŽs en las partes "calientes" y encontrar donde está el fallo.

Te puedo poner el título de algún libro que suelen recomendar en la universidad para empezar a programar en C/C++, el que utilizamos en la Universidad de Alicante es:

INTRODUCCIÓN A LA PROGRAMACIÓN. ALGORITMOS Y C/C++
Autores F. LLopis, E. Pérez, F. Ortuño
Editorial Universidad de Alicante - 2000

En este libro empiezan con pseudocódigo y luego introducen C y C++ a la vez utilizando las funciones más sencillas de cada uno, y un wevo de ejercicios resueltos, que desde mi punto de vista es lo mejor para aprender a programar.

Hay muchos tutoriales en internet que también te puede servir pero mi experiencia me ha demostrado que los libros escritos por profesores de universidad son mucho más didácticos que los que rulan por internet. Todo depende de lo autodidacta que seas, hay personas que con un tutorial cutre en txt aprenden rápido y otros que ni con un tutor personal consiguen hacer un programa que lleve una biblioteca. Mírate el pdf que te he pegado más arriba sobre python a ver si te convence, y cuando empieces a necesitar utilizar estructuras te pasas a C porque python es orientado a objetos y utiliza clases, algo no recomendable si no sabes nada de programación.

Un saludo.

smoGG

al igual me entero de algo :S

PD: descargando el manual de #10, a ver si pillamos conocimiento :D

LOc0

Para lo de las llaves está el truquillo de escribir las dos justo debajo de la sentencia y así no se te olvida la del final ;)

Salu2 ;)

PD: www.algoritmia.net

TeTu

Con Pascal tomaras las nociones basicas para programar, y luego si quieres te puedes pasar a otros lenguajes mas complejos, pero al menos te sonara "casi" todo y tendras campo ganado.

Hewkard

Yo estoy en segundo curso de dicho modulo q tu quieres realizar. Yo llegue al modulo sin tener ni idea y me ha ido bastante bien. Sin tener ni idea nos metieron c a saco y tp fue tan dificil, despues pascal bajo entorno delphi y ya era como coser y cantar... Asiq creo q es un buen paso empezar por c
si sabes programar el lenguaje despues te va a ir dando mas o menos igual cambian cosillas pero tp mucho
La diferencia esta mas en programar estructuradamente u orientado a objetos

NoSHeL

La recursividad no es recomendable usarla salvo que sean operaciones especificas que lleven pocos datos consigo.
En cada iteracion (entrada en recursividad) se han de guardar los datos de las anteriores iteraciones en la pila del sistema, lo que trae consigo un gasto de memoria considerable dependiendo de los datos que uses.

La recursividad es util en la programacion funcional, que practicamente se basa en eso. Esta programacion esta muy en desuso pero algunos la consideran mejr que objets o estructurada, creo q era mas potente pero los algoritmos para resolver un problema s complican demasiado.

smintcs

pos he estado mirando en la seccion de informatica de la mejor biblioteca de mi ciudad, y habia como 4 estanterias, una entera pa c y c+, pero solo habia un libro que explicara algoritmia.

Entos si primero tengo q aprender algoritmia para poder enterder lo q qiero hacer pues creo q te voy a acer caso y me compro el libro este:

INTRODUCCIÓN A LA PROGRAMACIÓN. ALGORITMOS Y C/C++
Autores F. LLopis, E. Pérez, F. Ortuño
Editorial Universidad de Alicante - 2000

q por el titulo me parece q es lo q estoy buscando.

Gracias a todos

S

La recursividad no es recomendable usarla salvo que sean operaciones especificas que lleven pocos datos consigo. En cada iteracion (entrada en recursividad) se han de guardar los datos de las anteriores iteraciones en la pila del sistema, lo que trae consigo un gasto de memoria considerable dependiendo de los datos que uses.

La recursividad de cola existe, y es tan eficiente como otro método iterativo. El usar arbitrariamente iteraciones con cualquier cosa lleva consigo que la mayoría de las operaciones tengan O(n). Si sabes elegir, casi siempre te podrás aproximar a O(log n).

La recursividad es util en la programacion funcional, que practicamente se basa en eso. Esta programacion esta muy en desuso pero algunos la consideran mejr que objets o estructurada,

Que sea funcional no significa que carezca de orientación a objetos o no sea estructurada. Para más información, Objective CAML o O'Haskell.

Está en desuso porque para sacar jugo de ella hay que tener una mentalidad matemática y con capacidad de abstracción. Además, la gente se horroriza si ve que no hay variables ni bucles, dificultando el aprendizaje desde otros lenguajes.

creo q era mas potente pero los algoritmos para resolver un problema s complican demasiado.

No estoy de acuerdo; no es que se compliquen, es que sirven para solucionar cosas complejas. Recientemente he hecho un examen donde exclusivamente se debía utilizar Haskell. La solución al examen completo (de 3 horas) me cupo en cara y media. Una solución procedimental así, a ojo, rondaría las 4 o 6 caras (con la merma de comprensibilidad y legibilidad).

Yo veo los lenguajes funcionales ideales para solucionar problemas complejos, inabarcables desde cualquier otro paradigma. Por ejemplo, es suicida solucionar el problema de las cifras (de cifras y letras) si no se usa recursividad, la mayoría de las soluciones al cubo de Rubik son recursivas, y aun pudiendo hacer pinitos funcionales en lenguajes procedimentales, lo claro y escueto de la solución en lenguajes como Haskell gana por mucho.

IS4kO

un poko de spam ->

http://www.lalibreriadigital.com/

JuAn4k4

Pues yo tengo unos apuntes muy majos de Introduccion a la programacion, si no tienes mucha nocion de programacion, antes que empezar en c, o c+ o c++ , yo te recomendaria usar lo que se conoce como "Notacion Algoritmica" es inmensamente mas sencillo ya que es en español y te ayuda a comprender el metodo de programar, luego ya la cosa esta en buscarte un manual del lenguaje que sea y traducir tu notacion. De hecho asi nos lo enseñaron en la universidad y asi lo entiende mucha mas gente. ;)

NoSHeL

"No estoy de acuerdo; no es que se compliquen, es que sirven para solucionar cosas complejas."

A parte de que sirvan o no para solucionar cosas mas complejas, para problemas basikos el algoritmo utilizado en la programacion funcional es mas dificil de razonar que para cualquier otro estilo de programacion.

Yo mismamente tb tuve un examen de programacion 2 de la carrera y me cayo un problema de funcional en CAML. Es cierto que a nivel de codigo en menos lineas se consigue un algoritmo valido, pero sigo pensando que es mas facil de razonar y es menos complejo usar programacion estructurada o orientada a objetos, ya que se acerca mas a la forma de pensar que tenemos.

Si bien es cierto funcional sera mas apto para resolver un tipo especifico de problemas, y objetos para otro. Yo me referia que los algoritmos creados en funcional suelen ser mas optimos que objetos/estruturado , pero trae consigo el problema de su dificil elaboracion.

En fin, yo odio funcional ;)

Saludos! :D

Kansei

#20, iva a contestar a #18, pero seria repetir lo que tu has dicho, a si que os ahorro el tocho.

#23: evidentiemente la programación estructurada es mucho mas facil de "leer", y para nuestro modo de pensar es mas sencillo trabajar con objetos, pero no se puede discutir que para determinadas soluciones, la recursividad es la solucion más válida.

De todas maneras cada cosa tiene su momento, y para saber que herramienta se a adapta mejor a la solución del problema, pues a machacarse con algoritmia metodología.

JuAn4k4

Os referis a programar en orden descendente no ? con sus funciones y procedimientos y luego el main o general digamos con procedimientos o fucinoes de 2º , 3º , 4º , ... nivel. Es decir programar a distintos niveles, el general pues es el general xD los de 2º nivel son un poco mas especificos que usan procedimientos o funciones de 3er nivel de precision que usan de 4º etc... si usas muxos al final es un lio de mil pares de cojones. Yo creo que con 3 o 4 niveles puede salir un programa bastante bien y sin mucha complejidad.

¿ Eso lo llamais "funcional" ? o como ?

Bueno , para el que quiera bajarse los apuntes que me dieron, bastante buenos por cierto :

http://dhost.info/informaticoscps/modules.php?name=Downloads&d_op=getit&lid=4

Supongo que funcionara, lo he subido ahi. ^^ Un saludo
--- Editado --- Ya va ;)

S

Las soluciones funcionales pueden parecer más enrevesadas o menos obvias, pero es que son puramente matemáticas. Un clarísimo ejemplo son las list comprehensions:

[(x,y)|x<-xs,y<-ys]

Todos los pares (x,y)x pertenece a xs e y pertenece a ys. Añade más condiciones, modifica el objetivo del resultado, y tendrás operaciones complejísimas (y muy claras y específicas) en una línea de código. Y después piensa en la cantidad de bucles anidados que supondría.

#25 http://en.wikipedia.org/wiki/Functional_programming

Ahh, por cierto, la orientación a objetos opino que sólo se debería usar para programas de un tamaño considerable o que manejen gran cantidad de tipos de datos. La virtud está en poder elegir (y en poder incrustar código, claro xD).

CeeC

Si quieres aprender a programar, olvídate de los lenguajes de programación. Como ya han dicho programar es crear un algoritmo que sea solución de un problema. Para ello debes aplicar el diseño descendente: dividir el problema principal en subprolemas más pequeños y aplicar lo mismo en cada uno de estos hasta llegar a soluciones triviales.

Busca info sobre la historia de la programación (las fases por las que ha pasado desde la programación spaguetti hasta la POO), también te ayudará. Y finalmente mírate algoritmos básicos como ordenación y búsqueda de elementos en vectores/matrices.

Una vez tengas esos conocimientos ya puedes pasar a estructuras de almacenamiento de la información (variables, vectores, matrices, listas, colas, pilas, árboles, árboles B+, grafos...) Y cuando ya tengas esto, POO (programación orientada a objetos) que se resume en clases, herencia, polimorfismo y sobrecarga (de funciones y operadores).

Los lenguajes de programación no es nada más ni menos que la aplicación sintáctica de los conocimientos anteriores. Si sabes cómo va todo lo anterior, tan sólo te queda aprender la sintaxis del lenguaje que quieras.

Si lo que quieres es aprender un lenguaje de programación, o simplemente hacerte pequeñas aplicaciones, lo ideal es empezar con C (si lo quieres para un entorno de texto o con vistas al futuro en este mundillo), o usar un entorno visual para Windows: Visual Basic o Delphi son muy intuitivos y triviales para aplicaciones sencillas.

Como tutoriales, para C existe uno para MSDOS muy antiguo pero muy bueno para comenzar, se llama TutorC. Te enseña la teoría capítulo a capítulo y tras cada uno de estos te pide que hagas unos ejercicios de ese capítulo. En cuanto al compilador, yo no usaría Borland C ya que no sigue el ANSI C. DevCPP es un compilador con GUI que viene bastante bien, aunque puede costar un poco al principio.

#20 La recursividad rara vez suele ser tan eficiente como la iteración (bien programada). Como dice #18 cuando la cantidad de datos que lleve sea muy grande provoca un problema de uso excesivo de la memoria, además del tiempo que se emplea en ir y volver una y otra vez de la función recursiva (que es mayor al empleado en el flujo normal del programa).

La ventaja de la recursividad es la simpleza de programación para ciertos problemas (sucesión de fiboracci o factorial), que con pocas líneas de código se resuelve, lo que no quiere decir que sea más eficiente.

Todas la soluciones recursivas se pueden aplicar a soluciones iterativas, y si están bien hechas suelen ser más eficientes. Eso sí, la complejidad de programar las segundas suele ser mucho más alta.

Los algoritmos iterativos suelen ser más eficientes tanto en espacio como en tiempo si están bien programados (uso de flags). De hecho la gran mayoría de las funciones de ordenación y búsqueda de vectores o matrices son algoritmos iterativos, consiguiendo complejidades que rozan O(log n). No toda iteración es O(n).

Saludos.

S

#20 La recursividad rara vez suele ser tan eficiente como la iteración (bien programada). Como dice #18 cuando la cantidad de datos que lleve sea muy grande provoca un problema de uso excesivo de la memoria, además del tiempo que se emplea en ir y volver una y otra vez de la función recursiva (que es mayor al empleado en el flujo normal del programa).

Vuelvo a decirlo, la recursión de cola es exactamente igual de eficiente que una iteración, simplemente porque los compiladores e intérpretes lo traducen internamente a un bucle. ¿Ventajas? Mayor claridad y simplicidad. Cuando habláis de recursividad parece que sólo pensáis en la que se aplica en lenguajes procedimentales, que es bastante rudimentaria y nada optimizada (los lenguajes procedimentales no están hechos para eso).

Hay problemas en los que la recursividad de cola no es eficiente, y en esos casos la programación procedimental tiene los mismos problemas que la funcional.

Los algoritmos iterativos suelen ser más eficientes tanto en espacio como en tiempo si están bien programados (uso de flags). De hecho la gran mayoría de las funciones de ordenación y búsqueda de vectores o matrices son algoritmos iterativos, consiguiendo complejidades que rozan O(log n). No toda iteración es O(n).

La mayoría de los algoritmos de búsqueda iterativos son adaptaciones de algoritmos recursivos (mergesort, quicksort...). Además, no mencionaba ordenaciones, sino tratamientos de datos en general.

Por cierto, las búsquedas no es que rocen O (log n), es que la alcanzan. Pero ¿las ordenaciones? Todas las que conozco son de O(n*log n) para arriba, quitando quizá Radix.

As modern imperative languages and their implementations have started to include greater emphasis on correctness, rather than raw speed, and the implementations of functional languages have begun to emphasise speed as well as correctness, the performance of functional languages and imperative languages has begun to converge. For programs which spend most of their time doing numerical computations, some functional languages (such as OCaml and Clean) can approach C speed, while for programs that handle large matrices and multidimensional databases, array functional languages (such as J and K) are usually faster than most non-optimized C programs.

JuAn4k4

#28 #20 eres tu xD , hablas solo en los foros ? x_D

Usuarios habituales

  • JuAn4k4
  • Soy_HeatoN
  • Kansei
  • NoSHeL
  • smintcs
  • PeLoTaSo
  • SiPoX