"mathematics is just another language"
Rory Cellan-Jones yesterday returned to the scene of the crime after his piece last week detailing the day he spent in Silicon Roundabout "learning computer programming". Rory had spent a day learning HTML – "a programming language", we were told – and returned humbled, as truly humbled as Uriah Heep, at the awesomeness of it …
Not just another language. The King of languages. With precise meanings, rigor and elegance! Clearly, iff everyone understood this, ignorance would, in general, vanish.
"King of languages", eh? Do let me know how "Fancy a brew?" translates into maths.
Now I'm a big maths enthusiast myself, and am even prone to a spot of programming. But I do think it would be best if we distinguished between human languages as used to communicate with each other, and those more abstract forms of maths and computer programming.
That's right, by understanding maths, you automatically understand:
Mathematics is just applied logic.
Just applied logic? Hmm. You'd best let the people who classify it know as they appear to have over 46 pages of unnecessary mathematical topics then.
"...by understanding maths....art, history,
I think what he/she meant was that mathematics provides to foundation of test and proof for all other sciences - which it does - not that you actually understand all of the other sciences.
Even some of your list would suffer without lots of fundamental mathematics (statistics, game theory, logic, differential equations, probability, etc), specifically politics, philosophy, and geography - and even the arty subjects have some maths relationships (think golden ratios and symmetry in design/art for example).
I agree with you though - understanding mathematics does not mean you understand the subject that may rely on it (which mainly tend to be science-related subjects)
"Mathematics is just applied logic."
That's like saying programming is just binary (or even programming is just HTML coding!)
I get it - you did the maths version of this 'programming' course and now you think you're a mathematician 'cos you know what True and False are. :-) [joke]
Analytical skills might improve, definitely :)
Hmmm. Art and Design benefit from an understanding of mathematics - as does Music (the two are intertwined so closely - is that why you didn't include it in your list?). If you look below the surface, you'll find maths in just about every single specialty, one way or another.
Here's a youtube vid of Rory unboxing his new raspberry PI.
Maybe he'll do some HTML on it...
Well what do you expect, from the man who sat on the One Show sofa a year or two ago and advised "cleaning cookies" to "speed up boot time".
Yes. Well good luck with that one Rory.
So I'll add one. When I taught (and examined) A-Level and GCSE ICT between 1998 and 2004, the focus was on "problem solving using fourth generation languages and commercially available software" - in other words, what most people would encounter. It wasn't about just using MS Office (since that was what we had), it was about customising it to do tasks more efficiently, hide the interface and make custom forms, manipulating data etc. The skills I was teaching were those of software engineering (Albeit in a rather cut down form): define a problem, analyse the data flow required, utilise available tools to solve the problems, test, debug, rinse and repeat. Agreed, we weren't using Java, or Pascal, or BASIC, or C++ - but we were scripting, and customising, and introducing children (most of whom at the time did not own a computer, and certainly did not have one with a built-in programming language) to the fundamentals of programming theory. However, those who DID want to follow the path of programming could, through the little-known Computer Science GCSE and A-Level, which is much closer to what I took as a Computer Studies O-Level back in '86, a time when we all we had was access to machines which more or less communicated solely through the BASIC interpreter. Maybe the 'Pi will recapture some of that, and create a new class of Python literate children. But even in the heyday of the BBC Micro, the Speccy and the C-64, the vast majority of children knew enough to turn it on, type "LOAD PACMAN.COM" (or "*chain elite.exe"), press play on the tape deck, and then play the game. Very few of my friends outside the Comp Studies O-Level class had the remotest interest in programming.
Now, I freely admit I'm a bit out of touch with the British education system (I left to teach in International schools in 2004), but I suspect that the people clamouring for "moar [sic] programming" actually don't know what is involved in an ICT exam, and what is available as an alternative.
really because when i did IT GCSE in 99 it was "how to use office" and nothing else. guess it varied per school but our IT gcse was pretty much a CLAIT/ECDL type affair
You are talking about ICT. This is essentially a small part of what used to be called "Office Skills". It is the successor to typing and shorthand, without the still useful touch-typing. ICT does not have much to do with Computing Science or Computer Engineering (hardware or software). Yes you can use a computer workstation as a common tool for ICT and Computer Engineering, just as pencil and paper can be used for both Algebra and Poetry.
This is going to sound appallingly arrogant but fuck it...
The thing that educated me most about computers wasn't the clapped out BBC Micro I had in middle school, because it was just one program we used on there to teach us how to form sentences, a task that could have been more easily done with a blackboard and a book.
It wasn't in secondary school either, where we used Acorns for 5 years and only had a brief glance at Windows 95 in our final year and what "IT" information was in the course was confused and pointless.
No, my real education started at the age of 5 or 6 with my Amstrad CPC and learning to type out lines of code in BASIC. Fiddling with bits of information here and there to see what would happen (hint: it usually ended in the phrase "syntax error").
The next phase of my education came with my dad's 286DX PC and a floppy disk that offered to teach me the mysteries of MS-DOS. It started as boring distraction but the more I messed around with file systems the moer I began to enjoy myself and the knowledge I was gaining.
Phase 3 still haunts my nightmares even now and it's all thanks to Desert Strike. A highly frustrating game in itself but even getting to the final mission of the final campaign and dying to a lack of fuel was nothing compared to getting to actually run. Yes, from this monumental pain in the arse I learned how to edit config.sys and autoexec.bat files - the arcane mysteries of EMM386.exe, LOADHIGH and HIMEM, all trying to squeeze the right mix of memory in order to run it.
Then came Windows 95 and my inevitable surrender to a non-command line OS. Again, most of what I learned came from trying to run games - things such as drivers, installing new hardware and basic PC housekeeping. My dad had finally relented at this point at got me my own PC at last. The blistering speed with which it ran when it had a whopping 16Mb RAM.
I guess the point of this horribly self indulgent wall of text is that most of the stuff I learned about computers didn't come from school tuition, which in my teenage arrogance I saw as being vastly below me, but instead came from crashes, debugging and a burning desire to play games.
I still have fond memories of almost failing my computing A-level. I got bored with the database they'd asked us to work on and instead spent my time building a quite passable game of pontoon with an AI that knew when to bet and when to hold.
I did GCSE IT in 2005. It was learning to use Microsoft Access and taking screenshots. Nothing else.
The problem, to be fair, is working out how to go from there to teaching programming. There's not a lot you can do with a bit of knowledge of programming. So maybe teaching HTML is a good place to start: it's more likely that people will want to build their own websites and learn a bit more than build their own apps and etc.
My advice? Take the kids away from the computers for more of it. Teach ICT like any other subject with a blackboard and pen. Ditch any requirement for schools to use software that isn't open source. Make it based on OpenOffice/LibreOffice, cloud services or (ideally) linux.
As someone currently doing an A Level IT course I'll give you the unit titles, then you can see how bad it is!
1: Digital Business Communications (Word/Powerpoint/Email)
2: Collaborative Working (creating a magazine pullout feature in publisher in a group using e-mail)
3: Problem Solving (This is a research task. Think of an issue, carry out a survey, present your results)
4: Creating a digital showcase (Flash with some very basic animation and action script (buttons, timeline control)
9: Work experience in IT
20: Web Authoring (using a WYSIWYG editor).
Full breakdown - http://ocr.org.uk/download/kd/ocr_10557_kd_nationals_centre.pdf
Other units available include producing a business plan, music technology and art for computer games.
And they wonder why people are bored stupid and uninterested in IT?
It is less about what you have got, more what you do with it!
Access is a great way to get into Visual Basic because you can't just 'record macros' like you can in Excel etc. and when you are asked (or 'tasked') to do more than just enter data you get to learn the power of programming (making it do what you want instead of what it tells you you you can have)
I don't know about OpenOffice etc. but that would just be the same as MS if you don't go beyond what it gives you. Getting a Linux installation to work can be educational, but is also not really programming - and is getting easier and easier now anyway (isn't that what the various distro's claim now one-click installs?). Even website building is point and click now as content management systems have taken away the need to write your own php code.
As noted by a few people above, programming comes from a need to do something which you can't do currently. It can (and should) start with problem formulation and then go through research into solutions and then experimenting with code writing. It is a set of skills which is much more than just knowing the programming language and - just like the mathematics from which computing is derived - teaches a great deal of life-skills, not least grammar! (Oops, time to turn off the rant mode.)
The issue seems to me that we have replaced attempts to teach problem solving in schools with simply imparting information and training people to use existing tools. That is great for turning out people who can do todays mass-market jobs, but just seems so limiting in the long run.
>There's not a lot you can do with a bit of knowledge of programming.
You can teach people how computers work, that they follow programs, how mistakes happen, that anything on a computer isn't automatically correct.
There's not a lot you can do in geography with a bit of knowledge of ox-bow lakes either.
I don't know that I'd agree that you can't do much with a little knowledge of programming - especially if you've been taught the basics of Office software (and/or others).
If you've played with Word, Excel, PowerPoint, Access, OutLook, etc., you must know about the IDE that comes with all of those applications (and their open source counterparts) and how you can program any of them to do all sorts of things.
One of my contracts (as a Technical Writer in a regulated environment in the US) involved writing VB code such that any MS Word document based on my templates was capable of checking itself on being opened to make sure it contained certain minimally-required features and flagging any identified problems as well as creating a user-specific log file of those issues.
I devised the algorithms necessary to undertake a variety of tasks (some of them with fuzzy logic) and coded, tested, debugged, implemented and documented everything. Great fun to do and immensely satisfying.
I would argue that HTML markup is exactly the sort of thing that makes a good start for teaching programming. It's a gentle introduction, which has immediate results, this is very important in teaching. One the one hand pupils who aren't particularly interested in computing and will probably do nothing other than this initial taster, get a basic idea of how stuff works under the hood, albeit not very deep under the hood. On the other hand, pupils who are going to take things further get a good base of logical thinking and how to deconstruct a problem into manageable chunks that can be handled by the system, which is an essential skill for teaching.
"I would argue that HTML markup is exactly the sort of thing that makes a good start for teaching programming."
I have to disagree with you there.
HTML is nothing like programming, so doesn't even come close to giving an introduction. The best it does is say "on a computer, if your type some odd-looking words and symbols it changes what happens".
This is where BASIC is actually very good as an introduction. Type PRINT "Hello World" and it does so. Very immediate results, but it is actually programming. I don't like BASIC myself, but IMHO it is the best available tool to teach an introduction to programming (although I think that's all it should be used for, with a view to moving on very soon afterwards).
It's a markup language, not a programming language. It doesn't even have the most basic of logical constructs. It can't qualify as a programming language when all it is is a wrapper for metadata.
Anybody that says writing HTML from scratch isn't coding is just splitting hairs. Just because HTML is easy doesn't make it not code. You have to teach HTML before you can teach PHP or ASP anyway.
Where is the IF in HTML, and DO etc. etc.
That is why HTML is not a programming language.
The fun of learning BASIC on the BBC was doing things like asking what the time is and then getting a 'Good morning' or 'Good afternoon' when you put in different values. Things then got more involved (ie interesting to the right people) when doing things like working out an orbit etc.
Obviously you don't worry about the more complicated things until you have got the keen audience seperated from those that don't want to know.
Except that most HTML lessons consist of being how to use an out-of-date Macromedia Dreamweaver (yes, not Adobe). 90% of the time you're not even told to switch to code-view, just draw a table, insert some flash buttons from a template and there we go, I programmed a website and get full marks in my exam! I can assure you that *noone* finds these lessons interesting (even though who are already interested in programming).
However it did get more exciting and we were tasked to create a holiday booking system in Excel, we even got to name our holiday company! Travel First - the First name in holiday bookings!
BASIC, by modern standards, is a terrible introduction to programming, Pascal or MODULA-2 are much better.
How many computers available to school kids have any programming language? All computers, by comparison, have a notepad (or similar) and a browser.
It's about gaining initial interest in the subject. For example, in chemistry you blow something up, it's not really chemistry (or at least the way it's done isn't) but it's exciting and gains initial interest.
I've been thinking about running an extra-curricular/lubchtime course for interested students here and, having thought about it, I've come to think that HTML is the perfect starting point.
By using web design you get two wins in my book - fast visual results to keep the kids hooked, and exposure to more than just programming (networking, databases, file systems, etc). Because in this discussion about "IT is not Word and Excel" people seem to forget that "IT is more than just programming".
I'm inclined to agree with AC, save to say that HTML should not be considered as a necessary introduction to programming. It's certainly a way to get someone interested if they would otherwise not consider real programming, or is scared of it.
In particular AC's words "a good base of logical thinking and how to deconstruct a problem into manageable chunks that can be handled by the system, which is an essential skill for teaching" are valid. Or don't modern techniques require programmers to be logical thinkers and have an ability to deconstruct problems?
HTML sure isn't a programming language, but it isn't as far removed as some people think.
I think html is a good place to start. Yes, it's a markup language, and is entirely passive. However, if this is then followed up by moving onto client- and server-side scripts and programs and showing how they can be used to manipulate html code then that's fine by me.
Any program, whether it's producing a web page, or creating an ASIC, is producing a set of outputs based on a set of inputs. With html, you're producing a set of instructions to be parsed by an interpreter, but the same's true with Perl, C or Assembly language. The difference with html is you don't get any inputs, so the output is the same each time, hence the need for dynamically generated html.
You could teach kids how to program a CPU in a boolean algebra but I think html is probably a good place to start.
Bollocks. I find 'proper' coding far less traumatic than getting html to play nice. One is based on logic, and the other is based on tricking whatever browser you're using into displaying what you want. Admittedly, over time I guess I'd get a feel for it and spend less time pissing in the wind, but I'm a developer, not a designer.
It could be argued that starting with text markup is analgous to a program in that the engine processes the instructions to generate a web page.
More the level of a Jacquard loom than a ZX81 but a _possible_ starting place to hook a child's imagination.
I must admit that I haven't understood what is wanted by "compulsory coding". Are we after teaching children the principles of programming (flow chart, design, loops etc) or actually making them code a program in a particular language?
it's not splitting hairs. HTML is script. it has absolutely no (real) conditional constructs, and is merely a medium for presentation... To this extent it isn't "coding" in any realistic sense, unless you misunderstand the meaning of of the word... http://en.wikipedia.org/wiki/Computer_programming
HTML isn't necessarily easy. providing markup that is semantic, well formed, light, and works across multiple formats and multiple standards is (in my own experience) fairly bloody difficult most days. You're right though. This doesn't make it "Not code"... What makes it "Not Code" is the fact that it isn't "Code". it's a presentational medium that gets whisked across the internet as the result of a request to some server software operating on a remote machine somewhere transmitted via TCP/IP across multiple routers worldwide, which is then rendered in all it's glory on a clients monitor via a web browser...
I learnt to "code" before PHP or ASP existed, and learned without HTML. I suspect many others in the industry did too.
"BASIC, by modern standards, is a terrible introduction to programming, Pascal or MODULA-2 are much better."
No , its a terrible programming language to use for real programming, but for an *introduction* its perfect. The syntax is simple and concepts are easy to grasp and thats what novices need. They really don't need to worry about syntax quirks or objects or procedures when they can't even understand if-then or loops. Sure, after 6 months of Basic move them onto something more serious, but for people who know nothing about coding its pretty much perfect.
In my day as a teacher, we would try to inspire our pupils (shows my age) by getting them to do something that was intruiging and challenging. The best IT toy I used was BigTrack (tm) which was an excellent introduction to the programming language Logo.
Of course you could argue that was just 'playing' - and so it was, just like my generation learnt most of it's programming skills.
There are 2 distinct points in my life that I remember thinking how much I liked tinkering with computers.
1 - a teacher in primary saw I was eyeing up the bbc micro in the corner of the room and set me a task - write a program (BASIC) that asks you what flag you want, and then displays that colour flag for you. Then he left me to it, occasionally coming over to see how I was going on, praise me on progress, help me on bits I was stuck on. I was about 9.
2 - playing with LOGO and something similar to the the big track thing (looked more like a turtle though) - this was again primary school.
Secondary school it all went down hill. I got taught that computers worked by having little men sat inside the keyboard, and they run up and down the wire shouting at people inside the monitor to change picture.
I also got banned in secondary school from using the bbc micros and (when they eventually got them) the early windows PCs. Why was I banned you [didn't] ask? For changing a couple of strings in menu system on the BBCs, and for changing screensaver text on a windows machine. Apparently it took them weeks to figure out how to change them back (honestly), they didn't trust me to change them because they didn't understand what I was talking about when I described how to do it.
Seems like with the right teacher you can get inspired and learn alot - with the wrong ones they will punish you and hold you back. I eventually regained my love of tinkering in college, and work as a dev now. :)
Hmm, no with a tiny little hint of yes...
HTML does not teach programming - not even close. In some ways it actually hinders it; some of the worst HTML I've ever seen has been written by programmers - it's a totally different mindset.
HTML is purely presentational, what it teaches is the importance of semantics, do you mean strong* or do you mean b (or span style="font-weight: bold;"); are you trying to give semantic importance to the text or just make it bold because it looks better?
It teaches you that browsers will screw you over and different rendering engines will cause you headaches - making something that looks exactly the same on every platform can be an act of will and sheer bloody-mindedness.
Programming on the other hand is 95% problem solving and 5% writing the code; it's basically algebra with conditional statements (ok, functions and objects as well) - it has nothing really to do with semantics or making stuff pretty, it's about getting stuff working in, hopefully, an efficient and maintainable manner. The fundamentals of programming, the mindset if you like, can be transferred, almost in its entirety, to any programming language, programming is largely a way of thinking.
HTML, however, is a basically a way of doing, it's pretty much non-transferable (well, apart from the lessons it teaches in semantics); hell it might look a bit like XML but drop an XSL file in front of someone who's spent "an afternoon programming in HTML" and they'll be totally lost. HTML does not help you think like a programmer.
The one teeny, tiny, "yes" I'd add as a proviso would be, using myself as an example... I've always been a "tinkerer" with computers, from making maps in WorldCraft for Quake to reverse engineering the galaxy in X3 (less complicated than it sounds, the galaxy is written in XML apparently)... but somewhere long the way, doing my degree course many years ago when the web was new and shiny, I discovered websites...
Some random homepage that someone had cobbled together made me realise, "hey, I really want to know how to do that!" - and that it was something I could teach myself to do (with the aid of a few websites).
So I taught myself HTML - which was nice but a little static....
So I learnt about SQL and databases and PHP to make maintenance easier - which is nice enough but PHP is pretty much purely web-based and I wanted to do more...
So I started on Java and C++ and C# and now the loose-typing, lack of proper method over-riding and slightly iffy OOP implementations in PHP annoy me slightly... and I'm still learning...
Where I go from here is anyone's guess - I'm an in-house web-dev, I still enjoy working on the LAMP stack - and it was HTML that made me realise that this is what I wanted to do (it's the immediacy with HTML, it's very quick to get something on screen - it's one of the things I like about C# as well).
*[whilst it's nice having HTML enabled in posts - it's a bit inconvenient, when trying to get tags to output, that < and > don't get converted]
Newly arrived BBC micro sits in corner of classroom. Cassette player doesn't have auto stop. Teacher insists that play button remains pressed in order for computer to function despite the protestations of the cassette players motor.
I pressed stop and received a monumental bollocking about how I'd have to pay £500 for breaking the schools computer.
Of course I was right and nothing broke. But it just proved how moronic teachers were back then. Even today the IT teachers at many schools are just people who know how to work Word.
I had just finished eating my lubch when I read this comment.
I think the course really should be renamed to something like:
"Making a machine bend (slightly) to your will"
not necessarily programming, but it's a logical step towards realising that you CAN make a machine do your bidding if you have the requisite skill, time and energy.
Never used HTML/CSS on an AVR though. Never needed to.
Drunken bum owing to the solder flux cleaning fluid abuse.
>>> print "Hello World"
>>> def hello():
... print "Hello World 2"
Hello World 2
Easy as Basic, no gotos, intro to classes & objects if you want to go that far. Its only drawback, if you want to see it as such, is the indentation as block structure, but since most programmers use indentation to clarify structure anyway, this is hardly a killer.
"Where is the IF in HTML, and DO etc. etc."
Here - I've found it, and not only that, there are two IFs here - the one you can see, and the one the non-compliant browser doesn't...
<!--[if !IE]><!--> This ain't IE! <!--<![endif]-->
If anyone bothers to vote on this post, then judging by the rest of this board, it'll likelier than not be a dogmatic down-vote. But the point at the top of the 'Err' thread is not that to learn HTML is to learn to code - but that it's a good place to start.
"print" is no longer a statement but a function! For didactic purposes you should use the Python 3 syntax:
print("hello world") # and there's your simple beauty gone
Tsk, tsk. Programmers nowadays! ;-)
IF and DO are not requisites of programming; they are requisites of procedural programming. There are many non-procedural programming languages out there (SQL being the most obvious.)
This highlights the biggest issue: nobody agrees on what programming is. This is partly because programming has evolved so many layers that it's no longer what it was. Programming was developing a set of instructions to tell the hardware of a system what to do. Then we made assemblers and it became creating a document that the assembler would convert into a set of instructions to tell the hardware what to do. Then we assembled compilers, and programming became writing a set of documents that the compiler would compile together and send to the assembler, which would create a set of instructions to tell the hardware what to do.
What I believe programming should be defined as is akin to translation: the skills, knowledge, and tools needed to translate a set of requirements to a system-readable set of documents (be they instructions and/or data), and to be able to verify and test said documents for accuracy, consistency and performance.
Would this make a class on HTML a programming class? Absolutely not. One absolute requirement for a programming class under this definition would be identifying the correct language to use for the requirements given.
I believe programming (and computer science in general) should start without computers at all, and teach logic and planning skills for at least the first year. That's what real programming is. The language used is a red herring.
HTML+CSS by themselves aren't "programming" any more than putting printer control codes into a wordprocessor document in the pre-WYSIWYG days was.
You don't even have to write properly-formed HTML and CSS! It might well be unique in that the "garbage in garbage out" rule doesn't always apply. Feed crap into an interpreter or compiler (or a printer or a Jaquard loom) and you *will* get errors, or crap, out the other end. Feed crap into a web browser and you may very well get acceptable output (where "acceptable" means it looks the way you expected it to in your web browser).
And that's the hardest part about being a real programmer - constantly learning, keeping up with times and evolving.
Late 1980s-early 1990s my computer science teachers were:
A geography teacher who...I'm not sure why she was chosen. Maybe she had a computer at home and space in her teaching schedule.
A maths teacher who, I guess, was chosen because "maths and programming are similar, right"?
A languages teacher who had done some computer programming in university. When punch cards and batch jobs were the way things were done. Made for some entertaining and enlightening stories though and helped set me up for year 1 of university where...they still were running programs overnight and leaving your printed output in a slot with your name on it. In 1994 (my university IT education turned out to be almost useless in the real world, but that's a different rant).
Equipment was a small lab with networked BBC micros (about one for every two students, which we had access to for one or two periods a week) and later a dedicated classroom with almost one RM Nimbus 286 machine per student which were almost, but not quite, compatible with actual PCs running DOS.
Don't get me wrong, they did the best job they could, really. Back then they knew this IT thing was important somehow, but they were still feeling their way around how to teach it. I did more than one case study on how a bank ATM works, for example. The focus was on learning how computers work (by that I mean actual computing fundamentals, as opposed to "press the power button to turn it on") and how to program them. But I didn't really learn anything new that I could carry into my career as a developer that I hadn't already learned 5 years earlier by hacking around in BASIC on a Spectrum. Maybe half the students wanted to learn but entered the classroom knowing more than they would ever be taught and the other half had opted for CS thinking that they'd get to play games for several hours a week!
What was kind of neat was that we had complete free reign in what we did for our A-level project. They hadn't nationalized the curriculum to some lowest common denominator yet. Out of our crop of projects we had several games (mine even used the mouse and bitmapped graphics, which...er, well, we were never taught, but I did convince the teachers to let me look at the full documentation for RM Pascal and figured it out from there) and some which were more traditional data-munching tasks.
Also, while I was busy in university learning how to wait for my printouts, a couple of friends were in a "university degree equivalent" course at the local technical college being taught that you had to turn the wordprocessor on with your thumb because of static electricity, and that typing too fast would cause the computer to get "stuck" (you know, like a mechanical typewriter).