Top 10 Greatest Programmers in the World of all Time

Top 10 Greatest Programmers in the World of all Time
Top 10 Greatest Programmers in the World of all Time

Dennis Ritchie

Dennis Ritchie I'm Programmer
Dennis Ritchie I’m Programmer
Dennis MacAlistair Ritchie was an American computer scientist who “helped shape the digital era”. He created the C programming language and with long-time colleague Ken Thompson, the Unix operating system. Ritchie and Thompson received the Turing Award from the ACM in 1983, the Hamming Medal from the IEEE in 1990 and the National Medal of Technology from President Clinton in 1999. Ritchie was the head of Lucent Technologies System Software Research Department when he retired in 2007.

Bjarne Stroustrup

Bjarne Stroustrup

Bjarne Stroustrup is a Danish computer scientist, most notable for the creation and development of the widely used C++ programming language. He is a Distinguished Research Professor and holds the College of Engineering Chair in Computer Science at Texas A&M University, a visiting professor at Columbia University, and works at Morgan Stanley.

James Gosling

James-Gosling I'm Programmer
James-Gosling I’m Programmer
James Arthur Gosling is a Canadian computer scientist, best known as the father of the Java programming language. James has also made major contributions to several other software systems, such as NeWS and Gosling Emacs. Due to his extra-ordinary achievements Gosling was elected to Foreign Associate member of the United States Natioal Academy of Engineering.

Linus Torvalds

Linus-Torvalds i'm programmer
Linus-Torvalds i‘m programmer
Linus Benedict Torvalds is a Finnish American software engineer, who was the principal force behind the development of the Linux kernel. He later became the chief architect of the Linux kernel, and now acts as the project’s coordinator. He also created the revision control system Git as well as the diving log software Subsurface. He was honored, along with Shinya Yamanaka, with the 2012 Millennium Technology Prize by the Technology Academy Finland in recognition of his creation of a new open source operating system for computers leading to the widely used Linux kernel.

Anders Hejlsberg

Anders-Hejlsberg I'm Programmer
Anders-Hejlsberg I’m Programmer
Anders Hejlsberg is a prominent Danish software engineer who co-designed several popular and commercially successful programming languages and development tools. He is the creator of popular programming language C#. He was the original author of Turbo Pascal and the chief architect of Delphi. He currently works for Microsoft as the lead architect of C# and core developers on TypeScript.

Tim Berners-Lee

Tim-Berners-Lee I'm Programmer
Tim-Berners-Lee I’m Programmer
Sir Timothy John “Tim” Berners-Lee is also known as “TimBL”, is a British computer scientist, best known as the inventor of the World Wide Web. He made a proposal for an information management system in March 1989 and he implemented the first successful communication between a Hypertext Transfer Protocol (HTTP) client and server via the Internet. Berners-Lee is the director of the World Wide Web Consortium (W3C), which oversees the Web’s continued development.

Brian Kernighan

 Brian-Kernighan I'm Programmer
Brian-Kernighan I’m Programmer
Brian Wilson Kernighan is a Canadian computer scientist who worked at Bell Labs alongside Unix creators Ken Thompson and Dennis Ritchie and contributed to the development of Unix. He is also coauthor of the AWK and AMPL programming languages. Kernighan’s name became widely known through co-authorship of the first book on the C programming language with Dennis Ritchie.

Ken Thompson

Ken Thompson

Kenneth Thompson commonly referred to as ken in hacker circles is an American pioneer of computer science. Having worked at Bell Labs for most of his career, Thompson designed and implemented the original Unix operating system. He also invented the B programming language, the direct predecessor to the C programming language, and was one of the creators and early developers of the Plan 9 operating systems. Since 2006, Thompson works at Google, where he co-invented the Go programming language.

Guido van Rossum

Guido-van-Rossum I'm Programmer
Guido-van-Rossum I’m Programmer
Guido van Rossum is a Dutch computer programmer who is best known as the author of the Python programming language. In the Python community, Van Rossum is known as a “Benevolent Dictator For Life” (BDFL), meaning that he continues to oversee the Python development process, making decisions where necessary. He was employed by Google from 2005 until December 7th, 2012. Where he spent half his time developing the Python language. In January 2013, Van Rossum started working for Dropbox.

Donald Knuth

Donald-Kuth I'm Programmer
Donald-Knuth I’m Programmer
Donald Ervin Knuth is an American computer scientist, mathematician, and Professor Emeritus at Stanford University. He is the author of the multi-volume work The Art of Computer Programming. Knuth has been called the “father” of the analysis of algorithms. He contributed to the development of the rigorous analysis of the computational complexity of algorithms and systematized formal mathematical techniques for it. In the process, He also popularized the asymptotic notation. Knuth is the creator of the TeX computer typesetting system, the related METAFONT font definition language and rendering system and the Computer Modern family of typefaces.

Recommended for you:

Must See:http://goo.gl/u7y5qk

PHP tutorials:http://goo.gl/vZ3R0j
C Programming Language Tutorials:http://goo.gl/YOOXL3
JavaScript Video Tutorials:

tle="JavaScript Video Tutorials" href="http://goo.gl/2GAJs6" target="_blank">http://goo.gl/2GAJs6
Ajax Video Tutorials:http://goo.gl/pyNMCE
Some Cool tech stuffs for hackers:http://goo.gl/WeS4od

via: http://www.improgrammer.net/top-10-greatest-programmers-in-the-world-of-all-time/

Docker vs Vagrant: diferencias y similitudes y cuándo usar cada uno

Docker-o-Vagrant

Una de las cuestiones más de moda en los últimos meses en el mundillo de los “devops” es, sin duda, el uso de contenedores. Como ya explicamos aquí hace tiempo, la tecnología de contenedores va un paso más allá de la virtualización para ofrecer entornos ligeros de ejecución aislados del sistema operativo subyacente, pero sin toda la carga que conlleva hacer una verdadera virtualización. Consulta el enlace anterior para conocer más detalles.

Una confusión común en estos entornos es la de mezclar tecnologías diferentes bajo el mismo paraguas. Y un ejemplo claro de esto es la confusión que existe entre dos tecnologías muy conocidas relacionadas con todo esto pero que, como veremos, no tienen nada que ver entre sí: Docker y Vagrant.

Como ya explicamos en el artículo enlazado antes, Docker es una tecnología Open Source para crear contenedores ligeros y portables para cualquier aplicación. Lo bueno que tiene es que podemos empaquetar nuestra app en un contenedor Docker desde nuestro portátil y moverla tal cual a un servidor, una máquina virtual o a la nube sin hacer cambio de ningún tipo, asegurándonos que va a funcionar exactamente de la misma manera. Con esto nos olvidamos de dependencias, versiones del sistema operativo y bibliotecas, etc… Se trata de un avance increíble y está llamado a acabar con aquella famosa disculpa de “Pero, ¡en mi máquina funcionaba!”.

Por otro lado Vagrant es otro tipo totalmente diferente de tecnología pero, dado que el resultado es parecido, hay cierta tendencia a confundirlos. Lo que proporciona Vagrant es la creación y gestión sencilla de entornos de trabajo “portables” y replicables que funcionan sobre tecnologías de virtualización conocidas, ofreciendo además un modo de trabajo claro para poder transportar dichos entornos y que funcionen sin problemas en otro lugar: nuevamente en un servidor, la nube, etc… En realidad Vagrant se puede asimilar a un gestor de máquinas virtuales ya que por debajo usa la tecnología de virtualización que nos interese: VMWare, VirtualBox, Hyper-V, Amazon web Services, RackSpace Cloud, Google Compute Engine… Su factor diferencial es lo mucho que facilita la creación de las máquinas virtuales: creas un archivo que describe el tipo de máquina que necesitas, el software que tiene que tener instalado, la forma de acceder a la máquina virtual… Luego abres una línea de comandos, lanzas una  instrucción y en un momento Vagrant te crea el entorno completo que necesites, tal y como lo has descrito. Luego te puedes llevar ese entorno a cualquier otro sistema y usarlo desde allí.

Los resultados son parecidos, pero la tecnología para lograrlo es completamente distinta, y no hay que confundirlas.

Si hay algo que debería haberte quedado claro de todo lo anterior es que son tecnologías diferentes y no son excluyentes entre sí. Es decir, es posible utilizar Vagrant para crear un entorno capaz de ejecutar Docker dentro de éste y así desplegar una aplicación. Es más, Vagrant viene “de serie” con un proveedor para generar contenedores Dockerdirectamente en el sistema operativo actual.

De todos modos hay más diferencias entre ellos que podemos resumir en la siguiente tabla:

Característica Docker Vagrant
Tipo de virtualización: Contenedores Máquina virtual
Nivel de aislamiento: Débil Muy alto
Tiempo de creación: <10 min >10 min
Tamaño del despliegue: Al menos 100MB Al menos 1GB
Tiempo de arranque: Segundos Minutos
Impacto en el sistema: Muy bajo Alto
Garantiza recursos en el S.O.: No
Cuántos se pueden albergar a la vez: >50 <10
Principal ventaja: Rápido, ligero, fácil de aprender Fácil de gestionar, muy bien preparado para entornos de empresa

Ambas herramientas son excelentes para entornos de desarrollo y de pruebas y para pasar a producción entornos completos despreocupándonos por las posibles diferencias o la falta de bibliotecas o servicios necesarios. En ambos casos son mucho más flexibles que una “simple” máquina virtual tradicional, y bien utilizados, pueden suponer un ahorro enorme de problemas y de dificultades de gestión. Es por eso que todos los grandes actores de la industria están apostando por ellos, especialmente por Docker, e incluso Microsoft ofrece soporte para el producto dentro de sus sistemas operativos y dentro de Azure (hay que pensar que originalmente Docker solo funcionaba en Linux).

via: http://www.campusmvp.es/recursos/post/Docker-vs-Vagrant-diferencias-y-similitudes-y-cuando-usar-cada-uno.aspx

Qué es el stack MEAN y cómo escoger el mejor para ti

Últimamente está muy de moda algo llamado MEAN o más concretamente del “Stack MEAN” para desarrollo web basado en JavaScript, del que seguramente habrás oído hablar.

Como ya he comentado en otras ocasiones, el lenguaje JavaScript se está haciendo un hueco cada vez mayor en el mercado del desarrollo de software. Aquel humilde lenguaje que empezó en los años ’90 como una vía sencilla de validar formularios, se ha convertido en parte fundamental del desarrollo de todo tipo de aplicaciones: web, móviles, bases de datos, administración de sistemas…

Esta proliferación ha llevado a JavaScript a todas las capas de desarrollo, empezando por el lado cliente en sus inicios (el navegador), pero yendo también al servidor y a la capa de almacenamiento. En cualquiera de esos puntos podemos encontrar JavaScript listo para ser utilizado.

Gracias a eso, hoy en día es posible crear aplicaciones distribuidas utilizando el mismo lenguaje JavaScript en todas sus fases y capas. A este concepto y las tecnologías que lo posibilitan se les ha bautizado con el nombre de MEAN, acrónimo formado por las iniciales de las cuatro tecnologías principales que entran en juego: MongoDB, Express, AngularJS y Node.js.

MEAN_750

En mi opinión, por orden lógico, debería llamarse ANEM o incluso MENA, pero la verdad es que MEAN queda mejor y le da un toque agresivo (“mean” en inglés de la calle significa, entre otras cosas, borde, desconsiderado, incluso malévolo, aunque también es sinónimo de “cool”). AMEN tampoco hubiera estado mal 🙂

Veamos cada una de sus partes principales

Node.js

imageEsto no lo sabe todo el mundo pero, de hecho, JavaScript nació en el lado servidor casi al mismo tiempo que en el navegador. La propia empresa que creó el lenguaje, Netscape, lo incluyó también en su servidor webllamado Netscape Enterprise Server, aunque con poco éxito. Poco despuésMicrosoft lo incorporó a su ASP clásico, donde todavía funciona (aunque los programadores se decantaron más por el lenguaje VBScript). Muchos otros han hecho lo mismo.

No es sin embargo hasta hace relativamente poco, en 2009, cuando un proyecto empezó a poner en el mapa realmente a JavaScript en el lado servidor. Se trata de Node.js, un entorno de ejecución de aplicaciones multiplataforma y de código abierto (Open Source).

Node.js utiliza por debajo el motor de JavaScript de Google, denominado V8, y provee de una arquitectura orientada a eventos (como la de los navegadores) así como una serie de APIs no-bloqueantes (asíncronas) que le proporcionan un rendimiento y una escalabilidad muy elevadas. Se puede utilizar para crear cualquier tipo de lógica de aplicación, pero dado que incorpora un módulo para poder actuar como un servidor web, es especialmente popular para crear aplicaciones web. Actualmente lo emplean para sus aplicaciones multitud de empresas de todos los ámbitos pero especialmente de Internet: PayPal, SAP, Groupon… incluso la mismísima Microsoft, que ayuda a crear la versión para Windows (bajo IIS funciona de maravilla, con grandes ventajas frente a hostearlo solo) y lo soporta en Azure y en sus herramientas de desarrollo.

Gracias a Node.js se pueden crear gratuitamente aplicaciones web de alto rendimiento, en cualquier sistema operativo y utilizando como único lenguaje de programación JavaScript.

Express

imageNode.js por sí mismo está muy bien para crear la lógica de las aplicaciones, y como dispone de un módulo para el protocolo HTTP es posible crear aplicaciones web con lo que trae por defecto. Sin embargo es complejo, costoso y tenemos que hacer todo el trabajo a bajo nivel nosotros mismos.

Para ayudar a crear aplicaciones web más fácilmente nació Express. Este framework está escrito en JavaScript para Node.js. Su objetivo es que no tengamos que reinventar la rueda cada vez que queramos crear una aplicación web, ofreciéndonos soporte para las principales necesidades en este tipo de aplicaciones: gestión de peticiones y respuestas, cabeceras, rutas, vistas…

Digamos que Node.js sin Express.js sería mucho menos de lo que es hoy. Y costaría 10 veces más construir aplicaciones web con JavaScript. Así que van unidos felizmente en el servidor para permitirnos crear aplicaciones web de manera sencilla, por eso los he puesto juntos en la capa del medio de la figura anterior.

AngularJS

imageAunque evidentemente en el navegador podríamos desarrollar todo el código usando solamente HTML, CSS y JavaScript puro, qué duda cabe que disponer de alguna biblioteca que nos proporcione muchas funcionalidades ya hechas, facilita mucho las cosas. Es algo parecido a lo que pasa con Node.js y Express.js: el primero puede funcionar sin el segundo, pero seríamos tontos si no utilizásemos este último.

En el navegador desde siempre han existido bibliotecas de funciones que nos facilitan mucho la vida. La más conocida y utilizada es sin duda jQuery, que también fue una de las primeras en ser adoptada universalmente. En los últimos años se ha trasladado al navegador el patrón de diseño denominado MVC (Modelo-Vista-Controlador) y han surgido cientos de bibliotecas especializadas en facilitarnos su uso. De entre todas ellas destaca AngularJS que ha tomado un especial protagonismo en los últimos tiempos, entre otras muchas cosas porque está creada y soportada por Google, es gratuita y de código abierto.

Algunos han definido a AngularJS como “lo que HTML debería haber sido si se hubiese diseñado para crear aplicaciones”. Ahí queda eso.

Angular.js va mucho más allá de ser una simple biblioteca de funciones: es un completo framework que nos brinda todo tipo de funcionalidades avanzadas, extendiendo de hecho HTML.

MongoDB

imageEn el lado del almacenamiento se han utilizado tradicionalmente bases de datos relacionales. Sin embargo, actualmente, los tipos de información que suelen requerir las aplicaciones web demandan mayor flexibilidad, menos coherencia y sobre todo mayor capacidad de escalar. Para dar respuesta a todo esto surge la tendencia tecnológica en almacenes de datos que se denomina NoSQL.

Estos almacenes de datos NoSQL pueden ser de diversos tipos, pero en muchos casos utilizan JavaScript para representar la información, recibiendo, enviando y almacenando datos usando la notación JSON (ver más abajo).

De entre todos estos almacenes de datos no-relacionales hay uno que destaca especialmente: MongoDB, y que es la “M” del stack MEAN.

No voy a entrar más detalles aquí porque ya he escrito mucho anteriormente sobre este tema. Así que si necesitas aprender lo fundamental sobre la tecnología NoSQL, sus motivaciones, sus limitaciones, sus aplicaciones… y también sobre MongoDB, léete el artículo “Fundamentos de bases de datos NoSQL: MongoDB“, donde te lo explico todo.

JSON

imageEsto no forma parte del acrónimo MEAN, pero es una parte integral del mismo. Es también a su vez una palabra formada por iniciales de palabras, y significa:JavaScript Simple Object Notation.

Como su propio nombre indica JSON (pronunciado “yeison”) permite representar objetos (en realidad estructuras complejas) en forma de código JavaScript que luego podemos evaluar. Su padre es Douglas Crockford.

Este formato es ligero, fácilmente legible por un humano pero también por un ordenador, está basado en JavaScript y además es muy fácil de procesar por parte de cualquier intérprete de este lenguaje.

Por ejemplo, este es un objeto JSON que representa un contacto:

{
 "nombre" : "José Manuel",
 "apellidos" : "Alarcón Aguín",
 "empresa" : "campusMVP",
 "telefono" : "986 165 802",
 "edad" : 42
}

Como vemos no es más que un objeto JavaScript normal y corriente. Crearlo es muy fácil pues es sintaxis JavaScript convencional. Enwww.json.org es posible encontrar una explicación completa de esta notación.

JSON es el pegamento de todas las capas. Es el formato en el que se transfieren los datos entre todos los niveles de la aplicación: navegador, servidor web y servidor de datos.

Aunque no forme parte del nombre es una parte esencial del stack MEAN.

Otros elementos

Con estas piezas ya tenemos lo fundamental del stack MEAN, aunque por supuesto necesitamos HTML y CSS, y muchas otras pequeñas piezas para facilitarnos el trabajo. Por ejemplo:

  • Es muy común usar Require.jsBrowserify para definir y cargar módulos asíncronamente en nuestras aplicaciones, ganando en agilidad de carga de las aplicaciones y evitando problemas de dependencias.
  • También existen infinidad de bibliotecas especializadas en todo tipo de cuestiones, como el manejo de fechas, la creación de plantillas y enlazado a datos, gráficas, etc, etc, etc…
  • Herramientas de testeo de aplicaciones, como QUnit, jasmine o Selenium.
  • Metalenguajes: lenguajes encima de otros lenguajes que ayudan a ser más eficiente y trabajar más fácilmente. Por ejemplo, con Sass o Less podemos escribir hojas de estilo mucho más potentes, flexibles y con más facilidad que con CSS. Estos lenguajes compilan luego a CSS estándar. Lo mismo ocurre con JavaScript. Metalenguajes como CoffeeScript o TypeScript ofrecen capacidades que no tiene JavaScript nativamente pero luego compilan a JavaScript nativo. De este modo podemos trabajar de manera mucho más eficiente con características más avanzadas en el lenguaje, pero obteniendo al final JavaScript puro.

Para poner orden en todo esto herramientas como Bower, un gestor de paquetes para desarrollo web en lado cliente, o Yeoman, capaz de generar y darnos ya hecha la base de muchas aplicaciones usando todo tipo de bibliotecas.

Y salvo que uses Visual Studio, WebStorm o herramientas avanzadas similares, lo más normal es que necesites automatizar muchas tareas antes de desplegar tu aplicación: conversión de SaaS o Less a CSS, de CoffeScript o TypeScript a JavaScript, minimización y ofuscación de código, ejecución de pruebas…. Para facilitarnos esto existen herramientas basadas en JavaScript como Grunt.

Herramientas_FrontEnd

No se vayan todavía… aún hay más…

Por si todo esto no fuera suficiente, todavía hay algo más para acabar de complicarlo.

Una vez que tenemos claro qué es el stack MEAN y qué componentes lo conforman, si se nos ocurre buscar información en la Web sobre “stack MEAN” veremos que nos aparecen muchos proyectos que dicen ser la base de dicho stack. Los dos más populares y que seguro que nos topamos enseguida son Mean.js y Mean.io.

Ambos afirman ser una solución completa de código abierto para el stack MEAN y que abarcan el stack completo. WTF?

Esto lo que significa es que ambos nos proporcionan una base de la que partir para construir aplicaciones basadas en MEAN, de forma que tengamos parte del camino andado. Ambos son muy parecidos (de hecho parten de la misma base pues Mean.js es un fork de Mean.io, que empezó antes) pero tienen filosofías diferentes a la hora de construir las aplicaciones.

¿Cuál elegir? Bueno, difícil responder, pues ambos son excelentes. Por un lado Mean.js está mejor documentado que Mean.io, pero sin embargo este último tiene una comunidad más activa por lo que nos será más fácil conseguir ayuda…

Por otro lado, lo sorprendente es que ambos fueron creados por el mismo desarrollador Amos Haviv, que lo inició bajo los auspicios de una empresa que le daba soporte. Al cabo de un tiempo surgieron conflictos, así que abandonó el proyecto y ahora mantiene Mean.js (aquí lo explica él mismo). En ese sentido esta segunda opción puede parecer mejor, pues el creador original es por la que ha apostado, pero por otro lado Mean.io tiene detrás a una empresa que garantiza su soporte… Difícil elección.

Además de estos dos hay unos cuantos más, como por ejemplo:

Sea como sea, cualquiera de ellos es una buena elección. Es cuestión de acostumbrarse al modo de trabajar de cada uno y todos están bien documentados.

Además, siempre podemos partir totalmente de cero y trabajar como queramos con las piezas del puzle.

La elección es tuya.

via: http://www.campusmvp.es/recursos/post/Que-es-el-stack-MEAN-y-como-escoger-el-mejor-para-ti.aspx