Design Patterns

Reading technical books on the field in which I have concluded my formal education for more than 15 years ago has turned out to be a super interesting exercise. It brings the possibility of learning new things, while allowing me to reflect on my own professional experience on real-life projects. The most recent of those readings is the book Design Patterns (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, 416 pages).

What’s so interesting about this book is that it is a classic, and to some extent its content is almost commonplace between experienced programmers. I found myself before using multiple times many of the design patterns described in the book. However, the experience of reading the book from cover to cover is still extremely useful, I would say even for experienced engineers.

The idea of documenting design patterns, as the authors say, was inspired by something done on the Architectural field of knowledge, which saw similar descriptions for the design of doors, windows, buildings, etc. As much of innovation otherwise, the idea of applying the same approach to object oriented design turned out to be extremely well succeeded.

There is in general a great benefit in, first of all, learning from some of the best design approaches, which more often than not are result of multiple attempts and refactoring rounds. This is the type of distilled knowledge that can lift younger engineers to the a level of understanding that could otherwise require years of experience to achieve.

In addition, the vocabulary and concepts introduced and popularized by this seminal book brought up a common language that allows engineers to discuss design approaches on a dimension that can go on in parallel with the application domain of knowledge. That is a powerful way of designing better applications, across the board.

Despite having being originally published almost 30 years ago, it is easy to spot how important the concepts introduced by this the book still are for today’s software development practices. An evidence of its relevance is the fact that several of the patterns have made their way into modern programming languages and some of their basic data types. For example, events (Observer), enumerators (Iterator), and command interfaces (Command) are at the fingertips of those using a modern language like C#, in the .NET world, which was first launched in the beginning of the 2000’s, and therefore many years after the first release of the book that came out in 1994.

To conclude, reading and re-reading this book is highly recommendable to anyone interested in refreshing or deepening his or her skills on and possibilities as a object-oriented systems designer.



I concluded today Sapiens – A Brief History of Humankind (Yuval Noah Harari, 2015, 464 pages).

This is for sure one of the most thought-provoking books I have ever read.

The breadth and depth of topics covered is staggering. It goes through millions of years, and evolution theory and history, to chemistry, biology, religion, epistemology, economy, philosophy, etc. All together. All with a common thread and meaningful context. 
Absolutely impressive. 
Of course, the book is very ambitions, starting from the title. But it does deliver on it! 
And the language style used could hardly be any better. Not superior, not banal. I think it just suits the tone and the approach by the author. 
If there is one critical aspect about it, though, it is due to the very fact that too many scientific fields are covered. Yuval is definitely gifted, and seems to have absolutely control over most topics. At the same time, and I think he himself would agree, he is not an expert in many of these fields. Which may have caused some interpretation errors here and there, and which we, as readers, may also fall into, alongside with the author. 
I noticed it, for example, in one of the final chapters when he talks about software virus, in an analogy with real virus, including their potential to mutation, when transferring from one machine to the next. As a computer scientist myself, I understand this scenario as very little likely. If possible at all. 
Nevertheless, I think these situations do not take the huge value the book brings. It definitely bears all signs of good science, in a breathtaking and well succeeded account for us human beings and our history.


Shoe Dog

I just finished reading Shoe Dog (Phil Knight, 2016, 386 pages). What an incredible story!

Phil Knight, founder of Nike, tells in a memoir style how the company came to be. A billionaire, creator of a brand that is iconic worldwide. One could expect him to write a book with a grander description of a flawless execution on a visionary project of world domination. But, no.

The story is a very honest, humble description of a project that started by creating a company to import shoes from Japan. A dream business idea for university time, which turned a man with great academic credentials into a shoe seller. But a rather anxious one, since his Japanese suppliers seemed eventually to not appreciate its reseller, despite amazing sales numbers.

Then, and just then, Phil turns into registering a new brand (called Nike on a very last-minute decision), and rolling out a plan to produce and sell its own shoes line.

What is not less amazing is the amount of times that the company almost went bankrupt, due to strenuous capital requirements. Since the project was financially bootstrapped. In a time where venture capital was in its infancy.

Another highlight is how Phil, seemingly by chance, ends up putting together a management team composed of misfits. Brilliant people. Outsiders. And they keep their identity and authenticity all the way. Actually, they manage to make that one of Nike’s strength.

As a memoir, the book is amazingly well-written and totally worth reading. Add the entrepreneurship aspect of it, and all the historical and geographical references, and it becomes irresistible.

I can just highly recommend anyone who considers giving this book a try.


Beginners vs. Experts



Web Scalability for Startup Engineers

I just finished reading Web Scalability for Startup Engineers (Artur Ejsmont, McGraw-Hill Education, 2015, 396 pages). And this is an incredibly good book!

Despite what the title might suggest, this book has something to add for any kind of engineer working on modern software solutions. Even those that, like me at the moment, do not work on a Web application. The truth is that we all have to think scalability on at least one of these several domains: size of data, application performance, monitoring capabilities, amount of features, deployment channels, team and company size, etc.

And this book contains scalability insights on all those fields, and more. It starts with the basics of good software design principles, to then deepen into front-end and back-end scalability techniques, to data storage scalability, to several other aspects related to it. Searching for data being one interesting additional discussion here, for example.

The fact that the book combines good sources, relevant personal experiences from the author, and great diagrams and illustrations, only adds up to making the reading experience worthwhile.

At the end, it also introduces an interesting discussion about one self’s management in terms of personal efficiency growth.

So I can only conclude by saying that I strongly recommend this book for anyone working with modern software systems.


The Power of Habit

I just finished the book The Power of Habit (Charles Duhigg, 2013, 400 pages), and I quite liked the experience. Okay, this is probably a book that could be shorter, or one in which some of the stories could be suppressed without compromising the main message. Still, it was a pleasant book, with different layers of argumentation over some simple concepts.

Basically, habits start with a trigger, follow some clues, and give a reward by the end. And they can be good or bad.

Now, the main message of the book is that we can control habits, basically by replacing good for bad habits. Following the same structure, but adjusting the pattern to craft some better habitual practices.

That said, the book goes about telling a variety of stories that illustrate the topic. From individuals, to companies, to societies. All obey by the habits rules, the book goes. And all can benefit from habits reformulation.

Overall, it is not an unforgettable book. And the number of insights is limited. Especially when put in contrast to the book size. But it was a very pleasant journey for me, and it gave me some food for thought.

So, if you are into these types of topics, I do recommend the book.


A Ucrânia é diferente

Nunca na história dois países democráticos entraram em guerra direta um contra o outro, diz uma máxima diplomática. A situação da Ucrânia no momento confirma a regra, ainda que evoque eventos passados, nos quais países ocidentais invadiram ditaduras do Oriente Médio. Mas a Ucrânia é diferente.

Quem viveu o 11 de Setembro de 2001, nunca vai esquecer. Aviões cirurgicamente sequestrados e atirados contra simbólicos sites americanos, deixando mais de 3000 mortos em poucas horas. A grande maioria chorou com os americanos, ainda que o sentimento antiamericanista fosse forte em vários cantos do mundo. Quando a poeira abaixou, o apoio à nação golpeada era praticamente irrestrito, num cenário onde havia clara expectativa de uma resposta militar contra países que circunstancialmente serviram de base para o planejamento e treinamento daqueles que perpetraram os atentados.

Sim, desculpas e mentiras foram usadas de pretexto no momento da invasão de Iraque e Afeganistão. E, sim, forças militares muito superiores às locais foram empregadas. A justificativa moral de fundo, no entanto, baseava-se na memória coletiva do 11 de Setembro.

Na Ucrânia, em 2022, não há justificativa moral. Apenas motivos torpes.

Não que se deva rechaçar de todo um fundo de ansiedade em termos de segurança, da elite moscovita e de Vladimir Putin. Mas a história recente russa deve ser levada em consideração.

Putin iniciou para valer sua carreira como líder russo no final dos anos 90, quando levou o país a uma vitória impiedosa na Guerra da Tchetchênia. De lá para cá, se tornou um ditador clássico. E, como dito recentemente por Biden, a operação na Ucrânia é só mais uma edição do playbook, ou modus-operandi clássico de Putin. O mesmo usado na Georgia, em 2008, e na Criméia, em 2014. Com o agravante de que o exército russo se modernizou intensamente na última década, e ganhou experiência em combates na Síria, Bielorrússia, Cazaquistão, etc. Em nenhuma ocasião movido por valores superiores, de paz, etc. O interesse geopolítico russo foi o guia maior em todas as ações. Independente de custos humanos.

Mas, se o mesmo já foi feito antes, por que a Ucrânia é realmente diferente?

Porque Putin nesta segunda-feira dia 21/02 desnudou abertamente suas intenções e visão de mundo. Tudo o que já sabíamos, mas que sempre era negado publicamente por ele, ficou visível na sua longa hora de fala à nação russa. A agressividade e o descaso pela vida e valores alheios foram escancarados. A Ucrânia, repetiu ele várias vezes, é um Estado fracassado, governado por neo-nazistas, que não tem tradição democrática ocidental. E, assim como vários outros estados emancipados da antiga União Soviética, não tem direito de existir independentemente da Rússia.

Quem viu o discurso pôde concluir rapidamente que nunca houve interesse real em negociar diplomaticamente antes da invasão, certeiramente prevista pelos serviços de inteligência ocidental. E meticulosamente executada desde Abril de 2021. O que Putin deixou claro é a disposição de usar força para restabelecer uma ordem regional e global de décadas atrás, quando ele assistiu impotente à queda do Império Soviético. Acontece que Impérios modernos são tipicamente construídos pela força da economia e da tecnologia, e não pelo calibre de tanques de guerra.

A Ucrânia é portanto diferente porque coloca as cartas da ambição imperialista russa na mesa. Às claras. Um país corrupto e patriarcal. Sem liberdade de imprensa e iniciativa. Com desigualdades estruturais internas longe da ordem do dia. Onde guerras pregressas foram usadas para desviar a atenção do público. E que agora busca guerra num vizinho onde os pró-russos não passam de 15% da população. E onde, portanto, é impossível ganhar corações e mentes.

Ademais, a Ucrânia é diferente porque Putin não se dará satisfeito só com a Ucrânia. E a Europa e os Estados Unidos não vão aceitar mais do que a Ucrânia.

As cartas estão portanto lançadas, por forças formidáveis, antagônicas, e visões de mundo irreconciliáveis. Com a diferença de que ambos os lados têm arsenal suficiente para promover um inverno atômico que pode por fim à espécie humana nesse planeta.


Code Complete, Second Edition

I recently finished reading Code Complete, Second Edition (Steve McConnell, 2004, 914 pages). And this was a fantastic experience.

This is a book I first got back in 2010, and I used it for reference a couple times since then. Last year, however, I decide to start reading it completely again, since I thought it could help me at work, in both software development (or software construction, as the book says), and also with organizational aspects around people and products.

The book is long, but it contains a huge amount of high-quality pieces of information and insights. And, the best of all, it is very solidly based on previous books and scientific papers, which turns it into some sort of literature review as well. But in an accessible and pleasant language, which is even better!

The topics covered goes from overview of where a software product is on the “technology wave”, to programming languages, high level architecture, to solution design, to software construction complete overview, to testing, to quality in general, to people and teams, etc.

Although there has been many developments since this version of the book was first published, it is surprising to see how much of the central questions and dilemmas in software development still remain surprisingly similar to what it was one or even two decades ago.

Of course, as the book also says, 10 years in Computer Science is enough to lay one or more abstraction layers on top of existing technologies, which makes some of older challenges disappear from our eyes. Out of sight, out of mind. For example, the book spends some pages discussing styling and formatting alternatives and their pros and cons. Even if this is still relevant today, I would argue that built-in formatting styles on most of the modern IDEs (Integrated Development Environments) make this less of an issue than it probably was before. Another example is the concept of goto, which the book also discusses, but which is something I personally have never met in my now 15+ years' career in and around software products.

To conclude, this book has lots of great insights, many of which made me reflect over my own experience, and it certainly has changed some of my perceptions and work practices. Even if not completely up-to-date, in some few areas, I would definitely recommend it as a great journey to learn, reflect and discover more about this fascinating field of computer programming.


Omgitt av idioter

 Jeg hørte ferdig boken Omgitt av Idioter (Thomas Erikson, 6:27 timer lang, lest av Jon Arne Arnseth). Og den er en bok som jeg ikke kan anbefale.

Først må jeg si at jeg ble nysgjerrige på den boken allerede for noen år siden. Den gjør en god jobb av å skape interesse med tittelen og forsiden. Og grunnen må være at menneskes oppførsel, våres egne og den fra andre rundt oss, er noe som skaper engasjement, selv om det er så litt diskutert ellers. Dette gjør at denne boken skiller seg ut.

Men temaer den tar opp er ikke noe nytt. Det handler om de klassiske 4 typer temperamenter introdusert av Hypokkrates, lenge før Jesus, som jeg hadde hørt og lest om som tenåringen en gang (sangvinsk, kolerisk, melankolsk og flegmatisk). Etter det har jeg blitt eksponert, vannligvis i jobb eller studie sammenheng av en del mere moderne og solide temperament og personlighets tester og teorier.

Og her begynner problemet mitt med boken. Forfatteren tar denne enkel modellen altfor alvorlig, og ser ut som virkelig tror at den kan forklare nesten alt om oss. I tillegg, så presenterer han ingen vitenskapelig studie som kan støtte modellen. Resultat er en bok som kan virke spennende, fordi den snakker om ting vi opplever hverdag i forhold til våres egne og andres temperamenter, men samtidig inneholder massevis av påstander som ikke kan tåle dagens lys i en mer seriøs statistisk studie.

For realiteten er, selv om forfatteren skulle sikkert argumentere imot, at vi alle har en liten del av alle disse temperamenter i oss, i forskjellige grader.

Jeg selv har opplevd mange dager å våkne opp rød (målbevisst, lett irritert, målbevisst, slurvete med detaljer). Jeg må det for å hjelpe meg og helle gjeng i gang med morgensrutine, fram til at vi alle sitter for å spise frokost sammen. Da kan jeg fort bli gul (glad og engasjert, snakke om flere ting, kanskje altfor mye, ta opp nye temaer om ting jeg leste eller tenkte på, vise kreativitet). Og deretter grønn (hjelpe meg og barna med å rydde ting, kle på oss, tenke på andres behov og gjøre flere oppgaver som jeg ikke er spesielt glad i, men som gjør at vi ikke glemmer noe på vei til jobb og skole, etc.). Og fort blir jeg blå når jeg først er på jobben (analytisk, kritisk til mine egne og  andres ideer, i forhold til design og implementering av prosjekter og produkter vi driver med). Og alle fargene kan vise seg igjen, på godt og vondt, når jeg er tilbake hjemme på slutten av dagen.

Og det ikke bare meg som kan ha det sånn mange dager. Andre gjør det også. Det kommer an på situasjoner og behov vi har. Og her er en konkret grunn på at boken ikke tåler en uavhengig gransking. Forfatteren skrev at ingen har 4 farger, ifølge hans modellen. Men bare jeg som person kan motbevise helle teorien hans.

Forfatteren kanskje mangler vitenskapelig utdannelse, ville jeg tro. Fordi om man har det, så lærer man fort at ikke går an å generalisere fra enkelte hendelser/individer. Selv om man tror at man fant 100 eller 1000 personer, la oss si, som matcher akkurat på det han mener en farge er, kan det ikke heller generaliseres for de andre milliarder mennesker i verden, uten at en rigorøs statistisk eksperiment kan vise signifikante korrelasjoner. Én kan alltid gjøre eksplorative studier, som eksponerer nye hypoteser, men da må presiseres at konklusjonene ikke kan generaliseres.

Alle oss er likeverdige, og ikke alle skal ha vitenskapelig utdannelse. Men om man skal først skrive en bok som andre ufaglærte kan ta opp som sannheten, så må man vise fram vitenskapelig bevis i form av artikler og kilder som støtter påstandene. Ellers kan man villede audiensen. For eksempel, med å tro at man bare har i seg 1 eller maks 3 temperamenter, og at man ikke kan endre seg, og heller ikke klarer å konsistent ta inn oppførsel og temperamentstrekk som er stikk motsatt av de som er dominerende.

Jeg er en ingeniør. Og for å bli en ingeniør må man trene seg i å være blå. Kritisk, detaljorienterte, kresne på informasjon, resonering og beregninger som kan inneholde feil. Og ingen ingeniør skole i verden, så lenge jeg vet, vil utelukke en student på grunn av sin opprinnelig temperament. Alle fargene kommer inn, og mange blå-trente kommer ut. Hvert år. Overalt i verden. Og det å bli en ingeniør sikkert preger synet på mange områder i livet, men kan heller ikke fullstendig erstatte oppførsel man har i seg fra før av. Det vil si, man blir mer blå, men uten å miste andre fargene man hadde fra før av.

Uansett, dette er allerede en lang tekst, og du skjønner poenget mitt, om det er faktisk noen der ute som skal en dag lese dette innlegget. Men om du er der, kan du kanskje spørre deg hvorfor blir jeg så irritert av boken. Dette kan ikke vel være noe så skadelig? Man kan reflektere gode tanker på mye av det som står i boken?

Ja, sikkert at noen kan få utbytte av lesningen. Men det som kanskje irriterer meg mest her er at jeg ser felles trekk mellom dette og problematikken rundt konspirasjonsteorier, som er en viktig nåtidens problem. Det som er felles er at man blander en del riktige observasjoner med mange oppdiktete halv-sannheter, og pakker det som en selvforsynt teori som ikke er åpnet mot kritikken av omverden. Og selvfølgelig kan ikke teorien bevises vitenskapelig. All kritikk er tatt i mot med argumenter hentet fra selveste teorien. Derfor har de som er dratt inn vanskelighet med å akseptere at de tar feil. Dette er et stort samfunnsproblemet, med virkelige dårlig konsekvens for oss alle.

Det betyr ikke at boken handler om konspirasjonsteorien. Det gjør den ikke. Og den har i og for seg noen fine ideer. Men den inneholder også mange andre som er åpenbare feil, mens boken ikke står skrevet i en format som er åpen til begrensninger av selveste teorien/modellen som er servert, selv om forfatteren forsiktig prøver på noe sånt i enkelte avsnitter.

For å konkludere, så mener jeg at boken er, kort sagt, uvitenskapelig og basert på gammel ideer, som er ufullstendige for å beskrive menneskesoppførsel. Samtidig tar den ikke seriøst nok oppgave med å beskrive teorien sin som en begrenset innsamling av ideer og praksis. Tvert imot. Og dette kan føre til uheldige konsekvenser for enkelte individer som kan tro bokstavelig talt på alt som står skrevet.



Kongeriket - Jo Nesbø

 Jeg er nylig ferdig med å høre på Kongeriket lydbok (Jo Nesbø, lest av Thorbjørn Harr, 17 timer og 34 minutter lang).

Jeg må først si at jeg er en stor fan av Jo Nesbø. For meg, er han en geni. Men akkurat denne boken, altså, er jeg usikker på om jeg ville anbefale.

Og det er synd, for det er mange gode elementer i historien, og mange av de kvalitetstrekkene som en stor forfatter som Nesbø kan by på.

Samtidig, mangler det noe. Kanskje overordnet mangler boken at kvalitetsnivå blir opprettholdt på tvers av alle elementene, karakterene og deres tanker og handlinger. For enkelt deler av boken er rett og slett ikke sofistikert nok.

Det som er strålende er ambisjonen i prosjektet, som tar over mange forskjellige temaer. Norsk bygda og sin kultur, krim, seksuell misbruk, homoseksualitet, etc. Ikke minst entreprenørskap, som er en hjertesak for meg.

Mens andre deler presenterer ikke den samme nivå av research og detaljer, som man skulle forventa ligget der. For eksempel, en viktig karater i boka kommer fra utlandet. Men måte som hun snakker norsk på er urealistisk, rett og slett. Kanskje ikke merkbar for noen som ikke har så mye kontakt med utenlandske folk som behersker godt nok norsk. Men, realistisk er det ikke.

Og det kan jeg si for jeg er en av dem, og har kjennskap til mange andre som meg. Poenget er at vi kan bli veldig gode, men vi blir ikke dårlig på måte som karakteren i boken blir. Hun har det i utgangspunkt nesten perfekt, med stor forståelse for vitser, ironi, kan mange uvanlige uttrykk, sjeldent brukt ordforrådet og sånt. Vanskelige greier, rett og slett. Men i gjengjeld så har hun så markant aksent (problemet kan også delvis være på lesning av hennes uttalelser, selv om ellers gjør Thorbjørn Harr en fantastisk jobb) og gjør feil på andre enkelte ord og konstruksjoner. Sånn skjer ikke. Om man blir bedre på språket, blir alt bedre. Det er som tidevann. Når den går opp, går alt sammen opp.

I tillegg til det, så kommer noen irritasjonspunkt på en del andre karakterer også. Der viser noen stor intelligens demonstrert på enkelte diskusjoner og verdenssynsdeling, samtidig som de viser igjen så feil holdninger i andre tanke områder. Igjen, dette er litteratur og kunst, men det sitter igjen for meg en ettersmak av at noen ikke helt stemmer. Kanskje manglet prosjektet en del ekstra runder med finpussing for å komme litt over troverdighetsgrense med noen av karakterene?

Boken går også sakte. Altfor sakte noen gang. Og har ikke disse skarp kursforandringer og utrolige høydepunkter som jeg forventer av en Jo Nesbøs.

Men, igjen. Jeg synes at Jo Nesbø er en geni i verdensklasse. Boken forandrer ikke den meningen. Men om du har andre alternativer i bokliste, så kanskje er det ikke akkurat Kongeriket du bør lese først.