miércoles, 12 de diciembre de 2012

Objective-C se moderniza: subscripting

Objective-C es un lenguaje bastante distinto en su sintaxis a otros lenguajes de programación como ser C#, Java o Ruby. Como tal, es un lenguaje que a primer golpe de vista parece dificil de entender.

Además, es un lenguaje que por sus características, es más "verbose" que los demás, y esto a su vez puede hacer que parezca que hay que escribir mucho código.

Esta última característica no es siempre mala. Por ejemplo, en Java (o cualquier otro lenguaje que no incluya los nombres de los parámetros en el nombre del método), si uno no conoce la API en detalle, y ve este código:
String result = "some sample string".replace( 'a', 's' );
puede no quedarle claro si se va a remplazar la 'a' por la 's' o la 's' por la 'a'. En Objective-C, esto se escribe así:
NSString *result = [@"some sample string" stringByReplacingOccurrencesOfString:@"a" withString:@"s"];
Es verdad que es mucho más código, pero el mismo se entiende sin necesidad de conocer la API ni de ir a la documentación.

Nota: es un ejemplo "tonto", pero se complica si se tienen funciones con varios parámetros.

Sin embargo, hay casos en que tanto código puede resultar innecesario. Por ejemplo, cuando se quiere acceder a un elemento de un array:
id item = [someArray objectAtIndex:index];
o peor, cuando se quiere almacenar un elemento en un array (mutable):
[someMutableArray insertObject:item atIndex:index];
Por suerte, Objective-C es un lenguaje en evolución, y hay varias cosas que están cambiando. Ya hablamos de Automatic Reference Counting y de Blocks, funcionalidades que se agregaron recientemente al lenguaje/compilador, pero también por ejemplo literales para arrays, diccionarios o números (de lo que hablaré en algún otro momento).

A partir de Xcode 4.4, el acceso a los elementos de un array, tanto para leer como para modificar, se puede hacer de forma más concisa:
id item = someArray[index];
someMutableArray[index] = item;
Esto también aplica para los diccionarios, que se puede acceder por clave por ejemplo con:
id item = someDictionary[key];
someMutableDictionary[key] = item;
Pueden ver más información en la documentación del LLVM al respecto.

lunes, 3 de diciembre de 2012

Los robots nos van a dejar sin trabajo?

Estuve viendo esta charla de TED que me pareció interesante, y la iba a "tuitear" pero no estoy del todo de acuerdo con las conclusiones, así que me pareció mejor comentarla acá...


En la charla, Andrew McAfee se hace esta pregunta, y llega a la conclusión de que sí, en gran medida vamos a ser reemplazados por robots.

Uno de los ejemplos que pone también me parece interesante. Dice que en Estados Unidos, hay más de 3 millones de camioneros, que potencialmente van a perder el trabajo cuando se perfeccionen los vehículos autónomos. No se cuanto dará el número si se le suman los taxistas, repartidores, conductores a ambulancias, etc.

Es verdad que ahora puede parecer ciencia ficción, pero la tecnología va a llegar en 5, 10 o 15 años, y a las empresas les va a servir más que contratar seres humanos, porque va a ser mucho más barato.

McAfee dice ser optimista, que a pesar de que los robots nos van a dejar sin trabajo, la tecnología va a resolver los problemas, y que nosotros vamos a estar más libres para hacer otras cosas.

Yo también soy optimista con respecto a la tecnología, pero en el largo plazo. Creo que si la perdida de trabajo se da de golpe van a haber crisis muy importantes, que no van a ser despreciables como parece dar a entender el autor de la charla.

Lo que una cosa sí estamos de acuerdo: we ain't seen nothing yet...