Tại sao vấn đề là HTML và CSS không phải là ngôn ngữ lập trình?


158

Ví dụ ở đây:

Những ngôn ngữ nào tôi nên biết nếu tôi quan tâm đến việc xây dựng các ứng dụng web?

Có, tôi hiểu rằng HTML và CSS không hoàn chỉnh. Vâng, tôi hiểu rằng chúng là ngôn ngữ khai báo, không phải ngôn ngữ bắt buộc. Nhưng tại sao mọi người luôn nằm sấp trên đầu với sự thật phũ phàng (và có thể nói là rõ ràng) này khi họ đặt câu hỏi về các ngôn ngữ này?


32
Nó chỉ làm phiền tôi khi mọi người đưa nó vào sơ yếu lý lịch của họ. Điều tồi tệ hơn là khi họ đặt jQuery bên cạnh JavaScript trong "Trải nghiệm ngôn ngữ:".
Josh K

19
Nó có vẻ khá rõ ràng đối với tôi: Nếu tôi cần tìm cách thuê ai, hoặc giao ai cho một nhiệm vụ cụ thể, tôi cần biết họ có những kỹ năng gì. Nếu bài tập liên quan đến việc thực hiện một thuật toán, tôi sẽ không đưa nó cho một người chỉ có nền tảng về HTML / CSS. Tôi sẽ không chỉ định ai đó chỉ có một chương trình viết dòng lệnh C để viết một loạt các trang web phức tạp phải hoạt động trên nhiều trình duyệt. Tôi không biết nếu bạn ở vị trí tuyển dụng hoặc quản lý mọi người, nhưng bạn gặp phải nhiều người thề rằng những nhiệm vụ này có thể thay thế cho nhau.
Charles E. Grant

8
Dữ liệu chỉ là mã ngu ngốc và mã chỉ là dữ liệu thông minh: stackoverflow.com/questions/871833/
Khăn

14
Mọi người không hiểu được câu hỏi của OP mà theo nghĩa cùn hơn sẽ là: "Tại sao một loại twit nhất định, trong một cuộc thảo luận về 'ngôn ngữ chung chung', cảm thấy cần phải chỉ ra rằng CSS không phải là ngôn ngữ lập trình ? " Trước hết, duh. Cảm ơn bạn. Bất cứ ai biết ngay cả một số ít các thủ thuật JavaScript ngu ngốc cũng sẽ có được điều đó. Liệu việc thành thạo CSS có ý nghĩa gì với một lập trình viên đã ở đó và làm chủ điều đó? Ồ vâng. Có nó làm. Tôi không quan tâm nếu chúng ta lập trình chiếc rover sao Hỏa tiếp theo, đó là một bộ ngắt kết nối rõ ràng.
Erik Reppen

7
XSLT là một trường hợp thú vị để suy nghĩ trong bối cảnh này ...
Dan Diplo

Câu trả lời:


300

Sự khác biệt là gì?

Sự khác biệt thực sự và quan trọng giữa một ngôn ngữ lập trình và các ngôn ngữ khác là:

HTML và CSS mô tả trình bày , trong khi ngôn ngữ lập trình mô tả chức năng

Tôi dự định sẽ minh họa tại sao sự khác biệt này lại quan trọng, nhưng việc giáo dục về vấn đề này đôi khi bị đặt sai chỗ.

Một câu chuyện có thật :

Có lần tôi đã dành vài tháng để phát triển một hệ thống quản lý hiệu suất phức tạp bằng ngôn ngữ lập trình "phù hợp". Nó tự động hóa quá trình thu thập dữ liệu từ nhiều hệ thống khác nhau, thực hiện các thao tác khác nhau trên dữ liệu đó và sau đó trình bày kết quả trong một bảng đơn giản.

Khi nó còn hoạt động, một quản lý cấp cao đã nhìn thấy một công cụ được viết cho một doanh nghiệp tương tự và hỏi liệu chúng tôi có thể thay thế những gì tôi đã viết bằng cách sử dụng thay thế của họ không. Hơn nữa, anh ấy rất buồn vì tôi đã dành nhiều tuần để phát triển giải pháp của mình, nơi ứng dụng mới này đã được viết trong vài ngày.

Điều tra sâu hơn cho thấy rằng tùy chọn ưa thích của người quản lý là tất cả các bản trình bày không có chất: có rất nhiều màu sắc và biểu tượng và đồ thị, nhưng hoàn toàn không có logic đằng sau chúng. Tất cả các dữ liệu phải được thu thập và thao tác bằng tay. Mặc dù giao diện đẹp, ứng dụng về cơ bản là vô dụng.

Tôi rất vui khi nói rằng người quản lý trong câu hỏi đã thuyết phục rằng cách tiếp cận của tôi là cách đáp ứng nhu cầu kinh doanh thực sự của anh ấy.

Tầm quan trọng của việc trình bày :

Thường có một hàm ý rằng các kỹ năng về HTML, CSS, vv bằng cách nào đó kém hơn các kỹ năng về ngôn ngữ lập trình "thực". Đây là một sai lầm nghiêm trọng.

Trong câu chuyện của tôi, người quản lý cấp cao cảm thấy rằng thiết kế rất quan trọng đối với anh ta, đến mức ban đầu anh ta đã chuẩn bị để bỏ qua chức năng có lợi cho nó. Bây giờ, nếu đây là một sự cố cô lập, tôi có thể đề nghị rằng người quản lý chỉ là ngớ ngẩn. Nhưng nó đã không. Hết lần này đến lần khác, tôi đã gặp những người dùng bị ấn tượng bởi đồ họa hào nhoáng và các vật dụng điên cuồng, nhưng không bị ấn tượng bởi chức năng thô và thành tựu kỹ thuật của tôi. Tôi nghĩ rằng có một số bài học để tìm hiểu ở đây:

  • Mọi người đánh giá phần mềm theo tiêu chí mà họ hiểu. Họ thường hiểu sự khác biệt giữa đẹp trai và xấu xí, nhưng hiếm khi đánh giá cao các sắc thái kỹ thuật.
  • Mọi người bị đánh lừa bởi vẻ bề ngoài. Đây có thể không phải là một điều tốt, nhưng đó là một thực tế mà chúng ta phải sống cùng.
  • Xuất hiện ảnh hưởng đến cách mọi người cảm nhận về phần mềm. Cách mọi người cảm nhận về phần mềm rất quan trọng đối với họ. Thật vậy, đôi khi mọi người thích phần mềm làm cho họ cảm thấy tốt hơn phần mềm có chức năng vượt trội. Thật vậy, họ có thể làm việc hiệu quả hơn với các công cụ cảm thấy tốt hơn so với các công cụ kỹ thuật vượt trội. Ở mức độ này, người dùng của chúng tôi không bị lừa. Họ đang thực sự đưa ra một lựa chọn khôn ngoan và chu đáo.
  • Là lập trình viên, chúng ta thường bỏ qua vai trò của việc trình bày khi chúng ta tập trung vào chức năng. Ở một mức độ nào đó, điều này là đúng và đúng. Tuy nhiên, điều quan trọng là phải nhận ra rằng có một khía cạnh khác trong công việc của chúng tôi là quan trọng đối với khách hàng của chúng tôi.

Vì vậy, các ngôn ngữ hướng trình bày (HTML, CSS) rất quan trọng. Không nên đánh giá thấp giá trị gia tăng của những người có thể sử dụng các công cụ này một cách hiệu quả.

Tầm quan trọng của ngôn ngữ lập trình thực

Như OP đã chỉ ra, các ngôn ngữ lập trình "thực" là Turing Complete. Là một người đam mê buồn thích hợp, tôi thấy điều này rất hấp dẫn. Điều đó có nghĩa là, đối với bất kỳ chương trình nào được viết bằng ngôn ngữ TC, một chương trình tương đương về chức năng có thể được viết bằng bất kỳ ngôn ngữ TC nào khác . Tất nhiên, điều này không có nghĩa là tất cả các ngôn ngữ đều giống nhau. Họ đều có điểm mạnh và điểm yếu khiến họ ít nhiều phù hợp với một số nhiệm vụ nhất định. Tuy nhiên, I / O sang một bên, điều này có nghĩa là tất cả các chương trình có thể được viết bằng tất cả các ngôn ngữ lập trình thực sự.

(Ngẫu nhiên, điều quan trọng là TC. Khai báo so với mệnh lệnh là một cá trích đỏ ở đây. Ví dụ, SQL là khai báo nhưng cũng là ngôn ngữ lập trình phù hợp vì nó là TC.)

Tất nhiên, điều tương tự không đúng với ngôn ngữ đánh dấu như HTML hoặc CSS. Trên thực tế, có rất nhiều loại vấn đề mà các ngôn ngữ này không thể giải quyết được . Nơi tôi có thể lập trình bất cứ điều gì tôi muốn bằng một ngôn ngữ lập trình thực sự - bao gồm các công cụ bố trí - không thể đạt được những điều tương tự với các ngôn ngữ không phải là TC.

Như được nhấn mạnh trong câu chuyện của tôi, HTML và ilk của nó được sử dụng để tạo bài thuyết trình. Ngôn ngữ lập trình thực được sử dụng để sản xuất chức năng.

Tại sao các lập trình viên mô phạm về tất cả?

  1. Các lập trình viên dành rất nhiều thời gian, công sức và tiền bạc để phát triển các kỹ năng của họ. Mọi người tự nhiên coi trọng những thứ họ đầu tư ("trái tim của bạn là nơi tiền của bạn").
  2. Các lập trình viên thường cảm thấy cần phải chứng minh lượng thời gian cần thiết để tạo ra kết quả so với kết quả nhanh chóng đạt được của các nhà thiết kế UI. Để làm điều này, họ cần phải phân biệt giữa những gì hai nhóm thực sự làm .
  3. Bởi vì nhà tuyển dụng cần áp dụng đúng người vào đúng việc. Trừ khi chúng tôi làm rõ sự khác biệt (thường là kỹ thuật), các nhà quản lý dễ dàng thực hiện các cuộc gọi sai.
  4. Bởi vì có một sự khác biệt thực sựcơ bản , như đã nêu ở trên.

Có phải nó luôn luôn thích hợp để trở thành pedantic?

Chúng ta hãy đối mặt với nó, vì các lập trình viên chúng ta là một người rất tự nhiên . Nó đi với lãnh thổ. Nó không giúp ích gì cho nhiều người trong chúng ta đã bị đốt cháy khi những người không phải là lập trình viên không hiểu những gì chúng ta làm.

Tuy nhiên (và thành thật mà nói, điều này đi ngược lại với bản năng tự nhiên của tôi), tôi không nghĩ rằng chúng ta cần phải gọi mọi người ra ngoài bất cứ khi nào họ lướt qua mọi sự khác biệt nhỏ .

Những điều quan trọng ở đây là bối cảnhquan điểm .

Tôi đã nói rằng, từ quan điểm của một nhà sinh học, cà chua là một loại trái cây. Nhưng khi tôi mua chúng trong siêu thị, tôi tìm chúng trong số các loại rau. Tại sao? Bởi vì sự khác biệt kỹ thuật không quan trọng trong bối cảnh cụ thể đó. Hơn nữa, sự khác biệt thực sự sẽ cản trở sự hữu ích của chúng: ví dụ nếu tôi đủ để đưa cà chua vào món salad trái cây.

Nó giống với ngôn ngữ máy tính. Có những lúc sự khác biệt giữa ngôn ngữ lập trình và ngôn ngữ khác thực sự có vấn đề . Tuy nhiên, khá thường xuyên, tất cả chúng ta có thể giao tiếp hoàn hảo một cách hiệu quả khi chỉ cần gộp tất cả chúng lại với nhau. Trong trường hợp câu hỏi được liên kết bởi OP, thực sự không có vấn đề gì về ngôn ngữ là ngôn ngữ lập trình thực sự và ngôn ngữ nào không. Chỉ ra sự khác biệt không thúc đẩy cuộc thảo luận dưới bất kỳ hình thức nào. Rất may, ngoài việc thêm một chút tiếng ồn (và trở thành tác nhân kích thích cho một cuộc thảo luận thú vị!), Việc đi bộ được liên kết bởi OP không có kết quả. Tuy nhiên, điều tồi tệ nhất là nghề giáo có thể khuấy động những cảm xúc tiêu cực và làm hỏng các mối quan hệ ... ít nhất là theo vợ tôi.
:-)

Làm thế nào để đối phó với nghề giáo viên trong số các lập trình viên

Một người bạn thuyết giáo của tôi đã từng giảng một bài giảng có tên:

Đây có phải là một ngọn đồi đáng chết?

Ông đã đề cập đến các tướng lĩnh đánh giá chiến lược về những trận chiến nào đáng để chiến đấu: những lợi ích có đáng phải trả không?

  • Có thực sự đáng làm gián đoạn dòng chảy của cuộc thảo luận để làm cho sự khác biệt này?
  • Có phải nghề giáo của tôi bắt nguồn từ cảm giác kiêu ngạo hoặc từ quá khứ bị tổn thương?
  • Nhận xét của tôi có coi trọng kỹ năng của người khác cũng như của chính tôi không?

Tất nhiên, có những lúc cần phải phân biệt. Mục tiêu của tôi là, khi tôi đóng góp, nó sẽ tăng thêm giá trị cho những nỗ lực tập thể của chúng tôi.

Đó là, sau tất cả, công việc của mọi lập trình viên thực sự .


4
Tôi không nghĩ SQL đã hoàn thành Turing, trừ khi bạn nói về T-SQL hoặc PL / SQL.
Thất vọngWithFormsDesigner

@FrustratedWithFormsDesigner: Bạn nói đúng! Cảm ơn đã chọn tôi về điều đó. (Tuy nhiên, điểm tôi đang đứng - ngôn ngữ khai báo có thể là TC)
Kramii

1
Câu trả lời rất tốt. Là một nhà phát triển web, tôi đã thấy tình huống lặp đi lặp lại nhiều lần trong đó khách hàng ấn tượng hơn nhiều với thiết kế "hào nhoáng" so với chức năng được đề xuất. Trong khi điều này có thể xúc phạm bản năng lập trình viên thuần túy của chúng tôi (chức năng đó nên là vua), đó là điều chúng tôi bỏ qua lúc nguy hiểm.
Dan Diplo

4
+1: Joel Spolsky có một bài đăng blog thú vị giải quyết vấn đề với chức năng so với GUI hào nhoáng. Đặc biệt là các mối nguy hiểm khi hiển thị GUI hoàn thành 100% và rất hào nhoáng khi chức năng không được áp dụng. Một đọc tốt nếu bạn chưa đọc nó. joelonsoftware.com/articles/fog0000000356.html
Leo

3
"Họ có thể làm việc hiệu quả hơn với các công cụ cảm thấy tốt hơn so với các công cụ vượt trội về mặt kỹ thuật" - Đúng, đúng, đúng! Apple đã xây dựng doanh nghiệp của họ trên này. Đừng hiểu sai ý tôi, Mac cũng có chất, nhưng điều khiến một số người phải trả gần gấp đôi so với máy Mac so với Linux hay Windows là nó trông rất tuyệt và cảm giác sử dụng tốt.
GlenPeterson

116

Nói với một Kỹ sư Cơ khí hoặc Dân dụng rằng bạn đã học "Kỹ thuật phần mềm" và họ sẽ nói với bạn rằng "Kỹ thuật phần mềm" không phải là kỹ thuật thực sự .

Nói với một phi công F-16 rằng bạn bay Cessnas cho vui và anh ta sẽ nói với bạn rằng bạn không phải là một phi công thực sự .

Nói với bác sĩ rằng bạn là bác sĩ chỉnh hình và anh ấy sẽ nói với bạn ... tốt, chúng ta đừng đến đó :-)

Tôi nghĩ rằng hầu hết mọi người không thích ý tưởng về nghề nghiệp của họ bị xâm nhập bởi những kẻ giả vờ hoặc những người không thực sự "xứng đáng".

Bây giờ, công bằng mà nói, khá rõ ràng rằng HTML và CSS không phải là ngôn ngữ lập trình . Chúng không còn là ngôn ngữ lập trình mà định dạng .docx là ngôn ngữ lập trình và để khẳng định rằng bạn là lập trình viên nếu tất cả những gì bạn biết là HTML và CSS chắc chắn là không chính xác. Nhưng tôi nghĩ rằng một số sự kịch liệt trong câu trả lời có thể được quy cho những gì tôi đã nói ở trên.

Ngoài ra, trong câu hỏi bạn đã liên kết, người hỏi đã gọi HTML và CSS là "ngôn ngữ", không phải là "ngôn ngữ lập trình". HTML là một ngôn ngữ đánh dấu và CSS cũng là một ngôn ngữ (tuy nhiên tôi không biết "loại" ngôn ngữ nào bạn gọi là CSS?), Vì vậy tôi nghĩ rằng thật không công bằng khi gọi anh ấy ra để gọi chúng là "ngôn ngữ "...


7
"Tôi không biết" loại "ngôn ngữ nào bạn gọi là CSS, mặc dù vậy?" - tại một nhúm "ngôn ngữ mô tả phong cách" sẽ làm điều đó.
ocodo

28
@ acidzombie24: Chữ "L" trong "HTML" có nghĩa là gì?
Dean Harding

8
Nếu nó có cú pháp và ngữ nghĩa, thì thật khó để khẳng định đó không phải là ngôn ngữ. HTML và CSS đều là các ngôn ngữ theo các tiêu chí này (như tiếng Anh, Esperanto, Klingon và UML được cho là). Không ai trong số họ là ngôn ngữ "lập trình", mặc dù.
Zach

6
@Dean Harding - Legos Markup Legos?
VirtuosiMedia

4
CSS là DSL (Ngôn ngữ cụ thể miền) để mô tả phong cách (nghĩa là miền của nó là thẩm mỹ thị giác)
Paul

9

Nó không thực sự quan trọng với tôi rất nhiều.

Nhưng tôi cho rằng với những người làm điều đó, sự khác biệt giữa HTML, CSS, XML, v.v. và Real Programs Languages ​​™ giống như sự phân biệt giữa gỗ và sơn làm vật liệu xây dựng. Bạn không thể xây dựng mọi thứ bằng sơn như bạn có thể bằng gỗ và tương tự như vậy, bạn không thể lập trình với HTML như bạn có thể với RPL.

Mặc dù vậy, tôi cấp cho bạn một số cuộc hội thoại, việc tạo ra sự khác biệt như vậy có thể không liên quan, và do đó mang tính mô phạm và gây phiền nhiễu.


1
XML là một ví dụ tồi vì nó chung hơn HTML / CSS - XSLT là cả XML và Turing-perfect, chẳng hạn. Tôi nghĩ rằng XML không thực sự là một ngôn ngữ giống như cú pháp - nó chỉ định cách xác định các mã thông báo nhưng không có nghĩa là gì.
Tikhon Jelvis

@TikhonJelvis Tôi nghĩ rằng về cơ bản chúng ta đang nói điều tương tự, nhưng trong khi làm như vậy, bạn đang chứng minh quan điểm của mình. Tách tóc như liệu XML (Ngôn ngữ đánh dấu eXtensible) là "ngôn ngữ" hay "cú pháp" hầu như không liên quan đến điểm như tôi đang thực hiện, và do đó ...
Eric King

6

Nó có thể không phải là một sự khác biệt "quan trọng", vì có thể cho rằng nhiều công việc diễn ra trong phần html / css của một số trang web như trong phần lập trình.

Nhưng đó một sự khác biệt đáng kể, vì bất kỳ ai không biết điều đó có nghĩa là gì không có chỗ trong một nhóm phát triển web.

Nếu một nhà thiết kế tin rằng HTML là lập trình, hãy để anh ta thiết kế với các công cụ Adobe và thực hiện các thiết kế liên quan đến in; nhưng đừng tin một điều anh ta có thể nói về các ứng dụng web.

Nếu một nhà phát triển nghĩ rằng anh ta ở trên các nhà thiết kế vì 'ngôn ngữ của anh ta đã hoàn thiện, thì đừng hy vọng anh ta sẽ làm việc tốt với nhà thiết kế, hoặc mã của anh ta có thể được' hoàn thiện 'sau khi hoàn thành.


@Javier: Định nghĩa của bạn về "ngôn ngữ lập trình" là gì?
Christoffer Hammarström

@Christoffer Hammarström: nếu được nhấn để đưa ra một định nghĩa chính thức, tôi sẽ đi với Turing-hoàn thành; nhưng không chính thức tôi chỉ nói rằng một chương trình làm mọi thứ, đáp ứng với một số đầu vào. Thông thường, nếu không có if ... thencấu trúc thời gian chạy và một số cách để lặp lại mọi thứ với số lần không xác định trước đó, tôi có xu hướng nói rằng đó không phải là ngôn ngữ lập trình. Tất nhiên, có một số ngôn ngữ bên lề làm phức tạp định nghĩa; nhưng HTML / CSS là xa đó.
Javier

@Javier: Bạn có nói rằng "Hello World" kinh điển là một chương trình, với điều kiện là nó không có đầu vào?
Christoffer Hammarström

@Javier: Theo một cuộc thảo luận trên Wikipedia ( en.wikipedia.org/wiki/ ,), các phiên bản đầu của ngôn ngữ Pixel Shader không hoàn chỉnh (không có "khả năng lặp lại tổng quát", tức là "một số cách để lặp lại mọi thứ trước đây- không biết số lần "). Đây là những ngôn ngữ chỉ được sử dụng bởi các lập trình viên trong lập trình Bộ xử lý đồ họa trong các trò chơi phổ biến. Bạn vẫn sẽ nói họ không phải là ngôn ngữ lập trình?
Christoffer Hammarström

@Christoffer: Xin chào thế giới yêu cầu đầu vào: bạn phải bắt đầu thực hiện nó. Mặc dù vậy, quan sát của bạn về Pixel Shader rất hấp dẫn.
Robert Harvey

5

Bạn đánh nó vào đầu khi bạn nói "khai báo, không bắt buộc". Đánh dấu (có thể là HTML, CSS hoặc bất cứ điều gì) mô tả mọi thứ. Toàn bộ quan điểm của lập trình là để làm mọi thứ.

Bộ kỹ năng cần thiết để sử dụng đánh dấu là hoàn toàn khác với bộ kỹ năng cần thiết để lập trình.

Các loại vấn đề được giải quyết bằng cách viết đánh dấu là hoàn toàn khác với các loại vấn đề được giải quyết bằng lập trình.


16
Ngôn ngữ lập trình chức năng thuần túy là do bản chất khai báo của chúng. Linq, hiểu danh sách của Python, XAML, XSLT, SQL và Prolog. Tất cả đều là ngôn ngữ lập trình và / hoặc khái niệm trung thực. Trong khi hầu hết các ngôn ngữ lập trình là bắt buộc, đây không phải là tính năng xác định. Ở tất cả.
Konrad Rudolph

@KonradRudolph - Nếu bạn nghĩ rằng các ngôn ngữ lập trình chức năng thuần túy theo bất kỳ nghĩa khai báo nào, bạn không được hiểu chúng rất rõ.
Jonathan Cast

@jcast Hoàn toàn có thể là tôi hiểu nhầm điều gì đó. Nhưng sau đó, các chuyên gia trong lĩnh vực này, rõ ràng; Để tham khảo chung, Wikipedia phân loại (hoàn toàn) ngôn ngữ lập trình chức năng là khai báo. Một ví dụ cụ thể, Paul Bone, người có bằng tiến sĩ về các ngôn ngữ khai báo thuần túy, cũng tuân theo định nghĩa này. Tôi tò mò muốn biết lý do gì bạn vi phạm định nghĩa.
Konrad Rudolph

5

Nó quan trọng đối với một số người vì không phải là khoa học tên lửa trên bề mặt nhưng có rất nhiều arcana xung quanh họ do thực tế là họ thực hiện khác nhau trong 5 đến hàng chục môi trường khác nhau mà bạn thực sự quan tâm. Sự khó đoán và sự chú ý đến nghề thủ công đó làm cho một số chuyên gia công nghệ sợ hãi trước những rủi ro không thể chấp nhận được và thậm chí còn kinh hoàng hơn khi học thêm bất cứ điều gì sau đó họ hoàn toàn phải có bằng cấp.

Nếu ai đó hỏi tôi những ngôn ngữ nào tôi biết và tôi đã ném CSS ra đó và họ nói "nhưng đó không phải là ngôn ngữ THỰC SỰ", tôi sẽ hỏi họ làm thế nào để họ xử lý trung tâm một div theo chiều dọc trong IE 5, IE 6-8 và IE9 +. Sau đó, chúng ta có thể chuyển sang các góc tròn, các vấn đề về độ trong suốt alpha, thủ phạm THỰC SỰ đằng sau tất cả các đối số bố cục bảng vô lý này chỉ mới bắt đầu trở nên thực sự không liên quan và hàng tá chủ đề khác cho người viết mã uber có thể biết một ngôn ngữ và tuyên bố một hoặc hai rằng anh ta hầu như không biết chữ do các lớp học mà anh ta đã buộc phải học đại học 10 năm trước.

Chúng chắc chắn là 'ngôn ngữ'. Tôi sẽ không gọi chúng là 'ngôn ngữ lập trình.' Tôi sẽ cảm thấy thoải mái khi mô tả quá trình viết bằng các ngôn ngữ này 'mã hóa'.

Tuy nhiên, theo như tôi quan tâm, bất kỳ ai từng quản lý CSS đều có chutzpa và đạo đức làm việc để trở thành một lập trình viên xuất sắc, đã có một số nền tảng về tư duy hướng đối tượng, và không nghi ngờ gì đã học cách nghĩ về những gì anh ta viết bây giờ có thể tác động đến 25 dự án làm việc của mình trong tương lai.


2
+1. Tôi không biết bao nhiêu lần tôi đã nghe một "lập trình viên" đưa HTML / CSS xuống như một chương trình đơn giản và không thực sự. Sau đó, khi họ không thể hiểu tại sao danh sách gạch đầu dòng của họ chỉ xếp hàng đúng cách trong Firefox, họ giơ tay và tuyên bố rằng toàn bộ Web không phù hợp với phần mềm hiện đại :(
Graham

3

HTML và CSS không phải là ngôn ngữ lập trình. Hãy vượt qua nó.

Tuy nhiên: JavaScript là ngôn ngữ lập trình. Máy là trình duyệt. PHP là một ngôn ngữ lập trình. Máy là một máy ảo trong máy chủ.

Vì vậy, nếu bạn chỉ làm bằng HTML và CSS, bạn sẽ không thực hiện bất kỳ chương trình nào (mặc dù bạn có thể đang thực hiện một số kỹ thuật).

Nhưng nếu bạn đang sử dụng JavaScript, PHP hoặc ngôn ngữ kịch bản lệnh khác. Bạn đang làm lập trình.

Đối với ngôn ngữ lập trình THỰC SỰ. Nếu bạn đang vận hành trên máy (máy thật hoặc ảo). Và đang sử dụng thuật toán RIÊNG CỦA BẠN để bảo máy làm việc. Sau đó, bạn đang sử dụng một ngôn ngữ lập trình THỰC SỰ.


6
Vì vậy, tôi đoán rằng chúng ta có thể phân phối với HTML, CSS và SQL bởi vì, sau tất cả, chúng không phải ngôn ngữ lập trình thực sự . Trên thực tế, chúng ta cũng có thể phân phối với IDE, vì bất kỳ lập trình viên nào xứng đáng với muối của anh ta đều có thể thực hiện với trình soạn thảo dòng lệnh.
Robert Harvey

4
Tôi đã không đánh giá thấp câu trả lời này một cách cá nhân (tôi nghĩ -6 là đủ!) Nhưng tôi sẽ đoán lý do cho các downvote là điều này không thực sự trả lời câu hỏi. Câu hỏi không phải là "ngôn ngữ lập trình HTML & CSS?", Câu hỏi là "tại sao nó lại quan trọng?"
Dean Harding

6
@Robert Điều đó hoàn toàn đặc biệt. "X là vô giá trị" không tuân theo lập luận của Ricardo rằng "X không phải là Y".
Matthew đọc

4
@Lennart Regebro @Robert Harvey: @Matthew Vị trí của Read là nubbin của cuộc trò chuyện ở đây - bạn đang đánh đồng cảm giác vượt trội với việc từ chối một sự giả dối. HTML / CSS đặc biệt khó khăn, tôi thuê những người có thể làm điều đó đối với tôi như tôi không có nơi gần đủ tốt ở đó, tôi thiếu các kỹ năng. Đó là một kỹ năng thiết kế kỹ thuật, nó không phải là lập trình .
Orble

3
Làm cho từ "lập trình" trở nên rộng là làm cho nó gần như vô nghĩa. Ý nghĩa hẹp hơn thế, và bạn cũng có thể có một ý kiến ​​khác nhưng hóa ra ngôn ngữ có nghĩa là phần lớn sử dụng nó để nói.
Matthew đọc

3

Ngôn ngữ lập trình là một chút của một thuật ngữ không chính xác bởi vì đó là một thuật ngữ phổ biến được sử dụng bởi các học viên và giáo dân. Các học viên có một ý nghĩa sắc thái của thuật ngữ đó, nơi giáo dân thường không. Thông thường định nghĩa của chúng là nếu nó có các từ / cú pháp vui mà tôi không hiểu ngay lập tức và các lập trình viên sử dụng nó thì đó phải là ngôn ngữ lập trình. Không hoàn toàn sai lệch, nhưng chúng ta có thể đồng ý rằng nó không chính xác.

Những từ như khai báo, bắt buộc và hoàn thành là những thuật ngữ chính xác hơn với ý nghĩa rất cụ thể. Khi bạn hỏi một câu hỏi như tại sao HTML / CSS không phải là ngôn ngữ lập trình, bạn sẽ yêu cầu một định nghĩa chính xác hơn về ngôn ngữ lập trình thực sự là gì. Chúng tôi không phải là người phạm tội, nhưng cố gắng trả lời câu hỏi của bạn. Chúng có phải là thuật ngữ tốt nhất để sử dụng ngay cả khi bạn google chúng không khó hiểu ý nghĩa của chúng? Phụ thuộc. Bạn muốn câu trả lời ngắn hay dài. :-)

Các ngôn ngữ lập trình thường được cho là hoàn thành bởi các lập trình viên, nhưng điều đó có nghĩa là gì? Nó có nghĩa là ngôn ngữ có thể mô tả hành vi hoặc cách làm việc. Chúng tôi chính thức gọi nó là logic. HTML / CSS có thể mô tả có một nút nằm ở góc trên cùng bên phải hoặc có một bảng có 4 cột 5 hàng, hai hàng đầu tiên có màu vàng và hàng dưới cùng có văn bản màu xanh lá cây và mỗi ô trong bảng có 5 pixel không gian trống xung quanh nội dung.

Những gì HTML / CSS không thể làm là thể hiện hành vi hoặc logic của những gì xảy ra khi bạn nhấp vào nút. Không thể nói khi tôi nhấp vào nút đó, hãy lấy các giá trị ra khỏi bảng đó và thêm chúng lên, và viết giá trị đó vào một hàng mới ở cuối bảng. Mô tả hành vi gần tương đương với Biến hoàn thành mà không bị quá phạm vi.

Chính xác hơn là Turing-perfect có nghĩa là bạn có thể tự thực hiện ngôn ngữ. Điều đó có nghĩa là tôi có thể viết một chương trình javascript có một chuỗi javascript và nó có thể thực thi nó (và không sử dụng hàm eval ()). Trên thực tế, tôi có thể viết một chương trình javascript có thể lấy một chương trình được viết bằng bất kỳ ngôn ngữ hoàn chỉnh Turing nào và đánh giá nó. Đó là ý nghĩa của việc Turing hoàn thành. Tất cả các ngôn ngữ đang hoàn thành tương đương trong những chương trình có thể được thể hiện. Tiết lộ khá tuyệt vời nếu bạn nghĩ về nó


Turing-Complete có nghĩa là ngôn ngữ có thể được sử dụng để mô phỏng máy Turing (hoặc, nó có thể tính toán bất kỳ chức năng tính toán Turing nào).
mipadi

3
@pipadi - Một định nghĩa rất chính xác và chính xác tôi sẽ cung cấp cho bạn điều đó, nhưng ai đó đặt câu hỏi như thế này sẽ nói "Vâng WTF có phải là máy Turing không? WTF là chức năng tính toán Turing?" Nếu họ không hiểu Turing Complete thì họ cũng sẽ hiểu chức năng Turing Machine hoặc chức năng tính toán Turing? Nó giống như tìm kiếm các từ tu từ trong từ điển và nó nói "của, liên quan đến, hoặc liên quan đến hùng biện." Định nghĩa đó không cho bạn biết ý nghĩa tu từ thực sự có nghĩa là gì và chỉ cho bạn một từ khác mà bạn không hiểu.
chubbsondub

1

Đây là hai xu của tôi. HTML và CSS rõ ràng không phải là ngôn ngữ lập trình. Vì lý do đó, khi tôi thấy HTML hoặc CSS trên sơ yếu lý lịch của ai đó trong "Ngôn ngữ lập trình", điều đó chỉ đơn giản cho tôi biết rằng người này không biết anh ta đang nói về cái gì.

Ngoài ra, không, nó không thực sự quan trọng.

Nhân tiện, các lập trình viên thường có xu hướng phạm nhân. Điều đó chỉ đơn giản đi kèm với công việc.


4
Vì vậy, trong tâm trí của bạn không có chỗ cho ai đó chỉ là gần đúng về nó bởi vì họ không muốn lãng phí không gian có phần ngôn ngữ đánh dấu khác? Đối với tôi đó là cách đi bộ vượt ra ngoài những gì hữu ích.
Jon Hopkins

1
+1 khi tôi thấy một CV có HTML / CSS trong phần 'lập trình', tôi không đọc thêm nữa. hoặc anh ta không biết sự khác biệt (vì vậy anh ta không sử dụng cho tôi), hoặc hy vọng tôi không biết sự khác biệt (vì vậy tôi không muốn làm việc với anh ta)
Javier

2
@Jon Hopkins: Chú ý đến chi tiết là một phẩm chất cần thiết trong một lập trình viên. Đặt HTML dưới các ngôn ngữ lập trình không phải là gần đúng, nó là cẩu thả. Điều đó tạo ấn tượng đầu tiên rất tệ nếu bạn đang xin việc làm lập trình viên.
Dima

1
@Dima: hoàn toàn. không chính thức là ok, đôi khi ngay cả bằng văn bản, sự thiếu chính xác trong các khái niệm rất cơ bản của thương mại là không thể chấp nhận được.
Javier

1
Chuyện này thật vớ vẩn. Sơ yếu lý lịch và các cuộc phỏng vấn là một trong những phần có vấn đề nhất trong ngành công nghiệp của chúng tôi ngay bây giờ. Bạn không bao giờ biết nếu ai đó biết sự khác biệt vẫn đặt "HTML" trong "Ngôn ngữ lập trình" vì họ sợ một số máy bay không người lái sẽ không nhận thấy điều đó trong "markup / design / etc" và loại bỏ sơ yếu lý lịch của họ. Ít nhất bạn nên gọi họ hoặc đưa họ vào. Nếu họ nói với bạn rằng bạn "lập trình bằng HTML", thì ... đó thực sự là một lá cờ đỏ. Nhưng một lần nữa, hãy nghĩ về những gì bạn có thể thực hiện ngay trong HTML 5! Có thực sự là một căng như vậy?
Graham

0

Nó không thành vấn đề. Và đó cũng là một vấn đề định nghĩa. Ngôn ngữ lập trình là gì? Một số có nghĩa là nó phải hoàn thành. Những người khác có định nghĩa khác, làm cho HTML trở thành một ngôn ngữ lập trình. (Và trong ví dụ của bạn, chúng thậm chí không được gọi là ngôn ngữ lập trình, chỉ là ngôn ngữ mà chúng rõ ràng là).

Đề nghị của tôi: Cố gắng phớt lờ những người chỉ ra những loại vô nghĩa này và theo nhiều nghĩa thậm chí là tuyên bố không chính xác. Nó chỉ là một biến thể của ngữ pháp nazi-ism. Gọi HTML là ngôn ngữ lập trình không chính xác theo bất kỳ ý nghĩa nào.


7
-1 Điều đó có ý nghĩa vì HTML không phải là ngôn ngữ lập trình, nó không có các yếu tố cơ bản của một thứ như vậy - nó chỉ mô tả bố cục trên một trang, bởi cùng một phần mở rộng, một cuốn sách về bản vẽ kỹ thuật là ngôn ngữ lập trình.
Orble

1
@ Tổ chức: Chúng là các ngôn ngữ lập trình khai báo cụ thể theo miền theo các định nghĩa phổ biến nhất về ý nghĩa của nó. Xem ví dụ: en.wikipedia.org/wiki/ đá Vì vậy, xin lỗi, bạn thất bại. Theo định nghĩa hoàn toàn phổ biến và hợp lý, chúng ngôn ngữ lập trình. Và theo các định nghĩa hoàn toàn khác nhau, nhưng không kém phần hợp lý và phổ biến, chúng không phải là ngôn ngữ lập trình. Cả hai quan điểm đều đúng. Nhưng những người đưa ý kiến ​​của họ lên đầu những người khác là không an toàn và cần phải cảm thấy vượt trội hơn so với những người HTML.
Lennart Regebro

8
Từ "chương trình" có nghĩa được xác định thường được thỏa thuận. Bạn không thể tạo một chương trình với HTML, do đó, tạo một cái gì đó bằng HTML không phải là "lập trình". Bất cứ ai tranh luận khác nhau đều cho rằng chính những từ họ sử dụng trong tranh luận của họ có thể thay đổi ý nghĩa của họ một cách tùy tiện, và trong trường hợp đó tôi sẽ tự ý gán những từ của họ không có nghĩa gì.
Matthew đọc

4
@ Tổ chức: "Tôi làm việc với những người HTML" có phải là "một trong những người bạn của tôi là {chèn nhóm thiểu số ở đây}" không?
Anon.

2
@Lennart Regebro, mọi định nghĩa chuẩn của ngôn ngữ lập trình (ngay cả trên Wikipeida) đều nói rằng ngôn ngữ lập trình có thể mô tả thuật toán. Làm thế nào bạn có thể mô tả một thuật toán trong HTML và CSS?
Charles E. Grant

0

Tôi nghĩ rằng nó thuộc về điều này - HTML & CSS, trong khi đủ phức tạp để yêu cầu một số hiểu biết, là ngôn ngữ trình bày, phù hợp nhất là định dạng cho các báo cáo được tạo. Do đó, những người chỉ có thể làm những điều này không được coi là lập trình viên. Hãy nhớ rằng một số lập trình viên đã tính toán đủ lâu để nhớ khi trình xử lý văn bản trung bình sử dụng nhiều cú pháp lệnh để định kiểu văn bản hơn HTML.

Điều mà một số người sẽ gọi là ngôn ngữ 'thực' là ngôn ngữ sẽ xử lý dữ liệu theo một cách nào đó để tạo báo cáo. Hoặc một cái gì đó có thể được sử dụng để viết một trò chơi. Biết HTML & CSS từ trong ra ngoài là một kỹ năng có giá trị, nhưng nó kết hợp nhiều hơn với kiến ​​thức về JS cho giao diện người dùng và Java, PHP, Perl, Ruby, Python, C / C ++ hoặc C # ở phía sau.

Ngược lại, một người chỉ biết một trong những ngôn ngữ 'thực' mà không có bất kỳ công nghệ giao diện web nào, sẽ hạn chế rất nhiều tính linh hoạt của chính họ với tư cách là một lập trình viên.


Tôi muốn đề xuất một ngôn ngữ được thực thi và chạy hoàn toàn bởi máy tính. Tôi đã gỡ lỗi mã C và gỡ lỗi các kiểu CSS. Tôi có thể nói chắc chắn rằng cái sau có thể mất nhiều thời gian (nếu không lâu hơn) so với cái trước (tùy thuộc vào điều kinh khủng mà một người đã làm với một con trỏ so với phần che khuất của thông số bạn đang cố gắng làm việc và * & ^ % $ @ trình duyệt có vẻ sai). Chỉ riêng HTML không thực sự nói nhiều, nhưng kết hợp với biểu thức đầy đủ của CSS, nó có thể rất thú vị.
Daniel Staple

2
Không có gì tệ hơn là đối phó với CSS và đánh dấu bởi các nhà phát triển đã nghĩ rằng đó sẽ là trò chơi của trẻ em.
Erik Reppen

0

Mô hình / bộ não / khuôn mẫu "não trái" hoặc "não phải" sáng tạo mô tả chính xác bộ kỹ năng của nhiều người. Theo kinh nghiệm của tôi, "HTML / CSS là ngôn ngữ lập trình" nói nhiều hơn về việc những người giỏi HTML / CSS cũng có thể giỏi các nhiệm vụ lập trình khác.

Hầu hết các nhà thiết kế web mà tôi đã làm việc trong 13 năm qua tôi đã làm phát triển web đã có thể tạo HTML và CSS hoạt động, nhưng không thể xử lý các thách thức lập trình đòi hỏi khắt khe hơn (bất cứ điều gì hơn là cắt và đơn giản nhất dán JavaScript). Hầu hết các lập trình viên và nhà thiết kế cơ sở dữ liệu nóng bỏng không quan tâm đủ đến việc trình bày trực quan để thực hiện tốt công việc với HTML / CSS hoặc trình bày nói chung. Hầu hết thực sự từ chối để thử.

HTML và CSS yêu cầu một số kỹ năng lập trình: thử nghiệm, giải quyết vấn đề, kiểm tra cẩn thận, hiểu về kế thừa ... Nhưng chúng đòi hỏi ít nhất một số kỹ năng thiết kế tương đương: độ nhạy với màu sắc, đường kẻ, khoảng cách, cân bằng - hầu hết đều giống nhau các loại kỹ năng sáng tác hình ảnh mà làm cho một bức ảnh tốt.

Vì HTML / CSS là ngôn ngữ bố cục hoặc ngôn ngữ trình bày, nên nó nằm ở cuối sơ đồ luồng dữ liệu. Không có mã nào khác nằm ở hạ lưu của nó. Các kỹ năng thiết kế cấp lớn hơn mà ai đó cần để thiết kế API, dịch vụ hoặc lược đồ cơ sở dữ liệu tốt không được sử dụng trong HTML và CSS. Nhìn chung, không cần phải mô đun hóa bất cứ điều gì liên quan đến HTML hoặc CSS, hoặc nếu có, thì không phải là người thiết kế đồ họa để làm điều đó. Rất hiếm khi bất kỳ chức năng nào được thực hiện với HTML / CSS . Menu thả xuống có lẽ là ngoại lệ phổ biến nhất, nhưng chúng có thể được thực hiện bằng cách cắt và dán một công thức ra khỏi web thay vì thiết kế mã.

Điều đó là bất thường, nhưng không phải là không thể đối với một lập trình viên có một số kỹ năng thiết kế trực quan hoặc bố trí hoặc cho một nhà thiết kế có một số kỹ năng lập trình. Những người này đặc biệt có giá trị trên một nhóm web vì họ giúp thu hẹp khoảng cách mà hầu hết chúng ta có. Nhưng chúng thường tuân theo các khuôn mẫu, rằng việc có thể làm HTML / CSS là không thể đối với một "lập trình viên thực sự" hoặc ngược lại. Nhưng sự kết hợp kỹ năng này không phải là không thể hơn là cùng một lập trình viên trở thành một thủy thủ, họa sĩ, đầu bếp giỏi hoặc có một số kỹ năng khác mà họ thực hành trong thời gian rảnh rỗi.

Như những người khác đã nói, sự khác biệt này tập trung nhiều nhất khi tuyển dụng. Vì những người có tài năng chéo là rất hiếm, hầu hết các bài đăng công việc phải nhắm mục tiêu một bộ kỹ năng này hoặc kỹ năng khác. Nếu một lập trình viên liệt kê HTML / CSS trong "Ngôn ngữ lập trình", nó sẽ giương cờ đỏ rằng họ không thể hoàn thành các nhiệm vụ lập trình chung hoặc có thể định nghĩa lập trình của họ rất hẹp. Có lẽ họ có thể, nó chỉ đặt ra một câu hỏi. Nếu một nhà thiết kế liệt kê HTML / CSS, bạn chắc chắn muốn xem danh mục đầu tư của họ để thấy rằng họ có khả năng nghệ thuật để tạo hiệu ứng hình ảnh mong muốn.

HTML / CSS có thể bị vứt bỏ nhiều lần vì không phải là ngôn ngữ lập trình thực sự vì nó an toàn và dễ chấp nhận hơn về mặt xã hội so với những người không thể vượt qua sự phân chia bán cầu mà họ đại diện. Tất nhiên, một số người có thể không có sự ức chế đó. Tôi thực sự đã làm việc với một người quản lý thường nói: "Anh ấy đã viết [chèn chức năng xương sống của bộ phận ở đây]? Tôi nghĩ rằng anh ấy chỉ làm HTML?"

Câu hỏi tuyệt vời!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.