Ordenar fechas en JavaScript

Hace unas semanas, recibí esta consulta en el curso iDESWEB:

Lo que si que me tiene mosca, es lo de ordenar las fechas, si lo haces con sort como los títulos y los países te ordena las fechas por días, entonces mirando los métodos de date vi parse que te devuelve el valor en milisegundos desde el 1 de enero del año 70 o algo así, lo probé en un documento a parte con dos fechas en el formato en el que tengo las fechas y me daba dos números diferentes ,con lo que lo puse en el documento HTML y me ordenaba bien los años, pero no entiendo bien porque las fechas del mismo año estaban desordenadas. Además cuando quite las alertas que me puse antes de cada función para asegurarme que se ejecutaban correctamente, no se porque ya no me lo ordena ni por años y eso que tire de control z y lo deje igual, pero debí de cambiar algo porque ahora no funciona y la consola de firefox no me marca errores de js. También en probado con valueOf y nada tampoco.

Y esta fue mi respuesta:

Hola.

La función sort() de JavaScript realiza un ordenación alfabética. Esa ordenación no sirve para ordenar fechas, porque una fecha escrita con el formato “dd/mm/aa” se tiene que ordenar de derecha a izquierda.

Para usar esa función en la ordenación de fechas puedes hacer dos cosas:

  • Puedes escribir la fecha en formato “aaaa-mm-dd”, que casualmente (no es casualidad, está hecho por esto mismo) es el formato que se emplea en las bases de datos para almacenar las fechas. De este modo, primero se ordena por el año, después por el mes y por último por el día. Lo que ocurre es que este formato es confuso para mucha gente: lo puedes usar internamente, pero no para mostrar una fecha al usuario.
  • Puedes suministrar a la función sort() una función de callback para realizar la comparación: esa función, que debes escribir, realiza la comparación de dos fechas.

Pasar la fecha al número de segundos o milisegundos podría ser una solución… pero no lo es, porque sort() realiza una ordenación alfabética, no numérica: tampoco sirve para ordenar números. Prueba lo siguiente:

var a = [2, 20, 19, 1, 10, 111, 200, 9, 99];
a.sort();

El resultado es:

[1, 10, 111, 19, 2, 20, 200, 9, 99]

¿Está ordenado?
Un saludo.

Cómo llegar a ser un especialista…

…en cualquier cosa.

Llegar a ser un especialista (o experto) requiere un esfuerzo, un gran esfuerzo. Para ti, para mí y para el 99,99999999% de la población, ser un especialista en algo requiere un gran esfuerzo: tiempo y dedicación. Detrás de los éxitos de Rafa Nadal, Leo Messi o Javier Bardem, hay miles de horas de trabajo que no se ven. Sólo pensamos en el éxito, pero no solemos ver el trabajo que ha requerido ese éxito. Si uno quiere alcanzar el éxito, tiene que estar dispuesto a pagar su precio.

Es algo que siempre he pensado y defendido. Pero como yo no soy “nadie”, no lo voy contando por ahí. Pero hay dos personas que saben más que yo y dicen lo mismo:

  • Después de estudiar la vida de varios “expertos” o “triunfadores”, Malcolm Gladwell en su libro Outliers: The Story of Success establece que son necesarias 10.000 horas de práctica para llegar a ser experto en algo. Si suponemos que un año tiene 46 semanas de trabajo, y cada semana son 40 horas de trabajo (1.840 horas al año), serían necesarios cinco años y medio de trabajo continuado a ese ritmo de esfuerzo para llegar a ser un experto en algo.
  • Peter Norvig, director de investigación en Google, en su artículo Teach Yourself Programming in Ten Years (traducido al castellano, Aprende a programar en diez años) critica los libros que te prometen “aprende algo (lo que sea, programar, cocinar, un idioma, etc.) en 3 días, en 2 semanas o en 21 días”. Imposible, si entendemos por aprender el conocer algo en toda su profundidad y amplitud, no quedarnos únicamente en lo superficial.

Desgraciadamente, el aprendizaje que impera en la actualidad es el superficial. Pero no sólo afecta al aprendizaje, sino a casi todo lo que hacemos en la vida. Y otra vez, no lo digo yo, sino que lo dice Nicholas Carr en su libro Superficiales: ¿Qué está haciendo Internet con nuestras mentes? Si no quieres leer el libro porque eres “superficial”, puedes leer el artículo Un mundo distraído.

Y para terminar, otra lectura más sobre cómo llegar a ser un profesional en algo: Lo que nos separa son solo miles de horas…

Una redacción de textos poco afortunada

En la web de la Escuela Politécnica Nacional he encontrado la página del Proyecto Prometeo con un texto que me ha recordado viejos tiempos:

epn-prometeo

Para mayor información por favor enlazarse en el vínculo de los prometeos que se encuentra en la página de la Comisión de Investigación, Evaluación y Extensión (COMIEX), dando clic en el siguiente link.

http://comiex.epn.edu.ec/index.php/2013-02-27-19-59-15

El uso de frameworks

He recibido la siguiente consulta:

Hola Sergio, me llamo Pedro, he estado haciendo el curso IDESWEB y quisiera hacerte una pregunta, ya que no me ha quedado muy claro el uso de los Frameworks!!
Debo utilizar tantos frameworks, como lenguajes tenga mi página web, o únicamente, sólo aquellos, en los que me resulte más tedioso o repetitivo programar, y el framework, me facilite el trabajo?

Y mi respuesta:

Un framework es una herramienta y como tal hay que aprender a usarla. Y una de las cosas que supone aprender un framework es saber cuándo se debe utilizar. Tal como señalas en tu pregunta, un framework evita el tener que realizar tareas que son tediosas, repetitivas y no aportan valor al trabajo realizado. Por tanto, dependerá de cada trabajo.

Otro tema importante es la efectividad y la eficiencia, que expliqué en mi entrada ¿Cómo competir con esto? Los frameworks suelen ser pesados, suelen implicar una cierta penalización en el rendimiento… hay que evitar matar moscas a cañonazos.