Co może zrobić technicznie sprawny starszy programista, aby kontynuować ulepszanie [zamknięte]


15

Załóżmy, że programujesz od ponad 10 lat. Znasz wiele języków, z których kilka jest na bardzo szczegółowym poziomie. Projektujesz architekturę dla rozwiązań, pracowałeś i dostarczałeś większe projekty. Studiowałeś wzorce, najlepsze praktyki, skuteczne wytyczne kodowania, testy jednostkowe, wielowątkowość itp.

A potem powoli zaczynasz odczuwać, że większość książek, które czytasz, dostarcza coraz mniej cennych informacji na 100 stron tekstu. Więc zaczynają dawać malejące zyski. Nadal się uczysz, ale nie poprawiasz już skoków.

Dlaczego uczenie się staje się mniej wydajne w porównaniu do tego, jak było wcześniej?

W tamtych czasach zmieniało to twój sposób myślenia, uczyło cię nowych rzeczy i poszerzało horyzonty, które później poprawiły twój obecny zawód lub pozwoliły wymyślić / zarządzać / budować coś nowego. Dlaczego już tak nie jest?


9
Często zadawane pytania dotyczące tego, co powinieneś zrobić dalej (projekt, książka, technologia lub język) są nie na temat. Rozumiem twój punkt widzenia, ale nie możesz wiedzieć wszystkiego, co należy wiedzieć o tworzeniu oprogramowania. Twoim problemem jest to, że się nudzisz, być może popadłeś w intelektualną rutynę. To, co inspiruje cię do wyjścia z tej koleiny, zależy w dużej mierze od ciebie i prawdopodobnie byłoby czymś zupełnie innym dla kogoś innego. Ale oto odpowiedź: wyjdź ze swojej strefy komfortu . Dowiedz się o systemach wbudowanych, matematyce, grafice lub cokolwiek, co Cię interesuje.
Caleb,

2
Nie uważam tego pytania za ograniczone co do tego, co PO powinien zrobić dalej. Chodzi raczej o ogólne podejście specjalistów, którzy mają dostęp do dalszych badań. Może może być lepiej sformułowany, ale nie brzmi jak „co mam teraz zrobić”.
Frank

3
Cóż, szczerze mówiąc, nie wiem, które pytania nie są obecnie nie na temat. Ostatnio trudno znaleźć tutaj interesujące dyskusje. Ok, w / e, po prostu zablokuj temat ...
Koder

2
Wierzę, że pytanie można edytować i ponownie otworzyć. O ile mogę stwierdzić, przedstawiony problem: „malejące zyski ... badanie wzorców, najlepsze praktyki, skuteczne wytyczne dotyczące kodowania, testowanie jednostkowe, wielowątkowość ...” jest dość tematem dla programistów
gnat

2
Pełniejsze zrozumienie tematu zdobędziesz, gdy spróbujesz go nauczyć kogoś innego.
JeffO

Odpowiedzi:


23

Po pierwsze, pomimo tego, jak sformułowane jest twoje pytanie, nie ma końca studiom, szczególnie nie w naszej dziedzinie, gdzie nowe rzeczy pojawiają się szybciej niż można o nich przeczytać. Biorąc to pod uwagę, gdy chcesz poprawić, rozważę następujące kategorie. Aby uzyskać jak najwięcej korzyści / ROI, powinieneś wybrać coś ze swojego najsłabszego obszaru.

Podstawowa wiedza

Pomimo znajomości języków programowania i doświadczenia praktycznego często ma się (szczególnie samouczące się) obszary, w których podstawowe kwestie podstawowe pozostają niekompletne. Pomyśl o takich strukturach danych, algorytmach, strategiach pamięci podręcznej, funkcjach skrótu, ...

Pamiętaj, że obejmuje to również podstawy języków programowania - od kompilatorów, technik optymalizacji i systemów typów, po teorię kategorii, monady i tym podobne.

Jeśli jesteś dobrze nauczany, ponieważ przez kilka lat utrzymywałeś stopień uniwersytecki, prawdopodobnie będziesz już silny w tej kategorii (oczywiście nie ukończony, ale solidna podstawa). W przeciwnym razie spróbuj przeczytać kilka książek z tych obszarów, aby dowiedzieć się, czy w twoim repertuarze brakuje czegoś, o czym nawet nie wiedziałeś. Ta kategoria jest najłatwiejsza do przeszacowania.

Wiedza paradygmatyczna

Zawsze jestem zdumiony, gdy pojawiają się programiści, którzy myślą, że wiedzą wszystko, a jednak zupełnie nie znają się na paradygmatach głównego nurtu. Jeśli uważasz, że orientacja obiektowa to koniec, to twoja kategoria do ulepszenia. Jeśli uważasz, że programowanie funkcjonalne również istnieje i mogło nawet słyszeć o programowaniu logicznym, to nadal jest to dobry wybór. Istnieje o wiele więcej paradygmatów, a poznanie ich ma głęboki efekt, dając ci coś podobnego do nowego spojrzenia na świat programowania.

Po prostu nie zapominaj: często (raczej z natury filozoficznej) spierają się o to, co można uznać za paradygmat lub nie. Nie daj się tym śledzić. Twoim celem powinno być poszerzenie twojego horyzontu, a to oznacza poznanie tych rzeczy, niezależnie od tego, czy ktoś uważa X za sam paradygmat, czy nie, nie robi to żadnej różnicy.

Wiedza specjalistyczna

Najłatwiejszy ze wszystkich - i jednocześnie najmniej użyteczny. Oczywiście możesz zaangażować się w jedną technologię i poznać wszystkie jej tajniki, ale powinieneś być przygotowany na zapłacenie ceny. Technologie starzeją się i robią to z coraz większą prędkością, co sprawia, że ​​jest prawie gwarancją, że zainwestowany tutaj czas będzie bezwartościowy kilka lat później.

Tutaj także pojawia się problem malejącego zwrotu. Ze względu na swoją naturę bycie specjalistą w czymś oznacza, że ​​musisz spędzić niezliczone godziny na tym wąskim temacie, a zatem z definicji zajmie ci dużo czasu, aby nauczyć się czegoś nowego, a ta nowa rzecz będzie małym kawałkiem układanki, który jest nie zmieni niczyich poglądów.

Wiedza o domenach

Czy to dlatego, że jest to domena twojego dzieła, czy po prostu na podstawie twoich osobistych zainteresowań, ale bycie ekspertem w dziedzinie informatyki i pewnej dziedziny jest bardzo cenne i satysfakcjonujące. Nie mówię tu o bocznych obszarach CS, takich jak grafika komputerowa czy sztuczna inteligencja. Zamiast tego zauważ, że komputery utrwaliły się w życiu wszystkich i że każde inne pole podlega komputerom i obszarowi, do którego możesz się dostać.

Ten wyraźnie należy do kategorii „poza polem”, ale nie jest to ostry matematyczny „na zewnątrz”, ale raczej obszar zastosowania. Pomyśl o medycynie: nie radzę ci zostać lekarzem. Warto jednak zapoznać się z podstawami medycyny, aby zastosować istniejącą wiedzę z zakresu informatyki do problemów tej dziedziny. Dotyczy to technik wizualizacji, robotyki, systemów eksperckich i zwykłego zarządzania danymi w zakresie księgowości / administracji. Chociaż robiłeś to wszystko wcześniej, robienie tego w innej domenie może być zupełnie nowym doświadczeniem.

Pamiętaj jednak, że jest to o wiele bardziej radykalna zmiana w twoim kierunku niż inne kategorie. W codziennej pracy możesz nie mieć kontaktu z tym polem, co sprawia, że ​​bardzo trudno jest go oderwać. Może to nawet oznaczać zamianę zadań. Ponadto będziesz potrzebować pewnego rodzaju certyfikatu na temat swojej nowej domeny - w końcu jesteś zupełnie nową domeną i musisz konkurować z absolwentami interdyscyplinarnych studiów, które już rozpoczęły swoją podróż, aby stać się ekspertami w tej niszy.

Wiedza uzupełniająca

Jak dodał Mike Brown, istnieje także obszar wiedzy, który w pewien sposób towarzyszy twojej obecnej pracy, ale nie jest absolutnie niezbędny. Nie musisz być kierownikiem projektu, aby dowiedzieć się o zarządzaniu projektami, ale jak zwykle dodatkowa wiedza zapewni Ci lepszy wgląd w to, jak druga strona tyka. Można nawet uogólnić to do tego stopnia, że ​​koncentruje się na umiejętnościach miękkich. Chyba każdy, kto pracował nad prawdziwym projektem z innymi ludźmi, zna ich wartość.


+1, szczególnie dla „Wiedzy o domenach” - to coś, co zadziałało przynajmniej dla mnie.
Doc Brown

1
Zgadzam się w 100% z tym, co mówisz. Interesuję się głębszą podstawową wiedzą. Do skutku, że jestem teraz zapisany na kurs na kompilatorach. To, czego nie dotknąłeś, sklasyfikowałem jako wiedzę uzupełniającą: projektowanie graficzne, zarządzanie projektami itp.
Michael Brown

+1 za paradygmat - robiłem OOP / proceduralne przez ~ 10 lat (i męczyłem się tym), a potem zacząłem uczyć się programowania funkcjonalnego i moje oczy były otwarte na zupełnie nowy świat.
Paul

9

Myślę, że oprogramowanie stale się rozwija i dlatego kładzie się nacisk na ciągłe doskonalenie. Rozumiem, skąd pochodzisz, ostatnio czułem się trochę podobnie i teraz dążę do MCSM w SQL Server.

Naucz się nowego języka lub frameworku lub tego, co jest obecnie „popularne”. Każdego roku pojawia się technologia, struktura lub język, który osiąga masę krytyczną, dzięki czemu staje się samodzielnym słowem. Myślę o kilku z nich w ciągu ostatnich kilku lat: node.js, Ruby, jQuery. Wpłynie to również prawdopodobnie na twój sposób myślenia na innych platformach, na przykład sprawdź, co ROR zrobił Java z Grails.

Zawsze jest miejsce na ulepszenia. Myślę, że jest mało prawdopodobne, abyś był ekspertem od wszystkiego, dużo czytam i zawsze się uczę. Zgadzam się z tym, co mówisz o uczeniu się coraz mniej na 100 stron, ale należy się tego spodziewać, gdy jesteś ekspertem w tej dziedzinie.

Oto kilka sugestii dotyczących tego, co możesz zrobić:

  1. Bądź na bieżąco ze zmianami w społeczności i tym, w co ludzie „wchodzą”. Naucz się nowych stosów, przynajmniej po to, aby mieć ich wystarczająco dużo, aby polecić je w odpowiednich przypadkach

  2. Uczestnicz w takich witrynach pytań i odpowiedzi, takich jak ta, gdzie możesz przekazywać swoją wiedzę innym osobom. Jeśli poświęcisz trochę czasu na przeczytanie wypowiedzi innych ludzi, prawdopodobnie się czegoś nauczysz, a przynajmniej zobaczysz perspektywy innych ludzi.

  3. Wybierz hobby, które ma jakiś związek z twoją pracą. Istnieje wiele hobby z crossoverem, myślą AI, burzami umysłowymi Lego, RaspPi itp.

  4. Oprócz prób poszerzenia swojej wiedzy, spójrz na zwiększenie głębokości. Na przykład dowiedz się, jak EF działa pod przykryciem, dzięki czemu możesz diagnozować te dziwne przypadki narożne, a nie tylko korzystać z frameworka.

  5. Kontynuuj certyfikację na najwyższym poziomie, aby udowodnić, że znasz swoje umiejętności

Osobiście powiem ci, co w tej chwili otwiera mój umysł. Czytam 97 rzeczy, które powinien wiedzieć każdy architekt oprogramowania i jestem tylko częściowo z tego powodu, ale jest to mnóstwo mądrych rad. Książkę można przeczytać online pod linkiem, który podałem.

Jeśli chodzi o hobby, które ostatecznie podjąłem, zająłem się diagnostyką pojazdu (oczywiście z komputerem), co pozwoliło mi w pełni utrzymać własny samochód. Naprawdę bardzo lubię czas, który spędzam pracując rękami.


Zabawne, znam jednego z autorów 97 rzeczy;)
Michael Brown

To dobra książka.
Sam

Nie ma za co. To wspaniale, prawda?
Sam

1

Po pewnym momencie nauczyłeś się wystarczająco dużo na określony temat, że możesz swobodnie zdobywać nową wiedzę na zasadzie ad hoc. Kiedy czujesz, że nie ma wiele więcej do nauczenia się o swojej podstawowej dziedzinie, nadszedł czas, aby zacząć zdobywać dodatkową wiedzę, która uzupełnia twoją podstawową wiedzę.

Dla mnie nurkuję w UX i projektowaniu graficznym, ponieważ uważam, że sprawi, że będę lepszy jako programista, aby zapewnić nie tylko eleganckie struktury w kodzie, ale także eleganckie interfejsy dla użytkownika końcowego.

Inne tematy, do których możesz podejść, to zarządzanie projektami, analiza biznesowa, administracja systemem i doskonalenie procesów oprogramowania. Jeśli okaże się, że pracujesz w określonej domenie, warto zanurzyć się głębiej w tej domenie. Na przykład ostatnio ciężko pracuję w sektorze usług finansowych. Zapisałem się na kursy na temat Coursera dotyczące modelowania finansowego i tym podobne pomogą mi rozmawiać z moimi klientami na ich warunkach.

Zawsze trzeba się więcej nauczyć, wystarczy myśleć nieszablonowo.


0

Pytanie to składa się z dwóch części: dlaczego trudniej jest się uczyć i co możesz zrobić?

Pierwsza część jest dość prosta - trudniejsze są bardziej zaawansowane tematy. Choć nauka programowania jest trudna, o wiele trudniej jest nauczyć się dobrze projektować programy, a jeszcze trudniej nauczyć się projektowania dużych aplikacji. Faktem jest, że zaawansowane tematy są trudniejsze, w przeciwnym razie nie byłyby zaawansowane. Będziesz musiał poświęcić więcej czasu na ich naukę; więcej czasu na ćwiczenie ich opanowania.

Jeśli chodzi o to, co możesz zrobić, wydajesz się skoncentrowany na technicznych aspektach bycia starszym inżynierem oprogramowania. Możesz zrobić o wiele więcej rzeczy, aby pomóc zespołowi w tworzeniu oprogramowania niż naukę języków i struktur. Miękkie umiejętności, takie jak mentoring innych programistów, negocjowanie wymagań, zarządzanie projektami, projektowanie programów, przekazywanie wizji, wdrażanie norm zespołu ... Wszystkie te ważne rzeczy potrzebne, aby zespół programistów był skuteczny w tworzeniu oprogramowania, nie tylko Ty.


-3

Za każdym razem, gdy wchodzę na stronę Lambda The Ultimate , naprawdę nie myślę / nie mogę myśleć, że wiem wszystko w dziedzinie informatyki.

LtU da ci dobry punkt wyjścia do paradygmatu i wiedzy teoretycznej, którą możesz się nauczyć.

„Im więcej wiesz, tym więcej wiesz, jak mało wiesz.”


1
w jaki sposób odpowiada to na pytanie: „Dlaczego uczenie się staje się mniej wydajne w porównaniu do tego, jak było wcześniej?”
komara

Ponieważ kiedy tam pojadę, są artykuły z 90% nowych rzeczy, których muszę się nauczyć. Właśnie na to narzeka OP: Stosunek rzeczy wyuczonych przez liczbę odczytanych wierszy, który staje się zbyt niski w jego przypadku. Nie znasz tej strony?
Stephane Rolland

@gnat, a mylisz pytanie , zatytułowane: „Co zaawansowany technicznie starszy programista może studiować, aby dalej ulepszać”?
Stephane Rolland

czy przeczytałeś treść pytania po tytule?
komara

@gnat Tak, oczywiście, przeczytałem jego pytanie: jest to raczej stwierdzenie, jeśli OP pyta tylko dlaczego : po 10 latach tak zwany starszy inżynier oprogramowania czyta książki, które nie zmieniają już horyzontów, ponieważ senior dużo wie. Tak, przeczytałem to. Uśmiechnąłem się. Powtarzam sobie: „Im więcej wiesz, tym więcej wiesz, jak mało wiesz”.
Stephane Rolland
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.