Pytanie to od dłuższego czasu prześladuje wielu programistów. Czy nadchodzi koniec programowania manualnego?
Ludzie od samego początku szukają sposobów by ułatwić sobie życie. Nasza ciekawość dotycząca wszystkiego co nas otacza, jak działa i co możemy z tym zrobić stale rośnie i doprowadziła nas do obecnego stanu, w którym chcemy zautomatyzować dosłownie wszystko.
Wszystko zaczęło się od maszyn, które pomogły zredukować czas i koszty związane z wykonaniem zadań angażujących kilku pracowników. Przykładowo, wykopanie głębokiej na kilka metrów dziury zajmowało kilka tygodni i wymagało od 4 do 5 pracowników. Obecnie mamy do dyspozycji koparki, które mogą wykonać to zadanie za nas w ciągu kilku godzin.
Pojawienie się komputerów podtrzymało ten trend, a sztuczna inteligencja dodatkowo wzmocniła ekscytację związaną z nową rewolucją technologiczną. Doszliśmy do punktu, w którym ciężko nam ocenić, czy rozmawiamy z pracownikiem obsługi klienta czy z botem. Chociaż chatboty nie zastąpiły kadry kierowniczej obsługi klienta, istnieje duże prawdopodobieństwo, że zaawansowane narzędzia sztucznej inteligencji będą w stanie z łatwością rozwiązywać proste, a nawet średnio zaawansowane zapytania.
Kiedy po raz pierwszy wprowadzono komputery do powszechnego użytku w gospodarstwach domowych i firmach, miały one wykonywać powtarzalne zadania. Obecnie dążymy do tego, by komputery zaczęły wykonywać coraz bardziej skomplikowane zadania wykonywane dotychczas przez człowieka. W związku z tym wielu z nas nurtuje pytanie: czy sztuczna inteligencja zastąpi programistów?
Sztuczna inteligencja vs. programiści
Krótka odpowiedź na poprzednie pytanie brzmi: nie, dzień zagłady programistów jeszcze długo nie nadejdzie. Dlaczego? Ktoś w końcu musi rozwijać sztuczną inteligencję, a zadanie to należy właśnie do programistów, a dokładniej, inżynierów ds. sztucznej inteligencji. Musimy pamiętać, że gdy technologia wypiera jeden zawód, na jego miejsce pojawia się następny, tworząc nowe miejsca pracy.
Dzieje się to już teraz i będzie trwać dalej, wraz z dalszym rozwojem sztucznej inteligencji. Nie chodzi tutaj o to, aby sztuczna inteligencja przejęła zadanie programistów, lecz by stała się ona bardziej komplementarnym narzędziem do tworzenia oprogramowania.
Programiści będą bardziej efektywni i bardziej skupieni na perfekcyjnym wykonaniu pracy, zamiast myśleć o drobnych kwestiach dotyczących składni i semantyki. Zanim skupimy się na dalszych korzyściach płynących z zastosowania sztucznej inteligencji w tworzeniu oprogramowania, zapoznajmy się z ważnym obszarem SI jakim jest machine learning, czyli uczenie maszynowe.
Czym jest machine learning?
Jeśli sztuczna inteligencja jest zbiorem uniwersalnym, to uczenie maszynowe jest jej zastosowaniem lub, powiedzmy, podzbiorem. Uczenie maszynowe definiuje się często jako dawanie komputerom możliwości podejmowania działań, do których nie zostały uprzednio zaprogramowane.
Tradycyjne programowanie polega na dawaniu komputerowi poleceń - my zapewniamy warunki i na podstawie danych wejściowych otrzymujemy dane wyjściowe. W przypadku uczenia maszynowego komputer tworzy własne warunki na podstawie danych wejściowych i ”uczy się” z nich. Do niektórych z zastosowań machine learning można zaliczyć rozpoznawanie mowy, rozpoznawanie obrazu, autonomiczne samochody, systemy rekomendacyjne i wiele innych.
Z matematycznego punktu widzenia, uczenie maszynowe to nic innego jak rodzaj sztucznej inteligencji, która tworzy reguły w oparciu o pewne dane statystyczne. Innymi słowy, jeśli sztuczna inteligencja pobiera dane i w oparciu o pewne zasady klasyfikacji przewiduje lub klasyfikuje dane wyjściowe, to uczenie maszynowe jest sposobem na znalezienie tych zasad.
Na przykład, jeśli masz stworzyć system, który wykrywa, czy dany obraz przedstawia kota, czy nie, to sztuczna inteligencja jest czymś, co wykorzystuje zasady uczenia maszynowego do tworzenia prognoz, podczas gdy uczenie maszynowe, które jest zastosowaniem sztucznej inteligencji, stale uczy się na podstawie danych, tj. tworzy i ulepsza model wykrywania obrazu.
A więc co umożliwia nam zastosowanie uczenia maszynowego do języków programowania?
Możemy sobie wyobrazić, że sztuczna inteligencja może pomóc IDE w bardziej inteligentnym dostarczaniu sugestii kodu. Na razie stworzenie systemu, który potrafi kodować bezbłędnie, jest trudne, ale nie niemożliwe. Na ten moment możliwe jest posiadanie systemu, który pomoże programistom w następujących obszarach:
Klasyfikacja kodu
Gdy programiści będą stosować wtyczki oparte na sztucznej inteligencji podczas kodowania, ułatwiona będzie klasyfikacja modułów na podstawie jakości, tj. czy kod jest dobrze zaprojektowany. Będzie to obejmowało sugerowanie wzorców projektowych, wartości brzegowe, kontekst, zależności, czytelność, itp. Wtyczki te pozwalają wskazać drugiemu programiście zastosowanie funkcji poprzez opisanie kontekstu, w którym została ona napisana.
Tłumaczenie maszynowe
Za pomocą sztucznej inteligencji można tłumaczyć teksty z jednego języka na drugi, np. polski na angielski i na odwrót. W związku z tym, możemy spodziewać się narzędzi, które będą w stanie przetłumaczyć Javę na C lub Pythona w zależności od potrzeb, a to może pomóc w tłumaczeniu interfejsu API jednego języka programowania na inny.
Inteligentne uzupełnianie kodu
Znane są nam edytory kodu, takie jak Visual Studio Code, oferujące wsparcie w trakcie kodowania. Podpowiadają one tylko wtedy, gdy programista wpisuje nazwę obiektu lub metodę, a wyskakujące sugestie to predefiniowane właściwości lub nazwy metod. Sztuczna inteligencja może zapewnić nam wtyczki, które mogą dostarczyć rzetelną sugestię w oparciu o kontekst lub nawet automatycznie uzupełnić definicję funkcji.
Dostępne są wtyczki takie jak Codota, które wykorzystują potencjał sztucznej inteligencji do automatycznego uzupełniania kodu dla dowolnego języka programowania. Ponadto, istnieją wtyczki takie jak DeepCode, które posiadają funkcję umożliwiającą analizę kodu, która powiadamia programistę o błędach.
Jaki byłby wynik programowania opartego na sztucznej inteligencji?
Jedna rzecz jest pewna - programiści mogliby skupić się na najlepszej części programowania. Funkcją narzędzi opartych na sztucznej inteligencji byłoby opracowywanie pomysłów i proponowanie skalowalnego kodu. Cel jest podobny do tego, co umożliwiają nowe języki i frameworki, tj. ułatwienie rozwoju poprzez rozwiązanie istniejących problemów, jednak oprogramowanie wspomagane sztuczną inteligencją będzie oferować inne możliwości.
Nie wykorzystujemy w pełni możliwości jakie daje nam sztuczna inteligencja, jesteśmy dopiero na początku drogi - boty i autonomiczne samochody to dopiero zapowiedź tego co nadejdzie.
Kiedy tylko będziemy w stanie tworzyć środowiska programistyczne bazujące na sztucznej inteligencji, będziemy mogli myśleć o całkowicie zautomatyzowanych narzędziach programistycznych. Przed nami jeszcze daleka droga, podczas której programiści nie muszą się martwić, że zostaną zastąpieni robotami, które bez nich po prostu nie istnieją. Kluczem jest ciągłe doskonalenie się wraz z rozwojem technologii.
#branzaIT #sztucznainteligencja #machinelearning #programista
RaiBay - Polish Online Auction for Tech Talents