Pues no, no la hay, antes solo existía el debate de Windows vs Linux, luego se sumo Intel vs AMD, ahora ya tenemos un poco de todo Java vs .NET, PHP vs Ruby… –¿dónde quedo ensamblador contra C?-.
Ahora evolucionamos al mundo framework, en JavaScript un festival, React vs Angular vs Aurelia vs Boostrap vs …. pero tampoco pasa nada porque en el fondo unos se pueden mezclar con otros, si al final hasta se quieren llevar bien.
Por otro lado tenemos los lenguajes de nueva hornada en general surgidos de la nueva ola funcional, desde Scala a F# a Clojure, para todos aquellos que os habéis preguntado si hay vida más allá del imperativo, pues si, la hay.
NoSQL viene a romper el inmovilista mercado de las bases de datos, más de un dba debería preocuparse, por mi perfecto, por fin alguien se molesta en hacer bases de datos para desarrolladores y si yo quiero guardar un objeto lo guardo y no tengo que partirlo en trozos para luego volver a juntarlos.
Breve recorrido por el mundo arquitectura, desde los grandes clásicos de 3 capas a N capas, pasando por DDD, EDA, aspectos… como no permitiendo combinaciones entre ellos no vaya a ser que alguien se quede atrás y decir que si solo haces 3 capas es de pobres y DDD es de innovadores que matan moscas a cañonazos cuando realmente deberías estar haciendo SOA que sirve para todo, lo de ahora y lo que vendrá.
Como no podía ser de otra manera tocan las metodologías, TDD, BDD, por supuesto TDD es lo que te hará tener una aplicación con menos errores que una hoja en blanco y BDD hará que quieres irte de cañas con los funcionales de tus proyectos, cuando llegues a las copas estarás hablando de ATDD.
Parece muchas veces que haya que tomar partido, no existe esa necesidad, los extremos en informática no funcionan, ni desde el lado propietario cerrando puertas al campo ni desde el código libre teniendo tal diversidad de distribuciones y software repetido que la fuerza se dispersa.
La virtud está en el término medio, es bueno que haya código libre pero tiene que haber una base a la que agarrarse, con Linux se han intentado crear consorcios con más pena que gloria, en desarrollo a .NET se le supuso una teórica capacidad multiplataforma (sin contar Core) que nunca llego y al final Java siempre termina ejecutándose en entornos Unix.
Las pruebas unitarias son útiles y necesarias pero no un pilar que te condicione un desarrollo como en TDD, BDD no te va dar fiabilidad integral a tu aplicación pero cada uno en su lado (¿Back y Front?, ¿microservicios y SPA?, ¿entorno técnico y funcional?) suponen una buena combinación.
DDD te puede dar escalabilidad y la transversalidad se la puedes dejar a AOP, si has perdido la pista de tú código EDA te puede poner en la senda y si el frontal es ligero un n-capas estilo MVC te responderá bien.
No entrare en el oscuro mundo de la arquitectura corporativa o como coger tu aplicación partirla en trozos y lanzar cada uno por separado a través de buses de conectividad proporcionando todo tipo de servicios, al menos se puede decir que en este ámbito existe más combinación.
Los frameworks estan de moda en líneas generales, son útiles siempre y cuando el framework no tape el lenguaje, –se jQuery pero no se que es JavaScript-, siempre he creído que un framework es bueno cuando inviertes más tiempo en leerlo que en escribir código.
Politizar la informática haciendo bandera de «¿ves como te decía que la tecnología Pokemon iba a triunfar?» quizás no sea la opción, habría que optar más por formas de arreglar problemas que por intentar encontrar el santo grial que nos permita no tener que volver a leer un manual de informática, yo por lo menos sabía lo que me esperaba cuando me metí en esto (bueno, quizás no tanto).
Actualizando Raspberry Pi 2 a Jessie
Jessie trae características nuevas como por ejemplo PHP 5.6 que no estaba disponible en wheezy, si queremos tener esta versión o alguna otra solo disponible en Jessie tendremos que realizar el siguiente proceso, antes de nada es recomendable realizar un backup del sistema que en una raspberry es tan fácil como volcar la imagen de la tarjeta SD a disco (usando el comando dd en linux o Win32DiskImager en Windows).
Lo primero es actualizar la versión que tenemos (wheezy).
# sudo apt-get update
# sudo apt-get upgrade
# sudo apt-get dist-upgrade
Update actualiza la lista de paquetes, upgrade actualiza los paquetes y dist-upgrade actualiza toda la distribución (incluyendo kernel, librerías, loader, etc…)
Si no ha habido problemas pasamos al siguiente punto que consiste en actualizar la lista de repositorios, esta lista se encuentra en /etc/apt/sources.list, con el siguiente comando lo que hacemos es modificar la línea del repositorio que apunta a wheezy para que apunte a los repositorios de jessie.
# sed –i ‘s/wheezy/jessie/g’ /etc/apt/sources.list
Y dentro del fichero sources.list veremos lo siguiente:
deb http://mirrordirector.raspbian.org/raspbian jessie main firmware contrib non-free
Con esto le estamos diciendo que busque paquetes dentro de la distribución jessie para todos los componentes indicados (main, firmware,…)
Ahora procedemos a actualizar el sistema, durante la instalación se nos preguntará si queremos reiniciar los servicios afectados automáticamente, lo recomendable es que si pero teniendo en cuenta que no hay que deshabilitar el acceso root por SSH si no tenemos acceso físico a la raspberry, esto no es problema ya que por defecto el usuario root no está disponible en raspbian, durante el proceso se reiniciará el propio proceso ssh pero eso no nos cortará la conexión con un cliente ssh estilo putty.
La actualización la lanzamos con los siguientes comandos:
# sudo apt-get update
# sudo apt-get upgrade
# sudo apt-get dist-upgrade
Es posible que durante la instalación se nos indique que algunos archivos han sido modificados por otros paquetes y que versión del mismo queremos mantener, si la modificación no ha sido realizada por nosotros mismos actualizar suele ser una buena idea, en cualquier caso siempre se nos dará la opción de ver las diferencias.
Cuando terminamos repetimos el proceso de actualización para verificar que no hay paquetes pendientes, en caso de que nos aparecieran paquetes “retenidos” que no se instalan tendríamos que volver a lanzar la actualización de la distribución (dist-upgrade)
El proceso en si es bastante largo pero quitando alguna que otra pregunta de actualización de ficheros es bastante automático.
Finalmente reiniciamos.
# reboot
Información obtenida aquí
Atajos de edición Visual Studio 2013
Visual Studio tiene infinidad de atajos de edición, muchas veces no se usan precisamente por la cantidad que tienen, así que a veces lo recomendable es empezar por usar unos pocos, en este caso he cogido esta selección sacada de Ninja-Tips, recomendable dedicar unos minutos a probarlos:
Alt + Flecha arriba / Flecha abajo: Posicionado sobre una línea de código la mueve hacia arriba o hacia abajo, si se selecciona un conjunto de líneas las moverá juntas.
Ctrl + U / Ctrl + Shit + U: Pone en minúsculas / mayúsculas el texto seleccionado.
Ctrl + K + C / Ctrl + K +U: Comenta o descomenta una línea de código, si se selecciona un conjunto de líneas las comentará juntas.
Ctrl + E + F: Formateo insensible al contexto, el texto seleccionado se formatea independientemente del resto del código.
Ctrl + E + D: Formatea todo el documento teniendo en cuenta el contexto.
Mayus + Alt: Permite selección en vertical, una vez hecho esto, se pueden editar varias líneas a la vez, también se puede hacer con Alt + botón izquierdo del ratón.
Ctrl + K + S: Surrounding, permite elegir una estructura de código que se aplicará a todas as filas seleccionadas (try-catch, try-finally, if,…)
Snippets de código: Hay varios snippets, por ejemplo “prop” + Doble tabulador, crea el código de una propiedad, “propfull” crea una propiedad completa,…
Ctrl + K + X: Permite acceder a los shortcuts personalizables.
Ctrl + K + M: Crea un método automáticamente sino existe con la firma adecuada extraída el contexto de llamada.
Ctrl + . : Saca el menú de opciones para resolver referencias no resueltas y otras opciones.
Instalando MongoDB
Las bases de datos NoSQL están cogiendo cada vez más popularidad, MongoDB posiblemente sea la que más atención acapare ahora mismo, mucha gente se centra en su capacidad de almacenar y procesar gran cantidad de información pero de cara al desarrollo su interés radica en su cómodo acoplamiento con el código.
En desarrollo se llama impedancia a esa separación que existe entre las bases de datos y el código, las BBDDs tradicionales funcionan con tablas mientras que el código si es POO funciona a través de clases, esta impedancia se ha intentado resolver con varias soluciones (Active Record, ORM,..) aunque en el desarrollo resulta evidente que siguen surgiendo diferencias entre un sistema y otro.
En el caso de MongoDB (y posiblemente otras) esta diferencia queda mitigada, el simple hecho de que tus objetos se puedan guardar “tal cual”, si además a esto le sumamos un mantenimiento fácil que simplifica la parte de IT es normal que haya calado entre la comunidad de desarrolladores
En este caso voy a dar unas breves notas de cómo se instala y un poco de configuración básica sobre MongoDB, hay que tener en cuenta que MongoDB se puede programar usando un lenguaje javascript lo cual facilita mucho las cosas, al final veremos un ejemplo.
Una vez descargada la aplicación está se instalará por defecto en C:\Program Files\MongoDB, por defecto la ruta de los datos se almacena en \data\db.
La aplicación se lanza con el ejecutable mongod, una vez abierta se puede cerrar con Ctrl+C.
Es posible indicar un archivo de configuración, por ejemplo:
#where data files will reside
dbpath=G:\MongoDB\Data
#where the log file will be stored
logpath=G:\MongoDB\Log\mongo-server.log
#how verbose the server will be logging
verbose=vvvvv
Esto indica que los datos se guardarán en la ruta G:\MongoDB\Data, el log se guardará en la ruta G:\MongoDB\Log\mongo-server.log el nivel de detalle se especifica en verbose.
Para poder instalar como un servicio se ejecutaría la siguiente línea apuntando al archivo de configuración.
mongod –f “c:\Program Files\MongoDB\Server\3.0\bin\mongod.conf” –install
Para poder lanzar la línea de comandos del cliente hay que usar el ejecutable mongo.
Algunos comandos básicos son:
| show dbs | Muestra las bases de datos que existen |
| db | Muestra la base de datos actual |
| Use nombre_de_base_de_datos | Cambia a la base de datos indicada |
| help | Muestra la ayuda |
| db.getMongo() | Devuelve los datos de la conexión |
Se pueden lanzar comandos administrativos sin invocar la Shell de comandos, por ejemplo para poder lanzar comandos de administración:
mongo server1/admin –eval “db.runCommand({logRotate:1})”
En este caso la opción eval evaluará el comando entre comillas y lo ejecutará sin entrar en Shell (en el ejemplo se rota el archivo de log para archivarlo).
Si son muchos comandos entonces se puede lanzar un archivo que contenga todos los comandos:
mongo server1 myDailyChores.js
Existe la opción de ejecutar una secuencia de comandos y después ingresar en la Shell para seguir introduciendo órdenes, en este caso introduciendo –shell al final:
mongo server1 myDailyChores.js –shell
Podemos introducir la cadena de conexión y la base de datos directamente donde ejecutar el comando.
mongo localhost/admin –eval “db.runCommand({logRotate:1})”
La salida de este comando no es muy descriptiva, si queremos ver la información que emite la consola podemos hacer:
mongo localhost/admin –eval “printjson(db.runCommand({logRotate:1}))”
Unos accesos rápido y útiles en la shell desde teclado:
Ctrl+K Borra desde el cursor hasta el final de línea
Ctrl+L Limpiar pantalla
Se puede usar un editor externo para la edición de javascript asociado a MongoDB, para ello se establece la variable de entorno EDITOR.
C:\>set EDITOR = “notepad++.exe”
Después desde el Shell de mongo haríamos:
mongo> myFunction = function(x) {}
mongo> edit myFunction
Para cargar desde la Shell un archivo primero usaríamos pwd() para saber la ruta actual y después para cargar el archivo safer.js que contiene el código haríamos load(‘safer.js’).
Se puede ejecutar un fichero siempre que se entra en la shell de mongo para esto se crea un fichero con nombre mongorc.js y se coloca dentro de la ruta de usuario c:\users\{username}\.mongorc.js
Si se quiere evitar la carga de este fichero inicial se puede usar el parámetro –norc
Finalmente un script útil para evitar borrar base de datos o apagar el servidor:
var _no_ = function() { print(“Nope!”);}
db.prototype.dropDatabase = _no_;
db.dropDatabase = db.prototype.dropDatabase;
db.prototype.shutdownServer = _no_;
db.shutdownServer = db.prototype.shutdownServer;
Otra forma sería:
db.prototype.dropDatabase = function() {
print(“No”);
}
db.dropDatabase=db.prototype.dropDatabase;
Servidor LAMP en Raspberry Pi 2
Cada vez aparecen más microdispositivos que ofrecen un buen rendimiento a bajo coste, uno de estos es raspberry pi (con papel estelar en la serie Mr. Robot), tiene múltiples posibilidades por ejemplo servir como VPN, servidor DHCP, DNS,… o servidor multimedia (con Torrent).
En este caso vamos a instalar un servidor LAMP de desarrollo usando la distribución Raspbian, Raspbian es muy fácil de instalar usando el sistema NOOBS tal y como se comenta en la propia página web, de hecho si solo queremos un servidor es muy recomendable instalar la versión lite que nos quitará el apartado gráfico.
Después de instalar tendremos un menú donde podremos modificar algunos valores, si queremos volver a invocarlo siempre podremos hacerlo a través de raspi-config (si hemos usado usado la versión lite tendremos que instalar este paquete vía sudo apt-get install rpi-update).
Una vez arrancado el sistema es recomendable actualizarlo, tanto el firmware del mismo a través de rpi-update (requiere reiniciar) como los paquetes a través de apt-get update && apt-get-upgrade.
Ya que vamos a instalar un servidor suele ser recomendable tener una dirección IP estática, para eso editaremos el archivo /etc/network/interfaces y en lugar de usar una dirección dinámica (DHCP) indicaremos los datos de nuestra interfaz, existe un artículo describiendo el proceso y nos quedará para la interfaz eth0 algo como:
iface eth0 inet static
address 192.168.1.3
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
Otra opción sería dejarlo en dinámico (con DHCP) y establecer en los servidores DHCP y DNS el nombre de manera estática, esto simplifica la gestión de red de las raspberry pero obliga a tener un servidor DHCP y DNS instalado.
Tras esto hay que tirar y levantar la interfaz vía ifdown eth0 && service networking restart && ifup eth0, tambien es recomendable hacerlo por consola por si la interfaz no se levanta, si sale un error como ifdown: interface eth0 not configured, una opción es lanzar este comando y reiniciar la raspberry.
sudo ip addr flush dev eth0
Opcionalmente podemos querer cambiar el nombre de la raspberry esto lo haremos modificando el fichero /etc/hostname, si se cambia el nombre por defecto para el correcto descubrimiento de la propia raspberry hay que modificar también el fichero /etc/hosts.
Tras esto instalamos el entorno con: apt-get install apache2 php5 mysql-server en el caso de mysqlserver nos solicitará una contraseña de root para poder acceder al servidor, no es obligatorio pero si muy recomendable.
Suele ser útil crear un host virtual en apache en el cual indicaremos que las páginas PHP que ejecuta están almacenados en una unidad de red externa, de esta forma podremos editarlos desde otra máquina a la vez que se pueden acceder desde Apache, para esto podremos usar el host virtual por defecto que viene en la instalación, es más útil trabajar con virtuales porque así podemos aislar proyectos entre sí con sus propios nombres.
Solo hay que tener en cuenta que dentro del host virtual hay que añadir ServerName servidor donde servidor será el nombre que le hayamos dado al servidor virtual, aquí hay un trabajo con el DNS ya que por un lado en el propio archivo hosts del servidor tenemos que darlo de alta y de cara al exterior también tendremos que darlo de alta en el archivo hosts de cada máquina que quiera acceder a no ser que dispongamos de un servidor DNS a tal efecto.
Para mapear las carpetas de apache a una unidad de red solo tenemos que montar la unidad (mount -a) de red externa añadiéndolo a /etc/fstab tal que (en una línea):
//unidad/carpeta/cliente/proyecto /var/www/proyecto/ cifsuid=1000,gid=1000,username=user,password=pass,iocharset=utf8,auto 0 0
donde username y password son credenciales válidas de red, también se puede especificar un fichero externo de credenciales, para más información consultar man.
Una vez hecho esto ya podemos desarrollar, también podemos clonar un repositorio Git en la carpeta, por ejemplo Bitbucket que permite repositorios privados y también es compatible con Azure, aunque GitHub también es otra posibilidad.
Google campus
Hace poco tuve la ocasión de acercarme a Google Campus Madrid el primer campus de Google en Europa dedicado a la creación de startups y a poner en contacto empresas y emprendedores, también dan charlas durante la semana así que si queréis ver que ponentes hay y cuales son los temas a tratar los podéis ver tanto en la web como dentro del campus.
Antes de nada es necesario darse de alta en la web y posteriormente al entrar en el recinto se os entregará una tarjeta con la cual se puede acceder al interior.

Una vez dentro podemos acceder a la cafetería o simplemente sentarnos en alguna de las largas mesas que hay disponibles, como buen sitio de networking hay tantos portátiles como asistentes por lo que no debe sorprendernos que veamos a casi todo el mundo centrado en su trabajo, de hecho algunas secciones de la planta inferior están habilitadas solamente para una o dos personas fomentando este aspecto.
Los pisos superiores están dirigidos a empresas, pero en la primera planta todavía podemos ver cosas interesantes, por ejemplo la pared, una interminable pizarra donde todo el mundo puede escribir (o dibujar) lo que tenga en ese momento en mente.
Como no podría ser de otra manera todo esto se encuentra regado de cómodos espacios donde poder relajarse o debatir sobre temas que no requieran de una mesa.

Doblando la pared-pizarra podemos ver un tablón dividido en dos secciones, lo que se ofrece y lo que se pide, un tablón muy interesante porque son ofertas que no se encuentran habitualmente en los habituales portales de solicitantes de empleo, se pueden buscar desde socios para empresas hasta ofertarse desarrolladores o empresas de todo tipo por si alguien requiere de su experiencia.

De hecho existe a disposición de cualquiera en una mesa aledaña pinturas y tizas para poder escribir sobre uno mismo, de hecho yo mismo lo hice y para encontrarlo solo hay que apuntar alto 🙂
Los medios de comunicación
Dentro de los medios de comunicación se podría citar:
Para huir de la polémica de quien inventó la radio digamos que se inventó allá por 1890, a día de hoy sigue vigente lo cual le da más de un siglo de vida, es cierto que no tiene tanta audiencia como la que podía tener en un principio pero no se puede negar que sigue estando presente a pesar de que posiblemente no vaya a salir nada más revolucionario como la guerra de los mundos de Orson Welles, es un sistema unidireccional que solo transmite sonido.
La televisión llega alrededor de 1920, ahora tenemos un sistema unidireccional que emite imagen y sonido, mucho más versátil ya que capta más sentidos por lo que puede producir más efecto en el espectador a la vez que es un sistema que proporciona más posibilidades, de hecho a día de hoy siguen saliendo nuevos formatos de programa aunque es cierto que ya se le atisban ciertos síntomas de agotamiento.
Llega Internet, originalmente una BBS estático y unidireccional, y en poco menos de 30 años ha superado a todos los sistemas anteriores, transmite imagen y sonido, es dinámico y lo más importante, es bidireccional, se puede interactuar con el otro.
Al igual que los primeros programas de radio y televisión vistos a día de hoy pueden parecer simples y sin mucho sentido, en Internet sucede lo mismo, es posible que dentro de algunos años mirar hacia atrás y ver páginas donde solo podías escribir 140 caracteres y los mensajes se agolpan unos detrás de otros haga pensar que sentido tenía hacer eso, al igual que por ejemplo haya que rellenar cientos de formularios para darse de alta sin que la propia aplicación reconozca a la persona que entra.
Internet crece en varias direcciones, el propio dispositivo varía, antes solo un ordenador permitía el acceso, ahora es raro el dispositivo que no tiene una conexión de red, nos encontramos en la prehistoria de Internet y de las conexiones, es complicado vaticinar en qué dirección o cuáles serán las próximas aplicaciones que realmente explotarán este potencial, sí que es cierto que en gran parte modifica el comportamiento social y todo lo que conlleva, es posible que Internet haya sido la mayor revolución social que se haya producido y motivado todo esto por una invención tecnológica, más allá de convicciones o de política.
Internet como medio de comunicación se convierte en un nicho inabarcable de posibilidades por explotar, no solo eso sino la posibilidad de interactuar con él, de modificarlo o de dejar la huella de cada uno impresa en una web, antes una de las cosas que había que hacer en la vida era plantar un árbol, quizás ahora haya que añadir que también sea tener una web.
Si la radio o la televisión siguen vigentes con un siglo de experiencia, ¿Cuánto más podrá estar Internet? Incluso se podría pensar… ¿habrá algo más después?
El informático usuario
A raíz de la mejora de la tecnología es inevitable que surjan nuevas especializaciones, por ejemplo usabilidad, o dicho de otra forma la capacidad de que usuarios cada vez más inexpertos sean capaces de usar algo con la misma habilidad que alguien con más capacidades.
La mejora de la informática ha abierto las puertas a nuevos tipos de clientes menos habilidosos con las tecnologías, alejados de aquellos otros usuarios que eran expertos en comandos de consola, también por extensión ha provocado que el usuario sea cada vez menos capaz de resolver problemas por sí mismo lo cual ha llenado la red de comentarios irónicos sobre preguntas realizadas al SAT.
Parece evidente que las nuevas tecnologías son para facilitar la vida al usuario -aunque algunos de estos todavía no se lo crean-, pero habría que mirar también si el informático se está convirtiendo en un usuario de sí mismo.
No vamos a comparar programar en un lenguaje como Java con hacerlo en ensamblador, cada vez es más fácil realizar aplicaciones y dentro de algún tiempo es posible que hasta un usuario sea capaz de realizar aplicaciones -¿fue VB 6 un intento de esto? Siempre me quedará la duda– aunque también se podría decir que existen excepciones como C++ que son el caso contrario.
Existen infinidad de lenguajes fáciles y rápidos de aprender, posiblemente ahora mismo se tarda menos de una semana en escribir una aplicación normal en cualquier lenguaje con menos de 10 años de vida, y si el lenguaje es un poco complicado siempre tendrás un framework a mano que te simplifique la generación de código.
El perfil de informático se divide, entre el que realiza APIs complejas, lenguajes nuevos, frameworks, diseña y crea, y el que usa estas tecnologías, aprende un lenguaje o a usar un framework y realiza la aplicación que se le solicite, este último realmente es posible que se dedique a reutilizar ejemplos sacados de foros y documentación e insertarlos en aplicaciones, al final se convierte en un integrador de código.
Es posible que este sea uno de los perfiles más habituales y que suelen interesar bastante, se realizan aplicaciones de manera rápida –algo que siempre interesa, sobre todo por esa enfermedad llamada beneficio a corto plazo– y se lanzan a producción como si fueran platos precocinados, con suerte –por decir algo- es posible que exista un arquitecto que posiblemente solo será capaz de echar sal antes de que tenga que meterlo al microondas.
En otro caso simplemente se realiza un trabajo plano que saca un resultado, el informático se convierte en usuario de sí mismo, cualquier imprevisto o requisito sacado fuera de ese trabajo plano no se podrá resolver porque nunca ha tenido esa necesidad, se verá obligado a consultar a otros por algo que en teoría se le supone capaz de hacer.
No es malo usar código ya existente pero tiene que servir para algo más, para entender los conceptos y extraerlos, al final se reduce a lo uso o lo entiendo.
La especialización
A medida que han ido surgiendo nuevas tecnologías cada vez se ha ido tendiendo más hacia la especialización, esto conlleva una ventaja evidente dado que es más fácil explotar dicha tecnología.
Sin embargo también es verdad que cada vez se solicitan perfiles más amplios, esto se ha visto recientemente con los devops donde encajan varias disciplinas, tanto a nivel de sistemas como de desarrollo.
También es interesante que en una carrera de informática se den varias disciplinas, tecnología, redes, programación… Debido esto a que no se sabe cuál será el destino laboral final, y si por otro lado se requiere algún tipo de especialización concreta se puede optar por algún curso o máster.
Constantemente surgen cambios, ya sea por nuevos diseños, lenguajes y plataformas, porque los actuales sufren algún cambio de versión o porque desaparecen al no tener el suficiente respaldo de la comunidad, esto plantea también otros problemas al informático, por ejemplo acertar con la tecnología correcta.
Cada vez más la ventaja de tener un perfil muy especializado se va difuminando, no tener constancia de otras tecnologías condena a vivir en una isla tecnológica sin conocimiento del mundo exterior, SCRUM por ejemplo alienta a los equipos multidisciplinares.
¿Hasta qué punto compensa la especialización? ¿Cuanto tiempo hay que estar en una tecnología para que resulte rentable?, antes de que esta cambie, desaparezca o surja una nueva mejor que la absorba.
¿No resultaría mejor opción tener un perfil de aprendizaje rápido? que permita rápidamente reconocer, integrar y explotar nuevas tecnologías, esto por ejemplo en programación resulta similar a los lenguajes naturales, los primeros son difíciles pero a partir de ahí por reconocimiento de patrones resulta más fácil aprender otros.
Se puede argumentar que es complicado explotar así una tecnología pero realmente puede ser al revés, conocer unas te lleva a buscar estructuras parecidas o similares en otras averiguando las posibilidades que ofrecen, en este caso la cuestión estaría en conocer un ejemplo clave de una tecnología enmarcada dentro de un área concreta, por ejemplo un lenguaje como C# o Java para programación orientada a objetos o una distribución de Linux para sistemas Unix/Linux.
Este conocimiento más variado permite elegir en un momento dado cual será el área a aplicar a un problema así como dentro de esa área cual puede ser la tecnología más adecuada, un amplio conocimiento de las tecnologías existentes aunque no se tenga una especialización resulta más útil de cara a poder elegir o descartar más allá de interés particulares.
Posiblemente el mayor problema radica en encontrar ese perfil más que en encontrar uno que tenga una lista interminable de siglas tecnológicas en su currículum.