jueves, 30 de agosto de 2018

Lectura recomendada: "Computer Science Distilled: Learn the Art of Solving Computational Problems". Wladston Ferreira Filho

Para todos aquellos que quieren conocer de manera no excesivamente reglada, los fundamentos de las ciencias de computación o, aquellos que hace tiempo que no refrescan conceptos técnicos, este es un libro interesante que nos adentra de una manera amena los conceptos clave para aprender como resolver problemas mediante algoritmos.

Existen muchos libros con literatura técnica reglada, obviamente que hacen una tremenda función a los profesionales y estudiantes de ingenierías informáticas, grados o módulos...el motivo de esta entrada es no debatir sobre ellos.

    
Básicamente ante la amalgama de cursos, webs y libros para aprender de manera "relativamente" fácil la creación de código mediante algoritmos, quizás una aproximación inicial "no reglada", puede hacernos ver si vemos interesante pivotar nuestra carrera para adentrarnos en el mundo de las ciencias de computación.



EL libro puede servir de consulta o leerse en su totalidad como una novela, sin demasiada dificultad en el idioma. Con  un inglés accesible y algunos emoticones, el autor profundiza en los conceptos mas interesantes de consolidar, mediante enunciados que desarrollan un problema a resolver.


El idioma no es un handicap. Para todos aquellos que estemos acostumbrados a leer en inglés (nivel medio), se entiende todo lo que nos intenta instruir el autor. Citaré cada capitulo indicando un pequeño resumen de los temas tratados.

- "Basics": En el capítulo inicial el autor da nociones básicas de lógica, enumeraciones o recuentos y nos habla de probabilidades.


- Complexity: Dentro del capítulo de complejidad, intenta enseñarnos el concepto de cómo medir la eficiencia en tiempo y recursos de memoria de un determinado algoritmo. Determinados programas pueden consumir un espacio de memoria muy grande o necesitar mucho tiempo si y sólo si, la cantidad de datos en la entrada es ingente o desmesurado.

- "Strategy": Nos instruye en cómo elegir la mejor estrategia de diseño de algoritmo para un problema particular. Argumenta las estrategias de diseño siguientes: fuerza bruta, algoritmo codicioso, divide y vencerás, programación dinámica, algoritmo de retroceso, algoritmo de ramificación y acotamiento, decrementa y vencerás, método heurístico. Todos con ejercicios de ejemplo con su correspondiente pseudo-codificación.

- "Data": Cuando los programas (algoritmos) necesitan operar con datos, generalmente usamos módulos externos (librerías) que tienen "clases" y a su vez métodos definidos en cada uno de los tipos de datos abstractos (ADT). Nos habla de colas, pilas, árboles, arrays y tablas hash.

- "Algorithms": Introduce los algoritmos que un buen programador debe estar familiarizado (listas, grafos...). Ademas muestra algoritmos de búsqueda y ordenación.

- "Databases": Habla del software específico para el tratamiento de datos almacenados en memoria externa (disco duro). Los DBMS son vitales para cualquier solución sectorial de informática. Introduce el SQL, los conceptos de indexado, transacciones y relaciones entre tablas. Además indica que para determinadas soluciones, es mejor utilizar las bases de datos no relacionales (NoSQL). Obviamente teniendo en cuenta de no duplicar información en diferentes columnas de diferentes tablas...


Menciona las bases de datos distribuidas, así como pinceladas conceptuales de las bases de datos distribuidas (replicación y compartición). También cita los formatos de serialización mas conocidos: SQL, XML, JSON y CSV. Sirven para poder hacer un backup de los datos de la base de datos o, para poder exportarlo a otro sistema (restaurando los datos serializados). 



- "Computers": Entender las velocidades de acceso en el tiempo a la  memoria RAM, como mejora el computador ese cuello de botella mediante cache L1 y L2, entender las diferencia entre lenguajes de programación interpretados por una máquina virtual en lugar de ejecutados por un traductor (compilador) directamente al hardware de la máquina (CPU, RAM y HD o SSD), son conceptos tratados en este capítulo. Habla de código máquina con ejemplos de acceso al bus de datos + bus de direcciones.

- "Programming": Básicamente en este último capítulo el autor, usando pequeños trozos de pseudo-código, nos enseña los conceptos básicos de codificación. Variables, métodos, funciones, controles de flujo, iteraciones...diciéndonos al final que tendremos las agallas para poder abordar la codificación en cualquier lenguaje de programación.



Totalmente recomendable su lectura, para poder sacar polvo de los conocimientos adquiridos en la universidad o, para saber que es lo mas importante consolidar si la estamos cursando. O para dictaminar si no es lo que os puede gustar en el caso de escoger un camino de "developer" en este mundo IT.

Existirán pasajes técnicos del libro que no serán usados de manera práctica en nuestro día a día. Sólo en el caso de formar parte de equipos de desarrollo de fabricantes conocidos, la estrategia y la estructura de los datos, serán consumidos y explotados en nuestros proyectos.

Procesos de entornos de programación empresarial (ERP), precisan de ordenadores (hardware) muy potentes. Y aún así, ciertas demandas de los usuarios pueden presentar lentitud en sus respuestas por pantalla. Es importante conocer donde podemos tener un cuello de botella en nuestros algoritmos y, intentar refinar el desarrollo de software para mejorar su rendimiento.

Remarcar también la excelsa referencia al final de cada capítulo. En el caso de necesitar ampliar conocimientos, los links indicados son muy buenos.

Buen trabajo de Wladston Ferreira. Felicidades.

La cita:

"No tengo ningún talento especial. Sólo soy apasionadamente curioso." Albert Einstein.

domingo, 10 de junio de 2018

Lectura recomendada: "Pulsa actualizar: La aventura de redescubrir el alma de Microsoft y concebir un futuro mejor para todos". Satya Nadella.

Nadella es la evolución natural del CEO perfecto. Multifuncional, disruptivo, humanista, realmente diferente. Autententico en sus pensamientos y en sus acciones. Libro de obligada lectura.

Llegar a lo más alto de la cúspide del gigante Microsoft siendo un trabajador histórico de la compañía con perfil inicialmente técnico, dice mucho de Nadella. El autor es ingeniero eléctrico, informático y administrador de empresas indio-estadounidense. Después de leer este libro, un CEO rupturista.

Personalmente siempre he pensado que podría liderar un cambio conceptual de dirección, necesario tras décadas de exitos en sus dos productos estrella: los sistemas operativos (Windows) y el paquete de herramientas para oficina (Office).

Microsoft a veces no estaba bien visto en la comunidad técnica más profunda. Las plataformas LAMP (Linux Apache MySQL PHP) eran escogidas por los desarrolladores para poder sostener la internet 2.0. La gestión de contenido y tiendas virtuales aún a día de hoy sigue siendo terreno de estas plataformas.

Es por este motivo que integrar Ubuntu con la ayuda de los chicos de Canonical, oxigenaba el Kernel de Windows.

Si además incluimos la apertura inicial del entorno de programación estándar de facto en entornos escritorio, el Visual Studio, el nuevo CEO prometía cambios conceptuales profundos en la comercialización de los productos de Microsoft.

Leyendo este libro, se entiende el porqué de la toma de esas decisiones. Los que somos padres, entendemos y comprendemos que, un progenitor quiera dar a su hijo herramientas para poder vivir mejor. Ha intentado pensar en cómo hacer que Microsoft haga productos para mejorar a las personas. Lo ha vivido en sus propias carnes. El tener un hijo con necesidades especiales cambio su manera de pensar, modelando su ideología de conectar nuevas ideas.

Y obviamente es fácil decir que un CEO actual debe ser empático, pero el consejo de dirección, los inversores, las grandes cuentas...pueden mitigar ese sentimiento en pocas horas, si no eres Nadella. No es fácil, el mismo autor del libro en el proceso de selección del nuevo CEO tras Steve Ballmer, no mostró demasiada empatía ante una pregunta en el guión del proceso...pero las personas cambian.

Actualmente se ha cerrado por parte de Microsoft, la compra de GitHub por 7500 millones de dolares. La Microsoft del pasado ha muerto. Esa Microsoft que tenia pánico al código abierto (Open Source), miedo a no monetizar "directamente" todos sus desarrollos. Miedo a perder cuota de mercado en los sistemas operativos. El cambio de estrategia le da una comunidad de mas de 23 millones de desarrolladores, de los cuales casi 2 millones colaboran con Apple, Facebook y Amazon.

Quizás en un corto plazo de tiempo podremos ver una excelente integración de Windows / Microsoft con Ruby on Rails y con el fuertemente aceptado editor de código Visual Studio Code.

En mi Kindle he subrayado tanto, que tengo 28 páginas de notas, pasajes muy interesantes de este libro. Capsulas de realidad nada aumentada.

Remarcaré los conceptos / ideas / introspecciones del autor, para mí, más destacadas.

Importante punto de vista citando a Rainer Maria Rilke, "el poeta místico austríaco, escribió una vez que «el futuro entra en nosotros, para transformarse en nosotros, mucho antes de que ocurra»". Nadella nos argumenta que "Rilke está diciendo que lo que tenemos por delante está en gran medida dentro de nosotros, determinado por el curso que cada uno de nosotros toma hoy."

El autor habla de la importancia de cursar un MBA. Nos alerta de que aprendió mas matemáticas en las clases de finanzas que en toda la carrera de ingeniería.


"Mi enfoque nunca ha sido el de hacer las cosas como siempre se han hecho, sino observar la cultura e imaginar lo que es posible. La culminación de estas experiencias nos brinda la materia prima para la transformación que estamos experimentando hoy: una serie de principios basados en la alquimia del propósito, la innovación y la empatía." Tremendas afirmaciones.

Otra frase lapidaria: «Para ser un líder en esta empresa, tu trabajo es encontrar los pétalos de rosa en un campo de mierda».

Y este repaso a la historia de Microsoft en pocas lineas: "Históricamente, Microsoft ha tenido en ocasiones sus luchas para alcanzar un equilibrio en este sentido. Nosotros teníamos una tableta antes del iPad; habíamos avanzado mucho en nuestro camino hacia un e-reader antes de Kindle. Pero en algunos casos nuestro software iba por delante de los componentes clave indispensables para el éxito, como el hardware de pantalla táctil o la conectividad de banda ancha. En otros casos, carecimos totalmente del design thinking para poder comercializar una solución completa."

Comenta en el libro que "antes de ser CEO, había decidido que necesitaríamos seguir invirtiendo, y con una intensidad y enfoque más pronunciados, en nuevas tecnologías y nuevos mercados, pero solamente si podíamos reunir satisfactoriamente nuestras tres C: ¿tenemos un concepto emocionante, contamos con las capacidades necesarias para tener éxito y con una cultura que acoja bien estas nuevas ideas y enfoques?".

Aborda con interés la computación cuántica: "La esperanza que compartimos es que la computación cuántica transformará completamente la física de la computación misma. Por supuesto, si fabricar un ordenador cuántico fuera fácil, ya se habría hecho."

Respecto a la programación cuántica: "En un algoritmo cuántico correctamente construido, el resultado es, según uno de nuestros científicos, «una gran masacre en la que se elimina la totalidad, o la mayor parte, de las respuestas incorrectas»."

De todos estos avances que seguramente vendrán en el futuro, las Station Q de Microsoft tiene actualmente distribuidas por todo el mundo, darán sus frutos en forma de productos y/o servicios dentro la compañía. "La Station Q es una creación de Michael Freedman, ganador del más alto galardón en matemáticas, la Fields Medal, en el Congreso Internacional de la International Mathematical Union de 1986, que obtuvo con treinta y seis años.", comenta Nadella en el libro.

Partes del libro mencionan decisiones de Mircrosoft obligadas por la coyuntura temporal y, por el éxito de los productos de sus contrincantes. Abandonar todo apoyo en la creación de hardware (Nokia) y software (Sistema Operativo) para dispositivos móviles. Plantearse deshacerse de la división de entretenimiento (Xbox)...y un largo etc, están explicadas en el libro.


El CEO presenta su visión mas humanista con este pensamiento: "necesitamos un compromiso más amplio, más profundo y más diverso de los pueblos en el diseño de estos sistemas. La industria de la tecnología no debe dictar los valores y las virtudes de este futuro. Ni deben estar controlados solamente por la pequeña franja de la humanidad que vive en las regiones ricas y políticamente poderosas de Norteamérica, Europa occidental y el este de Asia. Gentes de todas las culturas deben tener la oportunidad de participar en la constitución de los valores y propósitos inherentes en el diseño de IA. La Inteligencia Artificial debe protegernos contra prejuicios sociales y culturales, asegurando una investigación apropiada y representativa, de modo que no tengamos la heurística defectuosa que perpetúe la discriminación, deliberada o inadvertidamente." Algunos pensadores incluirían en estas palabras que el futuro de la humanidad pasa por crear tecnología un paso por detrás del homo-ethicus. Nunca por delante. El autor propone añadir una puerta atrás en todos los sistemas IA creados, para "poder deshacer un daño imprevisto".

Potenciando Azure, apostando por la realidad mixta, por la inteligencia artificial y por la computación cuántica, Microsoft se asegura un puesto en el escenario como actor principal. Gran parte de ese éxito viene de quien se ha preguntado todo: desde las decisiones que se toman en cada despacho, en las salas de ventas y marketing, en los espacios diáfanos de desarrolladores, en los laboratorios de investigación, permitiendo pivotar las ideas de los propios trabajadores internos.

Nadella esta posicionando y manteniendo a Microsoft en lo más alto, como antaño hicieron Paul Allen y Bill Gates.

La cita:

“Con un ecosistema que se expanda de las consolas al PC y dispositivos móviles, el cambio del hardware clásico a un modelo de suscripción y un futuro que incluye streamings, retransmisiones y realidad mixta, vemos a Microsoft bien posicionada en el futuro de los videojuegos”. Fuente: analistas de Wall Street.