Jeśli język zmienia się szybko, czy jest to uważane za dobrą rzecz?

14

Widziałem niektóre języki, które zmieniają się szybko (mam na myśli, że są ulepszane co roku, na przykład), a niektóre, które są poprawiane powoli.

Moje pytanie: jeśli język zmienia się szybko, czy to dobra, czy zła rzecz dla programisty? Czy programiści lubią uczyć się nowych rzeczy w języku, czy wolą trzymać się tego, co już wiedzą?

Simon Smith
źródło
4
-1: Zbyt niejasne i hipotetyczne, aby można było w ogóle odpowiedzieć. Co jest „szybko”? Co jest „ulepszone”? Jeśli wszystkie zmiany są kompatybilne wstecz, jakie to ma znaczenie? Popraw pytanie, aby było bardziej szczegółowe. Pomocny może być konkretny język, który szybko się zmienia.
S.Lott,
Czy stare programy nadal działają bez zmian?
4
Z pewnością wolę język, który w ogóle się nie zmienia, ale jest wystarczająco elastyczny, aby umożliwić dodawanie dowolnych nowych funkcji jako bibliotek. Ogromne i niezdarne języki ze wszystkimi cechami ukrytymi w ich monolitycznych rdzeniach są skazane na gnicie.
SK-logic
„Zmiany” i „przerywa zgodność wsteczną” to zupełnie inne rzeczy. To drugie jest prawdziwym problemem.
user16764,

Odpowiedzi:

16

jeśli język szybko się zmienia, czy to dobra, czy zła rzecz dla programisty?

Dobry

  • Zmiany mogą dodać trochę dobrego cukru syntaktycznego, co ułatwi pisanie kodu przy mniejszej liczbie błędów
  • Zmiany mogą znormalizować wspólny wzór idiomu / projektu, który programiści musieli sami wdrożyć lub polegać na podmiotach trzecich.
  • Zmiany mogą ułatwić integrację z technologiami, w których zwykle używa się języka
  • Zmiany mogą pomóc w uniknięciu typowych błędów
  • Zmiany mogą zastąpić lub wyeliminować niebezpieczne praktyki programowania
  • Zmiany mogą zawierać przydatne dodatki do standardowej biblioteki języka dla rzeczy, które kiedyś musiałem wdrażać sam lub polegać na firmach trzecich.

Zły

  • Język ma dodatkową złożoność - nowe funkcje mogą nie zawsze dobrze współdziałać ze starszymi funkcjami (tj. Stosunek C ++ do C)
  • Stary kod może być nieaktualny i może nie działać w nowej wersji języka bez aktualizacji (Python 2.x -> 3.x)
  • Kompilatory i inne narzędzia dla języka muszą zostać zaktualizowane. Teraz istnieje potencjalnie wiele wersji.
  • Biblioteki innych firm mogą nie obsługiwać nowszej wersji języka
  • Pomimo istnienia standardu znalezienie standardowego / normalnego sposobu wdrożenia nowych funkcji i zdefiniowanie niektórych bardziej niejasnych przypadków ich zachowania może zająć trochę czasu

Czy programiści lubią uczyć się nowych rzeczy w języku, czy wolą trzymać się tego, co już wiedzą?

Wielu programistów lubi zaspokoić swoją ciekawość, grając z nowymi funkcjami. Nie oznacza to jednak, że nowe funkcje są zawsze odpowiednie w kodzie produkcyjnym. Jest to indywidualna decyzja, która musi wyważyć korzyści nowych funkcji w porównaniu z kosztem aktualizacji w konkretnej sytuacji.

Mogę się dobrze bawić lub czerpać przyjemność z poznawania nowych funkcji, ale pod koniec dnia naprawdę zależy mi na dostarczeniu komuś przydatnego produktu. Muszę wybrać zestaw narzędzi, który będzie wystarczająco nowoczesny, aby mieć rozsądne wsparcie i stabilność, ale nie tak starożytny, że nie mogę być wystarczająco produktywny.

Doug T.
źródło
C ++ nie jest ewolucją C, jest to nowy język, który jest w jakiś sposób kompatybilny z C.
Nikko
Większość ludzi nie używa poprawnie C ++, używają go tak jak C, ponieważ, no cóż, mogą. A C ++, gdy jest właściwie stosowany, jest wyjątkowo skomplikowany i ma historię niektórych kompilatorów, które nie obsługują wszystkich funkcji językowych.
sylvanaar
Kolejna kluczowa rzecz na rzecz stabilności: Podczas pracy w środowiskach certyfikowanych głównym problemem mogą być aktualizacje języka. Problem polega na tym, że nawet w przypadku niewielkich wydań łatek cały proces certyfikacji musi być wykonywany od zera za każdym razem, a to bardzo czasochłonne.
Donal Fellows
@Nikko zgadzam, ale to jest w dużej mierze kompatybilne z C, co stwarza wiele problemów zabawy :)
Doug T.
11

Ulepszenia są świetne ... jeśli są kompatybilne wstecz .

C # robi to ładnie. Dodają różne wyrażenia lamdba, lepszą obsługę wielowątkowości, linq, ... Ale twój pięcioletni program w języku C # 2.0 będzie nadal działał ładnie bez żadnych zmian i można go łatwo uaktualnić do wersji C # 4.0 bez żadnych zmian.

Uczenie się nowych rzeczy jest świetne, jeśli pozwala ci wykonywać swoje zadania w łatwiejszy i szybszy sposób. Jeśli spędzanie godziny na nauce oznacza oszczędzanie godzin na programowaniu, jest tego warte.

Carra
źródło
5

Chcę regularnych ulepszeń, ale nie chcę, aby złamał bazę kodu 500 kloc i uruchomił ogromny „projekt aktualizacji”, aby kod działał tak, jak w poprzedniej wersji.

Mcottle
źródło
4

Stabilność języka jest koniecznością dla biznesu i programistów. Zmiany w języku są mile widziane, jeśli rozwiązują problemy lub wprowadzają funkcje, których brakowało we wcześniejszych wersjach, ale zmiana języków tak, aby była modna lub po prostu dlatego, że chcesz dogonić konkurenta, nie jest tak dobra.

Gdy język jest stabilny, z czasem programiści przestają koncentrować wysiłki na nauce języka, ponieważ opanowali go i zaczynają koncentrować swoje wysiłki na obsłudze biznesu tym, co wiedzą. Rezultatem jest krótszy projekt, zadowoleni użytkownicy końcowi i bardziej dumni programiści!

Zmiana wiąże się również z kosztami nauki i czasem. Nie wszyscy pracodawcy chętnie edukują programistów w zakresie nowych funkcji. Powoduje to znaczne obciążenie dla programistów, którzy muszą się szkolić - bo to nie jest banalne, kursy specjalistyczne mogą kosztować od 1500 do 3500 USD!

Ciągła zmiana może zablokować programistów w „starszym” oprogramowaniu. Weźmy przypadek programisty ASP, który nie złapał MVVM za 2 lata lub przypadek programisty Windows Forms, który nie nauczył się WPF. To zablokowanie może znacznie zaszkodzić karierze programisty.

Z czasem architektura oprogramowania w firmie staje się sałatką ogrodową. Wszelkiego rodzaju narzędzia i wersje, a projekty zaczynają robić wyłącznie aktualizację oprogramowania z jednej wersji do drugiej bez żadnych korzyści biznesowych.

Bez szans
źródło
2

Nie wydaje mi się, żeby była jakaś odpowiednia odpowiedź.

Mówiąc ogólnie, gdy język jest stosunkowo młody, jest o wiele więcej swobody, aby stosunkowo szybko dokonywać stosunkowo dużych zmian. Nie ma dużej bazy istniejącego kodu do złamania, więc ludzie są na ogół znacznie bardziej otwarci na eksperymenty.

W miarę starzenia się języka, zakładając, że staje się wystarczająco szeroki dla użytkownika, aby ktokolwiek mógł się tym naprawdę przejmować, baza istniejącego kodu zaczyna coraz mocniej ograniczać wprowadzane zmiany. Nie tylko jest więcej kodu wykorzystującego więcej funkcji, ale trudniej jest zgadnąć, jakie zmiany mogą uszkodzić kod, ale zmieniają się oczekiwania ludzi.

Załóżmy na przykład, że w Ruby i Fortran było mniej więcej tyle samo osób. Co więcej, załóżmy, że w obu przypadkach była taka sama ilość kodu. Powiedziałbym, że szanse są całkiem spore, że zmiana, która złamała dokładnie taki sam procent każdego (i w sposób, który wymagał około tej samej pracy, aby poprawić) byłaby o wiele bardziej akceptowalna dla użytkowników Ruby niż dla użytkowników Fortrana z reguły (przynajmniej zakładając, że widzieli to jako poprawę).

Myślę, że wiele zależy również od postrzegania języka przez ludzi na początku. Ludzie, którzy wybierają język, ponieważ jest to „najnowocześniejszy”, są znacznie bardziej skłonni do znoszenia poważnych zmian, które łamią wiele istniejących kodów, jeśli tylko tyle potrzeba, aby utrzymać je na najwyższym poziomie.

Kolejnym czynnikiem jest wielkość i oczekiwana długość projektów, dla których język jest przeznaczony. Język, który obsługuje stosunkowo małe projekty lub te, które znamy z góry, ma krótką oczekiwaną żywotność (np. Interfejs sieciowy) może dość często zepsuć się, ponieważ jest mało prawdopodobne, że wiele osób będzie nadal używać tej samej bazy kodu przez, powiedzmy, 10 lat w jakikolwiek sposób. Język (np. C ++ lub Java), który lepiej obsługuje większe, dłuższe projekty, które mogą zająć, powiedzmy, 5 lat, aby otrzymać pierwszą wersję, może być regularnie używany (i ciągle rozwijany) przez trzy lub cztery dekady, oczywiście wymaga wielki stabilność znacznie więcej.

Jerry Coffin
źródło
2

Miałem faceta, który powiedział mi, że lubi jego C ++ i tak pozostanie. Nie obchodzi go ani nie interesuje się D, nie chce znać ani używać C #. Nauczył się języka Java, ponieważ MUSI to zrobić dla wielu projektów, które musiał wykonać i najwyraźniej wykonuje dobrą robotę w językach, które zna

Inny uwielbia język C # i nie zna każdego słowa kluczowego lub zna biblioteki .NET 4 (asynchroniczne i wszystkie) i nie użył abstrakcyjnych słów kluczowych ani użytych atrybutów.

Po prostu mówię, że większość ludzi NIE PIELĘGNUJ

Teraz efekty aktualizacji są zepsute (w przypadku bibliotek lub skompilowanego kodu) ludzie będą obchodzić.


źródło
C ++ „ewolucja” to C ++ 11, nowa norma. „C #” lub „D” nie są ewolucjami C ++. Ponieważ C ++ nie jest ewolucją C.
Nikko
1
@Nikko: Ah ha. Słuszna uwaga. Wszyscy oprócz niewielkiej grupy programistów C ++, o których wiem, słyszeli nawet o C ++ 0x lub C ++ 11. Jestem prawie pewien, że nie będzie dbał o funkcje ani ich nie oglądał, chyba że firma zaktualizuje kompilatory i nie zobaczy czegoś, co
@ acidzombie24: Programuję w C ++ od dłuższego czasu (od 1995 r.), a moje pierwsze wrażenie z C ++ 11 polega na tym, że dodaje ono do języka więcej złożoności niż rzeczywistej produktywności: semantyka języka stała się tak złożona, że bardzo łatwo wprowadzić bardzo subtelne i trudne do wykrycia błędy. A te wymagają czasu naprawy, co zmniejsza produktywność. Mogę zmienić zdanie, jeśli będę zmuszony naprawdę skorzystać z nowego standardu, ale nawet po głębszym przyjrzeniu się nowym funkcjom moje odczucie nie poprawiło się tak bardzo.
Giorgio,
0

Odpowiem za C # (ale ta analiza może być również zastosowana do Scali):

Ta zmiana funkcji powoduje pewne problemy, gdy zbliżasz się do „stylu” języka:

W 2011 r. C # może robić wiele różnych rzeczy i to dobrze. Niestety ma dwa różne paradygmaty (jeśli nie więcej):

  • OOP
  • Funkcjonalny (pomyśl o funkcjach lambda i LINQ)

Różne style sprawdzania typu

  • Pisanie dynamiczne
  • Pisanie statyczne

Nie zawsze jest jasne, kiedy chcesz użyć jednego lub drugiego.

volothamp
źródło
0

Myślę, że to naprawdę zależy od języka i następujących po nim języków. Na przykład myślę, że jeśli C # i Java zaczną wyskakiwać zmiany w szybszym tempie, to zostanie zaakceptowane (o ile są one kompatybilne wstecz, jak powiedziała Carra ). Jeśli jednak język nie zyskał jeszcze trakcji i wciąż się zmienia szybko, wiem, że nie zawracałbym sobie nim głowy, ponieważ istnieje szansa, że ​​to, czego próbuję się dziś nauczyć, będzie zupełnie inne niż to, co pojawi się za 6 miesięcy i ponieważ język jest nowy / niepopularny, nie byłoby dla mnie szkodliwe (czytaj: moja kariera), żebym go przekazał.

Jetti
źródło