30 de marzo de 2010
Advanced Programming in the UNIX Environment
Pensaba que me iba a costar menos tiempo, pero al final me ha costado un mes leerme el pedazo de tocho del señor Stevens. Y me he saltado los cinco últimos capítulos. Pero es una maravilla de libro: primero porque demuestra que no han inventado nada en 40 años y luego porque Stevens era un ingeniero de los de antes, que necesitaba saber de dónde sale cada cosa.

No hay en el libro un talento innovador como el de Ritchie, pero tampoco sesudos retruécanos como los de Knuth. Aquí lo que hay es una fanática obsesión por el conocimiento del más mínimo detalle de un sistema operativo como la familia UNIX. Ni más ni menos.

Es de agradecer también que el señor Stevens no nos ilustre con chistecillos de facultad ni nos cuente anécdotas de sus viejos tiempos. Eso lo reservaba para su página web. Ahora que ya ha muerto sólo nos queda la duda de si es bueno trabajar tanto. Por mi parte voy a dedicarme ahora a aprender los comandos del Vim.

Actualización:
Otro ejemplo de por qué las cosas que te importan no hay que hacerlas con criterios de factoría de software es esta aplicación con la que hago el blog. En vez de meterme en paquetes ajenos y acabar enfangado entre chapuzas, me hice las cosas a mi gusto. Y aunque en su momento me costó más de lo que esperaba y hasta pensé que había hecho el tonto, porque el wordpress parecía lo guay entre lo guay, ahora hace dos años que me va como un tirito y le meto lo que quiero, como por ejemplo la transformación a EPUB. Lo que vosotros leéis no es más que HTML, la base de datos sólo se toca para insertar o actualizar.

16:57:26 ---------------------  

2016 en Denia (Alberto Noguera)
El implacable retrato del desencanto y la corrosión de las ilusiones en la España de principios de siglo.
Comprar por 3,59€ en Amazon.

26 comentarios:

juanes:
estos libros que comentas con tanto jubilo me los lei yo hace 20 años...y si,se han inventado muchas cosas desde que fueron escritos,hay que quedarse con que lo bueno permanece en la retina.
30 de marzo de 2010 a las 18:21.  

Spartan:
Convendrás conmigo que la industria de la automoción no ha inventado nada nuevo en los últimos... ¿50 años?. Al final todo se reduce a un habitáculo sobre cuatro ruedas propulsado por un motor.
30 de marzo de 2010 a las 18:57.  

Currito:
Alberto es de admirar el esfuerzo que realizas en el tema de informática, ya que estás leyendo libros que son altamente recomendables, de hecho casi todos ellos se estudian/empollan en la carrera (si hace mucho tiempo estudié informática, cuando era informática a secas, ni informática de sistemas, ni informática de gestión como ahora, cuando todavía no podías explicar a los amigos que estudiabas -no te entendían- y eras algo o muy freaky, y vaya por delante que todo lo que aprendes dentro de la universidad lo puedes aprender fuera, como en todas las carreras).

De todas formas creo que equivocas el tiro en cuanto a ciertas opiniones del tipo "en los últimos 40 años no se ha inventado nada", puede que no se haya inventado nada pero se ha mejorado mucho, la evolución de los lenguajes ha sido tremenda -no me veo implementando un Sistema de información para una empresa en C o Pascal-, la Programación Orientada a Objetos y en concreto Java nos ha permitido por fin programar como se debe, la verdad es que cuando acabé la carrera hacer una aplicación con proceso distribuido en varias máquinas sería un suplicio (ya nos costaba muchas horas de trabajo hacer un programa que transmitiera un fichero de un ordenador a otro), en bases de datos por suerte también se ha avanzado bastante, nada que ver el Oracle actual con las Bases de Datos, o gestores de ficheros de antaño y así hasta la saciedad.

Eso si todo esto tiene una desventaja, parece y solo digo parece que programar es más facil y que cualquiera porque sepa hacer el programa "Hola Mundo" cree que ya es PROGRAMADOR, pero programar bien sigue siendo dificil, muy dificil, probablemente más que antes ya que la estructura de los programas es más complicada, antes era secuencial y ahora debes tener en cuenta eventos, interrupciones, hilos paralelos...

Finalmente decirte que los comandos del vi no hace falta apendértelos, casi todo el mundo que lo hemos sufrido/amado (se conoce en estas 2 etapas) los aprendimos a fuerza de usarlo (muchas lineas de código picado), ya que al igual que programar no es juntar un montón de lineas, conocer vi no es saber sus comandos.

Saludos
30 de marzo de 2010 a las 19:08.  

 alberto 
:

Cuando digo que no se ha inventado nada me refiero a algo que permita hacer más con menos recursos. Porque los javas y otras innovaciones a mi no experto entender dan la imagen de paquetes y más paquetes de código que cada vez desperdician más recursos. El paradigma es el mismo, sólo que la acumulación de código a lo largo de los años permite ir ahorrando esfuerzos en según qué cosas. Si apareciese alguien que pudiese hacer en un móvil lo que yo hago en un PC, entonces ese sería el verdadero crack y el nuevo Dennis Ritchie, pero esa persona parece que no existe.
30 de marzo de 2010 a las 19:19.  

un indocumentado:
Hola

Claro que ir añadiendo capas de abstracion una encima de la otra hace que todo vaya mas lento.
Por supuesto, pero a quien le importa?

Cuando hay un cuello de botella , entonces es cuando se optimiza para ello, hasta entonces el tema es secundario.

Saludos.
30 de marzo de 2010 a las 19:57.  

Spartan:
Sobre la actualización: ¿Cuando dices que te hiciste las cosas a tu gusto, a que te refieres? Supongo que aunque no uses wordpress, manejaras el sitio con un gestor de contenidos tipo Drupal o por el estilo...
30 de marzo de 2010 a las 20:20.  

 alberto 
:

No sé lo que es Drupal. Me hice mi base de datos y mis scripts en php picados completamente por mí. Antes de eso tuve que succionar con expresiones regulares todos los comentarios y todas las entradas de los html que había generado Blogger y meterlos en el PostgreSQL. Ya hablé del tema en su momento, aunque no sé si lo expliqué muy bien.

A mi gusto me refiero a que nunca me ha gustado el sistema de consultar la base de datos con cada lectura. Estoy mucho más tranquilo fabricando los html y dejándolos en la carpeta correspondiente. Porque creo que no pensar seriamente en la escalabilidad de tu web es planificar para el fracaso.
30 de marzo de 2010 a las 21:46.  

enteraillo.com:
puedes tener las bondades de ambas arquitecturas. Tienes un gestor de contenidos y vas "estatizando" periódicamente el sitio web para dar mejor servicio y preservar la escalabilidad
31 de marzo de 2010 a las 08:01.  

Lego:
Teniendo Joomla, Drupal, Wordpress, Plone, etc...no veo la necesidad de empezar de 0 un blog. Allá cada cual.
31 de marzo de 2010 a las 09:56.  

Honore de Balzac:
Querido Alberto: he estado leyendo tu post, así como los comentarios, y creo entender tu filosofía, cuando comentas que se ha innovado poco en las últimas dos décadas. Si creo que se ha popularizado la tecnología, incluso abaratado, pero no ha habido creación radicalmente nueva. En el caso de la informática, y más que de la informática, en las TIC, ya comenté en otra de tus publicaciones que se debe, sobre todo, a la falta de nuevos modelos de negocio y uso, así como al insultante oligopolio de las telecomunicaciones y de los fabricantes de software. No hay más que ver la actitud de César Alierta en tu post "Mangantizaciones" ( http://www.albertonoguera.com/2010/03/mangantizaciones.html ). No obstante, yo con Alierta me iría a tomar unos cubatas, tiene pinta del típico jefe pasota pero juerguista, el típico que ha llegado a donde está por clase y familia. Typical spanish.

Personalmente opino que la principal traba para innovar se debe sobre todo, a la creación acotada. Este concepto, que leí en un artículo de periódico, en el que entrevistaban a un físico, es lo mismo que has comentado tú, en lenguaje natural: están todo el día bombardeando con los móviles de nueva generación, pero ni de coña sustituyen al PC, y en muchos casos, lo máximo que se hace es hablar, enviar sms y leer el email. Eso lo hacía yo con mi móvil del 2002. Eso es la creación acotada: parece nuevo, pero no sólo es casi lo que había, sino que no hace lo que dicen que hace. También pasa en otros mundos tecnológicos, como la automoción. Han llenado los coches de electrónica, pero en esencia, esa electrónica a veces plantea más problemas que soluciones. Y que decir en el mundo de la energía. Seguimos consumiendo petróleo a saco, y la generación de energía es anticuada y tremendamente costosa. Creo que aquí la razón de la poca innovación se debe a los lobbies de la industria y la energía, temerosos de perder privilegios. El tío del artículo decía una cosa que lo ilustraba: fíjate si quedan cosas por hacer, que el hombre sigue pescando animales salvajes, como cuando estábamos en cuevas. Ni siquiera hemos pensado en crear métodos de abastecimiento de alimentos para evitar que se agoten los recursos del planeta.

Creo que el futuro, a corto plazo, más que innovar, se centrará en resolver problemas. Para mí, hay tres problemas clave: la superpoblación, el agotamiento de los recursos naturales y la generación de energía. Son tres problemas ligados totalmente al hombre e interrelacionados, pero que sólo se podrán resolver mediante innovación radical. Y creo que hay mucha gente pensando en crear iniciativas para resolverlos parcialmente, pero me temo que el horizonte temporal de décadas se nos queda corto.

"Sólo es posible avanzar cuando se mira lejos. Solo cabe progresar cuando se piensa en grande."

J.Ortega y Gasset
31 de marzo de 2010 a las 10:26.  

Anonimo:
Hola Alberto:

La verdad, yo fui informatico en "la era del perdrusco". Soy físico en una especialidad que ya no existe, porque al aparecer la ingeniería de Teleco por una parte y la de informática por otra, aquella rama de la física se "ingenierizo" y dejo de ser investigación ( que es lo que hacen los fisicos, en teoría ), y lo asumieron las ingenierías, por lo que la especialidad, se extinguío ( era "Calculo Automático" ).

Bien, la verdad, es que todos los libros antiguos que comentas, yo los estudié, y además, programé en "codigo máquina", osea en binario en los procesadores.

Lo que ha ocurrido, es que se han creado lenguajes que "adornan" por encima y facilitan la programación por un lado, pero ampliando muchísimo el código. Además, ha aparecido la programación concurrente ( en paralelo ) y no la secuencial, lo que hace que se comlejice más el código, porque al final, TODO se convierte en códigos binarios y "codigo máquina" o "ensamblador".

Al final, eso si, todo sigue siendo "secuencial en el código", aunque con procesos que se pueden ejecutar en multiproceso, en paralelo, pero el código de más bajo nivel, es un código secuencial, aunque que eso si, procese en paralelo las funciones entre los varios procesadores, o las funciones paralelas que pueden hacer los procesadores.

Por ello, se ha perdido hoy mucha eficiencia, pero se ha ganado en "imagen, multimedia, conectividad, etc. ).

No me imagino facilmene a casi nadie, hoy programando en 64K todo lo que llevó la capsula del Apolo XII cuando fué a la luna ni con dicha eficiencia, pero claro, era en pantallitas con solo caracteres alfanuméricos y no Windows ni multimedia.

¡ Cada cosa sirve para lo que sirve !, pero una cosa es clara. La base de todo, como dices, Alberto está en los "clásicos", y quien aprende con ellos, sabrá siempre lo que hace, porqué lo hace y como lo hace, y programará de una manera altamente eficiente.

Pero, como siempre digo, es solo mi visión, tan criticable y opinable como otras, y abierta a críticas.

Un saludo a todos.
31 de marzo de 2010 a las 11:21.  

Javi:
No estoy nada de acuerdo contigo en la afirmacion de que no se ha inventado nada en 40 años.

A parte del avance tecnológico lógico, todavia me acuerdo como mi padre se compro un PC hace 25 años por 500.000 pelas de las de antes (para que os hagais una idea un 205 con todos los extras les salio por 800.000) el avance en programacion propiamente dicha ha sido espectacular.

Comenzando por internet (que sirve para mas cosas a parte de piratear pelis y ver porno) y siguiendo por el desarrollo del SO Linux. Ahora parece una tonteria, pero hace 30 años cuando costaba una pasta la licencia de un SO si les llegan a decir que ahora tendríamos un SO gratuito (asi como una cantidad brutal de software tambien gratuito) nos tomarian por locos, y la principal razon de haber podido desarrollar este SO ha sido gracias a Internet. Todavía parece que no nos hemos dado cuenta, pero internet esta cambiando el mundo y el que no quiera verlo...

En temas de seguridad no puedes hacer una idea de lo se ha avanzado y de lo que se esta investigando en la actualidad...

Y si te refieres a temas de programación propiamente dicha te recomiendo que leas algo sobre programación lógica y programación funcional.

Tanto en temas de capacidad de computación, como en precio y calidad del software la evolucion ha sido muy grande, realmente de pelicula de ciencia ficción.

Ojo que yo soy de los que prefiere (y trabaja) con lenguaje C antes que con java, pero que C siga siendo un lenguaje muy potente no significa que no se haya evolucionado, quizas no tanto en el campo de los lenguajes de programacion, pero ese solo es un campo de los muchos que engloba la informatica
31 de marzo de 2010 a las 16:54.  

EL_MALIGNO:
Alberto, estoy siempre bastante de acuerdo contigo pero, amigo, has soltado una barbaridad legendaria.

Si retrocedemos 40 años atrás, a 1970, resulta que no había Internet, ni móviles, ni PC, ni muchos de los lenguajes de programación existentes, ni existía la orientación a objeto, ni máquinas virtuales, ni servidores web, ni PDA, ni ebooks...

Madre mía, no sé como puedes decir todo eso y quedarte tan tranquilo.

Y sí, soy ingeniero de telecos y me dedico desde hace bastantes años al sector de las TIC.
31 de marzo de 2010 a las 17:48.  

astronauta:
Maligno:

Se nota que no eres "informático" (ni siquiera autodidacta): En 1970 sí había máquinas virtuales (IBM), ARPANET se inició en 1968, Smalltalk -lenguaje orientado a objetos- (1969/1970), UNIX (1970), el TAO de Knuth en 1962, Lisp en 1958. el lenguaje ML en 1973, SQL (1974), etc.

La ingenuidad con que Alberto va descubriendo las fuentes de la informatica me parece entrañable, en lugar de dejarse engatusar por los refritos mediocres de terceros (que pueden estar bien, después de haber comprendido a los clásicos, independientemente del campo de conocimiento que se estudie).

Lo que no me imaginaba es que se pasase a usar vi(1976)/vim(1991), mi editor de textos favorito.
31 de marzo de 2010 a las 21:32.  

Improductivo:
Por si la inquietud con el Vi va en serio
http://docstore.mik.ua/orelly/unix2.1/vi/index.htm
1 de abril de 2010 a las 11:18.  

ramix:
Alberto, haces bien empezando por C y UNIX, pues entendiendo los clásicos, entiendes fácilmente todo lo derivado, que es todo lo que hay. Cuando te canses de programar secuencialmente y eficientemente, te recomiendo que te leas algún libro de C++ o de programación orientada a objetos, pues no serás más eficiente, pero podrás resolver fácilmente problemas más complejos que con la programación secuencial.
1 de abril de 2010 a las 14:31.  

Manueru:
Me temo que con C es más que suficiente para resolver cualquier problema, dado que la programación orientada a objetos es un paradigma, una forma de hacer. Los lenguajes OO simplemente aportan más facilidades para poder hacer uso de dicho paradigma. De hecho, conceptos como la ocultación de la implementación se llevan a la práctica de forma más natural en C que en C++, y la herencia del tipo es un es casi siempre suficiente y fácilmente implementable en C.
1 de abril de 2010 a las 21:56.  

Spartan:
La programación Orientada a Objetos se esta enseñando a los estudiantes desde el primer día. Siempre he pensado que esto es un peligro, ya que al aprender de esta manera, los futuros programadores tienen una tendencia tremenda hacia lo conceptual, en lugar de hacia lo funcional. Cuando te enseñan a el paradigma OO sientes que lo que escribes solo es bueno si el programa es un modelo del mundo real, donde hay abstracciones que se corresponden con objetos externos. (Así, para hacer una calculadora nos crearemos clases divisor, dividendo, multiplicando, multiplicador... y así hasta llegar al absurdo). Es decir, el paradigma OO esta orientado para crear un modelo o una abstracción de la realidad. No es procedimental en absoluto. De hecho, hay lenguajes -como Java, me parece- que no te permiten escribir código si no es como método o función dentro de una clase. No hay una función main donde vas y escribes lo que hace el programa, sino que estás obligado a crear una clase, cosa que en muchas ocasiones no es ni necesario ni deseable.

Tampoco es que la OO sea el demonio. Es util para muchas cosas. No obstante, Alberto, por si no lo conoces ya, te recomiendo un clásico: La entrevista apócrifa a Bjarne Stroustrup, uno de los creadores de C++, que afirma que en realidad lo que pretendia con C++ y la OO era alargar los tiempos de desarrollo y que los programadores pudieran vivir mejor y cobrar mas.

Stroutstrup siempre ha dicho que esta entrevista es falsa. Aún así, no tiene desperdicio.

http://www.redcientifica.com/gaia/reir/cpp_c.htm
2 de abril de 2010 a las 14:37.  

 alberto 
:

He programado en Perl, en PHP y ahora en C. No tengo el más mínimo interés en la programación con objetos, creo que lo que hace verdaderamente diferente un programa es el hecho de que pueda ejecutar varios bloques de código al mismo tiempo, lo de los objetos es una manera de empaquetar funciones y nada más.
2 de abril de 2010 a las 15:36.  

Postmoderno:
Hombre, es "empaquetar funciones y nada más", pero eso hace que pienses las cosas de otra forma. Programar aplicaciones gráficas sin objetos, se puede hacer, pero es bastante más complicado.
Cada paradigma y cada lenguaje tienen su "mercado": POO para entornos gráficos, programación lógica (lisp, prolog) para programas que necesiten de explosión combinatoria...
2 de abril de 2010 a las 20:51.  

melosplike:
Sobre el lenguaje orientado a objetos, es necesario a partir de cierto punto en que la complejidad de un programa no es abarcable fácilmente.

Si no fuera por JAVA no habría habido muchos avances. Los programas multithreading, por ejemplo y más allá del OMP que es muy limitado (para el lenguaje C y C++) en comparación, hacen que se multipliquen las posibilidades de hacer un código más ordenado de cara a revisiones, adaptaciones y ampliaciones (y ya no entro en el tema del NetBeans con el que se consigue hacer aplicaciones amigables de una manera terriblemente fácil).

Los puristas negarán la mayor, es normal, pero la tecnología avanza a pasos agigantados y quien no vea esto es que es un cromagnon digital. El cambio generacional ya se está dando le pese a quien le pese.

A parte, JAVA es multiplataforma: lo compilas una vez y te sirve para cualquier SO gracias a que funciona sobre una máquina virtual. De hecho, el JAVA es como un hijo de C que al principio se usaba más que nada en Internet debido, precisamente, a esa cualidad tan suya que es la adaptabilidad y a la ligereza en comparación a los ejecutables en C (haced un hola mundo en ambos programas, compilad y mirad cuánto ocupan cada uno).

Hace 20 años tenía sentido pensar de la manera que mostráis, pues las máquinas eran una m-i-e-r-d-a: justísimas, carísimas, sin posibilidades. Hoy en día no existe esa constraint, esa limitación, y cada vez se requiere más otro tipo de especialización. De hecho, para una empresa es más caro comprar espacio que comprar potencia de procesado.

Aunque te duela, Alberto, hoy en día tu blog lo podría hacer cualquier II o similar bien preparado en un par de días, sin matarse mucho, en JAVA y además lo podría hacer ejecutarse en Linux, Windows (en cualquiera de sus versiones) o MacOS sin tener que recompilarlo con un servlet metido en un servidor Apache. Yo tardaría algo más, lo reconozco, porque no he hecho nunca un blog pero el propio HTML lo hace todo terriblemente sencillo (botones y demás). De hacerlo en C tendrías que hacer un CGI, creo, pero JAVA lo hace más fácil.

De hecho yo he hecho hasta crawlers (lo que usa Google, pero en simplón) como entretenimiento y aluciné con lo fácil que era para mí el hacer realidad una idea gracias a la orientación a objetos.

Feliz Semana Santa.
2 de abril de 2010 a las 20:56.  

astronauta:
Postmoderno,

Lisp no encaja dentro de la "programación lógica", sino funcional. Por otro lado, por lo que respecta a la POO, tras más de 20 años programando en C, y alrededor de 15 en C++... creo que C tiene más futuro que C++, pues fomenta la programación *sencilla*, sin perderse en vueltas de tuerca que distraen de la solución del problema, complicando a menudo la implementación.
2 de abril de 2010 a las 21:23.  

 alberto 
:

Amigo melosplike: tú sólo eres un aficionadillo que repite tópicos. Cada uno que programe en aquello que le guste, pero en cuanto a mi blog, el hecho de que el rendimiento sea absolutamente indiferente porque las páginas quedan escritas en html hace absurdo marearse con javas, Cs o mandangas: el script más fácil y mejor documentado es PHP.

Otra cosa sería si volviese a montar la web nuevosamigos. Ahí sí que se vio que con PHP y AJAX no vas muy lejos en cuanto a escalabilidad, sobre todo en el chat. En C puedes montarlo con FastCGI o directamente hacerte un servidorcillo. En java supongo que también, pero yo nunca lo sabré porque no me interesa ese lenguaje absolutamente nada.
2 de abril de 2010 a las 21:56.  

Postmoderno:
Pues si, me he colado con el LISP, no se de donde me habré sacado lo de que es programación lógica, tal vez de que se parezca poco a los leguajes "normales".

Si el "problema" es la creación de una biblioteca de widgets para programar un programa con entorno gráfico, la POO tiene muchas ventajas sobre otros tipos de programación. Hay "toolkits" programados en C puro y duro, como GTK, pero si le echas un vistazo al código, verás que lo que hace es simular clases y objetos con estructuras y otros cachivaches de C, con lo que es un poco complicado trabajar con esta biblioteca.

¿Nadie aquí ha probado Python? Es más lento ejecutando, pero el tiempo que te ahorras programando creo que merece la pena.
4 de abril de 2010 a las 22:31.  

Sr. Lobo:
http://www.inmensia.com/blog/20100327/desmitificando_a_cassandra.html
5 de abril de 2010 a las 09:26.  

uno más:
Si no se programa la estructura de datos en C, lo más óptimo y menos costoso, es utilizar una base de datos comercial. El problema es que muy pocos saben diseñar correctamente una base de datos, y menos traducir a queries SQL, lo que tienen que hacer luego con scripts. Hay fallos muy evidentes que comenten, por desgracia, una gran mayoria de programadores aficionados: no crear vistas y hacer todo con tablas y joins, no utilizar funciones agregadas, mal aplicacion de una secuencia de joins... y en definitiva, un desconocimiento casi total del Àlgebra relacional e incluso algo peor, programar en un lenguaje declarativo, como es SQL, como si fuera uno estructural-funcional. Así no es raro, que los del wordpress echen la culpa a la tecnología de la base de datos, cuando la chapuza reside en los que la programaron y utilizan unas deleznables queries.
15 de abril de 2010 a las 17:12.  



© A. Noguera

"Mirar el río hecho de tiempo y agua
y recordar que el tiempo es otro río,
saber que nos perdemos como el río
y que los rostros pasan como el agua".
Jorge Luis Borges


Leer los archivos

Entradas destacadas:
Pepito Relámpago - Pepita Nuncabaja - Seis meses en meetic - Etapas de la burbuja