SheCanCode

Odpowiedź? Cóż, zależy od tego, kogo zapytasz!

Nie ma oficjalnego rozróżnienia między tymi rolami, a firmy używają własnego doświadczenia i wiedzy, aby zdefiniować opisy, które odpowiadają ich potrzebom. Aby jeszcze bardziej zagmatwać sprawę, mogą istnieć różnice regionalne, jak również, z wyraźną różnicą w edukacji. Jednak różnorodność źródeł danych może być oceniana i analizowana w celu wyciągnięcia wniosków.

Zgodnie z Computer Science Degree Hub programiści i inżynierowie oprogramowania mają odrębne role:

„Inżynieria oprogramowania odnosi się do stosowania zasad inżynierii do tworzenia oprogramowania. Inżynierowie oprogramowania uczestniczą w cyklu życia rozwoju oprogramowania poprzez łączenie potrzeb klienta z odpowiednimi rozwiązaniami technologicznymi. W ten sposób systematycznie rozwijają procesy w celu zapewnienia określonych funkcji. Ostatecznie inżynieria oprogramowania oznacza wykorzystanie koncepcji inżynieryjnych do tworzenia oprogramowania.

Z drugiej strony, twórcy oprogramowania są siłą napędową programów. Twórcy oprogramowania są odpowiedzialni za cały proces rozwoju. To oni współpracują z klientem, aby stworzyć teoretyczny projekt. Następnie mają programistów komputerowych stworzyć kod potrzebny do uruchomienia oprogramowania prawidłowo. Programiści komputerowi będą testować i rozwiązywać problemy razem z programistami. Programiści oprogramowania zapewniają kierownictwo projektu i doradztwo techniczne na każdym etapie cyklu życia oprogramowania.”

Udacity zgadza się, że istnieje silny podział:

„Terminy Software Developer i Software Engineer, wbrew powszechnemu przekonaniu, nie są wymienne. Programista wie, jak kodować i może posiadać umiejętności techniczne potrzebne do budowania znaczących produktów. Inżynier oprogramowania podąża za systematycznym procesem zrozumienia wymagań, współpracy z interesariuszami i tworzenia rozwiązania, które spełnia ich potrzeby. Programista ma tendencję do pracy w pojedynkę. Inżynier oprogramowania jest częścią większego zespołu”
Co to więc oznacza w praktyce? Zbadajmy tę różnicę bardziej szczegółowo.

Umiejętności i opisy stanowisk pracy inżyniera oprogramowania

Inżynier oprogramowania to wysoce biegły programista, który jest w stanie zarządzać złożonym systemem. Osoba, która nie tylko jest w stanie zbudować w pełni funkcjonującą aplikację, ale jest wystarczająco doświadczona, aby wiedzieć, jak zbudować ją w sposób, który jest łatwy do refaktoryzacji, samodzielnego dokumentowania, a w rezultacie łatwiejsze do debugowania.
Będą odgrywać aktywną rolę jako lider, konsultant i indywidualny współpracownik w różnych projektach. Muszą zapewnić analityczne doradztwo w identyfikacji i wdrażaniu nowych zastosowań IT, aby pomóc klientom i firmie osiągnąć cele strategiczne. Musi być w stanie zarządzać zasobami, koordynować zadania rozwojowe i nadzorować plany projektów technicznych. Często współpracują z personelem IT, operacyjnym i deweloperskim w całym cyklu życia oprogramowania
Wiedzą, że rozwaga i myślenie z przodu może zaoszczędzić dni pracy i bóle głowy w dół drogi. Poświęcają się nie tworzeniu najmądrzejszego kodu, ale czynieniu swojego kodu oczywistym. Wiedzą, że najlepszy kawałek kodu to ten, którego nigdy nie trzeba pisać.
Oczekuje się, że inżynierowie oprogramowania będą:

  • Posiadać wiedzę techniczną z doświadczeniem w pracy nad wieloma projektami

  • Będą biegli w projektowaniu wzorców w celu tworzenia odpornych i odpornych na błędy systemów

  • Używać automatyzacji testów przy użyciu narzędzi takich jak Gherkin, Cucumber lub Ansible

  • Wiedzą, jak tworzyć i utrzymywać architekturę IT, wielkoskalowe magazyny danych i systemy oparte na chmurze.

  • Build scalable deployment pipelines, to support Continuous Integration and Continuous Delivery

  • They must be able to work effectively by themselves and with remote teams.

  • Senior software engineers must oversee complex systems analysis, design and development programs.

A Software Engineer role will typically involve:

  • Research, design, develop and test their software as well as compiling and distributing software over the network

  • Modify existing software is to resolve defects, to adopt a new hardware or improve its performance.

  • Analyze the user needs and assess software requirement including design feasibility and cost/time constraints.

  • Konsultacje z klientami w zakresie specyfikacji i projektowania.

  • Koordynacja oprogramowania systemowego w zakresie wdrażania i instalacji

  • Nadzór nad pracą technologów i inżynierów

Umiejętności programisty oprogramowania i opis stanowiska

Twórca oprogramowania jest odpowiedzialny nie tylko za pisanie kodu, ale również za przegląd bieżącego systemu, tworzenie pomysłów na ulepszenia, w tym wysiłek wymagany do ich realizacji. Programista będzie ściśle współpracować z analitykami, użytkowników końcowych / marketingu i projektantów.
Deweloperzy oprogramowania muszą również zapewnić ich kod działa poprzez testowanie go, przy użyciu kontrolowanych i rzeczywistych sytuacjach, zanim będzie można przejść do życia. Muszą mieć oko do perfekcji, aby prawidłowo rozwiązać błędy i rewizji programów w celu zwiększenia wydajności operacyjnej.
Najlepszy programista jest kreatywny i ma wiedzę techniczną, aby wymyślić innowacyjny pomysł, aby rozwiązać problem klienta i są wystarczająco doświadczeni, aby zobaczyć wiele problemów, zanim się pojawią.
Rozwojowiec oprogramowania zazwyczaj po metodologii cyklu życia rozwoju lub dostawy ram, takich jak Scrum, XP, lub Kanban.
Rozwojowcy oprogramowania muszą mieć:

  • Doskonałe umiejętności analityczne, ponieważ będą one wymagane do ciągłego porównywania potrzeb z możliwości oprogramowania.

  • Muszą znać języki komputerowe, aby efektywnie pracować z programami komputerowymi, takie jak Java, C#, C++, Python

  • Mieć doświadczenie w korzystaniu z narzędzi open source, takich jak GitHub

  • Doskonałe umiejętności przekazywania informacji zwrotnych i komunikacji, z dużą dbałością o szczegóły, ponieważ drobne błędy mogą skutkować poważnymi problemami

  • Bycie zorientowanym na szczegóły pomoże im w zarządzaniu jednoczesnymi projektami na różnych etapach rozwoju.

  • Zrozumienie logiki kodu, nawet w językach, których nie znają.

Programiści muszą stale monitorować wprowadzane zmiany, w tym usuwać usterki, aby zapewnić wysoką jakość i spójność. W związku z tym muszą stale zmieniać przydzielone im zadania, zarządzać terminami i harmonogramami.

Podsumowanie

Podsumowując główne różnice między programistą a inżynierem:
Deweloper wykonuje. Ich talenty często koncentrują się na jednym obszarze. Bez potrzeby „wielkiego obrazu”. Tak więc twórca oprogramowania skupia się głównie na tworzeniu kodu, który jest częścią cyklu rozwoju oprogramowania.
Inżynier projektuje i planuje stosując zasady inżynierii do rozwoju oprogramowania. Zawsze świadomy „szerszego obrazu”, z talentami w wielu dziedzinach. Inżynier może przyjąć rolę programisty, ale jego głównym celem jest architektura.
Na koniec, główną różnicą między inżynierią oprogramowania a rozwojem oprogramowania jest to, że ta ostatnia nadzoruje inżynierię, podczas gdy pierwsza skupia się na tworzeniu funkcjonalnych programów.
Każdy może być programistą. Jeśli znasz niewielką ilość koncepcji programowania, to masz podstawy, aby stać się Software Developer. Piszą kod bez jakiejkolwiek analizy wydajności i skalowalności. Więcej tego elementu jest zakończona przez inżyniera oprogramowania, dzięki czemu rola ta różni się od Software Developer.
Zawsze jest coś nowego do nauczenia się, jeśli jesteś Software Developer lub inżynier, z wielu osób przełączających się między dwiema rolami w zależności od projektu i klienta.
Spójrz na SheCanCode nowy Beta Job Board, który reklamuje role z firm, które biorą różnorodność poważnie. Możesz ocenić różnicę między obecnymi rolami Software Developera i Software Engineera dla siebie.