JavaRush /Blog Java /Random-PL /Kim jest inżynier oprogramowania? Inżynieria oprogramowan...

Kim jest inżynier oprogramowania? Inżynieria oprogramowania VS „tylko” programowanie

Opublikowano w grupie Random-PL
Zwracamy uwagę na adaptację artykułu Samera Buny o różnicach między inżynierią oprogramowania a programowaniem, czyli o tym, czym różni się tworzenie koncepcji oprogramowania od „tylko kodowania”.
Kim jest inżynier oprogramowania?  Inżynieria oprogramowania VS
Wszyscy inżynierowie oprogramowania potrafią kodować, ale nie wszyscy programiści mogą tworzyć koncepcje oprogramowania. Niektórzy nie lubią terminu „Inżynier oprogramowania” (inaczej inżynier oprogramowania), ponieważ najczęściej używamy słowa „inżynier”, gdy mówimy o czymś bardziej fizycznym - na przykład o budownictwie. Nasz artykuł oczywiście nie dotyczy samego terminu. Jeśli nagle spowoduje to odrzucenie, można je łatwo zastąpić czymś związanym z kreatywnością. „Twórca oprogramowania”, „Autor oprogramowania”… a nawet „Twórca oprogramowania”!
Kiedy mówimy o „inżynierze oprogramowania”, mamy na myśli osobę, której głównym zadaniem nie jest tylko pisanie kodu, ale tworzenie wysokiej jakości aplikacji. I w tym widzi swoje powołanie, stosując w swojej pracy podejście naukowe i metody statystyczne. Dla niego programowanie to nie tylko sposób na zarobienie pieniędzy na jedzenie.
Umiejętność programowania nie czyni automatycznie inżyniera oprogramowania. Każdy może nauczyć się kodowania i jest to o wiele łatwiejsze, niż się wydaje. Każdy może stworzyć prosty program na własny użytek, jednak nie gwarantuje to, że ten sam program będzie działał u innych. Mój ulubiony przykład to ten: wielu z nas śpiewa pod prysznicem, ale niestety ten występ nie zawsze jest godny profesjonalnej sceny. Oczywiście, aby uzyskać wysokiej jakości wrażenia muzyczne, najprawdopodobniej zwrócisz się do profesjonalisty. Potrzebujesz więcej przykładów?
  • Wszyscy uczymy się matematyki i pisania w szkole, ale to nie czyni z nas matematyków i pisarzy.
  • Większość z nas jest w stanie przygotować znośne, a czasem bardzo smaczne danie, jednak nie każdy odważyłby się przygotować stół na 100 osób na uroczystą kolację w ambasadzie. W tym przypadku zatrudniamy kucharza.
  • Czy jesteś już gotowy, aby całkowicie powierzyć budowę swojego nowego domu dziecku sąsiada, które tworzy imponujące arcydzieła z klocków Lego?
Główną tezą, którą próbuję przekazać w tym artykule, jest to, że proste programy bardzo różnią się od programów zaprojektowanych przez inżynierów. Najprostsza definicja procesu programowania: sporządzenie uporządkowanej sekwencji działań komputera w celu uzyskania czegoś konkretnego na wyjściu, przy danych parametrach wejściowych. Proces inżynierii oprogramowania to projektowanie, pisanie, testowanie i sprawdzanie programu komputerowego w celu rozwiązania problemów wielu użytkowników. Chodzi o tworzenie niezawodnych i bezpiecznych rozwiązań, które przetrwają próbę czasu i sprawdzą się w przypadku potencjalnie nieznanych wyzwań, wykraczających poza oczywiste.
Kim jest inżynier oprogramowania?  Inżynieria oprogramowania VS
Inżynierowie oprogramowania wiedzą wszystko o rozwiązywanych przez siebie problemach, proponowanych rozwiązaniach, ograniczeniach tych rozwiązań, ich prywatności i bezpieczeństwie. Moim zdaniem, jeśli ktoś nie rozumie istoty problemu, nie powinien nawet zaczynać programowania jego rozwiązania.

Nastawienie inżynierskie - poszukiwanie stosowanych rozwiązań

Inżynierowie oprogramowania nie uważają pisania oprogramowania jako takiego za swój główny cel. Myślą w kategoriach zaspokajania potrzeb i rozwiązywania problemów . Jest to ważne, ponieważ nie każdy problem wymaga rozwiązania programowego. Część z nich można rozwiązać za pomocą istniejących programów. Wystąpienie niektórych problemów można czasami przewidzieć z wyprzedzeniem, a dzięki kompetentnemu zaprojektowaniu programu można ich uniknąć w przyszłości.

„Intelektualiści rozwiązują problemy, geniusze im zapobiegają”

– Alberta Einsteina

Kim jest inżynier oprogramowania?  Inżynieria oprogramowania VS
Złożone problemy często wymagają napisania wielu programów. Istnieją zadania, które wymagają równoległego działania aplikacji, podczas gdy inne wymagają sekwencyjnego wykonywania kilku programów. Wiele problemów można rozwiązać po prostu przeszkolając użytkowników. Przed przystąpieniem do tworzenia programu inżynier oprogramowania zadaje sobie szereg pytań:
  • Jakie problemy mam rozwiązać?
  • Co jeszcze możesz zrobić poza pisaniem kodu, aby je rozwiązać?
  • Co mogę zrobić, aby ułatwić sobie te zadania dzięki aplikacji?

Jakość programu i jakość kodu

Dobre programy są jasne i czytelne. Można je łatwo rozbudowywać, dobrze współpracują z innymi programami, a praca z nimi nie będzie koszmarem. Jakość kodu nie podlega negocjacjom. Powinno być wysokie, to wszystko. Biorąc to pod uwagę, wymówki w postaci złego nastroju programisty czy zbyt napiętych terminów (ach, te terminy!) są nie do przyjęcia. Jednym z najważniejszych aspektów tworzenia oprogramowania jest zaprojektowanie programu w taki sposób, aby był łatwy w utrzymaniu i modyfikacji w przyszłości (witaj, OOP!). Obecnie prawie całe oprogramowanie można modyfikować, często proces ten odbywa się nawet bez udziału użytkownika lub nie wymaga od niego niczego poza „Twój program został zaktualizowany, kliknij OK lub Odłóż”. Oczywiście użytkownicy mają prawo żądać od aplikacji nowych funkcji (zwłaszcza jeśli mówimy o długotrwałym oprogramowaniu dla przedsiębiorstw napisanym w Javie lub grach online, w które można grać latami).
Chcesz wiedzieć więcej o programowaniu w Javie? Dołącz do grupy programistów Java !
Sam fragment kodu trudno nazwać użytecznym. Użyteczna funkcjonalność oprogramowania zaczyna się tam, gdzie różne aplikacje komunikują się ze sobą, wymieniają dane i współpracują, aby wykonać zadanie polegające na prezentowaniu danych i interfejsów użytkownikom.
Kim jest inżynier oprogramowania?  Inżynieria oprogramowania VS
Programy należy projektować z uwzględnieniem tych punktów! Jakie wiadomości otrzymują? Jakie zdarzenia są monitorowane? Jak przebiega uwierzytelnianie i autoryzacja? Inną równie ważną oznaką dobrego programu jest przejrzystość kodu, a nie liczba testów, które aplikacja przeszła, czy nawet dobry zasięg testów. Pozornie proste pytania: „Czy ktoś inny niż ja może zrozumieć mój kod?”, „Czy uda mi się dzisiaj napisać ten kod i zrozumieć go za kilka tygodni?” Popularny cytat na temat dwóch najtrudniejszych rzeczy w programowaniu mówi:

„Są tylko dwie naprawdę trudne rzeczy: unieważnianie pamięci podręcznej i nazewnictwo jednostek”

— Phila Carltona.

Czytelność kodu jest o wiele ważniejsza, niż się powszechnie uważa. Niestety nie jest możliwe zdefiniowanie dokładnych metryk ani parametrów zapewniających przejrzystość kodu. Zapamiętywanie ogólnie przyjętych norm językowych, dobrych modeli oprogramowania i metod programowania będzie częściowo pomocne. Ale zwykle to nie wystarczy. Z czasem i doświadczeniem prawdziwi profesjonaliści rozwijają, że tak powiem, „poczucie przejrzystości”, coś na kształt intuicji. Metafora pisarska świetnie się tutaj sprawdza: znajomość wielu słów nie pomoże Ci napisać czegoś zwięzłego i jasnego w znaczeniu.

„Napisałbym krócej, ale nie miałem czasu”.

- Marka Twaina.

Kluczową cechą dobrego oprogramowania jest możliwość szybkiego i łatwego naprawiania błędów. Błędy w programie powinny wysyłać jasne komunikaty i być centralnie rejestrowane w celu śledzenia. Gdy zostanie zgłoszony nowy błąd, osoba, która go naprawi, musi mieć możliwość jego debugowania. Musi łatwo połączyć się z systemem, w dowolnym momencie uzyskać dostęp do informacji wykonawczych, a także mieć możliwość łatwego sprawdzenia funkcjonalności dowolnej części systemu.

Środowiska i testowanie

Kiedy inżynierowie oprogramowania tworzą aplikacje, dokładają wszelkich starań, aby zapewnić ich pracę na komputerach o różnej architekturze i z różnymi systemami operacyjnymi. Ważne jest, aby oprogramowanie działało w różnych rozdzielczościach i orientacjach ekranu, a także aby nie „pożerało” więcej pamięci i mocy obliczeniowej niż jest to wymagane.
Kim jest inżynier oprogramowania?  Inżynieria oprogramowania VS
Jeśli chodzi o aplikacje internetowe, muszą one działać we wszystkich głównych przeglądarkach. Tworząc aplikację komputerową, musisz upewnić się, że uruchamia się i działa poprawnie na komputerach Mac, Windows i Linux. Cóż, programowi zależy na danych, wtedy aplikacja powinna działać nawet w przypadku wolnego łącza danych lub jego braku. Aby napisać oprogramowanie, inżynierowie rozważają różne opcje scenariuszy i planują je przetestować. Wszystko zaczyna się od wyboru idealnej opcji, w której wszystko działa bez błędów. Następnie dokumentują wszelkie potencjalne problemy i zapisują je w planie testów. Niektórzy inżynierowie zaczynają od napisania kodu, który nazywają przypadkiem testowym, który symuluje scenariusze wszystkich prawdopodobnych problemów i błędów. Następnie pisany jest program, który może współpracować z dowolną z rozważanych opcji. Unikalna umiejętność utalentowanego inżyniera oprogramowania nie polega na umiejętności pisania kodu, ale na zrozumieniu, co dokładnie aplikacja powinna robić jako wynik i jak to osiągnąć. Kiedy wymagania klienta dotyczące oprogramowania są niekompletne i prawdopodobnie niejednoznaczne, inżynier musi je poprawnie ocenić i „zrozumieć”.

Koszt i wydajność

W większości przypadków inżynier oprogramowania może szybko rozwiązać problem. Jeśli uważasz, że zatrudnienie „drogiego” doświadczonego programisty zwiększy Twoje koszty, zastanów się jeszcze raz. Im bardziej doświadczony jest wynajęty programista, tym szybciej będzie w stanie dostarczyć proste, schludne, niezawodne i łatwe w obsłudze rozwiązanie. W dłuższej perspektywie z pewnością obniży to koszty tworzenia oprogramowania.
Kim jest inżynier oprogramowania?  Inżynieria oprogramowania VS
Należy także wziąć pod uwagę koszty realizacji programu. Każdy program korzysta z zasobów obliczeniowych i nie są one bezpłatne.
Zadaniem inżyniera oprogramowania jest pisanie wydajnego kodu, który nie zużywa niepotrzebnie zasobów obliczeniowych.
Na przykład buforowanie często używanych danych jest jedną z możliwych strategii stosowanych w celu osiągnięcia pożądanego rezultatu. Ale to tylko jedno z prawdopodobnie setek narzędzi i rozwiązań, które mogą sprawić, że program będzie szybszy i wydajniejszy. Początkujący programista może zaproponować Ci tanie rozwiązanie, jednak korzystanie z takiego rozwiązania będzie ostatecznie kosztować Ciebie i Twoich klientów znacznie więcej, niż gdybyś współpracował z doświadczonym programistą, który przede wszystkim stworzył skuteczne rozwiązanie.

Skoncentruj się na doświadczeniu użytkownika

Dobry programista rozwija się z myślą o User Experience (UX). Interakcja człowiek-maszyna to temat wymagający niekończących się badań i rozwiązań. Im więcej rozwiązań zostanie zastosowanych, tym lepszy powinien być program. Oto kilka przykładów, aby dać Ci wyobrażenie o tym kierunku:
  • Projektując formularze do wprowadzania danych np. e-mail, dobry program powinien ignorować wielkość liter w adresie e-mail. Nie powinno zgłaszać błędu, jeśli zostanie naciśnięty klawisz CAPSLOCK, ponieważ adres e-mail jest unikalny pisany małymi literami. Jeśli program zaakceptuje jako dane wejściowe nowy adres e-mail, sprawdź go na początku procesu wprowadzania, aby ostrzec użytkownika, że ​​używa nieprawidłowego formatu adresu. To rozwiązanie obejmuje zarówno oczywiste kontrole, takie jak brak znaku „@”, jak i mniej oczywiste, takie jak sprawdzanie nieprawidłowej kolejności znaków, np. „gmail.ocm”

  • Gdy użytkownik zostanie przekierowany do wykonania jakiejś akcji, dobry program powinien zapamiętać jego aktualną pozycję i zwrócić go po zakończeniu. Dobry program powinien także zapamiętywać dane już przesłane przez użytkownika, co jest istotne dla dalszej interakcji z nim.

    Załóżmy, że szukasz podróży lotniczych jako gość w serwisie Expedia. Później decydujesz się założyć konto. Aplikacja powinna zapisać wszystkie Twoje poprzednie wyszukiwania na nowym koncie i powinieneś mieć do nich dostęp z innych urządzeń.


  • Kim jest inżynier oprogramowania?  Inżynieria oprogramowania VS
  • Dobry program projektuje się z myślą o scenariuszach zachowań użytkowników. Nie musisz po prostu dodawać nowych funkcji „tak sobie”; postaw się w sytuacji użytkownika. Któregoś dnia rezerwując bilety lotnicze zapomniałem podać numer swojego programu lojalnościowego. Po otrzymaniu potwierdzenia zdecydowałem się wejść na stronę linii lotniczej i dodać ją w celu uzyskania zniżki. Aby dowiedzieć się, jak to zrobić, grzebałem w witrynie przez dobre 10 minut. Aplikacja była na tyle nieoczywista, że ​​po prostu błąkałam się bez celu po różnych stronach serwisu w poszukiwaniu tego, czego potrzebowałam. Później odkryłem, że już kilka razy trafiłem na właściwą stronę, ale nawet tego nie zrozumiałem, ponieważ potrzebne mi pole zaginęło wśród innych podobnych pól o ogromnej formie.

    Okazało się, że aby edytować informację o wyjeździe trzeba było przewinąć około dwudziestu linijek formularza, wpisać numer karty stałego klienta oraz numer telefonu, bez których nie można było wysłać formularza do weryfikacji. To jest przykład programu, który został opracowany bez zastanowienia się nad tym, jak komfortowo będzie się z nim posługiwać użytkownik.

Niezawodność, bezpieczeństwo i ochrona

Moim zdaniem najważniejszą różnicą pomiędzy profesjonalnym programistą a amatorem jest uwzględnienie podczas jej tworzenia takich parametrów jak niezawodność, bezpieczeństwo i bezpieczeństwo aplikacji.
Prawdziwy profesjonalista wie, że odpowiada za bezpieczeństwo i ochronę swojego rozwiązania.
Części programu muszą tolerować nieprawidłowe dane wejściowe, nieprawidłowe stany i nieprawidłowe interakcje. Jest to rzeczywiście bardzo trudne do wyegzekwowania i jest głównym powodem, dla którego słyszymy historie o ludziach umierających z powodu błędów oprogramowania. Użytkownicy wprowadzali, wprowadzają i będą wprowadzać do programu błędne dane. Należy to przyjąć jako fakt. Co więcej, niektórzy zrobią to celowo, aby złamać aplikację i dostać się do dostępnych jej zasobów.
Kim jest inżynier oprogramowania?  Inżynieria oprogramowania VS
Oto przykład z życia wzięty: osoba rzekomo odpowiedzialna za niedawne naruszenie danych w Equifax jest oskarżona o niedopełnienie swoich obowiązków służbowych, które polegały na opracowywaniu rozwiązań zapobiegających złym i złośliwym zmianom we wszystkich produktach oprogramowania udostępnianych publicznie. Incydenty związane z bezpieczeństwem informacji dotyczą nie tylko błędnych i złośliwych danych wejściowych, ale także błędnie wprowadzonych danych. Jeśli użytkownik zapomniał hasła, ile razy może próbować je wprowadzić? Zablokujesz go po tym? A co jeśli ktoś inny spróbuje zablokować jego konto? Czy użytkownik może przesłać swoje dane uwierzytelniające niezaszyfrowanym kanałem danych? Co się stanie, jeśli prośba o zalogowanie nadejdzie z nietypowej lokalizacji? Co zrobisz, jeśli próba logowania okaże się automatyczna? Co zrobiłeś, aby chronić swoich użytkowników przed skryptami między witrynami, fałszowaniem żądań między witrynami i typowym phishingiem? Czy masz strategię tworzenia kopii zapasowych na wypadek ataku DDoS na Twoje serwery? Pytania te zwracają uwagę tylko na niektóre kwestie, które należy wziąć pod uwagę. Chroniony program nie zapisuje ważnych informacji w formie tekstowej. Chroni go złożonym szyfrem jednokierunkowym (łatwym do zaszyfrowania, ale prawie niemożliwym do odszyfrowania bez klucza). Są to środki zapasowe na wypadek włamania do programu. Hakerzy odkryją zaszyfrowane dane, które są dla nich bezużyteczne. Nawet w najlepszych programach pojawiają się nieoczekiwane problemy. Programistę, który nie jest przygotowany na ich wystąpienie trudno nazwać profesjonalistą. Dopóki nie spodziewa się nieoczekiwanego zachowania, nie jest inżynierem. Jest „autorem niebezpiecznych programów”. Błędy w programach nie zawsze są oczywiste. Nasza zdolność intelektualna do przewidywania znanych błędów i zapobiegania im jest ograniczona. Właśnie dlatego inżynierowie oprogramowania rozumieją znaczenie dobrych narzędzi, które umożliwiają im pisanie poprawnego i bezpiecznego oprogramowania.

Wymagane narzędzia

Nie ma wątpliwości, że potrzebujemy różnych i dobrych narzędzi programistycznych. Ich rola jest często niedoceniana, a tak naprawdę oszczędzają mnóstwo czasu i wysiłku, upraszczając niektóre zadania o rząd wielkości. Wyobraź sobie, że nadal musiałbyś przesyłać pliki przez FTP w celu wdrożenia, że ​​tak powiem, w staromodny sposób. Wyobraź sobie debugowanie problemów z siecią i wydajnością bez narzędzi Chrome DevTools! I jak nieefektywne byłoby obecnie pisanie kodu JavaScript bez ESlit i Prettier!
Kim jest inżynier oprogramowania?  Inżynieria oprogramowania VS
Każde narzędzie, które skraca czas otrzymywania informacji zwrotnych podczas pisania kodu, powinno być mile widziane. Kiedy znajduję narzędzie, które było mi wcześniej nieznane, ale jest naprawdę przydatne i skuteczne, mogę tylko żałować, że nie użyłem go przed tą szczęśliwą chwilą.
Lepsze i nowocześniejsze narzędzia pomogą Ci stać się lepszym programistą. Znajdź je, wykorzystaj, doceń je i jeśli możesz, udoskonal je. I nie skupiaj się na tym samym: kto wie, może dzięki nowemu narzędziu raz poświęcisz czas na instalację i naukę, a potem rozwiążesz problemy wielokrotnie szybciej?

Ewolucja inżynierii oprogramowania

Nikt nie może nauczyć się inżynierii oprogramowania w dwa, sześć miesięcy, a nawet rok. Nie nauczysz się, jak być inżynierem oprogramowania na kursie, uniwersytecie lub obozie szkoleniowym. Uczę się od ponad dwudziestu lat i nadal się uczę. Dopiero po dekadzie nauki i rozwoju, tworzenia i utrzymywania aplikacji, z których korzystają tysiące użytkowników, mogłem śmiało nazwać siebie doświadczonym programistą. Inżynieria oprogramowania nie jest dla każdego, ale każdy powinien nauczyć się rozwiązywać swoje problemy za pomocą komputera. Jeśli potrafisz nauczyć się pisać proste programy, powinieneś to zrobić. Jeśli potrafisz nauczyć się korzystać z publicznie dostępnego oprogramowania, powinieneś to zrobić. Jeśli potrafisz nauczyć się korzystać z oprogramowania typu open source i dostosować je do własnych potrzeb, masz supermoc! Każdy dzień przynosi programistom nowe wyzwania, nowe problemy, dlatego potrzebna jest inżynieria oprogramowania. Głównym zadaniem tego zawodu jest tworzenie oprogramowania tak, aby zwykły człowiek nie musiał się z nim zajmować przez wiele lat. Aby nie było potrzeby długich studiów w celu interakcji z programami. A mimo to inżynierowie oprogramowania nieustannie myślą o stworzeniu lepszych narzędzi, które rozwiązują bardziej złożone, znane problemy i robią wszystko, co w ich mocy, aby nowe problemy pojawiały się jak najrzadziej.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION