Dlaczego to ważne, że HTML i CSS nie są językami programowania?

158

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?

Robert Harvey
źródło
32
Wkurza mnie to tylko wtedy, gdy ludzie umieszczają to w swoich CV. Gorzej, gdy umieścili jQuery obok JavaScript pod „Language Experience:”.
Josh K
19
Wydaje mi się to dość oczywiste: jeśli muszę wymyślić, kogo zatrudnić lub kogo przypisać do określonego zadania, muszę wiedzieć, jakie mają umiejętności. Jeśli zadanie obejmuje implementację algorytmu, nie dam go komuś, kto ma tylko doświadczenie w HTML / CSS. Nie zamierzam przypisywać nikomu, kto ma tylko programy napisane w wierszu polecenia C w tle, do pisania wielu złożonych stron internetowych, które muszą działać na wielu przeglądarkach. Nie wiem, czy byłeś w stanie zatrudniać lub zarządzać ludźmi, ale napotykasz wielu ludzi, którzy przysięgają, że te zadania są wymienne.
Charles E. Grant,
8
Dane to tylko głupi kod, a kod to tylko inteligentne dane: stackoverflow.com/questions/871833/...
Christoffer Hammarström,
14
Ludzie nie rozumieją pytania OP, które w bardziej dosadny sposób brzmiałoby: „Dlaczego pewien rodzaj twitów w dyskusji o ogólnych„ językach ”odczuwa potrzebę wskazania, że ​​CSS nie jest językiem programowania ? Przede wszystkim. Dziękuję Ci. Każdy, kto zna nawet garstkę głupich sztuczek JavaScript, to zrozumie. Czy opanowanie CSS znaczy coś dla programisty, który tam był i opanował go? O tak. Tak. Nie obchodzi mnie, czy programujemy następnego łazika Marsa, to zdecydowanie rozstrzygający remis.
Erik Reppen,
7
XSLT to ciekawy przypadek, o którym warto pomyśleć w tym kontekście ...
Dan Diplo,

Odpowiedzi:

300

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:

HTML i CSS opisują prezentację , podczas gdy języki programowania opisują funkcję

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:

  • Ludzie oceniają oprogramowanie na podstawie kryteriów, które rozumieją. Często rozumieją różnicę między przystojnym a brzydkim, ale rzadko doceniają niuanse techniczne.
  • Ludzie oszukują pozory. To może nie być dobra rzecz, ale jest to rzeczywistość, z którą musimy żyć.
  • Wygląd wpływa na to, jak ludzie myślą o oprogramowaniu. Sposób, w jaki ludzie postrzegają oprogramowanie, jest dla nich ważny. Rzeczywiście ludzie czasami wolą oprogramowanie, które sprawia, że czują się lepiej niż oprogramowanie, które jest funkcjonalnie lepsze. W rzeczywistości mogą być bardziej wydajne dzięki narzędziom zapewniającym dobre samopoczucie niż narzędziom technicznie lepszym. W tym zakresie nasi użytkownicy nie są oszukiwani. W rzeczywistości dokonują mądrego i przemyślanego wyboru.
  • Jako programiści często pomijamy rolę prezentacji, ponieważ koncentrujemy się na funkcji. W pewnym stopniu jest to właściwe i właściwe. Należy jednak pamiętać, że w naszej pracy istnieje inny wymiar, który jest ważny dla naszych klientów.

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?

  1. Programiści poświęcają wiele czasu, wysiłku i pieniędzy na rozwijanie swoich umiejętności. Ludzie w naturalny sposób cenią rzeczy, w które inwestują („twoje serce jest tam, gdzie są twoje pieniądze”).
  2. Programiści często odczuwają potrzebę uzasadnienia czasu potrzebnego do uzyskania wyników w porównaniu z szybkimi wynikami osiągniętymi przez projektantów interfejsu użytkownika. Aby to zrobić, muszą dokonać rozróżnienia między tym, co faktycznie robią obie grupy .
  3. Ponieważ pracodawcy muszą zatrudniać odpowiednich ludzi na odpowiednich stanowiskach pracy. O ile nie wyjaśnimy (często technicznych) różnic, menedżerowie łatwo wykonują niewłaściwe połączenia.
  4. Ponieważ istnieje prawdziwa i fundamentalna różnica, jak opisano powyżej.

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ą .

Ważne są tutaj kontekst i perspektywa .

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:

czy to wzgórze, na którym warto umrzeć?

Odniósł się do generałów, którzy dokonują strategicznej oceny, w których bitwach warto walczyć: czy zyski są warte kosztów?

  • Czy naprawdę warto przerwać przebieg dyskusji, aby dokonać takiego rozróżnienia?
  • Czy moja pedanteria wynika z poczucia arogancji czy zranień z przeszłości?
  • Czy moje komentarze cenią umiejętności innych, a także własne?

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.

Kramii
źródło
4
Nie sądziłem, że SQL jest kompletny Turinga, chyba że mówisz o T-SQL lub PL / SQL.
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner: Masz rację! Dzięki, że mnie o tym dowiedziałeś. (Chodzi mi jednak o to, że mówię - że językami deklaratywnymi może być TC)
Kramii
1
Bardzo dobre odpowiedzi. Jako programista stron internetowych wielokrotnie widziałem sytuacje, w których klienci są bardziej pod wrażeniem „krzykliwego” projektu niż proponowanej funkcjonalności. Chociaż może to obrażać nasze purystyczne instynkty programistyczne (ta funkcja powinna być królem), jest to coś, co ignorujemy na własne ryzyko.
Dan Diplo,
4
+1: Joel Spolsky ma ciekawy post na blogu, który podejmuje problem z funkcją vs krzykliwy GUI. Zwłaszcza zagrożenia związane z wyświetlaniem w 100% gotowego i bardzo efektownego interfejsu GUI, gdy funkcjonalność nie jest na miejscu. Dobra lektura, jeśli jeszcze jej nie przeczytałeś. joelonsoftware.com/articles/fog0000000356.html
Leo
3
„Mogą być bardziej wydajni dzięki narzędziom zapewniającym dobre samopoczucie niż narzędziom technicznie lepszym” - Prawda, prawda, prawda! Apple zbudowało na tym swój biznes. Nie zrozumcie mnie źle, Mac zawiera substancję też, ale to, co uczynił niektórzy ludzie płacą prawie dwa razy tyle za maszynę Mac jak Linux lub Windows jeden jest to, że wygląda cool i on czuje się dobrze używać.
GlenPeterson
116

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” „...

Dean Harding
źródło
7
„Nie wiem jednak, jaki„ język ”nazwałbyś CSS? - w skrócie zrobiłby to „język opisu stylu”.
ocodo
28
@ acidzombie24: Co oznacza litera „L” w „HTML”?
Dean Harding,
8
Jeśli ma składnię i semantykę, trudno jest twierdzić, że nie jest to język. HTML i CSS są językami według tych kryteriów (podobnie jak angielski, esperanto, klingoński i prawdopodobnie UML). Jednak żaden z nich nie jest językiem „programowania”.
Zach.
6
@Dean Harding - Hyper Text Markup Legos?
VirtuosiMedia,
4
CSS jest językiem DSL (Domain Specific Language) do opisu stylu (tzn. Jego domeną jest estetyka wizualna)
Paul
9

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.

Eric King
źródło
1
XML jest złym przykładem, ponieważ jest bardziej ogólny niż HTML / CSS - XSLT jest na przykład zarówno XML, jak i Turinga kompletny. Myślę, że XML nie jest tak bardzo językiem, jak tylko składnią - określa sposób definiowania tokenów, ale nie ich znaczenie.
Tikhon Jelvis
@TikhonJelvis Myślę, że zasadniczo mówimy to samo, ale robiąc to, dowodzisz mojej racji. Rozróżnianie, czy XML (eXtensible Markup Language) jest „językiem” czy „składnią”, jest w większości nieistotne do tego stopnia, kiedy tworzyłem, a zatem ...
Eric King
6

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.

Javier
źródło
@Javier: Jaka jest twoja definicja „języka programowania”?
Christoffer Hammarström,
@Christoffer Hammarström: gdybym był zmuszony podać formalną definicję, wybrałbym Turinga-kompletność; ale nieformalnie mówię tylko, że program robi rzeczy, w odpowiedzi na pewne dane wejściowe. Zwykle, jeśli nie ma if ... thenkonstrukcji 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.
Javier,
@Javier: Czy powiedziałbyś, że kanoniczne „Hello World” jest programem, biorąc pod uwagę, że nie wymaga żadnych danych wejściowych?
Christoffer Hammarström,
@Javier: Według dyskusji na Wikipedii ( en.wikipedia.org/wiki/… ), wczesne wersje języków Pixel Shader nie były pełne Turinga (brak „ogólnej możliwości iteracji”, tj. „Jakiś sposób na powtórzenie rzeczy wcześniej- nieznana liczba razy ”). Były to języki używane tylko przez programistów do programowania procesora grafiki w popularnych grach. Czy nadal powiedziałbyś, że nie są to języki programowania?
Christoffer Hammarström,
@Christoffer: Hello world wymaga danych wejściowych: musisz zainicjować jego wykonanie. Twoja obserwacja na temat Pixel Shadera jest jednak intrygująca.
Robert Harvey,
5

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.

HedgeMage
źródło
16
Czysty funkcjonalny język programowania jest z natury deklaratywny. Podobnie Linq, rozumienie list Pythona, XAML, XSLT, SQL i Prolog. Wszystkie są prawdziwymi językami programowania i / lub pojęciami. Chociaż większość języków programowania jest niezbędna, nie jest to cecha definiująca. W ogóle.
Konrad Rudolph,
@KonradRudolph - Jeśli uważasz, że czysto funkcjonalne języki programowania są w jakimś sensie deklaratywne, nie możesz ich dobrze rozumieć.
Jonathan Cast
@jcast Jest całkiem możliwe, że coś źle zrozumiałem. Ale najwyraźniej też eksperci w tej dziedzinie; W celach informacyjnych Wikipedia klasyfikuje (czysto) funkcjonalne języki programowania jako deklaratywne. Jako konkretny przykład, Paul Bone, który ma doktorat z pracy nad czystymi językami deklaratywnymi, również stosuje tę definicję. Byłbym ciekawy, z jakiego powodu obrażasz się na tę definicję.
Konrad Rudolph
5

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.

Erik Reppen
źródło
2
+1. Nie wiem, ile razy słyszałem, jak „programista” zapisywał HTML / CSS jako proste i nierealne programowanie. Wtedy, gdy nie mogę zrozumieć, jak, dlaczego ich lista punktowana tylko linie poprawnie w Firefoksie, rzucają swoje ręce i deklarują, że cała internetowa nie nadaje się do nowoczesnego oprogramowania :(
Graham
3

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.

Ricardo Santos
źródło
6
Sądzę więc, że możemy zrezygnować z HTML, CSS i SQL, ponieważ w końcu i tak nie są to prawdziwe języki programowania. W rzeczywistości równie dobrze moglibyśmy zrezygnować z IDE, ponieważ każdy programista wart swojej soli może zadowolić się edytorem wiersza poleceń.
Robert Harvey,
4
Nie zanotowałem tej odpowiedzi osobiście (myślę, że -6 wystarczy!), Ale zgaduję, że powodem głosów negatywnych jest to, że tak naprawdę nie odpowiada na pytanie. Pytanie nie brzmi „czy języki programowania HTML i CSS?”, Pytanie brzmi „dlaczego to ma znaczenie?”
Dean Harding,
6
@Robert To jest całkowicie podstępne. „X jest bezwartościowy” nie wynika z argumentu Ricarda, że ​​„X nie jest Y”.
Mateusz
4
@Lennart Regebro @Robert Harvey: @Matthew Read jest tutaj punktem zwrotnym rozmowy - utożsamiasz poczucie wyższości z zaprzeczeniem kłamstwa. HTML / CSS jest wyjątkowo trudny, zatrudniam ludzi, którzy mogą to dla mnie zrobić, ponieważ nie jestem w tym wystarczająco dobry, brakuje mi umiejętności. To umiejętność projektowania technicznego, to nie jest programowanie .
Orbling
3
Tak szerokie słowo „programowanie” sprawia, że ​​staje się ono prawie bez znaczenia. Znaczenie jest węższe i być może masz inne zdanie, ale okazuje się, że język oznacza to, co używa większość.
Mateusz
3

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ć.

chubbsondubs
źródło
Turing-complete oznacza, że ​​języka można użyć do symulacji maszyny Turinga (lub może obliczyć dowolną funkcję obliczalną Turinga).
mipadi,
3
@pipadi - Podam ci bardzo poprawną i precyzyjną definicję, ale ktoś zadający podobne pytania powie: „Cóż, WTF to maszyna Turinga? WTF to funkcja obliczalna Turinga?” Jeśli nie rozumieją Turinga Kompletnego, czy rozumieją Maszynę Turinga lub funkcję obliczalną Turinga? Przypomina to wyszukiwanie słowa retorycznego w słowniku i mówi o „retoryce”, odnosząc się do niej lub z nią związanych. Ta definicja nie mówi ci, co tak naprawdę oznacza retoryka, a jedynie wskazuje na inne słowo, którego nie rozumiesz.
chubbsondubs,
1

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.

Dima
źródło
4
Więc w twoim umyśle nie ma miejsca dla kogoś, kto będzie się do tego przybliżał, ponieważ nie chce marnować miejsca na inną sekcję języka znaczników? Dla mnie to pedanteria wykracza poza to, co jest przydatne.
Jon Hopkins,
1
+1, gdy widzę CV z HTML / CSS w sekcji „Programowanie”, nie czytam dalej. albo nie zna różnicy (więc nie ma dla mnie pożytku), albo ma nadzieję, że nie znam różnicy (więc nie chcę z nim pracować)
Javier,
2
@Jon Hopkins: Dbałość o szczegóły jest niezbędną cechą programisty. Podawanie HTML poniżej języków programowania nie jest przybliżone, jest niedbałe. To bardzo złe pierwsze wrażenie, jeśli ubiegasz się o pracę jako programista.
Dima,
1
@Dima: absolutnie. nieformalność jest w porządku, czasem nawet w formie pisemnej, niedokładność bardzo podstawowych koncepcji handlu jest niedopuszczalna.
Javier,
1
To jest niedorzeczne. Życiorysy i wywiady są obecnie jedną z najbardziej problematycznych części naszej branży. Nigdy nie wiadomo, czy ktoś, kto zna różnicę, nadal umieszcza „HTML” w „Językach programowania”, ponieważ się boi, że jakiś dron HR nie zauważy tego pod „znacznikiem / projektem / etc” i rozpocznie swoje CV. Powinieneś przynajmniej do nich zadzwonić lub przywieźć. Jeśli powiedzą ci, że „programują w HTML”, cóż… to naprawdę czerwona flaga. Ale jeszcze raz pomyśl o tym, co możesz teraz osiągnąć w samym HTML 5! Czy to naprawdę taki odcinek?
Graham,
0

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.

Lennart Regebro
źródło
7
-1 Ma to znaczenie, ponieważ HTML nie jest językiem programowania, nie ma podstawowych elementów takiej rzeczy - opisuje jedynie układ strony, tym samym rozszerzeniem jest książka o rysunku technicznym.
Orbling
1
@Orbling: Są to deklaratywne języki programowania specyficzne dla domeny zgodnie z najczęstszymi definicjami tego, co to oznacza. Patrz na przykład: en.wikipedia.org/wiki/... Więc przepraszam, że się nie udaje. Według całkowicie powszechnych i rozsądnych definicji są to języki programowania. I według zupełnie innych, ale równie rozsądnych i powszechnych definicji, nie są to języki programowania. Oba widoki są poprawne. Ale ci, którzy zbijają opinie nad głowami innych, są niepewni i muszą czuć się lepsi od facetów HTML.
Lennart Regebro,
8
Słowo „program” ma zdefiniowane znaczenie, które jest ogólnie uzgodnione. Nie można tworzyć programu w języku HTML, dlatego tworzenie czegoś w języku HTML nie jest „programowaniem”. Każdy, kto twierdzi inaczej, twierdzi, że te same słowa, których używają w swojej argumentacji, mogą mieć dowolną zmianę znaczenia, aw takim przypadku arbitralnie przypisałbym ich słowom znaczenie.
Mateusz
4
@Orbling: Czy „Pracuję z facetami HTML” to nowy „jeden z moich znajomych to {wstaw tutaj grupę mniejszościową}”?
Anon.
2
@Lennart Regebro, każda standardowa definicja języka programowania (nawet na Wikipeida) mówi, że język programowania może opisywać algorytm. Jak opisać algorytm w HTML i CSS?
Charles E. Grant,
0

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.

Danny Staple
źródło
Sugerowałbym język, który jest w pełni wykonywany i obsługiwany przez komputer. Debugowałem kod C i debugowałem style CSS. Mogę z całą pewnością powiedzieć, że ten drugi może zająć tak długo (jeśli nie dłużej) niż ten pierwszy (w zależności od tego, jak okropna rzecz zrobiła dana osoba ze wskaźnikiem w porównaniu do tego, która część specyfikacji jest trudna do uruchomienia i * & ^ Przeglądarka% $ @ wygląda nieprawidłowo). Sam HTML niewiele mówi, ale w połączeniu z pełnym wyrażeniem CSS może być bardzo interesujący.
Danny Staple,
2
Nie ma nic gorszego niż radzenie sobie z CSS i znacznikami przez deweloperów, którzy weszli w to, sądząc, że będzie to dziecinnie proste.
Erik Reppen,
0

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!

GlenPeterson
źródło