Największy błąd, jaki kiedykolwiek popełniłeś [zamknięty]


33

Podobne do pytania, które przeczytałem na temat błędu serwera, jaki jest największy błąd, jaki kiedykolwiek popełniłeś na stanowisku związanym z IT. Kilka przykładów od znajomych:

Musiałem trochę popracować na stronie produkcyjnej, więc postanowiłem skopiować bazę danych na żywo do strony beta. Dość standardowy, ale kiedy wszedłem na stronę beta, wciąż wyciągałem nieaktualne informacje. OOPS! Skopiowałem bazę danych beta na stronę na żywo! Bogu dzięki za kopie zapasowe.

Dla mnie stworzyłem formularz wydarzenia, które miało się odbyć w określonym przedziale czasowym. Uczestnicy wypełniali formularz, aby mieć szansę na wygraną, a my wysyłaliśmy organizatorom wydarzenia plik CSV z bazy danych. Wszedłem do bazy danych i znalazłem TYLKO 1 WEJŚCIE, MOJE. Po zbadaniu wygląda na to, że zapomniałem klucza automatycznego przyrostu, a ze względu na konfigurację serwera nie było sposobu na odzyskanie utraconych danych.

Wiem, że to pytanie jest podobne do tych z Stack Overflow, ale te, które znalazłem, wydają się otrzymywać ogólne odpowiedzi zamiast faktycznych historii :)

Jaki jest największy błąd / błąd kodowania w historii…


6
pytania Guinnessa!
Junior M

Dlaczego o dlaczego to pytanie zostało zamknięte? Czuję potrzebę dodania własnego dużego błędu: zlikwidowałem witrynę LIVE na trzy godziny (tj. 500 status HTTP) po wdrożeniu do produkcji, po tym, jak powiedziano mi, że NIE MOŻNA WDRAŻAĆ PRODUKCJI. Co najgorsze, próbowałem ukryć błąd, ale klient zauważył i nie wydawał się bardzo szczęśliwy.
Maria Ines Parnisari

Łatwy dla mnie. Wypłacono wypłaty z inwestycji, ale dwukrotnie przeliczono na centy. Wypłacono 3 miliony zamiast 30k. Drugie miejsce - zły SQL gdzie klauzula. Powiadomił 4 tys. Osób, że ich inwestycje o wartości 1–10 USD wzrosły o 1800 USD w ciągu nocy. Oczywiście niektórzy z tych klientów poszli i wydali pieniądze. Odzyskane dość szybko finansowo. Złamane zaufanie i poczucie winy tak naprawdę nigdy nie zniknęły. Jak odzyskać: weź odpowiedzialność. Przyznaj się do błędu. Nie obwiniaj niczego innego, nawet jeśli były to czynniki przyczyniające się. Spotkało się to ze zrozumieniem i wysiłkiem zespołu, aby to naprawić. Klient docenił szczerość.
Reasurria,

Odpowiedzi:


54

Wydanie UPDATE SQL ze „złą” klauzulą ​​WHERE, która pasowała do wszystkiego.

Wyciągnięta lekcja: Zawsze najpierw wystaw WYBIERZ, aby zobaczyć, co zostanie zmienione.


15
Lub ustaw autocommit na wartość false, aby zobaczyć, ile wierszy zostanie zmienionych.
Jewgienij Brikman

2
Och, zrobiłem to. Bardzo nieprzyjemne ...
glenatron,

4
Haha, myślę, że każdy, kto ma trochę SQL na swoim koncie, zrobił to kiedyś, w tym ja
billy.bob

3
Właśnie dlatego najpierw należy wykonać aktualizację na dev! Brak poprawek bezpośrednio do prod. I bądź bardzo wdzięczny za tabele audytu, jeśli je masz, gdy to robisz.
HLGEM,

13
Zrobiłem to raz, aby zresetować czyjeś hasło. Po ustawieniu hasła dla wszystkich na to samo, po prostu powiedziałem mojemu szefowi, że wsparcie techniczne będzie odbierać dużo połączeń telefonicznych i że powinniśmy powiedzieć dzwoniącemu, że musimy zmienić hasło ze względów bezpieczeństwa.
Barry Brown

36

Literówki

Spędziłem trzy solidne dni na tej części:

if($func == "remove")
{
    $p->comments[$index]->removed = true;
    $p->save();
}
else if($func == "approve");
{
    $p->comments[$index]->approved = true;
    $p->comments[$index]->removed = false;
    $p->save();
}

Widzisz błąd? To średnik na końcu else if. Nie mogłem zrozumieć, dlaczego moje usunięte komentarze nie były usuwane. Zapamiętane w bazie danych żądanie AJAX, którego używałem, zmienne POST, zawierało error_logi alerts wszędzie . Skończyło się przepisywanie metody i zadziałało. Potem zrobiłem diff z oryginalną wersją i zauważyłem średnik.

Literówki są najtrudniejsze do wyśledzenia w języku, który nie jest skompilowany ani wstępnie sprawdzony przez coś. Nawet takie błędy byłyby trudne w skompilowanym języku. Zmień ==na =i nagle masz zadanie w środku if.


8
Oto, gdzie narzędzia takie jak Resharper mogą się naprawdę spłacić - uwidoczniłoby to jako ostrzeżenie i zachęciło cię do usunięcia.
Yaakov Ellis,

24
Czy tytuł jest (zamierzonym) kalamburem? : o
Agos,

3
@Rogue Coder: różnica między pojedynczymi i podwójnymi cudzysłowami jest znikomo mała. Martwienie się o to nadużywaniem czasu w cyklach mózgowych. Zobacz test na dole phpbench.com
Joeri Sebrechts,

2
@ back2dos: Errr ... racja. Czy więc zalecasz porzucenie wszystkich wymienionych języków na rzecz haXe? Coś, co pojawiło się po raz pierwszy w 2005 roku? Śmiało z tym.
Josh K

10
Dziękuję za argument na rzecz stylu One True Brace. +1
eswald

28

Myślenie, że programowanie polega głównie na tworzeniu od podstaw fajnych nowych rzeczy.


1
Kiedy zaczynałem, ja też miałem tę myśl. Potem dowiedziałem się, że utrzymanie innych ludzi jest o wiele większe niż cokolwiek innego. Dlatego próbuję teraz napisać najlepszy kod (z komentarzami), jaki mogę.

2
Wciąż jest mnóstwo nowego kodu do napisania. Wiele projektów typu open source wymaga kodowania od zera, które implementuje tę samą funkcjonalność co system zamknięty.
PP.

23

Moim największym błędem było myślenie, że programowanie to łatwe pieniądze ...


27
Jeśli zacząłeś programować za te pieniądze, powinieneś dostać nową karierę. Nie chodzi o to, że pieniędzy tam nie ma, ale potrzebujesz obsesyjnej miłości do programowania, którą mają prawdziwi programiści, albo szybko się
wypalisz

1
Masz rację. Naprawdę nie angażowałem się w programowanie za te pieniądze, ale naprawdę pomyślałem, że łatwiej będzie z tego żyć. Programowanie to moja pasja i zrobiłbym to, nawet gdybym musiał za to zapłacić.
Marcelo de Aguiar

4
@johnc to samo dotyczy większości zawodów. Naprawdę nie rozumiem ludzi, którzy chodzą na uniwersytet, aby „uczyć się programowania”. Zacząłem, gdy miałem 14 lat w K&R. Poszedłem na uniwersytet, aby „uczyć się elektroniki” - ale zgadnij co, i tak zostałem programistą. Najlepsi muzycy nauczyli się. Najlepsi programiści nauczyli się. To jest życie.
PP.

amen brother, amen
Misters

23

Przypadkowo usunąłem bazę danych, która przechowywała wszystkie informacje o naszych klientach, historię zamówień i faktury od początku istnienia firmy (wartość kilku lat).

Aby być uczciwym, mój pracodawca musi jednak ponieść część winy. Mieli jedyną kopię tej bazy danych przechowywaną na Mac SE (tak, to było dawno temu), którą dali mi (zupełnie nowy pracownik, pierwsza praca po studiach) jako moją stację roboczą i nigdy nawet nie brali pod uwagę tworzenia kopii zapasowej.

Więc myśląc, że to kopia DB, przeciągnąłem ją do kosza. Ze względu na rozmiar pliku natychmiast go usunął. W końcu otrzymaliśmy je po zapłaceniu bezbożnej kwoty na usługę przywracania danych, ale przez około 5 dni nie mogliśmy zrealizować ani rozliczyć żadnych zamówień i nie mieliśmy możliwości uzyskania dostępu do informacji o żadnym kliencie. To prawie zatrzymało (3-osobową firmę).


15
Ojej. Uwaga do siebie: zawsze rób kopię zapasową: nawet jeśli ma to być kopia zapasowa.
Kramii Reinstate Monica

1
@Karmii: Najlepsza rada, bez dwóch zdań.
Chris

@Kramii - Cieszę się, że nauczyłem się tej lekcji na początku mojej kariery.
JohnFx,

Nie zostałeś zwolniony?
Mateen Ulhaq

3
Było tyle winy, żeby się obejść. Byłem wtedy dzieckiem i prawdopodobnie bardziej naiwnym niż dzisiaj, gdybym zakładał, że prawdziwa firma zrobi coś tak głupiego, jak umieszczenie jedynej kopii DB na moim pulpicie. Doświadczenie pokazało mi, że głupotą jest przecenianie gotowości mojego pracodawcy, nawet w dużej firmie.
JohnFx 14.01.11

15

kiedy phpmyadmin zapytał:

„Masz zamiar ZNISZCZYĆ kompletną bazę danych! Czy naprawdę chcesz DROP DATABASE xxx?”

Nacisnąłem Enter.


26
Świetny przykład sytuacji, gdy programowanie obronne pomogłoby zapobiec poważnym problemom. Jeśli robisz coś, co może mieć poważne konsekwencje, na przykład upuszczanie tabel / baz danych, domyślnie odpowiedź użytkownika na „Nie”, aby AKTYWNIE wyrazić zgodę na działanie.
Hugo,

6
@Hugo: +1. Miałem profesora na uni (ex Unix / sysadmin bazy danych), który zwykł mawiać: „gdy robisz coś poważnego, zawsze zdejmuj ręce z klawiatury i siedź na nich przez około dziesięć sekund i myśl o tym, co się wydarzy”.
Tabele Bobby

1
@ Hugo: Idę dalej - „Masz zamiar ZNISZCZYĆ kompletną bazę danych! Jeśli naprawdę chcesz
ZROBIĆ BAZĘ

3
@Hugo @Loren Pechtel - „Masz zamiar ZNISZCZYĆ kompletną bazę danych! Wyszukiwarka Twojego loginu ujawniła wiele wystąpień„ lol ”, dlatego ta akcja jest odrzucana. Skontaktuj się z administratorem lub naucz się komunikować.”
detly

15

Nie jestem pewien, czy to był mój „największy błąd”, ale zdecydowanie niezapomniany. W pierwszym tygodniu lub dwóch w nowej pracy przydzielono mnie do niewielkiego „ulepszenia funkcji”, które polegało na zmianie kolejności sortowania niektórych elementów na jednej z najpopularniejszych stron w witrynie. Nie byłem zbyt zaznajomiony z bazą kodu, ale szybko znalazłem odpowiedni Komparator i dodałem wywołania do kilku nieszkodliwych metod wewnątrz metody CompareTo, nie myśląc o tym zbyt wiele. Kod przetestowany lokalnie i pod kontrolą jakości bez problemów i został uruchomiony.

Tego samego dnia miałem z szefem 1 na 1 i z wielkim uśmiechem na twarzy, pogratulował mi, że dostałem moją pierwszą „funkcję” na żywo tak szybko po dołączeniu. Oboje patrzyliśmy, jak odwiedził odpowiednią stronę, aby zobaczyć funkcję w akcji. Załadowanie strony zajęło 47 sekund. Moje serce utonęło. Odświeżył stronę: 53 sekundy. Jego uśmiech zniknął. Wróciłem do biurka i spędziłem długi wieczór na debugowaniu i wypychaniu krytycznych łat na stronę na żywo.

Okazuje się, że jedną z nieszkodliwych metod, które dodałem, było wywołanie usługi zdalnej, które spowodowało co najmniej jedno trafienie DB. W każdym porównaniu Do połączenia. Więc na stronie, na której sortowano ponad 2000 przedmiotów, robiłem ~ 6000 (nlogn) trafień DB. Ojej.


Czy trafienie DB było oczywiste w kodzie, czy też wystąpiło w jakiejś metodzie / właściwości, którą wywoływałeś?
dbkk

Trafienie DB zostało faktycznie ukryte za metodą, która wyglądała jak prosty moduł pobierający: dodałem wywołanie myObj.getFoo () w metodzie compareTo. JavaDoc w odpowiedniej podklasie zwrócił uwagę na możliwość trafienia DB, ale JavaDoc w interfejsie myObj (na co patrzyłem pisząc kod) nic nie wspomniał. W obu przypadkach uważam, że jest to wyraźna demonstracja (a) nieodpowiednich testów w moim imieniu i (b) co może się zdarzyć, jeśli nie będziesz przestrzegać dobrych konwencji nazewnictwa.
Jewgienij Brikman,

bardziej prawdopodobne, że był to (bardzo częsty) przypadek, gdy środowisko testowe nie było reprezentatywne dla środowiska produkcyjnego. Przetestowałeś go, działał przyzwoicie, więc doszedłeś do wniosku, że był dobry, nigdy nie wiedząc (a wtedy nie mogłeś), że testowa baza danych zawierała tylko ułamek danych zawartych w produkcyjnej bazie danych.
jwenting

15

Zrobiłem to:

rm -rf /bin

(Właściwie nie zrobiłem tego dokładnie . Byłoby to głupie i niewybaczalne. Zrobiłem to w bardziej subtelny, okrężny sposób, który zasadniczo spowodował wykonanie tego polecenia.)

Nie trzeba dodawać, że system Unix był po tym czasie bezużyteczny i musiał zostać ponownie zainstalowany. Byłem wtedy początkującym administratorem, a starszy facet, który mnie nadzorował, rozumiał.

To dobre doświadczenie. Nauczyłem się, jak wyświetlać katalogi bez konieczności używania żadnych poleceń / bin.

echo *

+1 wyuczone sztuczki, takie jak symulowanie ls i kota przy użyciu tylko konstrukcji powłoki Bourne'a z trybu pojedynczego użytkownika w systemie DEC-BSD
Arcege

11

Klient chce wysłać wiadomość e-mail do całej bazy użytkowników, która zasadniczo wyśle ​​spersonalizowaną wiadomość e-mail dotyczącą zdarzenia, a gdy kliknie łącze w wiadomości e-mail, automatycznie zaloguje się do formularza z wypełnioną połową swoich danych.

Piszę kod, testuję kod, działa dobrze, linki działają, jest całkiem gładki. Po sprawdzeniu i podwójnym sprawdzeniu wszystkiego przełączam się na listę na żywo i odchodzimy.

Lista na żywo jest znacznie większa niż moje przykładowe dane, a serwer poczty przewraca się. Muszę zatrzymać aplikację konsolową, a potem zdać sobie sprawę, że muszę ją ponownie uruchomić od miejsca, w którym się zatrzymała. Na szczęście ta funkcja nie jest zbyt trudna do dodania. Zarejestrowałem użytkowników, do których już wysłano wiadomość, więc po uruchomieniu serwera pocztowego ponownie skonfigurowałem kod, aby móc zrestartować go od miejsca, w którym wcześniej się nie powiódł. aby serwer pocztowy mógł nadrobić zaległości, ruszamy.

Niestety udało mi się jakoś nie zaktualizować całego kodu. Nie pamiętam szczegółów tego, co zrobiłem, ale zapytanie o dane użytkownika otrzymywało jeden zestaw danych, zapytanie o wygenerowanie skrótu dostawało inny, więc jeśli użytkownik kliknie łącze, przejdzie do formularz zawierający dane osobowe innej osoby z danych jej konta. A to w niszowej branży, w której na liście było wiele konkurencyjnych małych firm.

Telefon nie zaczął długo dzwonić w biurze klienta ...

To był jedyny jak dotąd błąd, który doprowadził mnie do złożenia rezygnacji.


+1 dla danych rzeczywistych znacznie większych niż dane przykładowe :-(
nakedfanatic 14.01.11

IMO jest to jeden z najgorszych> _ <
sevenseacat

7

Kiedyś użyłem sprzężenia krzyżowego bez filtra. Działa dobrze w testowej bazie danych z ułamkiem danych. Kiedy został wdrożony, skończył z ~ 60 milionami wierszy w przeciętnym zapytaniu.


14
W rzeczywistości twoim największym błędem nie było stworzenie bazy danych o odpowiedniej wielkości. Nigdy nie używaj małej testowej bazy danych do tworzenia dużych produkcyjnych baz danych. Nie możesz napisać wydajnego kodu, jeśli nie masz odpowiedniej bazy danych.
HLGEM,

7

Zepsułem skaner laserowy o wartości 100 000 $.

Kontroler przechowywał pozycje jako liczby całkowite, więc podzieliłem wszystko przez 10000, aby uzyskać rzeczywistą pozycję w calach.

Gdy ostatnia cyfra wynosiła 0, została pominięta, więc oś Z była 10 razy za daleko.

Nastąpiła Hillarity



5

Pozwoliłem mojemu menedżerowi, aby zmiażdżył mnie, zostawiając pracę, którą kochałem. Powinienem był pozwolić mu zepsuć wszystko, zwolnić się, a potem powinienem był przyspieszyć i posprzątać elementy. Zamiast tego zrezygnowałem i od tego czasu żałuję.


17
Menedżerowie rzadko zostają zwolnieni z powodu takich rzeczy. Aby dostać się na poziom menedżera, musisz bardzo dobrze radzić sobie z tyłem; prawdopodobnie zostałeś kozłem ofiarnym w momencie, gdy opuściłeś firmę. Może mogłeś poradzić sobie z tym inaczej, ale nie pobijaj się.
Mark Ransom

gdyby go pomieszał, byłbyś obwiniony i zwolniony (lub przynajmniej miałeś nieszczęśliwy czas, aż rzucisz hańbę).
jwenting

4

Siedem lat temu mój szef i właściciel firmy, którego jeszcze nie spotkałem, byłem tak nowy na tym stanowisku, w innym stanie, robiąc prezentację naszej witryny badawczej dla kilku potencjalnych klientów. Składki członkowskie wahały się od niskich do średnich pięciu liczb, więc te dema były dużą sprawą dla naszej nowo powstałej firmy.

Pośrodku jego wersji demonstracyjnej, kiedy robiłem trochę pracy z bazą danych, zmieniłem bazę danych na żywo i zaktualizowałem każde pytanie ankiety w każdej ankiecie do tego samego tekstu, coś w rodzaju „To jest pytanie testowe” z powodu błędu w GDZIE. Razem z moim współpracownikiem ruszyliśmy w stronę kopii zapasowej i skuliliśmy się, mając nadzieję, że nie demonstrował w tej chwili tej części witryny, ale czekał na e-maila we wszystkich wersjach, które z wdzięcznością nigdy się nie pojawiły.

Dobrą stroną był szef, który w końcu wyskoczył na skrzynkę rozwojową.


3

Korzystałem z narzędzia Xenu do śledzenia linków w naszym intranecie, aby spróbować usunąć niektóre z wielu zepsutych linków, które narosły przez lata (większość, jak można się było spodziewać, to linki z wiki do udostępnionego dysku sieciowego).

Po około 30 minutach zacząłem zauważać, że niektóre nowe przedmioty mają dziwne zdjęcia, wyglądało na to, że ludzie korzystali z niektórych ziarnistych starych fotografii, które były w systemie, ale zignorowałem to myślenie, że może nie było nic nowego mieli to, czego chcieli.

Kolejne 10 minut później zauważyłem, że z jakiegoś powodu losowe elementy zmieniają się losowo. W tym momencie dotarło do mnie, co się dzieje. Intranet korzysta z uwierzytelniania systemu Windows, a niektóre funkcje (takie jak wybieranie obrazów wiadomości i wyróżnionych elementów) zostały zakodowane w odpowiedzi na żądania HTTP GET. Moduł sprawdzania łączy używał mojego uwierzytelnienia i zaindeksował do stron po stronie administratora, lojalnie wykonując swoje zadanie i podążając za każdym znalezionym łączem, w tym takim jak

/admin/displayItems/icon_update.asp?image=eastereggs.jpg&itemID=3174


7
Wygląda na to, że wiele osób uczy się, kiedy należy używać GET, a kiedy należy używać POST
Oli

Zgadzam się, miałem rozpocząć pracę nad przebudową intranetu, a to zdecydowanie umieściło prawidłowe użycie GET i POST na szczycie wymagań. ASP MVC pomaga również w tym łatwym i intuicyjnym do zrobienia.
Chao

1
nie do końca twój błąd, ale i tak dobra historia :-)
Dean Harding

3

Jak dotąd moją jedyną skręcającą żołądek, przyspieszającą bicie serca, nagle gorącą i swędzącą pomyłką było uruchomienie zapytania UPDATE bez klauzuli WHERE. Na szczęście była kopia zapasowa z ostatnich 15 minut, a dane nie zmieniały się zbyt często, co oznaczało, że mogłem w pełni przywrócić dane w ciągu 10 minut bez żadnej wiedzy.

Nic złego, ale miałem kilka bliskich połączeń. Są i pozostają blisko, ponieważ słyszałem wystarczająco dużo horrorów w tej branży, aby wszystko, co robię, co mogłoby zepsuć wszystko, dobrze się kończy.


1
Czy nie popełniacie błędów DB, nigdy nie nazywacie wycofywania?
Jé Queue,

@Xepoch, to pomaga tylko wtedy, gdy rozpocząłeś transakcję
CaffGeek

1
@Chad, czy ogólnie nie powinniśmy zakładać, że wszystkie połączenia danych powinny być niejawnie transakcyjne?
Jé Queue

2
@Xepoch, nigdy nie zakładaj.
CaffGeek

1
@Char, osobiście wolę zachować wszystkie interakcje DB w ramach transakcji. Ci, którzy tego nie robią, niosą ryzyko lub mają sprawy biznesowe, których to nie obchodzi. Założeniem specyfikacji i MANDATE jest to, że rozpoczniemy i utrzymamy projekty kodu z transakcyjnym zarządzaniem DB.
Jé Queue

3

W przypadku robota, nad którym pracuję, przechowujemy plik dziennika każdego uruchomienia. Mamy robota i symulator, które generują te foldery dziennika. Pliki dziennika symulatora są bezużyteczne, ale pliki dziennika robotów są bardzo przydatne i są przechowywane na zawsze.

Ponieważ sam robot ma ograniczone miejsce na dysku twardym, są one przenoszone na inny komputer i tam przechowywane. Ten komputer jest głównym komputerem operacyjnym do komunikacji z robotem.

Właśnie zacząłem pracować nad robotem kilka miesięcy wcześniej i nie wiedziałem o tym. Myślałem, że dzienniki na komputerze operacyjnym były bezużyteczne, generowane przez symulator i usuwane. Straciliśmy wszystkie stare dzienniki, ponieważ nie było odpowiedniej kopii zapasowej.


8
Cholera ... ja chce pracować na roboty! Wszystko, co robię przez cały dzień, to budowanie kiepskich stron internetowych.
Dan Ray

2

Zbudowałem wersję naszego oprogramowania na moim komputerze zamiast kompilacji, ponieważ była szybsza (około 4 godzin szybciej, co oznaczało, że mogła przejść do kontroli jakości tego dnia zamiast następnego), a wydawca chciał jak najszybciej.

Miałem specjalną definicję do debugowania na moim komputerze, co spowodowało błąd, który nie został wykryty podczas kontroli jakości. Wykryli go dopiero pod koniec 4 tygodni testów sprawdzania poprawności, ale był wystarczająco zły, by nie zaliczyć sprawdzania poprawności.


2

Upuść przypadkowo produkcyjną bazę danych zamiast wersji programistycznej. Nie widziałem, na jakim serwerze działam. Na szczęście ostatnia kopia zapasowa została utworzona 4 godziny temu, a użytkownik nie wprowadził wielu zmian w systemie, więc nie ma utraty dużych danych.


Miałem tego współpracownika. Tyle tylko, że myślał, że upuszcza swój lokalny egzemplarz, nie ten produkcyjny. Wszyscy pracowaliśmy, a potem usłyszeliśmy, jak mówi „OH SH ** !!!!” To było fajne popołudnie.
Tyanna

2

Największym błędem, jaki kiedykolwiek popełniłem, było to, że nie pracowałem nad kontrolą źródła na mojej maszynie programistycznej. Mój twardy dysk się zawiesił i straciłem tygodnie pracy. Jest to lekcja, której się nauczyłem i której nigdy więcej nie pozwolę.


nie mój błąd, ale pokrewny. W firmie, dla której pracowałem, jeden z ich serwerów został przejęty, dając intruzowi dostęp do serwera kontroli wersji (DMZ? Whazda?), Gdzie natychmiast wykonał polecenie „rm -r /”
jwenting

2

Używanie ==zamiast equalsdo porównywania ciągów w Javie


13
To największy błąd, jaki kiedykolwiek popełniłeś?
Chris

Jest to znacznie większy problem w Javie, gdzie ==jest porównanie referencyjne. W języku C # ==dokonuje porównania wartości ciągów, tak jak .Equals() to, że istnieją pewne różnice, patrz odpowiedź Jona Skeeta tutaj: stackoverflow.com/questions/3678792/...
Tim Goodman

2
@Tim: to wciąż nie odpowiada, jak to był „największy błąd, jaki kiedykolwiek popełniłeś” ... Jeszcze trochę kontekstu na temat konsekwencji byłby miły ...
Dean Harding

Jeśli najczęściej podnoszona odpowiedź dotyczy literówki, czym różni się moja odpowiedź? Jeśli jesteś początkujący, popełnienie tego błędu jest prawie niemożliwe do debugowania i może cię sfrustrować przez cały dzień.
nanda

@Dean: To nie był największy błąd , jaki kiedykolwiek popełniłem ... Właśnie wyjaśniłem różnicę w zachowaniu tutaj z C # vs Java
Tim Goodman

1

Powiedziałem mojemu Dyrektorowi, że to, że jest on STARY i ma więcej lat doświadczenia niż ja, nie oznacza, że ​​będę go szanować. Jedyne, co szanuję, to ZDOLNOŚĆ. Nie musiałem stawić czoła konsekwencjom tak żałosnego stwierdzenia, ponieważ byłem młodszym programistą niż. Patrząc wstecz, wydaje się to moim największym błędem. Gdzie był mój zdrowy rozsądek \ pokora? :-(


2
Częściowo się z tobą zgadzam, tylko dlatego, że ktoś ma więcej doświadczenia (od lat) nie oznacza, że ​​jest lepszym programistą. Istnieje wielu programistów, którzy mogą napisać „xx lat doświadczenia” w swoim CV, ale nie mają pojęcia, co robią.
Bobby,

Bardziej prawdopodobne jest, że popełnili po drodze głupi błąd, taki jak te tutaj wymienione, co sprawi, że bardziej ostrożny programista
johnc

Żeby było jasne, błąd nie miał takiego nastawienia. Błędem było POWIEDZIEĆ, że masz takie podejście.
Dan Ray

Przez lata chciałem to powiedzieć wielu osobom.
Reasurria,

1

Zdarzyło się to koledze w tym miesiącu.

Naprawiał błąd, który pojawiał się, gdy wysyłasz SMS-a na wiele telefonów komórkowych. Zazwyczaj wiadomości te nie są wysyłane w celu zaoszczędzenia kosztów, ale z powodu błędnej konfiguracji w naszej bazie danych zostały wysłane.

Koszt: miesięczne wynagrodzenie za ruch SMS.


to jest tanie! :)
jwenting

1

Na prośbę menedżera skopiowałem /etc/sudoersz jednej maszyny na drugą (chociaż nie rozwiązałoby to problemu, ale to nie ma sensu). Niestety sudoprzenosiłem skopiowany plik na miejsce, nie zauważając, że jego właściciel i uprawnienia były całkowicie błędne. W tym momencie nikt nie miał otwartej powłoki roota, nikt nie mógł sudoi nikt nie mógł zalogować się jako root, ponieważ jej powłoka została ustawiona na /bin/false. Maszyna była w zdalnej hurtowni danych ...


1

Chciałem utworzyć pliki metadanych dla każdego pliku w katalogu (tzn. Dla każdego pliku somedir/foo.binchciałbym utworzyć plik somedir/foo.bin.meta). Z jakiegoś głupiego powodu postanowiłem utworzyć pliki, otwierając i zamykając strumień plików za pomocą Pythona:

for fn in os.listdir(path):
    open(os.path.join(path, fn), 'w').close()

Z jakiegoś jeszcze głupszego powodu pomyślałem, że sprytnie było przetestować ten skrypt na katalogu na moim dysku twardym z kilkoma danymi osobowymi. Dopiero po uruchomieniu zdałem sobie sprawę, że zapomniałem faktycznie zmodyfikować nazwę pliku przed przesłaniem go doopen i że właśnie obciąłem każdy pojedynczy plik w tym katalogu (ouch).

Na szczęście było to na komputerze osobistym i nie spowodowało żadnej szkody w niczym ważnym, ale wciąż nauczyłem się mojej lekcji.


1

Pracowałem dla firmy, która zajmuje się obsługą klienta jednej z największych szwedzkich firm telekomunikacyjnych. Na naszym serwerze mieliśmy oprogramowanie, które regulowało kolejkę połączeń przychodzących, ile połączeń możemy odebrać i tak dalej. Jeśli to nie działało, nie otrzymywaliśmy żadnych połączeń, a klienci nie otrzymywali żadnego wsparcia.

Aaaaanyway, dokonałem (niewielkiej) zmiany w oprogramowaniu. Mógłbym poczekać na zmianę okna usługi, ale pomyślałem: „Hej, ponowne uruchomienie usługi zajmie minutę, po co zawracać sobie głowę. Fortuna sprzyja odważnym”. Więc uruchomiłem go ponownie, niestety wątek został zablokowany, więc nie mogłem go wymienić. Zaczynam wpadać w panikę i postanawiam szybko zrestartować komputer (byłem zdalny). Niestety w panice klikam „zainstaluj aktualizacje i zamknij system”: P

Nie trzeba dodawać, że w Szwecji nie było wiele pomocy technicznej przez następne pół godziny, zanim udało nam się ją ponownie uruchomić.

Kolega był jednak gorszy ode mnie. Pewnej nocy debugowaliśmy automatyczny system reagowania głosowego i przekierowaliśmy numer na jego komórkę. Jedyną rzeczą, o której zapomniał ją cofnąć, był dzień wolny następnego dnia i zostawił komórkę w pracy. Zastanawiamy się, dlaczego tego dnia ciągle dzwonił :)


1

Argh, 23:00, zamykanie laboratorium, szybko, szybko ...

$ enscript -o midterm.hs midterm.hs
$ submit midterm.hs
Error: submission is empty

Boże nie! FFS. Miałem na myśli PS you ****!


Przepraszamy za styl języka, jest potrzebny do autentyczności.
Orbling

0

Kiedyś kodując JS, nie byłem w stanie odróżnić „1” (jednego) od „1” „małego L”. Nawet gdy pisałem tę odpowiedź, oba wyglądają prawie tak samo w edytorze!


Dlaczego głosowanie w dół?
Gopi

0

Stworzyłem język szablonów witryny , we wczesnej wersji, której wszystkie parametry HTTP zostały domyślnie rozwinięte jako zmienne. Oznaczało to, że możesz napisać URL taki jak:

page.vis? body = <body> <p> O mój drogi </p> </body>

I zrobiłby dokładnie to, na co wygląda.

Na szczęście nie mam użytkowników (westchnienie), więc myślę, że to nie było zbyt duże ryzyko bezpieczeństwa.


0

Zdecydowanie wpadka TSQL - zbyt wiele instrukcji TSQL w jednym oknie edytora. Był trochę zmęczony, a ludzie przeszkadzali mi w lewo i prawo, a ja wydałem polecenie, które zaktualizowało 47 000 rekordów adresów, miast, stanów i archiwów. Naprawiłem to jednak w około 25 minut.

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.