Co potrafisz zbudować za pomocą 600 linijek kodu?

Oryginalny post: What Can You Build in 600 Lines of Code?

Autor: Jeff Atwood

Joseph Cooney przypomina nam, że w styczniu 2007 roku, firma 37signals wypuściła swój produkt, który został napisany w 579 liniach kodu:

Dobrze przeczytaliście, nie w 60000 czy 600000, ale komercyjny projekt napisany w mniej niż 600 linijkach kodu Ruby. Kiedy po raz pierwszy zobaczyłem tę liczbę, niedowierzałem -- pisałem procedury składowane, które są dłuższe. Mój obecny projekt ma więcej linii konfiguracji. Pisałem nawet aplikacje konsolowe w notatniku, które miały więcej kodu i kompilowałem je z linii poleceń, ponieważ myślałem, iż są tak małe, że nie potrzebują plików .sln i .proj. A mimo to 37signals wypuściło swój produkt, który został napisany za pomocą 579 linijek kodu Ruby.

Jak to zostało opisane na blogu Rails, pierwotna premiera produktu została przedstawiona na blogu twórcy języka Ruby -- Matz'a -- w jego natywnym języku, którym jest japoński. O dziwo, istotne fakty wciąż są czytelne:

Oczywiście, prosta liczba linii kodu nie jest całą historią -- najpierw zbudowali cały framework Rails, aby umożliwić tworzenie małych aplikacji typu ta-da list. Ani kod frameworku Rails, arkuszy stylów, JavaScriptu, HTMLa i tak dalej nie zawierają się w tej liczbie. Ale wciąż zgadzam się z Josephem: to zadziwiające osiągnięcie i prowadzi ono do ciekawych przemyśleń:

Mam od czasu do czasu jakieś pomysły na produkt. Jaka jest minimalna ilość kodu, który należałoby napisać, by zrealizować ideę? Jeśli byłbym przygotowany, aby operować z ograniczeniami platformy (jakakolwiek by ona nie była), ile zachodu by mi to zaoszczędziło? Ile jeszcze "interesujących pomysłów" mógłbym zrealizować, gdybym był przygotowany trzymać się tych ograniczeń? O ile więcej fajnych/użytecznych rzeczy mógłbyś zbudować, jeśli narzuciłbyś sobie, że każda z nich miałaby 600 linii kodu?

Co Ty potrafisz stworzyć za pomocą 600 linii kodu? Pomyśl o tym jak o ćwiczeniu na minimalizm. Czy Twój ulubiony język programowania bądź środowisko daje Ci swobodę tworzenia czegoś interesującego i użytecznego przy takim założeniu?

Data publikacji oryginału: 24 stycznia, 2008

16 komentarze:

Tomasz Kowalczyk pisze...

Kompresując nawiasy gdzie się da, ew. w ogóle nie stosując "nowej linii" można jeszcze krócej ;]

Anonimowy pisze...

Aaaale słabe! Ja nie mogę. Właśnie pracuję nad frameworkiem (dla baaardzo dużej firmy), który ma umożliwiać napisanie aplikacji bardzo prosto. Myślę, że naprawdę skomplikowany projekt (stosując nasz framework) zawarłbym w 200 liniach! Co kurna z tego, skoro w każdej z tych linii jest odpalany kod tak skomplikowany i tak długi, że filozofom się nie śniło.

Kolejne głupie wyzwanie Jeffa. To ja już wole konkursy na najlepszą projekcję graficzną w 256 znakach. Bez frameworków, czysty asm. Da się

rafek pisze...

@Anonimowy: Dlaczego od razu głupie? Nieważne ile frameworków wywołasz, mając pewne zasoby, co jesteś w stanie zrobić w 600 liniach kodu -- niezależnie od tego czy to jest SML, Logo Komeniusz czy C#. O to chodzi.. siadasz, wklepujesz 600 linii i masz otrzymać coś użytecznego.

Tomasz Kowalczyk pisze...

Idea ciekawa, ale myślę że jak zwykle chodziło Jeffowi o zdrowy rozsądek i pisanie w miarę "kompaktowego" kodu, bo jak to ktoś kiedyś łądnie ujął - "mierzenie oprogramowania za pomocą ilości linii kodu to jak mierzenie funkcjonalności samolotu biorąc pod uwagę jego ciężar".

btw. dlaczego podczas pisania komentarza nie mogę przesuwać się po tekście strzałkami?

Sobol pisze...

Na tej zasadzie można całą logikę aplikacji wrzucić do DLL'ki i wywołac tylko myCode.go();. Potem mówimy, że DLL to był tylko frame, a nasza aplikacja ma 4 czy 5 linii kodu.

rafek pisze...

@Sobol: zauważ, że mowa jest o frameworku, który jest reużywalny. W innym przypadku -- masz rację. Ale pomyśl sobie, że za pomocą tej DLLki możesz napisać wiele różnych projektów -- tak jak za pomocą Rails, .NET, czy co tam kto woli.

Sobol pisze...

I tak i nie. Nie napisałem nic, co by miało być w takiej DLLce. Można w nią wsadzić engine 3d, frame sieciowy, czy whatever. Wspomniana "żartobliwie" funkcja go() nie byłaby jedyną :P
Generalnie ja uważam, że nie chodzi o to, żeby napisać program w jak najmniejszej ilości linii, tylko żeby był on jak najbardziej użyteczny. Dlatego takie wyścigi mnie śmieszą.

rafek pisze...

@Sobol: Nikt nie twierdzi, że mamy pisać tylko programy, które mają 600 linii i mniej. To jest raczej wyzwanie.. czy potrafisz napisać coś ciekawego za pomocą %TWOJ_ULUBIONY_JEZYK_PROGRAMOWANIA% w 600 bądź mniej linijkach, ot co.

batman pisze...

Dołączę się do głosów wyrażających niezadowolenie (delikatnie pisząc) z "wyzwania". ~Sobol ma całkowitą rację. Co z tego, że napiszę 183 wiersze z kodem, gdy:
1. Za wszystkim stoi tyle kodu, że cały pion IT międzynarodowej korporacji nie będzie w stanie go ogarnąć.
2. Jedna linia kodu będzie miała kilka tysięcy znaków.
Byłoby się nad czym zachwycać, gdyby te 600 linii kodu, było całym produktem samym w sobie.

rafek pisze...

@batman:
Ad.1: Podejrzewam, że tak jest z każdym frameworkiem. Czy to oznacza, że nie mogę użyć RoR, bo będzie problem ze zrozumieniem Railsów?
Ad.2: Myślę, że należy kierować się zdrowym rozsądkiem.

Ostatnie Twoje zdanie jest już sensowne. Niemniej jednak idąc tym tokiem myślowym doszlibyśmy do tego, iż prawdziwym wyzwaniem będzie 600 linii 0 i 1 -- bo przecież funkcje w C albo i komendy assemblera nie są atomowe.

Dlatego -- 600 linii, w dowolnym języku, używając dowolnego frameworku (gdzie framework rozumiemy poprzez strukturę wspomagającą tworzenie, rozwój i testowanie powstającej aplikacji)

batman pisze...

~rafek
Nie twierdzę, że korzystanie z gotowych rozwiązań jest złe. Wręcz przeciwnie. Oznacza to zrozumienie problemu oraz umiejętność doboru odpowiednich narzędzi (przynajmniej powinno). Jednak robienie wielkiego halo z faktu, że ktoś napisał kilkaset linii kodu, jest porównywane z radością rodziców z powodu pierwszej kupy na nocniku.

rafek pisze...

@batman: tak więc podejrzewam, że Ty byś się nie pochwalił tak "wątpliwym" osiągnięciem, tylko zostawił to dla siebie. Wiadomo, że jest to sztuka dla sztuki tak jak napisanie RollerCoaster Tycoon za pomocą assemblera.

batman pisze...

~rafek
Masz rację. Jest to sztuka dla sztuki.
Możliwe, że w przyszłości będę się cieszył takimi rzeczami - na dzień dzisiejszy jest to dla mnie po prostu fanaberia.

whill3r pisze...

Szkoda, że nie możemy podejżeć kodu tej aplikacji :) W sumie korzystałem z niej kiedyś i nie jest ona zbyt skomplikowana ...

Chodzi tutaj raczej o to, że stworzony został ciekawy produkt, małym nakładem pracy. Podejżewam, że nie ma tam linii długości muru chińskiego :) I kłótnie o to, czy Jeff ma racje, czy nie nie mają chyba większego sensu.

Jeżeli racjonalnie podejdzie się do tego 'wyzwania' może się okazać ono bardzo ciekawym ćwiczeniem :)

Anonimowy pisze...

W kiedyś istniejącym piśmie "Tajemnice Atari" był cykliczny konkurs na napisanie dowolnego programu w BASIC, w maksymalnie pięciu linijkach.

Anonimowy pisze...

Po przeczytania wszystkich komentarzy mam wrażenie, że nikt nie zrozumiał tego postu. Przykre.

Prześlij komentarz

Related Posts with Thumbnails