sábado, 26 de junio de 2010

De egresado y aun ñoñeando

Creo que este es el primer post como egresado de UPIICSA. Honestamente, me da mucha nostalgia, la cual por más que quise evitar, uno se siente raro por que ya no estarás en un ambiente upiicsiano... tan distinguible por su <sarcasmo> excelente administración, por tener a la directora más honesta y transparente de América Latina, or los profesores mejor cumplidos y mejor preparados, que no se dejan corromper por dinero ni por un par de posaderas o un par de pechos, ellos siempre se mantienen a la perspectiva, por que su matrícula académica es muy selecta y no hay alumnos que piensen en matar clases cada que pueden, que nunca los vas a ver haciendo un acordeón, que nunca los veras pidiendo trabajos a otros compañeros </sarcasmo>, vaya... como no extrañarla.... pero bueno, es hora de ver para adelante.... a final de cuentas, por más que uno luche... el ciclo de la vida continua.

Empecemos con mi agenda de relatos bobos...

1.- En realidad, me siento agradecido por la felicitación que me hizo Alberto en su blog. Efectivamente, ya me encuentro trabajando como consultor Java. Acabo de salir de la capacitación y apenas estoy empezando a trabajar en el proyecto al que me mandaron, por lo tanto no tengo mucho que decir aun.

En primer lugar.... si puede servir de consuelo a los upiicsos (QUE NO DEBERÍA) es que sencillamente nadie sale 100% preparado de la escuela. Prácticamente....
  • Para programadores, te piden frameworks (framework de net, struts, hibernate, spring). Y sabemos, que los programas académicos solo llegan hasta programación de clases, a los más que llegan es JDBC y GUI (x cierto.... las aplicaciones cliente - servidor ya no se piden mucho, es más demandante las aplicaciones Web - así que saber usar Netbeans o VB6 jalando componente a formularios no te hará experto).
Ya quiero ver a los pseudo-maestros de programación entender este diagrama básico del funcionamiento de Struts
  • Para bases de datos, aun también debes programar en SQL. Suena absurdo, pero desafortunamente los "select's" siguen siendo un tema de estudio que muchos maestros solo llegan al tipico "select * from tabla;". Es más.... es lamentable que muchos proyectos en esas materias sean permisibles las entregas en Access.
Look at mommy!!!! I know SQL...

O_o .... WTF!!!! I want my mommy!!!!!!! :'(
  • Los analistas son los que más se la llevan campechana, o debería, es decir <sarcasmo> cuando haciamos nuestros proyectos, obteniamos los requerimientos mediante entrevistas, cuestionarios a una muestra de 95% de nivel de confianza, que comunmente son como 600 personas, o si es para un sistema a la medida, nunca dar nada por hecho, estudiar bien los casos de estudio, enlistarlos y convertirlos a un WBS detallado, todo SIN INVENTAR NADA ni sacar requerimientos un día antes. </sarcasmo>
  • Redes.... mmmm eso va alineado a otro tema... Unix.... Recuerden, usar Ubuntu no te hace experto, y el subir una página a un servidor Apache tampoco.
OMG!!! =D Mommy mommy.... I know networks!!!!

O_O I pee myself

  • Documentador..... si saben usar el Javadoc y CheckStyle ya estuvo..... que son esos programas???? mmm..... no comments.
  • Lider de proyecto.... como recién egresado.... mmmmm..... no comments yet.
  • El uso de excel sigue siendo muy solicitado
Un libro de excel for dummies sería util.... a caray!!!! mmmm me equivoque ¬_¬

Esto surge por que en la capacitación, el patrón común es que muchos no salieron tan bien (y era de escuelas públicas y privadas de dentro y fuera del área metropolitana). Y pues... se pusieron al corriente estudiando por aparte o en cursos, o requirieron una capacitación previa (esta última fue mi caso - por la cosa de los Struts). Honestamente yo preferí empezar desde cero y ganar un poco menos a querer ganar mucho, pero con el riesgo de calabacearla. Claro, reconozco que hay gente que no requiere la capacitación y puede empezar bien.... excelente por ellos, incluso, son reconocibles.

También es curioso ver que el tema de "que escuela vienes??? que estudiaste???" se ve tremendamente innecesaria, se acabó la cuestión de creerse mejor que los de ciencias o que los de otras escuelas son más frejonas. Estamos viendo una colaboración en la que si tienes un problema, alguien de tu equipo de trabajo tiene, incluso la obligación, de ayudarte. En mi caso, el tema de las carreras y las escuelas salió hasta 5 días después que empecé, y eso, por que de plano no teniamos tema de conversación.

Al final, solo queda esperar tener suerte y echarle ganas. Advierto..... la depresión post-graduado existe, y se siente el cambio de un estudiante a un profesionista que ya tiene responsabilidades. También el temor de que esas mismas responsabilidades nos queden grandes... vaya, solo queda confiar en uno mismo (y llevarse unos chocolates para subir el azucar y no te pegue tanto la depre ¬_¬) Bueno... cambio de tema.

Mis respetos a este maestro.... Colín Bojorquez Alejandro de Formulación y Evaluación de Proyectos. Porque???? Metan materia con el en vez de algún maestro barco para que les recuerde a cada rato que los upiicsianos NO SOMOS LA CREMME DE LA CREMME. La bajoneadas de autoestima que daba este sujeto en realidad te ponen en tu lugar y te hacian ver que el mundo no es color rosita y que los maestros barcos y corruptos, alla afuera YA NO EXISTEN.


2.- Es muy lindo saber que tendremos entrega de diplomas de modo formal... Por aquellos que aun no se enteran, vean los detalles.


Solo que este ritual se ve manchado por la burocracia que hay para el trámite de la tesis, el cual empiezas por llevar un anteproyecto y elegir un director de tesis. Desde ese momento debes entregar a la sección de titulación un conjunto de papeles, entre los cuales se encuentra la carta pasante y la boleta certificada. A partir de la aceptación tienes un año para acabar la tesis y exponerla en el exámen profesional.

Y como obtengo mi carta de pasante y la boleta global????

Pues en esa ceremonia te darán la boleta certificada. Pero leamos de nuevo el cartel, es HASTA SEPTIEMBRE.

Y nomás la boleta???? mmm... también un diploma que guardarás en un folder y lo olvidarás en un cajon, y una credencial de egresado (te lo juro.... los ingenuos creen que volveremos a UPIICSA ja....). Y la carta pasante???? Pues.... oigan, Zacatenco no podía quedarse con las ganas de hacer su propio trámite basura. Así que con la boleta APENAS podremos ir alla a tramitarla.

Y ya con la carta pasante que no sabemos en cuanto tiempo la tendrán, ya podemos entregar papeles de tesis. Solo que es absurdo el hecho de que el año que tienes para acabar la tesis no cuenta desde que das los papeles, sino desde que te autoriza el jefe de tu carrera el anteproyecto de tesis. Definiendo que sería absurdo empezar tu tesis desde ahorita, sino hasta que te den la carta pasante conviene estar otorgando tu anteproyecto... se podría antes, pero... y si no es aceptada, o si lo es, pero tendrás parada la tesis por lo mismo. En realidad si es frustrante, sobre todo por que en mi caso personal si deseo tener mi tesis terminada en un año y empezar la maestría. Incluso, por eso mismo, se optan por otras alternativas de titulación. En realidad no tengo nada en contra de los que hacen seminarios, escolaridad (que así yo me titulé de la vocacional), por maestría, prácticas profesionales, pero es muy desmotivante que no se impulse la iniciativa de alumnos a hacer algo por su propia cuenta... hasta donde yo lo veo, hasta parece que no les conviene que hagamos tesis.... o sino, que alguien me explique.

3.- No cabe duda que en el mundo de las tecnologías de la información, quien no se actualiza por un mes, pierde el hilo y muy feo. Cuantos de nosotros no revisamos blogs y foros que nos gustan. Pero esos comunmente llegan a ser más que solo 3. A la mejor tienes 7 blogs favoritos y olvidas revisarlos. Yo por ejemplo, aparte de los blogs que anuncio en esta página, sigo los siguientes:

Foros de nuevas tecnologías
http://conecti.ca/
http://www.puntogeek.com/
http://www.tequilavalley.com/
http://www.elcodigok.com.ar/

Un poco de cultura general
http://www.invdes.com.mx

Foros ñoños jaja
http://listocomics.com/
http://www.conectalo.es/
http://es.xkcd.com/xkcd-es/

Son blogs de mi agrado, los cuales cuentan con tecnología RSS para que lo puedan seguir desde sus RSS-feeds. Yo personalmente uso bloglines.

http://www.bloglines.com - Un RSS-Feed muy ordenado, muy simple de usar y libre.

Veran cuantos foros y blogs sigo. Al menos así es más ordenado. El punto aqui es seguir informado, que de por si, en las escuelas aun creen que C++ Builder es la panasea, el UML es algo hecho por el diablo y que los Just In Time son solo para industriales, mejor aprender del mundo real.

4.- Un poco de comedia visual. El día sabado 26, este video dió la vuelta al mundo en el mundo Geek, para el deleite de los javeros y la mofa de los punto-neteros.



Si si... muy geek... en realidad muy chistoso. Aunque hay algo que quisiera compartirles (igual esto me cuesta mi estancia en el grupo de upiicsalibre, pero debo de ser sincero). En el mundo de los developers, un gran porcentaje lo ocupan los javeros, haciendolo muy competitivo, incluso saturado. Y respecto a los que dominan .net son bien pocos, pero en el instante que se requiere un proyecto en .net los pocos que hay, como no tienen mucha competencia, son elegidos casi por inmediato. Se los dejo como tip, es un área muy poco explotada, pero por lo mismo, con mucha oportunidad de crecimiento (obvio, también eso implica que dejen la dependecia al VB6).

5.- Acabemos con más comedia, en este caso, más mundano. Espero que por el bien de las mujeres, este no haya sido su caso en su época de pubertad.



Los veo pronto... ;) Y ya no lloren por que la selección no ganó, seamos sinceros, sabíamos que pasaría (pero eso si.... sigamos haciendo sandwiches)

lunes, 14 de junio de 2010

Anécdotas de un ubuntero

Bueno.... despúes de todo un domingo, en mi compu ya tengo el Ubuntu 10.04.

Cuando vez esta pantalla sin que salga en WIndows una bluescreen o salga humo y chispas de tu lap, sabes que todo valió la pena.

Las ventajas de la nueva versión de Ubuntu 10.04 es que tiene un kernel mejorado que hace 50 mil cosas que tu no notarás, pero son cosas muy chidas, arranca y apaga tu compu más rápido, mucho más rápido que el Windows (que raro) y tiene 70 mil programas nuevos de los cuales, no usaras más de 10 si eres un novell y como 50 si ya tienes más experiencia. Los colores son psicodélicos y te harán sentir que estás en un viaje marihuanesco etc etc etc bla ble bli blo blu biridibaridibu


Algo que me he dado cuenta en el relajo de UPIICSALIBRE, es que si bien hay gente que le gusta el software libre, también hay gente que podría llegar a decir "y que más????". Van como 3 o 4 personas que piensan que una comunidad no solo debe andar dando propaganda y que no solo se dediquen a talleres, que bien podrian evitarse con un buen tutorial en internet, que de hecho, así aprenden los que imparten esos talleres. Ahora si que es un punto el cual, al menos por mi parte, intentaré considerar.

No se crean.... estamos concientes de que puede pasar :o

Y bien, dicho esto, ok, instale el ubuntu 10.04, la más reciente de LInux Ubuntu. Qué vas a decir???? Lo único que alguien podría hablar comúnmente son cosas que ya uno sabe.

La actualización tardo casi todo el día... en realidad, fue mpas por vanidad y ocio que por necesidad de actualizar XD

Bueno.... lo que no es común, es la opinión de la gente y sus experiencias.... qué he aprendido al usar Ubuntu, y no precisamente la nueva versión, sino en general:

  1. No instalen ninguna distro (distribución - no me pregunten, así le dicen ¬_¬) de Linux EN UNA MEMORIA O HD USB. Jaḿas!!!!!! El grub (listado de sistemas operativos a arrancar) tiende a pensar siempre que DEBE encontrar un sistema operativo en esa memoria. Conclusión... tu computadora no podrá arrancar sin el dispositivo donde lo instalaste, aun si en ese momento vas a usar el S.O. que está en el HD local (aun así, el grub te lo pedirá). Si intentas quitar la opción del S.O. del GRUB, tiende a aun así buscarlo, incluso, eso haría que como ya no surge esa opción.... pues ya no podrás acceder a él. Estúpida decisión.
  2. Pasos a seguir a instalar Windows y Linux. Primero particionen el disco duro. Luego instalen Windows en la primera partición, y al final, instalen las distros que quieran de linux en las demás particiones. Si lo hacen al reves.... NO QUEDA!!!! en serio, lo he intentado :(
  3. Saber Ubuntu no significa saber Linux.... interesante es cuando usen Debian u otras distros más "rústicas", y por rústicas, me refiero a que no sean tan gráficas y que tengas que pasar un buen ratito en el uso de la "Terminal", así que es mala idea que si solo has usado Ubuntu, pongas en tu curriculum que sabes usar Linux.... ellos esperan que sepas "ciertas cosas".
  4. Tampoco saber como poner el cubo de Ubuntu es saber usar Linux. Las palabras mágicas son "CompizConfig" y debes escribirlo en el gestor de descargas Synaptic. TAN TAN!!!! En un trabajo te pedirán subir una página a un servidor Linux, no que ese servidor tenga 4 pantallitas, que a veces, solo se tienen por payasada (me declaro culpable =D).
  5. Si no te gusta el OpenOffice, NO SUFRAS!!!!!!! Por eso por ahí tienes una partición con Windows para que uses el Office al que estás acostumbrado. "Oye no manches castelán, estas en UPIICSALIBRE y andas promocionando su uso". NOOOO!!!! Si no te gusta como se ve el openoffice, pues yo dijo que la computación te facilita la vida, no te la martiriza, por eso tanto anciano que le dpa miedo usar la computadora. Obviamente, si amas el software libre, pues ve usando el open poco a poco para que te acostumbres y agarres confianza.
  6. El punto 5 aplica para muchos softwares. GIMP por Photoshop, Firefox por IE, emesene por messenger, incluso, por que no, Linux por Windows. En lo personal, se sigue usando Windows no tanto por su gran impacto y ventajas, sino, mera costumbre!!!!
  7. El centro de software de ubuntu es maravilloso. Pero si no encuentras un software que deseés, no tengas miedo y busca en internet como instalarlo. Si intentas buscar un métod que no tenga que ver con las palabras "apt get install", mmmm pides mucho jajaja. No en serio, intentalo, algún día, tiene que salirte. Y sino, hay mucho geek linuxero en foros que pueden MEDIO ACONSEJARTE (tampoco te resolveran la vida).
  8. Los juegos son chidos XD, sino, les recomiendo Neverball y Armagetron Advanced (me parece que solo hay version Windows para el primero).
  9. Si existen virus para Linux, el que sean pocos es otra cosa. Es decir, si hay 5% de probabilidad de embarazarse usando condón (5 de cada 100 personas con pésima suerte), también debe haber 1 de 100 que tenga virus en linux, o 1 de 1000 o 1 de 100000, PERO LO HAY.... Hombre prevenido con antivirus, vale por 2.
  10. Cuál es el mejor messenger para Ubuntu??? emesene, he dicho.
  11. Quieres la nueva versión de Ubuntu???? Descarga la imagen ISO y quémala. No actualices. Por que???? Qué tiene de malo??? Hay fallas al actualizar??? No, la verdad no, pero es mas tardado (2 horas vs 12 HORAS, imaginense).
  12. Si les sale el gestor de actualizaciones, descargen con calma. Linux es más estable y no existen "fatality bluescreens".
  13. Depuren su GRUB, al actualizar, salen accesos a ubuntu con varias versiones de kernel. La única que sirve es siempre la más actual, las demás ya no están y los redirigirá a la versión actual ¬_¬
  14. Si a alguien le intentas imponer que use Linux, es como querer imponer a un católico que sea testigo de Jehova. En un momento, habrá alguien que te mande a la goma si lo presionas. Como mencioné antes, POCO A POCO!!!! Y ESO, SI QUIERE!!!
  15. En una partición de Linux, puedes acceder al 100% a la partición de Windows, SIN INGRESAR CLAVES!!!! Así que si un hermano y una hermana usan la misma compu, la hermana tiene Windows y el hermano Linux, niñaaaa.... tu ciberdiario será leido =D, y lo peor, tu no podrás delatar su porno por que la partición Windows no reconoce la partición de Linux ñaca ñaca
Si.... es centro de software!!!! Y puedes bajar los IDE's que requieras. Aunque claro, no sirven mucho si no sabes la diferencia entre un for y un while ¬_¬


Los juegos!!!! Sana diversión, pocos beneficios. Pero, a fin de cuentas... juegos =D y como siempre, con una tarjeta de video decente, puedes jugar los de 3D.

Pues... es lo que puedo decir hasta ahora. Si encuentro cosas rifadas en Ubuntu, se las haré saber. Solo les dejo unas imagenes finales de por que muchos prefieren linux.



Un sistema operativo que está muy abstraido y con pocas posibilidades de observar y manipular el código lo hace para los programadores muy aburrido y poco dinámico. Sobre todo con la gran cantidad de fallas y bluescreens

Que diferencia verdad??? Un sistema operativo más abierto y con mayor accesibilidad sin tantas fallas. Es decir, ubuntu significa unión, sino, su logotipo lo dice todo.

Cuidense!!! Bye!!!

jueves, 10 de junio de 2010

Ya ni siquiera Java... fundamentos de programación y estructuras de datos

Ok.... mucha disculpa, mucha mala fama, YA BASTA, EL DUEÑO DE ESTE BLOG SOY YO jajajajaja, ya lo saqué, sigamos con el espectáculo.

"¿Para que sirven las materias de estructura y representación de datos? ¿Porqué aun vemos teoría de la computación? ¿Qué caso tiene la materia de algoritmos computacionales? ENSEÑENOS PMP, JAVA, .NET, no cosas aburridas (para qué??? el maestro con que vayamos al teatro nos pasa esa materia fea)"

Conozcan a Michel Ruiz Tejeida. La primera persona que esta noche, practicamente me acaba de hacer ver que no soy tan buen informático como creia. Es decir, si uno se malacostumbra a programar usando IDE's, de todas maneras, Java y .net, las dos tecnologías más sobresalientes de la actualidad, ya hacen trabajo más facil. Pero como quiera que sea, uno se olvida de sus raices. C, C++, o incluso... ni las conocen.

Cosas más concretas

Las palabras "outportb" e "inportb"... quien me conteste donde ha escuchado eso antes, se gana una estrella de oro (y una paleta payaso si me dice para que sirven)

Y una de plata quien sepa en que está programado el kernel de cualquier distro de Linux

También Marisol de Televisa Deportes le dará un beso a quien sepa bien bien como usar un apuntador.

Si podria decirles la respuesta de las primeras dos, pero... igual y solo me quedo con un simple abrazo de Marisol, osea, es verdad, los actuales lenguajes si te desacostumbran feo.

Menos bla bla y más acción. Vean que que hablo con estos artículos que me envió Michel.

Los Riesgos de las Universidades-Java

Publicado por Javier el 1 de Junio de 2010

Este artículo de Joel Spolsky es, desde hace tiempo, uno de mis favoritos. Publicado originalmente en el año 2005, el paso del tiempo sólo lo ha hecho ganar rigor y actualidad.

Spolsky alerta sobre la creciente tendencia de muchas universidades a sobre-simplificar la currícula de las carreras de Ciencias de la Computación (con Java como “lenguaje insignia”), con el único objetivo de producir mayor cantidad de egresados y en menos tiempo. La consecuencia es directa: cada vez más abundan programadores que poco entienden de conceptos de programación (corrección, recursión, complejidad, paralelismo, entre tantos otros) y para los cuales los mecanismos “internos” de los sistemas informáticos (gestión de memoria, interacción con el sistema operativo, comunicación entre procesos, etc.) son completamente esotéricos.

El principal impulsor de este embrutecimiento es cierto sector de la llamada “Industria del Software” que requiere de mano de obra barata y de pobre formación, y empuja a las instituciones educativas a proveerles “recursos” tan rápido y en tanta cantidad como sea posible (ni qué decir de las instituciones educativas que ceden a esta presión).

Nadie está en contra de hacer la tarea del programador más simple, ni mucho menos de la evolución de los lenguajes y las metodologías de desarrollo de software. Lo que se reprocha aquí es la negación de la realidad como forma de evasión. Esto es: la necesidad de dotar a los programadores de ciertos conceptos, aún cuando esto provoque la deserción de quienes no puedan llegar a dominarlos (y mal que le pese al referido sector de la “Industria”).

Los Riesgos de las Universidades-Java

por Joel Spolsky
Jueves 29 de diciembre de 2005

Chicos perezosos.

¿Qué pasó con el trabajo duro?

Un seguro indicio de mi decadencia hacia la senilidad son mis continuas quejas y lamentos sobre “los chicos de hoy”, y cómo ya no quieren o no pueden hacer cosas difíciles.

Cuando yo era un muchacho, aprendí a programar con tarjetas perforadas. En esos tiempos si cometías un error, no tenías ninguna de esas modernas funciones como la tecla “backspace” para corregirlo. Tenias que tirar la tarjeta y empezar todo de nuevo.

Cuando empecé a entrevistar programadores en 1991, les dejaba usar generalmente cualquier lenguaje que quisieran para resolver los problemas de programación que les planteaba. El 99% de las veces, ellos elegían C.

Ahora ellos tienden a elegir Java.

No me malinterpreten: no hay nada malo con Java como lenguaje de implementación.

Un momento, quiero rectificar eso último. No digo, en este artículo en particular, que haya algo de malo con Java como lenguaje de implementación. Hay un montón de cosas mal con Java, pero tendrán que esperar hasta otro artículo.

En cambio, lo que quiero decir es que Java no es, generalmente, un lenguaje de programación lo suficientemente difícil para que pueda ser usado para distinguir entre excelentes programadores y programadores mediocres. Puede ser un buen lenguaje para trabajar, pero ese no es el tema de hoy. Puedo ir incluso mas allá y decir que el hecho de que Java no sea lo suficientemente difícil es una característica, no un bug, pero que tiene ese problema.

Si puedo ser atrevido, diría que en mi humilde experiencia han sido dos las cosas tradicionalmente enseñadas en las universidades como parte de la carrera de Ciencias de la Computación (CS) las que mucha gente nunca llega realmente a comprender: punteros y recursión.

En aquellos tiempos lo normal era empezar la universidad con un curso de estructuras de datos, con listas enlazadas, tablas hash y, por qué no, con un uso intensivo de punteros. Esos cursos eran frecuentemente usados como filtros: eran tan difíciles que cualquiera que no pudiera soportar el desafío mental de un grado en CS se daría por vencido, lo que era bueno, porque si piensas que los punteros son difíciles, espera hasta intentar probar cosas en teoría de punto fijo.

Todos esos chicos que lo habían hecho muy bien en la secundaria escribiendo juegos de “pong” en BASIC para su Apple II, iban a la universidad, tomaban el curso CompSci 101, sobre estructuras de datos, y cuando llegaban al asunto de los punteros, sus cerebros estallaban completamente; y lo próximo de lo que tenías noticias es que estaban especializándose en Ciencias Políticas, porque la escuela de leyes parecía ser una mejor idea. He visto todo tipo de de índices de deserción en CS y usualmente están entre el 40% y el 70%. Las universidades tienden a ver esto como un derroche; yo creo que es sólo la poda necesaria de gente que no va a ser feliz o exitosa en una carrera de programación.

El otro curso difícil para muchos jóvenes estudiantes de CS era el curso donde aprendías programación funcional, incluyendo programación recursiva. MIT puso una barrera muy alta en esos cursos, creando un curso obligatorio (6.001) y un libro de texto (Estructura e Interpretación de Programas de Computadora de Abelson y Sussman, el cual era usado en docenas o quizás cientos de carreras de CS prestigiosas como el estándar de facto para la introducción a las Ciencias de la Computación. (Puedes, y deberías echarle una ojeada a la antigua versión de las clases en línea).

La dificultad de esos cursos es asombrosa. En la primera clase has aprendido casi todo Scheme, y ya has sido introducido a la función de punto fijo que toma otra función como parámetro. Cuando me esforzaba en pasar un curso similar, CSE121 en Penn, observaba cómo muchos sino la mayoría de los estudiantes simplemente no lo lograba. La materia era muy difícil. Inclusive escribí un largo email de lloriqueando a mi profesor diciendo que “simplemente no era justo”. Alguien en Penn debe haberme escuchado (o a alguno de los otros llorones), porque ese curso se dicta ahora con Java.

Desearía que no hubiesen escuchado.

Aquí radica el quid del debate. Años de lloriqueo de estudiantes perezosos como yo, combinados con quejas de la industria acerca de cuan pocos graduados en CS salen de las universidades americanas, han pagado su precio, y en la ultima década un gran numero de otrora perfectamente buenas universidades se han vuelto 100% Java. Esta de moda, a los reclutadores que usan “grep” parece gustarles, y, lo mejor de todo, no hay nada lo suficientemente difícil en Java como para filtrar aquellos programadores sin la parte del cerebro que entiende punteros y recursión. Así es que la deserción es menor, y los departamentos de ciencias de la computación tienen mas alumnos y mayores presupuestos y todo está bien.

Los afortunados chicos de esas Universidades-Java nunca van a toparse con raros fallos de segmentación tratando de implementar tablas hash basadas en punteros. Nunca se van a volver locos tratando de empaquetar cosas en bits. Nunca tendrán que ocupar sus cabezas en cómo en un lenguaje puramente funcional, el valor de una variable nunca cambia, y aun así, ¡cambia todo el tiempo! ¡Una paradoja!

Ellos no necesitan esa parte del cerebro para obtener un 4 en la materia.

¿Soy sólo uno de esos viejos cascarrabias anticuados, vanagloriándose acerca de cuán duro era sobrevivir a todas esas dificultades?

Rayos, en 1900, el Latín y el Griego eran asignaturas requeridas en la universidad, no porque sirvieran de algún propósito, sino porque de alguna manera eran considerados un requisito obvio de la gente educada. De cierta manera mi argumento no es diferente del argumento expuesto por la gente pro-Latín: “[El Latín] entrena tu mente. Entrena tu memoria. Desembrollar una sentencia en Latín es un excelente ejercicio del pensamiento, un verdadero acertijo intelectual y una buena introducción al pensamiento lógico”, escribe Scout Barrer. Pero ya no puedo encontrar una sola universidad que requiera Latín. ¿Son los punteros y la recursión el Latín y el Griego de las ciencias de la computación?

Ahora, admito que programar con punteros no es necesario en el 90% del código escrito en la actualidad, y de hecho es totalmente peligroso en el código de producción. OK. Está bien. Y que la programación funcional no es muy empleada en la práctica. De acuerdo.

Pero todavía sigue siendo importante para algunos de las tareas más excitantes en programación. Sin punteros, por ejemplo, nunca serías capaz de trabajar en el Kernel de Linux. No puedes entender una sola línea del código de Linux, o de hecho, de cualquier sistema operativo, sin realmente entender punteros.

Sin entender programación funcional, no podrás inventar MapReduce, el algoritmo que hace Google tan masivamente escalable. Los términos Map y Reduce vienen de Lisp y la programación funcional. MapReduce es, en retrospectiva, obvio para cualquiera que recuerde de su clase equivalente a 6.001 que los programas puramente funcionales no tienen efectos colaterales y por ende son trivialmente paralelizables. El simple hecho que Google inventara MapReduce, y no Microsoft, dice algo del por qué Microsoft está aun jugando a lograr que funcionen algunas características básicas de búsqueda, mientras Google se ha movido ya al siguiente problema: construir Skynet^H^H^H^H^H^H, la mayor supercomputadoramasivamente paralela del mundo. Simplemente no creo que Microsoft entienda completamente cuan retrasados están en ese campo.

Pero mas allá de la importancia a simple vista de los punteros y la recursión, su valor real radica en que construir grandes sistemas requiere del tipo de flexibilidad mental que adquieres aprendiéndolos, y de la actitud mental que necesitas para no huir de los cursos en donde son enseñados. Punteros y recursión requieren cierta habilidad para razonar, para pensar en abstracciones, y más importante, para ver un problema en diversos niveles de abstracción simultáneamente. Por lo tanto, la habilidad para entender punteros y recursión esta directamente correlacionada con la habilidad de ser un gran programador.

No hay nada en grado académico 100% Java que realmente descarte a los estudiantes que carecen de la agilidad mental para tratar con esos conceptos. Como empleador, he visto que las Universidades 100% Java han empezado a producir en serie una buena cantidad de graduados quienes simplemente no son lo suficientemente listos para trabajar como programadores en nada mas sofisticado que “Sólo Otra Aplicación Contable en Java”, aunque se las han arreglado para colarse a través de la (ahora simplificada) carrera. Esos estudiantes nunca sobrevivirían al 6.001 del MIT o al CS 323 en Yale y, francamente, esa es una razón por la cual, como empleador, un título en CS del MIT o Yale tiene más peso que uno de Duke, que recientemente se hizo 100%-Java, o de Penn, donde remplazaron Scheme y ML por Java tratando de enseñar la materia que casi nos mata a mis compañeros y a mi, CSE121. No es que no quiera contratar chicos listos de Duke o Penn, lo hago, es sólo que es mucho más difícil para mí darme cuenta de cuáles son. Yo estaba acostumbrado a decir que los chicos listos eran aquellos que podían desmenuzar un algoritmo recursivo en segundos, o implementar funciones de manipulación de listas enlazadas usando punteros tan rápido como podían escribir en la pizarra. Pero con graduado sde Universidades-Java, no puedo saber si padecen esos problemas a causa de haber sido mal educados o si los padecen porque realmente carecen de esa parte del cerebro que van a necesitar para ser buenos programadores en el trabajo. Paul Graham los llama “Blub Programmers“.

Ya es bastante malo que las Universidades-Java fallen en filtrar los chicos que nunca van a ser buenos programadores, algo que las universidades podrían justificablemente decir que no es su problema. Después de todo es la industria, o al menos los reclutadores-que-usan-grep, quien está pidiendo a gritos que se enseñe Java.

Pero las Universidades-Java fallan también en entrenar las mente de los chicos para ser hábiles, ágiles y lo suficientemente flexibles para lograr buen diseño de software (y no me refiero al “diseño” OO, donde gastas incontables horas acomodando tu jerarquía de objetos, o preocupándote de “problemas” superfluos como “tiene-un” vs. “es-un”). Necesitas entrenamiento para pensar en las cosas a varios niveles de abstracción simultáneamente, y ese tipo de pensamiento es exactamente lo que necesitas para diseñar excelentes arquitecturas de software.

Puedes estar preguntándote si la enseñanza de programación orientada a objetos (OOP) es un buen sustituto de los punteros y la recursión para el filtrado. La respuesta rápida: no. Sin debatir acerca de los meritos de la OOP, simplemente no es lo suficientemente difícil para filtrar a los programadores mediocres. OOP en las universidades consiste básicamente en memorizar un puñado de términos de vocabulario como “encapsulacion” y “herencia” y tomar exámenes del tipo “multiple-choice” acerca de las diferencias entre polimorfismo y sobrecarga. No más difícil que memorizar fechas destacadas y nombres en una clase de historia, la OOP tiene desafíos mentales inadecuados para espantar a los estudiantes de primer año. Cuando te enfrentas con un problema de OOP, tu programa aun funciona, sólo que es algo difícil de mantener. Supuestamente. Pero cuando te enfrentas a un problema con punteros, tu programa produce línea Fallo de segmentación y no tienes ni la menor idea de lo que está pasando, hasta que te paras, tomas una fuerte bocanada de aire y tratas de forzar tu mente a trabajar en dos diferentes niveles de abstracción simultáneamente.

Los reclutadores-que-usan-grep, de hecho, son ridiculizados aquí, y por un buen motivo. Nunca he conocido alguien que pueda usar Scheme, Haskell y punteros en C, que no pueda entender Java en dos días, y crear mejor código en Java que gente con cinco años de experiencia en Java. Pero trata de explicar eso al zombie de Recursos Humanos.

¿Pero que hay de la misión del compromiso con las CS de las facultades de CS? ¡Ellas no son escuelas vocacionales! No debería ser su trabajo entrenar gente para trabajar en la industria. Eso queda para los terciarios y los programas de capacitación del gobierno para trabajadores desplazados, dirán. Ellas se suponen que están para dar a los estudiantes las herramientas fundamentales para vivir sus vidas, no para prepararlos para sus primeras semanas de trabajo. ¿No es cierto?

Aun así, las CS son demostraciones (recursión), algoritmos (recursión), lenguajes (cálculo lambda), sistemas operativos (punteros), compiladores (cálculo lambda), y entonces la conclusión es que la Universidad-Java que no enseña C y no enseña Scheme, tampoco está enseñando realmente ciencias de la computación. Tan inútil como el concepto de currificación de funciones puede serle al mundo real, es un obvio prerrequisito para un graduado en CS. No puedo entender por qué los profesores en las comisiones curriculares de las facultades de CS han permitido que sus programas sean embrutecidos a tal punto que no sólo no pueden producir programadores operativos, sino que ya ni siquiera pueden producir graduados en CS que puedan obtener PhDs y puedan competir por sus puestos de trabajo. Oh, esperen. No importa. Quizás entienda.

Si volvemos en el tiempo y analizamos las discusiones que tomaron lugar en el mundo académico durante el “Gran Levantamiento Java”, encontraremos que la mayor preocupación fue que Java no era lo suficientemente simple para ser usado como un lenguaje de enseñanza.

Mi Dios, pensé, ¡están tratando de embrutecer la curricula aun mas! ¿Por que mejor no le llevamos la comida a la boca a los estudiantes? Dejemos que los ayudantes de cátedra den los exámenes por ellos también, entonces nadie se cambiara a Estudios Americanos. ¿Cómo se supone que alguien aprenderá algo si la curricula ha sido cuidadosamente diseñada para hacer todo más fácil de lo que ya es? Parece haber una comisión de trabajo (PDF) intentando idear un subconjunto simple de Java que pueda ser enseñado a estudiantes, produciendo documentación simplificada que esconde cuidadosamente toda esa basura EJB/J2EE de sus tiernas mentes, de manera tal que no tengan que preocupar sus cabecitas con otras clases que no necesiten para resolver sus aun más fáciles problemas de CS.

La interpretación mas compasiva de por qué las facultades CS son tan entusiastas en embrutecer sus clases es porque ello les dará más tiempo para enseñar verdaderos conceptos de CS, así no necesitaran dos clases enteras para esclarecer a los alumnos las diferencias entre, digamos, un int y un Integer en Java. Bueno pero si ese fuera el caso, 6.001 tiene la respuesta perfecta: Scheme, un lenguaje de enseñanza tan simple que el lenguaje entero puede enseñarse a estudiantes brillantes en unos 10 minutos; entonces puedes gastar el resto del semestre enseñando puntos fijos.

Fiu…

Voy a regresar a los unos y ceros.

domingo, 6 de junio de 2010

Obras, programitas, metrobuses eficientes, grandes licenciados e ingenieros y acelerómetros

A dos días de acabar esta gran locura llamada UPIICSA. Que puedo decir??? Felicidad, nostalgia, muchas cosas, pero, mejor escribo antes de que se me pasen jaja.


Que paso con los programas de control numérico??? Si ehh??? Les pase a muchos los programas (identidades no reveladas, x obvias razones), pero si me encantaría que me comentaran como les fue??? Si los tronaron por traer programas con código fuente "similar" o de plano, el maestro fue tan ingenuo que en ningún caso se dió cuenta. Bueno, espero que les haya sido de utilidad a quienes les pase los programas, dado a que al menos, en 6to, yo veia de más prioridad las materias de estadísticas, redes-conectividad, y sobre todo, ingeniería del conocimiento y diseño-desarrollo de software.

No me confundan.... a mi me choca regalar calificaciones con trabajos ya hechos a gente desconocida, pero esto fue en memoria de las clases desperdiciadas donde pudimos haber, al menos, manejado una de esas CNC :(

Mantenganme al tanto, ya saben, un mensaje al formulario de (ahora) la izquierda :P

A vivir
Como lo menciona en el último post de mi amigo Wata, igual a mí, el maestro Lopéz Estevez nos dejó ir a la obra "A vivir" del actor Odyn Dupeyron.


De que trata la obra??? No les conviene que se las dija. En serio... - ¿Cómo que no? - En mi opinión, no toda la gente estaría dispuesta a entender el mensaje de la obra (neta, hay gente que.... sencillamente, no merece ser libre, solo por el hecho de que no sabe ser libre).

Esta incógnita que les dejo es para tentarlos a ver la obra... Teatro Ofelia los Miércoles 8:45 p.m. y Domingos 6 p.m. 350 pesos. Oirán frases como...
  • La gente solamente muere cuando te olvidas de ella.
  • No se avergüensen por ser quienes son, no hagan nada por el miedo a no pertenecer.
  • Tu no eres una piedra, tu sientes y piensas, no como la piedra.
  • La mayores investigaciones han demostrado que las personas mas ricas que mueren, a final de cuentas... MUEREN.
  • Y mi favorita... El futuro será aquel momento en el que te arrepentirás de no haber hecho lo que debes hacer hoy.
Un gran éxito ingenieril n_n
Un artículo, el cual, a pesar de que no se oye tan tan complicado para los que ya saben, a veces uno diría "por qué no lo pense antes???".
Estudiantes de INGENIERÍA EN INFORMÁTICA Y DE TRANSPORTE DE LA UPIICSA proponen esto:

"La primera fase del proyecto pretende reducir demoras por medio de la instalación de sensores en los semáforos de las intersecciones viales en la Línea 2, que serían gobernados por un sistema informático capaz de alimentar una base de datos que ayudaría a la toma de decisiones operacionales en este sistema de transporte"

En serio... los envidio, hubiera pensado eso antes jaja. Felicidades a
  • Alma Laura Aranda Rojas
  • Christián Arroyo González
  • Alfredo Pérez Serrano
  • Blanca Estela Rodríguez Martínez
  • Carlos Omar Hernández Osorio
Más información en este artículo.

Oh mi metrobus... pasaras por las manos de locos upiicsianos

No somos tan diferentes e incluso hay quienes rifan
Ya saliendo de UPIICSA, aprendes que tanto la licneciatura y la ingeniería en informática no son tan diferentes. A veces, solo es cuestión de actitud. Por ejemplo, el licenciado burlón critica al ingeniero por que siempre se quedará en el lado táctico, mientras que el ingeniero burlón critica al licenciado por querer ser el mandón que no sabe como es que la computadora trabaja.

Pero que pasaría x ejemplo, si vemos a un ingeniero en informática con una certificación de PMP, o a un licenciado con una certificación CISCO????

Es más, aun me acuerdo de 2 licenciados que estuvieron en el curso de microcontroladores, cuando no se les son requeridos tener esa especialidad.

Ok... ejemplos tangibles.

Les presento a OsoSoftware... ¿QUEEEÉ?... asi es su apodo, estudiante de 6to de licenciatura en ciencias de la informática. Mientras que... x ejemplo, yo, no soy muy especializado en redes, y cuando entregé mi proyecto de redes y conectividad fue levantar una pobre página web en una mini red LAN de 4 lap tops, este sujetito, entrega por proyecto UNA AUDITORIA PARA VERIFICAR LA SEGURIDAD DE UNA RED INALÁMBRICA CON SEGURIDAD WEP.

Pueden verlo desde su blog. Espero que saque más artículos.

Neta.... les juro que en lo personal, lo ví, y me impresionó. Y es un modelo a seguir, no solo para licenciados, sino para ingenieros, para no conformarse en solo su rama.

Acelerómetros.
En la materia de instrumentación virtual se pidió el diseño de un instrumento virtual. A pesar de solo ser diseño, mi equipo y yo pensamos en el uso de acelerómetros para la medición de movimiento. No les puedo pasar mi proyecto, dado a que.... planeo extrapolarlo para otros fines (luego comentaré acerca de ellos). Pero para ello, me basé en las siguientes páginas
http://www.pyroelectro.com/tutorials/accel_intro/index.html (aquí viene TODO casi casi)
http://www.sparkfun.com/datasheets/Components/SMD/adxl335.pdf (la información del acelerómetro que utilicé)
http://wiring.org.co/learning/basics/accelerometer.html (como se conecta)

Es una cosa bien chiquita, y para medir movimiento... en realidad si dirias wooow (se usa actualmente en los celulares y sobre todo, en el control del Wii)

A la mejor, el código para el microcontrolador era lo complicado.... pero vamos, para un termometrito, se usa un convertidor analógico - digital, los cuales pueden estar en el mismo microcontrolador, con el acelerómetro se usan tres de esos convertidores (para manejar los 3 ejes del movimiento X, Y y Z).

Este último tema fué muy teto, pero se los quise compartir.

-----------------------------------------------------------------------------------------------
Una humilde fé de erratas (Actualización)

Respecto a mi post de "A veces siento que retrocedo", si llegué a poner una imagen de alguien que me insultaba en la página de upiicsalibre. Tuve mi sospechoso (por el nombre que utilizaron "ray"). Y si.... me prendí, es decir, creo q como cualquiera. Y SIIIIII, reclame que madurara.

Y así como reconozco lo que hice, tambien reconozco que SIIIIII, me equivoque, xq para colmo de males, ni siquiera se trataba de quien pense que era ¬_¬. Lo que muchos en el entorno jeek llamarian un "epic fatal fail".

Pero como bien debo hacerlo, y como creo q esa persona que dude de ella, supongo que merece una disculpa (SIIIII.... te pido una disculpa - notarán que pongo mucho eso de SIIII, es para enfatizar que en serio lo ando haciendo y no por jalada). Obviamente, en primera, debo quitar esa parte de mi post por que ni la debe ni la teme el chavo. Y pues, bueno, el error hecho está, ya lo cometí dos veces en este blog de andar echando guerrita cuando se supone que no debo de hacerlo, dado a que de cierta manera, este apestoso blog es un reflejo de mi ñoña personalidad.

Aunque... solo cabe destacar que después se me quiso reclamar acerca de un post del cual YA ME HABIA OLVIDADO (comment tipo "te llevas y no te aguantas"). En el que... si más no recuerdo, hasta reconocí mi falta de madurez. Bueno, obvio, sigo pensando que fue una inmadurez y que por supuesto como persona lo tengo presente para al menos no repetirlo mucho.

Al final me dicen que me odian muchos en la escuela... eso, ya es algo un poco.... mmm... como decirlo????... mejor ni le pienso y prefiero quedarme con lo que me dice mi estimado Alberto, la frase de Juan Rulfo... "si oyes ladrar los perros es señal de que ya vas llegando".