User interface - not only graphical

23 marca 2023
Jakub Rojek Jakub Rojek
Photo by Bradley Hook from Pexels (https://www.pexels.com/pl-pl/zdjecie/kobieta-za-pomoca-gogli-vr-123335/)
Kategorie: Branża, Podstawy IT

Większość ludzi w pierwszej chwili ocenia różne aplikacje nie pod kątem funkcjonalności, którą oferują, tylko jak ją przedstawiają. Krótko mówiąc - spora część użytkowników patrzy na interfejs użytkownika i nie ma co ukrywać, że czasami program mniej zasobny w funkcje może zostać lepiej odebrany tylko dlatego, że ma prostszy i bardziej intuicyjny interfejs. Pół żartem, pół serio można powiedzieć, że tak można zestawić zwykły windowsowy Notatnik i linuxowego Vima - ten pierwszy jest prosty (i taki ma być), ale ten drugi oferuje więcej funkcji i rozszerzeń, mimo że jest znacznie bardziej skomplikowany w wykorzystaniu.

Natomiast wiele nietechnicznych osób często dziwi się, gdy przy rozmowach o interfejsie użytkownika pojawia się czasem wątpliwość, czy musi być graficzny. "Oczywiście, że musi, a jaki miałby być inny?". Cóż, w większości przypadków rzeczywiście żaden inny nie wchodzi w grę. Ale warto wiedzieć, że "interfejs użytkownika" niekoniecznie od razu implikuje "graficzny". Mało tego - "interfejs" niekoniecznie jest "użytkownika". Zapraszam na wycieczkę po rodzajach stosowanych regularnie w aplikacjach.

Interfejs graficzny (GUI)

Nie da się ukryć - jeśli mówimy o aplikacjach webowych, mobilnych czy większości desktopowych, to użytkownicy zdecydowanie oczekują w nich możliwości graficznego wybierania poszczególnych opcji, wpisywania i wyświetlania danych w wygodnej formie czy po prostu obsługę za pomocą klawiatury, myszki lub palca (o tym ostatnim nieco później). Czyli nieodzowne będzie zaprojektowanie oraz zrealizowanie graficznego interfejsu użytkownika (ang. Graphical User Interface - GUI).

Przede wszystkim, dla większości osób jest to naturalny sposób poruszania sie po systemach informatycznych. Możemy iść do przodu, cofać się, być informowani o zdarzeniach za pomocą wyskakujących okienek i kolorów, widzieć dane w tabelkach, kolumnach lub za pomocą ikonek. Dodatkowo, w ten sposób możemy wyświetlać pliki graficzne czy wideo. Tak naprawdę trudno wymienić wszystkie zalety, gdyż dla normalnego człowieka jest to naturalny sposób przedstawiania informacji na ekranie komputera, wypracowany przez lata. Żeby tego było mało, interfejsem graficznym możemy zachwycić potencjalnego klienta lub uprościć wiele operacji - nie bez powodu powstały różne nakładki na serwery typu cPanel, Plesk czy inne (np. chmurowe), które po prostu pozwalają korzystać z serwera także mniej technicznym użytkownikom. Również taki Kubernetes, a więc narzędzie do orkiestracji kontenerów, może być używany zarówno z poziomu linii komend, jak i poprzez interfejs graficzny.

Ale nie musimy szukać bardzo daleko - porównajmy sobie Windowsa, Linuxa oraz macOS-a. Okienka od Microsoftu są wręcz definicją graficznego interfejsu użytkownika i tym samym kojarzą się z prostotą użytkowania (czy słusznie, czy niesłusznie - to inna sprawa). W ten sposób ten system trafił pod strzechy większości użytkowników komputerów na całym świecie. Wbrew pozorom, Linux nie jest z tyłu - kojarzy się z interfejsem konsolowym i wyższym poziomem trudności, ale również oferuje konfigurowalne GUI w postaci KDE, Gnome, Xfce czy innych rozwiązań. Z kolei macOS jest uznawany za wręcz nieprzyzwoicie intuicyjny właśnie dzięki interfejsowi, który tak naprawdę pod spodem skrywa Unixa, a więc ten sam system, z którego wyewoluował Linux.

Żeby więc było ciekawiej, to może powiedzmy, jakie są wady graficznego interfejsu użytkownika, a takie też da się znaleźć. Przede wszystkim, jest on "cięższy" i nie na każdym komputerze równie wydajny. Dodatkowe komponenty, które się wiążą z GUI, a więc m.in. więcej procesów działających w systemie, mogą powodować problemy z zawieszeniami czy "zamrożeniem" ekranu. Z punktu widzenia osób działających dużo na plikach ważne jest też to, że w przypadku częstych operacji dyskowych czasami dużo lepiej jest skorzystać z intefejsu konsolowego. Trudniej również oskryptować GUI (np. w celu automatycznego przetestowania jakiejś operacji) oraz przy pewnych akcjach używanie myszki jest zwyczajnie wolniejsze niż w przypadku, gdy do sterowania mamy wyłącznie klawiaturę.

Trochę pobocznie, warto też przywołać pojęcie HUD-a (ang. Heads-Up Display), które jest kojarzone głównie z grami wideo. W żadnym wypadku nie jest to synonim GUI - to raczej jego część, która jest wyświetlana zawsze na wierzchu ekranu i informuje użytkownika o różnych statystykach. Choć to pojęcie i tak trochę się zdewaluowało, gdyż niektóre strzelanki pokazują HUD również w 3D, np. na wewnętrznym ekranie posiadanej broni.

I jeszcze jedna rzecz - świat nie kończy się na klawiaturze czy myszce. W graficznym interfejsie możemy poruszać się także za pomocą nieco zapomnianych już joysticków czy trackballi, padów (co doceniają głównie gracze), a także takim wynalazkom jak Trackpoint, który jest tym czerwonym przyciskiem w laptopach Lenovo Thinkpad.

Interfejs dotykowy

Tak naprawdę interfejs dotykowy również jest podzbiorem graficznego, natomiast rządzi się swoimi prawami i jest uznawany za bardziej naturalny (stąd równie dobrze mógłby być w jednej z następnych kategorii). Nie ma się co dziwić - w tym przypadku pozbywamy się jednej z granic pomiędzy człowiekiem a maszyną poprzez usunięcie klawiatury lub myszki. Sam Steve Jobs, prezentując pierwsze iPhone'y, podkreślał, że użycie palca to milowy krok w projektowaniu interfejsów. Choć należy też wspomnieć, że było to nawiązanie do innego sposobu korzystania z ekranów dotykowych, a mianowicie rysików (stylusów).

Sterowanie za pomocą dotyku kojarzy nam się głównie ze smartfonami i innymi urządzeniami mobilnymi, gdzie nie ma fizycznej klawiatury, dzięki czemu ekran zajmuje prawie całą dostępną powierzchnię. W ten sposób mamy poczucie większej kontroli i wygodę, gdyż nierzadko wszystko da się obsłużyć faktycznie jednym palcem, w tym przewinąć stronę, kliknąć przycisk czy przesunąć plik. Czasami drugiej ręki nie trzeba nawet wyciągać z kieszeni. Jest to na tyle intuicyjny sposób korzystania z urządzenia, że już niektóre laptopy oferują taki interfejs jako dodatkowy. Możemy też go spotkać np. w centrach handlowych, gdzie za pomocą dotyku dowiemy się, jak dojść do wybranego sklepu czy zamówimy jedzenie w restauracji fast food.

Nie zapominajmy, że interfejs dotykowy ma swoją głębię, którą widać np. w touchpadach dołączonych do laptopów. To nie tylko obsługa pojedynczego "tapnięcia", ale też możliwość wykorzystania wielu palców w celu wykonania jakiejś operacji (tzw. gesty). W tym przodują urządzenia spod znaku Apple'a, ale obecnie wiele kombinacji jest udostępnianych także przez innych producentów.

Z interfejsem dostosowanym do palca nieodłącznie kojarzą się wspomniane już urządzenia mobilne, a z tym konieczność pochylenia sie nad responsywnością oraz faktem, że nie wszystkie operacje łatwe do obsłużenia myszką są równie proste do zaimplementowania (lub łatwe do obsługi) na czymś do dotykania. Koronnym przykładem z mojego doświadczenia są tutaj tooltipy, podświetlenia, niektóre kontrolki.

Interfejs wiersza poleceń (CLI)

Pewnie wielu nie uwierzy, ale niektórzy naprawdę wolą obsługiwać komputer wyłącznie z poziomu klawiatury, śledząc białe literki na czarnym ekranie (choć tutaj pozdrowienia dla koleżanki ze studiów, która na wszystkich "swoich" komputerach w laboratorium ustawiała różowe tło w Bashu). Ba - w niektórych sytuacjach jest to jedyna możliwość sterowania komputerem. To ostatnie dotyczy to głównie serwerów linuxowych.

Mowa, oczywiście, o interfejsie wiersza poleceń (ang. Command Line Interface - CLI), czyli wpisywaniu komend w tzw. terminalu. Kolokwialnie możemy go nazywać również interfejsem konsolowym lub tekstowym, choć określenie "linia" czy "wiersz poleceń" jest bardziej trafne. Nie ma tutaj żadnych ikonek, klikania, przeciągania itd. - do dyspozycji mamy tylko nazwy programów, argumenty, przełączniki, potoki i inne tego typu wynalazki. W wielu przypadkach są to operacje, które są dostępne również w GUI, ale bywają też takie, których nie wykonamy w jednym lub drugim środowisku.

Może niektórzy nie są tego świadomi, ale korzystanie z konsoli w niektórych przypadkach jest naprawdę wygodne i szybsze. Przykładem są operacje usuwania wielu plików bądź ich kopiowania czy przenoszenia. Dzięki podpowiadaniu poleceń wiele rzeczy wykonamy też po prostu sprawniej. Dodatkowo, komendy można zawrzeć w skryptach, automatyzując tym samym niektóre prace wykonywane wielokrotnie lub wymagające wpisywania skomplikowanych kombinacji opcji i argumentów. Tak naprawdę możliwości konsoli są często większe ze względu na to, że nie trzeba projektować dla nich GUI i np. umiejscowienia kolejnych przycisków czy ikonek - wystarczy dodać obsługę nowego parametru czy programu. Dlatego edytory tekstowe typu Vim czy Emacs są tak potężne, mimo że potwornie niewygodne. Na dokładkę, terminalów możemy mieć wiele i w każdym uruchomione inne polecenie, dzięki czemu możemy wykonywać wiele operacji naraz. Jest to też związane z uruchamianiem komend w tle, ale tutaj zbyt mocno sięgnęlibyśmy w głąb systemów operacyjnych, a nie o tym jest ten artykuł.

Oczywiście, konsola w postaci Basha najbardziej kojarzy się z Linuxem (mimo że jak najbardziej ten system udostępnia GUI), ale również w Windowsie mamy do niej dostęp - nazywa się wierszem polecenia (lub CMD od command line), choć istnieje też potężniejsze rozwiązanie w postaci Powershella. Istnieją także dodatkowe programy, które znacznie uprzyjemniają obsługę komend w Okienkach, jak np. Windows Terminal (który może być stosowany nie tylko do WSL-a).

Wady z kolei są oczywiste - poziom trudności dla niewprawionych osób oraz trzeba przyznać, że nie jest to sposób, który łatwo zaimplementujemy w aplikacjach webowych i mobilnych, bo zwyczajnie byłby tam niewygodny i wręcz trudniejszy niż GUI. Nie mówiąc już o przyzwyczajeniach użytkowników - wyobraźcie sobie uruchomienie strony WWW na komórce i konieczność wpisywania poleceń z klawiatury ekranowej. Natomiast taki interfejs może być odpowiedni w obszarach związanych z integracją danych, okresowym wykonywaniem operacji czy narzędziami pomocniczymi dla innych zespołów technicznych. Choć do tego istnieje jeszcze inny interfejs, o którym za chwilę.

Interfejs programistyczny (API)

O API (czyli Application Programming Interface) można powiedzieć znacznie więcej i już nam się to zdarzyło. Natomiast tak - jak najbardziej jest to interfejs. Zdecydowanie bliżej tego konsolowego niż graficznego, choć jego cechą szczególną jest to, że jest uruchamiany zwykle nie przez użytkownika, ale programistę, a konkretnie przez aplikację napisaną przez tego programistę. Nakładka jest czymś w rodzaju bramy wejściowej do konkretnej funkcjonalności oferowanej przez API czy biblioteki napisanej na potrzeby innych programów. A właśnie.

Bo API to nie tylko usługi sieciowe dostępne poprzez wywołania HTTP. To też biblioteki możliwe do dołączenia do aplikacji, czyli inny sposób dostania się do jakiegoś kawałka kodu, który ułatwia pracę innym programistom. API oferują tez popularne programy, które umożliwiają w ten sposób pisanie wtyczek lub swoich rozszerzeń, np. VS Code czy Discord. W tym miejscu można powiedzieć, że nie jest to do końca interfejs użytkownika końcowego i to prawda. Aczkolwiek sam programista może zostać uznany za użytkownika takiego API.

Interfejs naturalny oraz interfejsy przyszłości

Wspomnieliśmy już o interfejsie dotykowym, który stanowi istotny przystanek na drodze ku większej integracji człowieka z maszyną (niezależnie od tego, jak futurystycznie to brzmi). Jest to zatem przykład interfejsu naturalnego, czyli wykorzystującego narządy człowieka do "rozmawiania" z komputerem czy innym urządzeniem elektronicznym. Ale, oczywiście, nie jest jedyny, choć mimo wszystko w tej chwili najbardziej dostępny.

W kolejce czekają przecież takie rozwiązania jak Augmented Reality (AR) lub Virtual Reality (VR), które pozwalają użytkownikowi wręcz przenieść się do aplikacji i wykonywać polecenia będąc bezpośrednio w niej (no, przynajmniej w przypadku VR, bo AR to trochę inna sprawa). Od dawna znane są interfejsy ruchowe w postaci np. Kinecta, dzięki któremu możemy pozostać w swoim świecie, jednocześnie sterując aplikacją. Są to rozwiązania zaczynające przypominać konstrukcje pokazywane w różnych filmach science-fiction czy cyberpunk. Oczywiście, rzeczywistość jeszcze nie dogoniła fantastyki, ale teoretycznie możliwe jest zastosowanie takiego futurystycznego interfejsu, co na pewno pomaga w promocji oprogramowania. Z drugiej strony, jest też znacznie droższe, trudniejsze oraz mniej czułe na obecnym etapie rozwoju.

Inne interfejsy

Jeśli chodzi o inne interfejsy dostępne już teraz, to oprócz wspomnianych wcześniej joysticków czy padów, do dyspozycji są też maty tańczące, instrumenty muzyczne (np. gitara do Guitar Hero) lub inne gadżety w rodzaju Ring Fita. Jak widać, są one głównie związane z grami, a nie aplikacjami biznesowymi i użytecznymi.

Warto pamiętać o tym, że dawniej człowiek mógł się komunikować z maszyną np. poprzez karty perforowane czy inne tego typu nośniki. Nie trzeba przekonywać o tym, że informatyka wykonała przez ten czas ogromny postęp - doceńmy to i miejmy w pamięci, gdy narzekamy, że przycisk na stronie po kliknięciu zareagował po 0,2 sekundy, a nie po 0,1 sekundy jak tego oczekiwaliśmy.

Interfejs, ale nie użytkownika

Warto pamiętać, że słowo "interfejs" ma więcej znaczeń niż tylko sposób sterowania aplikacją z punktu widzenia użytkownika. Mamy również interfejsy sprzętowe, choć zazwyczaj nie nazywamy ich w ten sposób. Jest to choćby port Ethernet, USB, HDMI, Firewire i inne złącza, które wykorzystujemy na co dzień. Jak najbardziej są to interfejsy, tylko że w tym przypadku to sprzęty komunikują się ze sobą w celu przesłania określonych danych. Interfejsy muszą być zgodne, tj. nie umieścimy kabla ethernetowego w porcie USB. Ale mogą być kompatybilne wstecznie i w ten sposób np. kabel USB 2.0 możemy podłączyć pod port USB 3.0.

Słowo "interfejs" znają też doskonale programiści, którzy korzystają z nich w programach pisanych obiektowo. Są to konstrukcje, które udostępniają tylko i wyłącznie nagłówki metod. Następnie mogą być implementowane przez inne klasy, co oznacza też, że te nagłówki metod muszą zostąć rozwinięte w pełnoprawnie działające ciało. Jest to zatem struktura podobna do klas abstrakcyjnych, jednak różni się tym, że sama w sobie nie zapewnia żadnej implementacji, za to jedna klasa (konkretna) może używać wiele interfejsów.

Słowo końcowe

Na koniec warto wspomnieć o dwóch rzeczach. Po pierwsze, czym innym jest UI (ang. User Interface), a czym innym UX (ang. User Experience). Tę kwestię wyjaśnialiśmy dokładniej w artykule o prototypowaniu i makietowaniu GUI.

Druga sprawa to samo słowo "interfejs", które powstało od angielskiego "interface" i z tego powodu kłuje w oczy bardziej zajadłych purystów językowych, podobnie jak inne zapożyczenia z języka Szekspira. Tym niemniej, ten termin tak się utarł, że nie ma potrzeby jego zmiany. Chyba nikt nidy nie myślał na poważnie o wprowadzeniu słowa "międzymordzie" do obiegu.

Jak widać, interfejs użytkownika niekoniecznie musi być graficzny, ale zazwyczaj taki jest. Warto jednak wiedzieć, że to słowo ma dużo więcej znaczeń i nie należy się bać lub dziwić, gdy ktoś mówi o jakiejś konsoli czy API.

Pozdrawiam i dziękuję - Jakub Rojek.

Piszemy nie tylko artykuły na blogu, ale też aplikacje i dokumentację dla naszych klientów. Zobacz, z kim do tej pory współpracowaliśmy.

O autorze

Jakub Rojek

Główny programista i współwłaściciel Wilda Software, z wieloletnim doświadczeniem w tworzeniu i rozwoju oprogramowania, ale także w pisaniu tekstów na różnorakich blogach. Zaprawiony w boju analityk i architekt systemów IT. Jednocześnie absolwent Politechniki Poznańskiej i okazjonalny prowadzący zajęcia na tej uczelni. W wolnych chwilach oddaje się graniu w gry wideo (głównie w karcianki), czytaniu książek, oglądaniu futbolu amerykańskiego i e-sportu, odkrywaniu cięższej muzyki oraz wytykaniu innym błędów językowych.

Jakub Rojek