Mostrando entradas con la etiqueta Recomendaciones. Mostrar todas las entradas
Mostrando entradas con la etiqueta Recomendaciones. Mostrar todas las entradas

martes, 16 de junio de 2020

Seguridad y factores de autentificación. Casos de Fraude y Vulnerabilidades.

¿Por qué cada vez es más complicado seleccionar un password y hay cada vez más medidas y controles de seguridad?

Esto es porque dependemos más de “almacenar” y organizar nuestra vida en medios digitales, y estos datos privados adquiere un cierto valor para usarse de forma maliciosa de diversos formas, como por ejemplo robarnos el dinero que tenemos en nuestras cuentas bancarias.

Los formas tradicionales de protección se hacen obsoletos muy rápido, y las formas de obtener nuestros datos, se vuelve cada vez mas ingeniosas, y se alejan de un clásico ataque de película de hacker, en la que se usan puertas traseras o complicados códigos. La mayoría de los ataques se bajan en ingeniería social aprovechándose de la inocencia e ingenuidad (a veces de la avaricia), de los usuarios.

Vamos a analizar las formas de proteger nuestros sistemas y algunos ataques clásicos que los vulneran.


Diferencia entre privado y secreto


Ante de nada hagamos una diferencia entre que es privado y que es secreto:

  • Privado: Es un dato que solo debemos compartir con personas autorizadas, cuanto menos personas sepan este datos, más seguro es. Generalmente son datos que sirven identificarnos y se complementan con un dato secreto.

  • Secreto: Son datos que solo nosotros debemos conocer, no debemos proporcionarlos a nadie, y en el momento de usarlos debemos ser nosotros mismos los que los usemos a través de un sistema, sin ninguna iteración humana adicional.


Factores de autentificación


Los factores de autentificación son “categorías” que clasifican formas que tiene un usuario de autentificarse dentro de un sistema.

En la actualidad se debe combinar más de un factor de autentificación (más de una forma de autentificación) para garantizar la seguridad de un sistema.

Factor cero de autentificación. Algo que se sabe en común


La autentificación se basa en algo el que usuario (o cliente), y la institución (o empresa) conocen. Este dato debe ser privado, pero en muchos casos se acaba convirtiendo en un elemento público, algunos datos son:

  • Número de cuenta, cliente: Deben ser privados pero generalmente no es así, ya que es el elemento con el cual generalmente nos identifican en un primer nivel y hay que compartir.

  • Números de tarjeta: Debieran ser secretos, pero el simple de usarlas lo expone continuamente.

    Una forma muy sencilla de obtener este dato por parte de empleados maliciosos es la siguiente:

    Al momento de pagar, con papel de carbón o algún tipo de superficie que se marque con la presión, graban estos números simplemente apretando la tarjea con la superficie (recordemos que estos números tienen relieve), es algo muy rápido y pasa desapercibido porque puede estar oculto debajo de la terminal (o incluso en el pantalón) posteriormente con la excusa (o el gesto) de revisar la firma aprenden de memoria el CVE. De esta forma ya tienen el número de tarjeta, la fecha y el CVE, con lo que pueden realizar comprar por internet. Esto es muy común en comercios muy congestionados, donde la prisa se junta con el movimiento del empleado como gasolineras que no son de autoservicio.

    ¿Qué se recomienda en esto casos?:

    • Tapar el CVE, con un poco de papel, o cinta, de forma que sea imposible, revisar este número.

    • Nunca pagar con debito, si no con crédito. Es mucho más fácil ganar una reclamación cuando estas pagan con crédito (ya que le dinero nunca es tuyo y el banco se puede negar a pagar a un negocio fraudulento), que pagar con debito (donde si es tu dinero, y cuando lo pierdes, es más difícil reclamarlo).

    • No activar la compra por internet con tarjetas físicas, sino con tarjetas digitales, que ofrezcan medidas de seguridad como un CVE cambiante, y otras medidas de personalización.

    • Nunca pagar por teléfono (en un llamada telefónica) con la tarjeta.

    • Y sobre todo, nunca, nunca, perder de vista tu tarjeta, por ningún motivo, incluso, si el empleado se tarda mucho en cobrar, hay que pedir que se devuelva la tarjeta. Es común que en un escenario de fraude, el empleado haga que no entra la tarjeta y tiene que llamar a alguien o hacer una operación especial, para liberar el cobro, aprovechando para tomar los datos de la tarjeta.


  • Usuarios: Un usuario que identifica al cliente. Aunque este dato generalmente no se tiene que compartir a una persona (porque es privado y se usa generalmente dentro de sistemas), suele ser conocido por la institución (en decir en ninguna forma esta encriptado de forma no reversible) ya que es un elemento de referencia y seguimiento para distintas actividades.

  • Email o teléfono: Se usan frecuentemente y cada vez más como medios de autentificación, debido a que son fáciles de recordar, pero son extremadamente públicos, con lo cual son el primer punto de entrada para un hackeo.


El problema de este factor de autentificación es que a pesar de sus distintos niveles de privacidad, es necesario que tanto la institución, como el usuario, intercambien de forma clara el “dato”, que ambos conocen para garantizar que el otro también lo conoce, pero al hacerlo comprometemos el datos en si, por que no sabemos si realmente la persona o contraparte con lo que estamos hablando es la intuición, el cliente o solo alguien que quiere obtener dicho dato (para efectos maliciosos).

Factor uno de autentificación. Algo que solo el cliente sabe.


Generalmente aquí estamos hablando de los password, pines y demás.

  • PIN (o NIP) numérico: Es un valor numérico de cuatro o más números, que se usa para acceder a un servicio, como por ejemplo, el pago con una tarjeta.

    No ofrece en si mucha seguridad, debido a que con cuatro números, tenemos solo mil combinaciones posibles (no que no es mucho), la seguridad viene en si en que después de un numero de intentos determinado, el dispositivo o la tarjeta se bloquea (en algunos casos puede borrarse la información), lo cual es realmente lo que proporciona la seguridad.

  • Password: Es una palabra secreta que combina, letras, numero y símbolos, al igual que el pin, no se debe compartir bajo ningún concepto con otra persona.

    Tanto el password como el PIN, se guardan (o se debiera) “encriptados” en los sistemas de seguridad, con una encriptación que se llama “de una sola vía” (conocido comúnmente como hash). Esto quiere decir que no se puede llevar al valor original (el password), desencriptando el valor guardado, porque es imposible, con lo que ni la institución sabe cuál es el password que estamos usando.

    Una anécdota que me paso hace unos años con respecto a los password. Estaba con una líder de proyecto, y necesita acceder a su laptop para obtener un dato, pero ella tenía las manos ocupadas, así medio en broma le comente “voy a entrar con tu password”, y por chiripa y en medio de la broma use el nombre de su hija (ella acaba de madre recientemente), y por sorpresa la computadora de desbloqueo.

    La situación anterior, nos hace ver que sin restricción alguna, seleccionamos podemos seleccionar password que son débiles, relacionado por algún detalle de nuestra vida o contraseñas demasiado comunes que están en diccionarios para hackear contraseñas.

    Cuanta más entropía (menos orden y menos lógica) tenga un password más seguro es, con lo que se establecen una seria de restricciones a su creación, generalmente son las siguientes (cuando más se cumpla, más seguro es el password):

    • Una longitud mínima.

    • Un uso mínimo de mayúsculas y minúsculas.

    • Un uso mínimo de símbolos.

    • Un uso mínimo de números.

    • No permitir caracteres (o números) igual en secuencia, como ldquo;aaa”, o “1111”.

    • No permitir caracteres consecutivos de forma ascendente o descendente, como “1234”, “abcd” o “dcbd”.

    • No permitir palabras que se encuentren seguidas en el teclado como “qwerty”.


Una vez me preguntaron si hacer públicas esas reglas no hace que un ataque sea “más guiado” y por tanto hacer que sea más posible hackear un password. La respuesta es no, es mas hacer pública estas reglas y obligar a que sea cumplida por los usuarios (o clientes), son realmente un elemento disuasorio para los hackers, por que básicamente saben que con los medios actuales esas contraseñas son prácticamente inhackeables (aunque pueden obtenerlas mediante ingeniería social).

Factor tres de Autentificación. Algo que el cliente tiene


El usuario de autentifica con algo que solo él puede poseer, generalmente un elemento físico que se asocian a una identidad y nos permiten el acceso a una acción, característica o servicio. Algunos son:

  • Tarjetas: Las típicas tarjeas que nos permite el acceso a zonas restringidas, o para realizar pagos con ellas.

    Las tarjetas como elemento único de validación son extremadamente inseguras, deben usarse siempre junto con otro elemento.

    En México, por ejemplo, era común en la década pasada que para pagar con tarjeta solo fuera necesario presentar la tarjeta, realizar el pago con el punto de venta y firmar el voucher, en teoría el empleado debiera validad la firma y la identidad con otra autentificación, pero a pesar de ser obligatorio, era a voluntad del empleado y comúnmente nunca se hacía.

    Solo fue hasta hace poco que se comenzó a pedir el NIP de la tarjeta al realizar el pago (pero no para todas las tarjetas, ni bancos), de esta forma ya no queda a la voluntad del empleado el validar la identidad del cliente, sino que además es el cliente el que debe acreditarla, y se si equivoca varias veces, puede bloquear su tarjeta. Esta es una medida de protección fundamental para que la tarjeta no sea solo el medio de identificación posible para hacer un pago.

    Pero nada sirve totalmente, una vez mas es más sencillo realizar fraudes mediante ingeniera social, que mediante complicados y herramientas tecnológicas, como ejemplo los siguientes escenarios:

    Muchos Bancos no tiene personalizadas sus tarjetas de debito (no entiendo el motivo), con que no es fácil ubicar si una tarjeta es tuya entre dos tarjetas iguales del mismo banco, en base a eso, uno de los posibles fraudes es el siguiente:

    Una persona parece consternada cerca de un cajero (esta es el timador uno), cuando otra (este el cliente real), va a usar dicho cajero, el timador se acerca y le dice “oiga no se olvide frotar su tarjeta”, cuando el cliente se muestre perplejo, el timador insiste que debe frotar la tarjeta por qué no funciona el cajero, haciendo que se sienta cada vez mas confundido. Cuando sienta que haya bajado la guardia, le toma la tarjeta rápidamente, y le enseña con gento amable como debe frotarla y se la devuelva rápidamente, pero en el intervalo, le cambia la tarjeta por otra, al final se despide y le desea suerte, todo ocurre tan rápido que la única sensación que tiene el cliente, es que el sujeto es un poco raro y confiado.

    Cuando el cliente vaya a usar su tarjeta y le pida el NIP, es donde se acerca el timador dos, para ver disimuladamente que números está marcando. De esta manera los timadores ya tiene por separado el NIP y la tarjeta, y el cliente está confundido sin saber que ha pasado. Dándoles tiempo a los sujetos de usar las tarjetas en un negocio para compra televisiones o algún elemento de valor, que ya tendrá un tercer timado, en la fila de la caja de un comercio cercano. Todo esto puede pasar en menos de diez minutos.

    Otro timo que se puso de moda hace unos años, esta vez más sofisticado:

    Un timador, con una base de datos de teléfonos y personas (que se puede comprar ilegalmente), se hace pasar por teleoperador de un banco con muchos clientes (lo que aumenta la posibilidad de encontrar un inocente cliente).

    Llama a una víctima de sus lista, y le indica que su banco le realizo un cargo incorrecto (el teleoperador no sabe si el cliente tiene cuenta en un banco, solo es suerte y estadística).

    Le dice “por su seguridad, voy a decirle los 8 primeros números de su tarjeta)”, y aquí reside el engaño, los 8 primeros números de una tarjeta, solo indican a que banco pertenece la tarjeta, y el tipo de producto que es, esto quiere decir, que son iguales para todos los clientes.

    El cliente al ver que le han dado algunos números de su tarjeta (que no aportan realmente nada), le proporciona al timador todos los datos de su tarjeta, lleno de confianza, al pensar que habla con su banco y no con un timador. Al final, el resultado, es que de una forma u otra, el cliente se queda sin su dinero, al haber dado sus datos privados al timador.

  • Tag (Etiqueta RFID) o incluso una matrícula: Los coches pueden tener elementos como tag, que permiten la salida y entrada de vehículos (a veces incluso con reconocimiento óptico de matriculas).

    Uno de los problemas de usar un tag (o la matricula) asociado a un vehículo, es que generalmente esta pegados al mismo vehículo, con lo que se puede decir que están unidos el medio de autentificación y la acción a realizar. Esto quiere decir que por ejemplo si alguien roba tu vehículo en un estacionamiento, podrá salir con el sin más problemas (por ese falta algo más que impida esta circunstancia como un guardia o cámaras de seguridad).

  • Un teléfono: Se garantiza que la operación que se desea hacer es desde un teléfono especifico, generalmente esto se consigue de una forma parecida a la siguiente:

    1. Se genera un identificador único con datos del teléfono.
    2. Se generan claves criptografías (generalmente asimétricas).
    3. Se encriptan estos datos, usando algo mecanismo de protección como un password.

  • Un token o generador de números: Son dispositivos que genera números y se usan en cada operación, por ejemplo, si estoy haciendo una operación bancaria se pedirá un número generado por este dispositivo, y si no es el número correcto, la operación no se realizaran.

    Los dispositivos pueden ser físicos, como un aparato dedicado exclusivamente a esa función, o una aplicación instalada en un teléfono.

    Estos dispositivos, de la siguiente forma:

    1. Existe un servidor y dispositivo, ambos aislados uno de otro, sin comunicación alguna.
    2. El servidor y dispositivo, comparte una misma llave de una determinada longitud llamada semilla.
    3. Ambos generan números basándose, en la semilla (que comparten), y algún elemento independiente de ellos, como la fecha y hora exacta, esto genera un numero, como el servidor y el dispositivo generan comparte la llave, debiera poder generar el mismo número, en el mismo momento (sin tener que estar conectado).

    De esta forma el servidor sabe en cada momento que numero debe generar el dispositivo y solicitárselo al usuarios para garantizar que tiene el dispositivo consigo.

    Uno de los problemas es que el servidor (que está en la empresa que proporciona el servicio, como un banco) sabe cuáles son las semillas que generan el token, es decir es capaz de duplicar dichos números, con lo que en teoría es información que se comparte, y no es algo que tenga exclusivamente el cliente. En otras palabras quien tenga dichas semillas, se pudiera hacer pasar por el cliente.

    Otro de los problemas del token, es que el número sirve para autorizar casi cualquier cosa, con lo que podemos ser engañados, para proporcionar nuestro número actual de token, y realizar operaciones fraudulentas.


Factor tres de Autentificación. Algo que el cliente es


Algo único que está ligado a la persona física del cliente, de forma inequívoca, algo que “el cliente es”, de forma inequívoca e irrepetible, como:

  • Firmas manuscrita: es la clásica firma que hacemos de nuestro puño y letra como prueba de nuestra identidad. Es usual en contratos, y documentos impresos. Aunque se supone que es algo que solo nosotros podemos duplicar exactamente igual, generalmente puede ser copiada y no ofrece mucha seguridad (tal es el caso que en la realización de contratos generalmente hace falta una figura notarial que le de valor, y personas que funjan como testigos).

  • Elementos biométricos: Son elementos que pertenecen a nuestro cuerpo, y que pueden ser validados por un sistema informático, como

  • Huellas: Son los surcos únicos que poseemos en la llama de los dedos.

  • Rostro: Nuestra cara como identificación, el problema es que frecuentemente nuestra cara cambia, con lo que es necesario renovar la autentificación.

  • Iris del ojo: Al igual que las huellas se supone que son elementos únicos en cada uno de nosotros.

El cambio hacia los biométricos ha sido bastante arduo, por no siempre ha dado los resultados requeridos. Unos de los aspectos importantes de los biométricos (y por lo cual han sido hackeados mas de una vez), es que deben garantizar que la persona que está ofreciendo la muestra biométrica está viva y presente, por ejemplo en el caso de las caras es necesario garantizar que realmente estamos leyendo una cara, y no la foto de un sujeto, en el caso del iris, se deben observar movimientos involuntarios del ojo, para garantizarlo.

A veces el uso de biométricos puede ser frustrante, por ejemplo, Es común tener lectores de huella en los teléfonos móviles, estos lectores solemos entrenarlos con nuestra propias huellas y tener un porcentaje de éxito muy elevado, pero lectores empresariales (a veces de poco costo), que se usan másicamente en las empresas para identificar clientes, suelen dar multitud de quebraderos de cabeza.

Autentificación multifactorial


Como hemos visto cualquier solución de autentificación individual, es hackeable en cierto punto, casi siempre usando ingenio más que habilidades tecnológicas.

He aquí el por qué generalmente se usa más de una de forma de autentificación (lo que se conoce por autentificación multifactorial). Por si una es rota, quede la protección de la otra.

De misma forma las técnicas de fraude, avanzan más y de forma muy rápida, con lo que los sistemas se van mas forzados a endurecer sus mecanismos de seguridad, a expensas de la comodidad del usuario.

El principal enemigo del usuario, es su misma ingenuidad, es más fácil que el usuario proporcione sus datos de autentificación mediante engaños, que en si sea hackeado por sofisticados métodos informáticos.



Si te ha gustado la entrada, ¡Compártela! ;-)

jueves, 15 de noviembre de 2018

Consejos para realizar una entrevista de trabajo exitosa


Cuando un estudiante se quiere incorporar a la vida laboral, unos de los primeros problemas a los que se enfrenta son las entrevistas de trabajo. Es un nuevo escenario, con nuevos desafíos, en los que se aplican reglas diferentes a las que está acostumbrado. Como entrevistador y seleccionador en las áreas técnicas, te doy los siguientes consejos:



Llega de cinco a diez minutos antes. ¡Es increíble la poca importancia que se le da a la puntualidad! Si te va a entrevistar alguien de perfil técnico, ten por seguro que esta saturado de trabajo, y que está haciendo un “hueco” para poder entrevístate, lo cual hace tenga que mover sus compromisos. Si llegas tarde puede pasar que no te pueda entrevistar o que lo haga de mala gana. En lo personal me es imposible pensar en otra cosa durante la entrevista, si no tuvo la responsabilidad de llegar a tiempo a la entrevista de un trabajo, me resulta difícil de creer que sea acertado en sus tiempos y compromisos. Considera que llegar tarde predispone al entrevistado en tu contra y es una mala forma de comenzar.

Vístete adecuadamente, según el tipo de empresa que te va a entrevistar. A veces tenemos un estilo propio al que no queremos renunciar, lo sentimos como parte de nuestra identidad, y nuestra forma de ser, y eso está bien, pero lo cierto es que las empresas buscan personal que encajen con su forma de ser, su visión y su política. Si haces una entrevista en un lugar donde la norma de etiqueta es la formalidad, es mejor que busques dicha formalidad en la entrevista. Detalles sencillos como tener atado correctamente los cordones de los zapatos, la camisa colocada apropiadamente, y una imagen de cuidado personal adecuado, ayudan bastante a ofrecer una imagen acertada.

Infórmate muy bien de cuál es el giro y el área de intereses de la empresa que te esta entrevistando, y además intenta que quede patente en la entrevista que tienes dicha información. Los entrevistadores valoran mucho que se conozcan detalles de sus empresas, porque demuestran que el entrevistado tiene intereses y proactividad. No da muy buena imagen que el candidato no sepa nada de “donde esta” y “por qué vino”.

Cuando el entrevistador te pregunte algo, no conteste con monosílabos (“si”, “no”, “no sé”, “puede”), intenta siempre dar una explicación detallada, y que queden claro los “porqués”. El entrevistado quiere conocerte, conocer como piensas y como te desarrollas en un ambiente laboral.

Una de las reglas que asumí hace unos años, es no seleccionar gente que no pueda comunicarse apropiadamente. Para mí es muy importante que puedan interaccionar con compañeros y que quede claro que pueden comprender los requisitos y las necesidades apropiadamente. Tenlo mucho en cuenta, las capacidades de comunicación, son tan importantes como las capacidades técnicas.

Posiblemente te hagan una pregunta estilo “¿Dónde te ves dentro de cinco años?” La pregunta sobretodo es de interés profesional, piénsala bien, incluso llévala preparada. Contesta algo que le haga sentido al entrevistador y tenga que ver con vida empresarial. Hace unos meses un candidato me contesto que quería ser estrella de rock, lo cual es muy loable y sincero, pero fue bastante sorpréndete y sin ninguna relación con el puesto que yo pudiera valoras. El entrevistador siempre buscara algo que le diga que puedes ser una buena inversión a futuro, y que vale la pena apostar por ti. Hazle saber que es así.

Algunas otras preguntas comunes son, “¿Cómo trabajas en situaciones de estrés” y “¿Cómo trabajas en equipo?”. La primera pregunta tiene realmente mala fama, pero lo que realmente quiere saber un entrevistador es si eres capaz de reaccionar apropiadamente en un contingencia. Los sistemas informáticos son muy delicados, sobre todos si estos gestionan dinero, salud o algún tipo de seguridad (de la cual pueden depender incluso el patrimonio o la vida de alguna persona), es importante que en la contestación des algún ejemplo de una situación de estrés (profesional) que hayas vivido y como lograste superarla.

Sobre como trabajas en equipo, lo recomendable es que hables sobre las estructuras organizaciones en las que has trabajado y como te has relacionado en ellas (hablando de tus roles y de roles de las personas del equipo), también aprovecha para hablar de los procesos o métricas que has seguido. Destaca los puntos positivos del trabajo en equipo y los que han sido mas satisfactorios. Si quieres hablar de puntos negativos, es buena idea, siempre y cuando muestres como los superaste y no hables mal de tus compañeros (y jamás de de personas en particular). Una queja excesiva (y poco fundamentada) sobre determinados aspectos o personas puede generar una impresión negativa de tu forma de trabajar un equipo y lidiar con los problemas. Es increíble lo pequeño que es esta industria cuando llevas años trabajo, una vez entreviste a una persona que hablaba muy mal (pero muy mal) de su antiguo jefe, dio la casualidad que su jefe era un antiguo colaborador mío al que tenía en muy alta estima y con el que nunca tuve ningún problema (al contrario), lo cual me genero mucha controversia acerca de la sinceridad del candidato.

Seguramente también te pregunte el por que quieres este trabajo, contesta con sinceridad, pero también comenta aspectos que tengan que ver con tus intereses profesionales, y de crecimiento además comenta aspectos que tengan que ver con la misma empresa, igual puedes comentar intereses personales, pero no los maximices con respecto a los profesionales.

Habla claro de los aspectos tecnológicos que conoces bien, y se sincero con los que no conoces. Nunca digas “creo que si lo conozco”, o “creo que lo conozco con otro nombre”, es muy frustrante para un entrevistador, no poder decir definir que sabes o que no sabes, cualquier cosa que comience con un “creo”, el entrevistador lo va a convertir en un “no sabe”.

Siempre es conveniente tener experiencia en las tecnologías a tratar en la entrevista, si eres estudiante y no la tienes, intenta realizar proyectos personales que te provean de dicha experiencia, si no es posible, intenta tener cursos que demuestren que conoces la tecnología, y tampoco es posible, debes dejar en claro en la entrevista porque tienes las capacidades necesarias para obtener los conocimientos tecnológicos para el puesto, ya sea comparándolos con tecnológicas semejantes, o con desafíos parecidos que hayas superado.

Así pues infórmate bien de los requisitos tecnológicos que requiere el puesto, y aunque algunos nos los conozcas, es muy importante que tengas claros los nombres y para lo que sirve, un entrevistador de calidad, comprenderá que no es posible conocer todo, pero valora que digas cosas como “esta tecnología sirve para esto o aquello, aunque nunca le he manejado profesionalmente”.

Es importante la sinceridad, recuerda igualmente que seguramente habrá una prueba técnica para validar tus conocimientos, si no fuiste sincero el entrevistador se sentida “engañado” y tu credibilidad quedara en entredicho.

Muéstrate orgullo de tus conocimientos pero no seas prepotente, considera que la persona que te esta entrevistando posiblemente no solo sea experto en las tecnologías requeridas, sino en el negocio en las cuales se aplican dichas tecnologías, no te enzarces en discusiones estériles que no llevan a ninguna parte.

Posiblemente se interese por algunos aspectos de tu vida (dentro, claro de los que es prudente y normal). Realza aquellos que tienen que ve con la empresa o con tu profesión. Si te esta entrevistando alguien técnico, seguramente tenga muchos puntos en común, sobre los motivos por los cuales decidiste estudiar o dedicarte a esta profesión, con lo que es un tema para generar empatía y darte a conocer.

Si te ofrecen Café o agua, recházalos a no ser que le entrevistador está tomando algo, y solo acéptalo si dicho café o agua está cerca, por ejemplo si te una botella de agua (y te la dan en la mano), acéptala, eso ayuda a crear cercanía, pero si esto implicara a que el entrevistador tiene que levantarse o prepáralo es mejor no hacerlo.

Si tomaste agua o usaste una servilleta, asegúrate que no lo dejas en la mesa. No manches el lugar de la entrevista, eso da que pensar que eres poco cuidadoso con tu entorno, y con los detalles.

Cuida tu lenguaje corporal. Es bueno que te expreses moviendo las manos, eso da confianza. Si las manos están quietas, dan una sensación extraña, en cambio estarlas mostrado (de una manera no demasiado histriónica), da expresividad y ayuda a explicar las cosas mejor. Pero sobretodo no te muevas continuamente (sin darte cuenta), o comiences a hacer cosas como mover una pierna constantemente, golpear la mesa o mover la silla sin ningún motivo, eso da una sensación de inseguridad, y puede poner nervioso a tu entrevistador.

Unas de las cosas que se valora especialmente es que la gente se interese por el resultado de su entrevista, eso da a entender que es una persona que busca mejorar los aspecto negativos, y que no está esperando que las cosas simplemente pasen.

Espero que estos consejos te ayuden a superar las entrevista futuras con éxito.

domingo, 7 de octubre de 2018

El desarrollador, la empresa y la sociabilidad

Es común tener la imagen típica del desarrollador de software introvertido, con problemas para comunicarse apropiadamente, también es común el programador, que sin ser tímido, decide aislarse del resto del equipo para centrase únicamente en su trabajo. En ambos casos esa percepción y comportamiento es completamente erróneo, además de inservible tanto para las necesidades de la empresa, como para las necesidades mismas del desarrollador.

Los motivos para que se de esta imagen, y este comportamiento son diversos, en parte es porque clásicamente esta profesión es difícil de comprender para no los no introducidos en ella. si bien uno puede generar empatía, por ejemplo, con el trabajo un medico aunque no se fuera ducho en su profesión, no pasa pasaba lo mismo con el desarrollo de software. No se alcanzaba a comprender que era exactamente la construcción de sistemas, lo cual creaba una brecha entre el desarrollador del software y los consumidores de dicho software, esto es incluso a nivel empresarial y social. Mientras que es fácil establecer un entendimiento claro sobre las necesidades de un puesto de trabajo cualquiera entre empleado y empleador, no ocurría los mismo cuando el empleado es desarrollador y el empleador no (y esto era así en ambas direcciones).


El acercamiento general de la tecnología a la sociedad dado en los últimos años, y representado sobre todo por el uso de los teléfonos inteligentes (sorprendentemente por encima incluso de las necesidades de la informática en forma laboral), ha contribuido a que la brecha se disminuya en cierta forma, si bien no hay un entendimiento completo, si queda claro que se necesita de la capacidades de un desarrollador de software, o por lo menos del desarrollo de software en sí.

Desde el punto de vista de la misma profesión, creo que académicamente se fomenta la parte poco social e introvertida del desarrollo de software. Esta carrera requiere grandes dosis de introspección, es necesario dedicarle horas, trabajo y esfuerzo de forma individual, pero también es cierto que a nivel universitario, se enseñan a comprender las soluciones, antes de plantear los problemas, se enseña antes a programar, que a saber por qué se programa. En la carrera se instituye el uso de las matemáticas y de la lógica, como un eje central en el desarrollo de software, y esto se mantiene como un mantra posteriormente. Si bien las matemáticas y la lógica son importantes, no dejan de ser herramientas a usar, sin embargo el saber reconocer necesidades, a trabajar e interactuar correctamente en un equipo de trabajo, son habilidades que no se establecen apropiadamente en ámbito universitario.

Un ejemplo de lo anterior son la enseñanza de las base de datos. Las base de datos tiene una importancia empresarial enorme y digamos que son un solución directa para un problema en especifico, sin embargo quedan pobremente explicadas en la mayoría de las carreras universitarias. Cada vez que entrevisto a un candidato para un puesto de trabajo, el punto débil son las base de datos. Los nuevos programadores no comprende el alcance y la necesidades del uso de las base de datos, e incluso programadores veteranos, tratan a la base de datos como si fuera programación imperativa y estructura, en lugar de ser declarativa y lógica, llenando un sinfín de procedimientos almacenados con lógica de negocio, y teniendo graves temas de ineficiencia al acceder a los datos. En estos casos tanto la parte matemática/lógica como la parte de base de datos están explicadas (en distintas asignaturas), pero al no establecida y identificada correctamente la necesidad, no sirve la explicación de lo uno o de lo otro.

Ya en un ámbito empresarial el desarrollo de software puede encontrarse con las siguientes circunstancias:

  •  Poco entendimiento de los procesos y necesidades empresarial.
  •  poco entendimiento de la empresa sobre el rol de desarrollador de sistemas.
  •  Poca interacción y compresión de su propio equipo de trabajo


Más concretamente la asocialidad y falta de iteración personal del desarrollador pueden generar los siguientes problemas:

  • No entender claramente las requisitos del software a desarrollar, creando soluciones técnicamente correctas pero que no resuelven ningún problema real, con lo que se alagara la construcción del sistema de forma sustancial y se reducirá la calidad de este.
  • Fallar en su capacidad de negociación, lo cual encararía a dos escenarios:

    • Problemas para negociar tiempos, recursos y alcancen en sus proyectos, lo que acarreara retrasos, e inconformidad en el cliente y en la misma empresa.
    • Problemas para negociar un salario adecuado. no sabrá valoran adecuadamente cuánto vale su trabajo, aceptando una retribución inferior a la se merece. Este tema es más profundo de lo que parece, por que crea un precedente en mercado, si los desarrolladores de software no sabe negociar apropiadamente su salario, su precio o valoración bajara. Esto quiere decir que el sueldo que pueden cobrar los desarrolladores de software bajara en su conjunto, por que las empresas podrán pagar menos dinero para contratar a un programador (es como querer algo por un precio justo, cuando otra persona lo está regalando)

Los siguientes consejos pudieran ser útiles:

Es importante participar en la reuniones. A veces los desarrolladores adoptan una actitud pasiva esperando recibir instrucciones, sin saber muy bien porque están en una reunión en particular. En el mejor de los casos se quedan esperando a que alguien le ceda la palabra para poder intervenir. Es necesario que el desarrollado se “ceda” la palabra al es mismo, que busque activamente su participación, que exprese sus ideas y sus inquietudes sin que nadie se las pregunte, es completamente necesaria y beneficiosa la participación del desarrollo en la reuniones, y eso es algo que solo el mismo desarrollador (y nadie mas) puede provocar.

No solo hay que hacer un buen trabajo, tenemos que promocionar nuestro trabajo, hacer relevante nuestro trabajo, “No basta con ser bueno, hay que parecerlo”. frecuentemente los desarrolladores que realizan un trabajo de calidad, esperan que su trabajo hable por sí solo, lo cual generalmente no pasa. Un desarrollo de calidad no solo implica la resolución de las necesidades presentes sino estar preparado para solucionar las futuras (debe ser escalable), y eso algo que no se percibe inmediatamente, es algo que se tiene que se debe explicar (y vender correctamente).

también es necesario que realice actividades fuera de la oficina que le ayuden a socializar con los mismos compañeros, pueden ser deportes (como futbol o tenis), o algún otro tipo de actividad alejado de las computadores. En cualquier caso es muy recomendable hacer algún tipo de ejercicio físico, esto ayudara a desentrenarse y cuidar la salud (Es mejor tener un condicionamiento físico adecuado que nos ayude tanto a mantenernos despiertos, como a dormir cuando debamos, que a atiborrarnos de café o bebidas con cafeína, que solo nos alteran el sueño y el estado de ánimo).

Como conclusión, la proactividad es el elemento clave, un desarrollador debe ser el que inicie el proceso a su propio crecimiento, debe saber (y buscar) interactuar empresarialmente. Es muy raro se den oportunidad, por si solas, el desarrollador debe fabricar las suyas.

domingo, 12 de agosto de 2018

Recomendación: Elon Musk, el creador de Tesla, PayPal y SpaceX que anticipa el futuro de Ashlee Vance

Siendo objetivos Elon Musk, es una inversor de (muy) alto riesgo, el empresario del momento, que ha sabido ver oportunidades en mercados en los que es difícil triunfar, y además en los que parece que el éxito va y viene, siendo subjetivo Elon Musk esa construyendo pieza a pieza, el futuro de la humanidad.




Acabo de leer la biografía de Elon Musk (Elon Musk, el creador de Tesla, PayPal y SpaceX que anticipa el futuro de Ashlee Vance). Disfruto mucho leyendo biografías de personas y emprenderos que ha sabio marca un hito en el mercado.

Elon Musk es el fundador (o le gusta ser considerado como tal), de PayPal , SpaceX , Tesla y SolarCity. En mucho de esto casos se unió con personas más capacitadas en labores de ingeniería para poder llevar a cabo estos proyectos. Con lo que fuera, es justo reconocer que sin energía "impulsora" de Musk, posiblemente estas empresas nunca hubieras salido adelante, quedándose en buenas ideas o intenciones.

Sus dos grandes empresas son SpaceX, dedicada a la construcción cohetes aeroespaciales, que promete abaratar ese mercado en particular, y Tesla, un fabricante de coches eléctricos (hasta ahora) de lujo. Su otro "hijo", hasta ahora pequeño, es SolarCity, una empresa dedicada a la conversión y aprovechamiento de la energía solar, que posiblemente sea revolucionaria en su sector.

El objetivo declarado de Musk es llevar al hombre a Marte, no como una exploración, si no con la intención de convertir a Marte en una colonia de la humanidad.

Elon Musk parece querer llevar los relatos de ciencia ficción a la realidad, allí están las ideas de Ray Bradbury, Asimov, y Philip K. Dick , me atrevería decir que incluso de Futurama.

En cuanto a su vida privada, nació en Sudáfrica, donde fue un niño bastante introvertido, emigro en edad universitaria a Canadá, y posteriormente se estableció en estados unidos, donde comenzó su vida emprendedora con una empresa relacionada con el software y los anuncios por internet para posteriormente fundar lo que sería uno de los primeros bancos por internet. Todo eso se acabaría convirtiendo en PayPal (a través de fusiones). De esta experiencia acabo despedido y multimillonario, es una serie de declaraciones y eventos rocambolescos (como parece ser todo lo que hace). En cuanto a su parte personal, tiene cinco hijos y es divorciado tres veces (con su segunda esposa se caso dos veces).

En la parte que más nos interesa, la vida profesional, ha sido comparado en multitud de ocasiones con Steve Jobs , y la vedad es que si tiene bastantes semejanzas , aquí vamos a exponer varios aspecto en común, y analizar la diferencias y formas de trabajar que hacer especial a las empresas de Elon, de su competencia.

Personalidades excéntricas, que genera a la vez odio y admiración. El trato personal no parece ser una de las características más destacadas de Musk, siendo muy duro con los fallos, muy exigente con los resultados, y con tendencia a deshacerse muy rápido de lo que no le sirve, igualmente su misma energía y determinación contagia a sus empleados y hacen que sus ideas y aspiraciones sean compartidos por estos.

  • Una participación intensa en cada aspecto del desarrollo. A diferencia de otros CEOs (incluso otros que solo dirigen una sola empresa), Musk conoce el detalle de cualquier parte del desarrollo, incluso a un profundo nivel técnico.

  • Una disminución (hasta eliminación) de la burocracia y de las reuniones absurdas protocolarias . No hay nada que le moleste mas a Musk que una reunión sin sentido, con lo que las reuniones son cortos, mínimas, y deben tener un objetivo claro y conciso.

    Debido a las dos puntos anteriores Musk se implica extremadamente, y me refiero a que es capaz de martillear, o usar su transporte personal para traer materiales el mismo.

  • También busca tener el control de sus empresas. Tiene inversionistas, pero intenta postergar lo más posible la salidas a bolsa de sus empresas (sin duda, de su lección aprendida en PayPal o del mismo Steve Jobs, despedido de Apple).

  • Su control es tal que le lleva a querer ser reconocido como el impulsor absoluto y punto central de sus empresas. Esto es tal, que es común que el mismo se dirija a la prensa sin ningún tipo de filtro en sus declaraciones, creando sensaciones encontradas en su audiencia (su lenguaje es además, franco y directo, sin florituras, y generalmente con muchas groserías).

  • Por otro lado de rodea de gente de gran talento, ideas y capacidad , a la que no duda en despedir si caen de su gracia, aparentemente trabajar con Musk, es una montaña rusa, en cuanto a su favor.

  • Localizar los medios de producción cerca y si es posible también las materias primas, es decir las fabricas están en Estados Unidos, intentando crear y fomentar una económica local. Esto no solo se aplica a la fábrica de ensamblaje, si no a la creación de los mismos materiales a ensamblar.

  • Si no existe, algo lo inventa, y además lo hacen de forma barata , mientras que muchos fabricantes basan sus productos en el ensamblaje de los que sus proveedores puedan hacer, Musk tiene una idea clara de lo quiere, si no es posible, su equipo hace que sea posible. Mientras que otros CEOs se muestran razonables, en cuanto a los que es posible o no, Musk no cede en sus objetivos, ni en sus gustos personales, no busca soluciones en el mercado, sino en la inventiva de su equipo. Lo cierto es que esto hace que se desarrollen tecnologías nunca vistas que parecen sacadas del futuro. Esto me recuerda un poco a Steve Jobs, en que tenía una visión muy particular de cómo debiera verse sus productos, tal que se diseñaban primero la carcasa de sus iPhones, y después los ingenieros se debían de romper la cabeza, para ver como metían toda la potencia que quería Jobs en ese pequeño espacio.

  • Todo está conectado. Todo lo que dirige Musk, tiene un objetivo, ir a Marte, el destino final de su empresa de cohetes, SpaceX, es ese. Una vez allí necesitamos movernos con combustibles no fósiles, allí esta Tesla. Necesitamos crear energía, para eso está SolarCity. Todos sus pasos y adquisiciones van todos encaminados a ese objetivo.

Elon Musk, es una persona complicada, con muchos altibajos en su popularidad, pero realmente es el único que está haciendo una alternativa real y seria para el que hombre pueda vivir fuera de la tierra, lo cual es a veces tema de mofa, pero a cada paso que da, es algo que se antoja más realista y menos de ciencia ficción, en las próximas décadas, puede que veamos si Musk tenga razón o no.

Si estas interesado en Elon Musk, el creador de Tesla, PayPal y SpaceX que anticipa el futuro de Ashlee Vance, puedes encontrarlo en Amazon.

!Si esta entrada te ha gustado, compartela, y dale me gusta a la pagina de facebook!

sábado, 21 de abril de 2018

Acerca de lo urgente y lo importante en el desarrollo de software

Lo importante es tener detectores de humo que funcionen correctamente, lo urgente es salir corriendo de tu casa si se está quemando.

"I have two kinds of problems, the urgent and the important. The urgent are not important, and the important are never urgent.", Dwight D. Eisenhower

Matriz de Eisenhower

En nuestra profesión, el desarrollo de software, nos enfrentamos casi exclusivamente a tener que resolver dos tipos de problemas, los urgentes y los importantes.

Los problemas urgentes son aquellos que tenemos que resolver de forma inmediata para que el negocio que soporta nuestro sistema siga operativo. Si estos no se resuelven, se puede generar una situación que conlleve una grave crisis, incluyendo pérdidas materiales (o en el peor de los casos humanas), y que en última instancia nos acabe sacando del mercado, con consecuencias de diversa índole.

La resolución de temas importantes, son los que nos ayudan a que nuestros sistemas siguán vigentes en el futuros, nos ayudan a proyectarnos hacia delante, es la planeación a gran escala y a mediano y largo plazo.

En la práctica hay que saber balancear adecuadamente las tareas importantes y urgentes. Una mala gestión de lo que es importante y urgente, lleva siempre al desastre.

Es muy común, olvidarse de las tareas importantes, para ocuparnos exclusivamente de lo urgente, pero una cosa es innegable, cuando mas postergamos las tareas importantes, mas se van a convertir en urgentes (además de importantes).

Las tareas importantes son las que generan beneficios (en el negocio) de un sistema, son las que nos permite adaptarnos adecuadamente y de forma proactiva al mercado, ser innovadores y poder marca una diferencia y posición.

Las tareas urgentes son tareas enfocadas la reactividad, a reaccionar al mercado (en lugar de incidir en el), hace que tengamos que centrarnos en la "supervivencia", y no generan beneficios, son cosas que "tienen que hacerse".

Si clasificamos nuestros issues en mejoras y defectos de nuestros sistemas productivos, las mejoras serian los cambios importantes, los que generan benéficos (económicos en última instancia), es la evolución de un sistema hacia nuevos retos y horizontes, los defectos por otro lado son los elementos urgentes, lo que hacen que un sistema funcione mal. Corregir defectos no genera beneficios, sino que hace que un sistema funcione como se supone que debiera funcionar. Todo el tiempo (y dinero) invertido en corregir un error, son recursos que no se van poder recuperar y que no van a generar nada.

Otro ejemplo acerca de lo que es importante, es el ejercicio físico y cuidar nuestra alimentación, eso nos proporciona una vida sana y más placentera, hacia el futuro y a largo plazo, una enfermedad es algo urgente y que debe ser atendida, en el mejor de los casos al tratarnos recuperarnos nuestro estado inicial (antes de la enfermedad), pero nuestro cuerpo no va estar mejor (en todo caso igual), es la diferencia entre prevenir y curar. Los sistemas, son iguales, pueden considerarse elementos orgánicos (por eso hablamos del "tiempo de vida de un sistema"), en los que si invertimos en lo importante (como la arquitectura), nuestro sistema va a estar más sano, mas adaptable y menos propenso a fallos, que si nos dedicamos solo a lo urgente, el negocio. Los "urgente", será cada vez mas rápido y sencillo de atender, y podrá ser resuelto con menos recursos y esfuerzo. Al igual que en el cuerpo humano, si no atendemos lo urgente, el sistema tampoco funcionara a corto plazo, pero una vida sana, a la vez que un sistema sano, podrá hacer frente con mas capacidad a los problemas inmediatos e imprevistos.

Los temas urgentes e importante, se pueden clasificar, según la matriz de Eisenhower, en los siguientes elementos:


  • Urgente e importante: Es necesario realizarlo inmediatamente, con una supervisión cercana, disminuyendo la burocracia y aumentando las facilidades de comunicación entre los diversos miembros del equipo. Las tareas importantes no atendías a tiempo se convierten en urgentes, el negocio (sobretodo) y la arquitectura (en menor media) entran en este rublo.
  • No urgente e importante: Es necesario planearlo adecuadamente, decidir cuándo deben realizarse, antes de que se convierta en urgente. Atender un tema aquí es mucho más barato que dejar que se convierta en un problema. La arquitectura (principalmente) y el negocio (en menor medita) entra en este rubro.
  • Urgente, pero no importante: Es necesario delegarlo en la medida de lo posible, si no es posible delegarlo, hay que establecer unos tiempos, y espacios de resolución, y resolverlos adecuadamente, suele ser llamadas o correos o interrupciones. El consejo es dedicar una fracción del día en resolver esto problemas, como por ejemplo, una hora en contestar email y llamadas, y el resto de tiempo dedicarlo a la planeación (y ejecución) o los temas urgentes.
  • No es importante, ni urgente: No lo hagas, estas tareas no aportan nada, es necesario eliminarlas después de identificarlas apropiadamente .

Un mayor detalles de la matriz.


Mi organización personal de día a día, en estos asuntos, es de la siguiente forma:

Reunión general de equipo, aquí surgen los temas importantes y urgentes del día a día, lo que se tiene que resolver en el momento y lo que tiene que postergar

Segundo revisar el correo para realizar una planificación del día, es necesario comenzar a leer los correos, desde el ultimo al primero, el correo más urgente siempre es el último en ser recibido. Créeme que si tienes un correo importante que has recibido el primero, te vas a enterar por otro medio, ya sea telefónico o en persona. Los últimos correos siempre tiene la información más reciente y más importante, no hay nada más molesto y caótico que alguien que contesta un correo intermedio de una conversación.

Al leer los correos decide, en ese momento, si es urgente y atiéndelo o si es importante. si es importante ponle una fecha o delégalo, si no es importante ni urgente bórralo. A esto le dedico una hora o menos

Si tengo muchos asuntos urgentes que atender… bueno es que estoy haciendo realmente mal mi trabajo.

Después reviso mis tareas, ya sea por planeación o por un sistema de ticket, si puedo delegarlo, siempre lo delego, y siempre con una fecha.

Para una planeación correcta es necesario liberar siempre las tareas que crean dependencia con otras, es decir las tareas que hay que resolver forzosamente antes que otras. Por ejemplo al momento de crear una componente que sea una API consumible por otros, hay que definir antes la interfaz, y después implementarla. Es decir, si primero liberamos la interfaz (entiéndase no la grafica, si no la interfaz de consumo, las estructura de nuestro sistema), los consumidores de nuestra funcionalidad ya podría comenzar a desarrollar sus propios componentes, aunque nuestro componente no haga nada, es decir sean simplemente clases vacías, así es posible realizar un desarrollo en paralelo en lugar de secuencia.

Aquí se ve otro ejemplo de lo urgente y lo importante, lo urgente es la interfaz (la API, lo que define lo que hace el negocio), la implementación de dicha API (lo que realmente hace) no es urgente, es importante y puede ser resuelto mas tarde

Una vez resuelta la planeación es el momento de ponernos manos a la obra, ya hemos resuelto lo urgente, y podemos dedicarla el tiempo a los seria "trabajar", a implementar nuestro sistemas o sus mejoras, en mi caso comienzo mis labores de supervisión y verificación de código

sábado, 25 de noviembre de 2017

Recomendaciones: El libro negro del programador

Es bastante sencillo encontrar libros sobre cualquier tipo de tecnología, herramienta o lenguaje de programación, pero al momento de localizar literatura sobre desarrollo profesional (o empresarial) de software dentro de un ambiente “real” (es decir no académico), es bastante más complicado y si además, estamos hablando de materiales en español, se vuelve una tarea completamente imposible.

El libro negro del programador, de Rafael Gomez Blanes, es una obra que nos ofrece una visión práctica, profesional y realista del desarrollo de software en un ambiente laboral. El libro no profundiza en ningún aspecto tecnológico en particular, si no en las buenas y malas prácticas en la construcción de sistemas.




Al leer el libro del programador, cualquier desarrollador, con un mínimo de experiencia laboral, se sentirá identificado con los problemas tratados allí. Generalmente la parte difícil no es reconocer que hay un problema en la forma de desarrollar sistemas en nuestra empresa o equipo, eso es bastante obvio cuando se acumulan las horas extras, el software de baja calidad, y la tensión palpable en el ambiente, el acierto del libro es listar las circunstancias que nos llevan a dichos problemas. Es necesario leer sobre nuestros problemas y escenarios laborales para poder comprenderlos completamente, aunque los estemos viviendo en primera persona.

El libro hace hincapié, entre otras cosas, en los siguientes temas:

  • La importancia del refactoring y la creación de software que pueda ser mantenible.
  • La capacidad de un sistema para ser probado y depurado.
  • Que el éxito no es tener un sistema que funcione en producción, sino un sistema de calidad, que además permita evolucionar con las necesidades de nuestro cliente.
  • Que no hay que trabajar muchas horas, sino ser productivo.

Por todo esto considero que El libro Negro del Programador es un texto que todos los desarrolladores debieran tener en su escritorio, para que no les olvide como hacer buen software.

Puedes obtener más información en http://mybook.to/elndp.