Gündelik Hayatımızdaki “Norman Kapıları”

En keyif aldığım şeylerden biri olan yeni bir programlama dili öğrenme süreci nde karşılaştığım bir kavram olan “Norman Kapıları”ından bahsetmek istiyorum. Hemen kitabını edindiğim, ismi ile özdeşleşen ve “Norman Kapıları” olarak literatüre geçen bir kavramın babası olan Don Norman amcamızın Gündelik Şeylerin Tasarımı* (The Design of Everyday Things) adlı kitabında, adından da anlaşılacağı üzere gündelik kullandığınız ve sıklıkla kullanmak durumunda kaldığınız şeylerin tasarımları üzerine usta bir tasarımcı ve filozof bakış açısıyla analizlerini aktarıyor.

Ben de bir yazılımcı olarak, kendi dünyamda karşılaştığım Norman Kapılarından bahsetmek istiyorum. Ama önce biraz Norman’ı tanımak ve onun çalışmalarının odağı olan insan odaklı tasarım bakış açısına aşina olmak iyi olacaktır.

Don Norman, Kullanıcı deneyimi mimarı (User Experience Architect) olarak Apple da çalıştığı dönemde ilk defa User Experience ifadesini bir meslek olarak kullanılmasına vesile olmuş. Hayatı boyunca da bilişsel (cognitive) mühendislik alanında insan odaklı tasarım çerçevesinde çalışmalar yapmış ve literatüre oldukça önemli eserlerle katkıda bulunmuş. Peki onunla özdeşleşen “Norman Kapıları” neden meşhur olmuş ?

Hayatı boyunca kapıların neden bu kadar kullanışsız olduğuna dair rahatsızlığını şöyle dile getiriyor;

Çekilmesi gereken kapıları itiyor, itilmesi gereken kapıları çekiyorum; çekilmesi ya da itilmesi gerekmeyen kayar kapılarınsa içinden geçmeye çalışıyorum.

Genelde gündelik hayatımızda sürekli karşılaştığımız bazı sorunları veya kullandığımız araçlardaki problemleri görmezden geliriz. Bazen üşenir ve başka bir yol bulup kullanışsız olduğunu düşündüğümüz, kullanımını tam anlayamadığımız ya da sürekli hata yaptığımız durumlarda quick fix diye adlandırdığımız çeşitli yamalar kurgulayarak sorunu çözmeye çalışırız. Olmadı görmezden gelir ve tekrar karşılaştığımızda bir güzel söveriz. Norman bu konuda uzun süre kafa yoranlardan olmuş. Sadece yanlış tasarlanan kapılar için değil, insanlık için tasarlanmış her tasarım için benzer bir yaklaşımda bulunuyor. Dediğine göre; kapılar açılır veya kapanır. Bunda bu kadar karmaşık olacak ne var ? Kapı gibi nesneler veya birinin işini görmesi için kullanıma sunulmuş her araç önceklikle empati ile tasarlanmalı. Yani onu kullanacak insanların bakış açısıyla tasarlanmalı. En basit manaya indirgeyecek olursak insan odaklı tasarımın tanımı herhalde budur.

Norman, iyi tasarımın en önemli özellikleri keşfedilirlik ve anlaşılırlıktır diyor. Keşfedilirlik özelliği ile olası eylemlerin neler olduğu ve nasıl ne şekilde yapılacağını anlamamız mümkün olmalı. Anlaşılırlık ile ise ürünü nasıl kullanmalı, ne amaçlanıyor gibi soruların cevaplarını verebiliyor olmasını bekliyor.

Modern dünyanın karmaşık aygıtları

Evrendeki her şeyin tasarım sonucunda var olduğu felsefesine girmeden sadece biz insanların tasarladığı yani yapay şeylerin üzerinde duralım. Oturduğumuz koltuk, kullandığımız araba, yürüdüğümüz merdivenler, bilgisayarlar, kitaplar… genelde kullanım kılavuzuna ihtiyaç duymadan kullanabildiğimiz şeyler olduğu gibi itiniz veya çekiniz gibi bir komut verilmeden kullanmakta zorlandığımız şeyler de var. Bazılarıysa sayfalarca doküman olsa da bizi zorlayabiliyor.

Image for post
Image for post

Bu karmaşıklık nesnelerde olduğu gibi deneyimlerde de ortaya çıkabiliyor. Tasarım, bir şeyin nasıl çalıştığı yani insanlar ve teknoloji arasındaki etkileşimle ilgilenir. İyi tasarlanmış şeyler deneyimlendiğinde zevk verir. Kötü yapıldığında ise sinir bozucu olur. Ürün veya hizmeti istediğimiz şekilde kullanmak isteriz. Eğer doğru bir tasarım ile oluşturulmamışsa bu sefer ürünler bizi kendi istedikleri gibi davranmaya zorlar.

İnsan merkezli tasarımın felsefesi ile yöntemleri, ürün ya da hizmet, ana odak ne olursa olsun, tasarım sürecine derinlemesine bakış ve insan gereksinimlerinin incelenmesini katar.

Etkileşimin Temel İlkeleri

  • Sağlarlıklar (affordances)

Norman yukarıdaki maddeleri, insan odaklı tasarımın yani insanlar ile etkileşime girecek ürünler/hizmetler tasarlamanın temel ilkeleri olarak belirliyor. Bunları çok kısa örneklerle açıkladıktan sonra bu ilkeleri yazılım dünyasındaki iyi tasarlanmış veya tasarlanamamış ürünlere uygulayalım.

Kapı örneğinden yola çıkalım. Bir kapının sağlarlığı görünür veya görünmez nesneler yardımıyla açılıp kapanması, içinden geçilebilmesi gibi eylemlerdir. Eğer görünmez ise insanlarda ilk algısı kapıyı görür görmez bir şekilde açılacağı veya kapanacağı yönünde olacaktır. Kapı kolları itme ve çekme için net görünür bir sağlarlıktır. Mesela sıradan bir bardak, içine sıvı koymamızı sağlar. Bunun için bir yönlendirmeye çoğu zaman ihtiyaç duymayız.

Sağlarlık özellik değil, ilişkidir. Olabilecek eylemleri belirler. Simgeler, eylemin nerede olması gerektiğini belirtir.

Kapı örneğine bakacak olursak, hangi sağlarlığın nerede ve nasıl olması gerektiğinin belirtilmesi durumunda simgeler itiniz veya çekiniz oluyor.

Bir örnek daha verelim ve eşleştirmeyi açıklayalım. Evlerimizde sigorta düğmeleri ile uğraşanlar bilirler. Buradaki şalterler evin belli odalarındaki elektriği kesiyorlar. Fakat hangisi hangi odanın ya da odaların elektriğini kestiğini ilk bakışta anlamamız imkansız görünüyor. Burada bir simgeye ihtiyaç olabilir ama asıl aradığımız genelde oda lambalarında olduğu gibi bulunduğunuz odadaki ışığı kapatan düğmeler gibi bir eşleştirmedir. Ya da elektrik ocaklarındaki yanan gözler ile onları açıp kapatan düğmelerin doğal eşleşmelerini istememiz gibi.

Image for post
Image for post

Geribildirim ise hepimizin bildiği bir bildirim veya basit bir uyarı olabilir. Bir ürünle yapmak istediğimizi yaparken doğru ya da yanlış yaptığımızı gösteren bir işaret ararız. Bu bir mobil uygulama ise yaptığımız doğru işlemlerde doğru olduğuna dair, yanlış olanlarda yanlış geri bildirimler almak kullanıcı deneyimi açısından olması gereken özelliklerdir. Ya da kapı kilitlerinde bir tur kilitleme yaptıktan sonra çıkan ses bize olumlu geri bildirim vermesi yine aynı ilke ile kullanıcıların hissetmek istediği bir şeydir. Bunun dışında geribildirimler hemen olmalı, insanın 5 duyusundan en az birine uygun olmalı, rahatsız edici boyutta ve miktarda olmamalı.

Kavramsal modellerin bizim daha çok ilgimizi çekecek bir öneme sahip olduğuna inanıyorum. Bir evrak dosyası tasarlayıp ürettiğimizi düşünelim. İlk gördüğünüz anda onun ne işe yaradığını sağlarlıklarını anlamamız çok olası. Fakat bu çağda dosyaları artık dijitalleştirdik ve onları bilgisayarımızda, hatta nerede olduğunu bilmediğimiz ve bilmek istemediğimiz uzaktaki sunucularda/bilgisayarlarda saklıyoruz.

Image for post
Image for post

Yazılımcı Deneyimi (DevX)*

Yazılımcı deneyimi(DevX), yazılımcılar için tasarlanan/oluşturulan araçların, platformlar, ürünler veya kütüphanelerin daha iyi olması adına başlatılan bir hareket haline gelmiş. Kullanıcı deneyim(UX)’nin bir alt dalı gibi.

Yazılımcılar da birer son kullanıcıdır. Yazılımcıların kullanımı için oluşturulan API’lar SDK’lar kütüphaneler, dokümanlar hangi prensiplere uyarak oluşturulmalıdır? Elbette bu konuda oldukça fazla çalışma, kaynak olduğu doğrudur. Yazılımcının verimliliğinden, yazılımın kalitesine her konuda önem arz eden bu konuyu geri plana atabiliyoruz.

GET /posts/:id/generateTags

Yukarıdaki API tasarım örneği keşfedilirlik ve anlaşılırlık açısından sınıfta kalıyor. Sağlarlık bilgisi karışık. Hem GET yapıp hem de tag oluşması gerektiğini düşündürüyor ki bu durumda direk baktığımızda ne sonuç vereceğini kestiremiyoruz. Simgeler de tam olarak sağlarlıkla örtüşmüyor. GET yapılması gerektiğini gösteriyor ama url içinde oluşturma eylemi var. Burada doğru sağlarlık ve simgeleme yok. Aynı zamanda bu API ile yapılacak bir aksiyon ile bazı verilerin veri tabanında tag oluşturacağını düşündürüyor (yanlış eşleştirme). Ama muhtemelen sonucunda oluşmadığını gördüğünde hayal kırıklığına uğranabilir. Doğrusu aşağıdaki gibi olmalı.

GET /posts/:id/tags

Bir diğer örnek ise AWS’nin dokümantasyonu olduğunu düşünüyorum. Herhangi bir sorunu keşfetmek ve anlayabilmek oldukça zor. Bu konuda gerçekten ciddi sorunları var. Bir başka hoş olmayan dokümantasyon örneği de C++ öğrenmek isteyenlerin canını sıkacak cinsten.

Yazılımcı olarak neden temiz kod (Clean Code) yazmalıyız? Bir tasarım neden iyi veya kötüdür? Tasarımsal hatalar çoğu zaman subjektif mevzular gibi görünse de aslında genelde belirli bir kalıba uygun pratikler uygulandığında ortadan kalkabilecek basit sorunlardan ibaret olabiliyor. Bir kodun keşfedilebilir ve anlaşılabilir olması ile ilgili bir örnek aşağıdaki gibi olabilir;

Sağlarlık ve simgelemenin doğru kullanıldığı bir örnek olarak aşağıdaki Java kodunu gösterebiliriz.

StringUtils.lastIndexOfIgnoreCase(CharSequence str, CharSequence searchStr, int startPos)

Diğer bir yandan aşağıdaki kod keşfedilirlik ve anlaşılıktan sınıfta kalıyor. Java dilindeki File sınıfı aslında gerçek dünyadaki dosya ile eşleşmesini beklerken okuma yazma işleri için başka bir sınıf olan FileOutputStream kullanılıyor. Burada eşleştirme konusunda sıkıntı yaşıyor.

File file = new File("/X/Y/a.txt");  
FileOutputStream fos = new FileOutputStream(file);

if (!file.exists()) {
file.createNewFile();
}

byte[] bytesArray = mycontent.getBytes();

fos.write(bytesArray);
fos.flush();
System.out.println("File Written Successfully");

Elixir’de ise bütün prensiplere uyuyor.

File.read("hello.txt")  
#=> {:ok, "World"}

File.read("invalid.txt")
#=> {:error, :enoent}

Bu tip örnekleri çoğaltmak mümkün. Bağlam farketmeksizin etrafımızdaki her şey, gündelik hayatımızda bizi mutlu ya da mutsuz ediyor. Amacı ne olursa olsun bize dokunan her nesnenin, hizmetin belirli bir kural setine ve prensiplere göre üretilmesini ve insanların hayatını kolaylaştırmasını beklemekten daha doğal bir şey olamaz. Norman kapıları her yerde. En azından kendi alanımızdaki ürettiklerimize bir el atalım.

Makaleye buradan da ulaşabilirsiniz.

Kaynaklar

Written by

Co-founder & CTO @Polinity Group, Entrepreneur, Technologist

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store