Programación: ¿Qué hago ahora?

elkaoD

He llegado a un punto de inflexión y me gustaría algo de orientación.

Llevo programando bastante tiempo, sobre todo en C, C++ y lenguajes parecidos (Java, PHP...) Mi experiencia es sobre todo en programación de videojuegos, OpenGL, algo de GLSL y CUDA, etc. Todo C-like y como mucho lenguajes de script. También he tocado bastante ensamblador x86 (en su día le daba a la ingeniería inversa.)

En la uni hemos tocado mucho (demasiado) Java y he acabado hartito. Al parecer ahora vamos a ver Lisp. Programación funcional "pura" no he tocado a fondo excepto especificaciones de TADs. ¿Por dónde empiezo? Mi problema es sobre todo que no le veo ahora mismo una utilidad práctica directa y programar quicksorts y factoriales en 8 lenguajes me aburre un poco. ¿Cómo le puedo sacar jugo?

Por otro lado: he probado Python y no me acaba de convencer. Nada que ofrecer que no me de cualquier otro lenguaje de script. Además me resultó un infierno de librerías en Windows7 para usar con OpenGL y bastante pesado (digan lo que digan.)

Últimamente estoy tocando JavaScript por Node.js y me ha molado. Me gusta trabajar con closures y prototipos y Node está pensado bastante bien, pero sigue siendo más o menos lo mismo y me gustaría dar una vuelta de tuerca. Scala no lo conocía y por el hilo de "empezando a programar" me he interesado y lo poco que he visto está cojonudo. ¿Algún libro recomendado? Tengo acceso a bibliotecas por la VPN de la universiad así que incluso bibliografía que no sea PDF me interesa.

Lo que me gustaría sobre todo es ampliar mis horizontes. ¿Alguna recomendación?

MTX_Anubis

¿No te atrae la programación para moviles? Quizá no sea solo el lenguaje sino sobre lo que programas.

De Scala yo compré este aunque me costó 26libras ahí mismo :/

Llevo leidos solo un par de temas así que no puedo decir mucho, solo que si es para alguien que no sabe programar (que no es tu caso) probablemente se vuelva loco. Los comentarios en amazon son todos positivos así que me fío de ellos.

Otro que tenía ganas era Clojure pero preferí Scala, entre otras cosas porque eisenfaust lo recomendó hace tiempo y le vi hablando de él, consiguió que me picara el gusanillo y después de leer un poco y hablar con un compañero decidí ir a por él, puede que sea el lenguaje del futuro. No es raro verlo ya como requisito en las vacantes de grandes empresas, twitter migró a scala, heroku y Tumblr trabajan con el también.

Otro que habría que tener en cuenta es Dart, de google, está en fase alpha aún pero oye.. xD

2 respuestas
eisenfaust

El problema de Lisp es que es un puto caos. Hay trillones de implantaciones y las librerías están desperdigadas.

Lo más sencillo es bajarte DrRacket en un Windows y puerta. Otras opciones serían crearte un entorno de desarrollo con Emacs, Slime y SBCL, que es una implantación de Common Lisp de alto rendimiento capaz de rendir al nivel de C++. Ahora mismo con Quicklisp http://www.quicklisp.org/ es bastante sencillo. La otra opción es utilizar Chicken Scheme, una implantación de R5RS fácil de instalar, es portable (compila a C) y tiene buenos bindings además de un sistema de instalación de módulos muy sencillo parecido al CPAN, ruby gems, etc.

Luego tienes Clojure que está pegando fuerte pero aún le falta mucho por recorrer. La comunidad es muy vocal pero realmente quitando el tema de la STM y estructuras de datos inmutables no tiene absolutamente nada que no tenga CL. Aunque se agradece la sintaxis para arrays y hashes y soporte nativo para sets.

Scala es un buen cajón de sastre y ahora mismo si eres bueno cobras lo que te salga del nabo tanto en Europa como en USA. Pero no lo recomiendo si no tienes buenos fundamentos de OOP, programación funcional y experiencia con algún lenguaje de la familia ML. No es que no vayas a ser productivo, al contrario, pero es un lenguaje con una complejidad a la altura de CL, Perl y C++ y o le echas muchas horas o estás con peña que valga la pena o no progresarás tanto como con otros lenguajes. Es cojonudo pero digamos que la comunidad tiene cierto trastorno de identidad xD Ten en cuenta que por ahí hay peña que sólo ha tocado Java en toda su vida, gente que viene de Haskell, etc. Y cada cual escribe Scala a su manera.

Si no estás trabajando te recomendaría Scheme. Aprenderías el tema de macros higiénicos, corutinas, generadores, continuaciones... Cosas que suenan a Chino pero que luego echarás de menos. Además verás lenguajes como Javascript y Lua de otra manera.

2 respuestas
TaiCHoKe

Yo he tocado Lisp y es un coñazo.

Si te aburres y nunca lo has hecho, montate una base de datos y asi tocas un poco de SQL que siempre viene bien.

2 respuestas
elkaoD

#2 por desgracia mi móvil apesta y no planeo pillarme ningún smartphone de momento. Es una pena porque está pegando fuerte. Siempre me quedará HTML5+WebGL :P

El libro me lo estoy leyendo y por lo que veo Scala es lo que siempre pensé debía ser Java. Buena recomendación.

#3 tanto se diferencian? Quiero decir, si sé Lisp, ¿cuánto me puede costar pasar a Clojure? En efecto lo que me tira para atrás es que veo muchas implementaciones pero no me venden rápido sus diferencias...

Por eso preguntaba. Antes de meterme con Scala pretendía entrar a funcional a saco. Orientada a objetos la tengo más que asentada (por el tema de los videojuegos) y funcional a medias (por algoritmia más que nada.)

Me apunto el consejo de Scheme (y un par de URLs que diste en el otro hilo.)

#4 de BD me he jartado en la uni también... Me tengo el manual de Postgre leído no sé las veces xD Hemos montado hasta clústers de alta dispoibilidad. De las que asignaturas que más he aprendido.

A ver qué tal Lisp, aunque sea sólo por el cambio.

3 respuestas
C

http://iolanguage.com/

1 respuesta
eisenfaust

#5 No por ser proficiente en lisp vas a serlo en clojure. Parecen lo mismo, pero también se parecen hasta cierto punto C++ y Java.

Si andas muy perdido y no te de decides, hay un libro excelente llamado Practical Common Lisp. Es gratuito en format HTML y cubre el lenguaje de forma menos académica.

1 respuesta
TaiCHoKe

#5 Siempre se le puede dar mas vueltas de tuerca con BBDD. Mirate http://cassandra.apache.org/ que es una base de datos orientada a cloud computing

1 respuesta
elkaoD

#6 de Io no conozco más que el nombre. ¿Me puedes hacer un resumencillo? Echando un vistazo a la página principal me ha venido a la cabeza como lenguaje de script para videojuegos. Otro para la lista :P

#7 entiendo. Les echaré un vistacillo más a fondo porque cuanto más miro por encima más me confundo xD Chicken Scheme me ha llamado también la atención y creo que me lo recomendaste para embeber en videojuegos y tal. Le he echado un vistazo también y parece un candidato a tener en cuenta, aunque el tema del foreign-code da hasta miedo sólo de ver.

Por cierto, cuanto más miro Erlang más está gustando también, pero me pasa lo que con todos los lenguajes funcionales: me da la impresión de que me limitan al ser puramente funcionales.

Por eso me está llamando Scala, logro ver las ventajas del funcional sin sus limitaciones. Además veo que se ha quedado con lo mejor de casi todos los lenguajes que he ido tocando, aunque también me da la impresión de que con tanta libertad o tienes buena cabeza o acabas escribiendo código de mierda. Multiparadigma, pattern matching, contratos, actores, tail-call optimization, overloading de operadores bien hecho (joder, cuánto lo he echado de menos en Java... Cuánto he llegado a odiar el vector1.add(vector2) xD), código limpio, nada de cutrerías como los tipos nativos de Java y otras muchos pequeños detalles que me están encantando como el filtrado en los fors y ese tipo de cosas.

#8 pues tenía pensado trabajar con alguna BD NoSQL como Couch o Mongo. Otra más para la lista. Thanks!


Maldita informática. Soy de los que piensan que cuantas más opciones tengas en tu "caja de herramientas" mejor, pero veo TANTAS alternativas que me da miedo xD

Isakito9

#4 Yo tuve que programar en lisp, fue una tonteria, pero le cogi un asco...

LOc0

Maldita informática. Soy de los que piensan que cuantas más opciones tengas en tu "caja de herramientas" mejor, pero veo TANTAS alternativas que me da miedo xD

Cómo se te nota la juventud elkaoD (y no es despectivo ni muchísimo menos), pero dentro de unos añitos cuando tengas que tirar de la caja esa de herramientas empezarás a ver la luz...

Salu2 ;)

1 respuesta
elkaoD

#11 no, joder, si la luz la veo. Por suerte aunque no haya tocado mucho siempre me he interesado por otros paradigmas y formas de trabajar. Muchas las he medio-usado. Lo que pasa es que hay tantos túneles que no sé ni por donde tirar :) Al fin y al cabo acabas especializándote ante tanta alternativa, pero me da pena no saber de TODO (que por otro lado es imposible.)

Mi "problema" es que siempre he estado tan atado a videojuegos (y el tema es TAAAAAN extenso por sí mismo) que C+librerías siempre han sido mis amigos y por mucho que sepa un poco de todo no tengo EXPERIENCIA REAL que al fin y al cabo es lo que importa.

C

Sobre el iolanguage no te puedo aportar nada. Me lo recomendó un colega por si tenía ganas de curiosear.

Respecto a esta frase tuya: Al fin y al cabo acabas especializándote ante tanta alternativa, pero me da pena no saber de TODO (que por otro lado es imposible.)

Aprovecha los tiempos mozos, porque en cuanto empieces a trabajar y te encasilles en un área especializada vas a sentir frustración de no tener tiempo para aprender, aprender y aprender como haces ahora.

Por otro lado, lo suyo en este sector es eso justamente: la especialización. Y cuanto más experto seas en algo, más valorado estarás en el mercado (aun así el mercado no es perfecto, ya te irás dando cuenta...). Pero aun así aprovecha para aprender otros paradigmas y herramientas puesto que te abren la mente y algún día, cuando estés en un equipo de desarrollo, verás que el resto es notablemente inferior a tí con la excepción de algún genio suelto que los hay (y esto no lo digo por mí, que conste. Pero es algo que te va a suceder sí o sí y en algún momento de nuestra carrera profesional algunos hemos sentido. Sólo en algún momento xD).

1 respuesta
BLZKZ

#13 eso si quieres terminar programando toda tu vida. Yo espero no llegar a ser experto-gurú de ningún lenguaje a no ser que la remuneración sea estratosférica xD

1 respuesta
B

Aprendiz de mucho maestro en nada. No cometas el error de conocer todos los lenguajes, ESPECIALIZATE en alguno en concreto.

1 respuesta
PiradoIV

#15 Por ahí varios me han comentado lo mismo, "En el que sea, pero tienes que ser el mejor"

B

#1 Voy a extenderme un poco más. Ve a cualquier portal de ofertas de empleo, apunta los lenguajes con más demanda y especialízate en ese. El que te diga que conoce un lenguaje megachulo que es el no va más del pepino MANDALO A LA MIERDA, al final tendrás la base de un montón de lenguajes que no te valdrán de nada. Si,yo también hacia demos en ensamblador pero sé que no lo tocaré más el resto de mi vida y lo mismo pasa con cobol,pascal,modula 2,ada,etc.. Eres programador y tu principal interés es cobrar un sueldo que te permita vivir perfectamente no? , pues esas ofertas de empleo que piden mil lenguajes son un campo de explotación para becarios por 800 euros al mes que solo saben medio parchear bugs en entornos desastrósamente desarrollados.

BLZKZ

Pero es que en serio tenéis pensado estar picando código toda vuestra vida? No tenéis expectativas de nada más? No os entiendo, os quejáis de la mierda-curros que hay en España, pero solo pensáis en ser expertos en un lenguaje, buena suerte.

Yo antes que eso haria un master tipo "ingenieria del software" e intentaría encaminar mi carrera a dirección, jefe de proyecto o parecido :/ y de ahí a lo que surgiera. Está claro que no vas a entrar de jefe, pero quédate 10-15-20 años programando, especializate en java/python/[inserte_aqui_lenguaje] y te tirarás toda tu vida ahí.

Desde luego no es para mi la mejor idea :/

1 1 respuesta
B

#18 si tuviera una máquina en el tiempo estudiaba para fontanero. Mi primer consejo es siempre no dedicarse a la informática, pero creo que llego tarde para aconsejarselo.

2 respuestas
BLZKZ

#19 si no te gusta el campo porque has tomado la mala decisión de ser programador toda tu vida es culpa tuya, pero no creo que sea un campo de mierda :) pero la mayoría os limitáis a decir que esto es solo "programar" y una minoría tenemos las miras más abiertas.

2 respuestas
B

#20 Lo soy porque me gusta, pero las condiciones laborales en el campo de informática son desastrosas. Ya hace 2 años que trabajo por cuenta propia, gano el triple y trabajo la mitad de tiempo, pero viendo el perfil del usuario que solo le inetresa picar código creo que es el mejor consejo que se le puede dar.

1 respuesta
PiradoIV

Hombre, como programador también puedes tener la esperanza de desarrollar algo en plan Indie que te convierta en el jefe de tu propia compañía... mientras eso pasa, picas código y haces cosas en los ratos libres.

Pero unos ingresos fijos por el día ayudan a ser Indie por la noche x'D

1 respuesta
BLZKZ

#21 tan simple como irte de España.
#22 xDDDD si fuera tan fácil jaja

Y a mi me gusta programar, pero no quiero que se convierta en el trabajo para toda mi vida. Prefiero disfrutar de ello por la noche :P

1
elkaoD

#20 hombre, especializarme es lo que intento (de ahí que lleve TANTO tiempo con la programación de videojuegos.) Lo malo en mi caso es que en un sector con mucha competencia y curros de mierda. Tal y como están las cosas el futuro pasa por el autoempleo, ya sea como freelancer o como startup.

Aún así, no puedes menospreciar el valor de conocer un lenguaje a fondo y menos aún en un ingeniero. La labor del ingeniero (entre otras cosas) es escoger las mejores herramientas para el trabajo y ya me dirás cómo lo haces sin ser un gurú de VARIOS lenguajes :) Si conozco Scala y puedo proyectar un proyecto (valga la redundancia) enterito se me rifarán más como ingeniero que si mi experiencia es con Java y PHP, obviamente. Ingenieros que conozcan Java y PHP los hay a patadas. Y no vale con conocer "un poquito" o algo así porque un lenguaje puede tener muchos recovecos aparte de necesitar tener experiencia de campo. Por ejemplo: ¿qué es más eficiente en Scala para una lista con inserciones al final, List inmutable o mutable? ¿Deberia hacer la lista inmutable una vez esté construída? etc. etc.

Las soluciones tradicionales las conoce todo el mundo, pero sólo un experto en Scala/Erlang/whatever sabrá cuándo y cómo aplicarlos.

2 respuestas
B

#24 en el pais de las maravillas es así, en la realidad a nadie le importa como lo hagas mientras cumplas tiempos de entrega. En el 90% de los casos solo tu mirarás ese código tan bien implementado, nadie te reconocerá el trabajo y no esperes una palmadita en la espalda.

1 respuesta
BLZKZ

#24 No te confundas, no tienes por qué ser experto o gurú en un lenguaje para elegirlo en un proyecto si eres quien lo diriges. Eso es una locura. El ingeniero contrata al gurú para que mejore en la medida de lo posible la implementación, pero la importancia del trabajo del ingeniero reside en la arquitectura y el diseño, no en la parte de la implementación.

Estás MUY equivocado si piensas así.

1 respuesta
elkaoD

#25 supongo que tienes razón. A veces me gusta pensar que el trabajo del informático está valorado :$

#26 creo que el que está muy equivocado eres tú.

Ya me dirás como arquitectas algo con Scala sin conocer el lenguaje. De verdad, es una locura. Cuando digo gurú estoy exagerando, pero mínimo debes conocerlo de pe a pa el lenguaje, no de oídas ni de haberte leído un libro.

Arquitectar en un lenguaje OO puro sabe todo el mundo, obviamente, pero no todo el monte son objetos :P

Estoy poniendo Scala como ejemplo porque es lo que me estoy mirando ahora (wtf #2 ya me he leído el libro casi entero) pero es que es un ejemplo perfecto de a qué me refiero. Hay como 80 mil maneras diferentes de implementar las cosas en Scala y sin embargo la arquitectura luego es importantísima. ¿Vas a dejar que las decisiones de diseño las tomé el gurú?

1 respuesta
BLZKZ

#27 Ojo no digo sin conocerlo. ¿Que pasa que si no eres un gurú en un lenguaje es que no lo conoces? Locura inside.

1 respuesta
elkaoD

#28 decir que puedes arquitectar por conocer un lenguaje es como decir que sabes bailar porque has visto muchos videoclips de Michael Jackson.

Como digo, con lo de "gurú" estaba exagerando, pero mínimo tienes que ser MUY BUENO. Vamos, es que es una locura pensar que puedes arquitectar algo en lo que no tienes experiencia plena.

1 respuesta
BLZKZ

#29 Sobre todo porque a la hora de hacer la arquitectura vas a tirar el código y vas a tener que saber todos los trucos del lenguaje, claro amigo claro.

1 respuesta