Jestem rok od ukończenia uniwersytetu i naprawdę nie mogę się doczekać rozwiązania praktycznych problemów. Zwłaszcza nietrywialne, wymagające trochę badań i dużo myślenia.
Ale jednocześnie jest to mój największy strach - napotkać problem, którego nie jestem w stanie rozwiązać, bez względu na to, jak bardzo się staram. Z naciskiem na dostarczanie kodu w sprawie zbliżających się terminów tuż za rogiem, wygląda to trochę przerażająco, gdy ogląda się go z bezpiecznych placów zabaw na uniwersytecie (najgorsze, co może się zdarzyć, to konieczność powtórzenia kursu lub egzaminu).
Więc dla tych, którzy pracują w branży od dłuższego czasu, co by się stało, gdyby ktoś kazał ci rozwiązać problem, którego nie możesz? Czy to się stało, a jeśli tak, co się stało? Czy po prostu zostawili to i powiedzieli „No cóż, zgadnij, że możemy zrobić coś innego”? Czy były jakieś konsekwencje? Czy zostałeś upomniany, czy nawet zwolniony?
źródło
Odpowiedzi:
Po pierwsze, twój strach jest bardzo zdrowy i normalny. Oto moje rozmyślania po około 15 latach w branży oprogramowania.
Oto kilka pytań, które możesz sobie zadać:
1) Przede wszystkim upewnij się, że rozumiesz problem. Nie ma głupich pytań. Czy rozumiesz, o co pyta Twój klient / szef, a czego potrzebuje?
2) To się stanie. „Zbuduj mi most do jutra” . Upewnij się, że wiesz, że problem jest nierozwiązywalny w twoich ograniczeniach. Twój klient / szef może być elastyczny w zakresie czasu / budżetu i można je modyfikować, aby dać ci więcej czasu / budżetu.
3) Jeśli problem jest zrozumiały, a ograniczenia są w granicach rozsądku, i istnieje technologia, która może rozwiązać problem, ale po prostu nie wiesz wystarczająco ... po to
StackOverflow
i do tego służy Internet. Najpierw upewnij się, że wykonałeś swoje badania. Spróbuj zadawać wyraźne pytania, które mają wymierne odpowiedzi. Zapytaj swoich rówieśników. Udaj się na sesję projektową.4) Jest to wariant odpowiedzi nr 2. Wygląda na to, że twój klient / szef pyta o niemożliwe. Zrobić rozeznanie. Nigdy nie mów, że problemu nie da się rozwiązać, chyba że wiesz dokładnie, dlaczego i możesz to wyjaśnić.
5) ROI oznacza zwrot z inwestycji. Odnosi się to do inwestycji w czasie. Twój czas!. Czy problem jest wystarczająco ważny do rozwiązania, aby zagwarantować, ile czasu zajmie ci badanie i rozwiązanie problemu. Porozmawiaj o tym ze swoim klientem / szefem
6) Czy to prawdziwy problem? Klienci często rozumieją, czego chcą, ale niekoniecznie rozumieją, czego potrzebują. Spróbuj zrozumieć, czego tak naprawdę potrzebuje Twój Klient / Szef i przedyskutuj to z nimi.
Mam nadzieję, że te wytyczne ci pomogą.
źródło
Dwie rzeczy do zapamiętania, jeśli utkniesz z pozornie nierozwiązywalnym problemem:
Poinformuj innych ludzi, że utkniesz tak szybko, jak to możliwe. Pomoże im to dostosować szacunek na czas, zanim będzie za późno.
Jeśli widzisz, że jeden ze sposobów rozwiązania problemu nie działa - upuść go, zanim zmarnujesz zbyt dużo czasu. Poproś o pomoc lub wypróbuj inne podejście. Nie chodzi o to, by udowodnić sobie, że jesteś twardy i bystry, ale o załatwienie sprawy.
źródło
Idę do StackOverflow ;)
Ale wszyscy żartują na bok, nie bój się nieznanego. Cała Twoja kariera stanie w obliczu nieznanego, ponieważ jeśli już go rozwiązałeś, następnym razem nie będzie problemu.
źródło
Będę musiał przejść z prostą odpowiedzią: proszę o pomoc. Tak jak inni czasami proszą mnie o pomoc, kiedy utkną w próbie znalezienia rozwiązania.
Edycja: Powinienem wspomnieć, że często znajduję rozwiązanie po prostu opisując problem współpracownikowi, a czasem nawet, gdy zaczynam publikować pytanie na stronach takich jak StackOverflow.
źródło
Spójrz na to z różnych punktów widzenia
Natknąłem się na to wiele razy, zwykle dzieje się tak:
Wreszcie decydujesz się na to, czego nie chcesz robić ->
„The Dirty Hack”
Działa, ale czujesz się brudny ...
źródło
Zwykle naprawiam to przez kogoś mądrzejszego ode mnie. Robi i jest moim szefem. Czuję się głupio. Idziemy dalej.
źródło
To zależy od przyczyny, dla której nie możesz ...
logicznie niemożliwe: przedyskutuj to z tym, który napisał wymagania, być może istnieje nieporozumienie. Przykład: w pewnym momencie specyfikacja mówi, że aplikacja musi wyglądać i działać natywnie na wszystkich platformach (Windows / Linux / Mac), aw innym miejscu mówi, że program musi wyglądać identycznie na wszystkich platformach
technicznie niemożliwe: dokonaj ponownej oceny narzędzi, z którymi pracujesz, być może nie są one odpowiednie. Omów problem z kolegami i kierownikiem projektu. Przykład: twarde wymagania w czasie rzeczywistym w środowisku, w którym zbieranie śmieci może zatrzymać wykonywanie na czas nieokreślony
niewystarczająca wydajność: być może używasz niewłaściwego algorytmu, a może problem jest zbyt trudny (np. trudny NP) i wymagania tego nie uwzględniają. Ponownie oceń używany algorytm, być może istnieje szybszy sposób. Omów problem z kolegami i kierownikiem projektu. Zastanów się nad przejściem na wystarczająco dobrą heurystykę zamiast idealnego wyniku. Przykład: optymalizacja ścieżki z dziesiątkami lub nawet setkami węzłów
po prostu nie wiesz, jak to zrobić: zapytaj znajomych, zapytaj o przepływ stosu, przeszukaj internet. Skontaktuj się z obsługą używanego narzędzia / biblioteki lib. Omów to z kierownikiem projektu.
powinien działać, ale nie działa i nie masz pojęcia, dlaczego: Przebuduj program, aby uczynić go bardziej testowalnym. Biorąc pod uwagę warunki wyścigowe, często są przyczyną trudnych do znalezienia błędów. Poproś rówieśników o pomoc, czworo oczu widzi więcej niż dwoje. Sprawdź w Internecie znane błędy w używanych narzędziach / bibliotekach.
źródło
Myślę, że inni ludzie ładnie wskazują, jak sobie z tym poradzić w profesjonalny sposób. Chciałbym powiedzieć, jak radzić sobie z osobistym uczuciem, takim jak frustracja, strach.
Podsumowując, będziesz DOKŁADNY, nawet jeśli nie rozwiążesz problemów w odpowiednim czasie. Życie toczy się dalej.
Czasami harmonogram był przesuwany. Projekt zakończy się sukcesem lub zakończy się niepowodzeniem. Możesz zostać zwolniony, a następnie mieć świetną robotę. Po prostu nigdy nie wiesz.
Nie zrozum mnie źle. Nie oznacza to, że problem jest w porządku. Wszystko, co możemy zrobić, to dać z siebie wszystko i pozwolić temu odejść.
Czasami myślę, że frustracja, lęk przed nierozwiązaniem problemu to moje życie jako przeciętnego programisty.
źródło
Nie jestem pewien, czy powiedziałbym, że nie mogłem rozwiązać problemu, ale zdarzały się przypadki, w których zrezygnowałem z próby rozwiązania problemu. Po spędzeniu wielu godzin na próbach naprawienia błędu lub wdrożenia jakiejś funkcji, której nie mam pojęcia, jak to zrobić, mogę powiedzieć komuś z mojego zespołu, kierownika zespołu lub kierownika: „Utknąłem w tym. chcesz żebym zrobił?" żeby wiedzieli, gdzie jestem. Mogliby powiedzieć: „Trzymaj się tego, myślimy, że to zrozumiesz” lub „Przejdź do czegoś innego, co nie jest tak ważne” lub kilka innych rzeczy, a wtedy będę wiedział, co powinienem zrobić.
Miałem błędy, których nie rozwiązałem, i pewne funkcje, które nie zostały wykonane, jasne. Chociaż mogę spróbować coś zrobić, nie wszystko jest w mojej mocy, aby rozwiązać w rozsądnym czasie. Kluczową kwestią jest komunikacja, aby przełożeni wiedzieli, gdzie jesteś.
To powiedziawszy, kilkakrotnie spotkałem się z pewnymi wyjątkowymi okolicznościami:
Pracując w dużym kanadyjskim banku w Toronto, zostałbym poproszony o wykonanie wszelkiego rodzaju rzeczy, których nie wiedziałem, kiedy otrzymałem to zadanie. Na przykład poproszono mnie o przetestowanie tej metody zabezpieczania laptopów, w których klawisze „Esc” i „Enter” zostały zamienione podczas uruchamiania, a przy odpowiedniej sekwencji klawiszy laptop byłby ponownie użyteczny, co wydawało się dziwne na zewnątrz: „Czy to zadziała? Skąd mam wiedzieć, że użytkownicy będą lub nie będą w porządku?” Były też inne zadania, które albo po prostu nie miałem sprzętu ani innych zasobów, aby to zrobić. Jednocześnie było to raczej edukacyjne, ponieważ dało mi to wiele rzeczy do odnotowania w każdej przyszłej sytuacji zawodowej, aby zapobiec kłopotom. Rzeczy takie jak zapewnienie, kiedy otrzymam zapłatę, jak śledzony jest mój czas,
Pracując u dostawcy usług aplikacyjnych w Calgary, dostałem ten projekt próby stworzenia kopii innej witryny w ramach naszej wewnętrznej aplikacji, którą sprzedawaliśmy jako usługę. Kluczową kwestią tutaj jest to, że nie otrzymałem harmonogramu ani sugestii, co do zrobienia w pierwszej kolejności, tylko ogólne badania, a miesiąc później zostałem poproszony o prezentację, ponieważ miałem złą reakcję na niektóre leki przeciwbólowe. Ta reakcja trwała tydzień, kiedy nagle zacząłem pracę, a następnie w następnym tygodniu poszedłem na wydarzenie Microsoftu, które było jakby ostatnią słomką, ponieważ następnego dnia zostałem zwolniony. Warto tu zauważyć, że miałem raczej słabe relacje z moim szefem, ponieważ za każdym razem, gdy zbliżał się do mojej okolicy, natychmiast pomyślałem: „A teraz co jest nie tak?”.
źródło
Jak powiedzieli inni, komunikacja ma kluczowe znaczenie - informowanie ludzi (kto będzie na nie wpływał), kiedy utkniesz: twój szef, członkowie zespołu, klienci itp.
Ostry współpracownik wpomniał mi kiedyś, że sukces ma swoje korzenie w dwóch rzeczach:
Wydaje mi się, że dobre relacje są funkcją dobrej komunikacji i stawiania oczekiwań z góry.
źródło
Przestrzegam zasady Polya:
Piękno tej zasady polega na tym, że w pewnym momencie pojawi się problem, który będzie wystarczająco mały i że będziesz w stanie go rozwiązać, co, miejmy nadzieję, jeśli zrobiłeś wszystko dobrze, pozwoli ci na rozwiązanie pierwotnego problemu. Ta zasada jeszcze mnie nie zawiodła.
źródło
Odpowiedzi „ szukaj pomocy ” są zdecydowanie poprawne. Jest bardzo mało prawdopodobne, że jesteś pierwszą osobą, która kiedykolwiek napotka konkretny problem.
Ale jako eksperyment, co jeśli nie ma pomocy? Co jeśli musisz rozwiązać problem samodzielnie? Najważniejszą umiejętnością rozwiązywania problemów jest umiejętność rozpoznawania i kwestionowania własnych założeń . Jeśli potrafisz wyliczyć swoje założenia dotyczące problemu po kolei i wyeliminować je kolejno, w końcu dojdziesz do błędnego założenia i w rezultacie pojawią się nowe możliwości rozwiązania.
(Nawiasem mówiąc, jest to również najlepsze podejście, gdy nie widzisz odpowiedzi na problem, który pojawia się podczas rozmowy kwalifikacyjnej. Ustnie wypisz swoje założenia i ustal, które z nich jest błędne, a następnie ponownie zaatakuj problem. Prawie wszystkie „podstępne pytania” oparte są na naturalnych, ale błędnych założeniach).
źródło
Proszenie o pomoc jest naprawdę najlepszą odpowiedzią, ale tutaj jest trochę więcej, które mogą być przydatne.
Tak, zdarzyło mi się i nie, nigdy nie dostałem za to nagany ani zwolnienia, ponieważ ...
W branży chodzi o to, czy rozwiążesz problemy na czas i w ramach budżetu, a porządni menedżerowie rozumieją, że nie zawsze jest to możliwe.
To, co naprawdę się dzieje, mówi kierownikowi: „Chciałbym, żebyś zrobił X, co według ciebie zajmie?” I możesz udzielić wielu odpowiedzi. Do dobrych należą:
Zadaniem menedżera jest decyzja, czy i jak kontynuować. Jeśli zdecydują się kontynuować, Twoim zadaniem jest spełnienie twoich szacunków lub powiadomienie kierownika o przeszkodzie. Tak długo, jak to zrobisz, w rozsądnym towarzystwie nie będzie żadnych negatywnych konsekwencji.
Oczywiście są też nierozsądne firmy, które nie dają ci czasu ani środków na wykonanie pracy. Pracowałem nad niektórymi z nich i wszystkim powierzono problemy, których nie można rozwiązać w ramach ograniczeń firmy. Jeden z nich zwolnił około 98% personelu programistycznego w ciągu ośmiu miesięcy, co z pewnością było konsekwencją, ale nie było to osobiście skierowane na mnie i nadal uważam mojego szefa i jego szefa za dobrych przyjaciół.
źródło
Istnieje wiele różnych rodzajów problemów, na które napotkasz problemy, a wiele z nich ma różne sposoby radzenia sobie z nimi.
Jednym z rodzajów problemów jest implementacja czegoś, czego wcześniej nie widziałeś, takiego jak dziwny dźwiękowy interfejs API lub coś takiego. W tym przypadku poważnie zapytam o SO.
Innym jest bardzo duży problem do rozwiązania. Do tego typu problemu można podejść iteracyjnie. Mówią ci „Implement Humongous”. Przejrzyj go i napisz tyle kroków, ile możesz wymyślić. Następnie dzielisz skomplikowane kroki na mniejsze. Gdy jesteś zmuszony myśleć o mniejszych krokach, stają się one wyraźniejsze. Jeśli napotkasz problemy techniczne, wypróbuj testową implementację i zapytaj tutaj, jeśli to konieczne.
Jednym z bardziej irytujących problemów są źle określone żądania. Chcą tylko czegoś, co robi „x” i nie mówią ci, jak należy to zrobić. Dla nich dobrym podejściem jest prototypowanie interfejsu (zwykle GUI) i pozwolenie komuś z niego zagrać.
Są też ograniczenia czasowe, których nie można spełnić. Często wiąże się to ze modyfikacją oczekiwań i dostarczeniem funkcjonalnych prototypów.
Zazwyczaj znajdziesz drogę w ten czy inny sposób. To przerażające, ale kiedy już tam jesteś, prawie zawsze możesz znaleźć drogę.
Najlepszym rozwiązaniem może być po prostu namalowanie słowa „Don't Panic” na zewnętrznej powierzchni laptopa. I nie zapomnij swojego ręcznika.
źródło
Moja sekwencja rozwiązywania problemów (każdy następny test jest wykonywany tylko wtedy, gdy poprzedni nie działał):
Paskudne problemy rozwiązuje się w krokach 5-6.
Naprawdę bardzo złe problemy zwykle wymagają trochę czasu (krok 7 jest rozwiązaniem większości problemów „wydaje się, że nic nie mogę zrobić”). I mam na myśli to - przejdź do innego zadania na resztę dnia i spróbuj rozwiązać problem z samego rana. To czyni cuda.
I dopiero wtedy następuje krok 8.
źródło
Nie słyszałem o takich wydarzeniach. Przede wszystkim nigdy nie pojawia się problem, którego w ogóle nie można rozwiązać. Problem może być trudny i jego rozwiązanie może zająć trochę czasu. Gdy pojawi się problem, będziesz musiał powiedzieć, że jest to czas, którego będę potrzebować. Jeśli w swoich badaniach uważasz, że tego problemu naprawdę nie da się rozwiązać, musisz podnieść flagę i powiedzieć swojemu kierownikowi, że ten problem zajmie więcej czasu lub jest naprawdę trudny do rozwiązania. Chodzi o harmonogram. Jeśli coś obiecujesz i nie będziesz w stanie dostarczyć, to jest problem. Ale jeśli nadal mówisz o swoim statusie i obawach, to kierownik musi się tym zająć. Powinien przekierować cię do właściwej osoby, która może pomóc lub dostosować harmonogram.
źródło
Jest tu kilka świetnych porad! Moje dwa centy są warte; Nie daj się przytłoczyć WIELKIEMU problemowi, nie zapominaj, że ekscytującą i trudną częścią rozwiązania problemu jest rozbicie go na szereg wykonalnych i, co ważniejsze, zrozumiałych pod-problemów, które z kolei rozkładają się na mniejsze pod-problemy. Każdy dobry programista zwykle robi to z minuty na minutę, podczas tworzenia kodu (używając funkcji, metod, podprogramów itp., Aby zmniejszyć ogólną złożoność sekcji kodu), a ta metodologia zwykle ma zastosowanie do każdego WIELKIEGO problemu twarz w życiu (nie tylko w pracy).
źródło
Oczywiście zależy to od konkretnego problemu. Ale odpowiedź może być dowolna z:
Numer 3 może wymagać zwolnienia od problemu i ponownej wizyty tygodnie lub miesiące później. To często pomaga.
źródło
W moim doświadczeniu czasami pojawia się problem, którego nie można rozwiązać, przynajmniej w ograniczeniu czasowym. Poszukiwanie pomocy tak szybko, jak to możliwe, po pewnym wysiłku polegającym na rozwiązaniu problemu, zawiodło .
Pamiętaj o ogólnej zasadzie: zawsze patrz na powód, dla którego szef cię zatrudnia. Rób wszystko, co uważasz, że możesz zrobić, aby uzyskać najlepszy wynik pracy, a czasem jest to raport wczesnego niepowodzenia (znacznie lepszy niż późny).
Krótko mówiąc, jeśli uważasz, że możesz znaleźć rozwiązanie, możesz spróbować, ale podaj swojemu szefowi ocenę ryzyka i czasu. To ich problem.
źródło
Jeśli nawet 100-milionowe projekty mogą zakończyć się niepowodzeniem, nawet z doświadczonymi ludźmi, nie powinieneś się martwić, że poniesiesz porażkę, ponieważ nadal jesteś studentem. Miałem problem, nad którym pracowałem i odkryłem, że jeśli utkniesz w tym - musisz zarejestrować każdą próbę jego rozwiązania.
To pomaga:
źródło
Z mojego doświadczenia wynika, że świeżego absolwenta nie wrzuca się w głąb. Zamiast tego prawdopodobnie będziesz częścią zespołu, który obejmuje również doświadczonych programistów.
Moja rada brzmi: skorzystaj z nich. Jeśli nie masz pewności, jak rozwiązać problem lub jeśli chcesz wiedzieć, czy Twoje rozwiązanie zmierza we właściwym kierunku, omów to z nimi. A jeśli czujesz, że gdzieś utknął, złap jednego z doświadczonych facetów i wyjaśnij swój problem i poproś o pomoc.
Najczęściej samo wyjaśnienie problemu ujawni rozwiązanie, a wyjaśnienie rozwiązania może również ujawnić wady.
źródło
Często dzieje się tak, ponieważ problem nie został zdefiniowany poprawnie i dokładnie. Być może próbujesz rozwiązać z góry założone rozwiązanie zamiast samego problemu.
Problemem jest tylko to, co obserwujesz, a nie to, co sobie wyobrażasz.
„Mój cholerny samochód nie chce się uruchomić” to problem. "Batteria jest wyczerpana." jest z góry przyjętym rozwiązaniem problemu z uruchomieniem samochodu. Nawet testowanie baterii nie dowodzi, że jest to jedyna przyczyna problemu. Chyba że faktycznie naładowałeś lub wymieniłeś akumulator i nie uruchomiłeś samochodu, nie masz dowodu, że przyczyną problemu jest akumulator.
Uprość i nadal upraszczaj. Rozbij go na małe części. Jeśli nie możesz rozwiązać tych części, zniszcz je. Poczujesz się lepiej. Następnie podziel go na różne małe części. Każda z tych części musi być zjawiskiem obserwowalnym.
źródło