AJAX en Java (porque ocuparlos)

¿AJAX?, ¿Qué no era un jabón?, bueno si lo es, pero también existe una tecnología en informática y se considera un framework (entorno de trabajo) para desarrollo de aplicaciones Web. Significa "JavaScript Asíncrono". Se compone de:

  1. DOM:para la estructura y presentación de los documentos Web
    • DHTML
    • CSS
  2. XMLHttpRequest:para el intercambio de información entre aplicaciones
    • JSON
    • XML
  3. JavaScript: para unir todo lo demás

Gracias

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

AJAX

De hecho significa "javascript asíncrono Y XML": Asynchronous Javascript And XML.

Estuvo bien que hayas aprendido los fundamentos de AJAX de esa manera, pero ya en la práctica, no tienes que pelearte tanto con las funciones de tan bajo nivel; puedes usar cosas como jQuery, Prototype, Scriptaculous, etc que traen ya varias funciones en Javascript que te ayudan mucho con el rollo de AJAX.

Imagen de Shadonwk

siempre he dicho que en la

siempre he dicho que en la escuela solo vas a una de dos cosas

la primera es a obtener un papel para que te sea mas facil conseguir empleo
y la segunda sera a perder el tiempo

y no lo digo por decir tengo fundamentos claros y concisos...

Imagen de samz550a

Lo que nos enseñan en la universidad.

He de confesar que estudié en una universidad no-prestigiosa de mi pais Colombia y estoy descontento con lo que me enseñaron y lo que se encuentra uno en la vida real-laboral.

Se supone que me dieron un enfoque hacia las ciencias computacionales que no entendí e igual resulté mas por el camino de la ingeniería del software y desarrollo de software. Es mas, me planteo trabajar como desarrollador Java... pero ahí me pregunto ¿para que la universidad si programador puede ser cualquiera que tenga gusto por estudiar estos temas?... pero weno, almenos en mi pais las ofertas de empleo piden ing de sistemas desarrolladores en Java... ... tal vez sin el titulo de ing no me dejarian aspirar a dichos trabajos así supiera de la tecnología ¿será así la cosa realmente?

Lo del anterior párrafo me recuerda que aquí relacionan el ser Ingeniero de Sistemas con ser programador... ... quisiera negarlo pero almenos en lo que se y quiero desempeñar bastante así lo es. No se si la salvación de un ingeniero de sistemas es decir que trabaja en redes, o seguridad o especifico en bases de datos para que suene raro y diferente a solo programar.......... también puede ser que otro agarre una rama para mi extraña de las matematicas y tenga un enfoque de ciencias computacionales que vuelvo y digo no termino de entender que es.

Sobre mis maestros y lo que me enseñaron tendré que decir que hubiera querido tener a alguien como ezamudio o Benek, domix, luxspes y mas que no recuerdo ahora del foro que tienen autoridad para hablar de desarrollo Java... y todo tema de ingeniería del software PERO yo no tuve tal fortuna. Tuve profesores que a duras penas saben lo minimo o necesario sobre el programa que van a dictar y no se actualizan para nada. Siguen su vida de docentes pero no tienen que enfrentarse a los retos de alguien que trabaje con esos conocimientos. Aquellos profesores también se ven cada semestre en una repartición toda loca de carga academica y materias... y muchas cosas mas... no es un buen pronóstico.

Me acuerdo por ejemplo de mi profesor de Ingeniería de Software que se guia por un libro de 1995 mas o menos... me acuerdo que lo que nos enseñaron de java será de versiones inferiores a la 1.4... ... ... para nada actualizado. ya en otros niveles y materias cuando se entra a estudiar mas la ingeniería del software, conocer los framework y demás esos temas no se siente que los dicte alguien que sabe y es mucha la confusión y poco entendimiento y asi va pasando el tiempo y resulta uno graduandose.

En estas universidades y sistemas educativos al que mejor le va es al que es curioso y estudia por su cuenta, amplia conocimientos... en mi caso, pasé mis estudios apenas con lo básico realmente, cumplia lo suficiente y así pasé... ahora que salí es que me veo enfrentado a que no se realmente lo que se necesita en la vida y ando como loco documentandome, aprendiendo, estudiando y demás para no sentirme tan crudo, tan verde ahora que tengo que trabajar............. ha sido angustiante para mi ponerme a la tarea de aprender todo lo que no me enseñaron y no se me dió la gana de aprender antes por mi propia cuenta.

En fin, les dejo mi historia de frustración... no se como seria en sus casos la experiencia del aprendizaje en su universidad.
Aclaro que puse la versión triste y deprimente, la versión pobre y de miseria de la historia... ... no puedo despreciar también el bien que me hicieron al educarme en mi universidad y que todo realmente no fué malo pero bueno... la idea era hablar en negativo... me iba saliendo un fleco que me cubria un ojo en el proceso jajaja.

Saludos cordiales a todos

Imagen de ezamudio

Educación Universitaria

Pues se supone que la Universidad debe ser Universal, de ahí el nombre, así que no deben enfrascarse demasiado en un tema. Si nada más te enseñan Java, no es universidad, es escuela técnica. Y si solamente sabes Java pero no tienes buenos fundamentos de programación, tendrás muchos problemas para pasar a otro lenguaje.

Ciencias de la computación e ingeniería de software son dos cosas que no cambian tanto; lenguajes van y vienen pero los fundamentos no cambian mucho; por ejemplo ahora que se pone de moda la programación funcional, no es algo recién inventado; viene de los sesentas y setentas, pero no era popular porque requería más recursos y no había tanto poder de cómputo entonces. Java nació cuando yo estaba saliendo de la universidad, así que nunca lo vi, pero había visto principios de programación orientada a objetos, había ya trabajado con Objective-C y Pascal orientado a objetos, lo cual me ayudó a comprender más fácilmente el lenguaje, porque ya dominaba los principios.

Durante toda la carrera trabajé en Pascal, lenguaje que jamás he utilizado en mi vida profesional y que de hecho no he vuelto a tocar el día que terminé la carrera. Se supone que fue inventado para fines académicos, y creo que sirvió bien para eso. Pero si los profes que me enseñaron programación se hubieran enfocado más a Pascal que a los principios de OOP, algoritmos, manejo de memoria, apuntadores, estructuras de datos, etc, me hubiera costado muchísimo trabajo aprender otros lenguajes. C por ejemplo lo aprendí por cuenta propia, igual que Java y C# y algunos otros lenguajes con los que me he topado de repente, y que luego olvido por desuso.

Yo mismo si diera hoy clases de programación, no sería en Java. No sería de entrada en nada orientado a objetos, primero usaría algún lenguaje donde pudiera mostrar solamente funciones. Tal vez Python o algo asi, aunque al principio debería dominarlo yo primero. O Groovy, no sé. Groovy podría ser buena opción porque el paso posterior a OOP puede ser más natural, sin cambiar de lenguaje, solamente empiezan a usar las clases de Java. Pero la gratificación inmediata de teclear tu Hola.groovy:

println "Hola"

con eso vas a filtrar desde el principio a los que dicen "ash esto no tiene el menor chiste" a los que dicen "wow o sea que la computadora va a hacer lo que le diga? qué mas le podemos decir que haga?" Y a fin de cuentas, los mejores programadores serán los que quieran aprender cosas por su cuenta. Eso es un plus en la escuela y es un super recontra plus en el trabajo. Y no creo que aplique solamente a programación; la gente más destacada en cualquier carrera por lo general es porque nadó contra corriente, aprendió cosas por su cuenta, y no siguió ciegamente las enseñanzas tradicionales de los grandes en su área.

Bueno eso del fleco jajajaj progremodor.

Universidad

la experiencia que acaba de contar CARRARO es muy comun, en el mundo real te das cuenta que la carrera no esta bien enfocada a la realidad
en mi caso yo estudiie ing. de sistemas que parece q en realidad estudie ciencias full matematica, solo en el ultimo año puede llevar algunos cursos de la carrera
erl unico lenguaje que programe fuen en COBOL y pascal jejeje. pero debo de decir que lo que me enseñaron fue a ser disciplinado a investigar y a siempre estar listo para aprender cosas nuevas por lo cual estoy muy agredecido ahroa que soy Analista Senior veo que tubieron jmuicha razon en no enseñar a programar ya que la carrera no es para que seas un triste programador, tu carrera es para que seas jefe de proyecto o analista funcional. asi que te aconcejo que apuntes a eso y no conformarte con ser programador pq como tu dices no se encesita estudiar en una univerisdad para ser programador.

Imagen de samz550a

nuevos comentarios

Gracias ezamudio por la respuesta, es valioso los comentarios para facilitar el debate. Si alguien puede añadir algo al respecto de su experiencia de estudiante ... comentar al respecto es bienvenido.

Te leo y me quedé pensando... entonces ¿como te fué cuando saliste de la universidad para obtener un empleo? ¿en que te desempeñaste? Porque por lo menos sobre el conocimiento de lenguaje pascal seguramente no habia empleados disponibles de desarrollo en ese lenguaje... nombras Objetive-C... no se si lo aprendiste en tu universidad y este te permitió acceder a un empleo de desarrollador en aquella herramienta.

Aquí traigo a colación a CARRARO quien inició el tema. Creo interpretar que el se siente algo inconforme porque no le enseñaron en clases sobre esos temas con los cuales hoy en dia hay empleo y se hacen las cosas. A el como a muchos le tocó empezar a estudiar y hacer cosas que le terminaron de enseñar sobre por ejemplo Ajax. Como buena conclusión, no se echó a morir sino que vió como defenderse.

Ezamudio, en tu caso ¿no sentiste alguna inconformidad cuando saliste tener claro que pascal tenias que echarlo de lado y tendrias que invertir unos meses aprendiendo C, Java y más? ¿Para los primeros empleos te tocó ponerte como loco a aprender algo que no manejabas y conociste en la Universidad?

-------

Aquí saliendome un poco del tema ¿como está el mercado laboral en sus paises? Yo estoy revisando del Colombiano y la mayoria de ofertas es para desarrolladores en Java y también en .NET... como decia un amigo, es en lo que mas sale empleo y lo que "mejor" están pagando. En todas esas ofertas piden Ingenieros de Sistemas almenos... podrian requerir tan solo gente sin titulo universitario que sean buenos programando. Por cierto ¿Acaso el desarrollo en Java y .NET es algo que solo puedan hacer ingenieros? ¿cual seria la razón para pensar así?

No se en sus paises, ustedes me dirán ¿en que mas se están empleando a ingenieros de sistemas?... bueno, ya me acordé de otras ofertas que amplian el abanico de empleos posibles, que pueden pedir otras cosas diferentes de desarrollar pero espero haber que me dicen ustedes.
Y POR CIERTO
Ofertas de trabajo accesibles para alguien que acaba de salir de su universidad eh!!! porque no falta lo que pida estudios mas avanzados o años de experiencia.

---------

Bueno, menos mal estoy en incognito con mi nick samz550a, no es el nick o los nick que utilizo habitualmente porque si me hubiera leido alguno de mis profesores seguro me vendria a cortar el fleco (que me nació mientras escribia el primer mensaje) y a patearme por desagradecido (pero también posiblemente porque no le agrada ver emos xD ) Por cierto, no soy emo... a mi avatar de Indú no le quedaría bien los colores oscuros y los peinados extraños xD

Hablemos con mas justicia de la mano que me dió de comer estudio.

tendré que decir que en el transcurso de mi educación por la parte de manejo de diferentes lenguajes conocimos un pseudo-lenguaje que permitia programar desde diagramas de flujo... de fines educativos... entramos a ver lo básico de la programación en lenguajes imperativos, en este caso C como lenguaje procedural
(chanfle, ya casi no me acuerdo de los terminos, me tocó repasar en un librito pa no quedar mal... igual seguro me equivoco en algo por tratar de impresionar xD )
En C aprendimos el manejo de las estructuras de control y procedimientos (o funciones, como se les diga)... por cierto, eso fué nuevo para mi... yo en mi colegio aprendí algunos fundamentos en Pascal... lenguaje que desde entonces no volví a tocar pero le tengo cariño... incluso me compré un libro de Turbo Pascal 7 solo para el recuerdo... nunca lo he estudiado y ya para que, no tendria sentido.

Luego saltamos a la orientación a objetos específicamente en Java.

Claro está que por cada cosa se daban los fundamentos teóricos pero como "buen" estudiante mas fué la sorpresa de tirar código y ver resultados que ponerle atención a la teoria.

También en otras materias conocimos la programación funcional y programación lógica que ahora recuerde... creo que con Haskell y Prolog. De esos dos podria decir que no me agradaron mucho; Sentia y creia que en ellos se dependia mucho del motor que habia detrás y que todos esos resultados se hayan igual programando en un lenguaje procedural u Orientado a Objetos... creo que Haskell y Prolog por debajo está programado si no es en C será en un lenguaje similar.

ezamudio, dices que la programación funcional ahora se está utilizando ¿que proyectos podemos ver con ese paradigma? ¿que lenguaje nuevo maneja esos paradigmas? ¿si hay ofertas de empleo sobre esos paradigmas de programación lógica o de programación funcional?

----------

Ahora paso a otro punto... el punto de los ¿y para que?

Poniendome en el contexto de un ingeniero de sistemas que se fué por la linea de la ingeniería del software y el desarrollo de software les pregunto

¿De que sirve estudiar matemáticas y físicas en nuestra carrera? Almenos por aquí no se concibe que nadie obstente el nombre de Ingeniero si no lleva el peso de haber estudiado matematicas (calculo diferencia... multivariable... matemáticas especiales y etc) y física (mecanica.. ondas ... y etc)

Declaro, no programo en C++ (bueno, conozco algunas cosas de C pero no para desarrollar una aplicación de verdad)... hoy en dia, con las ofertas de empleo de sus paises (reitero, en colombia en su mayoria son para programar en .NET o Java) ¿que sentido tiene aprender C o C++?

Supongo que lo que digo en el parrafo anterior va a generar para almenos uno controversia... pero bueno, ese es mi objetivo, que me argumenten
PORQUE
Bueno, apelando a mi flamante ignorancia que me acompaña mientras escribo esto se que los sistemas operativos se escriben en C/c++ y que escribirlos en Java seria algo absurdo... PERO si no voy a meterle mano a código de Linux (porque windows o mac ni modo) ¿para que lo aprendo?

Yo se que hay mucho cariño con c/c++ porque con ellos se logró (bueno, logra) cosas que antes ni se imaginaban pero recuerdo incluso una frase que leí por ahí que decia algo como "X o Y decadas desde el nacimiento de la computación y ¿todo llegó a su culmen con C ?"

Otro de mis ¿y para que?

¿Realmente es tan prioritario el estudio de los autómatas, maquinas de turing, complejidad espacial, complejidad temporal y esas cosas? Siendo práctico ... en el mundo laboral de sus paises ¿emplean gente porque sepa o no esas cosas?

No negaré que entre mas sepa uno de todo es mejor... aquí me pongo en el papel del ignorante, del fastidioso, del iluso xD pero bueno, quiero saber sus opiniones... mi intención es "fastidiarlos" para tener una respuesta bien argumentada.

------------

Bueno, finalmente comentaré que durante mi estudio algunas veces pequé con la frase "es mejor malo conocido que bueno por conocer"... mejor dicho, utilizar lo exclusivamente lo que se si puedo.

Cuando hubo oportunidad de trabajar con PHP me mantuve con Java y su JSP porque me era mas familiar. También cuando veiamos temas de programación ¿Empresarial? no hice el intento de practicar en .NET pero bueno, le echo la culpa a la campaña subersiva de los linuxeros que me lavaron el cerebro hasta el punto de que llevo utilizando linux ya 4 meses seguidos LOL ahora que pienso en software propietario me da picazón y ardor en la piel... no no no jajaja.

Me extendí mucho, espero algo de lo escrito tenga sentido y sea digno de comentar al respecto.

Mi saludo y mis disculpas de antemano.

-------------
Posdata::: acabo de leer el comentario de alex2010, gracias por escribir.

Le doy la razón a lo que comentas, tal vez ... no, ralmente me pongo yo en el contexto de desarrollador o almenos del Ingeniero de sistemas (¿o de software?) que interviene en el proceso de desarrollo de software metiendole mano al código. Esto lo "aclaro" porque se que hay otras áreas como analista y demás......... como el trabajo y papel que asume quien va, habla/negocia con el cliente y genera el enunciado del problema, requerimientos y demás.

En fin, me agradaria ver (mas) debate sobre el tema.

Saludos.

Imagen de benek

Otras alternativas AJAX con Java

Ese ejemplo que hiciste es la forma para crear AJAX digámosle "puro", directamente con el objeto XMLHttpRequest.

Con el tiempo, han surgido librerías y frameworks que facilitan muchísimo utilizar componentes AJAX y además nos proveen de componentes ya muy extendidos.

Algunos de estos frameworks o librerías inclusive ya se programan en Java, como en el caso de Google Web Toolkit (GWT) o Ext GWT (que une el framework javascript Ext JS con el framework Google Web Toolkit).

Algunos de ellos son:

  • Richfaces - Que es una librería de componentes AJAX que se adhiere sobre un proyecto JavaServer Faces.
  • ICEfaces - Lo mismo que Richfaces pero es otra propuesta, con sus diferencias pero estos dos son proyectos los más fuertes en cuanto a JSF.
  • Primefaces - También se integra con JSF, es menos maduro pero tiene buena propuesta.
  • Google Web Toolkit - Framework creado por Google, con el que se pueden crear interfaces web AJAX con código Java, muy parecidas a los componentes de Gmail y Google Maps, convierte lo que codificas en HTML y Javascript. Este framework no solamente es una librería de componentes visuales, es posible y está preparado para cimentar grandes proyectos sobre él, a diferencia de los clásicos frameworks como Tapestry, JSF, Spring MVC, Grails, etc... que se basan en el patrón de diseño MVC (Model-View-Controller) GWT apuesta por el patrón de diseño MVP (Model-View-Presenter).
  • Tapestry5 - Es un framework MVC pero integra Prototype y Scriptaculous para crear componentes AJAX.
  • Struts 2 - Otro framework MVC que en teoría debería ser la evolución de Struts 1, aunque se basó en WebWork, también provee funcionalidad AJAX.
  • DWR - Esta es una librería para hacer llamadas desde funciones javascript hacia métodos java, muy fácilmente, a mi me gustó bastante y puede ser muy útil para utilizar JQuery, Ext JS, Mootools o algún otro framework puramente javascript y luego unirlo con DWR para integrarlo con Java.

Deben haber muchos más, he escuchado comentarios muy buenos de ZK, aunque no lo he ocupado, por el momento recuerdo esos que son de los más "populares", si alguien sabe algún otro estaría bien que lo pusiera.

Saludos.

PD. Espero no haberles cortado la inspiración con todo aquello de las universidades. xD

Javier Ramírez Jr.

Imagen de luxspes

Triste programador? (Y luego dicen que yo no tengo tacto)

erl unico lenguaje que programe fuen en COBOL y pascal jejeje. pero debo de decir que lo que me enseñaron fue a ser disciplinado a investigar y a siempre estar listo para aprender cosas nuevas por lo cual estoy muy agredecido ahroa que soy Analista Senior veo que tubieron jmuicha razon en no enseñar a programar ya que la carrera no es para que seas un triste programador

Triste programador? mmmmm (y luego dicen que yo digo cosas sin tacto)... ciertamente se puede ser un triste programador, pero ser programador no es para nada algo que obligatoriamente tenga que ser triste... ya has programado en Haskell o Scheme (o cuando menos en Scala)? los principios matemáticos que aprendiste podrían llevarte a un nivel de productividad que con Java probablemente es inalcanzable (Java es francamente un lenguaje muy limitado has oido de la decima regla de Greenspun?): "Cualquier programa suficientemente complicado contiene una implementacion personalizada, informalmente especificada y llena de bugs de Lisp." Asi de primitivo se ven la mayoria de los lenguages para un experto en Scheme o Lisp (o Haskell)

tu carrera es para que seas jefe de proyecto o analista funcional. asi que te aconcejo que apuntes a eso y no conformarte con ser programador pq como tu dices no se encesita estudiar en una univerisdad para ser programador.

No se si se necesite o no estudiar una carrera (yo si la estudie... pero he conocido a personas muy capaces que no). Lo que si se es que ser programador no es "conformarse". A menos, claro, que ya hayas inventado algo como Haskell por ti mismo, y lo hayas encontrado mas fácil que ser jefe de proyecto o analista funcional. (No tengo nada en contra de de ser jefe de proyecto o analista funcional, solo digo que para nada son intrínsecamente superiores a ser programador, simplemente son una rama diferente del conocimiento)

Imagen de luxspes

Estudios: Heuristica

Por cierto ¿Acaso el desarrollo en Java y .NET es algo que solo puedan hacer ingenieros? ¿cual seria la razón para pensar así?

En mi experiencia no tiene relación directa, he conocido al menos 1 persona con estudios hasta la preparatoria que programa muy bien (pero no es lo común en mi experiencia). También he conocido personas con doctorado, con una habilidad casi nula para programar (tampoco es lo común, pero llega a pasar). He conocido personas de escuelas "de Gobierno" (como en la que yo estudie) extremadamente buenas.. y personas de escuelas privadas carisimas que no sabían hacer nada.... (también he conocido personas de escuelas carismas que son muy buenas, y tuve compañeros de escuela gubernamental que eran incompetentes) la realidad es que lo que estudies y hasta donde estudies no es una garantía de tu habilidad, pero es una heuristica que usan los que contratan para tratar de determinar mas o menos que tan bueno eres... lo autodidactas son raros, y en general si no sacaste demasiado malas calificaciones en la universidad quizás signifique que eres capaz de aprender... así que es mas probable que te den oportunidad de trabajar en una empresa, pero solo es cuestión de probabilidad, para nada de certidumbre.

¿que proyectos podemos ver con ese paradigma? (funcional) ¿que lenguaje nuevo maneja esos paradigmas? ¿si hay ofertas de empleo sobre esos paradigmas de programación lógica o de programación funcional?

Bueno, para empezar: JavaScript... que es básicamente hoy por hoy el lenguaje de programación mas extendido (todo el que tenga un navegador lo ejecuta, y tomamos en cuenta que ActionScript es básicamente un dialecto de JavaScript, pues Flash también es JavaScript. C# ya soporta programación funcional, igual Scala (y a Java 7 le quieren poner también soporte).

Cuando hubo oportunidad de trabajar con PHP me mantuve con Java y su JSP porque me era mas familiar. También cuando veíamos temas de programación ¿Empresarial? no hice el intento de practicar en .NET pero bueno, le echo la culpa a la campaña subversiva de los linuxeros que me lavaron el cerebro hasta el punto de que llevo utilizando linux ya 4 meses seguidos LOL ahora que pienso en software propietario me da picazón y ardor en la piel... no no no jajaja.

Si te gusta linux, y .NET te da curiosidad, esta Mono. Ten cuidado con el lavado de cerebro, la mejor táctica para beneficiar a Microsoft (y matar a Linux) es dormirse en los laureles de los beneficios de Linux y creer que todo lo de Microsoft tiene siempre tiene que ser peor. (Fijate en el caso de Java, se durmió en sus laureles, y cuando se dio cuenta, C# ya tenia Generics, Annotations (Attributes en C#), programación funcional, type inference, continuations, etc, etc, y desde entonces Java a estado copiandole características a C# a un ritmo que no mas no da para alcanzarle el paso, y con una calidad que hace sentir a las características como parches... en ves de concentrarse en mejorar a Java con características originales, como hace a la JVM una MVM, o ofrecer hot redeploy de cualquier clase). En mi opinión Oracle debería dejar a Java morir y fomentar Scala (que esta mas a la par con C#) y luego comprar y convertir en proyecto opensource a JavaRebel... y asi poner a C# a jugar con la reglas de Java (como en la versión 1.0 cuando C# parecía una copia de Java... en cambio ahora, Java 7 parece que sera una mala copia de C# 3.0) pero no creo que vayan a hacerme caso..

Finalmente, si yo diera clases en una universidad, probablemente utilizaría este libro: How to Design Programs y escogeria a Scheme como el lenguaje introductorio. De ahí me pasaría a Haskell y Smalltalk (y quiza un poco de Eiffel y Prolog). Luego Rel para bases de datos... y a los demás dejaría para cuando llegues a trabajar... asi casi no habría conceptos nuevos a los que introducirte, todo seria mas bien cuestión de aprender la sintaxis de los lenguajes "mainstream".

Imagen de ezamudio

Muchas preguntas

Sin repetir mucho lo que ya contestó luxspes:

¿como te fué cuando saliste de la universidad para obtener un empleo? ¿en que te desempeñaste?

En México, si no estás trabajando ya a la mitad de la carrera, algo de medio tiempo, estás frito. La gente que se espera hasta salir de la carrera para buscar trabajo, tiene muchísimas dificultades, porque en TODOS los trabajos de tiempo completo, TODOS, piden experiencia de 2 años como mínimo. Yo entré a la carrera en 1991, comencé con empleos de medio tiempo ya relacionados con mi carrera en 1993, y tuve un trabajo más serio (medio tiempo pero ya con mayor responsabilidad) en 1994, donde comencé a hacer mi carrera laboral como programador, usando Objective-C en NextStep (sistema operativo basado en BSD, que ahora es Mac OS X).

¿no sentiste alguna inconformidad cuando saliste tener claro que pascal tenias que echarlo de lado y tendrias que invertir unos meses aprendiendo C, Java y más?

No mucha, solamente con C que creo que lo pudieron haber enseñado aunque sea por encimita. Dieron realmente muy poca programación en la carrera. Como mencioné al principio, cuando salí de la carrera estaba saliendo la versión 1 de Java y en ese momento no servía para nada útil, era solamente para applets, animaciones, cosas así, no había buen soporte en Windows.

¿Para los primeros empleos te tocó ponerte como loco a aprender algo que no manejabas y conociste en la Universidad?

Pues sí, siempre… primero tuviste un trabajito de sotorpe técnico pero aprendí un poco de un lenguaje medio raro que ya ni me acuerdo cómo se llamaba (una cosa propietaria, algo horrible en verdad). Recuerdo que ahí vi por primera vez la sintaxis de las sentencias condicionales condicion ? sentencia : sentencia_si_no_se_cumple, que después aprendí que estaban en C y bueno también en Java. Objective-C lo aprendí en mi primer trabajo más serio, primero por mi cuenta leyendo manuales y tutoriales, luego me mandaron a un curso. Importaba más que dominara bien los conceptos de OOP que manejar C, y como nadie usaba Objective-C sabían que lo tendría que aprender ahí.

Programación funcional, ¿que lenguaje nuevo maneja esos paradigmas?

Groovy, Scala, Erlang, Ruby… incluso Javascript es funcional. No sé si alguien pida programadores específicamente en esos lenguajes; no sé si haya gente ya super especializada en esos lenguajes (Ruby y Groovy probablemente sí). Pero es un plus conocerlos y poder usarlos de vez en cuando.

¿De que sirve estudiar matemáticas y físicas en nuestra carrera?

Son disciplinas mentales. La programación es pura lógica, igual que matemáticas. Hacer un buen algoritmo es como una fórmula y optimizarlo es como poder reducirla a su mínima expresión, además que tienes que comprobar que va a servir para todos los casos, etc.

¿Realmente es tan prioritario el estudio de los autómatas, maquinas de turing, complejidad espacial, complejidad temporal y esas cosas? Siendo práctico ... en el mundo laboral de sus paises ¿emplean gente porque sepa o no esas cosas?

El conocimiento de estos temas es lo que distingue a un buen programador de uno mediocre. El dominio de estos temas facilita el aprendizaje de nuevos lenguajes, te da facilidad para solucionar problemas en software, implementar algoritmos eficientes, identificar errores en código ajeno, optimizar algoritmos, etc.

Un programador mediocre puede entrar a un empleo donde le van a decir exactamente lo que tiene que hacer, ya todo muy masticadito y digerido, sin tener que explicarle el proyecto completo, etc. Pero de ahí no va a pasar, será difícil que tenga una mejor posición y se destaque de entre los demás programadores. Un buen programador se interesará por el proyecto como un todo, porque sabe que es mejor si conoce de otros módulos aunque no los tenga que hacer, para no afectarlos con su trabajo, o poder beneficiarlos. Podrá ayudar a otros miembros de su equipo con problemas que tengan, y cuando sus compañeros y superiores noten que puede resolver problemas más complejos, se los darán y de ahí comienza a subir de nivel.

Ya si como premio lo quitan de programar y lo ponen a planear proyectos o algo así (pésima idea pero muy común) es otra historia.

Imagen de ezamudio

Analogias...

viendo unos comentarios en otro foro, se me ocurrio una manera de distinguir buenos programadores de no tan buenos, mediocres, o de plano maletas, con todo y una analogia. Pero igual me la puedo saltar y decirlo directamente.

Los conceptos que mencionamos anteriormente sirven tambien para tener un lenguaje comun con otros programadores. Si puedo hablar con otro programador y le digo que tengo un metodo estatico o un metodo de clase, va a entender que estoy hablando de algun lenguaje orientado a objetos, mientras que si hablo de funciones es porque estoy hablando de lenguajes procedurales o funcionales. Igual con tipos debiles o fuertes, recoleccion autmatica de basura, etc...

Mi analogia era con la musica. Puedes aprender lo mas basico y tocar un instrumento de manera muy basica (por ejemplo guitarra), sin tener que saber jamas donde es Do, Re, Mi ni nada de eso. Pero nunca vas a ser un buen musico, aunque seas muy habil para la guitarra, porque cuando hables con alguien que toca otro instrumento y se quiera poner de acuerdo contigo, no le vas a entender cuando te diga que improvisen algo en Si menor y que luego subas un tono, o dos intervalos, o que cambien de compas en tal parte y por lo tanto hagan una anacrusa... y peor aun si es de educacion mas clasica y te empieza a hablar de rallentando, crescendo, staccato, etc (lo cual me lleva a otro tema de cuando se queja la gente de que para programar hay que saber ingles porque todo esta en ingles; en musica todos los terminos tecnicos estan en italiano). Si te pones a estudiar teoria de la musica vas a entender mejor lo que haces en la guitarra; la teoria de la musica es como estudiar ciencia de la computacion, y tocar la guitarra (o el piano o el bajo o la trompeta) es aprender un lenguaje de programacion; es la manera de poner en practica esos conocimientos y aplicarlos. Puede haber buenos musicos ejecutantes que no conocen bien de teoria de la musica y por lo tanto no van a poder componer o hacer sus propios arreglos, improvisar, etc; igual puede haber programadores que solamente conocen un lenguaje pero no conocen algoritmos muy basicos como quicksort, bubble sort; te pueden decir "para que quiero saber un quicksort si en Java las clases de colecciones ya saben ordenar elementos de la manera mas eficiente", pero a la hora de implementar el metodo hashCode() en una clase propia no van a saber para que se usa o como hacerlo de la manera mas eficiente para meter sus objetos a un HashSet o HashMap... son ejemplos muy simples pero en fin, es algo que se me ocurrio.

Imagen de matlock

La mejor analogia

No podria estar mas de acuerdo, con tus comentarios. Estoy completamente de acuerdo, admiro la facilidad que tienes para poder explicar tan fluidamente este punto tan controvercial.

Solo queda..

A seguir estudiando

Imagen de Ariagna

zk

Zk es muy bueno, pues al incluir un lenguaje de marcado como ZUML, permite a los no expertos diseñar eficientemente interfaces de usuario, no se los que mencionas pero este aunque está basado en Ajax no es necesario que el desarrollador tenga conocimientos de este o JavaScript. también usa el patron MVC
La vista puede crearse haciendo uso de los lenguajes java o ZUML, presentando el modelo en un formato adecuado para interactuar, usualmente la interfaz de usuario.
El modelo usa beans que contienen información de diversas fuentes de datos, siendo la representación específica de la información con la cual el sistema opera. La lógica de datos asegura la integridad de estos y permite derivar nuevos datos.
El controlador responde a eventos, usualmente acciones del usuario e invoca cambios en el modelo y probablemente en la vista. Se crea al heredar de diferentes clases útiles que implementan de la interfaz, estas clases permiten un acceso directo a los componentes, objetos embebidos, y variables externas creadas en la vista (página zul), y la creación de métodos intuitivos.

Imagen de benek

Vaadin

A los que les gustó ZK, chequen la introducción que hizo ezamudio sobre Vaadin: http://www.javamexico.org/blogs/ezamudio/introduccion_vaadin

Saludos.

Javier Ramírez.
http://twitter.com/_benek

@samz550a sobre la universidad

A veces parece que el tiempo pasado en la universidad es perdida de tiempo ( luego no solo lo parece, sino que lo confirmas ) :P

Cuando yo estudié me desesperaba mucho por que llevaba muchas clases que no eran ni tantito tecnológicas. Aún así, en retrospectiva veo que estudié:

- Pascal
- Lisp
- C
- sh
- Java

Así que no me fue tan mal.

Al entrar al mundo laboral hay que empezar prácticamente de cero ( bueno quizá empiezas de... 4 )

No puedes pretender ( y he aquí la frustración de muchos ) empezar el primer día de trabajo de tu vida como Consultor Senior++, sino que empiezas como "becario" o "adjunto" o como se le llame y quizá por nada o muy poca paga.

Pero he aquí donde viene la ventaja de haber estudiado una carrera universitaria. Las tecnologías cambian y las bases que te enseñan ( algoritmos, estructuras de datos, lenguajes formales y demás etc. etc. etc ) te ayudan a entender mejor las nuevas tecnologías. Las materias no tecnológicas te dan perspectiva más amplia y te facilitan la ejecución no técnica de tu trabajo, por ejemplo ser un mejor líder de proyecto ( por que tienes nociones de administración ) y/o a entender las necesidades de los clientes ( pues generalmente los sistemas son para automatizar procesos que NO son de sistemas ) y poder hablar con ellos al mismo nivel, poder entenderlos ( uf ) y poder transmitir eso que entendiste al resto de tus compañeros técnicos.

Los detalles específicos de cada tecnología yo he encontrado que es mucho más fácil aprenderlos, en un proyecto real, con deadlines reales y requerimientos cambiantes reales.

Lo que si, es verdad es que jamás en mi vida he tenido que usar una derivada.