Przykład tutaj:
Jakie języki powinienem znać, jeśli jestem zainteresowany tworzeniem aplikacji internetowych?
Tak, rozumiem, że HTML i CSS nie są kompletne w Turingu. Tak, rozumiem, że są to języki deklaratywne, a nie imperatywne. Ale dlaczego ludzie zawsze walą w głowę tym pedantycznym (i prawdopodobnie oczywistym) faktem, gdy zadają pytanie o te języki?
terminology
Robert Harvey
źródło
źródło
Odpowiedzi:
Jaka jest naprawdę różnica?
Prawdziwa i ważna różnica między językiem programowania a tymi innymi językami jest następująca:
Zamierzam zilustrować, dlaczego ta różnica ma znaczenie, ale pedanteria w tej kwestii jest czasem niewłaściwa.
Prawdziwa historia :
Raz spędziłem kilka miesięcy, opracowując złożony system zarządzania wydajnością przy użyciu „właściwego” języka programowania. Zautomatyzował proces gromadzenia danych z różnych innych systemów, wykonał różne operacje na tych danych, a następnie przedstawił wyniki w prostej tabeli.
Kiedy to zostało uruchomione, starszy menedżer zobaczył narzędzie napisane dla podobnej firmy i zapytał, czy możemy zastąpić to, co napisałem, używając ich alternatywy. Co więcej, był zdenerwowany, że spędziłem tygodnie na opracowywaniu mojego rozwiązania, w którym nowa aplikacja została napisana w ciągu kilku dni.
Dalsze dochodzenie ujawniło, że preferowaną opcją menedżera była prezentacja bez żadnej treści: było wiele kolorów, ikon i wykresów, ale nie było za nimi żadnej logiki . Wszystkie dane musiały być gromadzone i przetwarzane ręcznie. Pomimo ładnego interfejsu aplikacja była zasadniczo bezużyteczna.
Z przyjemnością informuję, że menedżer, o którym mowa, został przekonany, że moje podejście spełniło jego prawdziwe potrzeby biznesowe.
Znaczenie prezentacji :
Często implikuje się, że umiejętności w HTML, CSS itp. Są nieco gorsze niż umiejętności w „prawdziwych” językach programowania. To poważny błąd.
W mojej historii starszy menedżer uważał, że projekt był dla niego bardzo ważny, ponieważ początkowo był przygotowany na przeoczenie funkcji na jego korzyść. Gdyby to był izolowany incydent, mógłbym zasugerować, że kierownik był po prostu głupi. Ale tak nie było. Raz po raz spotkałem użytkowników, którzy są pod wrażeniem efektownej grafiki i niesamowitych widżetów, ale nie są pod wrażeniem surowej funkcjonalności i moich osiągnięć technicznych. Myślę, że jest tu kilka lekcji:
Dlatego ważne są języki zorientowane na prezentację (HTML, CSS). Nie należy lekceważyć wartości dodanej osób, które potrafią skutecznie korzystać z tych narzędzi.
Znaczenie prawdziwych języków programowania
Jak zauważył PO, „prawdziwe” języki programowania są Turing Complete. Jako prawdziwy smutny maniak uważam to za niezwykle fascynujące. Oznacza to, że dla każdego programu napisanego w języku TC, funkcjonalnie równoważny program można napisać w dowolnym innym języku TC. Oczywiście nie oznacza to, że wszystkie języki są takie same. Każdy z nich ma swoje mocne i słabe strony, które czynią go mniej lub bardziej odpowiednim do określonych zadań. Jednak pomijając we / wy, oznacza to, że wszystkie programy można pisać we wszystkich prawdziwych językach programowania.
(Nawiasem mówiąc, istotną rzeczą jest TC. Deklaratywna kontra imperatywna jest tutaj red-herring. Na przykład SQL jest deklaratywny, ale jest również właściwym językiem programowania, ponieważ jest TC.)
Oczywiście to samo nie dotyczy języka znaczników, takiego jak HTML lub CSS. W rzeczywistości istnieją całe klasy problemów, których te języki po prostu nie mogą rozwiązać . Tam, gdzie mogę zaprogramować wszystko, co chcę w prawdziwym języku programowania - w tym silniki układu - po prostu nie można osiągnąć tych samych rzeczy w językach, które nie są TC.
Jak podkreślono w mojej historii, HTML i jego podobne są używane do tworzenia prezentacji. Prawdziwe języki programowania są używane do tworzenia funkcjonalności.
Dlaczego programiści są pedantyczni na ten temat?
Czy zawsze należy być pedantycznym?
Spójrzmy prawdzie w oczy, jako programiści jesteśmy z natury pedantyczni . To idzie z terytorium. Nie pomaga to, że wielu z nas zostało spalonych, gdy nie-programiści nie zrozumieli, co robimy.
Niemniej jednak (i szczerze mówiąc, jest to sprzeczne z moimi naturalnymi instynktami), nie sądzę, abyśmy musieli wzywać ludzi, ilekroć się wymykają .
Powiedziano mi, że z punktu widzenia biologa pomidor to owoc. Ale kiedy kupuję je w supermarkecie, szukam ich wśród warzyw. Dlaczego? Ponieważ techniczne rozróżnienie nie ma znaczenia w tym konkretnym kontekście. Co więcej, rozróżnienie to faktycznie przeszkadzałoby w ich przydatności: gdybym był na tyle głupi, aby na przykład włączyć pomidory do sałatki owocowej.
To samo dotyczy języków komputerowych. Czasami różnica między językami programowania a innymi językami naprawdę ma znaczenie . Dość często jednak wszyscy możemy się doskonale komunikować, gdy połączysz je wszystkie razem. W przypadku pytania powiązanego z PO, tak naprawdę nie miało znaczenia, które języki były prawdziwymi językami programowania, a które nie. Wskazanie tego rozróżnienia nie przyspieszyło w żaden sposób dyskusji. Na szczęście, oprócz dodania odrobiny hałasu (i stania się bodźcem do ciekawej dyskusji!) Pedanteria powiązana z PO miała niewielkie znaczenie. W najgorszym przypadku pedanteria może wywoływać negatywne uczucia i niszczyć relacje ... przynajmniej według mojej żony.
:-)
Jak radzić sobie z pedanterią wśród programistów
Mój kaznodzieja przyjaciel wygłosił kiedyś kazanie zatytułowane:
Odniósł się do generałów, którzy dokonują strategicznej oceny, w których bitwach warto walczyć: czy zyski są warte kosztów?
Oczywiście są chwile, w których należy wprowadzić rozróżnienia. Moim celem jest, aby mój wkład wniósł wartość dodaną do naszych wspólnych wysiłków.
To przecież zadanie każdego prawdziwego programisty.
źródło
Poinformuj inżyniera budownictwa lub inżyniera mechanika, że studiowałeś inżynierię oprogramowania, a oni powiedzą ci, że inżynieria oprogramowania nie jest prawdziwą inżynierią.
Powiedz pilotowi F-16, że latasz Cessnami dla zabawy, a on powie ci, że nie jesteś prawdziwym pilotem.
Powiedz lekarzowi, że jesteś kręgarzem, a on ci powie ... cóż, nie idźmy tam :-)
Myślę, że to głównie dlatego, że ludziom nie podoba się pomysł, aby ich zawód był infiltrowany przez pretendentów lub ludzi, którzy tak naprawdę nie są „godni”.
Teraz, żeby być uczciwym, jasne jest, że HTML i CSS nie są językami programowania . Nie są już językami programowania, w których format .docx jest językiem programowania, i twierdzą, że jesteś programistą, jeśli wszystko, co wiesz, to HTML, a CSS z pewnością jest niedokładny. Myślę jednak, że część gwałtowności w odpowiedzi można przypisać temu, co powiedziałem powyżej.
Ponadto w łączonym pytaniu pytający nazwał HTML i CSS „językiem”, a nie „językiem programowania”. HTML jest językiem znaczników, a CSS też jest językiem (nie wiem jednak, jaki „język” nazwałbyś CSS?), Więc myślę, że to było trochę niesprawiedliwe, aby wezwać go do nazywania ich „językami” „...
źródło
To tak naprawdę nie ma dla mnie znaczenia.
Ale przypuszczam, że dla tych, dla których to robi, rozróżnienie między HTML, CSS, XML itp. A Real Programming Languages ™ przypomina swego rodzaju rozróżnienie między drewnem a farbą jako materiałami budowlanymi. Nie możesz budować rzeczy za pomocą farby, tak jak możesz za pomocą drewna, a także nie możesz programować za pomocą HTML, tak jak za pomocą RPL.
Przyznaję jednak, że w przypadku niektórych rozmów dokonanie takiego rozróżnienia może być nieistotne, a zatem pedantyczne i denerwujące.
źródło
To może nie być „ważne” rozróżnienie, ponieważ prawdopodobnie tyle pracy zajmuje część html / css niektórych stron internetowych, jak część programistyczna.
Ale to jest znacząca różnica, ponieważ ktoś, że nie wie, co to znaczy, nie ma miejsca w zespole, który robi tworzenie stron internetowych.
Jeśli projektant uważa, że HTML programuje, pozwól mu projektować za pomocą narzędzi Adobe i robić projekty związane z drukowaniem; ale nie wierz w to, co mógłby powiedzieć o aplikacjach internetowych.
Jeśli programista uważa, że jest ponad projektantami, ponieważ „jego” języki są kompletne w Turinga, nie oczekuj, że będzie dobrze współpracował z projektantem, lub że jego kod może zostać „upiększony” po zakończeniu.
źródło
if ... then
konstrukcji wykonawczej i jakiś sposób na powtórzenie rzeczy nieznaną wcześniej liczbę razy, jestem skłonny powiedzieć, że nie jest to język programowania. Oczywiście istnieje kilka języków skrajnych, które komplikują definicję; ale HTML / CSS są dalekie od tego.Uderzyłeś go w głowę, kiedy powiedziałeś „deklaratywny, a nie bezwzględny”. Znaczniki (HTML, CSS lub cokolwiek innego) opisują różne rzeczy. Cały sens programowania polega na robieniu rzeczy.
Zestaw umiejętności wymaganych do korzystania ze znaczników jest zupełnie inny niż zestaw umiejętności wymagany do programowania.
Rodzaje problemów rozwiązanych przez pisanie znaczników są całkowicie różne od rodzajów problemów rozwiązanych przez programowanie.
źródło
Jest to ważne dla niektórych ludzi, ponieważ żadna z nich nie jest nauką o rakietach, ale otaczają ich liczne arkany ze względu na fakt, że wdrażają one inaczej w typowo 5 do kilkudziesięciu różnych środowiskach, na których ci naprawdę zależy. Tego rodzaju nieprzewidywalność i dbałość o rzemiosło przeraża pewną różnorodność profesjonalistów technicznych, którzy są przerażeni niewiarygodnym ryzykiem, a jeszcze bardziej przerażeni uczeniem się czegoś więcej niż absolutnie muszą po uzyskaniu dyplomu.
Gdyby ktoś zapytał mnie, jakie języki znałem, i rzuciłem tam CSS, a oni powiedzieli „ale to nie jest PRAWDZIWY język”, zapytałbym ich, jak poradziliby sobie z pionowym centrowaniem div w IE 5, IE 6-8 i IE9 +. Następnie moglibyśmy przejść do zaokrąglonych rogów, kwestii przejrzystości alfa, PRAWDZIWEGO winowajcy stojącego za tymi wszystkimi absurdalnymi argumentami przy tworzeniu tabel, które dopiero teraz zaczynają być naprawdę nieistotne, i dziesiątkami innych tematów dla wspomnianego programisty, który prawdopodobnie zna jeden język i twierdzi jeden lub dwa, że ledwo funkcjonalnie umie czytać z powodu zajęć, do których zmuszony był uczęszczać na studia 10 lat temu.
Zdecydowanie są to „języki”. Nie nazwałbym ich „językami programowania”. Czułbym się swobodnie, opisując proces pisania w tych językach „kodowaniem”.
Z mojego punktu widzenia jednak każdy, kto zdołał opanować CSS, ma chutzpę i etykę pracy, aby zostać doskonałym programistą, ma już pewne doświadczenie w zakresie myślenia obiektowego i bez wątpienia nauczył się myśleć o tym, co on pisze teraz, może wpłynąć na jego pracę 25 projektów w przyszłości.
źródło
HTML i CSS nie są językami programowania. Pokonaj to.
Jednak: JavaScript jest językiem programowania. Maszyna jest przeglądarką. PHP jest językiem programowania. Maszyna jest wirtualna na serwerze.
Więc jeśli używasz tylko HTML i CSS, nie programujesz (chociaż możesz trochę inżynierii).
Ale jeśli używasz JavaScript, PHP lub innego języka skryptowego. Robisz programowanie.
Jeśli chodzi o PRAWDZIWE języki programowania. Jeśli pracujesz na komputerze (rzeczywistym lub wirtualnym). I używają TWOICH WŁASNYCH algorytmów, aby powiedzieć maszynie, żeby coś zrobiła. Następnie używasz PRAWDZIWEGO języka programowania.
źródło
Język programowania jest trochę niedokładnym terminem, ponieważ jest to termin powszechnie używany przez praktyków i osoby świeckie. Praktycy mają niuansowe znaczenie tego terminu, w którym osoby świeckie zwykle tego nie robią. Zwykle ich definicja brzmi: jeśli zawiera zabawne słowa / składnię, których nie rozumiem od razu, a programiści używają jej, to musi to być język programowania. Nie całkiem nie na miejscu, ale możemy się zgodzić, że jest niedokładny.
Słowa takie jak deklaratywny, rozkazujący i Turing są bardziej precyzyjnymi terminami o bardzo konkretnych znaczeniach. Kiedy zadajesz pytanie, dlaczego HTML / CSS nie jest językiem programowania, pytasz o dokładniejszą definicję tego, czym naprawdę jest język programowania. Nie jesteśmy pedantyczni, ale próbujemy odpowiedzieć na twoje pytanie. Czy są to najlepsze warunki, których można użyć, nawet jeśli przeglądasz je w Google, trudno zrozumieć, co one oznaczają? Zależy. Czy chciałeś krótką czy długą odpowiedź? :-)
Języki programowania są zwykle uważane przez programistów za kompletne. Ale co to oznacza? Oznacza to, że język może opisywać zachowanie lub sposób działania. Formalnie nazywamy to logiką. HTML / CSS może opisać, że w prawym górnym rogu znajduje się przycisk lub tabela z 4 kolumnami 5 wierszy, pierwsze dwa wiersze są żółte, a dolny wiersz ma zielony tekst, a każda komórka w tabeli ma 5 pikseli pustej przestrzeni wokół treści.
HTML / CSS nie może wyrazić zachowania lub logiki tego, co dzieje się po kliknięciu przycisku. Nie można powiedzieć, kiedy kliknę ten przycisk, pobierz wartości z tej tabeli i dodaj je, i zapisz tę wartość w nowym wierszu na dole tabeli. Opisywanie zachowań jest w przybliżeniu równoznaczne z ukończeniem zwrotu bez nadmiernego pedantycznego.
Dokładniej Turing-complete oznacza, że możesz zaimplementować sam język. Oznaczałoby to, że mógłbym napisać program javascript, który pobiera ciąg javascript i mógłby go wykonać (i nie używać funkcji eval ()). W rzeczywistości mogę napisać program javascript, który mógłby wziąć program napisany w dowolnym pełnym języku Turinga i go ocenić. To właśnie oznacza być kompletnym Turinga. Wszystkie języki, które się kończą, są równoważne pod względem programów, które można wyrazić. Całkiem niesamowite odkrycie, jeśli się nad tym zastanowić.
źródło
Oto moje dwa centy. HTML i CSS najwyraźniej nie są językami programowania. Z tego powodu, gdy widzę HTML lub CSS w czyimś CV w „Językach programowania”, oznacza to po prostu, że ta osoba nie wie, o czym mówi.
Poza tym nie, tak naprawdę to nie ma znaczenia.
Nawiasem mówiąc, programiści zwykle są pedantyczni. To po prostu pochodzi z pracy.
źródło
To nie ma znaczenia I to także kwestia definicji. Co to jest język programowania? Niektóre oznaczają, że musi być kompletny w Turinga. Inne mają inne definicje, dzięki którym HTML jest językiem programowania. (W twoim przykładzie nie nazwano ich nawet językami programowania, tylko językami, którymi oczywiście są).
Moja rada: staraj się ignorować osoby, które wskazują na tego rodzaju bezcelowe, a pod wieloma względami nawet błędne twierdzenia. To tylko odmiana gramatyki nazizmu. Nazywanie HTML językiem programowania nie jest niepoprawne w żadnym sensownym sensie.
źródło
Myślę, że sprowadza się to do tego - HTML i CSS, choć na tyle skomplikowane, że wymagają odrobiny wytrawności, są językami prezentacji, najlepiej dostosowanymi do formatu generowanych raportów. Dlatego osoby, które mogą to zrobić, nie są uważane za programistów. Pamiętając, że niektórzy koderzy pracują na komputerze wystarczająco długo, aby zapamiętać, kiedy przeciętny edytor tekstu potrzebował więcej składni poleceń do stylizowania tekstu niż HTML.
To, co niektórzy nazwaliby „prawdziwym” językiem, to język, który w pewien sposób przetwarzałby dane w celu wygenerowania raportu. Lub coś, co można wykorzystać do napisania gry. Znajomość HTML i CSS wewnątrz i na zewnątrz jest cenną umiejętnością, ale o wiele bardziej, więc połącz ją ze znajomością JS dla frontonu oraz Java, PHP, Perl, Ruby, Python, C / C ++ lub C # z tyłu.
I na odwrót, ktoś, kto zna tylko jeden z tych „prawdziwych” języków bez żadnych technologii front-end, bardzo mocno ogranicza swoją elastyczność kodera.
źródło
Logiczna szuflada / stereotyp „lewy mózg” lub kreatywny „prawy mózg” dokładnie opisuje umiejętności wielu ludzi. Z mojego doświadczenia wynika, że „HTML / CSS jest językiem programowania” dotyczy bardziej tego, czy ludzie, którzy są dobrzy w HTML / CSS, mogą być również dobrzy w innych zadaniach programistycznych.
Większość projektantów stron internetowych, z którymi pracowałem przez ostatnie 13 lat, tworzyłem działające HTML i CSS, ale nie jestem w stanie sprostać bardziej wymagającym wyzwaniom programistycznym (cokolwiek więcej niż najprostsze cięcie i- wklejony JavaScript). Większość programistów i projektantów baz danych nie dba o wizualną prezentację, aby wykonać dobrą pracę z HTML / CSS lub prezentacją w ogóle. Większość faktycznie nie chce spróbować.
HTML i CSS wymagają pewnych umiejętności programistycznych: eksperymentowania, rozwiązywania problemów, starannego testowania, zrozumienia dziedziczenia ... Wymagają jednak co najmniej równej liczby umiejętności projektowych: wrażliwości na kolor, linii, odstępów, równowagi - w większości tego samego rodzaje umiejętności kompozycji wizualnej, które tworzą dobre zdjęcie.
Ponieważ HTML / CSS jest językiem układu lub prezentacji, znajduje się na końcu schematu przepływu danych. Żaden inny kod nie znajduje się za nim. Umiejętności projektowania na wyższym poziomie, których ktoś potrzebuje do zaprojektowania dobrego interfejsu API, usługi lub schematu bazy danych, nie są używane w HTML i CSS. Generalnie nie ma potrzeby modularyzowania czegokolwiek związanego z HTML lub CSS, a jeśli tak, to nie od projektanta graficznego zależy. Rzadko zdarza się, aby jakakolwiek funkcjonalność była wykonywana za pomocą HTML / CSS . Rozwijane menu są prawdopodobnie najczęstszym wyjątkiem, ale można je wykonać, wycinając i wklejając przepis z Internetu, a nie projektując kod.
Jest to niezwykłe, ale nie niemożliwe, aby programista posiadał pewne umiejętności projektowania wizualnego lub układu lub projektant miał pewne umiejętności programowania. Ci ludzie są szczególnie cenni w zespole internetowym, ponieważ pomagają wypełnić lukę, którą ma większość z nas. Ale często podlegają one stereotypom, że możliwość tworzenia HTML / CSS jest niemożliwa dla „prawdziwego programisty” lub odwrotnie. Ale ta kombinacja umiejętności nie jest bardziej niemożliwa niż to, by ten sam programista był porządnym żeglarzem, malarzem, kucharzem lub posiadał inne umiejętności, które ćwiczą w wolnym czasie.
Jak powiedzieli inni ludzie, to rozróżnienie uwidacznia się najbardziej podczas zatrudniania. Ponieważ osoby o talentach crossover są rzadkie, większość ofert pracy musi dotyczyć jednego zestawu umiejętności lub drugiego. Jeśli programista wymienia HTML / CSS w „Językach programowania”, wywołuje czerwoną flagę, że nie mogą wykonywać ogólnych zadań programistycznych lub że ich definicja programowania jest bardzo wąska. Może mogą, to tylko rodzi pytanie. Jeśli projektant wymienia HTML / CSS, na pewno chcesz spojrzeć na jego portfolio, aby zobaczyć, że mają artystyczną zdolność do tworzenia pożądanego efektu wizualnego.
HTML / CSS może być wielokrotnie niszczony jako nie będący prawdziwymi językami programowania, ponieważ jest bezpieczniejszy i bardziej społecznie akceptowalny niż niszczenie ludzi, którzy nie mogą przekroczyć półkuli, którą reprezentują. Oczywiście, niektórzy ludzie mogą nie mieć tego zahamowania. Właściwie współpracowałem z jednym menedżerem, który często powiedział: „Napisał [wstaw tutaj funkcję szkieletu działu]? Myślałem, że po prostu napisał HTML?”
Świetne pytanie!
źródło