Ver la versión completa : Sobre lenguajes de programación
Gordon Freeman
09/02/2010, 19:40
Buenas, sucede que me he dado cuenta de que en unos años, si no es que ya estamos en ello, no tener ni zorra de programar será un grado grave de analfabetismo, como lo es ahora no saber inglés, así que aunque jamás me ha apasianado demasiado el mundo de la programación, quiero inicierme en ella.
Tengo unos conocimientos absolutamente mínimos -las cuatro clases de Fortran que se dan en física- y quiero aprender algo. El fin de ello, ni idea, simplemente saber algo, tampoco tengo ningún objetivo profesional ni académico ni nada, solamente tener algo con que defenderme en un futuro. Así que en un principio quería intentar aprender algo de C++, pero después he pensado qué hostias, el Latex no solo sirve para escribir ecuaciones chulas, pero, ¿es un lenguaje de programación? Según he leído lo clasifican mejor como un procesador de textos... yo pensaba que un procesador de textos era algo en plan Word, así que ni idea...
Así pues, ¿qué es exactamente el Latex? ¿Me recomendáis que me interese por C++ o por Latex? ¿Estoy comparando peras con elefantes? Y herramientas para aprender C++/Latex habrán un montón tanto en la web como en bibliografía, alguna especialmente recomendada?
Muchas gracias.
Pantalàimon_
09/02/2010, 22:56
Pues me parece que peras con elefantes. Pues aunque Latex y C++ sean lenguajes tienen distinta funcionalidad. Latex es para crear ficheros de texto con formulitas chulas y C++ es para realizar programas(un tipo de ficheros que al ejecutarse hace que el computador siga una serie de intrucciones).
Yo te recomendaría C para afianzar conocimientos con el paradigma de programación imperativo y modular. Para luego poder entender mejor C++ que tiene que ver más con la programación orientada a objetos.
Por otro lado está Haskell que usa de la programación funcional. Muy interesante por la semejanza con el lenguaje matemático, programación perezosa, códigos fuente mucho más cortos que los escritos en programación imperativa pero bastante más ineficiente. También está Pascal, que es un lenguaje también con paradigma imperativo que suele ser más didáctico y mucho más tipado que C, con lo cual la detección de errores durante la compilación del programa es más fácil.
Pero bueno, si quieres aprender C++, te recomendaría antes que aprendieras algo de C. Aunque también te recomendaría que esperaras a que alguien hiciera alguna recomendación más en el foro, jaja.
PD. Me ha entrado la duda, pues poco sé de Látex, voy a mirar si puede programar con este lenguaje...
Un saludo!!
Hola, Gordon Freeman
...pero después he pensado qué hostias, el Latex no solo sirve para escribir ecuaciones chulas, pero, ¿es un lenguaje de programación? Según he leído lo clasifican mejor como un procesador de textos... yo pensaba que un procesador de textos era algo en plan Word, así que ni idea...
Así pues, ¿qué es exactamente el Latex? ¿Me recomendáis que me interese por C++ o por Latex? ¿Estoy comparando peras con elefantes? Y herramientas para aprender C++/Latex habrán un montón tanto en la web como en bibliografía, alguna especialmente recomendada?
Muchas gracias.
LaTeX (LaTeX project (http://www.latex-project.org/).) es una colección de macros construidos sobre variantes del lenguaje TeX, creado por Donald Knuth. LaTeX no es un procesador de textos; LaTeX es un sistema de composición de textos; la diferencia no es solo de nombre. Un sistema LaTeX tiene muchas componentes; TeX (y, por lo tanto también LaTeX) puede ser visto como un lenguaje de programación; de hecho, es un lenguaje de programación Turing-completo (http://en.wikipedia.org/wiki/Turing_completeness).
Obviamente, el objetivo de LaTeX es componer textos, así que si deseas, por ejemplo, hacer cálculos numéricos que sean muy pesados (como los que aparecen en muchos métodos numéricos), con LaTeX teóricamente podrías hacerlos, pero en la práctica seguramente no los vas a poder realizar (el manejo de memoria de LaTeX no está diseñado para estos fines).
Si quieres ver un ejemplo interesante y sofisticado de programación con LaTeX, te recomiendo el código de la colección de paquetes sudokubundle (http://ctan.org/tex-archive/help/Catalogue/entries/sudokubundle.html) que, entre otras cosas, contiene un solucionador de sudokus.
Total: con (La)TeX puedes (en teoría) hacer lo que se hace en cualquier otro lenguaje de programación (tipo C++ o Java) pero, en la práctica, obviamente tienes que tener en cuenta las limitantes (uso de memoria, etc.) que surgen del objetivo para el que fue concebido (La)TeX: la composición de textos.
Pues me parece que peras con elefantes. Pues aunque Latex y C++ sean lenguajes tienen distinta funcionalidad.
De acuerdo.
...Latex es para crear ficheros de texto con formulitas chulas y C++ es para realizar programas(un tipo de ficheros que al ejecutarse hace que el computador siga una serie de intrucciones).
Ya no estoy de acuerdo. Todo documento (La)TeX es, de hecho, un programa. Como mencioné en mi anterior respuesta TeX y LaTeX son lenguajes de programación Turing-completos. Obviamente, insisto, hay que tener en cuenta que TeX y LaTeX fueron concebidos para componer textos de alta calidad (no necesariamente con formulitas chulas).
He aquí un pequeño ejemplo de un ciclo con LaTeX:
\documentclass{article}
\usepackage{ifthen}
\begin{document}
\newcounter{micont}
\noindent Los primeros cien naturales son:\\
\whiledo{\value{micont}<100}
{\stepcounter{micont}\noindent\themicont\\}
\end{document}
Pantalàimon_
09/02/2010, 23:43
Entendido, no tenía ni idea.
Un saludo!
Gordon Freeman
10/02/2010, 01:23
Gracias a todos, ya veo que no tenía mucha idea de todo esto, no...
Algo que me estoy preguntando es, ¿es mejor que empiece con algún lenguaje real o quizá mejor que aprenda a cómo programar de "forma abstracta", es decir, una especie de metodología para poder usar después en cualquier lenguaje? ¿O cada lenguaje es un mundo? Mi intención, al menos de momento, es solamente coger una base y dejar de ser un "analfabeto" en este campo, así que no sé qué enfoque me iría mejor.
Por otro lado, Me han comentado que, si no quiero comerme mucho la cabeza, que empieze con algo como Python en lugar de C, que es mucho más asequible...
Gracias a todos, ya veo que no tenía mucha idea de todo esto, no...
Algo que me estoy preguntando es, ¿es mejor que empiece con algún lenguaje real o quizá mejor que aprenda a cómo programar de "forma abstracta", es decir, una especie de metodología para poder usar después en cualquier lenguaje? ¿O cada lenguaje es un mundo? Mi intención, al menos de momento, es solamente coger una base y dejar de ser un "analfabeto" en este campo, así que no sé qué enfoque me iría mejor.
Por otro lado, Me han comentado que, si no quiero comerme mucho la cabeza, que empieze con algo como Python en lugar de C, que es mucho más asequible...
Python es buena opción, en la UNED se usa Modula-2 que es un lenguaje imperativo basado en Pascal bastante sencillito, aunque para mi algo feote y con poca proyección profesional, pero muy interesante para los que empezais para ir cogiendo base. Sobre los C, C++ y sus variantes, si no tienes ni papa de programar mejor no te metas, al menos sólo, sin nadie que te lo explique, porque son algo complejos para empezar.
Pantalàimon_
10/02/2010, 11:54
¿es mejor que empiece con algún lenguaje real o quizá mejor que aprenda a cómo programar de "forma abstracta", es decir, una especie de metodología para poder usar después en cualquier lenguaje?
Pues no lo sé, mi experiencia es de haber aprendido primero, al igual que tú, con Fortran 77. Luego aprendí algo de C con manuales por Internet, este foro (http://www.elrincondelc.com/nuevorincon/foros/index.php) dónde hay varios gurús del C, y algún que otro libro de la biblioteca y sin saber nada de cómo programar de forma abstracta. Aunque, luego, al empezar a hacer Modula-2 por la UNED, he afianzado los conocimientos de programación en general que ya tenía asumidos inconscientemente.
Con eso quiero decir que no sé si es bueno aprender a programar de forma abstracta sin poder jugar con algún lenguaje. Aunque tampoco haría como hice yo, y compaginaría el lenguaje de programación con el aprendizaje de algunos conceptos genéricos.
¿O cada lenguaje es un mundo?
Hay varios paradigmas a la hora de programar, entonces según que lenguaje lo podría poner en un saco o en otro, o en varios.
Yo, como opinión personal, te recomendaría C, por ser imperativo(al igual que Fortran 77). Es un poco más complicado de aprender sobretodo cuando llegas al tema de punteros pero creo que vale la pena. Pues llegas a intuir cómo funciona el ordenador por dentro. Además, luego estudias cualquier otro lenguaje de programación como Haskell que no está ligado tanto a la máquina y disfrutas con él. Temo que si es al revés y aprendes un lenguaje más "fácil", te vaya a costar por el hecho de ser el primer lenguaje que aprendes y que, luego, cuando quieras mirar otros lenguajes de programación te cueste mucho más asimilarlos. Pero, en fin, mis opiniones pueden estar basadas en prejuicios pues sólo me baso en mi experiencia y seguro que hay muchas otras experiencias que te puedan decir todo lo contrario.
Un saludo!
Pues mira, depende de para qué.
Para el entorno profesional, C, C++ te pueden dar buen resultado. Aunque también se demanda mucho JAVA, .NET, C# y en algunos sectores específicos, Ada y Cobol.
En la ingeniería informática hay gente que empieza por C y otros por Ada depende de las manías y gustos de los profesores.
Hay lenguajes muy chulos de aprender, como es el caso de Ruby o Phyton. Son lenguajes de muy alto nivel, por lo que su aprendizaje es más sencillo.
Pero creo que es más útil que empieces por C o C++, ya que el paradigma de programación que representan te hará mucho más fácil manejarte con otros luego.
Buenas, sucede que me he dado cuenta de que en unos años, si no es que ya estamos en ello, no tener ni zorra de programar será un grado grave de analfabetismo, como lo es ahora no saber inglés, así que aunque jamás me ha apasianado demasiado el mundo de la programación, quiero inicierme en ella. Aunque es una idea loable, la comparación es bastante defectuosa. Supongo que sabrás la obviedad que voy a decir, pero aun así creo que merece la pena exponerla para entender el porqué de la conclusión.
Hace 20 años yo llegué a la misma conclusión que tú (en unos años, no saber informática será un grado grave de analfabetismo) y me puse a estudiar informática. Pero los años pasan inexorablemente y la informática evoluciona a un ritmo demasiado elevado.
1º ¿De qué me sirve haber aprendido hace 20 años a usar el MS-DOS 3.2 y luego el MS-DOS 5.0? Mis conocimientos no eran mancos precisamente pues incluso me hice un archivo batch que detectaba virus, pero salvo en contadas ocasiones, todo ese conocimiento DE LOS COMANDOS es un conocimiento inútil pues ya muy rara vez utilizo el "simbolo del sistema" para teclear comandos. Lo que sí me viene muy bien, y deshace el "analfabetismo informático" es la base fundamental (distinguir hardware del software, distinguir achivos que son aplicaciones de los que son datos, extructura de las carpetas, etc)
2º ¿De qué me sirve haber aprendido casi a la perfección el Word Perfect? Controlaba los códigos del WP casi como ahora GM controla los códigos del Latex, pero sacaron las versiones modernas y ahora con solo pinchar con el ratón incluso un neófito sabe hacer sangrías, tablas, justificar a la derecha y todas esas cosas sin necesidad de haberse aprendido los códigos. Todos ESOS CÓDIGOS son ahora un conocimiento inútil que solo sirven para contar batallitas de la guerra del 14. Pero aun así todavía queda un algo que me permite resolver ciertas situaciones conflictivas que otras personas (hija, primo, cuñado, amigo, etc) no saben resolver porque no se percatan de ciertas sutilezas con los códigos (ellos ni siquiera saben que existen dichos códigos porque cuando pinchan en "negrita" no ven en pantalla que acaban de poner dos códigos, uno que indica donde empiezan las negrillas y otro que indica donde terminan las negrillas)
3º ¿De qué me sirve haber apendido Pascal? Muchos de vosotros sabréis programar mejor que yo, pero mis conocimientos de programación en Pascal me permitieron hacer un videojuego (muy sencillito, sí, pero un videojuego). Dentro de poco, supongo que todos ESOS CÓDIGOS también serán conocimiento inútil, pero no me cabe ninguna duda que perdurará un cierto conocimiento útil (extructura de la programación, variables, constantes, condicionales, saber de la existencia de librerías, etc) que me seguirán proporcionando cierta ventaja a la hora de entender un código base escrito en futuros lenguajes.
4º Y lo mismo para hojas de cálculo, procesadores de imágenes, bases de datos, etc, etc, etc.
Conclusión:
Si lo quieres para esto que dices «simplemente saber algo, tampoco tengo ningún objetivo profesional ni académico ni nada, solamente tener algo con que defenderme en un futuro.» Entonces aprende el lenguaje que te dé la real gana pues ...
1º Lo que diferencia un lenguaje actual de otro también actual, es básicamente un cúmulo de códigos y de reglas arbitrarias de escritura. Y casi con toda certeza dentro de 20 años todos esos códigos y reglas serán un compendio de conocimiento inútil.
2º Lo común entre todos los lenguajes actuales (extructura, uso de condicionales, etc) perdurará en el tiempo. Y dentro de 20 años te enorgullecerá conocerlo y no te considerarás un "analfabeto en programación"
Saludos.
Ontureño
10/02/2010, 13:08
En realidad, una vez sabes programar en un lenguaje, la adaptación a cualquier otro suele ser bastante sencilla. Es decir, que uno o bien sabe programar o no sabe programar. Pero no hace falta completar la frase con un "...en C" o "... en Fortran"
Dicho esto, aprende C.
PD: por cierto, yo NO sé C.
Gordon Freeman
10/02/2010, 19:30
Muchas gracias a todos, me habéis ayudado mucho. Pues entonces creo que haré caso a la mayoría e intentaré tener una primera toma de contacto con C, a ver qué tal. Y si me gusta igual me intereso por aprender a programar "en abstracto", o como se exprese.
¿Algún libro/alguna web especialmente recomendable para aprender?
Como Programar en C/C++, Deitel
Si quieres cursos online de C++: http://c.conclase.net/curso/index.php
Un saludo
Si quieres programar en C++ te recomiendo este libro:
Accelerated C++ Practical Programming by Example. Andrew Koenig and Barbara E. Moo http://www.acceleratedcpp.com/
Lo que no te recomiendo es que aprendas primero C teniendo como objetivo final programar en C++. Pueden parecer lenguajes parecidos y compatir ciertas sintaxis pero en realidad son dos paradigmas bien distintos y con ciertas diferencias importantes. Y sabes lo que pasa, que si empiezas en C pensando que es el paso natural para aprender C++ no acabas ni programando en C ni programando en C++, sino en una amalgama de los dos que no es estrictamente ni una cosa ni otra pero como el compilador se lo traga igual pues nadie le da importancia. De hecho muchos tutoriales en internet que se suponen que enseñan C++ meten cosas propias de C y se quedan tan anchos como si C++ fuera una extensión de C, pero no lo es.
Mi recomendación es C++, pero teniendo claro que C y C++ son cosas distintas, parecidas pero distintas.
El libro que recomiendo Migui es muy recomendado aunque yo no lo haya leído. Yo aprendí a programar con un libro de Francisco Javier Ceballos. El libro que leí, creo que era una versión antigua de su "C/C++ Curso de programación". Incluía ejercicios, y además de enseñarte la sintaxis del lenguaje, te enseñaba algunas estructuras(pilas, listas, árboles, ...) y algunos algoritmos de ordenación.
Mi consejo si quieres aprender a programar es que hagas muchos programitas, desde el clásico que te resuelve una ecuación de 2º grado, a uno que te diga que te diga jugada tienes en poker a partir de 5 cartas.
Hace bastantes años aprendí a programar en C. Como no me era algo útil por entonces, lo abandoné.
He retomado la programación últimamente. Primero HTML y después PHP (acabo de empezar) y había decidido volver a programar en C. El problema es que no tengo nungún objetivo planteado, tan sólo quiero hacerlo por aprender. Y mi pregunta es ¿me seguís recomendando C o, por el contrario, ya no es un lenguaje útil, tal y como le ha sucedido al BASIC? En caso de que me digáis que sí, que C es una buena opción, ¿qué me recomendáis para aprenderlo?
Ontureño
14/03/2010, 23:46
Un problema que resuelva sudokus, por ejemplo. Si es muy difícil, un programa que calcule los primeros 1000 primos...
Un poco off-topic, pero quería mostrar con un ejemplo un poco más interesante que el que puse más ariba el uso de (La)TeX como lenguaje de programación. EL ejemplo: un sencillo macro TeX que permite calcular primos; uso: \primes{<valor>} en donde <valor> es un entero n mayor o igual que tres calcula y muestra los primeros n números primos:
\documentclass{article}
\newif\ifprime \newif\ifunknown % boolean variables
\newcount\n \newcount\p \newcount\d \newcount\a % integer variables
\def\primes#1{2,~3% assume that #1 is at least 3
\n=#1 \advance\n by-2 % n more to go
\p=5 % odd primes starting with p
\loop\ifnum\n>0 \printifprime\advance\p by2 \repeat}
\def\printp{, % we will invoke \printp if p is prime
\ifnum\n=1 and~\fi % ‘and’ precedes the last value
\number\p \advance\n by -1 }
\def\printifprime{\testprimality \ifprime\printp\fi}
\def\testprimality{{\d=3 \global\primetrue
\loop\trialdivision \ifunknown\advance\d by2 \repeat}}
\def\trialdivision{\a=\p \divide\a by\d
\ifnum\a>\d \unknowntrue\else\unknownfalse\fi
\multiply\a by\d
\ifnum\a=\p \global\primefalse\unknownfalse\fi}
\begin{document}
\primes{1000}
\end{document}
Este ejemplo viene en The TeXbook de Knuth; un día de estos os pongo otro ejemplo, este sí de mi autoría, para hacer división larga de enteros con TeX.
Powered by vBulletin® Version 4.1.6 Copyright © 2013 vBulletin Solutions, Inc. All rights reserved.