Not Real Programming

As I recently reflected, a paper by Tim Berners-​​Lee about the World Wide Web for HyperText ’91, the then peak HyperText focussed conference in the world, was rejected. Who could be so short sighted? Well almost all of us really, but here’s what a prominent Hypertext researcher at the time said

  • Links in hypertext must be bidirectional. WWW’s are one way only.
  • WWW servers aren’t aware of each other and there is no inter-​​​​server communication.
  • All WWW servers are equal. There should be a concept of hubs.
  • WWW servers don’t keep state. They are completely unaware of their previous interactions.
  • It’s obvious that whoever wrote the hypertext engine doesn’t understand SGML. This HTML is done all wrong.
  • Finally, he’s giving this away for free. That means it has no value at all. We have our own version and a strong licensing partner.

All of them at the time very legitimate criticisms. And as it turns out, completely wrong. Because they were a priori[1] beliefs about what good hypertext systems were, based on a lot of theory, and very little real-​​world experience.
By the way, I held pretty much all those beliefs at the time. Hypertext was something I knew a fair bit about. And of course I was wrong.

I also observed recently that the criticisms of the use of web technologies for application development (critics now generously grant that web technologies are fine for pages) are also a priori truths that don’t even need justification (JavaScript is slow, um, JavaScript is slow, and well, JavaScript is slow) and fall into a similar pattern.

But, there has been another, even longer running constant regarding the web for the last 20 years—working with web technologies is not “programming”, not “real coding”. Seriously, this has been going on for about 20 years. But I’ve kind of had enough of it.

For a long time, the focus of this criticism was on HTML (then CSS). Because (I’m guessing here, as typically this belief is stated without any further justification, it simply is) HTML/​CSS doesn’t look like “real” programs (you know with loops and variables and stuff), because HTML/​CSS stuff doesn’t crash, and so it can’t possibly be “real” programming.

These days JavaScript is often lumped in there too (because I suppose again, if a priori web programming isn’t real programming, then that’s never going to change, even if it gets loops and variables and stuff).

The perils of innovation

This whole ‘debate’ brings to mind book, Clayton Christensen’s The Innovator’s Dilemma. In it, Christensen makes the case that disruptive technologies don’t start out better than established technologies, as would seem intuitive, they start out worse. But for all their faults in comparison with entrenched, established competitors, there’s something radically different that opens whole new opportunities, and makes them disruptive.

How might this apply to the web, and in particular HTML and CSS (and to a lesser extent JavaScript, for which there might be a lesson lurking in here)?

Well, TIOBE software has been publishing an index of the top programming languages for many years.

The ratings are based on the number of skilled engineers world-​​wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings

Guess where HTML ranks? CSS? Nowhere in the top 50. I’m pretty sure they don’t even bother to include it in their research (though I’m happy to be proven wrong).

Maybe that’s because people who use HTML and CSS aren’t considered “skilled engineers”? Maybe because of what they consider to be “courses” for the purposes of their research (do they have to be University level?) Maybe there aren’t sufficient third-​​party vendors? (other than Microsoft, Apple, Google, Mozilla, Blackberry, Samsung and countless others I guess).

So, what’s going on? I’d suggest this is a classic example of the innovators dilemma. HTML/​CSS[2] don’t do what ‘real’ programming languages do.

And yet, more people can use these technologies (albeit far from all of them particularly well) to build productive real world stuff than probably all the top 50 languages put together. Their apparent weaknesses of being forgiving (it’s not programming as wrong stuff doesn’t crash!), and relatively straightforward to get started with (it’s a toy!) are (among other things) precisely their disruptive advantages. Just as the ability to read and write went from being an elite ability, to an almost ubiquitous human capability in a bit over a century, providing arguably the greatest disruption in human history (until 1908, during the early stages of the explosion in human literacy, no human had flown except by hot air balloon, but just 60 years later, humankind stood on the moon), I can’t begin to imagine what the near ubiquitous ability to program computers (in a very general sense, not in the sense of mastering for-​​loops) will bring over the next century.

And when this happens, you can thank HTML.

Because among all the revolutions of the web was one we pay too little attention to: it is declarative, not imperative programming.

When most people hear the word programming, they think of things that look like this

AXE programming Ad (yes, it’s assinine, think about why I chose the image perhaps?)

But this is simply one, although to date the dominant, paradigm of computing, imperative computing. In imperative computing, we tell the computer how to do something we want done. Here’s a simple example using the web

var allParagraphs = document.querySelectorAll("p")

for (var i=0; i < allParagraphs.length; i++) {
	allParagraphs[i].style.color = "red"
};

I even cheated here a bit, as you could argue that to be truly imperative, I should have walked the entire DOM tree, testing each node to see if it were a paragraph. See, programming for the web is a toy! Real men walk the DOM tree!

We’ve had to tell the browser exactly how to style each paragraph (get its style property, and set the color property of the style object to the keyword red)

Of course, that’s not what we do, instead we do this

p {color: red}

Too easy! Not real programming!

Sorry for the sarcasm, it just gets boring after a while to hear this sort of argument.

CSS is an example of a different, and in many circumstances better paradigm of computing, declarative programming (declarative programming comes in different flavours, including functional programming.) Declarative programming specifies what the computer should do, not (as we saw with imperative programming) how it should be done. In this example, what should be done? Turn all paragraphs red. I really don’t care how it happens, just make it so (Jean-​​Luc Picard would (will) be a declarative programmer).

HTML, and CSS are harbingers of widespread declarative programming. Doing away as they do with many of the aspects we associate with traditional (“real”) programming, they look too easy. Judging by how poorly they are often used (and how few people use much of the power of CSS selectors), they might be easy to use, but as challenging to master as more traditional programming languages.

So, when I hear people say HTML and CSS (and even JavaScript) aren’t real programming, I think of Mainframe computers, and the Walkman, and The Encyclopedia Brittanica. All better. All gone.

A priori knowledge or justification is independent of experience (for example “All bachelors are unmarried”). Galen Strawson has stated that an a priori argument is one in which “you can see that it is true just lying on your couch. You don’t have to get up off your couch and go outside and examine the way things are in the physical world. You don’t have to do any science.

[1] Wikipedia

[2] And JavaScript, which in fact ranks 9th, up one whole place since 2008 and below among other languages Python, PHP (see, the back end is real programming afterall), Objective-​​C and Visual Basic.

105 responses to “Not Real Programming”:

  1. TIOBE don’t include HTML and CSS: http://​www​.tiobe​.com/​i​n​d​e​x​.​p​h​p​/​c​o​n​t​e​n​t​/​p​a​p​e​r​i​n​f​o​/​t​p​c​i​/​t​p​c​i​_​d​e​f​i​n​i​t​i​o​n​.​htm

    Also their methodology doesn’t seem to account for abstractions, libraries and pre-​​/​cross-​​compilers (I could be wrong). A prime example would be the shift from searching for “javascript” to searching for “jquery”. A Google Trends comparison of some flavours of javascript show the shift — if you exclude “jquery” you aren’t measuring a massive level of interest in javascript.

    TIOBE do include much more than Google of course; the comparison just illustrates a general point about trying to track interest in “javascript”. The problem would apply to other languages as well; and I wouldn’t envy the task of trying to identify and maintain all the groupings.… but still, it’s a grain of salt to apply to the data.

    • By: Name
    • August 5th, 2013

    You don’t understand what programming is.
    The example with styling paragraph does not explain anything.
    Let me ask you a question: is configuration of various unix services (where you must type complicated things then color: red) programming or not?
    Or if we look at HTML, is writing book or article in Latex programming or just writing?

    Programming starts with one goal — solving a problem. And you use various algorithms to solve it.
    With assigning color to paragraph you are just styling that paragraph, not programming the way which he operates with you or the environment.
    In object oriented paradigm you are just setting parameter for color. You are not writing algorithm or anything that resembles it.

    • By: John
    • August 5th, 2013

    Hi Name,

    a priori — you aren’t defining programming, you are saying things you believe are and aren’t programming, based on unstated, a priori beliefs.

    Not to say these aren’t useful observations.

    But why is

    p.style.color = “red”

    programming, but

    p {color: red}

    not?

    Or are either? And why or why not?

    • By: John
    • August 5th, 2013

    BTW, just in my defence. Having attained a degree in computer science in the 1980s, and commercially developed software since the early 1990s, I’m not convinced I don’t know what programming is. Willing to be proven wrong, you live and learn, but my null hypothesis is I have some idea.

  2. While I definately think web developers who write CSS and HTML are highly skilled I would disagree that CSS or HTML is programming. If you’re not actually coding logic then it’s not programming. Even as a full stack developer, CSS vs JavaScript is a different part of the brain and feeling.

    • By: Len
    • August 5th, 2013

    John, great article. I have never considered HTML or CSS as programming but I’ve never seen that as a hierarchy of value as I assume ‘Name’ does. Now I don’t know, but that’s okay; when things change old terms no longer quite fit and there is confusion.

    • By: Tim Howland
    • August 5th, 2013

    Writing SQL is widely considered to be programming, and is probably the most successful declarative language. It’s just a matter of time for HTML and CSS (or it’s descendants in SASS and SCSS) to reach that same level.

    • By: Wolf
    • August 5th, 2013

    Interesting statement — as a webdesigner involved with a lot of prototyping I always tell people I write HTML/​CSS/​JS and then the “real” programmer takes over to rewrite my JS and plug in the backend language and/​or communicate with an API.

    But does writing declarative code somehow makes my work less “real”? How is a better way to program (abstract away!) not better? jQuery brought javascript to the masses, because for years javascript was unlearnable. There were no decent resources and nobody got it. Now I can learn it — and I’m not a programmer.

    The web as a platform is growing up with the advent of MVM frameworks using JS as a “real” language for software. There is backbone.js to give structure to your app. Whole apps are written with ember.js and angular.js. If you don’t believe JS is not a mature programming language these days you’re not looking around.

    Triggered by Brett Victor’s talk(s) I’ve been reading Doug Engelbart’s vision on computing. It’s interesting to think about the history of computing and programming and look back a bit. Somehow most of us are very stuck in old ways. Most programmers are masochistic about their for loops and the best way to “think like a compiler”. They love one liners that are so abstract you almost need to be a machine to interpret them. Fights are about coffeescript vs plain javascript and whether spaces need to be tabs.

    How is it that we have not abstracted most programming tasks to the level that makes it accessible to everyone? Why did we stop at Logo? We could make computers do so much more for us. With abstraction comes accessibility to the masses. And then comes innovation.

    • By: Wolf
    • August 5th, 2013

    Interesting statement — as a webdesigner involved with a lot of prototyping I always tell people I write HTML/​CSS/​JS and then the “real” programmer takes over to rewrite my JS and plug in the backend language and/​or communicate with an API.

    But does writing declarative code somehow makes my work less “real”? How is a better way to program (abstract away!) not better? jQuery brought javascript to the masses, because for years javascript was unlearnable. There were no decent resources and nobody got it. Now I can learn it — and I’m not a programmer.

    The web as a platform is growing up with the advent of MVM frameworks using JS as a “real” language for software. There is backbone.js to give structure to your app. Whole apps are written with ember.js and angular.js. If you don’t believe JS is not a mature programming language these days you’re not looking around.

    Triggered by Brett Victor’s talk(s) I’ve been reading Doug Engelbart’s vision on computing. It’s interesting to think about the history of computing and programming and look back a bit. Somehow most of us are very stuck in old ways. Most programmers are masochistic about their for loops and the best way to “think like a compiler”. They love one liners that are so abstract you almost need to be a machine to interpret them. Fights are about coffeescript vs plain javascript and whether spaces need to be tabs.

    How is it that we have not abstracted most programming tasks to the level that makes it accessible to everyone? Why did we stop at Logo? We could make computers do so much more for us. With abstraction comes accessibility to the masses. And then comes innovation.

    • By: Mark
    • August 5th, 2013

    Programming starts with one goal — solving a problem.

    Problem: I want the paragraphs to be red.
    Solution: p {color: red}
    No?

    You are not writing algorithm or anything that resembles it.

    But you are parametrically invoking an algorithm. Imagine I used a Javascript library with this function defined:

    function changeColor(selector, color) {
    var allParagraphs = document.querySelectorAll(selector)

    for (var i=0; i < allParagraphs.length; i++) {
    allParagraphs[i].style.color = color
    };

    and I wrote the following script:

    window.changeColor('p', 'red');

    Would that be programming by your measure? Why/​Why not? (What about writing a script that uses jQuery?)

    • By: Mark
    • August 5th, 2013

    Programming starts with one goal — solving a problem.

    Problem: I want the paragraphs to be red.
    Solution: p {color: red}
    No?

    You are not writing algorithm or anything that resembles it.

    But you are parametrically invoking an algorithm. Imagine I used a Javascript library with this function defined:

    function changeColor(selector, color) {
    var allParagraphs = document.querySelectorAll(selector)

    for (var i=0; i < allParagraphs.length; i++) {
    allParagraphs[i].style.color = color
    };

    and I wrote the following script:

    window.changeColor('p', 'red');

    Would that be programming by your measure? Why/​​Why not? (What about writing a script that uses jQuery?)

    • By: Name
    • August 5th, 2013

    Hi John, I will try to explain my opinion on programming, but (for now) without formally defining it.
    Let’s start with your question, I will quote your example:
    p.style.color = “red”
    p {color: red}

    OK, neither of that is (in my opinion, of course) programming.
    The first line is just variable assignment, without the rest of the code it means nothing, it is not complete code and hence is not programming.
    Second line is complete, that line on its own does something (assigning color red to all paragraphs in HTML page in CSS).

    But in the first post i wrote that programming is solving problem with some algorithm.
    But what CSS does is just applying properties to HTML elements. And HTML document is just document with formally defined elements.
    It’s not easy, and takes knowledge to do that (sometimes even greater than programming), but I can not see how it does solve some problem by means of an algorithm.

    JavaScript is something completely different. With HTML and CSS you have a static document (like with Latex, or something like Word, but formally defined). And with js code you are changing the behaviour of elements in that document. You are adding or deleting elements, changing their behaviour and so on.
    With js you are programming, and with HTML and CSS you are writing documents.

    And Tim mentioned SQL, SQL is a declarative programming language.
    But with SQL you are doing something, you solve problems. You get data from relational database which you can’t otherwise get.
    Ok, with SQL you don’t have algorithms, you have queries that logically take data from mathematically defined tables and their relations in database.
    But with CSS and HTML there is no getting data or getting insight into relations between data, or anything like that.

    With HTML and CSS you are just writing documents and applying styles to them.

    If you add JavaScript to documents written in HTML and CSS, you can make applications, but that is called programming because of JavaScript and manipulations that you are doing to otherwise static documents.

  3. The following is not a programming language:


    p{color: red;}
    </code

    Because you can’t do things like this:


    p { if(parent.height > 50 px) color:red;}

    • By: John
    • August 5th, 2013

    CodingNinja, to the extent that’s interesting (it’s really not because it’s not how you do CSS) we can do that like this

    some stuff

    /​* CSS */​
    div.parent {
    height: 51px
    }

    .parent p {
    color: red;
    }

    which pretty much solves the probem posed no?

    • By: john personna
    • August 5th, 2013

    Programming: Translating human desire into machine readable form.

    • By: Randy
    • August 6th, 2013

    It takes logic to create a CSS Selector with the proper specificity to achieve the desired goal. That meets my definition of programming.

  4. What is programming? I would argue that in its simplest sense, “programming” is using a machine to solve a problem for you for which the machine wasn’t explicitly constructed. Excel spreadsheets are “programming”; CSS is programming; email filters are programming! So is typesetting a book in LaTeX, or engraving a symphony in Lilypond, or blogging in HTML+CSS.

    And people might accept that… but then tack that juicy adjective, “real”, to the front, as a discriminator. But isn’t this nothing more than a way of drawing a line in the sand between “them” and “us” — *they* don’t do “real” programming, but we do. It’s ridiculous, really. Working at a different — even a more advanced — level than others doesn’t change the nature of the work. In other words, I can still play tennis, even though I’m not Roger Federer. And my lack of ability and technique doesn’t in any way detract from the “tennisness” of what I do.

    So yes — CSS and HTML are programming. And I say that as someone who spends most of his work time writing Java, JavaScript, and CSS for web applications.

    • By: Michael A. Smith
    • August 6th, 2013

    I just want to have good conversations with coders. So if I meet someone who has a deep understanding of ECMAScript nuances or someone else who has committed to memory the vagaries of a dozen versions of browsers, or someone who has arcane experience debugging embedded microcontrollers, they’re all programmers to me.

    But I have found that if I select a random person out of each of a set of HTML/​CSS coders, JavaScript coders, and embedded systems developers, the latter are far more likely to be actually interested in what they do for a living.

    Low barriers to entry are a good thing, but lead to generalizations like this.

    • By: Jono
    • August 6th, 2013

    Ha!

    I’m a senior dev, and I find it funny (offensive?) when people that only write HTML and CSS call themselves programmers. But that’s only because I give the term ‘programmers’ a certain intrinsic value, established by my perception of a person’s skill level (in programming).

    I do however believe that they are programming. They are writing a language to be interpreted by a browser, just as I write C# to be interpreted by a compiler, and then the OS, and so forth.

    Those who write in more complex languages (beyond HTML and CSS) such as JS, I would generally call them programmers, but that’s used loosely, as I work with intermediate devs that I would barely call programmers.

    But me not calling someone a programmer isn’t diminishing the fact that they are in fact programming, it’s that they don’t have the usual traits of a dev (such as the drive to learn other languages) and to a certain extent, I don’t feel their skill level in the realm of programming is that of an actual programmer.

    So, this is a little tangential, but to sum up:

    Programming? Yes. Programmers? No.

    :)

    • By: Jon
    • August 6th, 2013

    C’mon kids its all simple. Everything is code but when the outcome of running that code varies between executions then its the product of programming otherwise its the product of declaration

    • By: Jono
    • August 6th, 2013

    All of them at the time very legitimate criticisms. And as it turns out, completely wrong. Because they were a priori beliefs about what good hypertext systems were, based on a lot of theory, and very little real-​​​​world experience.”

    …reminds me of the quip about French engineers: “Ah oui, monsieur, it’s fine in practice, but will it work in theory?!”

    • By: Jono
    • August 6th, 2013

    ps: based on the information that HTML+CSS is Turing complete [https://​news​.ycombinator​.com/​i​t​e​m​?​i​d​=​2​3​0​0​836], I hereby award the coveted title of ‘real programmer’ to whoever implements the Sieve of Eratosthenes in .

    • By: Jono
    • August 6th, 2013

    ..them

    • By: David
    • August 6th, 2013


    /​​* CSS */​​
    div.parent {
    height: 51px
    }

    .parent p {
    color: red;
    }

    which pretty much solves the probem posed no?

    John, This is not the same as intented by CODENINJA, you declare that the parent must be given the height of 51( maybe due to its content it only needs 20 or it may require 140, but you forcefuly set it to 51) and you make it red.
    What CODENINJA wants to achive is: have p determine its own height depending on context and only if it turns out that the paragraph needs more then 50 pixels height, then and only then make it red in color.
    Which could be nice if you go for a flow layout and make you browser too narrow…

    Appart for some “on hover” declarations there isn’t any conditional formatting possible in CSS iirc.

    • By: Peter
    • August 6th, 2013

    Although excessively simple, HTML and CSS are still programming languages in their own right. In your paragraph colouring example, HTML isn’t not being a programming language, it’s simplifying the command so that you can do it quicker.

    In short. HTML qnd CSS are programming languages nonetheless. The are just really easy (I managed to pick them up in an hour) and more like a web BASIC.

    • By: Peter
    • August 6th, 2013

    Besides. HTML and CSS are markup languages with basic logic.

  5. While I see your point I do not consider HTML /​ CSS being “programming languages”. They are “descriptive” languages. My definition of a programming languages requires Turing completeness. If this property is not fulfilled (which isn’t for HTML alone) then it is not a programming language. CSS alone is also not Turing complete. JavaScript (again: alone) on the other hand is of course Turing complete.

    • By: Eric
    • August 6th, 2013

    I am NOT kicking on designers who build awesome things with HTML/​CSS, but it is NOT programming. JS is programming. HTML and CSS is not executed — it’s a collection of configuration files that determine what a page looks like, not how it functions. Programming describes function, not form. When adding function to a page, be it a click event using ajax to retrieve data from an outside source, or just checking the parent elements height after rendering and changing a color, you’re doing programming. When you statically tell a system that all p tags should be the color red you are not.

  6. Programming vs Scripting

    I’ve always taken the stance that if I’m writing in code that is considered Turing Complete, then I’m programming, else I’m scripting.

    But the way HTML and CSS has evolved, they can’t be far off being Turing complete (at least when combined).

    Besides, real programmers write in Assembler.

    • By: Paul
    • August 6th, 2013

    CSS and HTML arnt “programming” because they are not turing-​​complete systems. And not they are “declarative programming” either for the same reason. If something cannot be used to express arbitrary computation algorithms then it isnt a programming language. Simple test — can you use it to create a computation that in theory never terminates ? e.g. a non conditional loop (imperative) or a recursive expression without a guard (declarative) … no ? then sorry its not a programming language and when you code in it you are not programming.

  7. Paul gave a good proof that HTML and CSS are not programming. I would make it simpler.
    Programming is a process of constructing a computer program. Computer program is by most definitions “a sequence of instructions, written to perform a specified task with a computer”.
    JavaScript was pushed into same group for years because it was mostly used as an aid to add simplest interactivity to the website. It was a rare sight to see a JavaScript snippet which used a loop. Language itself is a proper functional programming language, but still majority of code written in it (apart from Node.JS) is an aid. Majority of web programmers don’t really know the language and produce memory guzzling monsters.

    • By: JB
    • August 6th, 2013

    If you are hung up defining “programming” as requiring a certain language, type of language, or anything beyond “using machine to solve problem” then you are already being left behind.

    Which suits me fine.

    • By: y6nH
    • August 6th, 2013

    An HTML page can be recursive using a meta redirect to itself, or an iframe containing itself, for example. You may say that’s not a real loop, but can you explain why not?

    As for CSS, I suppose animation-iteration-count: infinite; is cheating too.

    • By: Timothy
    • August 6th, 2013

    This is an article only a neckbeard could love. What’s the next article: the eternal disagreement on whether coding is “art?” Some programmers are so freaking pretentious.

    • By: Furmanek
    • August 6th, 2013

    IMHO — the issue hinges on the dividing line between ‘developer’ and ‘programmer”

    • By: Rob G
    • August 6th, 2013

    By your argument, writing a document in a Word Processor is programming (in the absence of Macros).

    HTML is a Markup Language (the clue is in the name) CSS is a styling language. They both involves skill to use, but to call them programming languages is really an attempt to redefine programming.

    JavaScript is definitely a programming language (albeit one with gaping flaws). Writing server-​​based code that generates HTML/​CSS etc. based on data is definitely programming. But HTML+CSS are really not designed for computation. They’re designed for rendering web pages.

    • By: Alistair
    • August 6th, 2013

    Moving the mouse cursor and clicking on the close button is programming a computer, since the computer is instructed to close the window. Typing text into word is an act of programming, since it is instructing the computer to put those letters there. These things are not general purpose programming since you cannot manipulate data like a general purpose programming language can.


    Creating HTML and CSS is programming, it is also coding, since the layout commands are typed. However, I would not classify it as general purpose programming.


    This is just my opinion, and is totally different than Wikipedia’s definition of programming. Arguing about the definitions of things seems like a waste of time anyway.

  8. It’s difficult to use CSS to make the nth paragraph red, where n is the least significant digit of the seconds component of the time the page was loaded, and if the number of paragraphs is less than n, then the penultimate paragraph will be green instead.

    • By: Joshua Smith
    • August 6th, 2013

    I suppose it shows my age, but for those of us old enough to remember actual computer science fundamentals (they don’t seem to teach this any more), this debate is long since over. Of course HTML is programming. Of course CSS is programming. And yes, those reducio ad absurdum arguments of Word Documents are programming, too. In the case of Word, you are programming the printer to produce dots on the page where you want them. It goes back to the argument of what is “data” and what is “code,” and the answer was long ago figured out: all code is data. The “program” you write in C is just data that is read by a compiler to write the actual program. But that program is just data that is read by microcode and firmware, to execute the actual program. And on, and on. So, from a theoretical standpoint, there is no debate to be had: Anything you write which controls the behavior of another system is a program. If you declare any of those to not be a program, you must declare them ALL to not be a program.

    On a practical level, it just so happens that HTML and CSS can actually do a lot of things that other commenters seem to think that it cannot. For example, did you know that you can put a radio box on a page, and have the state of those radio buttons control which styles are applied to other things on the page? No javascript required. How is that *not* programming? Input+logic+output — it’s all there.

    To people without a decent computer science education, I can see how declarative programming looks like something *different* than what they do. They might see SQL or Prolog or any other declarative system as “not programming.” But they are simply wrong. Vastly complex and sophisticated expert systems have been written in declarative languages. If that isn’t programming, what is it? If the people who wrote those are not programmers, what are they?

    • By: Brent Lamborn
    • August 7th, 2013

    The people who make HTML/​CSS actually DO something for the end user are programmers. If HTML and CSS creation is programming then so is creating a Microsoft Word document. Solve a real world problem with HTML and CSS and then I might think about calling it programming, but well, we all know that isn’t going to happen.

    I would agree that JS creation is programming. You can do math with JS. It makes decisions, etc.

    • By: bvw
    • August 7th, 2013

    Of course it is programming, and CSS into HTML is fiendishly hard programming too! Easy to do a few simple things, hard to do the more subtle. Gee, I’m only speaking as someone whose done every level of programming, from discrete logic circuits, op amps in feedback, binary (toggle switch coding), assemblers, APL. Lisp. Prologue, Pascal. PL/​1, COBOL, CICS, HASP, JCL, SNOBOL, SPITBOL, ALGOL , FORTRAN, C, C++, C#, BASIC, PERL, JAVA, Javascript, bash, c-​​shell, SQL, Magic, Jovial, Forth, Postscript, TI calculator, Japanese cash register crazy languages, Telephone exchange crazy languages, others … whatever!

    The most basic command of any programming language is indeed Declarative! DO SOMETHING!

    Code is specification, specification is code.

    The rest is the trained monkeys pushing keys and pulling levers. Don’t respond UNLESS you’ve written at least three bootloaders, and loaded them in and gotten them working. OTHERWISE YOU AIN’T NO PROGRAMMER.

    • By: Brent Lamborn
    • August 7th, 2013

    If I write C# code on my computer, it is going to execute the same way no matter what machine I run it on. HTML and CSS? You never know what you’re going to get. It looks different depending on the machine, browser, OS etc. Programming is an exact science. HTML and CSS are far from exact.

    • By: Brent Lamborn
    • August 7th, 2013

    People that make a webpage look a particular way are designers. People that make it function are programmers. It’s that simple. If the people that play with Excel asked a designer to create something for them that analyzes product pricing they’d be SOL. HTML and CSS are not programming. Sorry folks!

    • By: bvw
    • August 7th, 2013

    Hey Joshua Smith, good answer!

    .checked!

    • By: Ben
    • August 7th, 2013

    Whether or not anyone decides to call HTML and CSS “real programming” is irrelevant in my opinion. Call it whatever you want, but that doesn’t change the fact that there is a significant skill gap between a Software Engineer and a Web Designer. And for this very reason, a typical Web Designer’s market value will never be close to what a typical Software Engineer earns.

    • By: Tyson Benson
    • August 7th, 2013

    It’s no surprise there are so many opinions on the negative side of John’s argument. It sounds like next to none of them have written any significant amount of HTML CSS or JavaScript. I challenge anyone who said there’s no programming in HTML to read the HTML5 spec and tell me and John there’s no programming in it. Tell me you’re a real programmer and everything in the spec is a toy. And don’t say the JavaScript APIs in the spec aren’t “HTML” either. The HTML spec has added specifications and recommendations for features that solve real world business problems for web applications developers and their clients.

    Then take a look at something like AngularJS and tell me directives are not declarative programming. You need the HTML just as much as you need the JavaScript. I need a directive definition to describe the behavior and I need the HTML to invoke it. I’d be interested to hear Misko, Igor, or Vojta’s thoughts on whether they should be considered real programmers.

    As for CSS not having capacity for control flow or capacity for algorithms. Consider this.


    #main .btn.btn-small:hover ~ p::before {
    content: '!!!';
    }

    Despite being a horrible bit of CSS there is an wakeful lot of Boolean Logic in there. You could even say it is an algorithm for finding a leaf in a tree that matches a set of very specific conditions. Now who has written a recursive algorithm in their language of choice and wished for a syntax as expressive and terse as a CSS selector. Just because it doesn’t have your grandpa’s if-​​then-​​else doesn’t mean it isn’t a control structure or algorithm.

    The code above could also be expressed like the following pseudo-​​JavaScript:


    var content ='!!!';
    var allPs = document.querySelectorAll('p');
    foreach (var p of allPs) {
    if (p.previousSibling.classList.contains('btn') && p.previousSibling.classList.contains('btn-small')) {
    var parent = p.previousSibling.parent;
    var isMatch = false;
    while (parent) {
    isMatch = parent.id === 'main';
    if (isMatch) {
    break;
    }
    parent = parent.parent;
    }
    if (isMatch) {
    p.prependGeneratedContent(content);
    }
    }
    }

    But a real/​smart programmer writes their computer program in the most appropriate language. You wouldn’t use object oriented programming to model complex financial processes when a functional language is a better tool to solve the problem. CSS is a programming language with a specific goal. A CSS file is a set of conditions and statements that operate on an input (an HTML document) and produces an output. And the browser is your compiler (parser is more accurate). A nod to John’s argument is that Web technologies have been disruptive because of their widespread adoption due to their ease of use and the forgiving operating environment. You can write some bad HTML and CSS and still get the message across. But a web developer has to write code that runs in all browsers. That’s like asking a c# programmer to write a .net 4.5 app but make sure it’s functional on all operating systems. And that the program compiles in every previous version of the .net compiler. Show me a real programmer who can achieve the same cross platform coverage in a compiled language that the web platform enables.

    • By: bvw
    • August 7th, 2013

    Programming AND BEING A PROGRAMMER isn’t defined at all by what people earn. People earn an awful lot in jobs that are pretty stupid — ask any civil service union member.

    Both are are defined by the ability to make things happen. Still, great programmers are really defined BY THE ABILITY TO USE ALL CAPS.

    And nOt JuSt CaMel CaSe.

    • By: Jonny
    • August 7th, 2013

    Wikipedia calls HTML a “markup language,” as opposed to a “programming language.” As far as I see it, you can only program in a programming language.

    • By: Tyson Benson
    • August 7th, 2013

    @BEN I’m a software engineer and a web designer. And if you ask the people i work with a damn good one. Which wage do you think I earn? Not both. Tell clearleft or 37signals that their designers aren’t smart and therefore don’t need to be paid as well as their engineer buddies.

    • By: Patrick Baggett
    • August 7th, 2013

    Please write a “program” in HTML /​ CSS only that computes the first K prime numbers, where K is a number I can set.

    Yes, you could say HTML /​ CSS is “programming” in that you could translate HTML -> JavaScript /​ Real Languages ™, but it does –not– mean it is true that if you have some fragment in JavaScript /​ Real Languages ™ that can convert it to HTML /​ CSS. They don’t appear to be equivalent in what they can “compute”.

    So while both may be “programming” of sorts, we typically think of programming as…Turing complete, otherwise, well, why bother? At that rate, typing “ABC” in Microsoft Word is programming because it is equivalent to some Java /​ C code to display 3 letters as well. Perhaps using a circle brush in Photoshop is programming because it translates to plotting pixels?

    • By: bvw
    • August 7th, 2013

    Turing self-​​completed. It’s pike that a programming language has to be Turing complete. The rule isn’t Turing’s arrogant babble, and all the arrogant babblers that followed in his intellectual wake — it’s the ability to get things done.

    I suspect that Turing and Von Neumann held computer progress back a few generations. Focused too much on theory and forcing of arrogant ideals on the muck that is real progress. You can’t turn a big pretty crystal on a wheel until that crystal is crushed to dust and chemically digested into a clay. Then a good potter can do anything with it.

    • By: Jonny
    • August 7th, 2013

    Also, to me, JavaScript is pretty obviously a programming language. Not sure why people would argue that it isn’t…

    But if we are determined to consider HTML as a programming language, then we should at least be clear on the line between general purpose programming langauges, like C and JavaScript, and domain specific programming languages like HTML or SQL. But either way, the fact is that anyone who’s ever done extensive work with both languages like HTML and languages like C knows that the complexities of “real” programming are potentially limitless, whereas HTML/​CSS tends to be pretty simple in comparison. I think it’s the people who have worked in incredibly complicated codebases that see HTML/​CSS as “toys.” And I can understand why. The amount of thought and effort that it takes to create and maintain complicated programs almost makes it an insult to say that HTML/​CSS coders are “doing the same thing.”

    • By: bvw
    • August 7th, 2013

    I meant to say that Turing self-​​terminated. Thus he’s not Turing Complete. Instead I said that Turing self-​​completed, which is more ambiguous. But yes, specifications can be ambiguous and still resolve to working specification.

    • By: j
    • August 7th, 2013

    in the model somewhere
    self.fristPrimeNumbers=ko.observable(mylovelyjavascriptfunction());

    which part of this is programming?

    You have got me thinking on what a css like algorithm would look like. I find css to be black magic in the first place. magic is not programming :D

    • By: j
    • August 7th, 2013

    my first comment left out the html part.
    it was a tag with data-bind={text:firstPrimeNumbers}

    • By: Brian Balke
    • August 7th, 2013

    Programming is the process of configuring a processor (person, computer, machine) to transform resources. It is particularly interesting when facilities exist for chaining inputs and outputs together to create complex systems.

    So I lean towards the prejudice that CSS and HTML are means only for representing a design, while creating the application that displays the design is a programming problem.

    • By: bvw
    • August 7th, 2013

    Non-​​Turing Complete languages are most useful. See http://​stackoverflow​.com/​q​u​e​s​t​i​o​n​s​/​3​1​5​3​4​0​/​p​r​a​c​t​i​c​a​l​-​n​o​n​-​t​u​r​i​n​g​-​c​o​m​p​l​e​t​e​-​l​a​n​g​u​a​ges

    Bret Victor — The Future of Programming, 1973, predicting 40 years in the future, meaning today. Video.
    Drwaing on screen as programming at 7:30 or so.
    Unix and Regex at 12 minutes or so.
    Internet at 13 minutes.
    Video screens, mice, different views at 17 minute mark.
    http://​vimeo​.com/​7​1​2​7​8​954

    • By: Savage
    • August 7th, 2013

    I find this quite funny. and its an age old thing. “HTML is not ‘proper’ programming”. I think, as other have said before, that programming, is by definition, a series of instructions to perform a task (or some outcome). Would you program the clock on your VCR? (ok, nobody can actually do that.… but you get what I mean). Also, what about programming your kids? do you not set task lists, like “if you have done your homework then put on your pajamas then brush your teeth, then go to bed.” that by definition is programming. HTML/​CSS is a language. it translates a persons requirements into a visual page (outcome). Ifs and loops alone doth not a programming language make.
    I think all this stems from the ‘elite’ developers sense of insecurities. “You arent a ‘real’ programmer, unless you write XXX language”. I say, “Get over yourselves!” most HTML-​​only developers end up learning other languages (like javascript/​jquery, Java, PHP etc…) over time. how would your web application look if you didnt use html/​css?
    I like to think of programming languages as tools in a toolbox. maybe more common languages are like pliers, that you might use often and are versatile. others are used less commonly, but they all serve their purpose, and as any programmer worth their salt will know.…you more tools you have in your toolbox, the better service you can give your customers.…. and rant over :)

    • By: MDS
    • August 7th, 2013

    Interesting how Java is now number one looking at the TIOBE Site. Note this is not Java Script! For me, although not a professional programmer i got to say, firstly: Wow… allot of passion over this one with all these comments. and lastly: I suppose we got to ask ourselves, “What is Programming?”. I believe it is CODE that you write that is generally written in an IDE and compiled. Where you got to watch your memory leaks and pointers etc. How many threads are there going to be and what about it be Multicore/​processor aware.. Yes obviously it has to deliver the solution but that is part of the application or .exe or .jar that is compiled.. I really do not see arrays in HTML or CSS..???

    • By: MDS
    • August 7th, 2013

    I must comment @Savage, what a great metaphor, thank you.. :o)

    • By: Paul
    • August 7th, 2013

    Re comments being “negative”.

    Its not actually a negative thing to say that non-​​turing complete languages are not “programming”. Its just an issue of classification.

    Indeed the non completeness (from a computational point of view) is an advantage — it allows HTML & CSS to be statically analyzed to determine semantic validity before actual execution, something that is theoretically impossible with a complete language.

    • By: jsc42
    • August 7th, 2013

    I’ve been a programmer for over 40 years and still have not found an acceptable definition of what programming is. Lots of languages lack iteration /​ decisions (I recently read an article on how to write decision-​​less C). Just because a specific language does not perform a specific operation does not mean that it is not a language. FORTRAN 66 was not very good at list processing; LISP was excellent at it, but FORTRAN was still regarded as much a ‘real’ language as LISP.

    I recall the same debate about whether Lotus 1–2-3 macro coders were programmers or not. That later transmogrified into whether MS-​​Excel VB for Applications coders were programmers or not. The general concensus was that they weren’t, but that VB programmers were, even though VBA and VB shared a common code base. Later the anti Microsoft gestapo decided that VB coders were not programmers.

    My working definition of programming is: giving instructions to something /​ someone that the recipient can use to produce the desired result. A knitting pattern /​ recipe fits that criterion. Switching an on /​ off switch does too.

    In the final analysis, what difference does it make? We all want to get work done. If I write in 1s and 0s and you write in assembler then what does it matter whether you or I or both are labelled as programmers or not?

    • By: mtcoder
    • August 7th, 2013

    the issue isn’t whether or not it’s Programming. It’s wether or not someone that is does html/​css is a programmer.

    they are not programmers, and for most parts /​ on average aren’t able to learn the skills to become a programmer.

    I personally don’t consider it programming, on the aspects that it lacks core pieces of any language. There is no type cast, no base level definitions for values. There is no storage (even in a temp form) there is no computation that happens. There is no rendering, no compiling, no comparisons.

    It does zero function at all, has no impact on the page or how it’s rendered.

    The browser does all of that and it’s rendering specification.

    Html and CSS are just a format delimited data file, that is submitted to a program for processing. That program then takes the raw data presented to it and displays a graphic result.

    So by that thought logic, html/​css really are just data entry people that have been trained to how to enter data into a system to get the correct results.

    Cause of that I don’t call them programmers.

    • By: Brainless
    • August 7th, 2013

    I establish when someone is a programmer when i give him a task.
    If i ask someone very good in html/​css to make a program to use a database, select all invoices that are more than 30 days old and generate a report and show the results in a webpage then the html/​css guru will say ‘I will have no idea to do that.‘
    Ask a programmer to do the same and he will figure out the last part, showing it on a webpage within notime.
    If i ask the programmer to make a website that looks good i will get crap.

    • By: rubicante
    • August 7th, 2013

    The way I see it any code writing constitutes “programming”. If you go to a school and look at the “programming” courses you’ll see scripting, web development, application programming.

    But working on the network side of things I don’t consider myself a programming just because I write a bunch of Perl, Powershell, and vb scripts. I don’t consider myself a programmer just because I can create and modify HTML and CSS with ease. To me that’s scripting or markup language scripting.

    The difference to me is illustrated perfectly when I look at some book titles. You can get a “Perl” book, or you can get a “Perl Programming” book. This is where the line between “scripting” and “programming” gets fuzzy, because the scripts become so complex that it takes basic procedural programming skills to accomplish…but the idea remains: they added the word programming only when the scripting language begins to resemble a common COMPILED program’s complexity.

    Which brings me to what I consider a “real” “programming” language: a language that is compiled, not interpreted (or some hybrid). If I have to generalize what “programming” is vs what mere “scripting” is, I would say if you aren’t compiling the code, you aren’t programming.

    As for HTML/​CSS, to me that’s a “lighter” form of scripting…of course until you begin to integrate it with a “scripting” language like javascript. Or maybe you get into the more “script”-like functionality of HTML5. To generalize I typically refer to it as “markup scripting” when it’s HTML/​CSS.

    In the academic context it’s “web programming”, but that’s because they have a general requirement to put it under some generalized heading and programming is what it most *resembles*.

    One cannot necessarily be an expert with HTML and CSS and go apply for a “programming” or “programmer” position somewhere. You can’t just slide right in to Perl CGI, Python, ASP​.Net, etc., if you’ve never been beyond the HTML/​CSS world before. To me a “programmer” can easily slide into and quickly become a relative expert in HTML/​CSS in a short time without having to shift their way of thinking or learn new concepts…because to them it’s just a typical markup document with a style sheet.

    • By: Peter
    • August 7th, 2013

    HTML+CSS3 isTuring complete, and so is LaTeX.

    • By: Jon
    • August 7th, 2013

    I’ve never thought about HTML or CSS as programming… but I think you’ve made a good argument.

    You are giving the computer instructions about what to do.

    It’s a bit more abstract than I think some programmers would like to concede, but I like it.

    • By: Ben
    • August 7th, 2013

    @TYSON BENSON Just like you I do both too, so I can totally relate. And if you can competently do both then I hope you’re earning a good salary (meaning paid like a software engineer, plus some).

    I never said web designers are not smart, so please don’t put words in my mouth. I said there’s a significant skill gap between the TYPICAL web designer and the TYPICAL software engineer. Please note how I emphasized typical, because I realize there are occasionally highly skilled exceptions to this rule.

    But that being said, do you honestly think most skilled software engineers would be happy in their job being paid at the rate of a web designer?

    In my experience in my local market designers earn about 30-​​65k per year (those on the higher side are usually stronger programmers). Software engineers earn about 50-​​120k, so sure there’s some overlap. Do you find this to be different where you’re from?

    I don’t mean any offense to anyone, but I consider these market values to be reflective of supply and demand. The steeper learning curve of Software Engineering results in a smaller talent pool to choose from.

    • By: OldFart
    • August 7th, 2013

    Real programmers use patch cords!

    If you don’t understand the previous sentence, then you aren’t a programmer!

    Seriously, though, the differences in what some people think defines a programmer vs. a non-​​programmer boil down to the level of abstraction involved. Just because the activity involves a very high level of abstraction vs. a very low level doesn’t mean it’s not “real programming.”

    I have programmed using abstractions from assembly to CSS (no, I haven’t personally used patch cords machine language or even punch cards). I’ve learned all types of methods/​languages for instructing computing environments to create, manipulate, store, retrieve, and display data in service of solving a problem or performing a task. These include Lisp, Pascal, HyperCard, AppleScript, C shell scripts, PHP, Korn shell scripts, C, C++, PDP/​11 Assembly, electronic breadboards and NAND gates, JavaScript, HTML, etc., etc., ad nauseam.

    The debate is silly.

  9. Hmmm… once JavaScript gets into the mix, it becomes woolly. In no sense do HTML or CSS have anything whatsoever to do with programming; JavaScript is an entirely different concept and most certainly falls within the paradigm of programming — horrible though it may be.

    Of course, my hindbrain is saying, “Real programming is done in machine code, or in anything Dijkstra would’ve liked” but my forebrain is saying, “Then why have you written so much JavaScript, in that case?”

    But to say that HTML is programming is like saying that painting portraits and painting houses are the same thing, simply because it involves paint. Asinine at best.

    • By: bvw
    • August 7th, 2013

    It’s clear that too many youngsters in the field don’t appreciate the effort and intellect it takes to make a great web page. Of course it is programming, just as design engineering is engineering, and package engineering is engineering.

    Look ma I kin writes working Java, Perl, Javascript , etc sos I’s a real programmer!” And even get paid big bucks!

    There’s a lot of lousy programs written, but even if they are lousy they have to answer to harsher master (a machine, an operating system) than that a web designer has to answer to. So, yeah, coding to make a machine work to an exacting result is hard wok, and not everyone can suffer to do it. But that’s not genius — that’s a high form of being a clerk. That;s why fewer are programmers, it’s a harshly judged field.

    A web design has to look right enough. “Right Enough” doesn’t work with most code. (Of course this young generation hasn’t seen PL/​i where “right enough” did work. Sort of.)

    Yet a GREAT web page, the graphic layout, the flow, the look, the eye appeal. the functionality and all the CSS and HTML coordination it takes is way beyond the capability of most programmers.

    So we don’t see many great web pages. And the hiring dockets for great web designers are rare.

    • By: bvw
    • August 7th, 2013

    Working code is perfect specification. Specification that works is programming.

    CSS-​​HTML are code. SQL is code. Scripts are code. All are programming.

    If you want to show how smart you are take an IQ test. If you want to show how much money you make — why? Porn stars make a lot more. Does that make them geniuses? And don’t ever be a porn star either.

    It’s hard to write working specification. Ask any architect. And in a way they are programmers too.

    Writing good HTML-​​CSS is a lot harder than writing Java, fwtw.

    • By: Bah
    • August 7th, 2013

    Oooo I’ve been doing CSS since it came on the scene, so I have years of programming experience! How hard can this C# stuff be? I’ll pick it up and write a web service in no time because I can leverage all that knowledge I have about altering aesthetics declaratively! I’m EXACTLY LIKE A REAL PROGRAMMER!

    Or you know, NOT.

    Pssh.

    • By: Dilbert
    • August 7th, 2013

    HTML and CSS are markup and presentation languages, respectively. Period. That doesn’t make them programming languages. Javascript, on the other hand, is an actual programming language. And no, you cannot create a web application using plain HTML+CSS unless you do some actual programming on the server side, in the language/​framework of your choice (PHP, ASP, Django, Ruby, Node etc.).

    Also, your “programming” snippets are nonsense. Yes, you can use CSS to set a color of an element, with CSS 3 you can make it do all sorts of transitions, but ultimately that’s all you can do: define presentation behavior. With Javascript you can do much more than that, but you didn’t try to show an example where CSS will fail miserably.

    To summarize, without Javascript, HTML and CSS give you a nice looking webpage. And even Javascript won’t save you from programming actual domain and data layers on the server side.

    • By: harvyk
    • August 7th, 2013

    I am a “real” programmer (C#), and I am also a fake programmer (HTML /​ CSS).

    The question I have is how would
    P{color:red;}

    not be programming but

    System.IO.File.WriteAllText(@”C:\test.txt”, “Some text here”);

    is considered real programming?
    In both cases you are using either a library or other existing functions to get a computer to do something. I did not write the method here to take my data and write it to a file on the file system, I have outsourced that function to a library which will do the task for me, just like I have outsourced the function of turning p’s into red text to an external method.

    So by the definition which some “real” programmers are going by, I don’t think they should qualify until they start writing their code in machine code, and technically it should probably even be in binary. Anything else is simply building on top of other methods.

    • By: harvyk
    • August 7th, 2013

    I am a “real” programmer (C#), and I am also a fake programmer (HTML /​ CSS).

    The question I have is how would
    P{color:red;}

    not be programming but

    System.IO.File.WriteAllText(@”C:\test.txt”, “Some text here”);

    is considered real programming?
    In both cases you are using either a library or other existing functions to get a computer to do something. I did not write the method here to take my data and write it to a file on the file system, I have outsourced that function to a library which will do the task for me, just like I have outsourced the function of turning p’s into red text to an external method.

    So by the definition which some “real” programmers are going by, I don’t think they should qualify until they start writing their code in machine code, and technically it should probably even be in binary. Anything else is simply building on top of other methods.

    • By: Arved Sandstrom
    • August 7th, 2013

    I’ll define a program as a set of instructions for performing a task. I think that’s reasonable.

    Where I think HTML and CSS fall a little short is that much of the program is actually embodied in the browser. This is also true of certain other markup languages, like the related XSL FO, where a great deal of the instructions for the computer are generated by a processor.

    This is qualitatively different from what happens with interpreters and compilers, which perform translation and execution, but don’t augment the logic (not counting things like optimizations etc).

    In a way HTML and CSS fall into that grey area between data and logic. It’s not too much of a stretch to say, based on your argument, that a data file or a properties file is also a program, because it also imperatively or declaratively affects program execution. And if the *only* thing you can affect is that data file, not the executing program (think browser), then is it true programming to be modifying computer behaviour by just creating a data file?

    Having said all this, it’s elitist to think that modern HTML and CSS isn’t an advanced skill if thoroughly mastered. And anyone who thinks Javascript isn’t programming — by *my* definition — is silly, because there the browser is an interpreter.

    • By: TheresWaldo
    • August 7th, 2013

    If CSS is a programming language, then please show me a CSS program that prints all the prime numbers between 1 and 1000.

    Note that your imperative/​declarative dichotomy is a red herring. Prolog is a declarative programming language, and it’s perfectly capable of printing all the prime numbers between 1 and 1000.

    • By: shashank
    • August 7th, 2013

    Only assembly language is programming?

    • By: Jono
    • August 7th, 2013

    I am a “real” programmer (C#)”

    …lol. sigh.

    • By: Paul
    • August 7th, 2013

    You are giving the computer instructions about what to do.”

    In order for something to be a “program” it has to include at least the potential to in control of its own execution. Hence something that is only capable of expressing a linear sequence of instructions is not a programming language.

    • By: Don
    • August 7th, 2013

    Having done HTML, CSS, Javascript, C#, Java, SQL, and a few others over the years, I have different views on what programming “is” depending on the context.

    For me the question is: where does the work get done?
    Mark up languages are code that gets sent to a program for calculation (web browser) the program calculates pixel colors and locations for display on a screen. HTML and CSS are instruction sets executed by an application. Even js is an instruction set. But then isn’t this also true for C++? It can’t do anything until it gets processed by a compiler and executed on a processor.

    Programming is a hierarchy…
    Typing in Word is sending instructions to a word processor (the program), HTML is sending instructions to a browser (the program), C# is sending instructions to a compiler (the program), exe files send instructions to the processor… you only reach the end when binary instructions are processed by transistors and the results are returned.

    The term “programming” is relative to a specific point of view somewhere along the chain from “idea” to “results”. The HTML programmer’s work is viewed by the browser programmer as an instruction set. However the browser programmer’s work is viewed by the compiler programmer as an instruction set… and so on…

    If you’re writing a compiler, you view the C++ code as an instruction set, it’s the compiler that does the work. But the guy writing the C++ application thinks it’s his code doing the work of processing the js instruction set, and the js programmer sees his code is doing the work of processing the HTML instruction set.

    The value of a programmer is determined by supply and demand, there are a ton of people who can write good HTML code. But good HTML is in high demand. Nowadays, there are only a handful of good machine language programmers, but how often today do we actually need machine language written?

    Find a place in the grand scheme of things to call your home, and make yourself happy there. Quit worrying about who’s is bigger.

    • By: Desty
    • August 8th, 2013

    I can’t understand why some people argue that HTML and CSS are no programming languages.

    Programming language = Telling the computer what (and maybe how) to do.

    If you cannot calculate prime numbers in CSS then it doesn’t mean that it isn’t programming. It just means that CSS isn’t designed to fulfill this request. It just hasn’t the mightiness of Java or Ruby. It simply doesn’t need complex expressions or operators to reach its goal. But you still need to program it, else no Browser (=Computer) can know how to present stuff.

    • By: C. Grant Anderson
    • August 8th, 2013

    You are both right and wrong. Mostly wrong. Programming consists, in most peoples mind, of actions and logical flow. You are combining/​mixing up DEFINING static “program” definitions with program flow (which is essentially just a couple of constructs such as if/​else, while, etc). Modern programming such as it is mixes DEFINITIONS, ACTIONS & EVENTS, and FLOW (decisions) all together in an incredibly inane mishmash. Is it any wonder that programming is most often characterized as “difficult” and a “puzzle”? Through in lack of standardized messaging flows (how many ways are there to pass in parameters in the multitude of languages and environments today?), very inadequate data storage/​serialization (databases and code are two different animals/​species that barely talk to each other), and a lack of effective conceptual visualization and you have…the Tower of Babel of Programming that we have today.

    Why not quit being argumentative about one small aspect of the Babel Tower and instead work to fix the whole problem?

    That’s what I am doing and it leads completely out of the current rut and Babel of programming that we now find ourselves in. I really need to start writing up what I’ve developed to date but there are intellectual property implications that are delaying me (too many patent applications would need to be filed first before public discussion). I will review these IP implications and see about publishing something that I can post the link to back here so you all can see what I mean.

    Many good comments here by the way!

    — C. Grant Anderson

    • By: Mr. Anderson
    • August 8th, 2013

    Ok ok…and people using RAD tools with codeless interfaces, are they programmers too?

    • By: _1coder
    • August 8th, 2013

    Phahahaha the author of the article couldn’t even read what _​_​CodingNinja said. =))
    Nuff said about HTML typists wanting to be called programmers.

    Learn some JavaScript, people!
    Or, at least, Excel!
    But, painting Mona Lisa, typing a novel in Word, creating a webpage in HTML, writing the theory of relativity in LaTeX is NOT programming.

    PS:
    Programming the damned VCR or the microwave oven is not programming either.

    • By: _1coder
    • August 8th, 2013

    @Mr. Anderson: I take it you know lots of cases of actual serious apps created by using codeless tools only. I also take it you want to share this info with us. I also take it you are not talking about “Hello world” as being a serious app.

    • By: notme
    • August 8th, 2013

    I agree with whoever talks about HTML/​CSS being not T-​​complete: it can’t be programming in the “technical” sense. However, I think also it depends heavely on the definition of “programming”: if you think how a programmer does, to be “programming” you need a Turing complete language. But in common language, “programming” is a broader enough term to be usable with what markup languages can do. Me, being a half-​​programmer, I think HTML+CSS can’t be “computer programming” at all. While of course if you add JS, then of course you can do “computer programming”.

    • By: Erving
    • August 8th, 2013

    It should be “get.a.girlfriend()”

    You forgot the parentheses ()

    • By: John
    • August 9th, 2013

    Anyone who thinks that editing Html and CSS is programming is an idiot! Sorry, couldn’t resist, since that’s how you put it yourself (albeit bass-​​ackwards). These are definitely skills, and ones that, as a programmer, I abhor having to learn sometimes, but they are no more programming writing a word document is programming. They are templates to be interpreted by programs that make decisions about how to interpret them. Program’s make decisions. Toss JavaScript into the mix and you are programming… with JavaScript, while formatting documents with Html and CSS. When you can perform an if then else with Html and CSS alone then you are programming with Html and CSS. Are web developers programmers? Of course they are. And they use programming languages like JavaScript, Java, PHP and the like to do it.

    • By: bvw
    • August 9th, 2013

    Here’s a model of what “programming” is:

    Programming is the creation of a specification. Such that that specification can be input into a processing system, and the results are predictable, significant and useful.

    CSS fits that, HTML fits that. Java fits that. SQL fits that. C, C++, C#, etc. etc fit that.

    The processing system can be people. Or a machine. Or a theoretical construct like specifications of programming languages require to be “certified”, or an abstract theoretical construct like Turing’s dang cussed machine.

    • By: bvw
    • August 9th, 2013

    Also of all bad code IF’s are the worst. They nest and nest and act like kudzu. Try writing “if” free code. The lower the number of if’s the better the code.

    Use booleans to hold logical status, and reduce if’s.

    • By: Raph
    • August 9th, 2013

    People who belittle CSS here seem to have no real professional experience with it.

    You guys need to take a look at OOCSS, SMACSS, LESS etc.

    http://​fr​.slideshare​.net/​m​a​x​d​e​s​i​g​n​/​c​s​s​-​o​o​c​s​s​-​a​n​d​-​s​m​a​css

    The CSS of 3 years ago is dead.

    • By: Gabe
    • August 9th, 2013

    programing: present participle of pro·gram (Verb)
    Verb
    1. Provide (a computer or other machine) with coded instructions for the automatic performance of a particular task.
    2. Input (instructions for the automatic performance of a task) into a computer or other machine.

    According to the dictionary HTML and CSS are programming.

    To wit, I use a combination of the two to instruct client computers to render combinations of media for consumption by an end user. The instructions are certainly coded, and if I’ve coded them correctly, their execution/​interpretation automatically changes the state of the client system reflecting my desired output.

    Anyway good post! The arguments of your dissenters lack the explicit logic (and cogency) they posit HTML/​CSS are missing.

    • By: THB
    • August 10th, 2013

    Writing HTML can’t be programming. HTML is not a programming language. It’s a markup lanuage. If you use a programming lanuage to you are programming. If you use a markup lanuage you are marking up. If you are programming you are a programmer. If you are marking up you are a marker upper:)

    Actually, a computer program is a list of distinct instructions, arranged in very precise, logical order to cause the computer to perform a specific task. A single command is not a program, and simply using MS Word to type a letter is not writing a program. When you write HTML you are not telling the computer how to do something. You are simply telling the computer how you want the page to look, using a list of distinct, individual commands. Each single command performs an end task, like making a paragraph purple. There is certainly a program running in the background to make that happen, but you aren’t programming. If you write a program that displays data on a computer screen there must be some code within the program that defines the way the data is displayed on the screen. That part of the code is NOT programming. It is page layout, just like HTML.

    To simplify: if I type into a computer something like “Show me a list of all my employees along with their sales figures and the cost of sales for each sorted by region.”, I’m not writing a program. But if I write the step-​​by-​​step instructions that tell the computer exactly how to accomplish that task, then I’m programming. So, when you can write the HTML code that will accomplish a compex task like this example, you will be programming in HTML.

    • By: bvw
    • August 10th, 2013

    @RAPH, Very useful. Link. Thanks. Inline-block:Float;

    • By: bvw
    • August 10th, 2013

    @THB, unless you can grow silicon wafers, slice them, etch them, dope them, package them, extract the minerals from the ground, create the very elements themselves, and moreover create space time and physics — face it. You ain’t no programmer.

    • By: John
    • August 10th, 2013

    I’m guessing most folks here didn’t read the bit about declarative versus imperative programming?

    • By: Irldexter
    • August 13th, 2013

    @John was watching this video on the ‘future of programming’ and thought of your post… http://​vimeo​.com/​7​1​2​7​8​954 by @worrydream .. I think it speaks to your point..

    • By: Schmulik
    • August 13th, 2013

    The reason for the belief that HTML/​CSS/​JS is not programming, in my opinion, has to do with the history of Web Development: When you consider that most web sites are a collection of separate pages, each containing HTML, CSS and JS, generally not using any good coding practices, and mostly a bunch of Spaghetti, it becomes more understandable.

    Look at Gmail, Outlook Web Access, Facebook, and plenty of others. You can’t always read the code (minification), but you can probably appreciate the amount of code they contain, and assume that in order to keep their sanity some sort of proper code design is being used. Today, these types of sites are becoming the norm.

    Web Development is still a young field, and we are getting better at it, especially considering what we have to deal with (JavaScript for starters, but also Browsers).

    • By: Harald M.
    • August 13th, 2013

    Of course HTML and CSS are programming languages: They are formally defined systems whose semantics defines how a specified model is modified by all the languages’ elements. And for those who think that because a language is not a programming language because it is used by web designers (argghhh!) and not “real programmers,” I would think that these people have no idea how to use declarative programming languages for highly parallel systems — so does this defer all typical imperative sequential languages to “not real programming”, because it can be done by people who don’t even have a Ph.D. (like me)?
    On the other hand, who cares … those who advance programming know that all languages, new and old, need to get more and more declarative.

    • By: Dan Sutton
    • August 24th, 2013

    Also of all bad code IF’s are the worst. They nest and nest and act like kudzu. Try writing “if” free code. The lower the number of if’s the better the code.

    Use booleans to hold logical status, and reduce if’s.

    Really? And what tests the Booleans? Your grasp of programming is weak…

  10. […] — John Allsop, Not Real Programming […]

  11. […] I’ve been privileged to see the early days of the next wave of this long revolution, the birth of the popular internet (I’d in fact used Internet (originally, there was no ‘the’) in the 1980s at University) with the World Wide Web. Once again, Hypertext experts (myself sadly included) considered the Web underpowered, a bit of a toy. But it prevailed, for reasons I considered a few weeks back in this post. […]

  12. […] — para-​​meta-​​quoted from Not Real Programming […]

  13. As an web developer I’ve found this comment section extremely appauling, especially the uneducated and bigot comments from Ben toward people in my field. As someone that actively uses the LANGUAGES of HTML CSS and JavaScript to achieve the same results as C++, C#, and Java programs this is my view.

    1.) HTML is not a “programming language”, its a structural expression of data. Its the equivalent to structures in C++.

    2.) CSS is programming, it feels like programming to me, because it requires a high degree of logic to do. It’s also more so an art. It is a language that is limited to ‘if’, ‘else’, ‘while’, and ‘predefined var = controllable_​data”. It is limited. It needs to be. The idiotic thought Ben is getting at is that ‘the language can not do MATH’, but strangely has typing.

    3.) If you think that ‘hey its not programming because I can do the same thing in Word’, you are extremely mistaken. “A five year old could do it using Word!”, well yes and the resulting code will be just as bug ridden as if a 5 year old had done so. All web developers have to live with that idiotic misconception of what IDE they are using.

    Using only HTML a skilled dev can display variable content based on the browser to collect data, store it on a server create. Read that data that has been created, and then update it again, or even just delete it! I think they call this ‘CRUD’. A bit of forethought and look we have an MVC program using HTML and http request.

    Programming’, is what a ‘Programmer’ does by grammatical definition. Skill is another matter, and generically web developers start young, get into places young, have little training, and do not have hand holding. Our standards are none existentant compared to C# and our development area litterally drives people mad. But I can work in that area, no problem and create programs within constraints that are pretty illogical and develiver that to more people.

    So to some odd degree a web developer is worth more than a ASM\C\C++\C# developer, depends on the company, and I think the ASM\C\C++\C# developer developer really hates that. Especially considering the ‘Web Developer’, is younger and likely an idiot ‘script monkey’.

Your opinion:

XHTML: You're allowed to use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>