“Ivan il Matto”…

Confesso: “Caccia ad Ottobre Rosso” è uno dei miei film preferiti, tanto per la trama, quanto per la recitazione e per i dialoghi.

Fra tutte le frasi, una in particolare mi continua spesso a tornare in mente ed è questa, pronunciata dall’addetto ai sonar Jones mentre il “suo” sottomarino americano, il Dallas, sta inseguendo l’Ottobre Rosso (da qui):

I capitani russi a volte virano improvvisamente per vedere se c’è qualcuno che li segue, lo chiamiamo “Ivan il Matto“. L’unica cosa da fare è spegnere tutto ed aspettare.

Una “strategia” fra l’altro reale ed impiegata con successo. Da Wikipedia:

The baffles is the area in the water directly behind a submarine or ship through which a hull-mounted sonar cannot hear. This blind spot is caused by the need to insulate a sonar, commonly mounted near the bow, from the noise of the vessel’s machinery.

Following a vessel by hiding in its baffles was a common submarine surveillance technique during the Cold War, which led to the tactics of “clearing the baffles”. Variants of this technique include the “Crazy Ivan”, a baffle-clearing manoeuvre intended to bring the followed submarine onto an attack heading and typically used by the Soviet Navy, and “Angles and Dangles”, a five-hour process of rapid direction and speed changes to ensure a submarine was not emitting any noise. Following a vessel in its baffles was dangerous, because of the high risk of collision.

Quella frase

Quello che mi colpisce di quella frase nel film è la prima parte, non tanto la seconda.

È il cambio rapido di direzione che sconvolge i piani degli inseguitori. È lo spunto apparentemente casuale per chi osserva ma in realtà voluto e tentato che talvolta salva capra e cavoli. È quella manovra apparentemente azzardata o senza-senso che può risolvere un problema.

Può essere una soluzione mai tentata prima d’ora così pure una soluzione apparantemente inutile e scartabile a priori che però, se applicata, può avere effetti inaspettati.

Sicuramente vi sarà capitato di compiere qualcosa di “folle“, tentare un “colpo gobbo“, magari senza un perchè preciso, ma che in qualche modo, intuitivamente, sapevate che era la scelta giusta, anche se nessuno vi ha creduto o vi ha perfino ostacolato.

Questo è Ivan il Matto: qualcosa di apparentemente folle, illogico, inaspettato ma potenzialmente giusto, imprevedibile e per questo temibile.

Applicato al mondo in cui opero, ossia l’informatica, individuo due casi in cui vale la pena tentare un simile colpo: per necessità e per ispirazione.

Per necessità

Quando tutte le soluzioni “standard” hanno avuto esito negativo, allora forse vale la pena rivalutare qualunque soluzione scartata a priori oppure escogitare qualcosa di nuovo e folle. Intraprendenza ed incoscienza possono aiutare molto in questo.

Un esempio relativamente banale, per tornare con i piedi per terra: si sta lavorando su un progetto e si è già in ritardo, un fatto abbastanza comune.

Per evitare ulteriori rallentamenti, ci si butta a capofitto nel progetto, ignorando tutto e tutti, incluso i clienti. I quali, ovviamente, non apprezzano ed iniziano a tempestare tutti di telefonate, lamentando la “sparizione completa” di informazioni nonchè del team di sviluppo.

Questo fatto diventa automatico se il committente non è un novellino nel senso che ha già avuto esperienze analoghe in passato, con noi stessi o con altre persone: con un cliente puoi fare giochetti una volta, ma è difficile ripeterli una seconda.

Con questo tipo di persona, non di “primo pelo“, c’è poco da fare, soprattutto se ha già capito che ci saranno davvero dei ritardi. Non si fa in tempo a dire “iniziamo!” che sistematicamente telefonerà ogni santo giorno per sapere “a che punto siamo“.

Qui un buon “Ivan il Matto” è imporre un’inversione dei ruoli, d’ufficio. Quello che il cliente vuole non è solo conoscere lo stadio di avanzamento del progetto (fra l’altro, se non è un tecnico, difficilmente capirà i dettagli tecnici) ma avere la certezza di continuare ad esercitare un controllo sul progetto e quindi sentirsi tranquillo circa il suo investimento.

Anticipando le telefonate – ossia evitando di sparire – e tenendolo informato regolarmente, quello presto o tardi inizierà a fidarsi, allenterà la presa e lascerà respirare gli sviluppatori.

Dico di più: dimostrando che si sta procedendo nonostante i ritardi, c’è una discreta possibilità che si ottenga un allungamento concordato dei tempi di sviluppo, col beneplacito del cliente stesso.

Questo è un esempio di Ivan il Matto: “concedere” in anticipo qualcosa che una persona non si aspetterebbe mai.

Il bello è che non è nè serve una concessione vera e propria, ma basta che appaia come tale. Una telefonata quotidiana di pochi minuti ed il cliente inizierà a fidarsi e, con un po’ di gentilezza, concederà qualche giorno in più: un affare per entrambi i lati.

È la stessa sensazione che si ha quando si va ad uno sportello per un’operazione e si ha a che fare con un dipendente particolarmente efficiente ed intraprendente che, magari, senza dirvi nulla vi ha già risparmiato qualche inutile cavillo burocratico provvedendo per voi stessi (e a suo rischio e pericolo, ovviamente): si parte con aspettative negative e si torna col sorriso sulle labbra.

Consiglio spassionato: sfruttare a proprio vantaggio le cattive aspettative di un cliente non è un male frattanto che lo scopo ultimo sia realizzare quanto ha richiesto. Un “Ivan il Matto” in questa direzione ogni tanto aiuta.

Ispirazione, indole e predisposizione

La necessità non è l’unico caso o l’unico motivo per cui valga la pena uscirsene con una trovata apparentemente illogica o non-lineare per risolvere un dato problema.

Ci sono persone che per una qualche loro dote naturale non riescono mai a fare due lavori simili nello stesso modo. Anzi, amano così tanto sperimentare che azzardano spesso soluzioni così folli da… avere successo. “Chi non risica, non rosica“, si dice…

Ogni tanto mi capita di osservare come certe soluzioni implementative, per quanto apparentemente sgraziate, contorte o raffazzonate, si dimostrino in pratica migliori di altre, pensate e modellate secondo tutti i crismi metodologici dell’ingegneria del software.

Un esempio, tratto da “Modern C++ Design: Generic Programming and Design Patterns Applied“. In questo estratto dal libro (consigliatissimo), si parla del Singleton Pattern e di come renderlo adatto in un contesto multithread. Il problema è sempre classico: come assicurarsi che un solo thread, il primo, crei il singleton? Una soluzione semplice per verificare l’allocazione del singleton è controllare due volte se è avvenuto…

The idea is simple: Check the condition, enter the synchronized code, and then check the condition again. By this time, rien ne va plus—the pointer is either initialized or null all right. The code that will help you to understand and savor the Double-Checked pattern follows. Indeed, there is beauty in computer engineering.

Singleton::Instance()
{
	if (!pInstance_) // 1
	{ // 2
		Guard myGuard(lock_); // 3
		if (!pInstance_) // 4
		{
			pInstance_ = new Singleton;
		}
	}
	return *pInstance_;
}

Questa soluzione, definita elegante dall’autore del libro, Alexandrescu, sulle prime mi ha tramortito. Ho pensato:

“Ma come può essere bella come soluzione? Ripetere due volte lo stesso test a distanza di un paio di righe di codice? In passato, in altri contesti, è venuta anche a me di ripetere dei test come in questo snippet, ma ho sempre pensato di aver scritto un codice orribile proprio per questo e alla fine l’ho riscritto…”

Fra l’altro relativamente al Double-Checked Locking Pattern si dice che:

The pattern, when implemented in some language/hardware combinations, can be unsafe. It can therefore sometimes be considered to be an anti-pattern.

Eppure, pensandoci e ripensandoci, è una soluzione davvero semplice in quello che fa. E nella semplicità sta l’eleganza, per cui… È un ottimo esempio di “Ivan il Matto”, qualcosa in questo caso apparentemente strampalato che però ha successo, a dispetto di quanto dica l’”accademia“. Onore quindi a chi ci ha pensato e creduto, nonostante tutto.

Questo è quello che intendo per ispirazione, indole e predisposizione: un connubio-dono che certe persone hanno e che le porta ad aver ragione anche quando tutto direbbe il contrario. Una scintilla di ispirazione ed in un niente hanno un’idea e sono pronti a tentare un “colpo gobbo“. Qualcuno la chiama creatività e forse è anche questo.

Consiglio spassionato: se avete in mente qualcosa di insolito ma confidate nella sua validità, non abbandonatelo solo perchè gli altri potrebbero ritenerlo assurdo ed improponibile.

Che ne pensate?

Contrassegnato da tag , , , , , , , , ,

6 thoughts on ““Ivan il Matto”…

  1. RaS! scrive:

    C’è un errore madornale nella localizzazione del film in lingua italiana. In realtà “IVAN IL MATTO” non è la virata improvvisa per scoprire se si è inseguiti, quanto dirigiere il sommergibile direttamente contro il siluro per ridurre la distanza e determinare il mancato innsesco del siluro stesso.
    Se ci pensate ha senso…Ivan il Matto…solo un matto si fionderebbe contro un siluro!

    La manovra per cui si vira improvvisamente si chiama pulitura degli schermi acustici.

  2. jp scrive:

    @RaS: strano, perfino Wikipedia (citata a inizio articolo) lo riporta come virata, appunto per pulire gli schermi. O_O

    In ogni caso, permane il concetto di fondo, ossia della “lucida follia” che risolve le situazioni intricate… ^^’

    Ciao & grazie di essere passato! ^^

  3. Stefano scrive:

    Una pratica che usavo in passato paragonabile al pazzo Ivan era quella di rompere il codice, ovvero di provocare __volutamente__ errori in compilazione.

    Essenzialmente gli usi erano due:

    1. Mantenere un codice non compilabile come ‘reminder’ molto più esplicito di un commento TODO facile da ignorare.

    2. In caso di modifiche ‘a tappeto’ su codice legacy, provocare degli errori di compilazione per essere sicuro di analizzare bene tutti i punti che richiedono delle modifiche.

  4. jp scrive:

    @Stefano: il primo punto lo uso anche io, ovviamente evitando il commit su SVN, così che debba correggerlo prima di metterlo nel repository. Il secondo punto invece non l’ho mai seguito nel senso che non ci ho mai pensato (grazie quindi per il suggerimento :) ) nè probabilmente ho mai avuto tempo per farlo…

    Ciao & grazie di essere passato! ^^

  5. Zeno scrive:

    Ciao JP.
    Proprio in questi giorni sono incappato in una implementazione con il singleton ottimizzato che hai citato. :-)
    Lo trovo molto efficace e ragionevolmente elegante.

  6. jp scrive:

    @Zeno: non mi stupisco. :P

    Ultimamente anche a me capita la stessa cosa ossia sto ritrovando questa “strategia” applicata qui e là. Trovo questo fatto curioso anche perchè, come ho detto, prima di leggere il libro Alexandrescu, consideravo il tutto poco elegante, qualcosa da novellini. E, in tutta onestà, l’ho usato diverse volte senza nemmeno conoscerlo…

    Chissà perchè mi ero messo in testa di seguire una specie di “Paganini Pattern“: mai concedere il bis e per giunta a distanza di poche righe. Sopratutto se si tratta di istruzioni condizionali. :D

    Ora la penso in modo diverso, ovviamente…

    Ciao & grazie di essere passato! ^^

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 259 other followers