Week 2018-W47 in reading

2018-11-24 22:55:00 +0100

I’ve been quite busy this week, so the list is very short. I’ve been mostly reading Dave Snowden’s Christmas blogs (from 2017) about anthro-complexity, as he named the inherent complexity of human populations. Although it doesn’t relate to what I do at work, I find his writing thought-provoking.

A side-note: you might have heard of Dave Snowden as the creator of the Cynefin framework.

For the past few days I’ve been reading bits of “The Architecture of Open-Source Applications” chapter about Bash, but now on my company’s ebook reader as I’ve asked them to order that book. The license is very nice: not only is this book available under CC-BY 3.0 (Unported) – they also donate all royalties to Amnesty International!

Zostań swoim własnym zewnętrznym konsultantem

2018-11-21 07:00:00 +0100

Poniższy wpis został również opublikowany na blogu analizait.pl.


We wszystkich profesjach spotykamy się na co dzień z różnymi problemami, a żeby rozwiązywać te problemy skutecznie, musimy umiejętnie korzystać z najpotężniejszego narzędzia, w jakie każdy z nas jest wyposażony: umysłu. Jedną ze szczególnie przydatnych umiejętności jest tzw. myślenie lateralne, tłumaczone czasem na język polski jako “myślenie w bok”, czyli takie podejście do znajdowania rozwiązań problemów, w którym pomija się najbardziej oczywiste rozwiązanie i za cel stawia się znalezienie nowego, bardziej odpowiedniego.

Podczas analizy i modelowania systemów, myślenie lateralne sprawdzi się szczególnie dobrze wówczas, gdy znamy już potrzeby klienta i trzeba przekuć je na wymagania. Jeśli potraktujemy oczekiwania klienta względem systemu wprost jako wymagania, które system musi spełnić, możemy zamknąć sobie drogę do opracowania systemu lepiej wspierającego klienta w jego działalności, na który nasz klient z powodu mocnego ukorzenienia w swojej branży mógł nie wpaść.

Termin myślenie lateralne ukuł w swojej pracy “The Use of Lateral Thinking” Edward de Bono, włoski lekarz i psycholog (znany również jako autor “Sześciu myślowych kapeluszy”). Określenie “lateralne” ma w tym kontekście odróżniać sposób rozumowania od myślenia wertykalnego, czyli przemieszczającego nas w głąb, coraz bliżej ku zrozumieniu problemu i jego rozwiązaniu. Nie bez znaczenia jest kierunkowość tego określenia, ponieważ jest ona również charakterystyczną cechą myślenia wertykalnego, w którym niejako zmierzamy do wyznaczonego celu. Celem myślenia lateralnego jest natomiast znalezienie nowego pomysłu a - jak stwierdził sam Edward de Bono - nie da się wykopać nowej dziury drążąc coraz głębiej tę, w której już jesteśmy.

Według de Bono reguły, którymi rządzi się myślenie lateralne, można zebrać w kilku grupach, których sens sprowadza się do:

  1. zidentyfikowania dominującego pomysłu;
  2. poszukiwania alternatywnych perspektyw;
  3. rozluźnienia surowej kontroli naturalnego dla nas myślenia wertykalnego;
  4. aktywne wykorzystanie przypadku.

Dzięki dobremu zrozumieniu mechanizmów działania ludzkiego umysłu, de Bono daje kilka bardzo wartościowych wskazówek. Przykładowo: ludzie mają skłonność do podążania ścieżką największego prawdopodobieństwa. Innymi słowy łatwo fiksujemy się na pewnych konkretnych pomysłach i od tego momentu trudno nam wyjść poza ich ramy. (Stąd powszechne przekonanie, że warto skonsultować problem z dwoma lekarzami - ponieważ ten, który problem poznał jako pierwszy, może przez swoje pierwsze skojarzenie nie dostrzec dowodów na to, że nie było ono trafne.)

Dlatego spory nacisk kładzie de Bono na ten problem: rozpoznanie dominującej idei a następnie oddalenie się od niej. W końcu w myśleniu lateralnym nie ma jednego właściwego kierunku, więc warto zostawić ów dominujący pomysł choć na chwilę aby poznać inne możliwości. Między innymi proponuje kilka technik, które mogą w tym pomóc:

  • Rozłożenie problemu na czynniki pierwsze a następnie połączenie składowych w inny sposób.
  • Odnalezienie analogicznego problemu w innej dziedzinie a następnie przeniesienie pomysłów do dziedziny naszego problemu.
  • Unikanie nazywania rzeczy, gdyż nazwy nadają pojęciom sztywne ramy, podczas gdy w znalezieniu nowego pomysłu potrzebne jest otwarcie się na nowe możliwości.

Wszystko to może brzmieć bardzo abstrakcyjnie, więc warto zastanowić się nad praktycznymi korzyściami poszukiwania alternatywnych perspektyw.

Przede wszystkim, najkrótsza lub najbardziej oczywista droga do celu nie zawsze jest najbardziej odpowiednia w danym momencie. Kiedy nie możemy sobie pozwolić na porażkę ale dopuszczamy spędzenie dodatkowego czasu na poszukiwanie alternatyw, myślenie lateralne pomoże nam znaleźć warianty, z których następnie wybierzemy ten najbardziej odpowiedni w danej sytuacji. Przystępując do realizacji naszego pierwszego pomysłu nie mielibyśmy szansy na porównanie go a zatem na dobrą ocenę jego przydatności.

Jeśli pracujemy nad jakimś zagadnieniem dostatecznie długo, dominujący pomysł zaczyna się wydawać jedynym możliwym. W takich sytuacjach czasem zatrudnia się zewnętrznego konsultanta, żeby ten ze swoim “świeżym spojrzeniem” pomógł dostrzec to, czego nasz zespół dostrzec nie może. Zastosowanie technik proponowanych przez de Bono może zastąpić wsparcie konsultanta przynajmniej w niektórych przypadkach.

Przykładem z mojej własnej pracy może być problem, z którym zetknąłem się niedawno: zgłoszono potrzebę zmiany pewnej aplikacji, o której cały zespół programistów wie, że jest bardzo skomplikowana i przydałby się solidny refaktoring. Zacząłem więc przyglądać się specyfikacji i implementacji, dochodząc w końcu do wniosku że obie są skomplikowane, jednak przystają do siebie. Dlatego zaproponowałem zaniechanie refaktoringu, zamiast którego zasugerowałem:

  1. lepszą dokumentację kodu źródłowego;
  2. poprawienie nazewnictwa w implementacji aby lepiej odzwierciedlało realizowaną logikę biznesową;
  3. minimalny refaktoring polegający na redukcji zbędnych bytów.

Książka de Bono zawiera liczne przykłady owocnego zastosowania myślenia lateralnego a przy tym jest na tyle zwięzła, że pozwolę sobie nie przytaczać ich tutaj, zachęcając zamiast tego do lektury.

Na zakończenie chciałbym zaznaczyć, że myślenie lateralne nie jest kamieniem filozoficznym. Czasem potrzebna jest po prostu ciężka praca o jasno określonym kierunku i poszukiwanie alternatyw mogłoby w najlepszym przypadku oznaczać stratę czasu a w najgorszym porażkę. Warto jednak włączyć je do swoich narzędzi, ponieważ zwiększa nasze szanse na sukces w podejmowanych przedsięwzięciach.

Week 2018-W46 in reading

2018-11-17 21:05:00 +0100

This week’s list is rather short as I’ve been mostly skimming through short answers to simple questions about Clojure or Scala which I’m re-learning at the moment.

  • An article about Growing a DSL with Clojure.
  • Documentation of the clj-pdf package. I’ve already used it to generate wedding schedules when I was getting married but I needed to refresh it since I’m working on a concept of a Clojure-generated document at the moment.
  • I’ve also come across the Logic-Starter project which is a simple introduction to logic programming with core.logic Clojure package. Its wiki contains some interesting example applications. core.logic itself seems to be very interesting.

I’m collecting links to articles explaining how Google and other huge companies make privacy harder. Google and Amazon disabled domain-fronting some time ago. There’s also a good wrap-up of the large players’ practices: The price of free.

I’m also interested in ethics, so this title caught my attention: Is curing patients a sustainable business model?.

I also enjoyed re-reading existentialism at the beach.

Week 2018-W45 in reading

2018-11-10 15:35:00 +0100

Privacy, security

Inspired by Wolf480pl’s post, I’ve started searching for some more information. I’ve read So you want to build a Javascript based network scanner and decided that it was a very good idea to install NoScript Security Suite… There’s also an interesting discussion on reddit.

As I’m preparing to write a longer post on privacy, I’ve started collecting info about that. The article on PC World is particularly well written and informative.

Books

A friend of mine wrote a review of the book “Surrounded by Idiots” by Thomas Erikson. Apparently it’s worth reading if you work with other people…

Architecture

I’ve been involved in a prestudy for a certain project. Among other things, I’ve stumbled upon SEDA. It reminded me of the approach used by LMAX Disruptor, but with queues connecting processing agents instead of all of them sharing the same circular queue (as in disruptor).

I’ve also read the chapter on Audacity in the The Architecture of Open-Source Applications. Its explanations of the technical details (like file organisation), UX aspects and software lifecycle are definitely worth reading.

The Use of Lateral Thinking

2018-10-25 22:05:00 +0200

Two or three weeks ago something reminded me of the Oblique Strategies card deck that Brian Eno and Peter Schmidt created. Reading its Wikipedia page I’ve spotted a reference to lateral thinking, which was new to me and I thought I’d look that up as well. Eventually it turned out that lateral thinking is quite a new concept and has been coined in the 1960’s by Edward de Bono. I’ve ordered a used copy of his book and started reading a few days ago – this is my overview (or review) of the book.

First of all, this book is very well written. It’s thorough yet easy to understand, which I think is quite rare nowadays. It is also very short (140 pages, pocket-sized), which is very encouraging – it took me about a week to read it and I did not have much time recently.

My key takeaways from this book are:

  • Awareness of the different approaches to problem solving.
  • Understanding of the differences between “vertical” and “lateral” thinking and when each of them is applicable.
  • A bunch of techniques to be used when approaching problems. Among them there are:
    • identification of the dominant idea / approach,
    • searching for inspiration outside of the problem domain,
    • playing around with things.
  • Understanding of how patterns and relations between them lead to their compositions being complex.

The last point is quite interesting because it’s more related to human perception and complexity, not to lateral thinking itself. It boils down to the following observation:

  1. When we explain (or reason about, or design) a complex concept, we can break it into several smaller pieces that are easier to understand.
  2. If the pieces are too simple, relations between them will probably be quite complex. When those pieces are complex, relations between them will be less complex.

This and the fact that lateral thinking is the opposite of being fixed on a single approach, reminded me of the DDD book by Eric Evans, where he states that the ubiquitous language should not be frozen: it should develop in parallel to the model and the software. It is obviously a good fit, since polishing our understanding of the domain of our software sometimes requires looking at things from different angles.

I have already started using some of the techniques mentioned in this book and I’m very fond of these new tools. I think I’ll be practicing more in the nearest future to develop my “lateral muscles”.

This is the second book about thinking I have read this year and I think both of them should be mandatory reading for everybody as they help us use the most powerful tool each of us has got: our minds.