Jeśli konkurencja używa „lingua obscura” do programowania (dlaczego), powinienem się martwić? [Zamknięte]

16

Czytałem esej Paula Grahama - Beating The Averages (2003) i oto, co miał do powiedzenia:

Im bardziej charakter IT miał opisy stanowisk, tym mniej niebezpieczna była firma. Najbezpieczniejsi byli ci, którzy chcieli doświadczyć Oracle. Nigdy nie musiałeś się o to martwić. Jesteś również bezpieczny, jeśli powiedzą, że chcą programistów C ++ lub Java. Gdyby chcieli programistów Perla lub Pythona, byłoby to trochę przerażające - to zaczyna brzmieć jak firma, w której przynajmniej stroną techniczną zarządzają prawdziwi hakerzy

To jest przestarzały esej. Nie widzę jednak, w jaki sposób używanie nietypowego języka (C / C ++ / Java, C #) byłoby „mniej niebezpieczne” . Jeśli programiści organizacji bardzo biegle posługują się językiem programowania, powinni być równie biegli w tworzeniu kodu w przyzwoitym tempie. W rzeczywistości, jeśli użyjesz niepospolitego języka, problemy z konserwacją / ulepszaniem nie uderzą cię w twarz, ponieważ na zbyt długo nie będzie dostępnych zbyt wielu programistów?

Jeśli chodzi o tworzenie szybkich i brudnych systemów, zgadzam się, że niektóre języki pozwalają na start stosunkowo szybciej niż inne. Ale czy esej / komentarz Paula Grahama ma sens w 2012 roku i później? Gdyby startup miał użyć typowego IT miałby języków do programowania, dlaczego jego konkurencja nie powinna się tak martwić?

Nie rozumiem, jak sam język robi różnicę. IMHO to doświadczenie programistów z językiem, który ma znaczenie, oraz dostępność frameworków, dzięki czemu SUSZASZ (nie powtarzaj się) nie tylko kodując w danym języku.

Czego mi brakuje? Czy to oznacza, że ​​startupy lepiej wybierają języki bez smaku IT (nawet jeśli programiści mogą być w nich bardzo biegli)? Jakie (programujące) siły ekonomiczne / rynkowe stoją za tym roszczeniem?

PS: „lingua obscura” nie ma na celu zranienia niczyich uczuć :)

Doktorat
źródło
4
Różnica między językami towarowymi a językami mocy jest wciąż ogromna. Nadal można wyprzedzić Javę lub podobne tempo rozwoju, powiedzmy, Lisp w rzędach wielkości.
SK-logic
4
@ SK-logic - jakieś dane, aby to zrobić?
doktorat
2
@Nupul, prawie nie ma formalnych badań nad produktywnością języków programowania, więc mogę polegać tylko na niepotwierdzonych dowodach i własnym doświadczeniu. Widziałem tylko kilka dokumentów, spróbuję je później wykopać. Jeśli chodzi konkretnie o Lisp, różni się od innych języków tym, że można go dosłownie łatwo i tanio zamienić na dowolny język. Łączy więc wszystkie właściwości i zalety wszystkich innych języków, podczas gdy języki inne niż moc są stałe i wąskie. Może to wyjaśnić różnicę w wydajności.
SK-logic
8
@ SK-logic naprawdę? Pomimo argumentów przeciwnych LISPers, faktem jest, że bardzo niewiele programów wartościowych zostało zbudowanych przy użyciu Lisp - z możliwym wyłączeniem Emacsa - i prawie żadnych dużych stron internetowych - z wyłączeniem ViaWeb około 1997 roku. pomimo twierdzeń o niewiarygodnym wzroście produktywności, większość zwolenników LISP rozmawia i nie chodzi. Mają tylko akademickie materiały badawcze (więcej na temat badań, a mniej na jakości produkcji), projekty hobbystyczne i niektóre wewnętrzne rzeczy używane w kilku firmach.
Hejazzman
2
@ SK-logic Problemem jest brak pisania statycznego, pomimo możliwości implementacji języka statycznego w Lisp.
BenjaminB

Odpowiedzi:

16

Łańcuch narzędzi jest objawem.

Kiedy firma wybiera Oracle, oznacza to:

  • Dużo pieniędzy do wyrzucenia
  • Duża korporacja
  • Głęboko zagnieżdżona struktura organizacyjna z wieloma warstwami zarządzania
  • Firmą zarządzają „garnitury”: albo kierownictwo, albo marketing i sprzedaż
  • Tworzy duże monolityczne produkty programowe z gigantycznymi bazami kodów
  • Formalne procesy na wszystko

Gdy firma wybiera Pythona, jest to znak:

  • Mała młoda firma
  • Brak pieniędzy do stracenia
  • Płaska hierarchia
  • Firmę prowadzą programiści
  • Tworzy małe produkty jednocelowe z małymi podstawami kodowymi
  • Przeważnie nieformalne procesy

Kiedy te dwie osoby się spotykają, strategia dużej korporacji polega na unikaniu ryzyka, wykorzystaniu pędu i wyprzedzeniu konkurencji. Strategia małej konkurencji polega na tym, aby najpierw pokonać konkurencję na rynku, a następnie być lepszym produktem. Jeśli mała firma wybierze odpowiednie bitwy, może łatwo przewyższyć dużą firmę, po prostu będąc szybszym i bardziej reaktywnym oraz wykorzystując tendencję dużej firmy do unikania ryzyka.

tdammers
źródło
1
Firma korzystająca z Oracle prawdopodobnie będzie tam jeszcze za pięć lat!
James Anderson
3
@JamesAnderson: w zależności od rynku, tak. Jeśli próbują zostać kolejnym facebookiem, prawdopodobnie nie; jeśli są dużą firmą ubezpieczeniową, prawdopodobnie tak. Ale jeśli jesteś dużą firmą ubezpieczeniową, start-up w garażu nie jest czymś, czego powinieneś się obawiać.
tdammers
Wygląda na to, że chcę pracować w sklepie Python / Ruby / Scala / Clojure ... mmm. Biorąc pod uwagę moje doświadczenie, miejsca, które się zwróciły, wydają się być bardzo powolne. Nie pewny dlaczego. Ból związany z przenoszeniem jednej wersji do przodu jest często łagodniejszy niż przenoszenie kilku wersji do przodu. Płatne oprogramowanie „zwykle” oferuje migrację, ale ta migracja zazwyczaj w większości przypadków obejmuje różne wersje.
Rig
25

Wybór niejasnego języka oznaczałby rzadką techniczną pewność siebie w startupie. Firma chcąca porzucić powszechną mądrość może wiedzieć coś o rozwoju oprogramowania, czego większość firm nie wie. Z drugiej strony, mogą być tylko palantami.

samwise
źródło
1
Rzeczywiście, właśnie to Graham rozumie przez „ to zaczyna brzmieć jak firma, w której przynajmniej strona techniczna jest prowadzona przez prawdziwych hakerów ” - firma, w której przynajmniej technolodzy mogą być wystarczająco sprytni, aby być dla niego prawdziwą konkurencją.
Ross Patterson
8
W dzisiejszych czasach są to jednak głównie szaleniec, ponieważ „wybór nieznanego języka” jest modą wśród szalonych i dyletantów.
Hejazzman
2
Wskazuje również, że firma patrzy do wewnątrz i koncentruje się na „jak budować”, a nie na „co budować”. Takie firmy nie przyciągają wielu klientów.
James Anderson
13

Widzę komentarze PG bardziej na temat postawy niż specyfiki języka. Ludzie z wewnętrznym nastawieniem IT grają bezpiecznie. Korzystają z technologii niskiego ryzyka, mają procesy minimalizujące ryzyko i podejmują strategię niskiego ryzyka. Są zbyt zajęci martwieniem się o swój lunch, aby zjeść swój.

Ludzie na krawędzi krwawienia (python 2003) powinni się martwić. Oni są głodni. Podejmują ryzyko. Są intelektualnie ciekawi. Ten sam typ osoby, która spóźnia się z nauką nowego ekscytującego języka, jest typem osoby, która może ulepszyć Twoją branżę przed tobą.

MathAttack
źródło
4
Oczywiście mogą zostać połknięci w całości przez jedno z tych ryzyk, które podjęli ...
Michael Borgwardt
3
„” „Ludzie z najnowszymi trendami (python 2003) są tymi, o których należy się martwić. Są głodni. Podejmują ryzyko. Są ciekawi intelektualnie.” „” - lub są ofiarami mody używającymi najnowszego modnego języka i mają brak kontaktu z pragmatyką rozwoju.
Hejazzman
2
Oba są prawdziwe. To gra liczbowa. Ale przeciwnie. Czasami wartości odstające wybuchają. Czasami się udaje. Ale czy kiedykolwiek obawiałbyś się konkurenta, który przyjdzie po ciebie z COBOL?
MathAttack
13

Graham oznacza mniej niebezpieczny dla niego jako konkurenta, a nie tylko mniej niebezpieczny. Jego zdaniem nie chodzi o to, że Java (lub C ++ w 2003 r. Lub COBOL w 1980 r.) Jest mniej niebezpieczna, ale raczej, że jest normalna i że istnieje duże prawdopodobieństwo, że firmy poszukujące takich umiejętności są jedynie przeciętnymi konkurentami. Ale firmy, które szukają silnego talentu w niejasnych (lub, mówiąc dokładniej, mocniejszych i mniej znanych) językach, są firmami do obejrzenia.

I tak, ma to dziś sens. To miało sens na długo przed napisaniem przez Grahama, wtedy po prostu nie rozmawialiśmy o Javie.

Ross Patterson
źródło
6
Gdybyśmy teraz nie musieli rozmawiać o Javie.
DeadMG,
8

Zobaczmy, jakie języki były używane przez udane start-upy. Nienaukowa lista z góry mojej głowy. Właściwe randomizowane badania byłyby lepsze, gdyby ktoś miał energię.

  • Facebook: PHP
  • Stackexchange: C #
  • Google: Java i Python
  • Twitter: Ruby on Rails

Przypuszczalnie dochodzimy do wniosku, że Facebook i Stackexchange nie stanowiły żadnego zagrożenia dla ich konkurentów. Niezbyt przekonujące.


Zobaczmy, czy Paul Graham w to wierzy obecnie. Współzałożyciel YCominator, który finansuje start- upy . Strona główna zawiera listę niektórych udanych start-upów. Przejrzałem je w kolejności, bardzo szybko próbując zbadać języki, których używali na początku.

Cóż, są pewne oznaki preferencji dla stosunkowo niejasnych i prawdopodobnie potężnych języków. Ale wymienione są także Flash, PHP i klasyczna ASP.


To jest esej . Jest to hiperboliczny zastrzyk dla stosunkowo niejasnego języka, który uwielbia, wraz z podstawową radą, że start-upy powinny pokochać swoją technologię i działać tak szybko, jak to możliwe. Słusznie.

MarkJ
źródło
3
Reddit zaczął w Lisp, ale poszli i napisali wszystko od nowa w Pythonie dość wcześnie, ponieważ nikt nie mógł zrozumieć Lisp.
Mason Wheeler
Google używa wielu języków do wielu różnych rzeczy. Używają C ++ do większości swoich podstawowych produktów, takich jak wyszukiwarka, chrome itp.
mike30
@Mike Pytanie dotyczy startupów. Kiedy Google było startupem, używali pierwszych języków Java i Python.
MarkJ
6

Przeciętny programista używa przeciętnych narzędzi, ponieważ nie widzi wartości mocniejszych:

„Tak długo, jak nasz hipotetyczny programista Blub patrzy w dół na kontinuum mocy, wie, że patrzy w dół. Języki słabsze niż Blub są oczywiście słabsze, ponieważ brakuje im niektórych funkcji, do których był przyzwyczajony. Ale kiedy nasz hipotetyczny programista Blub patrzy w drugą stronę, w górę kontinuum mocy, nie zdaje sobie sprawy, że patrzy w górę. To, co widzi, to tylko dziwne języki. Prawdopodobnie uważa ich za równoważnych mocy Blubowi, ale z tymi wszystkimi innymi włochatymi rzeczami. Blub jest dla niego wystarczająco dobry, ponieważ myśli w Blubie ”(Paul Graham, Beating the Averages) .

(Podkreśl moje.)

Im mocniejszy język, tym mniej programistów będzie go używać i tym rzadziej będzie on używany. Popularność jest zatem dobrym miernikiem tego, jak daleko siła języka jest od średniej. Im bardziej niejasny jest język, tym większa jest szansa, że ​​programista, który go używa, wie, co robi, i wybrał go z dobrego powodu w porównaniu z innymi profesjonalistami - a doświadczony konkurent jest niebezpieczny.

Jon Purdy
źródło
3
To niekoniecznie prawda. Oprzyrządowanie, reklama, istniejące biblioteki i wysokiej jakości materiały dydaktyczne mogą również zmienić popularność języka.
DeadMG,
@DeadMG Tak, oczywiście, moc ekspresyjna nie jest jedynym czynnikiem. Wydaje mi się, że założyłem milcząco, że wszystkie języki we wspólnej świadomości są w przybliżeniu równe pod względem marketingu, narzędzi i dokumentacji; w przeciwnym razie nie można ich w ogóle porównać. Do diabła, nawet osobiste preferencje mają z tym wiele wspólnego. Jeśli wiesz, że Haskell jest lepszy do jakiegoś zadania, ale po prostu naprawdę lubisz C, możesz napisać coś w C dla czystej cholery.
Jon Purdy
Wydaje mi się, że domyślnie założyłem, że wszystkie języki w powszechnej świadomości są w przybliżeniu równe pod względem marketingu, narzędzi i dokumentacji ... - I mylisz się, robiąc to. Właściwie to źle.
Jim G.
1
@JimG. Czy możesz podać konkretny przykład? Biorąc pod uwagę indeks TIOBE, wszystkie 10 najlepszych i większość 50 najlepszych wydaje się porównywalnych w tych obszarach. Poza tym ludzie dobrze robią porównania funkcji między językami, które różnią się znacznie mocą ekspresji, więc dlaczego nie zrobić tego samego w odniesieniu do innych aspektów?
Jon Purdy
5

Wybór języka jest trudny dla startupu. Wiele bardzo dobrych startupów wybiera „popularne” języki, aby szybko wejść na rynek, poznać założyciela i ułatwić przyszłe zatrudnienie.

Wybór rzadziej używanego języka niesie dobre znaki. Mówi, że jesteś przygotowany na poważne potraktowanie rozwoju i ciężką próbę zatrudnienia wyspecjalizowanych programistów. To tylko sygnały, że start-up to coś więcej niż wybór języka.

Podsumowując, wybór języka powinien być odpowiednio oceniany w kontekście. Na przykład Facebook działał poprawnie przy użyciu php, który ogólnie nie jest uważany za bardzo skalowalny język

Tom Squires
źródło
1
+1, jeśli tylko za mało powiedziane „Facebook zrobił OK”.
MarkJ
5

Zapytaj najlepszych i najgorszych programistów, których znasz, według dowolnych kryteriów, jakie znają języki. Teraz napisz ogłoszenie o pracy, aby przyciągnąć tego pierwszego, a otrzymasz odpowiedź. Nawet jeśli twoja aplikacja jest w C ++, zyskasz lepszą klasę programistów, jeśli zatrudnisz tych, którzy znają języki, których nie uczy się w szkole.

Karl Bielefeldt
źródło
2
-1: Hę? Przepraszam, zgubiłeś mnie.
Jim G.
4

Są dwie różne rzeczy, o które powinieneś się martwić, jeśli zawodnik używa nietypowego języka:

  • Przewaga produktywności - istnieją zalety i wady nietypowych języków, ale zakładając, że konkurencja dobrze wybrała dla danej problematycznej dziedziny, mogą oni mieć prawdziwą przewagę produktywności. Na przykład możliwości metaprogramowania w Lisps zapewnią realną i znaczącą przewagę wszędzie tam, gdzie trzeba wykonać znaczną ilość automatycznego generowania kodu w locie.
  • Atut kulturowy - jeśli firma używa niezwykłego języka interesującego wielkich hakerów, prawdopodobnie jest w stanie przyciągnąć i zatrzymać wielkich hakerów. Firmy żyją i giną dzięki jakości swoich pracowników, więc jeśli przekłada się to na długoterminową przewagę talentów, może być naprawdę znaczące.

Obie te zalety mogą nie mieć zastosowania w danej sytuacji. Na przykład startup może łatwo przyjąć język „ponieważ jest fajny” bez zastanowienia się, czy to właściwy wybór. Mogą łatwo popełniać błędy w zatrudnieniu. Mogą łatwo strzelać sobie w stopę, nadużywając „mocnego” języka.

Ale jeśli konkurent wybiera nietypowy język i dobrze go używa wtedy tak, możesz mieć poważne zagrożenie.

Myślę, że ta zasada jest dość ponadczasowa i jest tak samo prawdziwa, jak w 2003 roku - konkretne języki i paradygmaty mogą pojawiać się i znikać, ale pomysł wyboru mocnego, ekspresyjnego języka, który będzie pasował do twojej problematycznej dziedziny zamiast ogólnego, bezpiecznego języka ogólnego prawdopodobnie zawsze zasługuje na poważną uwagę.

mikera
źródło
0

Jeśli twoi klienci nie są zamknięci, to tak . Powinieneś martwić się konkurencją używającą zaawansowanych języków.

Java, C #, C ++ są stosunkowo szczegółowe i mają stosunkowo wolne cykle edycji / testowania. Ogranicza to szybkość, z jaką nawet najszybsi programiści mogą dostarczać funkcje. Bardziej wyraziste języki z wbudowanym zaawansowanym metaprogramowaniem i zerowym czasem kompilacji pozwalają ekspertom na tworzenie funkcji tak szybko, jak to możliwe. Jeśli jesteś w wyścigu o udział w rynku, z ogromną nagrodą dla zwycięzcy, warto zatrudnić najlepszych programistów, których możesz znaleźć, i użyć dowolnego języka, który pozwoli im odejść najszybciej. Później możesz się martwić o skalowalność.

Kevin Cline
źródło
1
-1: C #, gdy napisane w bibliotekach Visual Studio, Resharper, LINQ i .NET 4.0 ma powolne cykle edycji / testowania w porównaniu do innych języków?
Jim G.
1
@Jim: nie jestem pewien, jakie są twoje komparatory, ale w porównaniu do Ruby, Groovy, Clojure i innych współczesnych języków dynamicznych, w których używałem C #, jest zdecydowanie bliższy Javie i C ++ zarówno pod względem stylu programowania, jak i szybkości iteracji. YMMV, ale nie sądzę, aby twój głos był szczególnie zasłużony - charakterystyka PO jest zasadniczo uczciwa. Wypróbuj „ekspresyjne języki”, możesz być zaskoczony, co jest możliwe .....
mikera
@Jim G., tak, w porównaniu do Common Lisp, cykl edycji / testowania w C # jest wolny. Nie można zmodyfikować działającego systemu. I musisz napisać znacznie więcej kodu w C #, co jeszcze bardziej spowalnia.
SK-logic
1
Nie, na przykład Erlang umożliwia modyfikowanie środowiska wykonawczego i jest językiem kompilowanym.
Ricky Clarkson
2
@ JimG., Common Lisp jest językiem skompilowanym (cóż, większość implementacji to wyłącznie kompilatory). Kompilacja przyrostowa pozwala wykonywać te same sztuczki co tłumacze, podczas gdy przy osobnej kompilacji są one prawie niemożliwe.
SK-logic