Sunday, March 24, 2013

HTML and Computer Science

It started innocently enough as Twitter conversations are want to do. Eric Williams, a school superintendent in Virginia, posted a tweet about computer science and linked to an article about teaching HTML as important for internet literacy.

image

As Internet conversations (in 140 characters or less especially) often do we went into a little bit of a different direction – that of discussing if HTML was or was not computer science. It may have been my fault with this Tweet. Please pretend not to notice the typo.

image

In any case Eric brought up the confusion about what is and is not computer science and that is an important question. Mike Zamansky, computer science educator from New York’s Stuyvesant high school, added his two bits with this Tweet linking to an article on why HTML is not a programming language.

image

And off we go in another tangent because while programming is an important part of computer science it isn’t the end all and be all of it either. People often do think that programming is computer science rather than a part of computer science. (I doubt Mike is in that category but it is important that HTML is not a programming language.)

So circling back to the beginning. Yes there is a lot of confusion and disagreement over what computer science is and is not. The Computer Science Curricula 2013
(CS2013) (Ironman v1.0 draft is now available here. ) for undergraduate computer science education runs some 376 pages describing what should go into a computer science curriculum. Though no one expects anyone to learn it all in just four years of university education.

HTML is not listed as a required topic anywhere. In fact it shows up only in an elective area as one of several web programming languages as HTML5 along with CSS, PHP and others. So clearly, according to the ACM/IEEE CS2013 (full disclosure – I’m on the task force), a university can have a solid computer science curriculum without teaching HTML.

That’s at the university level so what does that mean for high schools? Well that depends on what the purpose of your curriculum is. Web development and design is a critical skill and knowledge set today. If you are a career/technical school one could reasonably argue that you had better be preparing students for web design and programming. In my opinion a solid understanding of HTML, HTML 5, CSS and more is critical there.

If you are preparing students to further academic student in computer science HTML, CSS etc. is still useful but it is hardly as one person suggested in Twitter as important as arrays. I do think students should have some exposure to markup languages as a topic though. What markup language they use can vary from XML (for SQL and databases for example), XAML (for Windows 8 and Windows Phone development), HTML for the web or any of several other widely used markup languages. The concept is important and becoming more so all the time.

Does web development belong in the computer science department in a high school? Probably. Can you have a solid academic computer science program without HTML and web development? I would say yes. The field is huge and programming is a lot more important (today) than web development using HTML.

That being said a course that included more than just HTML and CSS with some real code behind the front end could be a powerful and unarguably “real computer science” course. Including HTML/web development as part of a larger computer science course (as the Exploring Computer Science curriculum does) can make the course more relevant and useful to more students. There is no question that web fluency includes HTML and that we need a lot more web fluency in our population.

And oh yes, real computer science should be required for all high school students. In fact starting in high school is really too late. We should start earlier.

7 comments:

TechKim said...

Alfred, thanks for this. I see HTML & CSS as an entry point into CS. The same way I see creating video games and animations with Scratch. They are the hooks that expose students to the great and wonderful power of computing - creating tech, not just using it. I think a huge problem is that we don't have those building blocks built into our education system at the elementary & secondary levels and we always somehow land on what CS means in post-secondary, which is a wide open landscape. I saw that first-hand at UVa's School of Engineering Open House which was showing off CS and engineering in all it's wild and crazy incarnations (electrical, civil, environmental, materials, aerospace, mechanical, chemical, information, systems, visualization, nano, etc.). I think we need more resources like the Exploring Computer Science curriculum that uses inquiry based instruction to help students link computer science to the real world.

Mike Zamansky said...

Alfred, you're right - programming is just a part of CS (albeit a pretty useful part) but 140 characters does have its limits.

The confusion of computer science and computer programming has always made me nuts -- I got so tired of hearing "You teach AP Java" (or C++ or Pascal, dating myself) that I started responding - "do you teach AP Biology or AP Microscope - AP Calculus or AP Calculator?"

On the HTML front, it can be useful in a CS class or sequence (particularly when programmatically generated or programmatically manipulated) but it can also be used in, let's say an English class as a method of displaying work (or even commenting on it with a tool such as Disqus).

There's something very empowering and cool when a student can put something up on the web and proclaim to his or her friends and family - "Look at this really cool thing I did!!!"

Unknown said...

I started as an English teacher who made her students learn HTML. I teach a little now to my CS II students as part of a web programming unit.

It can be a gateway to CS. You can add JavaScript, PHP, or even java easily. Plus, you can teach web concepts like clients and servers, protocols, databases, etc.

Unknown said...

I did something on this also a while back (http://supercomputerscience.blogspot.com/2012/07/html-is-not-programming-so-why-teach-it.html) For my CS Principles course it has been a great way to introduce abstraction - a lead in to "real" programming. For me teaching we stuff has been a great hook to get kids into the classes.

Debbie C said...

I would put HTML into the same category as conditional formulas in spreadsheets: it would be a shame for a serious CS student NOT to have encountered it along the way. That said, a serious CS student could pick it up easily. I like Laura Blankenship's use of the term "gateway"!

Mr. Irimina said...

I came across your blog and find this post interesting except the statement below.
'If you are preparing students to further academic student in computer science HTML, CSS etc. is still useful but it is hardly as one person suggested in Twitter as important as arrays.'

My gateway to programming has happened through web development. I started with HTML, CSS and moved on to programming languages such as JavaScript ( with JavaScript libraries like jQuery) and PhP. Can you learn JavaScript and PhP without understating HTML? Hmm...

I started as an English teacher and learned HTML as an entry point to web programming. I don't think there is a gateway more important than the other if they help you towards your goal...


Dino Dogan said...

You bring up an interesting point. I would like to pose a related question to you Alfred, as well as other commenters who seem to have first-hand experience across both sides of the table (Laura as a teacher, and Mr. Irimina as a student).

Let's assume I don't have a choice but to teach CS using CSS.

Perhaps the school board meant to order Java books but instead clicked on the wrong button and ended up with 300 books covering CSS, and I'm forced to make do with what I got while maintaining a standard of excellence the parents have grown to expect for their money.

How would I do that?

To provide slightly more direction in where I'm coming from, let's imagine I want to take the top 10 computer science fundamentals and use CSS to illustrate those fundamentals, the same way Java or C is used to illustrate the fundamentals.

Can it be done? And if yes (and I imagine it's yes), prove it with an example.