Jaki był najbardziej imponujący wyczyn programistyczny, jaki kiedykolwiek widziałeś? [Zamknięte]


26

Wszyscy znają stare powiedzenie, że najlepsi programiści mogą być rzędami wielkości lepszymi od średniej. Osobiście widziałem dobrego kodu i programistów, ale nigdy czegoś tak absurdalnego. Pytanie brzmi: jaki jest najbardziej imponujący wyczyn programowania, jakiego kiedykolwiek byłeś świadkiem?

Możesz zdefiniować imponujące przez:

  1. Zakres omawianego zadania, np. John samodzielnie opracował ramy dla swojej firmy, prace porównywalne w zakresie do tego, co robiło pozostałych 200 zatrudnionych łącznie.

  2. Szybkość, np. Stu zaprogramował cały wielozadaniowy system operacyjny aplikacji w czasie rzeczywistym w tygodniu, w tym własny kompilator C i narzędzia wiersza poleceń powłoki

  3. Złożoność, np. Jane, ponownie zarchiwizowała całą naszą 10-milionową aplikację LOC do pracy w klastrze serwerów. I zrobiła to po południu.

  4. Jakość, np. Kod Charlesa miał wskaźnik defektów na LOC 100 razy mniejszy niż średnia firmy. Ponadto kod był czysty i zrozumiały dla wszystkich.

Oczywiście, im więcej tych cech połączonych, a im bardziej ekstremalna każda z nich, tym bardziej imponujący jest wyczyn.

Więc pozwól mi to mieć. Jaki jest najbardziej absurdalny wyczyn, jaki możesz opisać? Podaj jak najwięcej szczegółów i staraj się unikać miejskich legend lub przesady. Publikuj tylko to, za co możesz ręczyć.

Dodatkowe pytania:

  1. Czy herkulesowe zadanie było jednym z nich, czy też osoba regularnie zadziwiała ludzi?
  2. Jak wytłumaczysz tak imponującą wydajność?
  3. Jak uznano programistę za tak niesamowitą pracę?

5
Widziałem kiedyś wyciskaniu facet 2 KLocs ... (przepraszam, nie mogłem się oprzeć)
DevSolo

„Szybkość, np. Stu zaprogramował cały wielozadaniowy system operacyjny aplikacji w czasie rzeczywistym w tygodniu, w tym własny kompilator C i narzędzia wiersza poleceń powłoki” - Eee… możesz chcieć, aby był on prawdziwy.
Jas

Na podstawie dotychczasowych odpowiedzi niektóre osoby są pod wrażeniem. Zrobiłem kilka „wyczynów” wymienionych tutaj.
Steven Evers,

Hm, zastanawiałem się nad tym, żeby niemal to powielić dokładnie wczoraj;) Wielkie dzięki za pytanie!
mlvljr

@DevSolo Hej, jeśli mówimy o kartach perforowanych lub zrolowanym papierze, może to być wyczyn fizyczny.
Mark C

Odpowiedzi:


39

Chociaż oficjalnie nie mogę za to ręczyć, zawsze byłem pod wrażeniem, że Chris Sawyer rozwija Rollercoaster Tycoon prawie całkowicie w języku asemblera.


4
to szalone!!!
nanda,

1
-.- +27 za coś, co omawialiśmy już co najmniej dwukrotnie na tej stronie.
Mark C

31

Szybki odwrotny pierwiastek kwadratowy . Jak ktoś może wymyślić coś takiego, jest całkowicie poza mną.


1
Hum ... To może być (wyjątkowo) sprytne, ale to jak 6 linii kodu i tylko niewielki element znacznie większej aplikacji. Nie rozumiem, jak ekstremalnie jest w żadnym z wymienionych wymiarów.
David Reis,

11
David Reis, najprawdopodobniej optymalizuje to kluczowe wąskie gardło w genialny sposób. Nie myl liczby wierszy z ilością pracy niezbędną do ich napisania.

2
@ David, nie wiem, dlaczego nalegasz, aby wyczyny programowe musiały zostać wykonane w bardzo krótkim czasie, aby być wyczynem?

2
Tak, co jest bardziej wyczynem, 600 linii kodu napisanych w ciągu jednego dnia w porównaniu z 6 liniami kodu stworzonymi przez 100 dni, jeśli oba robią to samo? Myślę, że to ten drugi, ale twój przebieg może się różnić.
Joonas Pulakka

6
@ David, nie zgadzam się, że każdy problem można rozwiązać w nieskończonym czasie. Możesz przeczytać joelonsoftware.com/articles/HighNotes.html . „Prawdziwy problem z używaniem wielu miernych programistów zamiast kilku dobrych polega na tym, że bez względu na to, jak długo pracują, nigdy nie produkują czegoś tak dobrego, jak to, co potrafią wyprodukować wielcy programiści”.

16

Wczesne gry zręcznościowe.

Całkowicie ograniczony przez pamięć, moc przetwarzania, We / Wy ...

To, co osiągnęli ci programiści w tym środowisku, było niesamowite.

Np. Pacman - Idealny. Nadal można grać po tylu latach.


2
Pacman na pokazowo bardzo nie doskonały. Bardzo źle się psuje, gdy licznik poziomu przepełnia jeden bajt. ;)
Mason Wheeler,

Doskonały! Według Wikipedii: „Pac-Man ma słynny ekran zabijania, często określany jako ekran bomb Pac-Man. Licznik poziomów gry był pojedynczym 8-bitowym bajtem i dlatego mógł przechowywać tylko 256 różnych wartości (0–255) Osiągnięcie 256. poziomu powoduje, że licznik używany podczas rysowania owoców przepełnia się do zera, powodując narysowanie 256 owoców i siedmiu pustych miejsc. Można go jednak naprawić łatką. ”
Conor,

1
Może wczesne promy kosmiczne?
Job

Pani Pac-Man była znacznie lepsza
Tim Goodman

1
@Mason, możesz nawet dostać na koszulce! errorwear.com/shirt-pacman.php

15

Jest jeden programista, w którym pracuję, który wykonał następujące czynności przy więcej niż jednej okazji.

Najnowszym przykładem był projekt w naszej grupie, który został przydzielony do 3 osób. Była to złożona aplikacja LOB z sześciomiesięcznym harmonogramem (była to niezwykle agresywna oś czasu).

Tydzień kodowania miał się rozpocząć, 1 z 3 osób odeszła (z powodów osobistych), a inna odeszła na bardzo nagły urlop medyczny. Samotny programista poszedł do domu, aby rozpocząć programowanie i wrócił 3 miesiące później z ukończoną aplikacją.

EDYTOWAĆ

Aby dodać wyjaśnienie. Wynikowy kod był prawie idealny, zgodny z wymaganiami, a nasza grupa ds. Kontroli jakości była w stanie udokumentować tylko 3 usterki.


Musiał ciągnąć ponad 100 godzin pracy tygodni, aby dokonać tego wyczynu. Założę się, że przeszedł tonę kofeiny.
Ali

3
Miesiąc mitycznego człowieka w akcji. Zdejmij 2 osoby z projektu == o połowę czasu! Chociaż ma to sens, że jeden skoncentrowany programista może załatwić sprawę szybciej niż koordynacja 3 osób.
CodexArcanum

Jeśli ta osoba kiedykolwiek opuści firmę na złych warunkach (bez okresu wymiany wiedzy), firma będzie miała poważne kłopoty ...
Onion-Knight

3
@bjarkef - kod jest na najwyższym poziomie. Ten programista jest najlepszym programistą w naszej firmie, a bardzo krótki czas nie obniżył normalnej jakości, jaką zwykle otrzymujemy od niego.
Walter,

1
@ Walter, nie możesz oszacować dokładnie, dopóki nie zrobisz tego, co jest sprzeczne, gdy potrzebujesz numeru. To sprawia, że ​​szacunki na wschód, kiedy wykonałeś to zadanie wcześniej, i trudne, gdy nie są ci znane. Tak długo, jak długo nie doceniasz klienta. Będzie zadowolony, że będzie tańszy niż oczekiwano.

13

Może po prostu pokazuję swój wiek, ale myślę, że niektóre z naprawdę imponujących wyczynów programistycznych są ignorowane.

Steve Woźniak, Apple Disk II / RWTS

Steve zaprojektował sprzęt i oprogramowanie razem, używając naprawdę fajnych sztuczek w oprogramowaniu, aby wyeliminować wiele złożoności (i kosztów) sprzętu. Normalne napędy dyskietek wykorzystywały diodę LED i czujnik światłoczuły w pobliżu piasty dysku, aby prześwitywać otwór przebity w podłożu dysku. Wyjście z fotoczujnika było podłączone do przerwania procesora, aby procesor wiedział, kiedy rozpocząć procedurę synchronizacji, aby poczekać, aż właściwy sektor ścieżki znajdzie się pod głowicą odczytu / zapisu (choć kilka z nich używało „twardych sektorów” który miał dziurę sygnalizującą początek każdego sektora zamiast tylko jednego na początek ścieżki).

Steve wyeliminował ten sprzęt, projektując oprogramowanie do kodowania danych w sposób, który pozwoliłby Ci zacząć czytać z dowolnego miejsca na dysku, i nie tylko dekodował same dane, ale również zastanowił się, gdzie (logicznie) na ścieżce jesteś. Napęd Disk II nie ma skonfigurowanej diody LED / czujnika światła i całkowicie zignorował dziury w dyskietce.

Gordon Letwin, HPFS

Gordon Letwin był architektem (i programistą) w zespole OS / 2. Przynajmniej tak, jak słyszałem tę historię, w pewnym momencie pojechał na wakacje, aby uciec od rzeczy i spędzić trzy tygodnie (lub mniej więcej) żeglując na swoim jachcie (tak, wcześni pracownicy MS mogli sobie pozwolić na takie rzeczy ... ) ... ale aby się nie nudzić, postanowił zabrać ze sobą laptopa.

Kiedy wrócił, miał napisany, debugowany i działający system plików HPFS - całkowicie w języku asemblera Intel 386. Napisany przez niego kod został ostatecznie sprzedany jako „HPFS386”, który był (przynajmniej w tym czasie) wyłączny dla LAN Manager Edition OS / 2. Inny zespół spędził coś jak sześć miesięcy piszących wersję w języku C, która stała się „normalna” HPFS zawarte w normalnych wydaniach OS / 2 (a po IBM i MS zerwała IBM aktualizowane i ponownie skompilowany kod C, aby uzyskać ich „HPFS386”). Chociaż został zmodyfikowany i zaktualizowany, ponieważ jeśli byłeś uczciwy, NTFS prawdopodobnie nazywałby się „HPFS 2.0” (a może 3.0) - nie ma wątpliwości, że najlepszy obecny system plików Microsoftu nadal jest ściśle związany z tym, co zaprojektował.

Burroughs taśmy B220

Ucieleśniały one (przynajmniej IMO) prawdziwe początki programowania obiektowego. Tam, gdzie taśmy IBM (na przykład) miały „etykiety”, by powiedzieć o formacie danych na taśmie, taśmy Burroughs opracowały konwencję (nie sądzę, by ktoś wiedział na pewno, kto ją uruchomił) nałożenia małego zestawu procedur taśma, która rozumie dane i sposób ich sformatowania, dzięki czemu można poprawnie manipulować danymi bez znajomości szczegółów ich formatowania. Innymi słowy, kilka pierwszych „bloków” na taśmie było w zasadzie vtable w trwałej formie. Zasadniczo wczytałeś vtable do pamięci, a następnie używałeś zdefiniowanych metod do manipulowania danymi na pozostałej części taśmy. Wszystko bardzo schludne i proste (jeśli tylko nieco mniej niż całkowicie przenośne).


11

John Carmack regularnie robi na mnie wrażenie swoimi wyczynami z epickiego programowania. Według jednej historii nudził się w swoim pokoju hotelowym, więc napisał silnik oświetlenia Doom 3 na swoim laptopie przez weekend.


2
Szkoda, że ​​nie napisał prawdziwej gry.
DeadMG

10

Mimo tego wątpliwego przeznaczenia wciąż jestem pod wrażeniem skryptu captver dla MegaUpload . To skrypt GreaseMonkey napisany w JavaScript, który ma dekoder bitmapowy i sieć neuronową, która rozpoznaje litery na obrazku captcha, i powtarzam, wszystko to jest zrobione przy użyciu JavaScript.


1
Coś, co pokaże następnej osobie, która jęczy, że nie jest w stanie wykonać dobrej pracy z powodu nałożonych na nią ograniczeń.
Jon Hopkins,

10

Miguel de Icaza - projekt Mono.

(Jest także niesamowicie zabawny, dowcipny i zabawny - przynajmniej z krótkiej rozmowy, którą widziałem, jak udzielał i słuchając wywiadów podcastowych)


+1 Facet jest oczywiście bliźniakami, a może trojaczkami, wszyscy pod swoim imieniem. Nie ma mowy, żeby jedna osoba była zaangażowana w całe to, w czym on jest, i na tak szczegółowym poziomie.
Dan Rosenstark,

8

Anders Hejlsberg: język Turbo Pascal i kompilator . Nadal uważam, że po tylu latach TPC jest arcydziełem inżynierii oprogramowania. Jest to najbardziej kompaktowy i najszybszy kompilator kodu macierzystego (poczynając od niektórych wersji optymalizujących), jaki kiedykolwiek widziałem. W Borland Pascal IDE nie było zasadniczo „kompilacji”. Zmodyfikowałeś kod, nacisnąłeś F9 i od razu obserwowałeś, jak program działa, i to na maszynie 8 MHz lub 12 MHz. Później TPC przekształciła się w Delphi, a następnie Hejlsberg dołączył do Microsoftu i był współautorem C #.

Chciałbym rzucić okiem na źródła wcześniejszych wersji TPC, ale niestety pomimo licznych próśb Borland nigdy ich nie otworzył.

Kompilator Hejlsberga został zainspirowany tą książką: Niklaus Wirth, Algorytmy + Struktury danych = Programy


Delphi wciąż ma naprawdę szybki kompilator. Wydaje mi się, że właśnie dlatego unika to braku obsługi modyfikacji i kontynuacji.
Joeri Sebrechts

6

Mój kierownik szkolenia w Gemplus (obecnie Gemalto) napisał pierwszego interpretera JavaCard i system operacyjny podczas własnego 3-miesięcznego okresu studiów licencjackich. Samodzielnie stworzył kod ze specyfikacji. Aby wyprodukować v.2, Gemplus założył ponad 30 mężczyzn, bez faceta, który pracował przez ponad rok. Kiedy skończyli, ale nie byli w stanie uzyskać przyzwoitej wydajności, wezwali go o pomoc, a po kilku dniach on i jego kolega wskazali dziesiątki wąskich gardeł.

Java Card to podzbiór Java przeznaczony do działania na bardzo małych urządzeniach. Jego implementacja działała na kartach inteligentnych, które mają kilka MHz zegara i 2 lub 3 KB pamięci RAM.

Po prostu dla zabawy: innym jego codziennym wyczynem było zanurzenie się w transie pracy, nie odpowiadając na żadne z pytań, które stażyści krzyczeli w pokoju, a potem nagle 2 godziny później wyskakiwali ponownie, gdy jego praca była wykonywana i odpowiadali na 5 lub 10 pytania z rzędu.


1
Myślę, że przeszedłem ponad 200 facetów ... Nie pamiętam zbyt dobrze, to było ponad 10 lat temu. W każdym razie wysłałem mu pytanie!
Gabriel,

1
Cholera, ten facet musi być cyborgiem.
mlvljr,

Tak, mieli ponad 30 lat (=
Gabriel

5

Pamiętam to bardzo wyraźnie; w liceum kolega z klasy zakodował pełnoprawną grę samochodową podczas kilku lekcji z QB45 (Quick Basic 4.5). Przewijanie w pionie, stoper, życia, poziomy; Byłem całkowicie zszokowany.


1
Widziałem faceta robiącego to w przygodowej grze tekstowej w Lisp. Sam w sobie nie imponujący, ale w tym czasie zrobił to ... wow.
Michael K,

5

Git i / lub Linux

Linus Torvalds napisał od podstaw jądro systemu operacyjnego i system kontroli wersji. Nie znam nikogo o podobnej wydajności.


16
Popularny w Linuksie jest łatwy do przesadzenia z trudnościami i / lub oryginalnością. To prawie całkowicie klon istniejącego systemu. W porównaniu do (dla jednej oczywisty przykład) Dave Cutler po pisemnym RSX / 11, VMS i Windows NT od zera, każdy nowy i unikalny dzieło (i, dla tych, którzy dbają, system plików VMS zawarte kontroli wersji) Linus Hasn” Nawet dotarł jeszcze na mapę.
Jerry Coffin,

1
Wyrazy uznania dla VMS, ale z tego samego powodu musisz zdyskontować NT. Wikipedia mówi „[...] prowadzony przez Dave'a Cutlera do budowy Windows NT, a wiele elementów projektu odzwierciedla wcześniejsze doświadczenia DEC z VMS i RSX-11 Cutlera”. W każdym razie uważam, że Git robi wrażenie.
LennyProgrammers,

@ Lenny222: chociaż z pewnością jest prawdą, że można znaleźć znaczne podobieństwo między VMS a Windows NT, nie jest nawet bliski bycia takim klonem jak Linux. Myślę też bardzo dobrze o Git - ale gdyby nie istniał, mogę wymyślić co najmniej dwie lub trzy inne, które działałyby dobrze na jego miejscu.
Jerry Coffin,

5
Czy Linus nie działał sam na Linuksie przez mniej więcej miesiąc, a potem okazał się bardzo udanym projektem społecznościowym? Rzeczywiście świetna robota, ale nie sklasyfikowałbym jej jako indywidualnego wyczynu programistycznego, ale raczej jako bardzo udany wspólny projekt open source.
David Reis,

1
Myślę, że chodzi nam o to, że teraz mamy użytkowników X korzystających z Linuksa w domu ... Podejrzewam, że masz w domu skrzynkę VMS? Owszem, nie był to żaden utwór jednego autora ... i odwrotnie, gdyby tego nie zrobił, czy te, które są krytycznie nastawione, by to zrobić?
RobotHumans,

5

Richard M. Stallman przychodzi mi na myśl. Ten jeden człowiek zaczął dawać życie GNU Emacs, GCC, GDB i wielu innym znaczącym programom. Udał się nawet autorowi oryginalnej GPL. Słyszałem, jak mówi o nim, że idzie do jaskini na 18 miesięcy i wraca z ponad 150 000 wierszy kodu, które tworzą kompilator C pakietu GCC. Te 150 000 LOC dało później podwaliny dla g ++. Jego własnymi słowami Emacs zaczął jako edytor tekstu, potem stał się sposobem na życie, a teraz jest religią dla niektórych z nas. Nawet dziś zasady projektowania Emacsa są stosowane w wielu udanych programach.

System TeX Donalda E. Knutha to kolejny program, który przychodzi na myśl, gdy myślisz o programowaniu cudów.


Powinieneś spróbować czytać TeXbook. Nie jest dla zwykłych śmiertelników.

Tworzenie GPL nie jest imponującym wyczynem. To byłoby jak zapisanie się w Singletons.
DeadMG

4

W mojej klasie dyplomowej mój kolega z klasy stworzył system operacyjny (choć bardzo prosty, ale uruchomił się z dyskietki i wykonał niezbędne procedury) jako wymaganie projektowe w ciągu 30 dni. Czas trwania obejmuje zarówno niezbędne czytanie / badania, jak i faktyczne kodowanie.

Pamiętam, że listy dyskusyjne os.com zniechęcają go, mówiąc, że nie zrobi tego w ciągu tych kilku dni, a także widziałem, jak chodził po akademiku o 5 rano w półprzytomnym stanie gadającym bełkotem. :-)

On jest niesamowitym programistą.


4

Nie zamierzałem nic mówić, ale ktoś powiedział: „Ruby to wyczyn”, więc

John McCarthy z oryginalnymi FUNKCJAMI REKURSYWNYMI EKSPRESJI SYMBOLICZNYCH I ICH KOMPUTACJI PRZEZ MASZYNĘ , tj. Gazetą , w której zdefiniował Lispa w 1960 roku, kiedy to ifbyła koncepcja, o której ludzie zaczynali poważnie myśleć. Mów o wyprzedzaniu swojego czasu.


niezłe referencje. to ja wysypałem się rubinem, dla elegancji ponad konwencją. to także przed czasem
RobotHumans,

1
McCarthy napisał artykuł z matematyki. Dopiero później okazało się, że można go przekonwertować na rzeczywisty kod.

1
@ Thorbjørn Ravn Andersen - Ostrożnie użyłem słowa „zdefiniowano”, a nie „zaimplementowano”.
Inaimathi

@Thor To trochę jak odmawianie Arthurowi Clarke'owi uznania za odkrycie (lub wynalezienie) okrągłej orbity geosynchronicznej po prostu dlatego, że nie mógł zbudować rakiety, aby umieścić tam satelitę lub ponieważ technologia jeszcze nie istniała.
Mark C

4

Kompilator Walant Bright Symantec / Zortec C ++ nadąża za kompilatorami wdrażanymi przez ogromne zespoły programistów. Później jego projekt i realizacja D.




0

8-bitowy programista gier komputerowych z lat 80-tych (np. Commodore 64), niektóre całkiem dobre gry były w języku maszynowym, a ich rozmiar był często mniejszy niż bitmapa dla ikony Windows ;-) Optymalizacja w najlepszym wydaniu

Geos (system operacyjny WYSIWYG dla Commdore 64) był imponujący jak na swój czas


-2

Nie jestem pewien, czy to się naprawdę liczy ... ale facet, który rozwinął rubin. Po prostu nie mogę ominąć elegancji tego języka. I wierzę, że był to pierwszy język, który wspiera dynamiczne pisanie, chociaż nie jestem facetem, który zaczynał od puncards i pisania asemblerów, więc mogłem się pomylić.


3
To nie był pierwszy język z dynamicznym pisaniem i nie, nie powinieneś zaczynać od dziurkowania, żeby to wiedzieć.
Jas

-3

David Heinemeier Hansson tworzy Railsy.

Gdy instalowałem Railsy po raz pierwszy i konfigurowałem witrynę testową na bazie danych, wszystkie elementy frameworku i CRUD były automatycznie tworzone, konfigurowałem stronę testową i wyglądało to tak, jakby moje oczy były otwarte po raz pierwszy na to, co można zrobić przed tobą rozpocząć programowanie. To było naprawdę imponujące i od tego czasu widziałem pomysły pojawiające się wszędzie w innych językach / platformach.


Jak to jest wyczyn programowania?
David Reis,

fakt, że dobrze sobie radzi z układaniem tabel za pomocą prostych, należy, należy do habtm ... ponadto abstrahuje łączność z bazą danych w db agnostyczną klasową strukturę db, w której wygląda prawie jak magia, a wszystko, co musisz zrobić, to szyny nowe -d (dbtype) program pakujący generuje i prowizji db: utwórz zestaw komend db: migrate. Generowanie rusztowania dla podstawy do pracy jest miłe. wygląda na to, że ktoś nie lubi rubinów / szyn, ponieważ są one mocno odrzucane, podczas gdy były nowymi podejściami do elegancji w porównaniu do konwencji
RobotHumans


To był zupełnie inny sposób myślenia - uczynienie wszystkiego całkowicie zorientowanym na to, co byłoby idealne, a nie na wystarczające. To było tak, jakby wszyscy nasi programiści jeździli samochodami Model T i nagle pojawiły się szyny i jest to nowoczesne BMW. To była ogromna zmiana w prostocie i łatwości w obsłudze dla programistów jako użytkowników i widziałem wiele innych platform opartych na tych pomysłach od lat.
glenatron,

1
W porządku, ale zauważ, że twoje pytanie nie wymienia imienia faceta, co zrobił, kiedy to zrobił itp. Po prostu mówi: „Ruby jest miły”. Cóż, szczenięta też są miłe, ale to nie jest odpowiedź na to pytanie.
David Reis,
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.