Walczy jako programista. Potrzebujesz porady [zamknięte]


20

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?


54
jeśli nie chcesz ciągle się uczyć, jesteś w złym polu

6
@JamesGuvnaJeffery: jeśli nie pozwolą (w ogóle) na naukę podczas projektu, nie chciałbym tam pracować, ponieważ jako programista przestałbym się doskonalić.
Marjan Venema

3
praca polega na uczeniu się, nie dają ci tego magicznego czasu wolnego na naukę, tak naprawdę to robią, nazywa się to „twoim czasem osobistym”. Nie nazywają tego „szkoleniem zawodowym” bez powodu. Jeśli nie czujesz się komfortowo będąc samodzielnie inicjowanym uczniem i cały czas ucząc się za darmo, jak powiedziałem, prawdopodobnie jesteś w złym polu.

5
Stary kod ma ssać. Nie zabijaj się za to; po prostu spróbuj poprawić w miarę upływu czasu. Ponowne napisanie działającego projektu nie ma praktycznie żadnego sensu. Klienci nie będą za to dodatkowo płacić. codinghorror.com/blog/2006/10/…
Job

2
Nie rozumiesz, co mówię, praca w firmie jest dokładnie PRZECIWKO tego, co lubisz robić. Pracuje nad czyimś harmonogramem, wykorzystując to, co dyktuje i jak dyktuje to, bez kompromisów i bez czasu na studiowanie nowych rzeczy na swój czas i bez czasu na wdrożenie rzeczy w nowych ekscytujących rzeczach, których uczysz się w czasie osobistym. Taka jest rzeczywistość bycia deweloperem oprogramowania korporacyjnego. Wątpię, byś był tak oddany środowisku korporacyjnemu, jak twierdzisz, że jesteś w swoim eksperymentalnym stylu badań i rozwoju, do którego przywykłeś.

Odpowiedzi:


33

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.


21

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.


10

... 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 ...

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.


Dzięki @gnat. Naprawdę doceniam te pozytywne odpowiedzi. Mogę zdecydowanie się z tobą zgodzić co do tego, co powiedziałeś.
James Guvna Jeffery

9

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ę.


Z mojego doświadczenia wynika, że ​​w porządku jest być kimś, kto musi mieć rację, o ile możesz mieć niewydolność żołądka. Rzucam się na wszystko, co nie jest idealne. Dlatego robię rzeczy lepiej z upływem czasu.
Tom Anderson,

To paradoks, prawda? Hubris jest jedną z trzech zalet programisty. Ale z mojego doświadczenia wynika, że ​​„kompulsywne dążenie do udowodnienia, że ​​jestem mądry, pokazując, że już wszystko wiedziałem, zanim się tego nauczyłem”, to tendencja, z której programiści nowicjuszy albo sobie odpuszczają, albo nie wytrzymują długo na tym polu.
Dan Ray

Może zamiast tego puścisz przepustnicę? Na szczęście dawno temu nauczyłem się głosić, że wiedziałem rzeczy, których nie znałem. Nadal jednak nienawidzę przyznać się do niewiedzy; potrzeba zlikwidowania luki między tym, co wiem, a tym, co chcę móc powiedzieć, że wiem, jest dla mnie bardzo ważnym czynnikiem. Niekoniecznie dla wszystkich!
Tom Anderson,

Nie wiem, Tom. Wydaje mi się, że moment zawstydzenia, że ​​jeszcze czegoś nie wiesz, to moment, który możesz poświęcić na naukę tego. Lubię wiedzieć tyle samo, co następny facet, ale nie mam żadnego problemu, mówiąc „nie wiem”.
Dan Ray

6

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.


+1 za drugie zdanie. Nauczyłem się więcej od moich współpracowników, pracujących w wielu różnych organizacjach, niż nauczyłem się czytając (książki lub Internet). To brzmi z twojego pytania, jakbyś przez jakiś czas pracował w zespole, zrobiłby ci świat dobrego.
Dawood mówi o przywróceniu Moniki

3

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:

  • Musisz stale uczyć się nowych rzeczy. Albo uczysz się to kochać, albo nie.
  • Jest o wiele więcej rzeczy, które będziesz chciał opanować, niż ktokolwiek mógłby wiedzieć.
  • Będziesz rozwijać umiejętności podczas projektu, który chciałbyś mieć podczas projektu.
  • W rezultacie zawsze będziesz chciał wrócić i ponownie wykonać ten projekt. Tak trudno jest wydać coś, co może być lepsze.

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 .


2

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.


1

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:

Nie napisałem tego programu idealnie i teraz muszę go rozszerzyć lub zmienić. Zmodyfikowanie istniejącego kodu będzie wymagało dużo pracy ze względu na sposób, w jaki go napisałem. Od tego czasu nauczyłem się o wiele więcej, jestem pewien, że najlepszą rzeczą byłoby przepisanie całego programu. Jestem pewien, że tym razem mógłbym napisać to znacznie lepiej.

W tej logice jest wiele błędów.

  • modyfikowanie lub dodawanie do istniejącego kodu wymaga dużo pracy , ale czy nie będzie o wiele więcej pracy, aby przepisać wszystko?
  • jeśli przepiszesz wszystko, istnieje spora szansa, że ​​zrobisz nowe błędy i zajmie to więcej czasu, niż myślisz (szczególnie jeśli nie masz doświadczenia). Zastanawiasz się nad wszystkim, co jest związane z pisaniem systemu? (pamiętaj, ile czasu zajęło ci to za pierwszym razem)
  • wiele się nauczyłeś, odkąd napisałeś program (możesz być w stanie go ulepszyć), ale dowiesz się także więcej w przyszłym miesiącu / roku. Co sprawia, że ​​myślisz, że nie będziesz chciał ponownie wszystkiego pisać w przyszłości?
  • ostatecznym sprawdzianem programu jest to, czy działa . Nie masz nic lepszego do roboty?

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.


1

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ć.


0

Istnieje jednak różnica między „wykonaniem pracy” a „prawidłowym wykonaniem pracy”.

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ć * * *


Nie zgadzam się z tym. Istnieją sposoby programowania, które są o wiele łatwiejsze w utrzymaniu i czytelne niż inne, i są stosy książek poświęconych ulepszaniu programisty, aby mogli pisać lepszy kod.
TehShrike,

Dziękuję @grandmasterB. TehShrike i odniesienie do tych książek?
James Guvna Jeffery,

3
nikt nie zgodzi się w 100% na każdy temat programowania ” - może, ale co najmniej 80% zgodzi się na co najmniej 80% tematów programowania. To jest profesjonalny konsensus. Nie ma absolutnych „praw”, ale istnieją najlepsze praktyki i warto je poznać.
Kirk Broadhurst,

1
Wszystko dobrze i dobrze, ale jeśli twój program nie rozwiązuje problemu, powinien to zrobić, najlepsze praktyki, czy nie, to zostało to zrobione niepoprawnie. Istnieje jeden obiektywny sposób stwierdzenia, czy program został wykonany poprawnie - jeśli klient przekaże zielone kartki papieru lub inną płatność w zamian za pracę. Każdy inny środek to po prostu opinia.
GrandmasterB,

2
A kiedy twój klient uzna, że ​​twoja wycena jest zbyt wygórowana i znajdzie innego eksperta, który potwierdzi te uczucia, ponieważ został źle zakodowany, nie masz pracy.
JeffO
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.