為什麼說 html 和 css 根本不算編程?
難道前端兩大塊之一的css在美團前端工程師眼裡就是切圖么?而且我認為這樣的對話在校招中出現非常打擊面試者,不知道業內前端大家都怎麼看?
我覺得大家有一點誤解了,首先面試者顯然並不是只會html和css,我個人也是更擅長js,從我的描述中完全體會不出一個人的css和js水平高低吧 雖然html css入門很簡單 但是精通他的人確不多,作為前端工程師的兩大技能之一,我覺得css也是很重要的,可能是我玻璃心認為面試官的那句話有一點瞧不起css吧~
嚴格上說真不能算
HTML 是結構化文檔
算是數據結構的一種(變體)吧
CSS 就是渲染引擎的怎麼運作的配置文件
所以也就算是程序運行配置參數的設置人員吧
雖然這倆貨結合起來
配合 :checked :not :nth-child之類的偽類能整出有限狀態的分支條件啥的但是還得依賴交互吧一步步點下去打個比方是
你寫一段代碼先得有限狀態組合都羅列起來
然後給個輸入跑這些狀態還沒循環得靠人不斷的拉開關保證代碼一行行跑下去……只能說是圖靈(靠人工)完備了吧……
我只回答你標題問題你 desc 里的就不說了css html 的確對web來說很重要但這不是可以不學或者不會寫一些簡單程序的理由HTML -&> HyperText Markup Language -&> 超文本標記語言
CSS -&> Cascading Style Sheets -&> 層疊樣式表
一個是標記語言,一個是樣式表。當然不是編程啦。一點問題都沒有。這個更類似於用非所見所得的字處理器寫文章是一樣的(譬如 markdown)。編程的部分在 Js 上。
當然了你要非說 CSS3 + HTML5 可以圖靈完備… 那個實現的也太蛋疼了(逃……《如果用編程語言寫論文》——圖片來自互聯網,侵刪
面試官並沒有說錯什麼。
==========================================================
另外有人提出html+css是圖靈完備,相信是看了stackoverflow的這個問題:Is CSS turing complete?不過我並不認同SO中第一的答案,因為其中圖靈完備的代碼包含了人工交互的部分。而圖靈完備中條件跳轉應該是自動執行。CSS和HTML如果圖靈完備意味著可以執行無限循環,但是實際上CSS表達總是有最終態。HTML / CSS 真的不算編程。
這樣就打擊到了?也太玻璃心了。另外,切圖就是把視覺稿(或者腦內的視覺稿)轉化成 HTML 頁面,所以說「CSS 就是切圖」也沒什麼錯。我知道你想聽到的是「網頁重構」這個詞。但是少年,如果你只會 HTML 和 CSS,估計你做的事情就是切圖而已...terminology - Why does it matter that HTML and CSS are not programming languages?
HTML and CSS describe presentation, whereas programming languages describe function
我認為沒必要糾結HTML和CSS本身是不是編程語言,除非你發明了HTML和CSS。
如果你只會html和CSS,但你做出了Bootstrap一類的框架,或推出了SMACSS (Home - Scalable and Modular Architecture for CSS) 一類的方法論,誰也不會小瞧你。
所以重要的是,你自己做了什麼事情。
HTML和CSS是不是編程類語言並不是最重要的,最重要的是你自己的選擇。
能不能算編程,最重要的界限是具有圖靈完備(Turing completeness)
HTML+CSS 不是圖靈完備的,所以不算編程(其實你在問這個問題的時候,大家都想的是什麼時候這玩意也算編程了?)但是十多年前就有的 XML(準確的說是其中的 XSLT)是圖靈完備的
要麼多讀點書,要麼堅強些,不然往後的路很難走確實不算編程。
但前端模板,CSS預處理和後處理,這些應該算是編程。
我相信隨著前端的發展。再過一兩年,校招前端面試絕對會比現在更難。做了兩年重構,5月份才開始學js。。才發現前端的世界比原來精彩太多了。
當然也發現比起js,重構真的就是個小坑而已,尤其是現在各種業界推的技術。
mvc,mvvm,模塊化,前端測試。。。而且都才學了沒多久,就發現大神們說這個都是落後的,新技術又要來了。。所以與其糾結html和css是不是編程,不如靜下心來寫幾個項目,多學點技術,努力拿到百度的offer,然後打面試官的臉(往年拿百度offer然後跳去美團有額外加薪來著)。。泡麵不能算做飯。
作為一名前端工程師,我第一次聽人把 HTML 和 CSS 說成是編程。
CSS代碼是可以有複雜度的,比如foundation/_grid.scssfoundation/_visibility.scss程序員很少需要天天寫這樣的代碼,先入為主是可以理解的。HTML也是同樣可以有複雜度的
成長中的技術,比如WebComponents.org和React
要解決的一個問題就是render模塊化低耦合的問題不「算」編程只是編程的角度架構的角度,複雜項目的HTML和CSS並不比JS,PHP簡單多少。我不怎麼會切圖,但是我做的是前端的事,什麼是前端,網上很多對這個職位的定義,但不能僅僅認為自己只能夠做切圖的事,受打擊,來吐吐槽,想求安慰,可以理解,我做java,做js,看來我會編程了吧,但是我覺得html,css做出來效果是人們真正想看到的東西,我很想掌握,也在學習,so 對自己定位可以定位為前端,但要更多的涉獵不同的技術,增強自己在軟體開發這方面的能力和視野.首先得有想法,其次通過技術手段去實現自己的想法,技術真的只是一個實現自己想法的工具,但是如何優美的實現,那是看編程功力和編程思想的,它是門學科.我也在學習,共勉吧
驚了。。。
為什麼那麼多人認為HTML並不算一門編程語言?
CSS不算也就算了難道只有圖靈完備的語言才算是編程語言?
正則這種有限狀態機語言就不算?HTML這種專業工具語言就不算?
只有邏輯存在順序,分支,循環的語言才算?程序設計是給出解決特定問題程序的過程,軟體開發過程中的重要步驟。程序設計往往以某種程序設計語言為工具,給出這種語言下的程序。程序設計過程應包括分析、設計、編碼、測試、除錯等不同階段。
(https://zh.wikipedia.org/wiki/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1)
使用HTML進行網頁編寫的時候,分析、設計、編碼、測試、除錯,請問哪個不需要?
頁面結構分析,樣式分析,模塊重用,解耦,這難道不是編程的一部分?僅僅是寫邏輯就叫編程?那和僅僅是寫代碼就叫開發有什麼區別這年頭真正精通 html + css的沒幾個, 光 bfc ,ifc 想理解透就很難。更別布局了。html+css 寫出效果來很簡單,但是 想知道為什麼是這樣的效果就麻煩了。現在 瀏覽器越來越牛逼了, 同樣的效果, 一個標籤+一點點css ,和 你四五個標籤+十幾行css,渲染出來的時間 也就差那麼幾毫秒。
所以咯,,,,, 但是,如果想學好精通,還是要 了解原理的。
看下面代碼,思考兩個問題。1: 第一個div 為何高度不是 200px ?2: 第二個div 明明是第三個span top對其,為何展現的像其他 top對其類似? 如果其他的top對其,第三個span top 對其 和現在又有什麼區別?= =,,,,這應該算是 ifc 裡面的一點點小知識,,,&
&
&s&
&ss&
&sss&
&ssss&
&
&
&
&s&
&ss&
&sss&
&ssss&
&
為了回答這個問題,專門寫了一個DEMO:無標題文檔 (請用Chrome或webkit內核瀏覽器查看)
這個效果完全是用HTML5和CSS3實現的,一行JavaScript也沒有,包括上面的按鈕和按鈕的點擊狀態的樣式。我想說的是,在CSS3之前的時候僅僅把CSS當做是頁面樣式語言是合適的,但是CSS3出現之後就完全不一樣了,它其實能實現很大一部分原本JS才能實現的效果。現在越來越多的複雜效果是用CSS3和JS結合在一起寫的,CSS3已經佔了很大的比重,傳統上認為CSS只負責樣式顯示的認識已經不合適了。
當然,其實CSS3的內部也是通過編程實現的,只是提供了一種通用的介面,類似於JS插件的函數介面,所以它的邏輯更簡單。你在用CSS3的時候,其實相當於是在調用一些JS函數,只是這些函數的實現由瀏覽器集成了。
現在的趨勢是,CSS比JS用的更多了。很多原本用JS才能實現的效果,現在用CSS3實現起來更簡單了。
我是先熟悉CSS3然後又學JS,我感覺其實用JS寫一些複雜樣式是不適合的,它太底層了,更多的精力應該用在思考頁面效果和邏輯上。從這個角度上,我覺得前端工程師將來接觸更多的可能是CSS,而不是JS,因為JS的代碼很容易復用,一般你只要熟悉怎樣調用介面就行了。
最後,我這樣說不是因為我不會JS,實際上我現在也可以用它寫一些心理測試之類的簡單應用。光從名字來看這倆就不合格:HTML: HyperText Markup Language(超文本標記語言)CSS: Cascading Style Sheets(層疊樣式表)如果還是不服,請用HTML和CSS實現遍歷二叉樹的DFS演算法,謝謝。
看了上面好多文章,忍不住想要評論一下,自己是個前端渣渣,在我的理解里前端主要是用戶和系統的連接處,所以最重要的是用戶體驗,css和html是用來展示頁面效果的,僅僅靠css和html是無法做好用戶體驗的,並且現在前端界面原來越複雜,要想實現好的前端是離不開js的,但是想要學好js,特別是在瀏覽器的環境下,感覺最有價值的部分是dom操作,html和css學不好,也無法用好js框架或者自己造個輪子,有人可能會吐槽造輪子,那個應該是不同人的觀點不一樣,在下學生一枚,喜歡前端,希望大牛們不要吐槽。
HTML和CSS不是靈圖完備的語言,你們還有什麼想說的?
準確來說,CSS和HTML也算是編程,這類編程方式叫做Declarative programming,聲明式編程,類似的還有SQL、XSLT。一般理解的編程語言C++、java等等,叫做Imperative Programming Language,命令式編程。之所以有人不把CSS和HTML不當作編程大概是也是因為它們不能告訴機器具體怎麼做,而我們這個時代智能AI不發達,還沒有自動化編程的能力,而且他們是僅僅解決網頁UI呈現領域的DSL。或許未來智能AI成熟了,普遍自動化編程,那麼以後程序員寫的代碼其實都會像CSS或者HTML這樣的聲明式風格了,就像寫配置文件一樣。
推薦閱讀:
※如何評價ClojureScript?
※Angular2與React,前端的未來志向何方?
※為什麼 CSS :not 選擇器不支持複雜選擇?
※985待業半年多,想去做前端,不知道現在還行嗎?
※25歲如花的年紀自學前端是明智的選擇么? 這幾天正猶豫要不要辭職,希望知友能給點意見,先行謝過?