Programiści 10x są gorącym tematem do dyskusji w branży oprogramowania obecnie, więc pomyślałem, że będzie to dobry pomysł, aby podzielić się moim punktem widzenia w tym względzie.
Szczerze mówiąc nie znam dokładnej definicji programisty 10x, ale zakładam, że odnosi się ona do hiper produktywnych programistów (co może nie odwzorowuje dokładnie 10-krotnej produktywności, ale do znaczącego poziomu bliskiego lub większego niż 10-krotność).
Bazując na kilku sukcesach, które odniosłem dostarczając ultra duże kawałki oprogramowania dla startupów i korporacji, oraz na doświadczeniu w pracy z kilkoma topowymi programistami, mogę podzielić się kilkoma spostrzeżeniami na ten temat.
The 10x Programmer Then
Software stworzony 20-30 lat temu był znacznie prostszy w porównaniu do nowoczesnego oprogramowania, w odniesieniu do funkcjonalności, bezpieczeństwa, wydajności i skalowalności. Z drugiej strony, tylko garstka bibliotek lub frameworków była dostępna w tamtym czasie, aby zaimplementować jakiekolwiek funkcjonalności.
Więc, oprogramowanie napisane 20-30 lat temu wymagało znacznego wysiłku w programowaniu.
Zdefiniowanie 10x programisty w tym kontekście jest stosunkowo łatwe. Różnica między ilością podstawowego wysiłku programistycznego poświęconego na implementację tego samego zestawu funkcjonalności przez programistów 10x i zwykłych programistów.
The 10x Engineer Now
Zanim przejdziemy do dodatkowych szczegółów, wyjaśnijmy sobie jedną rzecz: tworzenie oprogramowania jest złożonym procesem, a programowanie jest tylko jednym z obszarów, które mogą przyczynić się do powstania nowoczesnego oprogramowania.
Z powodu zwiększonego użycia oprogramowania, szczególnie przez Internet, zarówno przez konsumentów jak i organizacje, oprogramowanie jest bardzo złożone, i może być szaloną decyzją budowanie czegoś od zera. Szczerze mówiąc, o ile nie jest to całkowicie nowa platforma lub system operacyjny, podstawowe programowanie wymagane do rozwoju nowoczesnego oprogramowania jest mniej intensywne w porównaniu do starszych wysiłków.
Choć wiedza programistyczna i wysiłek są nadal bardzo ważne, ilość wysiłku, która jest wymagana do zbudowania wspaniałego oprogramowania (wolnego od błędów, bezpiecznego i nadającego się do sprzedaży) jest w inżynierii.
Więc w dzisiejszym kontekście, 10x programista może nie przynieść wiele wartości w branży, ale 10x inżynier tworzy bardzo szeroki wpływ w procesie rozwoju.
Chciałbym dodać moje 3 centy tutaj.
1. They Make the Best Usage of Tooling
Rozwój oprogramowania jest złożonym procesem, który obejmuje wiele różnych rodzajów wysiłku. Poza kodowaniem, obejmuje wysiłki od dokumentowania procesu, do formatowania danych, od czytania danych dziennika, do wysyłania raportów, od automatycznego testowania, do ręcznego testowania, od złożonego debugowania, do ręcznego badania problemów, i tak dalej, i tak dalej.
Ogromny wysiłek może stać się niezwykle wydajny dzięki użyciu odpowiedniego zestawu narzędzi i platform (które są odpowiednie do budżetu klienta i innych ograniczeń).
Edytory
Pisanie oprogramowania wymaga jednego lub więcej edytorów, z których niektóre są również określane jako IDE (Integrated Development Environment). Nowoczesne IDE, takie jak Visual Studio lub Eclipse, oferują dużą ilość funkcji, aby programiści byli produktywni, ale znaczna część tych funkcji nie jest znana przez większość programistów.
Popularne IDE mają również komercyjne i darmowe wtyczki (takie jak Resharper), które umożliwiają jeszcze większą produktywność programistów.
Poza IDE, inne edytory takie jak NotePad++, MarkdownPad, itp. są również bardzo przydatne w odpowiednim kontekście.
Urządzenia i usługi online
Urządzenia i usługi online takie jak czytanie lub przeszukiwanie dużych plików dziennika, debuggery http takie jak Fiddler, narzędzia do budowania i wdrażania, itp.
Własne narzędzia
Inżynierowie 10x również tworzą własne zestawy narzędzi do wykonywania powtarzalnych czynności, dla których odpowiednie oprogramowanie może nie być dostępne z zewnątrz.
W wielu przypadkach, właściciele biznesowi w domu rozwoju oprogramowania nie wydają się być zainteresowani inwestowaniem w narzędzia dla programistów, ale używanie właściwego zestawu narzędzi umożliwi zaskakującą ilość produktywności.
Dla programistów, którzy są jednymi z najdroższych ludzi do zatrudnienia, wydawanie pieniędzy na odpowiednie narzędzia dla nich jest warte zrobienia.
Jako lider zespołu programistów .net, opracowanie szablonu startowego ASP.NET Core & Visual Studio zgodnie z najnowszymi praktykami kodowania .net pomogło mojemu zespołowi zwiększyć ogólną produktywność trzykrotnie.
2. They Don’t Reinvent the Wheel
Przemysł oprogramowania stał się bardzo dojrzały w ciągu ostatnich trzech dekad. Prawie każdy problem, który programiści próbują rozwiązać poprzez kodowanie, został rozwiązany i jest dostępny jako API (albo jako binarne lub usługi sieciowe), niektóre z nich są komercyjne, podczas gdy inne są darmowe.
Poza tym, frameworki open source zapewniają również dużą elastyczność w zrozumieniu zachowania API lub dostosowaniu do potrzeb użytkowników.
Przed skokiem do programowania, inżynierowie 10x faktycznie upewniają się, że ten problem nie został rozwiązany w pełni (lub częściowo) wcześniej lub, jeśli tak, nie są one dostępne do użycia.
3. (Ciągle) Piszą pięknie zaprojektowany kod
Pisanie świetnego oprogramowania wymaga zdefiniowania dobrej architektury, która nie tylko podąża za dobrymi wzorcami projektowymi i zasadami, ale także korzysta z nowoczesnych infrastruktur. Produkowanie dobrze zaprojektowanego kodu nie tylko pozwala na szybsze pisanie nowych funkcjonalności, ale także znacząco redukuje liczbę błędów.
Ale piękna inżynieria wymaga ciągłego doskonalenia.
W mojej karierze zawodowej widziałem zaskakującą ilość niskiej jakości kodu w różnych projektach oprogramowania, który stale zwiększa dług techniczny. Prosty projekt, który rozpoczął się 5 lat temu, jest pełen niezainżynierowanego brzydkiego kodu i wymaga 20+ osób do obsługi cyklu rozwoju (gdzie spędzają 80% swojego czasu faktycznie naprawiając błędy).
Jedną z głównych przyczyn tej okropnej sytuacji, jaką znalazłem, jest „strach”.
Organizacje, zwłaszcza podmioty korporacyjne, najczęściej boją się zmian.
Rozwój oprogramowania jest niewiarygodnie szybko zmieniającą się dyscypliną pod względem narzędzi, frameworków i inżynierii, i wymaga ciągłych zmian, aby dotrzeć do właściwego miejsca.
Zmiana jest przerażająca, ale nie jest tak niebezpieczna, jak się wydaje, zwłaszcza w branży oprogramowania (z odpowiednimi zestawami narzędzi i ludzi). Ale jeśli nie jest to zrobione zgodnie z oczekiwaniami, nie zajmie dużo czasu, aby projekt został całkowicie porzucony pewnego dnia.
.