1 – ¿Cómo aprendió a programar? ¿Las escuelas le resultaron de alguna utilidad? ¿O acaso ni siquiera se molestó en terminar la escuela?

 Steve Yegge: Aprendí por mi cuenta a programar en una calculadora HP usando el lenguaje de pila de notación polaca inversa (RPN) cuando tenía 17 años. Había intentado aprender a programar antes, pero nunca terminaba de “captar” el concepto. Las calculadoras científicas HP 28c y 48g eran bastante poderosas y tenian excelente documentación. Escribí un visualizador de mallas 3D para la 48g – tenía un libro de gráficos 3D y muy laboriosamente logré traducir un ejemplo desde Pascal al lenguaje de pila RPN. Fue muy inspirador verlo funcionar. Luego compré una PC y Turbo Pascal, y comencé a estudiar programación con ganas. Ya programaba bastante bien cuando ingresé a la universidad para el curso de Ciencias de la Computación.Fui a la Universidad de Washington y conseguí un título terciario en Ciencias de la Computación. Definitivamente valió la apena, y le recomiendo a todos los programadores que consigan un título en sistemas si pueden.

Linus Torvalds: No aprendí a programar en la escuela, sino por mi cuenta leyendo libros y practicando (inicialmente en una Commodore VIC-20, más tarde en una Sinclair QL).Dicho esto, creo que en especial la Universidad me resultó muy útil. En vez de ir a una universidad de ingeniería, fui a la Universidad de Helsinki, que es bastante teórica, así que la enseñanza no se centra mucho en la programación (que era una pequeña parte, y de todas formas terminé haciendolo “por otro lado”), sino que la mayoría de los cursos se enfocaban en los conceptos fundamentales y en cosas como análisis de complejidad.Si bien puede parecer aburrido e incluso una pérdida de tiempo, creo que fue útil y lo disfruté la mayor parte del tiempo. Y probablemente soy un mejor programador gracias a eso.

David Heinemeier Hansson: Aprendí a programar al crear mi primer página web en HTML. Después quise crear algunas partes dinámicas y elegí primero ASP, luego PHP. Luego de que aprendí a programar, comencé a estudiar a la vez una carrera de Ciencias de la Computación y Administración de Empresas.

Peter Norvig: Hice cursos en la secundaria y en la universidad, pero siempre sentí que aprendí más por mi cuenta.

Dave Thomas: Durante la secundaria tomé clases sobre computación. Me enganchó totalmente: me enamoré de la programación, y busqué universidades que dieran cursos de software. Eventualmente fui al Imperial College, parte de la Universidad de Londres. Era el segundo año que ofrecian un curso en software, y fue absolutamente maravilloso: el plantel y los estudiantes trabajaban juntos para hacer que los materiales resulten mejor, y todos aprendiamos un montón. Este curso me dio una excelente base para el desarrollo de software. Me quedé para comenzar un PhD, pero luego lo dejé por un proycto.Pero la pregunta general es “¿cómo aprendí a programar?”. La respuesta real es que “todavía estoy aprendiendo a programar”. Creo que cualquier buen desarrollador sigue aprendiendo toda su carrera. No es sólo agarrar un lenguaje nuevo y sus librerías: los buenos programadores también refinan sus técnicas y prácticas durante los años.

Guido Van Rossum: Fui a la universidad donde tenían un enorme mainframe y había varios cursos de computación. Fue muy importante para mi.

James Gosling: Al principio aprendí por mi cuenta. Conseguí mi primer trabajo como programador antes de ir a la universidad. Pero estoy contento de haberlo hecho, me divertí un montón. Después seguí adelante hasta obtener un PhD.

Bjarne Stroustrup: En la universidad (Aarhus y luego Cambridge). Las universidades me enseñaron muchas cosas útiles, incluso la mayoría de las bases que sería mi trabajo futuro. Además, aprendí bastante programando por dinero – donde comprender el problema real, mantenibilidad, entrega a tiempo, etc. son temas más importantes que en un entorno educacional.

Tim Bray: Pensaba que iba a ser maestro de matemáticas. El programa de matemáticas en la Universidad requería algunos cursos de computación.

2 – ¿Cuál cree que es la habilidad más importante que debería tener un programador?

Steve Yegge: Habilidades para comunicarse en forma escrita y verbal. Nunca vas a llegar muy lejos como programador si no podés transmitir tus ideas a otras personas de manera efectiva. Los programadores deben leer asiduamente, practicar escritura, tomar cursos de escritura, e incluso practicar el hablar en público.

Linus Torvalds: Es una cosa llamada “gusto”. Suelo juzgar a las personas que trabajan conmigo no por su aptitud: algunas personas pueden escribir mucho código, sino más bien por cómo reaccionan al código de otras personas, y luego obviamente viendo cómo se ve el código que ellos mismos escriben, y que enfoquen toman. Esto me dice si tienen “buen gusto” o no, y la cosa es, una persona sin “buen gusto” en general no es buena para juzgar el código de otras personas, y su propio código termina siendo no del todo bueno.Pero bueno, no es lo único. Una cosa que es muy útil, especialmente en proyectos de código abierto, es la habilidad de comunicar bien lo que se quiere hacer, y cómo se va a hacer. La habilidad de explicar a otros porqué hacés algo de determinada manera es muy importante, y no todos tienen esta habilidad.Dicho esto, también hay personas que simplemente generan buen código. No son buenas explicándolo, e incluso puede que no tengan buen gusto, pero el código funciona. A veces necesitás a otra persona (una que si tenga ese “buen gusto” tan dificil de definir) para masajear el código y que resulte útil en forma más amplia, pero tan solo la habilidad de escribir código claro para problemas dificiles es obviamente una parte bastante fundamental de cualquier programador.

David Heinemeier Hansson: Un sentido fuerte del valor. La habilidad para preguntarse a uno mismo: ¿vale la pena hacer esto ahora mismo? Muchos programadores parecen derrochar océanos de tiempo en cosas que simplemente no importan. Y no dedican el tiempo suficiente a cosas que si importan.

Peter Norvig: No creo que sea una sola, pero digamos concentración.

Dave Thomas: Pasión.

Guido Van Rossum: Las pregunta son bastante generales y dificiles de responder Creo que tener la habilidad de cocinarse un huevo para el desayuno es invaluable.

James Gosling: Auto motivarse. Para ser realmente bueno, tenés que estar enamorado de lo que hacés.

Bjarne Stroustrup: La habilidad de pensar con claridad: un programador tiene que comprender los problemas y expresar soluciones.

Tim Bray: La habilidad de preferir la evidencia a la intuición.

3 – ¿Cree que las matemáticas o la física son un conocimiento importante para un programador? ¿Por qué?

Steve Yegge: Hay una gran rama de la matemática que es muy importante para los programadores, llamada “matemática discreta” o “matemática concreta”. Incluye disciplinas como la probabilidad, combinatorias, teoría de grafos, pruebas por inducción, y otras herramientas útiles. Aliento a todos los programadores a que estudien matemática discreta todo lo que puedan. Incluso un poquito es mejor que nada.En cuanto a la matemática tradicional, bueno, no la uso tan a menudo, pero siempre resulta útil cuando la necesito. Por ejemplo, sólo usé cálculo matemático una vez durante el año pasado como parte de mi trabajo. Tenía que estimar la carga en la hora pico del día para un servicio cuya carga “seguía al sol” aproximadamente por una curva senoidal. La forma más simple para estimar era integrar sobre 1/24 de la curva en una hora específica. Si no hubiera sabido cálculo matemático, no hubiera podido hacer estimaciones razonablemente exactas.Cuando escribía mi juego, Wyvern, me fue sumamente útil tener conocimientos sólidos en geometría de planos básica. Y es bastante común usar álgrebra y álgrebra lineal a diario. Pero casi nunca uso trigonometría o ecuaciones diferenciales en el trabajo, ni tampoco mucho cálculo numérico.Diría que mis conocimientos básicos de matemática me hicieron entre un 5% y un 10% mejor programador. Si supiera mucha más matemática, sin dudas sería un mucho mejor programador de lo que soy hoy en día, por lo que estudio y practico matemática varias horas por semana.Amo a la física y llevo una odisea permanente y de por vida para lograr entender los fundamentos de la mecánica cuántica. Pero, personalmente, nunca encontré que la física resulte muy útil para mi trabajo como programador. Por supuesto, esto sería diferente si estuviera haciendo algo en el campo de la física, como programar un juego en 3D, o en ciertas áreas de la simulación.

Linus Torvalds: Personalmente creo que es bueno tener conocimientos sólidos en matemática. No estoy tan seguro en cuanto a la física, pero estoy convencido que comprender matemática y tener una buena base te ayuda a ser un programador mejor. Así sea tan sólo porque usan modelos mentales similares – podés construir un conjunto de reglas de cualquier tipo que quieras, pero siempre debe ser consistente consigo mismo.

Dave Heinemeier Hansson: Para nada. Al menos no resulta útil para el tipo de programación de negocio necesaria para crear aplicaciones web. Considero que es mucho más importante ser un buen escritor.

Peter Norvig: Si. Muchas ideas son inherentemente matemáticas: inducción, recursión, lógica, etc.

Dave Thomas: Quizás. Pero, para ser honesto, no vi mucha correlación entre estos tipos de disciplina y los buenos desarrolladores de software.Sin embargo, si he visto una fuerte correlación entre la gente que tiene algo de sentido musicales y la habilidad para programar. No tengo idea porqué, pero sospecho que algunas áreas del cerebro que hacen que alguien tenga sentido musical también las hace buenos desarrolladores de software.

Guido Van Rossum: Matemática, sí (algunas partes; no me importan las ecuaciones diferenciales, pero el álgebra y la lógica son importantes). En cuanto a la física, no creo que sea tan útil, excepto que siempre sirve estar interesado en varias cosas.

James Gosling: ¡Si! Te enseñan lógica y deducción… a tener un ojo analítico. Y no hay como las matematicas al momento de analizar algoritmos.

Bjarne Stroustrup: Depende del programador y de las tareas de programación. Algunas formas de matemática se usan con frecuencia; la física menos seguido, pero por otro lado aprender física es una de las mejores formas de aprender matemática práctica.

Tim Bray: En mi caso, casi nunca usé matemática de nivel universitario para apoyar mi programación.

4 – ¿Cuál cree que será la próxima “gran cosa” en la programación? ¿Programación orientada a X, el lenguaje Y, computación cuántica, o qué cosa?

Steve Yegge: Creo que la programación de aplicaciones web irá gradualmente convirtiéndose en la programación más importante para el lado del cliente. Creo que va a volver obsoletas a las herramientas del lado del cliente: GTK, Java Swing/SWT, Qt y por supuesto todas las propias de cada plataforma como Cocoa y Win32/MFC/etc.No es algo que vaya a ocurrir de repente. Ya ha venido pasando durante los últimos diez años, y bien podría llevar otros diez años más para que las aplicaciones web “ganen”. Las herramientas, lenguajes, APIs, protocolos y navegadores van a tener que mejorar mucho más todavía. Pero año tras año se acercan un poquito más, y finalmente decidi cambiar todo el desarrollo de mi aplicación a una programación basada en navegadores.Por supuesto que Microsoft y Apple no quieren que esto ocurra, por lo que el primer paso necesario va a ser lograr que un navegador de código abierto como Firefox gane una posición dominante en el mercado, lo cual va a requerir una aplicación ganadora para Firefox (una aplicación ganadora sería algo como iTunes, algo que todo el mundo quiera usar, tanto como para descargarse Firefox).

Linus Torvalds: No creo que veamos un “gran salto”. Vimos muchas herramientas que nos ayudan a simplificar las tareas de todos los días – lenguajes de alto nivel y quizás la integración de bases de datos simples dentro de lenguajes. Pero la mayoría de estas modas tuvieron un uso limitado.Por ejemplo, personalmente creo que “Visual Basic” hizo más por la programación que los “Lenguajes Orientados a Objetos”. Y sin embargo, la gente se rie de VB y dice que es un lenguaje malo, mientras hablan de los lenguajes OO por décadas.Y no, Visual Basic no es un gran lenguaje, pero en mi opinión las interfaces simples para bases de datos en VB fueron fundamentalmente más importantes que la orientación a objetos, por ejemplo.Así que creo que van a ocurrir muchas mejoras incrementales, y las mejoras en hardware van a hacer más facil la programación, pero no espero ningúna gran mejora en la productividad o una revolución en la forma que la gente hace las cosas.Al menos no hasta que comenzamos con la inteligencia artificial real, y no creo que la IA real sea algo que “programemos”.

David Heinemeier Hansson: No trato de predecir el futuro. No creo en la adivinación. La mejor manera de predecir el futuro es implementarlo.

Peter Norvig: Procesamiento distribuido a gran escala.

Dave Thomas: La próxima gran cosa en la programación va a ser eclipsada por la próxima-próxima gran cosa en la programación, y así, y así. Estoy cansado de esta búsqueda sin fin de grandes cosas, porque mientras tanto la gente se olvida de los temas reales: tener los fundamentos correctos. Necesitamos mejorar un montón al hablar con nuestros clientes, enfocarnos en entregar valor, y tener orgullo por lo que hacemos. Un desarrollador que puede hacer estas cosas puede entregar software con cualquier herramienta, y no necesita preocuparse por andar siguiendo tendencias y modas.

Guido Van Rossum: Lo siento, no soy de los que tienen una bola de cristal. Predije el CGI cinco años después de que fuera inventado. 🙂

James Gosling: Los dos temas en los que estoy más interesado ahora son manejar el paralelismo y la complejidad.

Bjarne Stroustrup: No sé, y no me gusta adivinar.

Tim Bray: Ni idea.

5 – Si tuviera tres meses para aprender una tecnología relativamente nueva, ¿cuál eligiría?

Steve Yegge: De hecho tengo 3 meses (part-time), y los estoy usando en aprender Dojo (http://dojotoolkit.org) y AJAX y DHTML avanzado. Estoy aprendiendo mientras escribo una aplicación web bastante ambiciosa. Dojo es muy interesante, y estoy seguro que irá mejorando con el tiempo.

Linus Torvalds: Hmm. Me encataría hacer FPGAs, pero siempre estuve demasiado ocupado para sentarme y aprender. Me encanta la noción de jugar con el hardware: obviamente es una de las razones por las que terminé haciendo sistemas operativos, ya que (junto a los compiladores) es lo más cerca que podés llegar a jugar con el hardware, sin tener que diseñarlo o construirlo vos mismo.

David Heinemeier Hansson: Programación en Cocoa para Mac.

Peter Norvig: Me gustaría saber Javascript mejor. También Flash.

Dave Thomas: Si por “nuevo” querés decir “nuevo para Dave Thomas”, creo que tomaría lecciones de piano intensivas.Si “nuevo” se refiere a cosas de tecnología, creo que elegiría tecnologías relacionadas con la accesibilidad para personas con discapacidades. 

Guido Van Rossum: Snowboarding. 

James Gosling: Para divertirme, me pondría al día con lo último en render 3D. Probablemente escribiría un render de mapeo de fotones. 

Bjarne Stroustrup: Hay muy pocas cosas de importancia que se puedan aprender en tres meses. Me imagino que estás pensando en capacitación en algún campo determinado. 

Tim Bray: Seguridad, encriptación, firmas digitales, identidad, etc. Es un gran problema para mi ya que nunca aprendí estas cosas.

6 – ¿Qué hace que algunos programadores sean 10 o 100 veces más productivos que otros?

Steve Yegge: Creo que si te detenés a pensar porqué todos los atletas no son igual de buenos, ahí tendrías tu respuesta. Thomas Edison tiene una cita acerca de los genios que también te puede dar algunas pistas. 

Linus Torvalds: No tengo idea. Creo que algunas personas son capaces de concentrarse en las cosas que importan, y mucho del asunto es hacer eso. La mayoría de los programadores realmente buenos que conozco comenzaron a serlo desde jóvenes. 

David Heinemeier Hansson: La habilidad de replantear problemas difíciles como fáciles. 

Peter Norvig: La habilidad de ver el problema completo en sus cabezas. 

Dave Thomas: Les importa lo que hacen. 

Guido Van Rossum: Estructura del cerebro genéticamente diferente. 

James Gosling: Piensan lo que hacen. No se apuran en hacer las cosas. Tienen una visión holística de lo que necesita construirse. 

Bjarne Stroustrup: Primero es una falta general de profesionalismo y capacitación adecuada que hace que el nivel báse sea muy bajo. Segundo, algunas personas tienen una combinación de “trucos” (la habilidad de pensar claramente y llegar al corazón del asunto), experiencia, y conocimientos de las herramientas. La programación deja más espacio para esto ya que es una combinación de teoría y práctica – ninguna de las cuales sirve de mucho sin conocimiento del dominio. 

Tim Bray: La sorprendente diversidad de la menta humana.

7 – ¿Cuáles son sus herramientas favoritas (sistemas operativos, lenguajes de programación/scripting, editor de texto, sistema de control de versiones, shell, motor de base de datos, y otras herramientas sin las que pueda vivir) y por qué le gusta más que otras?

Steve Yegge: OS: ¡Unix! Uso linux, cygwin, y darwin por igual bastante a menudo. No se los puede igualar como herramientas de productividad. Cada programador debería aprender a usar todos los comandos de /bin y de /usr/bin.Lenguaje de scripting: Ruby. Domino casi cualquier lenguaje de scripting importante que existe: Perl, Python, Tcl, Lua, Awk, Bash y otros que me estoy olvidando. Pero soy bastante vago, y Ruby es por lejos el más facil, así que somos una pareja perfecta.Lenguaje de programación: no tengo un favorito; creo que todos apestan. Tiendo a preferir Java porque es robusto, tiene una plataforma portable y buenas herramientas y librerías. Pero el lenguaje Java a a evolucionar o morir; actualmente no es tan bueno como para mantener el liderazgo en forma indefinida.Editor de texto: Emacs, porque es lo mejor que hay hoy en día.Control de versiones: SVN. Perforce es mejor, pero es muy caro.Shell: Bash, porque soy muy vago para aprender otro.Motor de base de datos: MySQL, por supuesto. Nada se le compara.
Otros: me encanta GIMP, aunque sea increíblemente poco intuitivo. Lo vengo usando por años y aún apenas puedo hacer algo con él. Pero no podría vivir sin el GIMP, aunque suene irónico.
Firefox se está convirtiendo en una herramienta crítica para mi. Me siento sofocado cuando estoy forzado a usar IE o Safari.
Nótese que todas estas herramientas (Unix, Emcas, Firefox, GIMP, MySQL, Bash, SVN, Perforce) tienen algo en común: son extensibles. Por ejemplo, todas tienen un API de programación. Los buenos programadores aprenden a programar sus herramientas, no sólo las usan.


Linux Torvalds: De hecho no suelo terminar teniendo muchas herramientas con las que trabaje, y con las que pasé algo de tiempo les dediqué tiempo propio para hacer que funcionen para mi. El sistema operativo es claramente la mayor ejemplo, pero también escribí mi propio sistema de control de versiones (git), y el editor de texto que uso (micro-emacs) lo terminé personalizando y extendiendo.Sin contar estas tres partes, lo único que me importa realmente es mi lector de emails. Uso “pine” – no porque sea el mejor lector de emails, sino porque estoy acostumbrado a él, y hace lo que necesito con una mínima intrusión. 

David Heinemeier Hansson: OS X, TextMate, Ruby, Subversion, MySQL. Ese el el combo que me mantiene feliz hoy en día. Me gustan las herramientas que muestran un buen gusto y se enfocan en las cosa que importan. 

Peter Norvig: No me gusta ninguno de los sistemas operativos principales – Windows, Mac, Linux. Me gusta Python y Lisp. Emacs. 

Dave Thomas: Me cambié a las Mac hace un par de años luego de ser un usuario de Linux por más de 10 años. Las herramientas no son necesariamente mejores, pero no necesitan ser mejoradas o mantenidas tan a menudo, lo que me permite concentrarme en usarlas.No creo en las herramientas únicas: suelo cambiar bastante seguido para ganar experiencia con la mayor cantidad de herramientas posible. Ahora estoy usando OSX, Emacs, TextMate, Rails, Ruby, SVN, CVS, Rake, make, xsltproc, TeX, MySQL, Postgres, y un montón de ayudas más. Quien sabe lo que voy a estar usando el año que viene. 

Guido Van Rossum: Unix/Linux, Python, vi+emacs, Firefox. 

James Gosling: En estos días vivo en NetBeans. Hace todo lo que quiero, y resulta ser muy claro, simple y eficiente. Es el mejor entorno que usé. 

Bjarne Stroustrup: Unix, sam (un editor de texto muy simple), y por supuesto un buen compilador de C++. 

Tim Bray: Me gustan los sistemas operativos basados en Unix, los lenguajes dinámicos como Python y Ruby, y los lenguajes estáticos como Java (en particular las API de Java), Emacs, cualquiera, bash, cualquiera, NetBeans.

8 – ¿Cuál es su libro favorito relacionado con la programación?

Tim Bray: Esa es dificil. Quizás *Gödel, Escher, Bach: an Eternal Golden Braid *(Hofstadter). Aunque no es estricticamente de programación. Si querés decir “libro favorito de programación”, entonces quizás SICP (mitpress.mit.edu/* sicp*/). 

Linus Torvalds: Heh. Hoy en día cuando leo algo, tiende a ser ficción, o cosas no relacionadas con la computación (uno viejo pero bueno: “El gen egoista”, de Richard Dawkins).Hablando de programación, el único libro real de programación que me viene a la mente es el clásico de Kernighan y Ritchie “El lenguaje de programación C”, porque es un libro increíblemente útil, facil de leer y a la vez corto. Teniendo en cuenta que podés aprender uno de los lenguajes más importantes de nuestro tiempo con el libro, el hecho de que sea tan pequeño y facil de leer es una maravilla.Dicho esto, muchos otros libros que disfruté un montón no eran de programación en si, sino acerca de arquitectura de computadoras y hardware. Obviamente está el libro de Patterson y Hennessy sobre arquitectura de computadoras, pero yo prefiero incluso más el libro “Programación en 80386″ de Crawford y Gelsinger, el cual fue el que usé cuando empecé con Linux.Por la misma razón, me gusta “Sistemas Operativos: Diseño e Implementación” de Andrew Tanenbaum. 

David Heinemeier Hansson: Me gusta Extreme Programming Explained por desafiar al pensamiento común sobre las prácticas de programación, y Patterns of Enterprise Application Architecturepor tener el balance perfecto entre la abstracción y lo concreto. 

Peter Norvig: Structure and Interpretation of Computer Programs

Dave Thomas: Depende qué quieras decir con “favorito”. Probablemente el mejor libro que leí es “IBM/360 Principles of Operation” de IBM. 

Guido Van Rossum: Quicksilver, de Neil Stepehnson. 

James Gosling: Programming Pearls, de Jon Bentley. 

Bjarne Stroustrup: K&R. 

Tim Bray: Programming Pearls, de Bentley.

9 – ¿Cuál se su libro favorito que NO esté relacionado con la programación?

Steve Yegge: ¿Sólo un libro? Es imposible. Hay demasiados libros buenos para elegir sólo uno.Los libros favoritos que leí este mes son “Stardust” (Neil Gaiman) y “The Mind’s I” (Hofstadter/Dennet).Mis escritores favoritos son Kurt Vonnegut, Jr. y Jack Vance. 

Linux Torvalds: Bueno, ya mencioné El gen egoista de Dawkins. Por el lado de la ficción, hay un montón de libros que leí y disfruté, pero de pocos podría decir que fueron “favoritos”. No suelo re-leer libros, y la selección cambia con el tiempo. La mayoría es ciencia ficción y fantasía, por ejemplo mi libro favorito en la adolescencia era “Stranger in a Strange Land” de Heinlein, pero no lo es tanto estos días… 

David Heinemeier Hansson: 1984, George Orwell. 

Guido Van Rossum: Quicksilver, de Neil Stephenson. 

James Gosling: Guns, Germs & Steel, por Jared Diamond 

Bjarne Stroustrup: Cambia con el tiempo. Actualmente, la serie de O’Brian’s Aubrey/Maturin.

Tim Bray: One Day in the Life, de Ivan Denisovich.

10 – ¿Cuál es su banda/músico/compositor de música favorito?

Steve Yegge: Géneros favoritos: clasica, bandas de sonido de animé, música de video juegos.Compositores favoritos: Rachmaninoff, Chopin, BachMúsicos favoritos: David Russell (guitarra clásica), Sviatoslav Richter (piano).OSTs de animé favoritos: Last Exile, Haibane Renmei 

Linus Torvalds: No estoy muy metido en la música, pero cuando escucho algo, tiendo a escuchar varios clásicos de rock, desde Pink Floyd hasta los Beatles, desde Queen a The Who. 

David Heinemeier Hansson: Me gustan muchos géneros. Beth Orton, Aimee Mann, Jewel, Lauryn Hill. De hecho, todos esos ejemplos entrarían dentro de Chicas y Guitarras . 

Guido Van Rossum: Philip Glass. 

James Gosling: Suelo escuchar músicos de folk: Christine Lavin, Woody Guthrie, Pete Seeger… 

Bjarne Stroustrup: Banda: The Dixie Chicks. Compositor: Beethoven. 

Tim Bray: Lean mi blog.

 

Conclusion: a Peter Norvig no le gustan las respuestas largas 

 

prog

 

Linus Torvalds – Creador de Linux y GIT, no necesita presentación.

Dave Thomas – Autor de “El programador pragmático”, “Programación en Ruby” y otros grandes libros de programación.

David Heinemeier Hansson – Creador de Rails Framework(framework web), escritor y conductor de autos de carreras. Autor del weblog Loud Thinking.

Steve Yegge – Uno de los menos conocidos del grupo, pero que tiene respuestas muy interesantes. Programador y blogger. Tiene unas 2 decadas de experiencia en esta industria.

Peter Norvig – Director de Investigación en Google, autor de varios libros importantes de inteligencia artificial. Pueden visitar su página principal

.Guido Van Rossum – Creador del lenguaje Python.

Bjarne Stroustrup – Creador de C++. Pueden visitar su página principal.

James Gosling – Creador del lenguaje Java.

Tim Bray – Uno de los autores de la especificación de XML y Atom. Publica en su blog ongoing.

FUENTE

BBM llega a IOs y Android

Publicado: junio 15, 2013 en MUNDO
Etiquetas:, , , , , ,

bbm

Tras presentar el BlackBerry Q5, la compañía acaba de helar el infierno con un anuncio totalmente inesperado: BlackBerryMessenger llegará a iOS y Android este mismo verano.

Efectivamente, BlackBerry abrirá el sancta sanctorum de la compañía a otras plataformas, un hecho que se había rumoreado en más de una ocasión (mucho antes de la llegada de Heins como CEO de la compañía) y que por fin se materializa en una clara pugna por situar BBM dentro de la carrera de la mensajería instantánea donde compiten pesos pesados como Line, WhatsApp, Facebook Messenger o Viber.

¿Y a qué plataformas llega BlackBerry Messenger? BBM, tal y como hemos comentado, llegará a iOS y Android además de permanecer en casa, es decir, en BlackBerry. Con esta apuesta, la compañía expande su área de influencia y aprovecha uno de los servicios que mayor grado de penetración de sus terminales había conseguido fuera del entorno corporativo y, de esta forma, por lo menos, mantiene la planta existente evitando que se fuguen hacia otros servicios de mensajería instantánea y, con el tiempo, no le vean sentido a usar los terminales de este fabricante. En el caso de dispositivos iOS, BlackBerry Messenger estará disponible para terminales a partir de iOS 6 o superior y, para dispositivos Android, BBM estará disponible para terminales con Android 4.0 (Ice Cream Sandwich) o superior.

bmmexpo

De todas formas, siguiendo el discurso del propio CEO de BlackBerry, esta apuesta arriesgada puede tener una lectura bien distinta y también puede contribuir a captar nuevos usuarios, una apertura a otras plataformas para llevar los servicios de BlackBerry y mostrar, por fin, ese matiz diferenciador de la compañía como «empresa de servicios» (otro de sus fuertes). Desde BES 10, o antes con BlackBerry Mobile Fussion, la compañía había puesto el foco en los servicios y en la posibilidad de interoperar con dispositivos de terceros, algo que ahora vemos fuera del segmento profesional con la expansión de BBM y que esperan seguir ampliando con los grupos, las llamadas IP o los canales, es decir, ofrecer la experiencia completa de BBM sobre iOS y Android.

Luego de un par de semanas escuchando rumores al respecto en toda la web, ha llegado finalmente la confirmación oficial de los Hashtags de Facebook. La red social finalmente incorpora esta función o característica que ya estaba disponible en otras plataformas, primeramente en Twitter y luego incluso en Google+. Su objetivo, como no podría ser de otra manera, es el de facilitar a la enorme comunidad de usuarios de la plataforma el encontrar temas de su interés de los que otras personas están hablando, y unirse a estos, bien se trate de eventos públicos, temas concretos o incluso personas.

Ciertamente, los nuevos hashtags de Facebook no hacen nada que ya no hayamos probado en otra plataforma social, pero sí incorporan una función muy útil que muchos extrañaban en la red social de Mark Zuckerberg.

hg

Por otro lado, desde Facebook rápidamente aclaran que los usuarios no deben preocuparse por su privacidad ni siquiera al utilizar los nuevos hashtags, ya que seremos nosotros mismo quienes podamos elegir el nivel de visibilidad de nuestras publicaciones, como siempre ha sido. Sin embargo, al utilizar un hashtag debemos tener en cuenta que ese mensaje ahora pasará a ser público, y que esa es nuestra elección al usarlo

FUENTE

WhatsApp Rompe Records

Publicado: junio 15, 2013 en MUNDO
Etiquetas:, , , , ,

 

Si alguien dudaba del potencial de WhatsApp como plataforma de mensajería instantánea, debería dejar de hacerlo. Aunque existe mucha polémica relacionada a la seguridad de la misma y rumores que circulan al respecto, sigue siendo el servicio de IM más popular del momento, y sus números son clara prueba de ello. Hoy, a través de redes sociales como Twitter, anuncian haber superado su récord diario de mensajes enviados y recibidos, con nada menos que más de 27 mil millones de mensajes de WhatsApp en apenas 24 horas. Una cifra que puede ser descrita con una sola palabra: impresionante.

Según anuncian de manera oficial, en las últimas 24 horas circularon de entrada más de 10 mil millones de mensajes y de salida más de 17 mil millones de mensajes, lo que da como total el sorprendente número de 27 mil millones, en todo el mundo, y en todas las plataformas que soporta. Teniendo claro que la diferencia entre mensajes entrantes y salientes está relacionada a los chats grupales.

Sin duda alguna se trata de un nuevo hito para la empresa que impone su poderío en el mercado de la mensajería móvil, incluso cuando existe un aparente juego de tronos donde cada vez nacen más rivales, tales como Line, Viber o los más clásicos como BlackBerry Messenger que pronto llegará al iPhone y Android, los cuales retan a WhatsApp en el territorio que domina ahora en popularidad y masa de usuarios (no en otros ámbitos). Por otro lado, sería interesante comparar el crecimiento del uso de plataformas como WhatsApp con el uso, cada vez menor, de los mensajes de texto tradicionales, o SMS.

FUENTE

Direccionamiento directo e Indirecto

El direccionamiento de dos registros puede darse en forma directa e indirecta. Se dice que es directa cuando es posible determinar la dirección mediante una relación natural con la llave. Es indirecta cuando la llave debe ser alterada o se le deben de aplicar operaciones para determinar la dirección del registro.

Un método ampliamente utilizado para generar direcciones físicas de los registros es aquel que realiza una descomposición de la llave y aplica a cada fragmento o a estos en su conjunto una serie de operaciones que darán como resultado un numero relativamente grande (en proporción al tamaño del archivo sumado) y del cual será generado un numero en un intervalo determinado, el cual se utilizara como dirección en el esqueleto, Este método es mejor conocido como Hashing.

Existen diversas formas de generar el numero final a partir del numero «grande», las mas utilizadas son:

Método del residuo:
Es el de mayor aceptación y consiste en la determinación de un numero primo (inmediatamente menor al total de registros esperados) que será utilizado como divisor del numero grande. El residuo de esta división será el numero hash buscado.

Método del centro de los cuadrados:
Consiste en obtener el cuadrado del numero «grande»; del valor resultante se rescatan los dígitos centrales tantos como se requieran para direccionar el esqueleto y se multiplican por un factor de ajuste para colocar el resultado en el rango deseado.

Método del desplazamiento:
En este caso se consideran los dígitos mas externos del numero «grande». De cada extremo se toman tantos dígitos como se requieran para el direccionamiento. Estos se suman y se aplica un factor de ajuste.

Método del plegado:
Es similar al anterior salvo que los dígitos de los extremos se suman en forma encontrada, semejando que el numero total se encontrara escrito en una hoja y esta fuera doblada por la mitad.

Método de conversión de base:
Se asume que el numero «grande» se encuentra en una base determinada diferente de 10 al suprimirle los dígitos fuera de base. El valor resultante es convertido a base 10 y se le aplica el factor de ajuste. Tomar los tres últimos dígitos.

Método del análisis de dígitos:
Se obtiene una muestra de gran tamaño de llaves posibles y sus números hash correspondientes, se analiza la frecuencia de repetición para cada una de las columnas y se van descartando aquellos que presentan mayor repetición. Finalmente, se toman las columnas con mayor variación y tantas como dígitos se requieren. Se aplica factor de ajuste.

reg

Clasificación de los tipos de correspondencia:

Manejo de Cubos:

Se denomina tamaño cubo a la cantidad de resgistros que se almacenan por dirección hash. Los tamaños de cubo recomendables deben ajustarse a las características del problema en cuestión, aunque generalmente oscila entre tres y cuatro.

El modelo de cubos puede implementarse sobre cualquiera de las estructuras (esqueleto o redireccionamiento).

Densidad de empaquetamiento:

Indica el nivel de saturación.

de

ESTRUCTURA DE LOS ARCHIVOS DIRECTOS

Un archivo relativo (directo) consiste en una colección de registros de longitud fija almacenados uno al lado del otro en un dispositivo de almacenamiento de acceso directo (direct – access storage device, DASD). El almacenamiento de este tipo de archivos se restringe a los DASD, tales como discos y tambores, por que el acceso a registros se hace generalmente en orden aleatorio.

Cada registro en un archivo de organización relativa se puede referir por medio de un número -entero- de dirección, el cual indica su distancia o desplazamiento desde el origen del archivo. Al primer registro en un archivo relativo se le asigna el valor 1, 2 al siguiente y así sucesivamente. De este modo, la dirección relativa de un valor entero que refleja su posición respecto al primer registro del archivo. El acceso aleatorio de un registro en un archivo de organización relativa se hace vía su número relativo de registro.

Operaciones con Archivos Directos:

Las operaciones sobre archivos se realizan mediante programas, de modo tal que los archivos se identifican por un nombre externo al que están asociados. Pueden existir programas que procesen el mismo archivo de datos. La mayoría de los programas ejecutarán las siguientes clases de funciones

Consulta: Lectura del contenido de un registro.

Modificación: Alterar la información contenida en un registro.

Inserción: Añadir un nuevo registro al archivo.

Borrado: Suprimir un registro del archivo.
MULTI NIVELES DE INDICES:

Para archivos de gran tamaño el inconveniente para mantenimiento de índices se presenta en el tamaño que estos ocupan y por consiguiente la cantidad de memoria requerida para mantenerlos en esa zona (memoria principal) y lograr así un nivel de eficiencia optimo.

La solución a este inconveniente se obtiene fragmentando el índice en múltiples niveles en una estructura arbolada.

Las técnicas mas conocidas son:

ISAM Index Sequential Access Method

Es un modelo que se relaciona íntimamente al hardware de almacenamiento puesto que se diseña de acuerdo a la estructura de los niveles del medio físico como los cilindros, pistas y sectores.

Cada nivel contiene en el primer subnivel un índice de los restantes subniveles; ocasionalmente se reservan los últimos elementos de este nivel como área de desborde. El área principal de almacenamiento se encuentra entre el índice y el área de desborde.

Una cualidad de ISAM es su alta velocidad de funcionamiento; su principal desventaja es la escasa transportabilidad; es decir solo opera para un hardware determinado. La implementaciòn de este modelo requiere la aplicación de técnicas que sustituyen en cierto grado algunas funciones del sistema operativo como son: almacenamiento y recuperación de datos . En vista de ello, deberá obtenerse de un medio exclusivo para el mantenimiento de los datos a manejar.

isam

VSAM

Consiste en mantener en memoria principal un índice maestro, el cual contiene los intervalos iniciales de las llaves y las referencias (ligas) hacia los archivos que contienen subintervalos mas específicos de las llaves.

Cuando se determina el archivo que será cargado en memoria, este se consultapara obtener un intervalo mas especifico y se carga el siguiente archivo en las mismas localidades de memoria, es decir, se sobre escribe en el índice previo en la memoria. Este proceso se repite hasta alcanzar el ultimo nivel el cual contendrá la dirección lógica del dato buscado en el archivo principal.

La principal cualidad de VSAM es su transportabilidad, el inconveniente es la cantidad de accesos a disco que se requieren para obtener el dato deseado.

Según la cantidad de memoria disponible se diseñara la cantidad de memoria de los bloques. A mayor cantidad de memoria, mayor tamaño de bloques y en consecuencia menor cantidad de niveles y por lo tanto menos accesos a disco.

vsam

Arboles B y Arboles B+

Arboles B

Son estructuras de datos de árbol que se encuentran comúnmente en las implementaciones de bases de datos y sistemas de archivos. Son árboles balanceados de búsqueda en los cuales cada nodo puede poseer más de dos hijos.1 Los árboles B mantienen los datos ordenados y las inserciones y eliminaciones se realizan en tiempo logarítmico amortizado.

Arboles B+

Un árbol B+ es un tipo de estructura de datos de árbol, representa una colección de datos ordenados de manera que se permite una inserción y borrado eficientes de elementos. Es un índice, multinivel, dinámico, con un límite máximo y mínimo en el número de claves por nodo. Un árbol B+ es una variación de un árbol B.

En un árbol B+, toda la información se guarda en las hojas. Los nodos internos sólo contienen claves y punteros. Todas las hojas se encuentran en el mismo nivel, que corresponde al más bajo. Los nodos hoja se encuentran unidos entre sí como una lista enlazada para permitir búsqueda secuencial.

Mantenimiento de un Archivo Directo

Añadir: Añade un registro nuevo al archivo.

DuplicarHace una copia exacta de un registro existente. Duplica todos los campos del archivo excepto el código (que en ningún caso se puede duplicar).

Borrar: Borra el registro actual (el resaltado en la ventana de registros)..

Modificar: Permite modificar los datos del registro actual.

Consultar: Muestra los datos del registro actual.

Horribles BSOD´s

Publicado: junio 15, 2013 en MUNDO
Etiquetas:, , , , ,

Alguien sabe que es una BSOD: es la Horrible pantalla azul de Windows, circulaba por Youtube y me tope con estos videos… observen:

 

 

 

No se por que, pero presiento que los chicos de Microsoft se preocupan mucho por esto.. En cada SO les queda mejor!!

ARCHIVO SECUENCIAL INDEXADO

Un archivo secuencial indexado esta básicamente compuesto de una estructura secuencial, que se llamará archivo maestro y uno o más archivos índices. Los archivos índices, se encargarán de dar un acceso más rápido a los datos almacenados en el archivo secuencial. La rapidez del archivo depende, comparativamente con otros archivos, del numero de registros.

Cada registro de un archivo índice se corresponde con un bloque de otro archivo índice o con un bloque en el archivo principal. Esto implica que cuando se quiere extraer información precedida por un índice, tiene que cargarse toda la información a la que el índice apunta. El tamaño de esta información es el
tamaño del bloque.

Estructura lógica de Archivo Secuencial-Indexado

La estructura más simple tiene como índice un archivo secuencial simple, cada registro del archivo índice tiene dos campos, un campo clave igual al del archivo principal y un puntero al archivo principal. Para encontrar un campo especifico se busca en el índice hasta encontrar el valor mayor de la clave que es iguale o precede al valor deseado de la clave, la búsqueda continua en el archivo principal a partir de la posición que indique el puntero.

Cada registro del archivo principal tiene un campo adicional que es un puntero al archivo de desbordamiento. Cuando se inserta un nuevo registro al archivo, también se añade al archivo de desbordamiento. El registro del archivo principal que precede inmediatamente al nuevo registro según la secuencia lógica se actualiza con un puntero del registro nuevo en el archivo de desbordamiento, si el registro inmediatamente anterior está también en el archivo de desbordamiento se actualizará el puntero en el registro.

Para procesar secuencialmente un archivo completo los registros del archivo principal se procesarán en secuencia hasta encontrar un puntero al archivo de desbordamiento, el acceso continúa en el archivo de desbordamiento hasta que encuentra un puntero nulo, entonces renueva el acceso donde se abandonó en el archivo principal.

Área primaria: 

Es la parte del fichero donde se guardan los registros ordenados por el valor del campo “clave”. Los registros se organizan por bloques. Es un área de organización secuencial donde el acceso se realiza mediante dos operaciones: Primero, buscando en el bloque del registro, luego analiza secuencialmente ese bloque hasta localizar el registro deseado o, en caso de no hallarse, pasaría al área de overflow.

Área de Índices:

Los registros de esta área están formados por dos campos: El primero contiene la clave del último registro de cada bloque. El segundo contiene la dirección de memoria (puntero) del inicio de cada bloque del área primaria.

Área de Overflow(desbordamiento):

Tras completar el área primaria, los registros añadidos posteriormente serán enviados al área de overflow. Estos registros podrán tener claves intermedias a los registros añadidos en el área primaria.

Operaciones sobre un Archivo secuencial Indexado:

Creación de Archivo: En este proceso se pretende solamente crear un archivo nuevo en disco, con su nombre, tipo y especialidad de almacenamiento de datos apropiado.

Apertura de Archivos: En este caso se pretende abrir un archivo ya existente en disco para procesarlo, ya sea cargar o grabar datos en sus registros, o leer algún registro en especial para mandarlo a una variable de cualquier tipo.

Cierre de archivos: Es la operación más importante en cualquier programa que maneje archivos, o se cierra el archivo como última instrucción del programa o se verá el anuncio ABORT, RETRY, FAIL.

Altas en archivo: En este proceso se carga una clase en memoria con sus datos pertinentes y se graba la clase en el archivo en disco.

Lectura de archivo: En este proceso, se abre el archivo y se manda el registro de disco, a una clase en memoria para su procesamiento.

Consulta de archivos: En este proceso se pretende desplegar todos los registros del archivo en disco a la pantalla, ya sea consola o mejor aún, a una pagina HTML

Busqueda en archivos: Una de las operaciones más comunes, consiste en que el usuario pide toda la información de algún renglón en disco, proporcionando la información de algún campo, generalmente el campo clave de la clase.

Filtros: En este proceso el usuario está interesado en algún conjunto de renglones con características comunes (condición), por ejemplo todos los alumnos de “sisJAVA TEMA s”, o todos los empleados que ganen más de $500.00 pesos, o todos los clientes que sean de “Tijuana”, etc.

Modificaciones de registros o archivos: Problema muy común, donde los datos originales ya grabados se tienen que cambiar o actualizar, por ejemplo el nombre no era “Juan” es “Juana”, o la calificación no es 100 es 20, etc.

Bajas de registros: también muy común este proceso, por ejemplo el alumno ya egreso, el cliente huyo, etc.

000699502

 

El mantenimiento:

El mantenimiento puede darse por cualquiera de estos criterios:

  • Tiempo transcurrido
  • Tamaño del área de desborde (entre 25 y 30% del tamaño del archivo principal)

La eliminación de registros en tiempo de operación se recomienda en forma lógica; es decir, mediante marcas que indiquen si un registro esta activo o no en el proceso de mantenimiento se realizara el reacomodo de los registros suprimiendo así los registros marcados para la eliminación

Al transcurrir un determinado tiempo de operación la estructura tiende a saturarse, se requiere entonces realizar un reacomodo de los datos contenidos en el área de desborde, trasladándolos hacia el archivo principal, teniendo que ajustar por supuesto el tamaño de los bloques y en consecuencia los apuntadores en el índice.

DEFINICIÓN DE ARCHIVOS SECUENCIALES:

Es la forma básica de organizar un conjunto de registros, que forman un archivo, utilizando una organización secuencial. En un archivo organizado secuencialmente, lo registros quedan grabados consecutivamente cuando el archivo se utiliza como entrada. En la mayoría de los casos, los registros de un archivo secuencial quedan ordenados de acuerdo con el valor de algún campo de cada registro. Semejante archivo se dice que es un archivo ordenado; el campo, o los campos, cuyo valor se utiliza para determinar el ordenamiento es conocido como la llave del ordenamiento. Un archivo puede ordenarse ascendente o descendentemente con base en su llave de ordenamiento.

La forma más común de estructura de archivo es el archivo secuencial. En este tipo de archivo, un formato fijo es usado para los registros. Todos los registros tienen el mismo tamaño, constan del mismo número de campos de tamaño fijo en un orden particular. Como se conocen la longitud y la posición de cada campo, solamente los valores de los campos se necesitan almacenarse; el nombre del campo y longitud de cada campo son atributos de la estructura de archivos.

 

CLASIFICACIÓN DE ARCHIVOS

Por su estructura:

Con tipo: Son aquellos que presentan un formato basado en una estructura especifica.

De texto: Son documentos que se graban en formato ASCII y contienen la informacion de manera legible para el usuario.

Sin tipo: Son archivos que son procesados por bloques de lectura y/o escritura. No tienen un formato determinado, y su representación puede ser o no binaria. El tamaño de los bloques es ajustable.

Por su función:

Archivo Maestro: Es aquel que contiene la información global. Este sera actualizado periódicamente puesto que no es operado en linea.

Archivo de Transacciones: Es aquel donde se registran las operaciones que se realizan en un periodo determinado. Una vez transcurrido este se realizara la actualización del archivo maestro y se reiniciaran el de transacciones.

Archivo de Reporte: Es aquel que se utiliza para notificar la ocurrencia de errores o casos especiales en la operación de un sistema. Ocasionalmente contiene también los resultados finales de los procesos.

Archivo de Trabajo: Son aquellos archivos temporales imperceptibles para el usuario que son utilizados generalmente en etapas intermedias en el procesamiento de datos.

Archivo de Programa: Son los llamados archivos ejecutables, así como las librerías o utilitarias asociadas.

Archivo de Texto: Son aquellos que se encuentran en formato ASCII y contienen generalmente información referente a la ayuda y presentación del sistema, así como a la salida de datos con destino al medio de almacenamiento.

ESCRITURA DE LOS ARCHIVOS SECUENCIALES:

En estos archivos, la información sólo puede leerse y escribirse empezando desde el principio del archivo.

Los archivos secuenciales tienen algunas características que hay que tener en cuenta:

  1.  La escritura de nuevos datos siempre se hace al final del archivo.
  2.  Para leer un dato concreto del archivo hay que avanzar siempre hasta donde se encuentre dicho dato. Si el dato requerido se encuentra antes del dato en que está se está posicionado el archivo en un momento dado, será necesario regresar al comienzo del archivo y avanzar hasta el dato necesario
OPERACIÓN SOBRE ARCHIVOS SECUENCIALES.
Para leer un archivo secuencial, el sistema siempre comienza al principio del archivo y lee un registro a la vez hasta llegar al registro deseado. Por ejemplo si ocurre que el registro particular es el decimo en un archivo, el sistema comienza en el primer registro y lee hacia delante un registro a la vez hasta llegar al decimo.

Actualización en archivos secuenciales. 

Un archivo maestro representa el punto estático de algún aspecto de alguna organización en un tiempo dado. Los cambios en la organización se reflejan en el archivo maestro, y para llevar a cabo la actualización del archivo maestro se tendrán que realizar los tipos de actualización:

  • Insertar un nuevo registro.
  • Borrar un registro.
  • Modificar un registro.

Al estar usando un archivo secuencial como archivo maestro, el realizar las operaciones de actualización se llevara con el auxilio de un archivo de transacciones, debido a que se realizará el proceso en lote para que sea más eficiente.

q

 Creación de archivos secuenciales.

La creación de un archivo secuencial se realiza agregando registros al final del archivo, no importa el medio de entrada de datos. El archivo secuencial puede ser almacenado en cintas o en discos magnéticos. Un archivo secuencial puede tener registros fijos o variables, la declaración del archivo y la definición del registro dependerá del lenguaje de programación que se vaya a usar.

Clasificación de los archivos secuenciales.

Normalmente el uso de los archivos secuenciales se da en procesos en lote, donde se ha hecho notar que son eficientes cuando se llevan a cabo diversas operaciones sobre una gran cantidad de registros o de todo el archivo. Esta eficiencia se logra con una acción: la clasificación, proceso que no es exclusivo de los archivos secuenciales, pero si necesaria para diversas operaciones.
La clasificación es el proceso de examinar los registros en un archivo y ponerlos en una secuencia ascendente o descendente basada en el valor de uno o más campos del registro.

qw

Cinta magnética

La cinta magnética es un tipo de medio o soporte de almacenamiento de datos que se graba en pistas sobre una banda plástica con un material magnetizado, generalmente óxido de hierro o algún cromato. El tipo de información que se puede almacenar en las cintas magnéticas es variado, como vídeo, audio y datos.

Los dispositivos informáticos de almacenamiento masivo de datos de cinta magnética son utilizados principalmente para respaldo dearchivos y para el proceso de información de tipo secuencial, como en la elaboración de nóminas de las grandes organizaciones públicas y privadas.

Tambor magnético

La memoria de tambor es un dispositivo de almacenaje de datos. Fue una temprana forma de memoria de ordenador que extensamente fue usada en los años 1950 y 1960, inventada por Gustav Tauschek en 1932 en Australia. Para muchas máquinas, el tambor formó la memoria de trabajo principal de la máquina, con datos y programas cargados sobre el tambor, que usa medios de comunicación como la cinta de papel o tarjetas perforadas. Los tambores comúnmente eran tan usados para la memoria de trabajo principal que las máquinas, a menudo, eran mencionadas máquinas de tambor

El tambor magnético es un cilindro de metal hueco o sólido que gira en una velocidad constante (de 600 a 6.000 revoluciones por minuto), cubierto con un material magnético de óxido de hierro sobre el cual se almacenan los datos y programas. A diferencia de los paquetes de discos, el tambor magnético físicamente no puede ser quitado. El tambor queda permanentemente montado en el dispositivo. Los tambores magnéticos son capaces de recoger datos a mayores velocidades que una cinta o una unidad de disco, pero no son capaces de almacenar más datos que aquellas.

La superficie del tambor magnético se podía magnetizar debido al material que lo rodeaba. El tambor giraba y sobre su superficie existían numerosas cabezas de lectura y escritura. Se almacenaban los datos en pistas paralelas sobre la superficie del tambor. Al girar el tambor la información almacenada pasaba por debajo de los cabezales de lectura/escritura.

Disco magnético

Un disco magnético (flexible o duro) sirve como soporte de almacenamiento para archivos de información. Almacena los bytes de estos archivos en uno o varios sectores de pistas circulares.

La estructura física de un disco, con sus pistas y sectores se hallan invisibles en el disco. Estas pistas, invisibles, se crean durante el formateo.

El formateo consiste en grabar (escribir) magnéticamente los sucesivos sectores que componen cada una de las pistas de un disco o disquete, quedando así ellas magnetizadas. Luego del formateo, en cada sector quedan grabados los campos que lo constituyen, entre los cuales se halla el que permite identificar un sector mediante una serie de números, y el campo de 512 bytes reservado para datos a grabar o re grabar, lo cual tiene lugar cada vez que se ordena escribir dicho sector.

La grabación se logra como en un grabador de audio por la acción de un campo magnético de polaridad reversible (N-S ó S-N), que imanta la pista al actuar dicho campo sobre ella, al salir a través de un corte («entrehierro») realizado en un diminuto núcleo ferromagnético (núcleo hoy suplantado por una película delgada inductiva).

El ancho de este núcleo determina del ancho de la pista (0,1 mm o menos).

Disquete

Un disquete o disco flexible (en inglés floppy disk o diskette) es un medio de almacenamiento o soporte de almacenamiento de datos formado por una pieza circular de material magnético, fina y flexible (de ahí su denominación) encerrada en una cubierta de plástico, cuadrada o rectangular, que se puede utilizar en una computadora o laptop.

Los disquetes se leen y se escriben mediante un dispositivo llamado disquetera (o FDD, del inglés Floppy Disk Drive). Los disquetes de 3½» son menores que el CD, tanto en tamaño como en capacidad. La disquetera es el dispositivo o unidad lectora/grabadora de disquetes, y ayuda a introducirlo para guardar la información.

Este tipo de dispositivo de almacenamiento es vulnerable a la suciedad y los campos magnéticos externos, por lo que, en muchos casos, deja de funcionar con el tiempo.

Memoria Intermedia

La memoria intermedia es un almacén temporal para datos para ser desviados. Esto es una sección de RAM reservado para el almacenaje temporal de datos que esperan a ser dirigido a un dispositivo. El objetivo de memoria intermedia es sostener datos directamente antes de que sea usado.

La memoria intermedia es la región de memoria reservada para el uso como un área de almacenaje intermedia en la cual los datos son temporalmente sostenidos esperando a ser transferido entre dos posiciones, como entre el área de datos de una aplicación y un dispositivo de insumo/producción. Una memoria intermedia también es usada para asistir a la comunicación entre dos dispositivos con la velocidad de procesamiento muy diferente como dos módems o la unidad central de proceso e impresora.

Campos de secuencia:

Son aquellos que permiten establecer una colección de continuidad entre los registros de un archivo.

2

Registro:

Colección de campos del mismo individuo u objeto.

Archivo:

Colección de registros con estructura idéntica.

Base de datos:

Colección de archivos relacionados entre si.  Una base de datos o banco de datos es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta. Actualmente, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital (electrónico), y por ende se ha desarrollado y se ofrece un amplio rango de soluciones al problema del almacenamiento de datos.

Existen programas denominados sistemas gestores de bases de datos, abreviado SGBD, que permiten almacenar y posteriormente acceder a los datos de forma rápida y estructurada. Las propiedades de estos SGBD, así como su utilización y administración, se estudian dentro del ámbito de la informática

BD

Campos Llave

Son aquellos que permiten identificar en forma unívoca a un registro. Generalmente se designaran como campos llave, aquellos que no contienen datos repetidos. Si el sistema de archivos no posee campos con esas características, deberán utilizarse llaves intermedias o escalonadas. Este método presenta listas de objetos (o individuos) que se van reduciendo conforme se introducen los valores para cada una de las llaves escalonadas. El proceso se da por concluido al hacer contacto visual con el objeto buscado o hasta reducir la lista de tal forma que se determina la inexistencia del objeto.