Czy uważasz, że kontakt z BASIC może okaleczyć twój umysł? [Zamknięte]

32

Nauczanie dobrego programowania uczniom, którzy wcześniej mieli kontakt z BASIC, jest praktycznie niemożliwe: jako potencjalni programiści są okaleczeni psychicznie ponad wszelką nadzieję na regenerację

- Edsger W. Dijkstra

Mam głęboki szacunek dla Dijkstry, ale nie zgadzam się ze wszystkim, co powiedział / napisał. Nie zgadzam się specjalnie z tym cytatem na powiązanym papierze napisanym 35 lat temu na temat implementacji BASIC w Dartmouth .

Wielu moich współpracowników lub przyjaciół programistów zaczynało od BASIC, poniższe pytania mają odpowiedzi, które wskazują, że wielu programistów miało pierwsze doświadczenie w programowaniu w BASIC. AFAIK wielu dobrych programistów zaczęło od programowania w języku BASIC.

Nie mówię o Visual Basicu ani innych „nowoczesnych” dialektach języka BASIC działających na maszynach pełnych zasobów. Mówię o dawnych czasach, kiedy BASIC działał na „zabawkowym” komputerze, że programista musiał martwić się zapisaniem małych liczb, które nie muszą być obliczane jako ciąg znaków, aby zaoszczędzić dość bajt, ponieważ komputer miał ich tylko kilkaset, lub muszę użyć obliczonego goto z powodu braku mocniejszej funkcji i wielu innych rzeczy, które wymagają od programisty dużo myślenia przed zrobieniem czegoś i zmuszania programisty do kreatywności.

Jeśli miałeś doświadczenie ze starym językiem BASIC na maszynie z ograniczonymi zasobami (pamiętaj, że prosty mikrokontroler ma dziś znacznie więcej zasobów niż komputer w 1975 r.). Czy uważasz, że BASIC pomaga twojemu umysłowi znaleźć lepsze rozwiązania, pomyśleć jak inżynier lub BASIC przeciągają cię na ciemną stronę programowania i okaleczają cię mentalnie?

Czy warto nauczyć się języka programowania działającego na komputerze pełnym zasobów, na którym początkujący programista może zrobić wszystko źle, a program działa bez większych problemów? A może lepiej dowiedzieć się, gdzie programista nie może się pomylić?

Co możesz powiedzieć o języku BASIC, co pomogło ci zostać lepszym / gorszym programistą?

Czy nauczyłbyś starego BASIC-a działającego na maszynie (wirtualnej) o wielkości 2 KB?

Jasne, tylko narażenie na BASIC jest złe. Być może podzielasz moją opinię, że współczesny BASIC nie pomaga zbytnio, ponieważ współczesny BASIC, podobnie jak inne języki programowania, zapewnia narzędzia, które pozwalają programistom nie myśleć głębiej.

Informacje dodatkowe: Dlaczego BASIC?

powiększenia
źródło
7
zdajesz sobie sprawę, że cytat ma około 35 lat, prawda?
MIA
2
Tak. Link do Dijkstra ma datę publikacji.
Maniero
3
Może młodsze osoby nie powinny udzielić odpowiedzi na to pytanie :-)
Maniero
8
35 lat i jestem pewien, że Eddie też trollował, kiedy to napisał. Nie czytałbym w tym zbyt wiele.
Carson63000,
3
Zgadzam się z @Carson; Wydawało mi się, że przedłużające się narażenie na cynicznych, aroganckich i zgorzkniałych starszych ludzi zrobi ci coś gorszego.
Mark C

Odpowiedzi:

37

Podstawy popularne w momencie cytowania były bardzo różne od tego, co mieliśmy jeszcze 20 lat temu. (Czy zaliczasz je do swoich „nowoczesnych” dialektów?)

Zapomnij o pętlach, podprogramach, zmiennych lokalnych i wszystkim, co podkreśliło programowanie strukturalne (z których Dijkstra i Knuth byli wielkimi zwolennikami). Miałeś GOTO i podobało ci się .

W tym kontekście programiści, którzy znali tylko zmienne globalne, wymyślili własne podprogramy (wykorzystując więcej zmiennych globalnych dla parametrów i zwracanych wartości!) I napisali spaghetti GOTO naprawdę były okaleczone.

Jeśli masz dziś 30 lat lub mniej, a Basic był twoim pierwszym językiem, to nie był ten sam język, o którym mówił Dijkstra. Nawet jeśli jesteś starszy i twój pierwszy Basic miał niektóre z tych funkcji, jak komentuje Murph poniżej, nadal może nie być to ten sam język, o którym mówił Dijkstra.


Zaktualizowałeś pytanie o kontekst, którego nigdy wcześniej nie znałem:

  • Cytat Dijkstry pochodzi z 1975 roku.

  • Dopiero w wersji 6, że masz osobno compilable procedur - co, jak sądzę, pokazuje początku przesunięcia akcentów z dala od Goto.

  • „W 1976 roku Steve Garland dodał funkcje programowania strukturalnego, aby stworzyć Dartmouth SBASIC, prekompilator, który wyprodukował wyjście w wersji 6 ...” [ Wikipedia ] Kontekst cytatu jest wyraźnie przed tym, co obecnie znamy jako struktury kontrolne i wielu użytkowników czas mógł być lepiej zaznajomiony z wersją od drugiej do najnowszej - tj. dwiema wersjami przed Garlandem, czyli w wersji v5 i przed oddzielnie kompilowanymi procedurami.

  • GOSUB / RETURN nadal obsługuje tylko „proste podprogramy”.

  • „Nazwy zmiennych były ograniczone do A do Z, A0 do A9, B0 do B9, ..., Z0 do Z9, dając maksymalnie 286 możliwych odrębnych zmiennych.” ... i wszystkie są globalne.

Roger Pate
źródło
2
Moja pierwsza ekspozycja dotyczyła języka BASIC (w 1979 r.) - ale paradoksalnie dialektu, który sparametryzował procedury i dla którego można było edytować kod w zewnętrznym edytorze tekstu, chociaż zrobiłem więcej rzeczy z mniej elegancką wersją. Kiedy w 1982 roku uczono mnie programowania strukturalnego (i Pascal jako języka do implementacji tego samego), to było tak, jakby słońce wschodziło rano ... Ostatnio użyłem GOTO w pojęciowo „właściwym” języku (DIBOL) w około 1990 ...
Murph,
@Murph: W końcu używam goto kilka razy w roku ... ale z tego samego powodu „goto uważany za szkodliwy” dotyczył globalnych goto, o których wspomniałem powyżej, a nie lokalnych gotos.
1
GOTO aka „masowy losowy skok” - doceniam to, że w artykule nie chodziło o „co”, ale o „jak”, co z kolei jest powodem błędu, ale przyczyniło się do dobrego uogólnienia nagłówka. (Jeśli spojrzysz na, powiedzmy, Fortran IV, nie miałeś innego wyboru niż użycie goto, ale, jak moi wykładowcy próbowali zademonstrować - chociaż udaremniono przez wprowadzenie Fortran 77 - możesz napisać dobrze ustrukturyzowany kod używając gotos)
Murph,
Mówiono mi dokładnie o starych dialektach BASIC. Nie wiem, dlaczego ludzie nalegają na myślenie, że mówię do nowoczesnego języka BASIC. Dla mnie nowoczesny BASIC niszczy umysł programisty. Daje prawie wszystko ugotowane i nie wymaga głębszych przemyśleń. Programy BASIC rzadko przekraczały 1 lub 2KLOC i rzadko miały więcej niż sto zmiennych, dziś powszechna jest klasa, która ma więcej niż to i widzę kilka funkcji źle napisanych wokół tej liczby. Myślę, że Dijkstra miał kontakt z najgorszymi programistami BASIC. Tylko ci, którzy mieli doświadczenie z BASIC-em na maszynie z ograniczonymi zasobami, mogą powiedzieć.
Maniero
@bigown: Ale co dokładnie uważasz za nowoczesne? Nazywanie 30-letniego języka programowania „nowoczesnym” jest dla mnie zdecydowanie niezwykłe.
31

Mężczyzna nie może zrobić nic lepszego niż jeść i pić oraz czerpać satysfakcję ze swojej pracy.

Nauczyłem się języka BASIC przed czymkolwiek innym (no cóż, chyba z algebrą). Jeśli nie poważnie wypaczyło to mojego umysłu, nie jestem pewien, jak wyjaśnić 18 lat, które nastąpiły ...

To powiedziawszy, więc co? Dijkstra może mieć twardy czas uczy mnie czegoś z powodu mojej długotrwałej ekspozycji na podstawowy, ale musiałby się trudniejszy czas uczy mnie czegoś z powodu jego długotrwałej ekspozycji na pole sosnowego podziemnej. I nawet po usunięciu tych czynników, nigdy nie byłem poważnym studentem CS, poważnym studentem matematyki lub poważnym studentem w jakiejkolwiek innej dyscyplinie. Otchłań między kimś takim jak ja i programistą, którego chciałby zobaczyć Dijkstra, jest tak wielka, że ​​jest prawie niezgłębiona ...

A jednak programujemy. My, którzy ząbkowaliśmy na BASIC, bawiliśmy się FORTRANEM, eksperymentowaliśmy z COBOL-em i całą resztą, znaleźliśmy również radość i fascynację tymi małymi maszynami, które, choć być może zupełnie odmienne od tego, co po raz pierwszy wciągnęło pana Edsgera na swoje pole, nie jest mniej powołania, podstawa życiowej pracy miłości.

... a może to po prostu to, co zniszczone umysł by powiedzieć ...

Shog9
źródło
bardzo punny! Poważnie, choć jest to kwestia opinii
RCProgramowanie
17

To nie BASIC cię boli, to brak kontaktu z innymi językami. „Programiści” z Monoglot nie są.

Craig Stuntz
źródło
1
absolutnie poprawne
RCProgramowanie
podczas gdy to prawda, nie sądzę, aby o tym właśnie mówiła ED
jk.
11

BASIC, z ustrukturyzowanego punktu widzenia, nie był gorszy niż asembler lub COBOL. W tamtych czasach nie było już mnóstwa języków potomków Algolu, a Pascal był pierwszym wprowadzeniem, jakie większość ludzi miała do rozsądnych struktur kontrolnych (i nie przepadam za strukturami kontrolnymi Pascala).

Gdyby BASIC wystarczył, aby trwale skrzywdzić ludzi, to byłyby również inne wczesne języki, a więc nie mielibyśmy ludzi bez szwanku, aby rozwinąć wszystkie języki, których dziś używamy.

Możliwe, że Dijkstra miał wtedy do czynienia z ludźmi, którzy nie byli dobrymi programistami i nigdy nie byliby, którzy nauczyli się robić pewne rzeczy w języku BASIC. To najbardziej charytatywna interpretacja, jaką mogę zastosować w tym oświadczeniu.

David Thornley
źródło
Asembler to reprezentacja bajtów, którymi zasilasz komputer. Można wymienić BASICze Assemblerw środki Dijkstry, ale uważam, że jest to język programowania, a nie język programowania. +1 chociaż :)
deltreme
1
Rozumiem, że Dijkstra wyodrębnił tutaj Podstawowy, aby uzyskać szybki cytat i obejmowałby inne niestrukturalne środowiska.
2
Z pewnością Dijkstra mógł mówić o języku BASIC, aby uzyskać dobry dźwięk. Chodzi mi jednak o to, że wczesne języki komputerowe z pewnością nie były lepsze, co oznaczałoby, że dobrzy programiści nie mogli się rozwijać aż do około 1960 r., A każdy, kto zaczął wcześniej, został trwale uszkodzony.
David Thornley,
5
Gdybyście nie poświęcili czasu na przeczytanie artykułu, z którego wzięto cytat, odkrylibyście, że zniszczył także inne popularne języki tamtych czasów oprócz BASIC. Skrytykował także skłonność do antropomorfizacji komputerów, co rozumiem; nienawidzą tego.
Huperniketes
2
@Huperniketes: Tak, ale Dijkstra była niezwykle wybredna na temat BASIC i COBOL. Pozostawił wrażenie, że można wyleczyć preparaty FORTRAN i PL / I.
David Thornley,
6

Nauczyłem się z BASIC na TRS-80 i Apple II c / e i uważam się za dobrego programistę. Dwie cechy, które osobiście uważam, że nie doprowadziły do ​​zniszczenia poprzez naukę języka BASIC, to:

  1. Próbowałem nauczyć się lepszych sposobów osiągania tego, co chciałem, przy mniejszym wysiłku, co doprowadziło do nauki innych języków i funkcji w tych językach, które czynią je potężnymi, i
  2. Natknąłem się na problemy z językiem BASIC i rozpoznałem je, zwłaszcza brak podprogramów (chociaż nie miałem doświadczenia, aby zwięźle opisać problemy, które teraz robię).

Przyznaję, że nauka programowania obiektowego po czystej procedurze BASIC była przez jakiś czas trudna, ale nie wiem, czy to było naprawdę związane z BASIC, ponieważ do tego czasu nauczyłem się dość C .

Caleb Huitt - cjhuitt
źródło
6

Nie zgadzam się również z Dijkstrą. Myślę, że trudniej jest nauczyć się drugiego języka z powodu paradygmatów, a nie dlatego, że jest to język BASIC.

BASIC był moim pierwszym językiem na komputerze osobistym o nazwie TK (podobnym do Sinclaira) w 1985 roku. Była to bardzo ograniczona maszyna zasobów. W tym czasie napisałem kompilator BASIC z książki, używając do zabawy edytora szesnastkowo-dziesiętnego. Kupiłem książkę Z80 i potem nauczyłem się 8-bitowego języka maszynowego. BASIC bardzo mi w tym pomógł.

Po tym, jak uczę się C i Pascala i bawię się w Assembly for 8080/6. MSX-BASIC, Quick Basic w czasach MS-DOS ... VB, Delphi, trochę Java w czasach Windows ...

Dzisiaj praca z postępem (4gl), .net (C # / VB), php i ja nie czuję się cyklopem. : O)

Pagotti
źródło
5

Zacząłem od podstawowego na klonie jabłek, kiedy miałem osiem lat.

Nawet późniejsze wersje Basic, w których pojawiły się niektóre pomysły OOP (qbasic, Visual Basic itp.), Nie miałyby sensu w Eight.

Rozpoczęcie programowania tak wcześnie jest jednym z powodów, dla których mogę przemyśleć problem z przebiegiem programu i jest to coś, co sprawia, że ​​zbyt wiele osób nie radzi sobie dobrze w tej branży.

Myślę, że wczesny start jest często korzystny, a w kontaktach z maluchami wymagany jest BARDZO PROSTY język.

Twój przebieg może się różnić ...

Rachunek
źródło
4

Myślę, że narażenie na większość PODSTAWOWYCH przykładów na świecie jest tym, co okalecza mózgi programistów, a nie sam język. To tak, jak programista C #, który przegląda MSDN i nie uważa, że ​​obsługa wyjątków jest konieczna lub że IDisposabletypów nie trzeba tak naprawdę usuwać.

Jesse C. Slicer
źródło
4

Każdy będzie miał problem, jeśli nie będzie w stanie zidentyfikować problemów w ich obecnym języku i nie tylko będzie w stanie je obejść, ale znajdzie inny, który rozwiąże problem.

A GOTO jest złe tylko wtedy, gdy nie masz numeracji linii;)

JeffO
źródło
Tak! GOTO jest w porządku; to złe etykiety ... mwuuuuhahahaha
Mawg
3

Obecnie używam języka BASIC, aby nauczyć mojego syna pisania własnych prostych gier. Nigdy go nie użyłem, zacząłem swoją pracę z PowerBuilder i PowerScript i przeskoczyłem do C / C ++, a potem Delphi. Obecnie używam prawie wszystkich dostępnych języków i dostosowuję się bardzo szybko, ponieważ podstawy wszystkich języków są takie same, matematyczne formuły z różnymi znakami, operatorami i symbolami. Tego też uczę mojego syna, dzięki czemu może on już czytać i wyjaśniać kod C ++. Mój syn ma 12 lat.

Henk przeciwko Birsten
źródło
3

BASIC GOTOto świetny sposób na nauczenie sposobu myślenia w asemblerze . Nie okalecza umysłu, jedynie odsuwa go od synaps opartych na węglu i zbliża do tranzystorów krzemowych.

Porównajmy jednak BASIC z LOGO. BASIC może oderwać małe dzieci od programowania, ponieważ aby napisać prosty program do zabawy, wystarczy pisać na maszynie bardzo, bardzo długi program wydrukowany na czasopiśmie, podczas gdy w LOGO jedna linijka może rysować bardzo imponującą grafikę, co jest niezbędne w przyciąganiu dzieci.

rwong
źródło
Odrzuciłem tę odpowiedź z powodu tego stwierdzenia: wszystko, co mogłeś zrobić, to pisać na maszynie bardzo, bardzo długi program wydrukowany na czasopiśmie. To tylko dzieciaki ze skryptów tego dnia. Prawdziwi przyszli programiści uczyli się i pisali własne rzeczy.
TecBrat,
2

Podstawowy jest dobry - jest zabawny i dość prosty Może robić fajną grafikę 2D, a co nie ... Nauczyłem się (lub próbowałem się nauczyć), że kiedy miałem około 10 lub 12 lat, był to fajny język, który zainteresował mnie nauką o komputerach ...

aggietech
źródło
2

Niektórzy z najlepszych programistów, których znam, byli wcześnie narażeni na programowanie w Basicu. Jest nieco bardziej „konkretny”, a zatem zapewnia lepsze wyczucie, w jaki sposób maszyna niskiego poziomu może faktycznie działać, niż wiele nowszych języków (np. Jest to bliższe wprowadzenie do asemblera w języku HLL).

Cytat Dijkstry pochodzi z okresu, w którym naukowcy próbowali popchnąć trend w kierunku możliwych do udowodnienia poprawnych, dobrze skonstruowanych programów zaprojektowanych na podstawie specyfikacji. Ale nie tak poszedł przemysł dużej części. Zamiast tego wielu programistów z ery Web 2.0 próbuje szybko prototypować coś, dla czego nie istnieje większość matematycznie ścisłej specyfikacji dla udowodnienia kodu, ponieważ rzeczy ewoluują zbyt szybko, aby ta specyfikacja pozostała konkurencyjna.

Tak więc metody programowania metodą prób i błędów typu hack-and-slash, które programowanie w Basicu czasami zachęca, choć nieco oczyszczone z metodologii, jest użytecznym podkładem do myślenia RAD.

Na koniec zauważę, że dostępnych jest co najmniej 5 tłumaczy Basic, które działają na iPadzie, dzięki czemu język jest dostępny nawet na najnowszych urządzeniach.

hotpaw2
źródło
1

Myślę, że biorąc pod uwagę, że ten cytat ma 35 lat, ma on wiele wspólnego z brakiem abstrakcji, który był dostępny w językach programowania, oraz z tym, co było wymagane, abyś wiedział, aby dobrze się rozwijać, już wtedy, kiedy zostało powiedziane.

Otrzymanie języka takiego jak BASIC nauczy Cię niewiele, jak programować na niskim poziomie, czegoś o wiele bardziej potrzebnego w przeszłości niż obecnie, i dałoby błędne wrażenie, że programowanie było prostsze niż w rzeczywistości.

Pamiętam, jak bezczelnie próbowałem nauczyć się „kodu maszynowego” w wieku 15 lat po ponad 3 latach VZ200, C64 i Apple] [e BASIC, to była niegrzeczna pobudka.

Obecnie jednak jestem kompletnym snobem na ten temat i nie znajdziesz mnie pracującego w jakimkolwiek języku z BASIC w nazwie (zwykle zaczynam krzyczeć na frazy monitorowe, takie jak „głupi Fisher Price Language”, ponieważ po raz kolejny odrzuca moje nieostrożne, kręcone szelki), przyznaję, że łatwiej jest robić produktywne rzeczy z językami, które wyodrębniają mechanikę procesora niż 35 lat temu (lub 25 lat temu, z własnego doświadczenia i przykładu)

johnc
źródło
1

dla tych z nas, którzy ładowali kod asemblera do komputerów Speer Micro-LINC, jeden bajt za jednym razem za pomocą zestawu 8 przełączników na panelu przednim i przechowując je na taśmach PDP w 1972 roku, stwierdzę jednoznacznie, że Dijkstra był pompatycznym dupkiem. Wszystko, czym nienawidził w Basicu, było prawdziwe w pikach dotyczących asemblera, z którym pracowałem, a jednak ja i tysiące innych osób wyzdrowialiśmy po naszym kontakcie z asemblerem, a później Basic i Fortran, Cobol i C itd.

kloucks
źródło
1

Zacząłem programować w GW-BASIC na początku lat dziewięćdziesiątych. Mój umysł się nie okaleczył. Przeszedłem do lepszych języków, takich jak Pascal, C, C ++, Java, C # i Python.

Nie byłbym dzisiaj w stanie napisać programu BASIC; Zapomniałem, jak myśleć w kategoriach numerów linii. To nie problem.

Ale moje doświadczenie BASIC bardzo mi pomogło na studiach architektury komputerowej na uczelni, gdzie musiałem nauczyć się języka asemblera (MIPS). Zespół przepływu sterowania język jest bardzo podobny do BASIC to: skoki = GOTO, oddziałów = IF... GOTO, jal(call) ... jr(ret) = GOSUB... RETURN. To wszystko, czego potrzebujesz do sterowania!

Czy warto nauczyć się języka programowania działającego na komputerze pełnym zasobów, na którym początkujący programista może zrobić wszystko źle, a program działa bez większych problemów? A może lepiej dowiedzieć się, gdzie programista nie może się pomylić?

Powiedziałbym, że lepiej jest uczyć się na komputerze z ograniczonymi zasobami. Nie dlatego, że „programista nie może się pomylić”, ale dlatego, że próg „chłodu” jest znacznie niższy. Początkujący programista może nie wiedzieć, jak zrobić świetną strzelankę FPS na PC. Ale mogliby napisać świetną grę Pac Man dla swojego TI-89 i wykorzystać sprzęt w pełni. I to jest poczucie siły.

dan04
źródło