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ę
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?
źródło
Odpowiedzi:
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.
źródło
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ć ...
źródło
To nie BASIC cię boli, to brak kontaktu z innymi językami. „Programiści” z Monoglot nie są.
źródło
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.
źródło
BASIC
zeAssembler
w środki Dijkstry, ale uważam, że jest to język programowania, a nie język programowania. +1 chociaż :)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:
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 .
źródło
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)
źródło
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ć ...
źródło
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
IDisposable
typów nie trzeba tak naprawdę usuwać.źródło
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;)
źródło
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.
źródło
BASIC
GOTO
to ś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.
źródło
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 ...
źródło
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.
źródło
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)
źródło
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.
źródło
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!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.
źródło