Un peligro bastante grande a la hora de empezar es el coger malos vicios que luego son muy dificiles de abandonar. Tal vez lo mejor sea comenzar diseñando las interfaces por separado del código aunque al principio pueda le resultar un poco lioso. De esta forma luego le será mas facil adaptarse a casi cualquier tipo de programación, ya sea bajo un RAD o para linea de comandos.
Igual que para aprender matematicas lo primero es aprender a sumar y restar para programar lo mejor es ponerse con un lenguaje como PASCAL con una sintaxis clara que permite aprender las estructuras básicas (iterativas, condicionales, ...) que son las mismas en todos los lenguajes (bueno casi...).
Comienza por programillas simples de procesamiento de cadenas, un "Ahorcado" por ejemplo, y vete complicando la vida poco a poco la vida con un "Mastermind" o el "Hundir la flota", asi aprenderas el uso de vectores y arrays.
Asi es como comencé yo, luego vinieron otros lenguajes, los RAIDs, la programación de sistemas, etc etc.
Eso si quieres aprender a programas si lo que quieres es liarte ya a desarrollar aplicaciones tira por los RAID.
No es lo mismo programar un algoritmo que implementar luego ese algoritmo en el lenguaje X. Lo importante es practicar mucho y conocer las diferentes formas de programación que hay (modular, orientada a objectos, algoritmos importantes, etc ..), una vez aprendido esto (cualidad innata en muchas personas) pasarlo a un lenguaje de programación determinado ha de ser la parte sencilla.
Por esta razón siempre recomiendo crear sobre el papel lo que se quiere hacer y no empezar a teclear de forma impulsiva, es decir PAS : Programación A Saco :)
--
-- Iglesia, secta, secta, iglesia. Es aburrirse lo mismo pero en sitios diferentes! (Bart Simpson)
1 respuesta por debajo de tu umbral de lectura actual.
Completamente conforme con quien escribió que es de tontos sufrir gratuitamente. Las ayudas están para usarlas. Prefiero pulsar el "." y tener mi lista de miembros que buscarlos en la ayuda por buena que sea.
Ahora bien, es muy importante tener en cuenta que programar en un entorno austero, "que no haga cosas por ti", tiene como consecuencia que todo lo que ves como resultado de tu programa se debe a algo que has escrito tú por una razón, y no aparece por arte de magia. Esto es muy importante porque significa que cada paso positivo que das equivale a un nuevo concepto o forma de proceder que conoces y comprendes. Si se combina esta práctica con un seguimiento estricto de normas correctas de programación, los resultados "espectaculares" tardarán en aparecer pero tus conocimientos serán sólidos y bien asentados.
Los Turbo Pascal o Turbo C que caben en un diskete, o un editor de texto y un gcc, son entornos que quizá generen un pequeño miedo inicial pero, una vez superado, creo que no abruman o desbordan al novel como un Visual Studio .Net, por ejemplo. Este segundo tipo de entornos, cuya utilidad es innegable, pecan del mismo "problema de la metáfora" del que hablaba Neal Stephenson. Esconden lo complicado para hacerle la vida fácil al programador que necesita ahorrar tiempo. Cuando ya tienes tablas esto te viene muy bien. Pero creo que al principio, cada una de las cosas que te esconden es una cosa menos que sabes y comprendes por ti mismo.
Aprenderás lo que significa compilar un programa si consigues escribir tu makefile, aunque sea sencillito. No lo aprenderás si simplemente le atizas a donde pone "Build".
Pues no se estilara ya, pero con el Basic se aprendia un monton. Esos juegos conversacionales que uno se hacia a base de INPUTs e IFs. Esas decenas de GOTOs. Esos cutre-graficos a base de lineas y circulos. Despues de esto uno se pasaba al C y daba gloria. Habria que tener algo asi ahora.....
Pues eso, yo creo que depende del uso que se le vaya a hacer de las horas dedicadas a la programacion. Si uno solo quiere aprender informatica para trabajar y ganar dinerito, pues nada, se ha de aprender lo justo, el lenguaje RAD que se vaya a usar.
Por lo contrario si a alguien lo hace por que le gusta y quiere hacerse un buen profesional yo le recomendaria empezar por el C para que asi tambien aprenda en que consiste un ordenador y que las cosas no se hacen por arte de magia.
Una vez aprendido bien el C, pasar a lenguajes de alto nivel es trivial y en poco tiempo se llegan a manejar y comprender mucho mejor que la gente que lleva lustros programando en estos lenguajes.
Esto es offtopic pero nunca lo he visto comentado en ningun sitio, cuando alguien usa un lenguaje de alto nivel que no tiene punteros, en cuanto lleva un tiempo trabajando empieza a tener necesidades que el lenguaje de alto nivel no le puede dar. Es en esos momentos cuando el programador necesita bucear en layers mas bajos del sistema, y es cuando entran los hacks, ya que en esos layers todo va regido por direcciones de memoria y por lo tanto se necesitan 'punteros'.
De estas necesidades salen articulos como el que escribi en su dia sobre acceder directamente a las variables del visual basic con un hack. [micro-electronica.com]
Por ejemplo, el 99% de los programas importantes hechos en visual basic, tienen un monton de hacks para poder acceder directamente a la API del windoze. Por eso me hace gracia cuando la gente ve el .NET o el JAVA como la solucion a los problemas mundiales, estos sistemas no valen nada mas que para cosas triviales como web y bases de datos por que si haces hacks para acceder al sistema como se hace en los demas lenguajes de alto nivel, el sistema YA NO ES PORTABLE, y por lo tanto estamos como al principio(pongo por ejemplo la libreria que hizo microsoft en su java para acceder al winapi, por lo que si la usabas solo iba en windoze). La unica forma de hacer de todo como dicen algunos con estas maquinas virtuales, seria tener unas librerias para esos sistemas tan grandes como las del propio sistema operativo, o que el mismo sistema operativo estuviese hecho en codigo virtual. (osease .NET o CLI de java o como se llame).
Salu2
--
Eid0
Re:Que dices???
de eid0
(Puntos:1)
Viernes, 04 Julio de 2003, 16:04h
2 respuestas por debajo de tu umbral de lectura actual.
Creo que tu mismo te respondes, si a ti no te importa que el resultado final sea "feo" pues empieza por lenguajes de mas bajo nivel sin entornos gráficos como Pascal, C, C++, Java.
Ahora si quieres ver resultados inmediatos mas que por un lenguaje decantate por un entorno, KDevelop, C++ Builder, Kylix, Delhpi, Visual Basic, .NET.
Desde mi punto de vista hay una cosa que es imprescindible para un programador que es LEER :-), parece una tontería pero conozco a mucha gente que a intentado aprender a programar y lo ha dejado por pereza o simplemente por que eran incapaces de coger un manual y leérselo.
Tampoco nos olvidemos que para programar hay que tener un cierto nivel de conocimientos, aunque parezca que hasta un mono podría programar en Visual Basic no es así o por lo menos no es así a no ser que te dediques a hacer cuatro ventanitas con cuatro botoncitos.
Puedes comprarte un libro de programacion en el lenguaje que te apetezca, o del que te exijan, o lo que sea.. y luego un par de libros sobre sistema operativos tipo unix, otro libro sobre algoritmica, otro libro sobre arquitectura x86, un libro sobre OpenGL, otro sobre la WinAPI, otro sobre perl, etc.. al gusto.
En cuanto a compiladores, tienes Gcc, Dev-C++ (que es gcc), tienes Perl y Python libres (Que son parecidos y depende de tus vicios), tienes Delphi que es un pascal orientado a objetos buenos, tienes Visual Basic que es una mierda, pero es lo que piden las empresas, etc..
Lo primero que se debe decidir no es el lengaje, sino el pradigma
Programacion estructurada
Programacion orientada a objetos
Programacion declarativa
Mi opinion es que se debe empezar por la programacion estructuada, en cuanto al lenguaje, yo es que estoy enamorado de C y no puedo traicionarlo
En orientacion a Objetos yo uso Java, pero la curva de aprendizaje de este es mucho mayor que la de phyton. Pero en mi opinion con el tiempo se agradece el esfuerzo extra (no me tireis piedras que os estoy viendo :-P )
Buscate un compilador en (gcc por ejemplo en Unix o noseque Studio en windows, la suite de M$ es de lo mejor que existe para cualquier plataforma, aunque nos pese).
Existen ejercicios clasicos de programacion, por orden deberias hacer:
Hola mundo mundial(E/S)
Leer una frase y mostrarla por pantalla(E/S)
Leer dos numeros y mostrarlos por pantalla (E/S)
Hacer una pregunta y si la respuesta es si decir correcto y si es no decir Falso(manejo de if)
Leer una frase y un numero n y mostrar la frase n veces por pantalla (FOR)
Leer una frase y mostrarla al reves (FOR)
Crear una estructura (u objeto ) con los datos de una persona y soolicitarlos por tecledo y
rellenar la estructura
Crear una estructura (u objeto ) con los datos de un coche y ...idem
Crear una estructura (u objeto ) con los datos de un piso y ... idem
Mi opinión es que debes empezar con un lenguaje que te permita centrarte en el problema que tienes que resolver, y no en como hacer la interface para entrada o salidad de datos.
Incluso lo mejor para ello es tratar de plantearte problemas a programar con entradas y salidas lo mas sencillas posibles: entrada estandar y/o argumentos por parámetros y la salida estandar o la salida de error.
Habitualmente un programador que ha aprendido de esta manera, pasar a programar en un RAID le cuesta muy poco. En el sentido contrario no tengo tan claro de que esto vaya a ser así.
Otra discusión importante es el paradigma a utilizar, pero esto es una discusión que puede llevar mucho tiempo, de hecho en algunas universidades lleva años debatiéndolo. Pienso que lo interesante para empezar es un paradigma estructurado, ya que combina la exigencia al programador de ser organizado sin llegar al exceso de que para poder empezar a hacer programas tengas que esforzarte en demasiado en estudiar "todas las complejas formas de organizarte". Combínalo con que el lenguaje sea fuertemente tipeado, para evitar perder excesivo tiempo en errores tontos y que te inculque una disciplina en tu organización. Mas adelante tendrás oportunidad de acercarte a otros paradigmas, lo importante ahora es abrir tu celebro a la "capacidad de resolver problemas".
Te recomiendo que eches un vistazo a Cómo convertirse en hacker [sindominio.net] de Eric Steven Raymond, en ese artículo comenta como seguir avanzando.
Tal vez una última cosa: "Lee códigos" de buenos programadores y aprende sus técnicas, siempre habrán cosas que posiblemente a tí nunca se te ocurriría hacerlas de esa manera.
--
--
Todo hombre puede ser, si se lo propone,escultor de su propio cerebro - Cajal
Todo este asunto de los lenguajes y demás es muy opinable, así que sin pretender tener la verdad absoluta daré mi opinión.
Empieza con programación declarativa, y a ser posible con un lenguaje fuertemente tipado y con variables declaradas como Pascal (turbo pascal en concreto). Es un lenguaje realmente fácil de aprender, y sin embargo bastante completo. Después, cuando tengas el Pascal más o menos dominado, recomendaría pasar a C; es más complejo que Pascal (por el asunto de los punteros, E/S, etc) pero sigue siendo un estándar y te va a enseñar muchísimas cosas de programación a nivel medio/bajo.
Además cuando estés aprendiendo Pascal te aconsejo que te agencies un buen libro que te enseñe, no sólo el lenguaje, sino también fundamentos de programación como estructuras de datos, algortimos de ordenación, técnicas como la recursividad, etc. Yo te recomiendo uno rojo muy gordo de McGraw Hill llamado 'Programación en Turbo Pascal X.X' (o algo así, ahora no estoy en casa para mirarlo) que puedes encontrar sin dificultad en cualquier librería técnica. Es caro, pero lo vale, porque como te digo no sólo te enseña Pascal, sino que además te enseña a programar. Además aprender Pascal no se riñe con hacer aplicaciones gráficas en Delphi (pues su lenguaje es una evolución del Turbo Pascal) con lo cual realmente en ese primer paso ya puedes empezar a ser productivo con este RAD.
Yo el C me lo empollé en su día (cuando lo di en la universidad ya lo dominaba), haciendo 'info libc' y haciendo programas de prueba sobre los distintos módulos que esta librería contiene. Vas a aprender salvajadas de esta forma, y lo más importante, vás a ganar una serie de recursos y conocimiento de formas de programas, alternativas para un mismo problema, y estructura de una librería que te va a ser muy útil en cualquier otro lenguaje.
Después pasaría a la programación orientada a objetos con un lenguaje sencillo (aunque muy potente) como Python. Su modelo de objetos es ideal para programar, es sencillo y sin embargo te permite captar lo 'importante' de la programación orientada a objetos sin embrollarte con otros asuntos. Cuando domines el Python y te hayas hecho algunos programillas en el mismo (es fácil), pasaría a Java para profundizar en la programación orientada a objetos y aprender lo que Python no te enseña sobre ella. En este punto podrías atreverte con libros sobre UML y patrones de diseño, que te ayudarán a mejorar mucho tu técnica a la hora de diseñar e implementar programas orientados a objetos.
Una vez que tengas dominada la programación declarativa y la orientada a objetos podrías atreverte con cosas más exóticas (programación lógica, etc) o incluso con algún hueso más duro de roer como C++ (que es un mundo en si mismo). Otro lenguaje excelente con el que aprender programación orientada a objetos y algunas técnicas algo más modernas como programación por contratos es el D (http://www.digitalmars.com/d).
Este lenguaje es, en mi opinión, magnífico, lo que C++ debio de haber sido si hubiera sido diseñado desde un principio para llegar a lo que es ahora en lugar de haber evolucionado con el tiempo. Te permite hacer cualquier cosa que te permita hacer C++, es tan sencillo o más que el Java (tiene recolector de basura, etc) aunque es compilado (y por lo tanto muy eficiente) y permite programación de bajo nivel, y en conjunto me parece un lenguaje magníficamente diseñado. El problema es que las herramientas, y sobre todo la librería, están en fase alfa, y los estándares del lenguaje pueden cambiar y cambian puesto que tampoco están 'fijados'. Por último tampoco vas a encontrar mucha documentación, sólo la especificación del lenguaje, aunque llegado a este punto te va a servir de sobra. Otra buena forma de aprender sería contribuir a la librería estándar de D, que está en continuo desarrollo (y bastante inspirada en la de Python, por cierto).
Saludos y suerte, todo este proceso puede llevarte unos cuantos añitos (dependiendo del tiempo que le dediques) pero si te gusta todo es
No es sólo lo que el nombre de dominio sugiere. Entra y mira.
Respecto a la pregunta de la noticia: no sé por dónde es mejor empezar, pero te quedas a medias si en algún momento no aprendes ensamblador con las manos en la masa. ¿Por qué?, pues porque al final todos los lenguajes de alto nivel se traducen a alguna forma de código de máquina. Ese alto nivel (¿desafortunadamente?) no se ha conseguido con una perfección tal que te permita ignorar alegremente los detalles de esa traducción. En el trabajo se nota muchísimo.
Pues ya hace tiempo que programo y he trabajado principalmente con programacion estructurada (Basic, Cobol, C) y objetos (con C++). A largo de mi aprendizaje (carrera y libros) he aprendido otras 'sutilezas' de la programacion como la programacion modular, librerias, ensamblar/compilar/enlazar, etc.
Aunque no me considero un programador 'experto', si me considero 'avanzado' y mis conocimientos me permiten aprender facilmente un nuevo lenguaje o incluso paradigma.
Mi problema: Las herramientas para el programador y la teoria.
Con eso quiero decir que encuentras pocos libros/documentos o se enseña cada vez menos la base teorica y las herramientas tipicas tales como depuradores, enlazadores, el buen uso de librerias estaticas/dinamicas, cuando la 'abstraccion/herencia/polimorfismo' de los objetos se pega de ostias con la eficiencia cuando estos no son necesarios, estilo de codificacion (¡¡¡POR FAVOR!!!), especificacion correcta de las funciones, portabilidad, POSIX, etc...
Para ser claro (y no es una critica, sino una autocritica global): Los programadores cada vez dominamos mas una sintaxis de un lenguaje y cada vez menos la programacion *conceptual* y pocos saben sacar todo el jugo de las herramientas de que disponemos.
Si alguien puede ayudarme cediendome un buen libro/articulo/manual estara muy agradecido. (a pesar del ladrillo rabieta-pessimista que he metido aqui).
Para acabar y añadir mi voto a la noticia, una frase que ya postee aqui una vez:
"Si no se puede hacer en C, no lo puede hacer un ordenador"
(C *puede* ser complicado, pero cuando estas aprendiendo no te complicas).
La verdad es que el tema de la programación literaria me parece muy interesante. Además, si te pones a escribir un programa usando esta metodología, seguro que te darás cuenta de muchos detalles que de otro modo hubieses pasado por alto, y el código resultate será más claro. Aunque a lo que queria llegar realmente: los ejemplos que aparecen en esta web [literateprogramming.com]; son programas completos desarrollados siguiendo esta técnica, de modo que te pueden ayudar bastante ya que están completamente detallados y explicados. Saludos.
El tema de los lenguajes es peliagudo, porque tiende a convertirse en una cuestión de dogmas...
Para aprendera programar, y para seguir, yo recomendaría empezar con un lenguaje sencillo, pero potente, y después ir a lenguajes más potentes.
El primer lenguaje debería ser Scheme, un dialecto muy especial de LISP (que es el segundo lenguaje aún en uso más antiguo, después de Fortran; y sin duda el más potente de todos (aunque Common LISP es bastante complejo)). Scheme es sencillo, aunque tiene constructos extremadamente potentes y complejos, pero se pueden hacer virquerías en poco tiempo; es ideal para aprender algoritmia y aunque permite programar en casi todos los paradigmas posibles, se presta especialmente a la programación funcional. Después de un tiempo puedes avanzar a las cosas gordas: macros y programación por paso de continuaciones (la verdad, esto es casi magia negra, pero ¡vaya! hay que quitarse el sombrero...).
De hecho es tan sencillo que hay más de 30 implementaciones diferentes, la mayor parte de ellas excelentes y libres (y gratis); para casi todos los sistemas operativos que se te ocurran y de todo tipo (interpretadas, compiladas, empotradas, sobre máquina de Java, etc...)
Si después de ponerte con el Scheme sigues teniendo curiosidad, Common LISP es el Gran Padre, lo vas a disfrutar de verdad.
Perl es un lenguaje complicado, pero es tan potente y expresivo que casi una vez programas en Perl te cuesta programar en otra cosa (excepto, quizás, LISP y familia). Perl te enseñará cómo funciona el C, cómo funciona el AWK, cómo funciona la Shell, cómo funciona el UNIX, cómo funcionan las funciones, cómo funcionan las expresiones regulares (las más potentes que existen); cómo escribir programas completos en pocas líneas usando la mayor colección de módulos y librerías libres que existe (CPAN), cómo funcionan todos los paradigmas de programación (incluso mezclados a la vez, si te atreves) y básicamente cómo funciona el lenguaje y la comunicación en sí misma, y lo que es una Comunidad de software libre y desinteresada.
Si aún sigues teniendo curiosidad y te apetece atacar más puntos de vista, los más potentes lenguajes están ahí fuera, esperándote: OCaml, Haskell y Erlang. Programación funcional orientada a objetos, funcional a lo bestia, y funcional concurrente. El Erlang es posiblemente el lenguaje funcional más usado, pues lo inventó Ericsson para programar sus centralitas y equipos. Es potentísimo y tiene el modelo de concurrencia más potente que existe hoy en día (creo). Haskell es programación funcional a lo bestia, como con SML. Es realmente potente, y si te gusta cómo se piensa en Haskell, tendrás potencia de sobra para enfrentarte a cualquier cosa. OCaml, la extensión al Caml con OO es lo que debería haber sido el C++ o el Java. Potencia expresiva y una capacidad de abstración alucinante.
Programar en estos lenguajes tiene algo peculiar: es realmente divertido. No sólo potente, divertido.
¿Que quieres más? Yo seguiría aprendiendo Python, Ruby y Tcl/Tk. Python es casi tan potente como Perl, con una filosofía muy diferente, a mucha gente le gusta y tiene mucha ingeniería de software detrás. Ruby es nuevo, pero muy elegante, OO en todo, pero muy expresivo y limpio... Quizás es lo que Python habría sido si hubiese empezado OO desde el principio, sin embargo Python tiene bastante de funcional... Tcl/Tk es sencillo, muy sencillo, extremadamente potente y expresivo, genial como lenguaje de pegamento y un clásico: se puede aprender realmente mucho del Tcl y Tk es el GUI de facto en todos los lenguajes Unix (suplantó al Motif, que era C, y ahora se pega con Qt y Gtk+, que le están comiendo terreno...)
Si quieres profundizar todavía más en Unix, estudia C, vale para todo, con un precio, claro, pero vale para todo. El C++ es un lenguaje tremendamente potente, pero tremendamente complicado. Si sabes algo, intenta ponerte al día con el estándar ANSI/ISO y la programación genérica; si no lo conoces, quizás no te valga la pena ya... Java est
Pienso que para aprender a programar, no hay nada mejor que el pseudocódigo, aprendiendo algoritmos básicos de programación, tipos de bucles, variables, etc.
Si ya se conoce algo de programación en pseudocódigo, entonces es hora de aprender un lenguaje de programación determinado.
Porque no nos engañemos, no es lo mismo "saber programar", que "conocer un lenguaje de programación".
Sé programar en java, c, c++ y c. Y sin duda recomiendo empezar a programar en C. Así como en la escuela se empieza a sumar, restar multiplicar y dividir. Para programar lo mejor es conocer de cerca las operaciones básicas que además tienen una rápida traducción a ensamblador. Despúes de eso, y un poco de teoría sobre algoritmos de búsqueda, ordenación, etc. Leer código de otras personas, como por ejemplo el kernel o buenos ejemplos de aplicaciones, hay muchas para escoger liberadas bajo licencia GPL. Valoro mucho el código elegante, legible y coherente, y detesto el estilo todo vale mientras funcione.
Sinceramente, si quieres programar sistemas y quieres comenzar por los principios usa c , quizas tengas que bajar a ensamblador (haya tu), y luego yo iria subiendo (basic, pascal, python, etc...)
Todos los sistemas operativos normales lo usan, y cuando no lo pueden utilizar es porque usan ensamblador
Yo intentaria instalar GW-Basic o algún interprete y/o compilador q por no tener no tenian ni librerias ni na. :-) ¡Q tiempos! Ese COBOL, ese PASCAL. Y programar a pelo, con el Edlin (o el ed, de linux) :D
--
Sgeun un etsduio de una uivenrsdiad ignlsea, no ipmotra el odren en el que las ltears etsan ersciats
Si empiezas por haskell, quizas termines pegandote un tiro... Haskell es la opcion idonea para todos los matematicos y lo digo muy en serio. Haskell (y pasteriormente MIRANDA) esta basado en un estilo ecuacional, con reglas recursivas y patrones en la parte izquierda de la ecuacion. Ademas solo hay que fijarse en el nombre Haskell (Curry, el matematico que desarollo los fundamentos de la logica combinatoria y el ALPHA-calculo ... E n mi caso si hubiese empezado por Haskell ahora seria un gran fontanero
Ambas formas tienen su peligro
(Puntos:2, Interesante)Empieza por lo básico
(Puntos:1)Comienza por programillas simples de procesamiento de cadenas, un "Ahorcado" por ejemplo, y vete complicando la vida poco a poco la vida con un "Mastermind" o el "Hundir la flota", asi aprenderas el uso de vectores y arrays.
Asi es como comencé yo, luego vinieron otros lenguajes, los RAIDs, la programación de sistemas, etc etc.
Eso si quieres aprender a programas si lo que quieres es liarte ya a desarrollar aplicaciones tira por los RAID.
Hay que es tablecer una diferencia
(Puntos:3, Interesante)( http://barrapunto.com/~mith/bitacora | Última bitácora: Viernes, 01 Octubre de 2004, 15:52h )
Por esta razón siempre recomiendo crear sobre el papel lo que se quiere hacer y no empezar a teclear de forma impulsiva, es decir PAS : Programación A Saco :)
--
Iglesia, secta, secta, iglesia. Es aburrirse lo mismo pero en sitios diferentes! (Bart Simpson)
Mi consejo
(Puntos:1)Lenguajes como C, sin cuestionar su indudable utilidad, son poco productivos, tienes que escribir mucho código para ver resultados "vistosos".
Se estricto y austero
(Puntos:3, Interesante)( http://barrapunto.com/ | Última bitácora: Jueves, 24 Julio de 2003, 20:34h )
Completamente conforme con quien escribió que es de tontos sufrir gratuitamente. Las ayudas están para usarlas. Prefiero pulsar el "." y tener mi lista de miembros que buscarlos en la ayuda por buena que sea.
Ahora bien, es muy importante tener en cuenta que programar en un entorno austero, "que no haga cosas por ti", tiene como consecuencia que todo lo que ves como resultado de tu programa se debe a algo que has escrito tú por una razón, y no aparece por arte de magia. Esto es muy importante porque significa que cada paso positivo que das equivale a un nuevo concepto o forma de proceder que conoces y comprendes. Si se combina esta práctica con un seguimiento estricto de normas correctas de programación, los resultados "espectaculares" tardarán en aparecer pero tus conocimientos serán sólidos y bien asentados.
Los Turbo Pascal o Turbo C que caben en un diskete, o un editor de texto y un gcc, son entornos que quizá generen un pequeño miedo inicial pero, una vez superado, creo que no abruman o desbordan al novel como un Visual Studio .Net, por ejemplo. Este segundo tipo de entornos, cuya utilidad es innegable, pecan del mismo "problema de la metáfora" del que hablaba Neal Stephenson. Esconden lo complicado para hacerle la vida fácil al programador que necesita ahorrar tiempo. Cuando ya tienes tablas esto te viene muy bien. Pero creo que al principio, cada una de las cosas que te esconden es una cosa menos que sabes y comprendes por ti mismo.
Aprenderás lo que significa compilar un programa si consigues escribir tu makefile, aunque sea sencillito. No lo aprenderás si simplemente le atizas a donde pone "Build".
Sapere aude!
Añoro mi Basic
(Puntos:1)Depende
(Puntos:2, Interesante)( http://www.micro-electronica.com | Última bitácora: Domingo, 09 Enero de 2005, 23:44h )
Si uno solo quiere aprender informatica para trabajar y ganar dinerito, pues nada, se ha de aprender lo justo, el lenguaje RAD que se vaya a usar.
Por lo contrario si a alguien lo hace por que le gusta y quiere hacerse un buen profesional yo le recomendaria empezar por el C para que asi tambien aprenda en que consiste un ordenador y que las cosas no se hacen por arte de magia.
Una vez aprendido bien el C, pasar a lenguajes de alto nivel es trivial y en poco tiempo se llegan a manejar y comprender mucho mejor que la gente que lleva lustros programando en estos lenguajes.
Esto es offtopic pero nunca lo he visto comentado en ningun sitio, cuando alguien usa un lenguaje de alto nivel que no tiene punteros, en cuanto lleva un tiempo trabajando empieza a tener necesidades que el lenguaje de alto nivel no le puede dar.
Es en esos momentos cuando el programador necesita bucear en layers mas bajos del sistema, y es cuando entran los hacks, ya que en esos layers todo va regido por direcciones de memoria y por lo tanto se necesitan 'punteros'.
De estas necesidades salen articulos como el que escribi en su dia sobre acceder directamente a las variables del visual basic con un hack. [micro-electronica.com]
Por ejemplo, el 99% de los programas importantes hechos en visual basic, tienen un monton de hacks para poder acceder directamente a la API del windoze.
Por eso me hace gracia cuando la gente ve el .NET o el JAVA como la solucion a los problemas mundiales, estos sistemas no valen nada mas que para cosas triviales como web y bases de datos por que si haces hacks para acceder al sistema como se hace en los demas lenguajes de alto nivel, el sistema YA NO ES PORTABLE, y por lo tanto estamos como al principio(pongo por ejemplo la libreria que hizo microsoft en su java para acceder al winapi, por lo que si la usabas solo iba en windoze).
La unica forma de hacer de todo como dicen algunos con estas maquinas virtuales, seria tener unas librerias para esos sistemas tan grandes como las del propio sistema operativo, o que el mismo sistema operativo estuviese hecho en codigo virtual. (osease .NET o CLI de java o como se llame).
Salu2
Eid0
La respuesta solo la tienes tu
(Puntos:2, Interesante)( Última bitácora: Martes, 06 Julio de 2004, 20:01h )
Ahora si quieres ver resultados inmediatos mas que por un lenguaje decantate por un entorno, KDevelop, C++ Builder, Kylix, Delhpi, Visual Basic, .NET.
Desde mi punto de vista hay una cosa que es imprescindible para un programador que es LEER :-), parece una tontería pero conozco a mucha gente que a intentado aprender a programar y lo ha dejado por pereza o simplemente por que eran incapaces de coger un manual y leérselo.
Tampoco nos olvidemos que para programar hay que tener un cierto nivel de conocimientos, aunque parezca que hasta un mono podría programar en Visual Basic no es así o por lo menos no es así a no ser que te dediques a hacer cuatro ventanitas con cuatro botoncitos.
Comprate libros.
(Puntos:2)( Última bitácora: Viernes, 03 Febrero de 2012, 15:18h )
En cuanto a compiladores, tienes Gcc, Dev-C++ (que es gcc), tienes Perl y Python libres (Que son parecidos y depende de tus vicios), tienes Delphi que es un pascal orientado a objetos buenos, tienes Visual Basic que es una mierda, pero es lo que piden las empresas, etc..
Suerte con eso.
Por donde empiezo
(Puntos:4, Informativo)Mi opinion es que se debe empezar por la programacion estructuada, en cuanto al lenguaje, yo es que estoy enamorado de C y no puedo traicionarlo
En orientacion a Objetos yo uso Java, pero la curva de aprendizaje de este es mucho mayor que la de phyton. Pero en mi opinion con el tiempo se agradece el esfuerzo extra (no me tireis piedras que os estoy viendo :-P )
Buscate un compilador en (gcc por ejemplo en Unix o noseque Studio en windows, la suite de M$ es de lo mejor que existe para cualquier plataforma, aunque nos pese).
Existen ejercicios clasicos de programacion, por orden deberias hacer:
Apratir de hay tiene que
Centrate en "aprender a resolver problemas"
(Puntos:2, Interesante)( http://barrapunto.com/ )
Incluso lo mejor para ello es tratar de plantearte problemas a programar con entradas y salidas lo mas sencillas posibles: entrada estandar y/o argumentos por parámetros y la salida estandar o la salida de error.
Habitualmente un programador que ha aprendido de esta manera, pasar a programar en un RAID le cuesta muy poco. En el sentido contrario no tengo tan claro de que esto vaya a ser así.
Otra discusión importante es el paradigma a utilizar, pero esto es una discusión que puede llevar mucho tiempo, de hecho en algunas universidades lleva años debatiéndolo. Pienso que lo interesante para empezar es un paradigma estructurado, ya que combina la exigencia al programador de ser organizado sin llegar al exceso de que para poder empezar a hacer programas tengas que esforzarte en demasiado en estudiar "todas las complejas formas de organizarte". Combínalo con que el lenguaje sea fuertemente tipeado, para evitar perder excesivo tiempo en errores tontos y que te inculque una disciplina en tu organización. Mas adelante tendrás oportunidad de acercarte a otros paradigmas, lo importante ahora es abrir tu celebro a la "capacidad de resolver problemas".
Te recomiendo que eches un vistazo a Cómo convertirse en hacker [sindominio.net] de Eric Steven Raymond, en ese artículo comenta como seguir avanzando.
Tal vez una última cosa: "Lee códigos" de buenos programadores y aprende sus técnicas, siempre habrán cosas que posiblemente a tí nunca se te ocurriría hacerlas de esa manera.
--
Todo hombre puede ser, si se lo propone,escultor de su propio cerebro - Cajal
Mi opinión
(Puntos:2, Interesante)( http://barrapunto.com/ )
Empieza con programación declarativa, y a ser posible con un lenguaje fuertemente tipado y con variables declaradas como Pascal (turbo pascal en concreto). Es un lenguaje realmente fácil de aprender, y sin embargo bastante completo. Después, cuando tengas el Pascal más o menos dominado, recomendaría pasar a C; es más complejo que Pascal (por el asunto de los punteros, E/S, etc) pero sigue siendo un estándar y te va a enseñar muchísimas cosas de programación a nivel medio/bajo.
Además cuando estés aprendiendo Pascal te aconsejo que te agencies un buen libro que te enseñe, no sólo el lenguaje, sino también fundamentos de programación como estructuras de datos, algortimos de ordenación, técnicas como la recursividad, etc. Yo te recomiendo uno rojo muy gordo de McGraw Hill llamado 'Programación en Turbo Pascal X.X' (o algo así, ahora no estoy en casa para mirarlo) que puedes encontrar sin dificultad en cualquier librería técnica. Es caro, pero lo vale, porque como te digo no sólo te enseña Pascal, sino que además te enseña a programar. Además aprender Pascal no se riñe con hacer aplicaciones gráficas en Delphi (pues su lenguaje es una evolución del Turbo Pascal) con lo cual realmente en ese primer paso ya puedes empezar a ser productivo con este RAD.
Yo el C me lo empollé en su día (cuando lo di en la universidad ya lo dominaba), haciendo 'info libc' y haciendo programas de prueba sobre los distintos módulos que esta librería contiene. Vas a aprender salvajadas de esta forma, y lo más importante, vás a ganar una serie de recursos y conocimiento de formas de programas, alternativas para un mismo problema, y estructura de una librería que te va a ser muy útil en cualquier otro lenguaje.
Después pasaría a la programación orientada a objetos con un lenguaje sencillo (aunque muy potente) como Python. Su modelo de objetos es ideal para programar, es sencillo y sin embargo te permite captar lo 'importante' de la programación orientada a objetos sin embrollarte con otros asuntos. Cuando domines el Python y te hayas hecho algunos programillas en el mismo (es fácil), pasaría a Java para profundizar en la programación orientada a objetos y aprender lo que Python no te enseña sobre ella. En este punto podrías atreverte con libros sobre UML y patrones de diseño, que te ayudarán a mejorar mucho tu técnica a la hora de diseñar e implementar programas orientados a objetos.
Una vez que tengas dominada la programación declarativa y la orientada a objetos podrías atreverte con cosas más exóticas (programación lógica, etc) o incluso con algún hueso más duro de roer como C++ (que es un mundo en si mismo). Otro lenguaje excelente con el que aprender programación orientada a objetos y algunas técnicas algo más modernas como programación por contratos es el D (http://www.digitalmars.com/d).
Este lenguaje es, en mi opinión, magnífico, lo que C++ debio de haber sido si hubiera sido diseñado desde un principio para llegar a lo que es ahora en lugar de haber evolucionado con el tiempo. Te permite hacer cualquier cosa que te permita hacer C++, es tan sencillo o más que el Java (tiene recolector de basura, etc) aunque es compilado (y por lo tanto muy eficiente) y permite programación de bajo nivel, y en conjunto me parece un lenguaje magníficamente diseñado. El problema es que las herramientas, y sobre todo la librería, están en fase alfa, y los estándares del lenguaje pueden cambiar y cambian puesto que tampoco están 'fijados'. Por último tampoco vas a encontrar mucha documentación, sólo la especificación del lenguaje, aunque llegado a este punto te va a servir de sobra. Otra buena forma de aprender sería contribuir a la librería estándar de D, que está en continuo desarrollo (y bastante inspirada en la de Python, por cierto).
Saludos y suerte, todo este proceso puede llevarte unos cuantos añitos (dependiendo del tiempo que le dediques) pero si te gusta todo es
Divertido
(Puntos:2, Interesante)( http://barrapunto.com/ )
Respecto a la pregunta de la noticia: no sé por dónde es mejor empezar, pero te quedas a medias si en algún momento no aprendes ensamblador con las manos en la masa. ¿Por qué?, pues porque al final todos los lenguajes de alto nivel se traducen a alguna forma de código de máquina. Ese alto nivel (¿desafortunadamente?) no se ha conseguido con una perfección tal que te permita ignorar alegremente los detalles de esa traducción. En el trabajo se nota muchísimo.
Aprender a programar y a usar herramientas
(Puntos:1)Aunque no me considero un programador 'experto', si me considero 'avanzado' y mis conocimientos me permiten aprender facilmente un nuevo lenguaje o incluso paradigma.
Mi problema: Las herramientas para el programador y la teoria.
Con eso quiero decir que encuentras pocos libros/documentos o se enseña cada vez menos la base teorica y las herramientas tipicas tales como depuradores, enlazadores, el buen uso de librerias estaticas/dinamicas, cuando la 'abstraccion/herencia/polimorfismo' de los objetos se pega de ostias con la eficiencia cuando estos no son necesarios, estilo de codificacion (¡¡¡POR FAVOR!!!), especificacion correcta de las funciones, portabilidad, POSIX, etc...
Para ser claro (y no es una critica, sino una autocritica global): Los programadores cada vez dominamos mas una sintaxis de un lenguaje y cada vez menos la programacion *conceptual* y pocos saben sacar todo el jugo de las herramientas de que disponemos.
Si alguien puede ayudarme cediendome un buen libro/articulo/manual estara muy agradecido. (a pesar del ladrillo rabieta-pessimista que he metido aqui).
Para acabar y añadir mi voto a la noticia, una frase que ya postee aqui una vez:
"Si no se puede hacer en C, no lo puede hacer un ordenador"
(C *puede* ser complicado, pero cuando estas aprendiendo no te complicas).
Programación literaria
(Puntos:2)( http://julipedia.blogspot.com/ )
The Julipedia [blogspot.com]
lenguajes
(Puntos:1)( http://barrapunto.com )
Para aprendera programar, y para seguir, yo recomendaría empezar con un lenguaje sencillo, pero potente, y después ir a lenguajes más potentes.
El primer lenguaje debería ser Scheme, un dialecto muy especial de LISP (que es el segundo lenguaje aún en uso más antiguo, después de Fortran; y sin duda el más potente de todos (aunque Common LISP es bastante complejo)). Scheme es sencillo, aunque tiene constructos extremadamente potentes y complejos, pero se pueden hacer virquerías en poco tiempo; es ideal para aprender algoritmia y aunque permite programar en casi todos los paradigmas posibles, se presta especialmente a la programación funcional. Después de un tiempo puedes avanzar a las cosas gordas: macros y programación por paso de continuaciones (la verdad, esto es casi magia negra, pero ¡vaya! hay que quitarse el sombrero...).
De hecho es tan sencillo que hay más de 30 implementaciones diferentes, la mayor parte de ellas excelentes y libres (y gratis); para casi todos los sistemas operativos que se te ocurran y de todo tipo (interpretadas, compiladas, empotradas, sobre máquina de Java, etc...)
Si después de ponerte con el Scheme sigues teniendo curiosidad, Common LISP es el Gran Padre, lo vas a disfrutar de verdad.
Perl es un lenguaje complicado, pero es tan potente y expresivo que casi una vez programas en Perl te cuesta programar en otra cosa (excepto, quizás, LISP y familia). Perl te enseñará cómo funciona el C, cómo funciona el AWK, cómo funciona la Shell, cómo funciona el UNIX, cómo funcionan las funciones, cómo funcionan las expresiones regulares (las más potentes que existen); cómo escribir programas completos en pocas líneas usando la mayor colección de módulos y librerías libres que existe (CPAN), cómo funcionan todos los paradigmas de programación (incluso mezclados a la vez, si te atreves) y básicamente cómo funciona el lenguaje y la comunicación en sí misma, y lo que es una Comunidad de software libre y desinteresada.
Si aún sigues teniendo curiosidad y te apetece atacar más puntos de vista, los más potentes lenguajes están ahí fuera, esperándote: OCaml, Haskell y Erlang. Programación funcional orientada a objetos, funcional a lo bestia, y funcional concurrente. El Erlang es posiblemente el lenguaje funcional más usado, pues lo inventó Ericsson para programar sus centralitas y equipos. Es potentísimo y tiene el modelo de concurrencia más potente que existe hoy en día (creo). Haskell es programación funcional a lo bestia, como con SML. Es realmente potente, y si te gusta cómo se piensa en Haskell, tendrás potencia de sobra para enfrentarte a cualquier cosa. OCaml, la extensión al Caml con OO es lo que debería haber sido el C++ o el Java. Potencia expresiva y una capacidad de abstración alucinante.
Programar en estos lenguajes tiene algo peculiar: es realmente divertido. No sólo potente, divertido.
¿Que quieres más? Yo seguiría aprendiendo Python, Ruby y Tcl/Tk. Python es casi tan potente como Perl, con una filosofía muy diferente, a mucha gente le gusta y tiene mucha ingeniería de software detrás. Ruby es nuevo, pero muy elegante, OO en todo, pero muy expresivo y limpio... Quizás es lo que Python habría sido si hubiese empezado OO desde el principio, sin embargo Python tiene bastante de funcional... Tcl/Tk es sencillo, muy sencillo, extremadamente potente y expresivo, genial como lenguaje de pegamento y un clásico: se puede aprender realmente mucho del Tcl y Tk es el GUI de facto en todos los lenguajes Unix (suplantó al Motif, que era C, y ahora se pega con Qt y Gtk+, que le están comiendo terreno...)
Si quieres profundizar todavía más en Unix, estudia C, vale para todo, con un precio, claro, pero vale para todo. El C++ es un lenguaje tremendamente potente, pero tremendamente complicado. Si sabes algo, intenta ponerte al día con el estándar ANSI/ISO y la programación genérica; si no lo conoces, quizás no te valga la pena ya... Java est
Para aprender lo mejor es empezar con pseudocódigo
(Puntos:1)( http://javierperez.eu/ | Última bitácora: Jueves, 14 Junio de 2007, 14:40h )
Si ya se conoce algo de programación en pseudocódigo, entonces es hora de aprender un lenguaje de programación determinado.
Porque no nos engañemos, no es lo mismo "saber programar", que "conocer un lenguaje de programación".
Salud.
--- Javier Pérez :: blog [javierperez.eu]
C sin duda
(Puntos:2)( http://www.lartc.org | Última bitácora: Viernes, 06 Agosto de 2004, 13:07h )
Re:Yo quiero empezar, ¿q me recomendáis?
(Puntos:1)( http://www.easy3d.org/ | Última bitácora: Lunes, 31 Enero de 2005, 07:51h )
Todos los sistemas operativos normales lo usan, y cuando no lo pueden utilizar es porque usan ensamblador
Sabiendo java el c (o el c++) no te sorprenderan.
SirHavoc (CRC)
I will live forever or die trying
Re:Yo quiero empezar, ¿q me recomendáis?
(Puntos:1)( http://usuarios.lycos.es/p4p4p1tuf0 | Última bitácora: Martes, 03 Febrero de 2004, 17:58h )
Sgeun un etsduio de una uivenrsdiad ignlsea, no ipmotra el odren en el que las ltears etsan ersciats
Python
(Puntos:2, Informativo)( http://milugar.net/ | Última bitácora: Domingo, 04 Febrero de 2007, 11:43h )
¿Qué es GHiPBaC [milugar.net]?
Re:y qué tal Haskell?
(Puntos:1)