Czy mnogość ram nie ogłusza programistów? [Zamknięte]


22

Biorąc pod uwagę wszystkie dostępne obecnie frameworki, ORM , wstrzykiwanie zależności (DI), odwrócenie kontroli (IoC) itp., Stwierdzam, że wielu programistów traci lub nie ma umiejętności rozwiązywania problemów potrzebnych do rozwiązywania trudnych problemów. Wiele razy widziałem nieoczekiwane zachowanie wkradające się do aplikacji, a programiści nie byli w stanie naprawdę zagłębić się i znaleźć problemów. Wydaje mi się, że gubi się głębokie zrozumienie tego, co dzieje się pod maską.

Nie zrozum mnie źle , nie sugeruję, że te frameworki nie są dobre i nie posunąłem branży do przodu, tylko pytam, czy w wyniku niezamierzonej konsekwencji programiści nie zdobywają wiedzy i umiejętności potrzebnych do głębokiego zrozumienia systemy.


Oto dobry artykuł, który zapamiętałem kilka lat temu, dotyczący twojego pytania. W szczególności autor wskazuje na brak czegoś podobnego do BASIC jako platformy edukacyjnej. salon.com/technology/feature/2006/09/14/basic
GrandmasterB

Trenujemy umiejętności rozwiązywania problemów potrzebne do wyboru właściwego frameworka spośród ton „jeszcze innych” frameworków.
systempuntoout


1
Co to znaczy ogłuszyć grupę ludzi?
Randall Schulz

Odpowiedzi:


18

Zgoda. Obecnie pracuję nad pakietem oprogramowania, który jest tak obciążony przez frameworki, że prawie niemożliwe jest zrozumienie biznesu. Kiedy frameworki usuną Cię z rzeczywistego rozwiązywania problemów biznesowych, a nie tylko z MVC , zaszło już za daleko. Jak twierdzisz, wielu programistów IMO próbuje zaprojektować / zaprojektować program, aby rozwiązać ORM i MVC, i rzadko pytają, czy to rzeczywiście pomaga w jakikolwiek sposób rozwiązać problem, na którym polega oprogramowanie.


Tak, wiem, że wyświetlanie surowego SQL na stronie JSP jest „nie-nie”, ale jeśli jesteś konsultantem terenowym, gdzie to pasuje do konkretnego rozwiązania? I nie, to nie znaczy, że framework nie jest odpowiedni, nie wszyscy klienci mają 20 000 $ siedzących na każdym kroku, aby upewnić się, że niewielki punkt danych jest wyświetlany na stronie.


4
+1...just solving MVC, it has gone too far.
Talvi Watia,

2
Zabawne jest dla mnie to, że Gratzy przyjął tę odpowiedź, a nie społeczność wybrała najlepszą odpowiedź na jego subiektywne pytanie (które mówi coś wręcz przeciwnego). Wygląda na to, że szukał odpowiedzi, zamiast zadawać pytania.
Craige,

1
@Craige - czy sugerujesz, że właściwa odpowiedź jest zawsze najpopularniejszą odpowiedzią?
Jé Queue

1
@Xepoch - wcale. Jako subiektywne pytanie, uważam, że na to pytanie nie ma prawdziwej odpowiedzi na początek. Uważam, że to interesujące, że wybrał odpowiedź, która mówi przeciwieństwo większości innych odpowiedzi na tej stronie. Myślę, że znalazł jedyną odpowiedź, która odzwierciedlała to, co zasugerował w swoim pytaniu, i uznał, że jest poprawna, ponieważ jest zgodna z jego przekonaniami.
Craige,

31

Jest to argument, który pojawia się regularnie, w wielu dziedzinach i w wielu formach.

Ogólna forma tego argumentu to:

Czy posiadanie [x: narzędzie / technologia] pogarsza ludzi w [y: funkcja, na którą wpływa x]?

Na przykład:

  • Czy oprogramowanie CAD robi gorszych inżynierów?
  • Czy kalkulatory w szkole średniej pogarszają matematykę?
  • Czy oprogramowanie społecznościowe ogranicza osobiste umiejętności społeczne?
  • Czy oprogramowanie księgowe produkuje gorszych księgowych?

Z pamięci wszechobecna odpowiedź brzmi prawie zawsze: niezupełnie. Zawsze będziesz mieć ludzi, którzy są dobrzy i źli w robieniu [y], ale teraz są po prostu źli w innym aspekcie umiejętności.

Głębsze zrozumienie podstaw każdej pracy pomoże, bez względu na to, co robisz - nawet te, które są uważane za „zaradcze”. Wiedza zawsze pomaga.


Czy większe rakiety wymagają mniej umiejętności od gorszych tenisistów?
systemovich,

22

Abstrakcja jest kluczową koncepcją programowania komputerowego, a ramy pomagają programistom to osiągnąć. To coś dobrego. Wątpię, aby wielu z nas chciałoby opracować złożone systemy w języku asemblera! Myślę, że problem pojawia się, gdy programiści nie mają pojęcia, co kryje się pod warstwą abstrakcji. Innymi słowy, musisz mieć pojęcie o tym, co dzieje się pod maską, nawet jeśli nie wchodzisz w bezpośrednią interakcję ani nie komunikujesz się z tym.

Pamiętam tworzenie niektórych pierwszych dynamicznych stron internetowych w połowie lat 90. przy użyciu C i CGI (w czasach, gdy większość stron wciąż była statycznym HTML). Tak naprawdę nie było dojrzałych języków skryptowych po stronie serwera (takich jak PHP lub ASP) i bardzo mało bibliotek, więc trzeba było napisać cały strumień odpowiedzi HTTP na serwer z każdą stroną. Analiza parametrów GET i POST wymagała napisania własnej biblioteki. To było nudne, powolne, pracowite i bardzo podatne na błędy. Ani trochę za tym nie tęsknię!

Jednak czuję też frameworki, takie jak formularze internetowe ASP.NET, które abstrakują całą bezstanową naturę sieci do tego stopnia, że ​​wielu nowych programistów nie ma pojęcia, co właściwie dzieje się pod maską. Prowadzi to do nieefektywnego, rozdętego kodu, który działa słabo, ponieważ programista łączy elementy razem przy użyciu metod „przeciągnij i upuść”, nie zdając sobie sprawy z tego, co dzieje się na poziomie HTTP.

Uważam więc, że frameworki są niezbędne do tworzenia oprogramowania na wysokim poziomie, ale nie zwalniają programistów z rozumienia tego, co jest abstrakcji. Tak, ramy mogą sprawić, że będziesz głupi, ale tylko jeśli ich nie zrozumiesz.


Nie mogę się bardziej zgodzić z „Formularzami internetowymi ASP.NET abstrakcyjnymi dla całej bezpaństwowej natury sieci” Tak wiele razy spotkałem programistów, którzy nie rozumieją, co dzieje się poniżej i powoduje głupie problemy zIsPostBack
billy.bob

14

Czy automatyczna skrzynia biegów lub wycieraczki z czujnikiem deszczu czynią nas gorszymi kierowcami?

Nie sądzę, że kodowanie bez ram musi oznaczać lepsze zrozumienie bazowych systemów. Dowodem na to jest to, że pracodawcy muszą zadawać proste pytania dotyczące kodowania podczas wywiadów, aby upewnić się, że kandydat potrafi połączyć spójną metodę.

Ostatecznie programista musi się uczyć. Dobre robią, złe nie.

I podobnie, wybór frameworka tylko dlatego, że istnieje bez analizy jego możliwości i zalet / wad jest również oznaką złych praktyk rozwojowych.


11
Automatyczny tranny robi gorszego kierowcę :)
Jé Queue

3
Nie zgadzam się tylko z pytaniem, czy ramy umożliwiają więcej złych programistów?
Gratzy

2
@Gratzy: Nie wydaje mi się. Myślę, że ci sami programiści nadal prosperowaliby bez ram, tylko na różne sposoby.
Adam Lear

3
Nie zgadzam się z Anną. Bez ram nawet leniwi programiści musieli poszerzyć swoją wiedzę. Ramy faktycznie zwiększają (może tylko nieznacznie) liczbę złych programistów.
Wizard

1
Aby odeprzeć argument dotyczący automatycznego tranny: wielu profesjonalnych kierowców nie jeździ ręcznymi samochodami, a wielu innych wybiera flappy zmianę wiosła, która jest generalnie sterowana komputerowo.
Steven Evers,

10

Myślę, że problem polega na tym, że nowi programiści zaczynają od coraz wyższych poziomów abstrakcji, a zatem nie narażają się na bity i bajty rzeczy „pod maską”. Więc nie uczą się niektórych naprawdę podstawowych podstaw programowania, które byłyby pierwszymi rzeczami, których nauczyłem się w minionych latach.

Kręcę głową za każdym razem, gdy oczywiście nowy programista pyta o coś, powiedzmy, o przechowywanie niektórych danych i wszyscy natychmiast mówią im, aby korzystali z narzędzia ORM . Nie, nie, nie, nie, nie ... najpierw muszą się nauczyć, jak to zrobić.


4
Gdzie kończy się mentalność „musisz to zrobić sam”? Czy każdy programista musi napisać własny kompilator przed jego użyciem?
mipadi

2
To się nie kończy. Programiści powinni się zawsze uczyć. Nie wszyscy programiści muszą pisać kompilator. Wątpię jednak, czy istnieje wielu wspaniałych programistów, którzy przechodzą przez całą swoją karierę tak nieuczciwie w swoim rzemiośle, że w pewnym momencie nie próbują go stworzyć.
GrandmasterB

6
Zgodnie z logiką nieużywania narzędzia ORM, dopóki „nie zrobisz tego sam”, prawdopodobnie również nie powinienem używać warstwy abstrakcji bazy danych, dopóki nie wypiszę wywołań bezpośrednio do bazy danych? A właściwie nie powinienem korzystać z bazy danych, dopóki nie napiszę systemu pamięci masowej przy użyciu systemu plików? System plików też jest abstrakcją ... Od czego zacząć? Dla każdego pokolenia będą zaczynać od wyższego poziomu abstrakcji lub w celu uzyskania ciekawszych rzeczy w krótszym czasie.
RationalGeek,

2
Myślę, że jeśli programista pozostaje na wyższym poziomie abstrakcji, może być doskonale kompetentnym programistą i tworzyć doskonale funkcjonalne aplikacje biznesowe ze swoich idealnie funkcjonalnych szaf. Wątpię jednak, by to oni stworzyli kolejny niezbędny język programowania lub stworzyli kolejną innowację w bazach danych lub napisali kolejną innowacyjną grę, która posuwa technologię do granic możliwości.
GrandmasterB

2
@jkohlhepp: W każdym znaczącym projekcie, jaki kiedykolwiek próbowałem, dostarczona abstrakcja zawsze wyciekła. Gdybym nie miał ochoty zrozumieć głębokich rzeczy, co się dzieje, byłbym zagubiony i nieproduktywny. Jeśli kiedykolwiek chcesz robić ciekawe rzeczy, musisz wszystko wiedzieć.
Paul Nathan

4

Być może rozkład „głupoty” tak naprawdę się nie zmienił, a my po prostu proponujemy większe i bardziej skomplikowane sposoby, aby programiści mogli strzelać sobie w stopy?


4

To nie frameworki ogłuszają programistów. Głupi programiści będą głupi, bez względu na to, czy używają ram, czy nie.

Z pewnością jest prawdą, że zrozumienie niskiego poziomu pracy, jaką narzędzie lub struktura pomaga usprawnić, czyni cię lepszym użytkownikiem narzędzi i struktur. Możesz także łatwiej debugować problemy i obejść nieuniknione luki w funkcjonowaniu narzędzi.

Na przykład wziąłem lekcję z Compiler Design na studiach, gdzie zakodowaliśmy parser LR od zera w C, zanim nauczyłem się korzystać z generatorów parsera, takich jak lex i yacc. To było bardzo edukacyjne i od tego czasu lepiej rozumiem i doceniam wszystkie języki programowania, których używałem.

Ale nie mówię, że każdy programista musi trudzić się woskowanie samochodu pana Miyagi przez wiele lat, zanim będą mogli pracować na wysokim poziomie. Wiele prac programistycznych ma charakter intelektualny, decyduje o tym, jakie oprogramowanie musi zrobić , a nie mechaniczna praca nad kodowaniem w określonym języku lub narzędziu.

Ta praca intelektualna jest tam, gdzie inteligencja kontra głupota jest jeszcze ważniejsza.


4

Cytując znakomitą „Spending Moore's Dividend” Jamesa Larusa (wyróżnienie dodane):

Trzydzieści lat temu Bill Gates zmienił monit w Altair Basic z „READY” na „OK”, aby zaoszczędzić 5 bajtów pamięci. Dzisiaj nie do pomyślenia jest, aby programiści byli świadomi tego poziomu szczegółowości swojego programu, nie mówiąc już o tym zaniepokojony, i słusznie, ponieważ zmiana tej wielkości jest dziś niezauważalna ... Nie ma mowy abyśmy mogli wyprodukować dzisiejsze systemy przy użyciu rzemieślniczych, ręcznie wykonanych praktyk, które były możliwe (konieczne) na komputerach z pamięcią 4K.

Myślę, że prawdopodobnie mylące jest stwierdzenie, że ramy pozwalają uniknąć umiejętności niezbędnych do rozwiązywania trudnych problemów lub pozwalają uniknąć głębokiego zrozumienia. Zamiast tego jedynym powodem, dla którego jesteśmy w stanie zbudować dzisiejsze złożone systemy (których złożoność może generować trudne problemy i przeciwstawić się głębokiemu zrozumieniu) jest to, że mamy frameworki (i wysokowydajne języki zbierające śmieci OO oraz IDE z kontekstową pomocą i sprawdzanie składni w locie i wszystkie inne postępy w tworzeniu oprogramowania, które czasami są krytykowane jako głupie programistów).


2

Ramy są świetne. Ale musisz wiedzieć, co jest pod maską. Problem polega na tym, że programiści zbyt mocno polegają na frameworkach, bez wystarczającej wiedzy o podstawowym systemie.

Nieco przestarzały przykład to MFC : programista może zaoszczędzić dużo czasu, używając MFC zamiast Windows API, ale bez znajomości API (co oznacza posiadanie tła prawdziwej pracy z surowym API), często utkną . Prawie nigdy tak się nie stało, ponieważ typowy programista MFC posiadał znajomość Windows API.

Jednak dzięki Windows Forms w .NET , dzięki lepszej enkapsulacji i lepszemu modelowi obiektowemu, programista może prawie zignorować to, że używa tylko innego opakowania Windows API. Tak więc szanse na utknięcie są mniejsze, ale kiedy to się stanie, może to boleć.

Niestety czas wprowadzenia na rynek jest zawsze krótszy, a projekty są coraz bardziej złożone, więc programiści nie mają czasu na głębokie zagłębianie się. To smutny stan branży oprogramowania ...


1

To stawia inteligentnych tam, gdzie musi być. Nie trzeba rozumieć mechaniki kwantowej i fizyki newtonowskiej, aby stworzyć mechanizm, który upuszcza piłkę ze szczytu budynku. Każda nowa warstwa oprogramowania powinna opierać się na ostatniej i usuwać płytę kotłową z budowy przydatnych aplikacji.

Ci, którzy potrzebują lub chcą poznać „rzeczy” stojące za strukturą, będą studiować i badać metodą haczykowatą lub oszustem.


1

Nie, absolutnie nie. Podstawą frameworka jest kombinacja biblioteki podprogramów i szablonu, dwóch sprawdzonych narzędzi programistycznych. „To biedny robotnik obwinia swoje narzędzia ...

... i jest wielu biednych robotników używających i obwiniających frameworki.


Myślę, że nie rozumiesz sedna pytania, które nie sugeruję, że frameworki nie są dobrymi narzędziami, ponieważ istnieje tak wiele narzędzi zapewniających tak wiele abstrakcji, że pozwala to większej liczbie osób obwinić ich narzędzie.
Gratzy

3
@Gratzy: cóż, jasne. Im więcej osób korzysta z narzędzia, tym więcej suka na jego temat. Kiedy komputery były ogromne, drogie i rzadkie, tylko garstka ludzi na świecie mogła narzekać na to, jak trudno było z nich korzystać - teraz wszyscy to robią. Podobnie, frameworki nie muszą powodować, że programiści są głupsi - po prostu przyciągają wielu głupich programistów.
Shog9

1

Podczas tworzenia oprogramowania ramy oszczędzają czas. Ucząc się budować oprogramowanie, ramy przeszkadzają w zrozumieniu.

Myślę, że problem dotyczy głównie komputerów, które stały się zbyt potężne. Dla większości programistów nie ma już żadnego rozsądnego powodu, aby „przejść do podstaw”. Wykonanie tych samych czynności zajmuje więcej czasu, a w czasie wykonywania nie ma znaczącej różnicy. Jedynym sposobem na rozwiązanie tego problemu jest wprowadzenie sztucznych ograniczeń, tak jak robią to zawody takie jak js1k.

Może szkoły powinny mieć dedykowany przedmiot „zoptymalizowany projekt”, w którym musisz budować programy pod silnymi ograniczeniami przestrzennymi i czasowymi?


-1

Nie, nauka ram poprawia umiejętności programisty. Framework jest rozszerzeniem języka programowania. Niektóre języki są już oparte na frameworku. Pracuję zarówno z PHP, jak i Javą. PHP potrzebuje frameworka takiego jak silnik szablonów (czasami). Java nie potrzebuje frameworka (większość razy), ma już wiele metod i bibliotek.

Większość platform ma funkcje, z których programiści korzystają wielokrotnie.


1
Aww, nie możesz się bardziej mylić z odpowiedzią.
NB 6'12

-1

Wydaje mi się, że aby odgrywać tutaj rolę adwokata diabła, ramy (w każdym razie „dobre”) mogą w rzeczywistości przejść długą drogę w kierunku rozwoju edukacji programisty. Dobrze zaprojektowana platforma rozwiąże wiele problemów, a korzystając z niej, programista może zrozumieć, jakie problemy są rozwiązywane i jak. Moim zdaniem platforma jest (powinna być) krystalizacją najlepszych praktyk programistycznych i może uczyć programisty przykładem.


Dlaczego głosowanie negatywne? Po prostu dlatego, że się nie zgadzasz? Gwizd.
Chris Allen Lane,
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.