/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $settings = &drupal_static(__FUNCTION__, array()); if (!isset($settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… if ( ( // If this URI has a host, and… isset($parts['host']) && // The host is different from the current host… $parts['host'] !== $base_url_parts['host'] ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; // Let's also normalize the server doc root. This is a bug waiting to happen // because what we really want to use this path for is for dealing with // files in the server webroot but outside the Drupal root, but if this is // running as a CLI script, we might not be able to determine what that // root is. In that case, we'll use the Drupal root. // @see http://drupal.org/node/1780398 $filter->settings['docroot'] = (drupal_is_cli() || !isset($_SERVER) || !isset($_SERVER['DOCUMENT_ROOT'])) ? DRUPAL_ROOT : $_SERVER['DOCUMENT_ROOT']; $settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $settings['current_settings'] = &$settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~(href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $settings later and not have the changes be "permanent." $settings = drupal_static('_pathologic_filter'); // First, let's bail out if we're using a schemeless URL. // @see http://drupal.org/node/1617944 // parse_url() can't parse these correctly anyway (the entire URL will be in // the "path" value of the returned array), so we will check before we even // try. if (strpos($matches[2], '//') === 0) { return $matches[0]; } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE // If there's a scheme part and it doesn't look useful, bail out. // "files" and "internal" are for Path Filter compatibility. || (isset($parts['scheme']) && !in_array($parts['scheme'], array('http', 'https', 'files', 'internal'))) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. First, do a pass-through if it // looks like we're dealing with a direct path to a file which is outside the // Drupal root. Use realpath() and the server's (?) docroot to iron out // wrinkles to the file's actual path. // @see http://drupal.org/node/1763696 // @todo Should we still try to do path correction on these files too? $filepath = realpath($settings['current_settings']['docroot'] . '/' . $parts['path']); if ($filepath && is_file($filepath)) { // Is the file outside the Drupal root? if (strpos($filepath, DRUPAL_ROOT) !== 0) { return $matches[0]; } else { // Linking to a file inside the Drupal root. Okay. $settings['is_file'] = TRUE; } } elseif (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $settings['is_file'] = TRUE; } else { $settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } } // Okay, if here, we either found something, or we hit the end of the loop. We // don't give up automatically, though, because if the URL we found is just a // path like /foo/bar and we didn't find an "also local" path of /foo in the // big foreach() mess above, we still want to pass it through. if (!$found && !(isset($parts['path']) && !isset($parts['host']))) { return $matches[0]; } // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // Let's see if we can split off a language prefix from the path. if (!$settings['is_file']) { if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } else { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. // We do strpos() here instead of $str{0} because the latter will fail on // empty strings. if (strpos($parts['path'], '/') === 0) { $parts['path'] = substr($parts['path'], 1); } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are enabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($settings['is_file'])) { $settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($settings['is_file'] && !$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return "{$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Varför smarta människor blir deprimerade, och vad du kan göra åt det | IHM

Varför smarta människor blir deprimerade, och vad du kan göra åt det

Den här artikeln var mycket svår att skriva. Om du föredrar att läsa lätta saker om lätta ämnen, bör du skippa att läsa den.

När Robin Williams begick självmord nyligen var det många som skrev om det. Spekulationerna om varför en av världens mest begåvade komiker tog livet av sig har varierat från "feghet", ett mindre lyckat uttalande av ett nyhetsankare, till depression, orsakad bland annat av att Robin Williams hade diagnosticerats med Parkinsons. "Depression är en sjukdom" skriver många välmenande människor, och "vi måste börja tala om det".

Det är faktiskt bara rätt till hälften. Depression är ingen sjukdom! Depression är en samling symptom. Däremot är det rätt att vi måste börja tala om det.

Depression kan ha många orsaker, till exempel rent fysiska skador på hjärnan, och genetisk disposition för depression. Den typen av depression kan behandlas med terapi och medicin. Det finns en tredje orsak. En orsak som är så tabu att inte ens de som säger att de vill prata om depression, vill prata om just den.

Det är en typ av depression som drabbar mycket talangfulla och intelligenta människor. Högintelligenta människor är ofta deprimerade, men det finns undersökningar som visar att de begår självmord mer sällan än människor med lägre IQ. En möjlig förklaring är att intelligenta människor oftare kan hitta konkreta, fungerande lösningar på desperata problem. De är mer introspektiva och kan övervaka och förstå sina egna känslomässiga reaktioner på ett sätt som de flesta människor inte kan. Ytterligare en förklaring är att smarta människor ofta har smarta vänner. De kan uttrycka sina känslor, och har vänner som förstår vad de menar. Det skapar säkerhetsventiler som inte alla människor har.

Men, om smarta människor egentligen är mer än genomsnittligt motståndskraftiga mot depression, vad är det då som gör att de ofta blir deprimerade? Vad kan man göra åt det som chef?

Låt oss börja med att försöka sätta oss in i hur det är att vara smart. Jag pratar inte bara om riktiga genier här, utan om människor med en IQ på ca 120 och uppåt.

Den genomsnittliga IQ-nivån är 100. En person med en IQ på 120 ligger i de översta fem procenten, men, vi har alla en benägenhet att använda oss själva som måttstock. En smart person ser ofta sig själv som fullt normal. För den högintelligente är det normalbegåvade som ser väldigt konstiga ut: Ogillar att tänka, har problem med enkel matematik, kan inte konstruera logiska modeller, förstår inte elementär statistik, kan inte tänka kritiskt, bygger aldrig upp någon högre kompetensnivå på någonting, är inte nyfikna, har ingen uthållighet när det gäller att lära sig saker…

För att illustrera skillnaden: Många människor fotograferar vad de äter och lägger upp bilderna på Facebook. Det brukar se rätt vidrigt ut. Jag har aldrig riktigt förstått varför man gör så, men jag tänkte i alla fall prova. Om jag gjorde det själv, kanske jag skulle förstå lite bättre. 

Att bara ta en bild var förstås för tråkigt, så för att göra det lite intressantare satte jag upp en utmaning för mig själv: Gör ett kort matlagningsprogram. Spela in och redigera alltihop med en iPad, bara för att se om det går. För att göra det till en extra utmaning, spela in både en svensk och en engelsk version samtidigt. Hur det gick? Jotack, helt ok för en amatörvideo. Om du vill se ett program om hur man lagar Paccheri med köttfärssås, hör av dig i kommentarerna, så postar jag en länk.

Poängen är att högpresterande individer anstränger sig mer, nästan vad det än gäller. Andra gillar ofta resultatet, men de vill inte vara med i processen.

Innebär det arbete en högpresterande person gör att andra måste ändra något i sitt sätt att arbeta, blir reaktionen ofta sur: "Så har vi aldrig gjort förut." Ofta ändrar man tillbaka till det gamla sättet att göra saker, hur dåligt det gamla sättet än var.

Ovanpå det blir man överhopad med "goda" råd: Tänk inte så mycket, dumma ner din CV, försök vara mer som andra, sluta fantisera, gör som du blir tillsagd (hur dumt det än är)…

Har du sett filmen Dum och Dummare? Föreställ dig att du lever i en värld där 19 av 20 personer du möter är som huvudpersonerna i den filmen.

Det är inte kul att leva i en sådan värld! För många människor är hög intelligens en förbannelse, en plåga som gör att man aldrig kan passa in, inte skrattar åt samma saker som andra, inte är överens med andra, inte kan sitta och småsnacka med andra på partyn… Man blir obekväm därför att man gör sig besväret att förstå varför, när de flesta bara accepterar vad som är.

En normal hjärna är designad för att spara energi. När de främre pannloberna aktiveras, aktiveras också hjärnans smärtcentrum. Det är därför många människor tycker det är obehagligt att lösa matteproblem. Det är också därför många människor tycker att det är obehagligt att tala med intelligenta personer. Det är svårt att följa logiken, att utvärdera fakta och se samband.

För smarta människor är det inte så kul heller. Det är inte roligt att lägga fram en logisk tankegång, och se ansiktet på den man pratar med förvridas i en smärtfylld grimas. Ännu värre när det är vänner, släktingar och arbetskamrater.

Så, man lär sig. Man lär sig att dölja vad man tänker, alltid hålla masken. Aldrig släppa garden på jobbet, bland släktingar, när man är ute bland folk. Bara bland ett litet fåtal människor, de som har samma åkomma som man själv, kan man slappna av.

En god vän sammanförde mig med en av sina vänner, som är en mycket duktig matematiker. Min gode vän bor inte i Göteborg, men det gör matematikern, så vi gick ut och tog en fika tillsammans. Den fikan tog mer än åtta timmar. Vi var båda så svultna på att tala med någon, utan att förställa sig, utan att sakta ner, utan att vara rädd för att inte bli förstådd.

Och, märk väl, så himla smart är jag inte! Problemen är mycket värre för människor med riktigt hög intelligens.

Jag har en vän som är en brilliant programmerare. Han var tidigt i sin karriär internationell troubleshooter på ett välkänt amerikanskt teknikföretag, och reste överallt där man hade svårknäckta problem. Han har fotografiskt minne, talar sju språk, är snäll och trevlig, och gillar att jobba med andra. Han till och med dansar bra. 

Tyvärr var det under många år svårt för honom att få jobb. Ingen ville anställa honom. Andra programmerare ville inte jobba med honom. När han berättade om det, var jag först konfunderad. Jag har själv jobbat med honom, och parprogrammerat med honom. Han är en av de två bästa parprogrammeringspartners jag någonsin arbetat tillsammans med. Så varför var han illa omtyckt? Jo, för att när han är med, så är det ingen som kan behålla några illusioner om sin egen kompetens. 

Det kunde för övrigt inte jag heller. Efter att ha jobbat en dag med honom var min hjärna som en urvriden disktrasa. Nästa dag likadant, och nästa, och nästa…Jag älskade det! Fantastiska utmaningar, varje dag. En av de mest lärorika och utvecklande perioderna i mitt liv. För någon med låg självkänsla däremot, skulle det varit knäckande.

Tyvärr gick det inte att få jobb i Sverige. Till slut flyttade han utomlands för att få ett arbete.

Jag sökte en gång jobb på ett stort svenskt företag. Som en del av proceduren blev jag intelligenstestad tillsammans med en massa andra sökande. Efteråt kom två av testarna och tog mig åt sidan. En av dem frågade: 

"Har du någon aning om hur intelligent du är?"

"Nej," svarade jag. Jag var rejält förkyld, det dunkade i huvudet, näsan rann, och jag kände mig allt annat än smart.

Jag fick efter en tid veta att jag inte blivit antagen. Jag antog att man letat efter smartare personer än mig, men ungefär ett år senare pratade jag med en rekryterare som kände väl till både testerna och företaget:

"Testerna används för att sålla bort personer med för hög intelligens och initiativförmåga," sade han.

Man ville helt enkelt inte ha alltför smarta personer bland de anställda. För stor risk att de kommer med egna idéer. Märk, att detta var ett teknikföretag.

Intelligenstestet var många år sedan, men jag stötte nyligen på ett annat "kunskapsföretag" som sållar bort människor med hög kunskapsnivå. När man anställer chefer sållar man bort sökande med kunskaper i Demings kunskapsmodell: Systemtänkande, psykologi, variationslära, och kunskapslära.

Sållar bort! Det är som att söka efter författare och bara anställa analfabeter.

Jag inser att det inte är något direkt mål att ha okunniga chefer, det är bara det att de som sköter anställningar inte har någon kunskapsmodell att matcha sökande mot. (Jodå, jag har kollat, det finns inte någon annan kunskapsmodell heller. Det är verkligen "ingen kunskapsmodell".) När de stöter på ord de inte känner till, som "systemtänkande", blir reaktionen negativ.

Det är inte konstigt att intelligenta människor ofta blir desillusionerade och deprimerade. Man kastar sig ut i arbetslivet för att göra en insats, hjälpa människor, åstadkomma någonting bra, och får ganska hårdhänt veta att det enda som räknas är förmågan att passa in i systemet.

De första åren är effekterna knappt märkbara, men det är lätt att låta sig nötas ned med tiden. När man är ung tar man strid. När man blir lite äldre lär man sig att välja vilka strider som är värda att utkämpas. Så småningom kommer det en tid när man börjar tycka att, trots att man har precis samma behov av att vara med och höra till som alla andra människor, så är det bara för jobbigt. Man drar sig undan. Går ur föreningar, tappar kontakten med vänner, och på jobbet gömmer man sig inne på kontoret. Man kommer inte med idéer och förslag längre, för man vet att resultatet bara blir meningslösa bråk.

Behovet av att tänka och göra saker finns kvar, men möjligheten att få utlopp för energin förtvinar. Samtidigt blir man mer och mer isolerad.

För några år sedan fick jag en idé: Jag kom på hur man skall sänka energiförbrukningen i vanliga bostäder med 10-20%. Vis av hur det gått tidigare, gjorde jag så här: Jag skrev ner idén, skrev ut den på papper, lade den i ett kuvert, och postade brevet till mig själv. När jag fick brevet, lade jag det i min bokhylla, och där får det ligga kvar. Jag tänker inte göra någonting med den. För något år sedan hörde jag om ett team i USA som jobbar på en nästan identisk idé. Jag önskar dem all välgång.

Själv väljer jag nu enklare sätt att få utlopp för min kreativa energi. Jag väljer saker jag kan klara på egen hand, eller med en liten grupp intresserade vänner. Jag undviker saker som kräver att människor utanför den innersta kretsen tänker, för det brukar gå illa.

Låter det elakt och egoistiskt? Har jag en alltför mörk människosyn? Låt mig berätta om senaste gången jag engagerade mig i något viktigt:

Jag arbetade med riskanalys och upptäckte att en produkt på ett företag hade ett inbyggt fel: Operatören kunde hamna i ett läge där man måste fatta ett avgörande beslut först, och därefter fick information som skulle vara underlag för beslutet. Olyckligtvis kunde liv hänga på operatörens beslut. Fel beslut kunde alltså få dödlig utgång. Jag började med att undersöka konkurrerande produkter och där var ordningsföljden korrekt. Sen upptäckte jag att samma procedurfel fanns inbyggt i nästa generation produkter som företaget höll på att utveckla.

Jag slog larm. Följden: Ingenting! Det var ingen som ville åtgärda felet, för det kunde ju leda till extra administration. Underförstått: Man kunde bli tvungen att återkalla redan sålda enheter. Det kunde också leda till att myndigheter fick ögonen på företaget. Man ville inte ens åtgärda felet i nästa generation av produkten, för det skulle ju vara samma sak som att erkänna att någonting inte var bra.

Det här var inte det enda problemet på företaget som kunde leda till dödsfall. Du kan säkert gissa vad som hände när jag försökte ta upp sådant till diskussion.

Så, man lär sig!

Depression på grund av sådana här händelser är ingen sjukdom. Det är bara en normal respons på situationen. När depressionen väl är där, blir den förstås i sig ytterligare ett skäl att vara deprimerad. Den föder sig själv. Dessutom, om självkänslan är knuten till förmågan att prestera, vilket den ofta är, så finns den ständiga oron för att man skall tappa förmågan att tänka klart, och att orken att göra saker aldrig skall komma tillbaka.

Så, vad kan du som chef göra för att högintelligenta medarbetare inte skall braka ihop?

Det är faktiskt mycket enkelt: Låt dem blåsa på i motorvägsfart, även om resten av företaget tar sig fram med häst och vagn.

Inom strategi finns en mycket viktig princip, Interaktions- och Isoleringsprincipen: 

Stärk kontakter med dina egna styrkor och allierade, isolera dina fiender från varandra.

Principen gäller i krig, schack, kärlek, hämnd, och affärer. Du behöver stärka banden mellan de högpresterande människorna i din organisation. Samtidigt måste du isolera dem från de som kan, avsiktligt eller oavsiktligt, skada dem. Du måste alltså göra det lätt för de högpresterande att hitta varandra, och själva organisera sig. Du måste också skydda dem, för folk runt omkring känner sig ofta hotade.

Jag har jobbat i sådana miljöer. Vi som var anställda fick veta vilka jobb som behövde utföras, men fick sedan själva organisera oss och klura ut hur arbetet skulle ske på bästa sätt. Det ledde till att vi själva började studera arbetsmetodik, organisation, köteori, psykologi, och en mängd andra saker. Vi tillämpade sedan kunskaperna praktiskt och lärde oss hur vi skulle arbeta så effektivt som möjligt.

Det hade aldrig varit möjligt för en chef att komma i närheten av att organisera oss så effektivt. Vi blev ett sammansvetsat gäng. Vi drog nytta av varandras styrkor, och hjälptes åt att eliminera svagheter.

Det var kul att gå till jobbet på morgonen, och tråkigt att gå därifrån på kvällen. När vi var mitt uppe i projekt, brukade våra chefer gå en runda på kvällen och beordra folk att gå hem. På fredagen längtade man till måndag.

Ett exempel till:

När jag fick mitt första riktiga jobb, hamnade jag som programmerare på en marknadsavdelning. Det här var ganska länge sedan, så programmerare ansågs vara lite mystiska varelser. Inte riktigt lika sällsynta som enhörningar, men ändå magiska. Jag var sjutton år och visste bättre: Jag kände mig inte ett dugg magisk.

Jag hade lärt mig programmera genom att läsa programmeringsböcker på biblioteket och skriva program på papper. Skolan jag gått på hade ett datorrum, men elever hade inte tillträde. Som tur var fanns det en lärare som gärna smugglade in oss som var riktigt intresserade. Kvalificerad att göra produktutveckling var jag definitivt inte, men det var bara att försöka ändå.

När jag träffade chefen på marknadsavdelningen för första gången, sade han: "Jag vet ingenting om programmering, så jag tänker inte tala om för dig hur du skall göra. Om du talar om för mig vad du behöver, så fixar jag fram det." Sedan tog han med mig ut till en av företagets kunder, för att jag skulle få lära mig inte bara vad som skulle byggas, utan varför.

Helt underbart! Det tog åratal innan jag insåg att de flesta chefer inte jobbar på det sättet.

När jag sedan jobbade i projektet, fick jag jobba på i min egen takt. Jag hade tät kontakt med hårdvaruutvecklarna, men inga onödiga bromsar. Resultatet? Jodå! Alla var nöjda över förväntan, jobbet var klart i tid, och det var inga buggar.

Jag har sett många företag där duktiga chefer lyckats skapa fredade områden där kreativa människor får arbeta utan att någon härsknar till så fort de får en idé. Tyvärr brukar de här områdena stå och falla med enskilda chefer. De är inte en del av organisationen som sådan.

Det är också riskabelt. En bra chef får lojala medarbetare och en toppeneffektiv organisation, men det är lätt att också få fiender. Chefen som byggde den där effektiva organisationen jag nämnde alldeles nyss, där man inte ville gå hem på kvällen, han förflyttades vid en omorganisation. Något år senare slutade han.

Jag önskar att jag kunde komma med ett recept. Fem enkla steg som gör att de människor som arbetar för dig mår bra. Tyvärr är det inte riktigt så enkelt. Du kan göra mycket bara genom att bry dig, hjälpa till med praktiska saker, hjälpa personen att hitta vettiga arbetsuppgifter och koppla ihop hen med andra högpresterande. Sanningen är dock att du behöver en stark position i din egen organisation om du skall kunna göra det utan att riskera ditt eget jobb och din egen karriär.

Du måste vara den sortens person som sätter etiska principer före  driften att passa in och vara som alla andra. Då är det förstås sannolikt att du själv är högpresterande och har egen erfarenhet av de problem som andra högpresterande får.

Lycka till!

P.S. Glöm inte skriva i kommentarerna om du vill se hur man gör Paccheri med köttfärssås. DS.

---

Not:

Det är många som frågat efter länken till matlagningsvideon. Det är så många kommentarer att det är svårt att de inlägg jag gjort med länkar till videon.

Därför kommer länken här: https://www.facebook.com/video.php?v=2572665214719&set=vb.1796957830&typ...

 

25 augusti 2014