Od wielu lat jestem programistą. Jestem całkiem dobry w tym, co robię i potrafię „wykonać zadanie”.
Istnieje jednak różnica między „wykonaniem pracy” a „prawidłowym wykonaniem pracy”. Użyjmy przykładu.
Ostatnio opracowałem stronę internetową od zera. Strona działa dobrze i nie miałem problemów. Przeglądając kod pomyślałem sobie, że mogłem to zrobić lepiej. Mógłbym ograniczyć moje zapytania MySQL. Mógłbym użyć MVC, aby ułatwić rozszerzenie (teraz wymaga rozszerzenia).
Postanowiłem przepisać projekt za pomocą CodeIgniter. Lubię ramy. Ale potem zostałem odsunięty na bok, ponieważ aby ograniczyć zapytania MySQL, musiałem nauczyć się zaawansowanych połączeń.
I to jest problem. Ilekroć wykonuję pracę właściwie, jestem w ciągłym trybie nauki. Tematy, takie jak zaawansowane połączenia MySQL, wymagają czasu na naukę, a następnie czasu na wdrożenie.
Nie pracuję dla firmy. Robię wszystko sam. Więc wyobrażam sobie, że gdybym pracował jako programista PHP dla firmy, osobne zespoły obsługiwałyby SQL.
Bycie solo to trudne. I czasem, chociaż moja wiedza jest zaawansowana, zadaję sobie pytanie, po pytaniu. Prawdopodobnie jestem bardzo dumny z mojej pracy. Ale gdybym musiał pracować dla firmy zajmującej się kompletnymi projektami, mogłem sobie wyobrazić projekty zajmujące trochę czasu, ponieważ musiałbym się uczyć coraz więcej, aby zaspokoić swoją dumę i upewnić się, że robię wszystko „poprawnie”.
Planuję dostać pracę po nowym roku. Potrzebuję bezpieczeństwa pracy. Dlatego zadaję to pytanie.
Jakich rad możesz udzielić w zakresie samorozwoju i samodoskonalenia? Czy powinienem się mniej martwić? A może szukasz pracy jako programista PHP, gdy nie będę bezpośrednio obsługiwał zapytań SQL?
źródło
Odpowiedzi:
Rada: Nie bój się uczyć nowych rzeczy - zrobiłeś dobry pierwszy krok, przyznając, że możesz zrobić lepiej, a następnie dołożyłeś starań, aby dowiedzieć się, jak możesz to zrobić lepiej. Tak, z góry zajmuje to więcej czasu, ale na dłuższą metę zazwyczaj warto. Teraz, gdy znasz CodeIgniter, możesz go używać w kolejnych projektach. Możesz umieścić go w swoim CV. Teraz, gdy wiesz, zaawansowane techniki SQL, twoje przyszłe projekty będą korzystać. Jeśli przestaniesz się uczyć, stagnujesz.
źródło
To, przez co przechodzisz, wydaje mi się całkiem normalne. W ten sposób pracujemy na naszym rzemiośle i jesteśmy coraz lepsi w tym, co robimy.
źródło
Biorąc pod uwagę powyższe, myślę, że warto skoncentrować się na poprawie umiejętności planowania z wyprzedzeniem, ustalania kolejki pracy i ustalania jej priorytetów, zarządzania czasem - takie rzeczy.
Naprawdę wydaje się, że to jedyne, czego brakuje w twoim nastawieniu. To, co nazywacie „sidetracking”, jest zasadniczo kolejnym dziełem („naucz się zaawansowanych połączeń”), które należy zaplanować, ustalić priorytety i umieścić w kolejce.
źródło
Być profesjonalistą w tej dziedzinie to nieustannie walczyć z własną nieadekwatnością. Zrób to od 8 do 5 od poniedziałku do piątku, może więcej, jeśli zbliża się termin, życzę miłego weekendu i wrócisz po więcej w poniedziałek. To jest praca.
Tworzenie oprogramowania wymaga pewnej pokory. Jeśli jesteś kimś, kto musi mieć rację i który musi udowodnić, że już wszystko wiedział, może to nie być dla ciebie pole.
Nie mogę pojąć, że nie uczę się czegoś każdego dnia. Nie sądzę, żebym chciał tę pracę.
źródło
Bycie solo jest trudne. Natomiast podczas pracy z zespołem programistów wszyscy uczą się od siebie nawzajem. W ramach zespołu zdobędziesz dużo wiedzy, pracując z innymi programistami i przy dużo mniejszym wysiłku niż wtedy, gdy próbujesz wszystko samemu wymyślić.
To powiedziawszy, jako programista, musisz zobowiązać się do ciągłego uczenia się. Niezależnie od tego, czy czytasz dokumentację nowych frameworków, czy książki na temat rozwoju, musisz nieustannie starać się, aby twoja wiedza była aktualna i stale się powiększała. Jednak bycie częścią zespołu może wyjaśnić, o którym obszarze należy się najwięcej dowiedzieć w danym momencie.
Jeśli chodzi o twój punkt widzenia na temat ponownego przeglądania starego kodu i przepisywania: Odkryłem, że mój własny kod zawsze reprezentuje to, co wiedziałem w momencie jego pisania. Wiele razy wracam do czegoś, co napisałem lata temu i klepię się w czoło, gdy widzę, jak wiele lepiej mogłem zrobić, biorąc pod uwagę to , co wiem teraz . Ale taka jest natura doświadczenia, które dostajesz, gdy potrzebujesz ...
Wreszcie, gdy tworzysz aplikację, zawsze musisz zachować rozsądek biznesowy, aby zdecydować, kiedy najlepiej skracać rogi, aby zakończyć szybciej, a kiedy trzeba poświęcić więcej czasu na nauczenie się czegoś nowego, co poprawiłoby wygląd i jakość aplikacji. W świecie oprogramowania jest wiele rzeczy do nauczenia się. Bez tego rodzaju rozsądnego osądu możesz przekręcić się, że uczysz się, myślisz, przeprojektowujesz, ale nigdy nic nie robisz.
źródło
Myślę, że twoje obawy są słuszne, ale nie powinieneś spać z tego powodu. Wierzę, że technologia jest dostarczana z następującym bagażem:
W końcu wydaje ci się, że zależy ci na tworzeniu wysokiej jakości oprogramowania, którego nie możesz się nauczyć . Wiedz, że musisz odróżnić budowanie rozwiązania wysokiej jakości od budowania idealnego rozwiązania. Wygląda na to, że jesteś taki jak ja i nigdy nie poczujesz, że jest idealny. Byłoby to bardziej niepokojące, gdybyś nie czuł się tak, jakbyś miał szansę poprawić siebie i swoją pracę.
Trudno być waletem we wszystkich transakcjach (mistrz żadnego), ale naprawdę musisz dowiedzieć się, jak zidentyfikować rzeczy, które są dla ciebie najbardziej interesujące i przydatne, i skupić się na nich. Zastanów się, jak najlepiej „zlecać” inną pracę innym osobom lub narzędziom .
źródło
Myślę, że nie musisz się martwić o „prawidłowe wykonanie”. Dąż do perfekcji, ale zdaj sobie sprawę, że naprawdę nie jest możliwe zaprojektowanie idealnego rozwiązania, tym bardziej za pierwszym razem. Fakt, że wystarczająco martwisz się, aby zrobić to poprawnie, aby zadać to pytanie, oznacza, że już jesteś na dobrej drodze.
Jeśli chodzi o twoją frustrację związaną z nauką nowych rzeczy, odkryłem, że praca w grupie oraz możliwość zadawania pytań i omawiania problemu z innymi programistami usunęły ból związany ze zrozumieniem, czego potrzebuję się nauczyć, i zastąpiła je radością z odkrywanie czegoś nowego i uczenie się, jak to zastosować.
Uwielbiam pisać oprogramowanie, ale czasem rzeczywiście trudno jest nie nauczyć się czegoś nowego, ale znaleźć to, czego dokładnie trzeba się nauczyć, aby móc osiągnąć to, co chcesz.
Z tego, co rozumiem, byłem w podobnej sytuacji do ciebie. Sam kodowanie czegoś może być zarówno frustrujące, jak i trudne, a czasem satysfakcjonujące i nieco zabawne.
Rób dokładnie to, co planujesz, znajdź pracę, w której będziesz częścią zespołu (i staraj się, aby znaleźć pracę w miejscu, które nie jest do bani). Praca z innymi ludźmi, którzy używają tych samych technologii i projektują to samo oprogramowanie, zwiększy Twoje zrozumienie i zastosowanie tych technologii i wzorców projektowych niemal z dnia na dzień.
Jeśli chodzi o umiejętność zrobienia czegoś dobrze za pierwszym razem, to skąd wiedziałbyś, że istnieje lepszy sposób, chyba że zrobiłeś to w określony sposób za pierwszym razem? Umiejętność projektowania oprogramowania często zależy w dużej mierze od doświadczenia. Joel Spolsky jest geniuszem programistycznym, ale jeśli przeczytasz wiele jego artykułów, zauważysz, że są one wynikiem zarówno doświadczenia, jak i inteligencji.
Jeśli chodzi o część SQL, jako programista .NET muszę jeszcze pracować gdziekolwiek, który miał dedykowanego programistę baz danych, wszyscy piszemy własny SQL, ale często są programiści, którzy są naprawdę dobrzy w SQL, którzy są gotowi ci pomóc z bardziej szczegółowymi rzeczami.
Brzmisz jak bystry facet, nie sądzę, że powinieneś być taki twardy dla siebie.
źródło
Jest to całkowicie normalne i nie należy się tym zbytnio przejmować. Musisz ciągle uczyć się nowych umiejętności, ale musisz także nauczyć się ustalać priorytety i zarządzać czasem. Musisz także uniknąć pułapki niepotrzebnej przebudowy.
Niedoświadczony programista często zostaje wciągnięty w pułapkę przebudowy:
W tej logice jest wiele błędów.
Kontemplowanie i planowanie przebudowy nigdy nie może zaszkodzić. Oznacza to, że zastanów się, w jaki sposób chcesz przepisać swój program, i spróbuj zidentyfikować wszelkie napotkane problemy. W takim przypadku zidentyfikujesz „zaawansowane sprzężenia SQL”, których teraz potrzebujesz, a następnie sprawdzisz, jak działają, i dowiesz się o nich.
Jeśli uważasz, że nie zidentyfikowałeś luki w wiedzy związanej z zaawansowanym łączeniem poprzez planowanie (bez rozpoczynania rozwoju), musisz poprawić swoje umiejętności planowania. Zastanów się, która część planu nie była wystarczająco szczegółowa. Powinieneś wprowadzić tyle szczegółów, ile to konieczne, dopóki nie upewnisz się, że cały system jest technicznie możliwy.
Takie podejście pozwoli Ci uczyć się z wyprzedzeniem .
Na koniec nauka w pracy jest normalną częścią programowania. Nie oznacza to jednak, że zaczynasz zadanie, a potem zdajesz sobie sprawę, że musisz przestać na tydzień, aby dowiedzieć się, powiedzmy, podstawowego HTML. Możesz zatrzymać się na kilka godzin, aby dowiedzieć się o czymś, ale twój pracodawca płaci tylko za wykonanie pracy. Ucz się efektywnie - nie czytaj wstępu i historii, tylko jak to działa i jak pasuje do twojego programu. Jeśli musisz przestać pracować kilka dni, aby dowiedzieć się, jak ukończyć część programu, robisz to źle.
źródło
Możesz myśleć, że nauka nowych technologii i problemów to czas. Ale nie panikuj. To normalne. Nauczenie się jest częścią twojej praktyki jako programisty ... inaczej wszyscy utknęlibyśmy w COBOL.
Niezależni specjaliści odpowiednio dostosowują swoje prowizje, a okresy nauki to między innymi coś, co należy uwzględnić w swoich szacunkach czasowych. Następnym razem, gdy zdecydujesz się wprowadzić nową platformę, upewnij się, że planujesz wystarczająco dużo czasu, aby się jej nauczyć.
źródło
Nie, nie ma i myślę, że to jest przyczyną twojego problemu. Wydaje mi się, że jesteś zbyt zajęty martwieniem się o robienie rzeczy „poprawnie”, ponieważ jako indywidualny programista nie widzisz, jak działają inni. Ale poprawnie według kogo? Kim jest ta magiczna osoba, która może stwierdzić, że to, co robisz, jest „prawidłowe”? Weź 100 najlepszych programistów na świecie, a gwarantuję, że dwóch nie zgodzi się w 100% na każdy temat programowania.
Najważniejsze jest to, czy Twoi klienci są zadowoleni. Jeśli tworzone przez Ciebie programy rozwiązują problemy, które powinny, i robiąc to w opłacalny sposób, robisz to poprawnie. Na przykład używanie kodu nie jest z natury bardziej poprawne niż używanie własnego frameworka. Następstwem tego jest to, że jeśli produkujesz kupę bzdur, robisz to „źle” bez względu na zastosowane procesy lub „najlepsze praktyki”.
To, że przeglądasz kod i widzisz sposoby jego ulepszenia, jest normalną częścią procesu programowania. To nie jest znak, że nie robisz rzeczy „poprawnie”. To znak, że poświęcasz się uczeniu i doskonaleniu. Ze wszystkiego, co widzę w twoim poście, nie masz problemu.
Teraz idź skopać * * *
źródło