Perks

Estoy muy pesado con lo bien que estoy en Teamwork. Pero es que tras trabajar toda mi vida como autónomo, que me traten como a un ser humano en el trabajo es un cambio enorme. Probablemente los que estén acostumbrados a trabajar en estartaps verán como normales y estarán acostumbrados a la mayoría de ventajas con las que yo me maravillo. Es lo que tiene haber pasado mucha hambre. Que los filetes se saborean mejor.

Por eso disfruto con mi MBP del trabajo, no el último modelo, sino el modelo exacto que yo quería (no me gustan los modelos de 15″ con ToyBar ™?). Disfruto de poder asistir cada año a la conferencia de desarrollo que yo elija. De tener a mi disposición libros o cursos. De tener unas oficinas alucinantes, aunque esto lo disfruto poco, al estar trabajando como remoto (por supuesto, trabajar a distancia tiene sus ventajas). Disfruto del privilegio que supone tener una máquina de café en cada planta de la oficina, refrescos infinitos o snacks que nunca se acaban. Mi sueño de niño gordo se ha visto cumplido en una realidad de adulto. De adulto gordo.

Todo esto (y muchísimas cosas más, como 30 días de vacaciones, o seguro médico, o planes de jubilación, o etc. etc.) son privilegios. Tenemos la suerte de trabajar en un sector muy demandado y que las empresas busquen programadores como locos. Parece que esto de programar es muy difícil, o que a la gente ya no le interesa, el caso es que somos pocos. Y la demanda no deja de aumentar, así que por ley de oferta y demanda las empresas nos ofrecen más y mejores condiciones. Perks. Pero nunca debemos olvidar que, aparte de un salario aceptable según tu experiencia y unas condiciones laborales dignas, que te pongan una silla Aeron de Herman Miller para trabajar es un privilegio. Recordarlo cada día me ayuda a disfrutarlo. Preferiría no tener que trabajar, claro, pero ya que no soy rico intento disfrutar de lo que tengo que hacer para pagar la hipoteca.

Perks. Tan de moda. Mesas de ping-pong. Futbolín. Consolas para jugar en la oficina. Con estas cosas se quiere atraer el talento. Yo siempre he pensado que son paridas. En primer lugar, el talento, así en abstracto, ni se retiene ni se atrae. Se refieren a personas, pero parece que les da alergia hablar de seres humanos. En segundo lugar, estos juguetes pueden sorprender al principio. Pero no son ni de lejos lo más importante. Yo he descubierto el mejor perk para que la gente no quiera irse. Es un secreto que voy a compartir con el mundo. ¿Preparados?

El mejor perk es estar rodeado de excelentes compañeros. De trabajar codo con codo con buenas personas que además se esfuerzan por ser mejores profesionales cada día. Que te enseñan y aprenden contigo. Que se equivocan. Que aciertan. Que se apasionan defendiendo sus puntos de vista, pero no se enfadan contigo. Gente que te obliga a mejorar porque les ves crecer, estudiar, probar cosas, saber mucho más que tú. Estar con un equipo con el que te ríes, con el que afrontar las inevitables crisis y sinsabores del trabajo no tiene precio. Al final jugarás una o ninguna partida de ping-pong, pero si tu jefe es un capullo al que aguantar cada mañana, eso no hay perk que lo compense. Un proyecto bonito, un grupo de compañeros que realmente lo sean, y no sólo gente que va a la misma oficina que tú, que sean buenas personas y mejores profesionales… dame eso y quédate tú con tus perks y ese dolor de barriga característico al levantarte cada mañana.

j j j

Mi nuevo ordenador es un iPad

Escribo esto en mi «poor man´s iPad Pro». Es un iPad normal, modelo 2018, color Space Gray. Eso sí, con 128 GB de almacenamiento interno, porque la nube no siempre está disponible. Prefiero controlar mi almacenamiento. Cosas de abuelete. Es un «iPad Pro para pobres» porque me he comprado el Apple Pencil (1ª generación, que es el que soporta este iPad), y un teclado/funda de Logitech. Y, la verdad, el combo me está encantando.

Mi nuevo iPad

En casa siempre hemos tenido un iPad. Desde el iPad 1 (que era oficialmente de mi mujer). Mi primer iPad fue un iPad 3, el primero con pantalla retina. Lo compré para leer libros y comics, entre otras cosas. Pero la verdad es que mi relación con el iPad siempre ha sido de indiferencia/aburrimiento total. No se por qué, pero no era capaz de encajarlo en mi flujo de trabajo habitual. Como muchos informáticos, veía la potencia del hardware del iPad desaprovechada por su software. ¿De qué me sirve tener un procesador y GPU tan potente, o esos resultados en benchmarks, si luego no puedo ejecutar un simple emulador o un entorno de desarrollo en el iPad? Así que siempre volvía al portátil, que para eso tiene teclado y es un ordenador de verdad. El iPad, para que los niños jueguen al Minecraft.

A todo esto siempre han ayudado dos cosas. La primera, que soy un abuelete y prefiero un ordenador en el que pueda trastear por encima de todas las cosas. La segunda, que cuando antes trabajaba usaba mi portátil, por supuesto siempre sincronizado con mi Hackintosh y mi iMac usando Syncthing, Al tener en el ordenador las cosas de trabajo y mis cosas personales mezcladas, era sencillo echarle un ojo al correo o mirar esto o aquello en un momento. La frontera entre trabajo y usar mi ordenador para cosas personales era complicada. Siempre estaba usando el ordenador. Para algo.

Pero todo esto ha cambiado en 2018. El iMac está fuera de servicio actualmente (tarjeta gráfica kaput). Empecé a trabajar en Teamwork.com (la mejor compañía del mundo, en la que estoy súper contento, por cierto, buscamos gente) y me dieron un MBP para el trabajo. Decidí tener completamente separadas las cosas de trabajo y las personales. No instalar en el portátil de trabajo nada que no fuese de trabajo. Por aquello de separar mentalmente los contextos, algo importante si, como yo, trabajas desde casa. Ahora, abrir el portátil de Teamwork significa «cerebro, vamos a trabajar». cerrarlo significa «esto se acabó, ahora tus cosas». Pero la realidad es que mis cosas no han funcionado este año.

Sólo el hecho de tener que ir a por el otro portátil, que a veces esté sin batería, subir una mochila, bajar otra… Me daba una pereza infinita. Y cuando me sentaba frente al Hackintosh lo único que me apetecía era arrancarlo en Windows 10 y jugar. Así que ya no tengo Hackintosh. Resultado: he dejado de escribir en el blog, he reducido mi presencia en redes sociales, no voy a meetups y tengo ahora mismo 178 correos sin leer, mis tareas personales, antes organizadas en Things son ahora un desastre… Incluso importar fotos, organizar mi música se ha convertido en un problema. Todo, porque hay que ir a por el ordenador. El ordenador me impide hacer cosas.

Así que me he comprado este iPad. Le tenía ganas al Pencil. Siempre me ha gustado dibujar, pero volvemos a lo mismo: ir a por los lápices, libreta, etc. me suponía una barrera. Y también me frenaba mucho una estupidez mental muy mía: dibujar mal y ¡oh, no!, no poder corregirlo, emborronar el papel… Esto es una tontería, porque lo que yo busco dibujando (como cuando escribo) no es tanto el resultado, sino el placer que me reporta tener el cerebro haciendo sólo una cosa durante un rato. Siempre te gusta dibujar algo bonito, pero lo importante es la práctica, no el resultado (al menos para mí). Obligar al cerebro a hacer sólo una cosa y que el tiempo vuele es el descanso definitivo. Se ve que esto se me había olvidado. El caso es que no dibujaba.

Con el teclado puedo escribir sin limitaciones. Me gustan los teclados físicos, qué le vamos a hacer. Y con este iPad puedo abrirlo y en segundos estar escribiendo en mi WordPress. Fricción cero. Espero que eso se traduzca en volver a escribir.

Así que ahora mismo mi ordenador principal para mis cosas privadas es este iPad. Quiero forzarme a que así lo sea. Aunque tenga problemas y me encuentre con ciertas estrecheces al usarlo. Limitaciones casi siempre debidas al software, bien por la calidad de las apps o por las limitaciones que Apple nos impone. Ya, problemas del primer mundo. Pero para bien o para mal son mis problemas.

Quiero ver si, aún con estas limitaciones, la inmediatez de uso, la menor fricción y la disponibilidad que me da el iPad me ayudan a hacer cosas. Y me quite la manía de tengo que hacer cosas en un ordenador de verdad. De momento, la sensación de liberación es enorme: puedo hacer casi todo lo que hacía con el portátil, excepto programar (ya se, puedo usar Playgrounds o Pythonista, pero para programar sí o sí quiero una consola a mano). Y para programar me estoy planteando una serie de herramientas y workflows que darán para unos cuantos posts. Y puedo hacer otras muchas cosas que en el ordenador no podía hacer o no me apetecía hacer.

Quién me lo iba a decir…

j j j

El lamentable estado de las herramientas de desarrollo iOS

Apelando a Murphy, voy a escribir esto justo antes de la WWDC, a ver si Apple me deja por tonto cambiando todo de lo que me voy a quejar aquí. Por desgracia no lo espero. Espero que presenten «otras 1000 APIs» que realmente no necesito. Lo que necesito es que eliminen los bugs que existen en las que ya hay. Y que las herramientas funcionen. No que añadan cosas. Que arreglen bugs.

Hace tres años escribí sobre El lamentable estado de las herramientas de desarrollo Android. En aquella época, lo que existía para desarrollo Android (oficial) era el plugin ADT para Eclipse. Y, como relato en el post, no funcionaba algo que era un simple ZIP. Eclipse, Java 6, fallos en las herramientas, un Android Studio que estaba en Alpha, una documentación horrorosa, una API discutible (ver p.ej. el método isUserAGoat en UserManager), la lentitud de Gradle si probabas AS… Esto era la muerte por mil cortes, comparado con el mundo iOS, con esas APIs Cocoa tan consistentes, un Xcode tan bonito y que entonces no fallaba tanto…

Y encima Apple presentó Swift en Junio de 2014. La promesa de un nuevo lenguaje, compatible con Objective-C, con C, C++, pero funcional, con inmutabilidad, Opcionales, genéricos, … Todo se veía de color de rosa desde el mundo iOS, comparado con el cenagal que era el desarrollo Android.

Apple: Non-Pro Macs

Apple ya no hace ordenadores para desarrolladores. Y me parece muy bien, si así gana más dinero. Pero debe entonces afrontar las cosecuencias, que van a ser (porque esto ya ha lo he visto antes en otras plataformas):

  • los desarrolladores se compran otras máquinas y se montan un Hackintosh para seguir desarrollando en iOS / Mac. MacOS se convierte en «ese sistema operativo que te ves obligado a usar por el trabajo». Apple no gana dinero con las máquinas. Tienes dual-boot y cada vez usas más Windows. Peligro.
  • los desarrolladores directamente se pasan a Windows 10 / Linux con mejores portátiles (y a mejores precios, que no todos tenemos una mina de oro en el sótano de casa) y usan MacOS en una máquina virtual (cosa que prohíbe la licencia, como el Hackintosh, pero ponle puertas a ese campo…). Goto 1
  • algunos desarrolladores se cabrean tanto con el poco aprecio que sienten desde Apple que directamente abandonan la plataforma, algo que a dia de hoy se puede hacer ya que el mercado de trabajo tiene ofertas casi para todo tipo de perfiles de desarrollo.

Si los programadores se van de una plataforma, esta se muere. Lo he visto con OS/2, con Amiga, con Linux (¿este es el año de Linux en el escritorio? Y sí, ya se que se usa mucho Linux en Android, que es Linux, y en la RaspberryPi, y que llevo usando Linux desde el 93, que no me cuentes de qué va eso que yo voté porque Tux fuera la mascota de Linux y tú no).

Casi le pasa a Microsoft. El rechazo que generó con sus Internet Explorers le ha llevado a ceder casi toda la cuota de mercado a Chrome. Y no hablemos del patinazo Vista, que enmendó con Windows 7. Es por eso el titánico esfuerzo que está haciendo ahora mismo Microsoft, permitiéndote ejecutar Linux en Windows de forma nativa, o dándote la bash. Atraer programadores que son los que riegan este campo con sus aplicaciones.

2017

Es 2017. Swift va a sacar la versión 4, con nuevos cambios que te obliguen a actualizar tu código, o no compila. Con ese asistente que tiene Xcode tan bueno. Si no tenías listo el lenguaje en 2014… ¿para qué sacarlo? ¿Porque Chris Latter estaba harto y se quería ir? Pero bueno, era 2014 y podíamos entenderlo, Apple. Pasamos por Swift 1, 1.1, 1.2, y los cambios a Swift 2. Y Swift 3. Contínuamente cambiando una base de código que funciona para hacer que siga funcionando. Es decir, gastar horas para seguir en el mismo punto. No añadir nuevas funcionalidades. Que compile. Coding is fun.

Al menos el compilador de Swift es rápido. Tanto, que cuando ejecuto Gradle en Android me parece instantáneo. Gradle, quiero decir. Pero en cada WWDC nos dicen que «ahora el compilador de Swift es un 20% más rápido». Con tantos avances en velocidad mi código debería terminar de compilar… en 1984. De lo rápido que compila. Pero la realidad es la realidad, y Swift es horriblemente más lento compilando que su equivalente en Objective C. Y es una pena, porque el lenguaje es muy bonito. Apple ha hecho un Sherlock de Kotlin con Swift, lo que está bien. Si ahora hiciese un Sherlock de IntelliJ, todos contentos.

Porque cansa ver cómo se arrastra el compilador. Cómo haces Cmd+click en un símbolo y no lo encuentra (es una función de ámbito global y no la encuentra). O cómo el autocompletado es totalmente random. O cómo pones un punto de ruptura dentro de una clausura y no puedes depurar el valor de las variables de la clausura. Bueno, sí puedes… usando println. NSlog oriented debugging FTW!

Al menos podemos refactorizar nuestro código. Esto significa que puedes cambiar el nombre a una clase. Fin de los refactors. Y en Objective-C. En Swift nada. Zero. Nil. Y de generar código ni hablamos. Últimamente Xcode no es capaz ni de comentar líneas de código con Cmd + / o acertar y autocompletarte los nombres de las librerías en los imports.

O cómo la comunidad ha tenido que solucionar problemas básicos que Apple se niega a ver. ¿Resolución de dependencias y librerías de terceros? En Android: Gradle. Soportado. En iOS: CocoaPods, Carthage, o a mano. Todos proyectos de la comunidad. ¿Plugins? En Android: Android Studio tiene de todo. En iOS: han metido un sistema de plugins tan restringido que, la verdad, no conozco a nadie que esté usando algún plugin que merezca la pena (indicadme por Twitter los mejores, por favor). Y de paso se han cargado un proyecto como Alcatraz, que sí que ofrecía un montón de plugins, temas y plantillas de ficheros porque, ¿quién quiere algo mejor cuando mi versión inferior patentada por Apple ya viene con Xcode? Y sí, entiendo los problemas de seguridad de los plugins, y que Xcode viene firmado y todo eso. Pero digo yo que habrá alguna solución intermedia colocando los plugins en otro proceso fuera del sandbox de Xcode…

WWDC

Así que, en esta próxima Developers Conference, vamos a abrir la Keynote hablando de lo mucho que vendemos, de lo buenos que son los portátiles con la ToyBar, de lo chulos que son los auriculares Beats, de todas esas cosas que nos interesan muchísimo a los programadores, que es a los que debe ir dirigida la Keynote. Nuevos colores para las correas del reloj. Nuevas animaciones en macOS para organizar tus ventanas en 15 espacios para que nadie lo use nunca, porque todos usamos un monitor externo. Y Apple Music, que todo programador necesita música de fondo y eso. Pagando.

Pues no. Este año no renové mi Apple Membership por primera vez en 6 años. Y cada vez me cuesta más y me duele más abrir Xcode. Porque veo lo que podría ser, lo comparo con un excelente IDE (con sus problemas, pero mucho mejor para escribir código) como IntelliJ y me sangra el corazón. Quiero seguir programando en un Mac en 2027. No me eches de tu jardín, Apple.

j j j

Cómo preparar las certificaciones Java (y probablemente el resto)

Estoy preparándome la certificación OCP Java SE 8. No preguntes por qué. Quizás porque soy adicto a coleccionarlas, tras tener el SCJP 1.5, 1.6, SCWCD 1.5 y SCBCD 1.3 y llevaba años sin presentarme a ninguna. O porque las que tengo ya son antiguas y quería tener una actualizada. O porque quería aprender Java 8 con cierta profundidad, ver todo lo nuevo que tiene que ofrecer (que es mucho, aunque quizás llega tarde) y compararlo con lo que he aprendido en otros lenguajes (Swift, te estoy mirando).

Además, he tenido la oportunidad de preparar a varios grupos para obtener esta certificación… que yo ahora mismo no tengo. Fraudismo at its best. Aunque en este caso no tengo tanto síndrome del impostor por una razón: puede que no tenga (aún) la certificación Java 8, y mis conocimientos de Java son muy mejorables, pero me autotitulo como el mayor experto mundial en aprobar estos exámenes. Y eso es gracias a mi sistema, el Sistema Freniche para aprobar las Certificaciones Java AKA sentido común.

El Sistema Freniche para aprobar las Certificaciones Java

Es un sistema muy probado, tanto personalmente como con montones de alumnos que he preparado para distintas certificaciones. Se basa en 9 pasos:

  1. Buscar un buen libro, que cubra todo el temario de la certificación. En este caso, he escogido el oficial de Oracle

  2. Leer el libro, saboreando cada capítulo. Aunque el objetivo último es aprobar el examen, hay mucho que podemos aprender aunque tengamos muchos años de experiencia con Java. Especialmente si tenemos muchos años de experiencia con Java trabajando siempre en proyectos similares, porque habrá montones de cosas que no hemos probado o visto por falta de tiempo.

  3. Escribe código. Mucho código. Haz pequeños ejemplos. Búscate las vueltas. Piensa retorcidamente. Prueba cosas extrañas (ver anexo Cosas Extrañas al final)

  4. Crea tus propios apuntes. O extiende los míos

  5. Escribe más código. Cuando te surjan dudas, vuelve a leer esa parte del libro. Y vuelve a escribir código probando todo.

  6. Cuando termines el libro, haz las preguntas de repaso de cada tema. Descubrirás que aún no has memorizado o te has fijado en partes. Goto 2

  7. Busca un simulador de exámenes. En mi caso siempre uso Enthuware porque me ha ido bien (no porque me paguen por hacerles publicidad, aunque ya podrían 🙂 )

  8. Haz exámenes de prueba. Falla. Vuelve a leer. Escribe código. Haz exámenes.

  9. Cuando en los exámenes del simulador estés llegando al 80% de aciertos, preséntate. Pasarás con nota.

¿Cuánto tiempo me va a llevar esto?

Pues depende. Leer el libro e ir probando pueden ser unas 30 h. Y luego hay que hacer los exámenes de prueba. Lo ideal es ponerse una fecha tope y en un par de meses power through it. Quitártelo de en medio, vamos.

Aunque recibir un excelente curso de formación, patrocinado por tu empresa e impartido por un profesional de prestigio siempre puede ayudarte bastante y

(interrumpimos este _shameless plug_ para continuar con lo que has venido a leer aquí)

Cómo presentarte al examen

Yo tengo mi ritual, pero lo ideal es que cada uno ejecute el suyo, porque lo normal es que estés nervioso/a ese día. Lo que yo hago es:

  • levantarme bastante temprano
  • comprobar que llevo algún documento, como el DNI en España que me identifique. Si no, no puedo hacer el exámen.
  • llegar con más de 1h de adelanto a los alrededores de donde tenga el Centro Prometric para presentarme.
  • desayunar o tomar café. Aunque el examen sea a las 13:00h en Sevilla en Agosto. Café. Para estar tranquilo.
  • llevar el libro de preparación de la certificación conmigo en la mochila, aunque no lo voy a leer mientras tomo café ni me van a dejar tenerlo conmigo durante el examen. Lo uso de talismán y porque no soy el más listo. Pero tengo que sentir que está cerca por si me ataca el pánico y alguna duda concreta en el último momento.
  • cargar con el portátil que no me van a dejar usar por las mismas razones que el punto anterior: porque no soy demasiado astuto.
  • llevar agua. Y caramelos. Para darte un premio según avance el exámen y beber para mantenerse hidratado.
  • ir al cuarto de baño justo antes de entrar, porque voy a estar bebiendo más agua que un caracol en el desierto durante la prueba.

¿Pero esto de las certificaciones sirve para algo?

Pues esto es un debate interesante, que puedes tener con quien quieras menos conmigo poque que en mi caso lo tengo bastante claro:

  • las certificaciones no demuestran que sepas más Java que nadie
  • demuestran que eres capaz de fijarte un objetivo, que te va a requerir un esfuerzo extra y cierto sacrificio y pasarlo
  • demuestran que tienes una base en el lenguaje Java
  • preparar esta certificación me ha supuesto toda una sorpresa, porque la he encontrado 100% útil: multihilo con Thread Pools y el paquete java.util.concurrent, programación funcional con Lambdas, map, reduce, streams, parallel streams, problemas de concurrencia y multihilo, acceso a BDs con JDBC (que hasta ahora era lo único que usaba en Android), uso de ficheros, excepciones, Opcionales,…
  • demuestran que eres capaz de estar 2 horas y media seguidas trabajando enfocado en una sola tarea, sin usar Internet ni mirar Twitter. Y eso es una rara cualidad hoy día, en los entornos multi-interrupción de que disfrutamos trabajando.

Esto último es probablente lo más difícil. Ser capaz de nuevo de estar haciendo una tarea durante 2 horas y media sin moverte de la silla. Esto se entrena con los exámenes del simulador. Y es duro, porque tú eres tu mayor enemigo.

Anexo: Cosas extrañas

Cosas que puedes hacer con Java, como escribir bucles así

Predicate<Integer> end = e -> e < 10; int i = 0; 
for (int j = 1; end.test(i) ; i++, j++, System.out.println("i " + i)) ;

// imprime i 1, i 2, i 3...

Usar bloques de código de instancia (NO usar en código real)

class Cat {
    String name;

    {
        System.out.println("I'm a Cat!");
        name = "Meow!";
    }

    Cat() {
        name = "Garfield";
    }
}

Programar «código encriptado» 😀

class _ {
    String _ = "Hello";
}

// más adelante...

_ _ = new _();
System.out.println(_._);   // imprime "Hello"

_ $ = _;
System.out.println($._);   // imprime "Hello"

Y otras muchas barbaridades que podría añadir…

j j j

Apple, tenemos que hablar

Estoy pasando momentos bajos en mi relación con Apple. Cuando dejé Linux y me pasé a los Macs, en 2008, todo eran vino y rosas. Descubrí un S.O., OS X, que era un UNIX bonito. Un UNIX que no tenía que preocuparme de mantener. En el que los drivers de audio siempre iban a funcionar, sin preocuparme de si eran ALSA o no. Un S.O. que además venía envuelto en unas máquinas que siempre me parecieron increíbles. Bonitas, precisas, avanzadas, potentes. Como me dijo Xeleh una vez «yo me compré un Mac para instalarle Windows porque quería tener el mejor PC portátil del mercado».

Entonces Apple sacó el iPhone 3G, y me compré uno en un viaje a Bélgica (en España aún no los vendían porque no había ninguna Apple Store por entonces). Y tras esa maravilla vino el iPad 1, el 3Gs, el iPhone 4… Apple siempre sacaba algo que me gustaba por alguna razón y que compraba, como su Time Capsule (que falló, como tantas). Y me compré un iMac (que aún tengo como máquina de escritorio principal, y como monitor para mi PC de gaming). He tenido otros modelos, desde varios PowerMac G5 hasta un Mac Mini G4 que corre MorphOS (un S.O. alternativo inspirado y compatible con el software de Amiga) o un PowerMac G3 que aún conservo.

Eran años de vino y rosas, de maravillas.

Entonces Apple sacó el Apple Watch.

Este fue el primer producto de Apple en mucho tiempo que me dejó frío. Mi mujer, por ejemplo, lo tiene y usa a diario. Pero en mi caso, que llevaba 20 años sin usar un reloj ¿cargar uno cada noche para poco más que ver la hora? Por ironías del destino, vuelvo a llevar reloj, pero en mi caso es un feísimo, durísimo, utilísimo, Polar M400 con una semana de batería que me llevo cuando voy a trotar por el campo. Por menos de 100 Eur. hace todo lo que necesito y más: registra mis carreras con GPS y monitoriza mi actividad diaria. Y da la hora. Veo que el Apple Watch es mucho más bonito, es a fin de cuentas un móvil pequeñito con correa, pero al igual que a las difuntas Google Glass, no le veo utilidad en mi caso.

Bueno, esto no es para tanto, me dije. Pronto sacarán algo que realmente me interese. Pero tras sacar el iPhone 6+, con una pantalla grande como los otros teléfonos Android que tengo, las mejoras en los iPhones me han parecido irrelevantes. Sí, mejor cámara. Sí, tienes ahora 3D touch. Vale, más potente gráficamente. Pero que no estoy dispuesto a gastarme otros 900 Eur para tener esas mejoras. Y el colmo ha venido cuando han quitado el conector para auriculares estéreo jack de 3.5mm. Se ve que alguien en Apple tuvo un problema de niño con este conector, porque el iPhone original tenía un conector de 2.5mm y necesitaba un adaptador. Y en cuanto han podido lo han deprecado. Supongo que para vender más auriculares Beats con Bluetooth. Y entiendo perfectamente la comodidad de BT, y se que con BT4 la calidad de sonido es bastante buena. Pero si voy a pagar con mi dinero un móvil, quiero que me de opciones. Como la de usar unos auriculares con cable porque suenan mejor, porque me da placer insertar el jack de 3.5mm o porque me da la gana y pago yo. Por increíble que parezca, los consumidores a veces tenemos criterio, y sabemos qué nos gusta y qué no, especialmente cuando lo pagamos con nuestros ahorros…

Y luego se han ido amontonando Keynotes horribles de Apple, en los que presentaban más y más cosas que no me interesan. Apple Music. Lo siento, pero prefiero dedicar un presupuesto de 12 Eur. mensuales y comprarme un CD en Amazon al mes. Porque me gusta abrir el CD. Porque me encanta tener la molestia de ripearlo al nivel de calidad que yo quiera. Porque es un disco físico que puedo prestar o vender si me harto de él. Porque soy viejuno. Echo de menos sentarme a escuchar música sin hacer otra cosa que escuchar la música, como cuando era un chaval. Es increíble la de notas e intrumentos que hay ahí, si les prestas atención. Bueno, eso es si no escuchas Reggaeton, claro. Estoy hablando de música…

Y los días y semanas se convertían en meses. Y el Mac Pro no se actualizaba. Los iMacs tampoco. Al final, ni siquiera los MacBooks. Los Mac Minis ¿qué era aquello? Una pena abandonar la mejor solución para tener servidores macOS (que aunque a alguien en Apple le sorprenda, siguen siendo necesarios). Y después de abandonar los Xserve y ahora dejar de lado los Mini, no se si en apple quieren que los racks donde se alojan los servidores pongamos iMacs…

Al final, la gota que ha colmado mi vaso ha sido el nuevo MacBook NoPro con ToyBar™. Un portátil en el que se destila la obsesión anoréxica por el «más delgado y ligero» que está bien, si no se pierde la potencia. Pero cuando pones un teclado, que para Joel Spolsky es horrible (y me fío algo de la opinión de este señor), no permites, tras tantísimo tiempo sin actualizar, ampliar más de 16 GB RAM, quitas las teclas físicas de función y metes un Apple Watch estirado, en un esfuerzo por dar la impresión de que innovas, te cargas el puerto MagSafe, una de las cosas que siempre me han gustado más de los portátiles Apple y metes únicamente USB-C, pues no puedo estar contento. Que USB-C que estará muy bien en el futuro, o con adaptadores, pero que como he dicho antes si pago por un producto quiero que me sirva ahora, no en el futuro. Y actualmente ni siquiera el último iPhone es USB-C, con lo cual para conectar el último teléfono al último ordenador de Apple necesitas un adaptador… Sin contar con que pasamos de conector de 30 pines a lighning ¿y ahora viene otro distinto? Esto es innovación permanente, o ansia por vender adaptadores permanente, no lo tengo claro.

Y ya se, ya. Que yo soy un caso especial. Que me gustan las cosas viejunas, los ordenadores que cargan juegos de cinta y ripear CDs. Que el ToyBar™ es una maravilla y que me quejo por vicio, y que los más de 500 Eur. que ha subido de precio el MacBook Pro teniendo (para mi gusto) menos prestaciones son perfectamente justificables por esto y por lo otro. Que no podían meter más de 16GB RAM porque entonces no duraba tanto la batería. Pero sí la pantallita de las teclas de función, que debe ser muy ecológico eso de consumir energía para que se vea tecla de ESC. Y que todo el mundo conoce mis necesidades y preferencias a la hora de comprar un portátil mejor que yo. Pero mientras el dinero salga de mi cartera, Apple, tenemos un problema. No me voy a comprar estos nuevos jueguetes con la marca Pro que has sacado. Y no voy a pagar un precio premium por MacBooks Pro con hardware de hace dos años. Así que seguiré estirando este MacBook no retina de 13″, y mi iMac de finales de 2009. Porque funcionan bien, y me parecen máquinas excelentes, y me sigue gustando tu sistema operativo, a pesar de que insistas en iCloud, que como usuario me interesa cero.

Pero tenemos que hablar, Apple, porque por primera vez desde 2008 hay en mi casa un ordenador que es muchísimo más potente que los que tú me ofreces. Es una torre. Lo uso para jugar. De momento. Y corre Windows 10. Y cada día lo enciendo más. Para jugar. De momento.

j j j

Porque me hace feliz

  • ¿Por qué corres, si cansa mucho?
  • ¿Por qué te levantas tan temprano, es que quieres ser el más rico del cementerio?
  • ¿Sigues usando Java en 2017?
  • ¿Linux no era para inadaptados?
  • ¿Los Macs no son sólo para ricos? ¿Por qué los usas?
  • ¿Por qué seguir estudiando a tu edad?

Estas, y otras falsas preguntas las habrás escuchado muchas veces a lo largo de tu vida. Gente que parece escandalizarse porque haces cosas o porque las haces de forma diferente a como ellos piensan. Falsas, porque no buscan comprender tu punto de vista, ni aprender, ni contrastar ideas. Buscan sólo confrontar. Que les des un buen número de razones para poder disfrutar de una buena discusión. En el mal sentido de esta palabra.

«Nunca discutas con un idiota, te rebajará a su nivel y te ganará por su experiencia» – Mark Twain

Según se van añadiendo cumpleaños a mi memoria, voy siendo más y más consciente de lo limitado de mi tiempo. De que quiero hacer cosas. No para dejar «huella». No para ser más que nadie. No porque quiera conseguir esta o aquella meta. Las metas son lejanas. Quiero hacer esas cosas, simplemente porque me hacen feliz. Trabajar porque me hace feliz, aprender porque me hace feliz, correr porque me hace feliz, levantarme temprano para poder hacer todas estas cosas, que me hacen feliz.

Sólo si eres feliz haciendo cosas podrás entenderme. Si no, seguirás preguntándote ¿Por qué? en lugar de hacer.

Haz cosas. Te harán feliz.

j j j

Expectativas salariales

Muy a menudo recibo ofertas de recruiters, con tal o cual puesto que buscan cubrir. Antes de seguir, un apunte.

Ponerse tiquis-miquis con el paro que hay podría parecer prepotencia, pero la realidad es esta: no se me concedió en la cuna el privilegio Papal de estudiar informática y la automática prohibición al resto. Quien quiera puede estudiar esta carrera. En la universidad pública, nada de Oxford ni Yale. Vamos, que si se quiere se puede. No soy hijo del Marqués de Cubas. Si hay trabajo en esto y el personal se empeña en seguirse matriculando en carreras con 100% de paro la culpa encima no va a ser mía…

Los recruiters. Las ofertas. Sigamos. Siempre he pensado que cuando ofertas un puesto debes tener claro:

  • qué problema tiene que resolver la persona que venga (no basta con un «estoy agobiado de trabajo y necesito alguien que me eche una mano«).
  • con quién va a trabajar esa persona, en qué equipo va a estar y quien va a ser su responsable. Quién se va a encargar de ayudarle a adaptarse.
  • que contratar a alguien cuesta. Tiempo y dinero. Y cuando lo contratas pasará un tiempo hasta que sea productivo, entendiendo por eso que aporte a la facturación neta de la empresa más de lo que te cuesta tenerlo por allí.
  • el coste de contratar. No sólo el salario neto (que no lo puedes conocer sin saber las circunstancias particulares de la persona), ni el bruto. Además, los costes sociales, o el coste del puesto de trabajo. Un gran empresario amigo mío dijo una vez que «los trabajadores comen, cagan y mean». Desde la mesa hasta el ordenador, pasando por el coste de luz eléctrica, limpieza, etc. Tener a alguien siempre incrementa los costes. Y muchos son ocultos: línea de movil, costes de Gestoría, papel higiénico en el baño, costes de despedir a esa persona si te has equivocado, etc.

Todo esto se aleja mucho de la retórica brillante de los libros tipo «monta tu startup como en Silicon Valley» o «Silicon Valley Spanish Style». Aquí no hay «realismo mágico» sino «neorealismo cazurro». Sin mesas de Ping-Pong. Pero es que yo a lo más que he llegado es a ser empresario en mi vida. No he alcanzado los puntos de Hype necesarios ni para llegar a entrepreneur. Lo de Serial Entrepreneur (especialista en dar el pase) requiere de muchos puntos más de Karma.

Pues bien, de los puntos anteriores, el coste laboral para la empresa lo puedes calcular de antemano. Lo debes calcular de antemano. Si no, ¿qué empresario eres? Por eso me matan las ofertas de trabajo tipo:

«Cárnica Incorporated te ofrece incorporarte en Cojo-Empresa Líder en su sector, pero que no te decimos el nombre para que no vayas directamente a ellos y perder la comisión, y tan buena que no es capaz de seleccionar a su propia gente porque no sabe responder a las sencillas preguntas de arriba.

Ni idea de lo que harás allí, pero por sí acaso aquí va una lista de buzz-words para ver si puedes preparar un CV mentiroso que las incluya y así todos nos engañamos: nosotros por pedir la luna a precio de coste y tú porque piensas que vamos a contar contigo.

  • jQuery mobile, iOS (10 Años de experiencia), Java EE, SQL, Arduino y por sí acaso saber programar la TDT.

Ya, sabemos que hemos contactado contigo a través de LinkedIn y podríamos leernos tu perfil, pero es que nos da pereza y a fin de cuentas esto es recruiting al por mayor. Sabemos que a los mejores no los pescaremos con este tipo de correos, pero si a fin de cuentas la gente sigue usando Infojobs eso significa que el batallón de los tristes es amplio.

Indica tus expectativas salariales «

Vaya. Así qué ofreces un puesto pero no sabes lo que vas a pagar por el. O eso, o quieres «retribuir según valía del candidato». Lo que normalmente suele ser una subasta a la baja, a ver a quien encontramos más desesperado que acceda al salario más miserable. Porque sí tu salario es digno, o no lo es, pero es lo que estás dispuesto a ofertar, pues eso, lo ofertas. Pero no entras en estas tonterías.

A partir de ahora voy a participar en todas estas ofertas. Expectativas salariales: 120.000€ al año, netos. Y una Gameboy advance SP.

Para decir tonterías ya me basto yo solito.

j j j

Fraudismo 101 – El audiolibro

Bueno, mejor el podcast, pero como es un ladrillo de dos horas, casi que podemos considerarlo un libro. Junto con José A. Blanco he perpetrado el episodio 40 del podcast en el que participo, We.Developers. Tengo la enorme suerte de que dos fantásticas personas (José, Ramón) me dejen compartir podcast. Y ser el más tonto de la habitación.

Es este episodio repasamos lo hablado en la serie de El Fraudismo, lo miedos, tics, fobias y problemas a los que nos enfrentamos los informáticos y concretamente los programadores. Aunque también hablamos de cómo gestionar equipos y de otras cosas. ¡Dos horas dan para mucho, especialmente a mí, que se me va la pinza!

Si tienes anécdotas, has escrito sobre el tema, tienes algo que contarnos, déjanos un comentario en la entrada del podcast. Pásate aunque sea para ver los enlaces a los posts de Joel Spolsky que deberías leer, sí o sí.

Cierro así la serie de El Fraudismo, para pasar a otros temas. Que me pongo muy pesado. Ahora tengo que buscar tiempo para publicar el libro + audiolibro en Amazon.

j j j

Fraudismo 101 – Here be dragons

Este post pertenece a la serie Fraudismo 101, dedicada a las fobias y filias del informático. Puedes leer todos sus posts en la selección de mis posts favoritos

Diez de la mañana. Tras leer el correo, ver Twitter y otras actividades de misión crítica, accedes a aquella carpeta. Abres un proyecto de hace un año. ¡Menuda basura de código tiraba entonces!

¿Quién no ha sentido ese escalofrío alguna vez? Ese momento en el que abres un viejo proyecto y miras el código que escribiste hace tanto tiempo. Es decir, hace dos meses. Casi no quieres mirar, con miedo a lo que puedes encontrar.

Bueno, eso si puedes abrirlo, claro. Si no ha cambiado en dos meses el IDE, el Sistema Operativo, el lenguaje y el encoding de los ficheros. Pero siempre nos quedará vi. Bueno, también admito Notepad.exe. Sigamos.

Haciendo un supremo esfuerzo te asomas al abismo de tu estupidez pasada. Sientes vértigo. Y ves los dragones. Te miran, revolcándose en tu miedo, en tu vergüenza, en tu falta de Unit Tests, en tu programar de espaldas al interfaz, en tu inconsistencia al nombrar variables. En esa clase con el nombre empezando en minúsculas. No hay nada que se pueda salvar de esta basura. ¿Cómo he podido perpetrar este código? te preguntas. ¡He definido un número como un int! ¡Me he acoplado!

¡Nunca entraré en la Iglesia de la CleanCodeología!

¿Seguro que todo es tan malo? ¿Es un asco absoluto? ¿Estás seguro de que tu código te hace digno de ser azotado en la plaza del pueblo? ¿Nunca vas a tener el autógrafo de Uncle Bob? Te voy a contar un secreto: tu código no era/es tan malo: ¿No compila? ¿No resolvió el problema hace dos meses? Si da respuesta a los requisitos del usuario y funciona bien, sin errores, probablemente no sea tan malo.

Y ahora, lo bueno:

Si eres capaz de ver mejoras en código tuyo que escribiste hace un tiempo, enhorabuena: eso significa que ahora eres mejor programador.

Lo malo sería que pasen los años y continúes satisfecho all 100% del código que escribiste. Que es distinto de estar satisfecho del producto/proyecto. Me explico. El producto/proyecto es lo que disfruta el cliente. El código es lo que tú ves y conoces que está ahí. Es como en un hotel: tú disfrutas la habitación, las piscinas, el comedor. Pero no ves las cocinas, las máquinas del ascensor, los cuartos donde se guardan los carritos de la limpieza, las tuberías. Lo feo. Por eso hay veces que estás contento con una aplicación o web que hiciste, aunque sepas que se podría haber escrito mejor. Lo sabes ahora, claro.

Esta es la clave: tú no estás quieto en el tiempo. Y cuando empiezas un proyecto conoces el problema que tratas de solucionar bastante peor que al final. Por eso al final sabes que deberías haber empezado de esta u otra forma. Claro, porque ahora realmente entiendes de qué va tu programa. Ahora has dedicado montones de horas a resolver el problema y conoces mejor a tu usuario. Ahora todo es más fácil si recomenzáramos, pero no hay que avergonzarse de lo ya hecho.

Lo más normal es que ahora, que entiendes bien el problema y conoces mucho mejor tu lenguaje/framework escribas mejor código. Si no es así, sí debes empezar a preocuparte: estás en una Cárnica, en un proyecto estancado o escribes cosas en un blog en vez de subir código a GitHub.

El ansia de lo nuevo

Y claro, mientras estamos en pleno proyecto leemos sobre alguna nueva herramienta, nos hablan de una librería, vemos un vídeo o leemos un libro y seguimos aprendiendo. Y queremos poner esas ideas en practica inmediatamente. Error.

En cada proyecto, aprende una o dos técnicas nuevas e incorpóralas para siempre a tu caja de herramientas.

Si durante el proyecto te comentan una nueva forma de hacer Unit Testing, y es muy sencillo aplicarla, hazlo. Si no, crea un proyecto de pruebas para «rascarte ese picor» y prueba ahí la nueva técnica. Una vez la tengas entrenada, aplícala en el siguiente proyecto. Si no, estarás añadiendo cosas que, en teoría mejoran el proyecto pero que realmente te retrasan del objetivo: entregarlo. Y es así porque, seamos sinceros, esas nuevas técnicas no estaban planificadas en ningún sprint, ¿cierto? Pues eso: practica, anota y aplica en el siguiente. Pero no lo uses como excusa para procrastinar.

Y piensa que siempre estarán ahí. No van a desaparecer por no usarlas de golpe. Deja que maduren, y termina tu proyecto. Pruébalas y cuando estén preparado úsalas. Experimenta con gaseosa.

Rewrite from scratch

Y recuerda: a medida que conozcas mejor el problema que solucionas y la tecnología, mayor será la tentación de tirarlo todo a la basura y volver a empezar. No lo hagas. Lee mejor a Joel Spolsky.

Como verás en ese artículo (¿qué haces aquí? ¡vete y lee eso, que es oro puro!), leer código es mucho más difícil que escribirlo. Tienes que volver a pensar en qué solucionaba ese código. Meterte en la cabeza de otro (aunque sea tu cabeza de hace dos meses). Eso cuesta. Por eso inmediatamente sabemos que nuestro código antiguo es una basura. Porque no queremos leerlo de nuevo.

j j j

Fraudismo 101 – enseñar las vergüenzas

Tu jefe entra a la oficina. Es Lunes, son las 9:30 y se nota el cansancio del fin de semana, el cansancio de los que nacieron cansados, el cansancio de las quejas por lo malo que es el trabajo (pero eso sí, no hago nada por mejorar como, por ejemplo, irme que me da pereza). Cansancio. Eso y ganas de ir a desayunar. En medio de la granja de cubículos el jefe anuncia a voz en cuello, sobresaltando a varios:

  • «a partir de mañana vamos a instalar un Wall Screen en la entrada. En este Wall Screen vamos a poner una secuencia de capturas de vuestro código sacado de los repositorios de la compañía junto con vuestro nombre y una foto. Con animaciones chulas, para impresionar a los clientes que vengan y puedan leer el código que escribimos». En broma añade: «es eso o venir a trabajar en pelotas».

El Martes, todos fueron en bolas.


Esto, que puede parecer exagerado, es lo que se produciría si de pronto tu compañía le mostrase a todo el mundo tu código de golpe. Bueno, quizás no irías desnudo, pero los niveles de ansiedad y mala leche se dispararían bastante. Enseñar tu código es una de las cosas que más estrés produce del mundo, junto con el examen del carnet de conducir y dejarle el móvil desbloqueado a tu pareja. Dado que el resto ya lo sabe todo y que sabemos que somos unos fraudes, la perspectiva de enseñar nuestro código hace que el cerebro entre en pánico.

Lo que tu cerebro imagina que va a pasar: al llegar a la oficina, todo el mundo se va a poner en pie, señalándote con el dedo y riéndose de ti, mientras terminan de colocar pancartas con «El código de Diego apesta» escrito con pintura roja y te lanzan verduras podridas a la cabeza. Te sientas y todo el que pasa te da una palmada en la cabeza junto con un cariñoso «pringao». Te han quitado el ordenador para que no perpetres más crímenes contra el Clean Coding. El tonto de la oficina se sienta a tu lado y cada dos minutos te da un golpecito en el hombro y te susurra «loser». Godzilla está en camino para comerse tu coche. Tu pareja te llama porque «tenemos que hablar».

Lo que de verdad pasaría: nada.

Y sin embargo estos miedos llenan de pesadillas las noches de los programadores. Esa es la razón de tantas risitas nerviosas cuando había que unir el código de todos en las prácticas de la Universidad. O por qué cuando se asoma tu jefe a «ver cómo va eso, que le enseñes algo» siempre se piden 10 minutos más, que ya «casi casi está, un momentito que ahora te lo enseño». Miedo. Al rechazo de tus compañeros. A no dar el nivel que se espera. A Godzilla. Es que no he terminado de pagar el coche.

Quizás el 10% de los que programan en la oficina se fijaría en tu código (que no son todos los que andan por allí). De esos, algunos usan tu mismo lenguaje, otros no. Así que estos asumen que lo haces bien porque para ellos ya eres senior. Y los que lo entienden, probablemente te hagan algún comentario positivo sobre cómo lo hacen ellos. Si es que es distinto. O que usan tal o cual librería, con lo que aprendes. O que gracias a tu código han aprendido cosas (¡de ti, de un Fraude, inaudito!). Al compartir siempre ganas. En este caso, al recibir críticas de tu código aprenderás horrores en muy poco tiempo, sin los horrores que imaginas.

«Recibir críticas == terror». Pues no. Yo invoco siempre este mantra cuando tienen que mirar mi código (por ej. en una code review):

cuando critican mi código sólo critican mi código, no a mi

Es así de simple. Sólo puedes saber lo que haces mal comparando con otros que lo hacen mejor. En cuyo caso aprenderás. Si no contrastas, no aprendes. Puedes aprender leyendo libros, pero al dejar que otras personas revisen tu código comparas de golpe con todos los libros que ellos ya han leído, gratis.

Y la gente es buena.

El doble G

Pero claro, siempre está ahí el miedo a encontrarte con el doble G (Gran Gilipollas) que sabe mucho y se reirá de ti. En mi experiencia (unos cuantos años ya) he deducido que el doble G es una ilusión paranoide colectiva producida por el exceso de radiaciones que recibimos de nuestros ordenadores. No existe. O yo no lo he visto. Es como BigFoot.

Si alguien sabe mucho normalmente es porque tiene lo que llamamos experiencia, que consiste en cometer todas las posibles equivocaciones y luego ser capaz de recordarlas. Si no las recuerdas eres un yo. Alguien así o bien te va a comentar cómo mejorar (porque ya lo sabe) o va a estar liado con sus cosas de senior y no va a tener tiempo para dedicarse a ti. Pero siempre te podrá recomendar un libro, un blog, un video. ¿Qué sentido tiene reírse del que no sabe? ¡Si ya sabes que no sabe!

Comparte

Mi experimento de los Wall Screens nunca se ha llevado a cabo tal cual. Pero existe, en la forma de repositorios públicos de código, vídeos donde apareces dando una charla a un grupo de compañeros o posts de tu blog donde hablas de tal o cual tema que ahora has dominado. Cuanto más compartas, mejor. Porque para apaciguar al monstruo del miedo no tendrás más remedio que profundizar, revisar, aprender, mejorar. Porque Godzilla te da miedo, ¿recuerdas? Luego escribir un inocente post sobre algo probablemente te convierta en un experto en ese algo. Al menos, más experto de lo que eras antes.

Combate el miedo publicando cosas. Total, lo más que te pueden decir es que yo ya lo sabía o que eres un fraude.

P.D.: Por cierto, y por si no lo has percibido, he creado un mantra. Mi carrera hacia el Olimpo gafapástico de gurú de salón avanza que da gusto.

j j j