Exam Board Deletes C and PHP From CompSci A-Levels
VitaminB52 writes "A-level computer science students will no longer be taught C, C#, or PHP from next year following a decision to withdraw the languages by the largest UK exam board. Schools teaching the Assessment and Qualifications Alliance's (AQA) COMP1 syllabus have been asked to use one of its other approved languages — Java, Pascal/Delphi, Python 2.6, Python 3.1, Visual Basic 6, and VB.Net 2008. Pascal/Delphi is 'highly recommended' by the exam board because it is stable and was designed to teach programming and problem-solving."
But, so what?
If you understand programming, picking up any given language is straightforward.
If you don't understand programming, it doesn't really matter what languages you know.
It's official. Most of you are morons.
What a shame. C is an important foundation.
what is nailchipper?
What's the big deal? One programming language is like the other, at least within the same paradigm. If you can program in Pascal, you can program in C. If you can't you learned a syntax and not "how to program". Basically, when I was a computer science student, we got one language taught for the concepts and the rest was just "swim or sink". That's the way it should be. I really have a problem with programmers who have problems switching from their preferred-language to another because it's unfamiliar. Well, no, it's not... It's the damned same thing with diverging syntax.
Basically, the premise of the Exam Board is quite right: the goal of programming is to have problem solving skills. Whatever language conveys that is completely uninteresting to me.
Oh, and just for the record: programming is just a small part of the computer science curriculum... or at least it should be.
Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
This warms my heart, the first language I learned was TurboPascal just so I could program Door Games for my BBS. I still run a BBS I still haven't written any door games.
I'm doing this course currently (finishing it in a few months) and was "taught" Pascal and Delphi. There were numerous problems with Borland (the company who produce the Delphi IDE) removing the free download links for an older version of the software, leaving pupils without access and unable to complete coursework during school holidays, etc.
I personally did my coursework in Python (with GTK) but I really can't see how some of my classmates would be able to get their head around box-packing or object oriented programming, for that matter - they seem to find the concept of functions and passing variables challenging enough.
I understand why they've removed C really, though it saddens me and I'm glad that they've removed C#. PHP surprises me though perhaps the kids find writing an interface in HTML too challenging?
to teach them hypothetical skills in watered down, obscure platforms so they can curse you for the rest of their lives when they start working in the industry.
i was taught fortran and pascal. i dont remember shit, and i dont think i gained much from them.
programming can be taught with any language. problem solving can be taught with any language. it is better to teach these using a language they WILL use when they actually get into industry, than with stuff they may rarely come up against.
uk was going down the drain for some years. i see this as another absurd jacobinism.
Read radical news here
We've been using Delphi to develop our project (see sig) for years and we find it very intuitive and friendly to design user-interface based Win32 applications. I personally feel that Pascal's syntax is much clearer than most languages and yet flexible and powerful enough to develop major projects, making it ideal for teaching client-side programming to newcomers.
The only sad thing about Delphi (which I hope will be rectified) is: .NET for WinCE devices, but those are dying out due to iPhone/BB/Android and even WinMo7 which is turning into an even more simplified iPhoneish design).
1. No 64bit compiler.
2. No mobile platform support (except maybe
Zoom Player Lead Dev.
Why are they accepting Visual Basic 6, but not C++, Ruby, or even LISP?
This is why we can't really use sixth-form qualifications in this area as an indicator of a candidate's ability to program - we have to assume they know nothing, and look to Maths & Science qualifications for indication of their skills.
I learnt Pascal and VB6 back when I was at sixth form. Then I went to uni, was taught C and thought to myself "why didn't they teach us this!? I know NOTHING".
I did Pascal for A-level may moons ago. Pascal teaches you to expect suckage, and you will not be disappointed in your later programming career.
When I took the introductory course to computer programming in college, we actually were exposed to other programming paradigms than the standard industry ones. It included Prolog and SNOBOL, for example. Even though I would agree that neither of those languages has any practical application in industry today, I still think that it was an important part of my education to see these kinds of extremes (no, that doesn't mean I think that the brainfuck language should be taught to high school students --- anyway, because of its name, that would be impossible in the US).
I hope these courses are all about teaching the way to construct programming logic, to think about algorithms, to apply data structures correctly because that can be done in any language (depending on the paradigm that they choose to teach of-course, and it looks they are going with the most common, imperative one, of-course the choice of languages also shows that they are not going into declarative stuff.)
Any one of these language can be used to teach normal structured programming with normal process flows, data structures. Object oriented stuff should not be taught until the students have basic understanding of the principles of programming.
But it is too bad they are not including at least some Assembly and C. Actually they should do an overview of different languages and explain that there are different ways to program, they should explain the differences between paradigms, approaches, languages, they should explain computer organization as in how a machine sees the code, how does the code interact with the memory, processor, peripherals. I think it is important at least to know OF these things, if not actually completely knowing how to use them.
I think before you teach anyone actual programming logic, structures, you explain how a machine executes the commands, so computer organization (state machines, memory, processors) + Assembly, even if only for a few hours this should be done first.
You can't handle the truth.
"The board "highly recommended" switching to Pascal/Delphi because it is stable and was designed to teach programming and problem solving. Teachers planning to use Java are warned that many universities are considering dropping it from their first year computer science programmes, "as has happened in the US"."
Okay, seriously - in London, where I work, I don't think any of these guys would be able to get a job once they had graduated. Job listings I have looked at demand the following skills:
Java (with Spring, Hibernate, Multi-threading, low latency, Swing, Junit)
C#
C/C++ (financial organizations still turn to C for high volume number crunching)
Unix / Linux (are they going to drop this next???)
SQL (Oracle, Sybase, SQL Server)
Subversion, Clearcase, CVS
None of this stuff can be picked up quickly, so the earlier you start, the better. And, no offense, but I rarely - if ever - see a job listing requesting Pascal/Delphi.
Is this a case of dumbing down or are students just becoming lazy(-er)..?
THE HONOUR OF THE KNIGHTS - CC Licensed Sci-Fi Novel
Around here they teach functional programming in the introductory course at many schools. Functional programming makes you think a bit differently from the start, and since most students with prior programming experience don't have experience with functional programming, everybody gets to learn something new.
They should have dropped VB and PHP, maybe also drop delphi and introduce Ruby.
I'm not particularly fond of Java, but atleast hey have ONE alternative that is widely used in in the industry.
VB6 and delphi are dying languages as far as employment opportunities are concerned and Python isn't nearly as popular as PHP. I think VB.NET could get you a low-paying entry-level job though.
The common denominator of the allowed languages is that they do not allow low-level programming. C may not be the most common language in the industry, but it gives you a great foundation in understanding what actually happens inside all those object, libraries and frameworks.
This move is endumbening students ;)
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
Everyone's first book for computer science should be The Purple Book. If you can't handle this book, go do something easier. You'll be happier in the log run.
http://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs
I've used Borland C++ Builder for many years, which shares the whole RAD thing (VCL) with Delphi.
One thing I LOVE about this is that it is very easy to quickly put together a working GUI.
One thing I HATE about this is that is it very convoluted and dirty to put together a good GUI.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
Delphi suffers the curse of being so 'beautifully engineered' that its fans assumed that it would carry all before it and can't understand why it didn't. Remember Betamax? Remember the DeLorean? Jo Public doesn't care about the nth percentile of engineering perfection, Jo cares about getting the job done. I've been a Delphi lead for over 10 years and I can't get a job so I'm learning C# instead. Personally I think C# is inferior in some respects but it wins out because it is designed to solve the real-life everyday problem of getting code out of the door.
How can you understand programming if you don't understand how it works under the hood?
Teaching assembly (which CPU?) wouldn't be practical but C is the next best thing. I agree with you that any programmer should be able to pick up a new language without too much effort, but unless you know how the internal structures of the programs work you will never be able to write good code, at best your code will be painfully slow, at worst it will be outright dangerous.
If only one language is taught, then it should be C for anyone who expects to be a professional programmer, knowing C they can easily pick up any other procedural language. A programmer who doesn't know C is like a doctor who doesn't know anatomy.
Gee, what do these have in common: "Java, Pascal/Delphi, Python 2.6, Python 3.1, Visual Basic 6, and VB.Net 2008".
That's right, managed code. Or a comparable facsimile thereof.
That's right, boys and girls. Forget about wasting time learning such useless concepts as proper memory management, or such useless fundamental concepts as the heap, the stack, etc... Just slap together a bunch of code, and it'll run just fine. No sweat. Dumb things down, so that everyone can now be a soooper hacker!
If I was living in UK right now, I'll be celebrating right now. It's clear as day this will result in the schools will now start churning out masses of wide-eyed ignoramuses who will go forth and start churning out volumes of code which they won't really understand themselves. Perpetual job security for me, AFAIK.
No array bounding, no memory protection, casts all over the place without any errors, subtleties like '==' vs '='. C is a language for people who already know how to program (well), not those who're learning.
I like C a lot, however I'd hate to have learned to program in it. Fortunately I'd learned and had a strong foundation in Pascal first.
The Internet's nature is peer to peer - 20050301_cs_profs.pdf
Now that C is gone, I guess they think it will 'free' more for other languages. Too bad when they learn it doesn't 'return' anything!
Thanks! I'll be here all night.
If you really want a language "designed to teach programming and problem-solving", try Scheme or Haskell. Those are truly stable languages that will help students learn sound computer science principles, basic data structures, and programming principles.
Once that's in place, learning a "real-world" programming language is straightforward. No programmer should master only a single language.
And, yeah - C wouldn't be my choice for a first programming language either.
Anyone who is surprised at this has no idea how poor the standard of the average A-Level candidate is in the UK. Some - the better ones - can just about cope with the "paint the screen form and attach events" model in VB 6. Not the VB.Net Object version, that's just way beyond the ability of most ; Java likewise - beyond "Hello World". Most teachers can't do program either beyond the trivial level, so their pupils don't have much chance of learning it.
People no longer learning C programming?
More work for me! :)
For those who don't know, these are 16-18 year olds typically and they would normally be using these exams as a stepping stone to University. They wouldn't be computer science specialists at this point.
At this level, I agree with the decision. You're looking for aptitude and interest at this stage, not machine specifics. Pascal is a good language for expressing and solving problems and was enough to get my attention when I was doing A Levels twenty years back - in Turbo Pascal.
Cheers,
Ian
For those outside the UK, that's the two optional years for 16-18 year olds at the end of secondary school. They're not churning out qualified programmers, they're churning out people who have a basic idea of what programming is and might want to pursue it at university. When I did the AQA Computing A-Level we were taught QBASIC and VBA. It didn't stunt my career too much.
if you can't write c, you are not a programmer.
Wealth is the gift that keeps on giving.
If you're teaching algorithms and problem solving, then I guess that a 'teaching language' is ok.
If you're teaching professional programmers, you should be teaching languages that are actually used: C, Java, C++, etc. Most computer programs don't involve a lot of deep thinking or sophisticated algorithms. According to the bureau of labor statistics the skill that is most valued is the ability to integrate systems.
The ironic thing is that whenever I have seen sophisticated algorithms in action the program involved was written in C. People worry about the efficiency of device drivers and kernel stuff but almost never worry about the efficiency of their Python code.
The problem solving taught using Pascal has little relevance to the kind of problem where you have to spend a lot of time tweaking an algorithm for more efficiency.
The open university are going to move there beginning programming course from javascript to scratch(http://en.wikipedia.org/wiki/Scratch_%28programming_language%29)
Choose your allies carefully, it is highly unlikely you will be held accountable for the actions of your enemies
I think the common interpretation of Computer Science is extremely misleading. It's not about programming stuff, that's more of an IT application of computers. Instead, it's about understanding the science behind computers, for example to understand the mathematical principals of computing, operational effeciency and move it on as a tool for scientific endevour.
To this end, the choice of programming language really doesn't matter - it's a tool that the subject uses either as a proof of concept or a learning point. C is fairly good for this as it exposes a lot of the inner workings of a computer, whilst being high enough level to be more or less consistent across platforms at a university level. However, that doesn't mean that knocking up a quick proof of concept in python or perl is less valid - or even visual basic if it helps understand the science behind the problem.
In other words, I see no real worry here. If they stopped putting mathematics in a CS course or made it in to a programming degree I'd be concerned. If it's about using various tools for the job then I'm all for it. Hell, I wrote a pascal compiler in pascal as part of my degree - it wasn't about the programming language, it was about understanding the fundamentals of compiler design and implementation.
Now there's one hoopy frood who really knows where his towel is!
I think that the article describes which language that students learn during their first year of study. They can learn C afterwards.
GW BASIC: This got me the basics of how to program. I was simply thrilled to see computer obeying my BASIC instructions over and over again, thus creating some beautiful and meaningful commands
C: I hated moving to this language. The curly braces looked ugly and #includes made no sense at all. The only reason I continued was because I learned that this is one useful language to program Computer Games
C++: C++ sucked. Big time. Long Time. Now I am in love with this language.
Bottom line: Have a simple language to get used to the programming world. Then you can move to any other language (based on your personal preference or market driven)
Hmm, anything that can compile to .NET's MSIL should support 64-bit. I suspect the problem isn't a lack of a 64-bit compiler, that its instead a lack of a 64-bit standard library.
Maybe someone more in tune with the issue can chime in.
"His name was James Damore."
We've been using Delphi to develop our project [but] .NET for WinCE devices, but those are dying out due to iPhone/BB/Android and even WinMo7 which is turning into an even more simplified iPhoneish design).
1. No 64bit compiler.
2. No mobile platform support (except maybe
According to Wikipedia, Free Pascal seems to have 64 support on Linux, OSX, and Windows.
As for mobile platforms, Free Pascal appears to be able to target the iPhone, but Jobs squashed any chance for fun there, eh? WinCE is supported (no idea on WinMo), and with Linux support you should be able to target Maemo/Meego devices with very little extra effort.
Android, WebOS, and Symbian? No idea there... but probably too much pain to be worth it to write something.
I guess a bigger question would be why one would want to target the mobile platforms with Pascal/Delphi at all. I did a little Pascal programming back in the day and didn't really see too much to love when compared to other environments.
But in the end, I guess it doesn't really matter, especially if general-purpose Linux-based OSes like Meego actually take off on mobile phones. Then all you have to do is target a Linux-based stack, add a couple of different front-ends for your application (one mouse/keyboard based, one touch-based), and you're off to the races.
coding is life
Firstly, the A level is in Computer Science, not Computer Programming. The students aren't there to learn how to program for later commercial use, they are there to learn how computers work and are used. Programming is just one part of the course, and one of a number of areas of assessment.
Secondly, a lot of people - many of whom, I assume, are experienced programmers - seem to be focussing specifically on which would be the best language to learn for themselves, rather than putting themselves in the position of a 16-year-old who had never programmed before. On my course[1], we were taught Turbo Pascal[2]; however, I remember Logo also being studied. Not because we would ever use Logo in anything other than an academic environment, but because most of the students were programming novices and needed to learn concepts, not code.
Show these people C, they would have run a mile: for complete novices, the syntax can seem very intimidating. Show them Pascal, they might actually realise that programming isn't as scary as they thought and consider learning C at a later date.
[1] Between 1991 and 1993.
[2] How well it was taught, I don't know; those of us who already understood programming were allowed to skip those lessons.
When I was in University, we learned Sather-K for object oriented programming, then Gofer for functional programming, then Smalltalk for a practical robotics class. I had done an internship before which required COBOL and RPG/400. When I then started my first real job (still at University), C knowledge was a requirement. It took me about week to learn C. I also already knew so many idioms from the other languages that I could bring experience to the table that other people (who had learned C far earlier than me, but only C) just didn't have. The experience with the other languages has been an incredible help over the years. I think knowledge of a specific language is much less important than knowledge of expressions and idioms.
Learning as many languages as you can is a very good idea to help you grow as a programmer. University can help here by requiring languages that aren't usable in the "real world".
LOL! Some wonderful comments here. Your concern for the employers hiring programmers of below average intelligence on the basis of their school qualifications alone is admirable, but there are few organisations in the UK doing that.
Or maybe people are not noticing that this is a school qualification in a country where there is a stated aim of 50% of young people going on to university? So, OK, it is more like 40% in practice. But do employers really employ school-leavers as programmers expecting them to be ready for work without further training? Not unless the kids have substantial extra experience.
Also, this is about a school-level academic qualification with the assessment set nationally -- but there are other similarly national qualifications for the age group that are designed to be vocational, more closely adapted to the needs of work. This one is not what a schoolkid would take if they wanted to go straight into a job.
This is a triumph. C will never die, but the more they keep grubby young hands away, the more C programmers will be worth.
GP is almost right. A-Level is lower, or lesser, than the first level of study at university. It is the culminating level for high school students. Unless other posters here expect high school graduates (at approx. age 18) to enter the university graduate market (without those 3-4 years of university learning), then none of them have grasped this.
I accept I know nothing. Insulting my ignorance is wasted on me.
And the only programming that was covered was exclusively in QBasic, my coursework was all completed using Microsoft Access. This course is not a gateway into software development rather a more involved version of the ICT A-Level course which is also run by the exam board.
n.b. I'm now working as a software developer using C# so maybe I'm just full of it..
Part of being able to write good software is actually understanding how computers think. All these things like objects, and types and so on are all constructs for making things easier for people. They are how we think, not how the processor thinks. The problem is, if all you ever learn on is languages that hold your hand, you end up not being as good a programmer. I see types like that all the time come out of the university where I work, as Java is about the only thing they like to teach. They have little to no understanding of how a computer actually works and cannot deal with lower level languages.
Now I certainly wouldn't say C should be the only language you learn on, but it should be one of them. Learn how a computer works, and learn the power, and problems, that can be had from getting closer to the bare metal. Also then learn about higher level languages, and the advantages and disadvantages they provide. Basically, try and give students the understanding of how programming languages differ, and allow them to be able to appreciate that there are tradeoffs using different languages.
Having a program that gets too stuck in high level languages risks producing the myopic zealot type programmers that can only write in one language and write very bad code because they are used to having the language clean up after them.
Also, universities should endeavor to teach on what companies want. While a university degree is a theoretical degree, not practical training, that doesn't mean they have the right to be arrogant and refuse to try and offer theoretical training on real world tools. At the engineering department I work for, we try to do that. The software we use in classes is the software you'd use to do that sort of thing in the industry, when practical. That way you learn not only the electronics theory being taught, but you get practical experience with a tool.
Same shit for programming. Teach students on languages that companies want. Guess what? C++ (and even C) and C# and such are those languages. Pascal is not. I don't care if some old fossil of a professor loves Pascal. Suck it up, learn a new language. Your job is to keep up on shit. Any educator that themselves refuses to continually learn should be fired.
Teach students on a good cross section of languages that are currently useful. Show them the advantages and disadvantages of different kinds of languages and programming, give them a good theoretical foundation in how this all works. While you do that, do it using tools that they will actually be asked to use when they go and get a job.
And no one likes those pointy things.
To put this simple, WTF. I'm 16 and about to finish High School after which I will go to a university and start a Computer Science degree. Now this is in Australia but nevertheless I am not a derp, I already know a little bit of C, pretty much fluent in PHP and can get by in Python. Dropping a C based course off of a Computer Science course is absolutely ridiculous. C based languages teach you how a computer works, ASCII, binary, hex, bit arithmetic, memory management. It may be true that these languages aren't used much for simple problem solving nowadays as interpreted languages seem to have hit off. However for powerful, fast and efficient programs you can't go past the power of C and C++. I would much rather learn C# over Java as well, and me being a Linux fag that's quite a statement. From experience I can certainly agree that C isn't the easiest language to learn however personally I find Java harder to program with. Also learning a C-based language gives you the power of ingenuity whereas if you learn Java and then find a job that wants you to build a new type of system you'll say, "Well where's my library?" Even if you don't learn a C based language until your 2nd or 3rd year they are still a part of computing and are very useful. In short, don't cut C based languages from a comp. sci course.
C will be the COBOL of the future. Companies will always have those legacy C applications, just like they still have COBOL ones. And there will be a lack of good, experienced C programmers. In the future, I might consider coming out of retirement . . . if enough cash was offered. The PolygamousRanchDad, an RF antenna expert, did this.
As to the mantra, "A good programmer can learn any language," I think that it is easier to "Move Up" with languages, than "Move Down." By that I mean, it is easier to go from C to Java, than from Java to C.
You get spoiled and lazy with languages that do all the thinking for you. When you move to a language where the memory management isn't all done for you, the austerity is tough and rough. It's like moving from a luxury mansion to a trailer park.
Schroedinger's Brexit: The UK is both in and out of the EU at the same time!
I don't understand why C# is off the list and Java is on. They are essentially the same in terms of ease/understanding and fundamentals.
This seems more like a political thing than an educational one.
I fully understand why C might be considered undesirable as a teaching language but their rationale for what languages to recommend makes little sense. Pascal/Delphi are recommended because they were "stable and was designed to teach programming and problem solving". Pascal may have been designed to teach programming but it's also been hacked six ways from sunday because it's 40 years old. There are dozens of variants of the language some with object oriented extensions (object pascal), some without. Which one are they referring to? How is pascal (in one of its guises) better for teaching than Python for example?
As for Delphi, it is a niche commercial product, one which has grown increasingly irrelevant with each passing year. What Delphi are they even talking about? The version that compiles native code or Delphi.NET? If the latter, how is it more "stable" than any other .NET platform? Why would they recommend a commercial programming language which runs on one operating system and costs a lot of money?
Other odd things. What is VB6 doing there? I can't think of any reason that VB "classic" should be used to teach anything. Not now, not 10 years ago. I'll give VB.NET a pass since it's basically a dialect of .NET so not especially better or worse than any other standard .NET language and you could write .NET with Mono. But why ditch C# and not VB.NET (or Delphi.NET)?
It just seems so horribly inconsistent. People setting the syllabus should be recommending, a modern, clean, free, cross-platform language. That means something like Python, Ruby, or Java.
I taught a class on Delphi to a group of mostly non-programmers. It was very successful. Consider...
First project:
1) Open Delphi
2) Press Run
You've just written, compiled, linked and executed your first Delphi program. We'll get into the details later.
Second Project:
1) Open Delphi := Slider1.position * 10;
2) Drop a button on the default form
3) Drop a slider on the default form
4) Double-click the OnChange event on the slider
5) Type Button1.Left
6) Run
Now I can show visually show you what this does and talk about components, objects, properties, events, syntax, variables, assignment statements, build cycles, etc. - all in ways that you can see.
Plus, unlike Java or C#, I can show you procedural (non-OO) console app or service programming. And we can go all the way down to assembly language if you want.
For Linux see Free Pascal and Lazarus.
What they're talking about is A-level exams. These are taken by high-school graduates before college.
It's not that Comp Sci students will graduate without having learned those languages, it's that candidates for Comp Sci higher education will not be expected to know them.
As unfair as it seems to some old hands in IT, nowadays the industry rarelly hires people without college degrees for Programmer positions, so this does not mean we'll be swamped by a wave of "semi-literate" programmers.
That's just illogical, if you allow on base .NET language you should allow both. The syntax is the biggest difference and arguably given C# closeness to Java and C++ it would the more logical choice for a school taught language.
----- I refuse to have an argument with an unarmed person
[1] Note: Delphi is not a language. Delphi is an IDE, Object Pascal is the language that it supports.
I am TheRaven on Soylent News
I know the University of South Africa was interested in FreePascal because it's a lovingly updated clone of TurboPascal -- and free. One of their profs wrote a cyber-cafe program in Lazarus to try it out compared to the Delphi IDE. And, as others have noted, this is for the first year curriculum.
I learned in Pascal. Talk about an annoying miserable language. The whole idea of abstraction is to make programming easier than just coding in assembly. Not sure Pascal met that goal. Yes, I learned some on it. Mainly patience and perservance. I know there are some fans out there, or it'd probably be gone already. I expect that they are primarily academics who never had to earn a living actually coding useful things in it.
C if the starting of all modern programming languages, beyond that it's the language you learn to help you learn others such as C++, VB etc...
Python is a decent language but you may as well teach the C Python API, that way the students get to learn C and python and OO concepts.
should this reflect the availability of people who can evaluate the exam? In that case Pascal should have been removed and C should have been kept.
Or should it reflect the useful languages for CS students? in that case C# and C should have been kept.
Or should it be the languages the students are proficient in (to give them a good start)? then PHP should have been kept, and Pascal definitely removed.
I'm sorry that they dropped PHP. PHP can be great for learning OO programming. It quickly offers excellent real-world examples of programming: a typical example would be making a blog application. In that example, students can learn how to think in terms of objects (a blog entry is an object, each comment is an object, etc.), they can even construct a simple ORM (which will essentially teach them to use stuff like Hibernate with Java).
Also, PHP has those neat features, like implementing Iterator, creating ArrayObjects, etc. which can all teach students how to work with linked lists, how to reuse code, etc.
I started learning OO programming with C++, and I was infinitely bored by console apps with cats and dogs inheriting properties from animal class.
Finally, even students can now afford a couple of bucks a month hosting with PHP, and show off their work to the world.
If you really want to know exactly what these courses teach (or rather, examine), you can find out on the website (click specification (PDF), or the sample exams).
I think they do do most of the things you say. They simply don't want to mark work written in C or PHP any more, since not many people are using these languages at school.
Remember most people doing this course will be age 16-18. Also, there are other exam boards who may (or may not) offer equivalent courses using other languages.
Really? You're choosing VB6 over C#? I mean... really?
Visual Basic 6, and VB.Net ..
HAAAAAA !!!!
That is where I just have to say something.
Computer programs are expressions of our logic. Telling people first how bare metal works is useless without the logic. First the basic logic should come. Then memory management(unfortunately we are stuck with that and MM is mandatory). Then lower level languages.
Pascal is a teaching language, it was designed to teach. But it fails miserably when coming to memory management. Even Java with it's VM teaches more about memory management than Pascal. (In my personal experience) So for the first step: Pascal(the bare basics), Python, Java
Memory management should be tought using only and only C. Nothing displays it better(ASM would be overkill).
And from then all other languages.
I think whether a candidate "knows" a particular language shouldn't be considered a significant factor when considering them for a position. Sure it's one factor but just as, if not more important is whether the candidate has any experience in a specific domain (ie. writing video drivers, specific types of web applications, database middle-ware, etc), their ability to function as a member of a team (especially communication skills specifically with technical AND non-technical workers), their documentation, architectural & project management skills, and their ability to adhere to existing coding standards. "Languages: C, Visual Basic, PHP" is just noise on a resume in my opinion. I prefer to see specific projects identified on a resume which outline project details, challenges and what role the individual played.
I'm an old mainframe programmer. I didn't chime up when they took COBOL out of cirriculums, even though it is a relevant language many companies still use (even in 2010). COBOL isn't hard to learn or master, and a lot of the offshore programmers have no problems with COBOL, either learning it or implementing it. The problem is JCL. IF it's taught, it's only as a side note.
90% of the abends I deal with are from poor JCL.
If COBOL was still taught in an educational institution, by qualified teachers, programmers would have tight JCL skills.
C is a very powerful language. It's still relevant 30 years after being created for a reason.
Anyone who says "picking up any given language in computers is straightforward" is inexperienced, especially when work puts you to just that task. /I hates RPG.
> Part of being able to write good software is actually understanding how computers think.
Time for a Dijkstra quote: The question of whether Machines Can Think... is about as relevant as the question of whether Submarines Can Swim.
"I don't care if some old fossil of a professor loves Pascal. Suck it up, learn a new language. Your job is to keep up on shit. Any educator that themselves refuses to continually learn should be fired."
The same can be said of the fucking student. Get off your fucking ass and read a book, take a language details course.
Seriously, do you really think you are going to know all you need to when you graduate from college? Do you really think you stop learning? Do you really think your employer will not expect you to learn on your own the latest and greatest technology???
Moron
People setting the syllabus should be recommending, a modern, clean, free, cross-platform language. That means something like Python, Ruby, or Java.
First, how do you teach system-level concepts with those languages. I would grant you that you can learn the basics of programing, Python and Ruby would be fine (not Java since you can't express things procedurally if a problem requires so.)
But you can't divorce the basics of programing from the fundamentals such as programming on non-memory-managed systems without having to face (and learn to deal with) portability issues. This has been one of the greatest fallacies of all, to think you can efficiently cultivate programmers with an exclusive or almost exclusive usage of extremely high-level languages.
Second, what's wrong with Delphi, as a teaching programming language. It has many (if not all) the strengths of Pascal-like languages (Turbo-Pascal in particular) while at the same time introduces new programming concepts that did not exist when Pascal and Pascal-dialects were conceived (properties come to mind.)
Yes, Pascal has been hacked away into multiple dialects, but all capture innate qualities. OO and advanced pointer manipulation is usually very similar from one another. So for the purposes of teaching programming, any one modern Pascal dialect will suffice.
Delphi has been an industrial language (however, niche it might be), and Anders Hejlsberg, the chief architect of Delphi, is also the lead architect of C#. C# (the 3rd-4th most widely used programming language in industry) has a lot more immediate roots in Delphi than on any other C-syntax-like languages.
When we consider these facts in addition to Delphi's qualities as a modern programming language, I would say these are more than enough reasons to use it as one of the modern non-gc-babysitted tools for learning structured programming in both procedural and object oriented paradigms.
...and not because of what it has done. It is just generally a sucky exam board for technical stuff and science. AQA's main areas are English and the arts. It is not good at maths and science which why the majority of secondary schools only have AQA exams for English etc.
The ones that are worth their weight are the ones that don't teach any specific language (WJEC is one like this - the one I did, in fact. The written exam is a joke but the coursework is very well constructed). They let you implement a project of your choice in any language. You have to document it at all, explain the rationale behind it, evaluate and demonstrate it etc. Much much closer to a 'real world' project than a "HERE IS LANGUAGE X LET'S LEARN IT BECAUSE IT'S THE ONLY THING YOU'RE ALLOWED TO DO"
C will be the COBOL of the future. Companies will always have those legacy C applications, just like they still have COBOL ones. And there will be a lack of good, experienced C programmers.
That's not entirely true, system stuff is still being done in C (or sometimes C++). Since everything runs on that, I doubt it will go the way of the dodo, or COBOL anytime soon. As for a lack of good, experienced low level programmers, we already have that today. Java programmers that land at my workplace hardly understand what happens behind the scenes. Most school curriculums today hardly seem to focus in teaching you how computers work inside and out, they seem to focus more on teaching you the language du jour and some basic problem solving skills that are specific to that language in order to manufacture employable programmers. This seems to lead to a lot of cargo cult programming, especially in Java. "Everything must have an interface. I have no clue why, I was just taught to do it".
What I think will happen is rather, there will be two kind of programmers. Low level programmers and high level programmers. System programmers and Application programmers. Just like we currently make a rather strong distinction between a web application developper and someone who writes C on embedded systems. The two have a very vaguely defined common knowledge area, but the skill sets required by either are completely different.
As to the mantra, "A good programmer can learn any language," I think that it is easier to "Move Up" with languages, than "Move Down." By that I mean, it is easier to go from C to Java, than from Java to C.
You get spoiled and lazy with languages that do all the thinking for you. When you move to a language where the memory management isn't all done for you, the austerity is tough and rough. It's like moving from a luxury mansion to a trailer park.
I have done just that, and I disagree. Of course there is a huge culture shock at first, but then you can focus on learning the implementation details, because at that point you are already supposed to understand the abstract programming concepts. Flow control, assignement, types, for loops, problem solving logic, etc etc. All you're uncovering are basically the inner workings of what you already knew. Learning something out of need is normally done bottom up. Learning something out of sheer curiosity and interest seems to be done by moving down.
For instance, when I first got into computers, I began to learn how to use them. Then I dug down. "Mm, I wonder how such and such works? What makes it thick?". It's like having an adventure where you discover how shit works.
Then again, that's merely how I seem to approach things, doesn't mean it works for everyone, but it has certainly served me well so far.
At least in the UK there is some choice. I am a high school CS teacher in Texas, and in the US, the Advanced Placement exam (taken for college credit) is language specific to Java. I am not sure how closely correlated the AP exam is with the A-level, but it is more or less the standard CS course in Texas and in many other parts of the country. If you do not teach Java, the students will not pass the exam. I know some teachers that start their classes in Scheme or VB (or Scratch or Alice for that matter) to introduce concepts/algorithms and then teach Java syntax for solving the same kinds of problems. These teachers are taking 2 years to teach CS, but I don't have that luxury so we start and finish in Java. For the vast majority (90-95%) of these students, this is the first time they have written code.
I would have to agree, and my students who return from university to visit say the same, that it is easier (wiser?) to go from C to Java than the reverse.
And the dumbing down of Comp. Sci. education continues...
Anyone with a first-year computer science background should be able to tell you deleting doesn't mean its gone, just hiding. Of course, these students will probably now not learn the difference.
Everyone has already chimed in about the merits of learning foundational programming languages like C and C++, but I wonder if the defense of "this is what the industry is" should be the main reason for getting rid of languages. I liken this to forcing US students to learn COBOL because larger companies and universities don't want to get rid of their mainframes. Though it is the responsibility of higher education to prepare individuals for the work force, it seems this move will only stagnant the talent pool and make it harder to advance to new paradigms later.
As cat-herder of multiple million-line+ systems, and speaking to the teachers reading this, teach your students one and only one thing: The Miller principle. Simplify every problem down to a complexity of maximum 7 items. At that point, the language is completely immaterial. Developer-savants like to write code that only they can understand. They crash and burn on systems of the sort I manage. The good ones write code that can be visually verified, and they're the ones who get promoted, and subsequently retire rich. Take this one to the bank and smoke it.
Visual Basic stays in? Seriously?
If you throw out one crime against humanity (PHP), you have to throw out the others too! I mean compared to VB, PHP nearly is bearable.
And then Object Pascal (Delphi)? When there are things like Haskell, Erlang, etc out there?
I had to work on a 3-month project using Delphi two years ago. And unless they completely changed the language, that thing is just as much of an outdated error-prone mess as Fortran, Cobol and C. Elegance: Not to be found for another 1000 miles.
This is another mark that shows the irrelevance of those exams. They are like a blind person judging the paintings of others.
Any sufficiently advanced intelligence is indistinguishable from stupidity.
Wikipedia is your friend.
01: Languages to write web and desktop applications. Bussines level stuff. Bussines logic.
10: Languages to write web server, desktoops, bussines, logic, and everything else that the other can't.
Visual Basic, Basic .NET and all the Pascal variants (pun no intended) are to build the 01 type, but C is needed for the 01 type.
-Woof woof woof!
The exclusion of PHP is debatible (is not really different from a gazillon other interpreted languages out there), but the exclusion of C, is, IMHO, a gross mistake. C teaches basic low-level concepts that other languages, outside assembler perhaps, dont even touch - memory management being the principal. Nowadays every developer accustomed to Java seems to think garbage collection is the end of all memory handling issues...
The pedantry of geeks never ceases to amaze me. If you don't like my choice of terms, well too bad, I happen to believe "think" is a good way of putting it. You have to deal with the fact that at a fundamental level computers have a given way they process data. They have a set of rules for how they deal with things, a way they go about doing what it is that they do. this is something you have to come to terms with if you want to really understand them and be able to write really efficient code. No matter how you structure things, no matter how things make sense to you, there is only one way that computers deal with it. While the idea of data having an inherent, immutable, type might be a nice idea, computers don't have that at a basic level. It's all just streams of binary data and you can process it however you wish.
A nice way to sum that up, is that they think in a certain fashion. If you don't like that term, well too bad.
Man you got a case of the whinies in this thread. What, you mad that someone who has a degree got a job making more than you?
For reference, I'm not a college student, I'm an IT professional that works at a university. As such I work in supporting teaching and research, and supporting the teaching side is more of what I do. I find that the undergraduate students are quite willing to learn. Maybe some freshmen not so much but they get weeded out before they are admitted to the major. However I also find that some supposed educators seem to believe that they should be exempt from learning. They learned how to do things 30 years ago and don't think they should bother to update their knowledge. I find that to be exceedingly hypocritical, that on the one hand they can be demanding that students learn new things while on the other refusing to learn themselves.
It's not a matter to trying to teach kids everything they need to know, it is a matter of being efficient and modern in teaching. You need to teach using something, why should that not be what is currently used in industry? I mean I suppose we could teach students semiconductor design all by hand and have them try to sketch their Photomask by hand on a transparency and so on. Or, we could (and do) have them use Cadence since that is actually the tool that they'd be using in the real world, and gives them designs you can actually send to a fab to have made. Seems to me the smart thing is to teach them the theoretical knowledge AND give them experience in a useful tool at the same time.
Pascal/Delphi is very much still used by companies. Perhaps you've heard of Skype? It's not like the old Pascal of the 80s anymore.
I am confounded by all of these responses which argue the merits of teaching with one language or another. After going through college and grad school, I am convinced that students are taught CS completely ass-backwards. AP should be focusing on introductory computation theory and basic algorithms. There is no need to write a single line of code so early in one's studies. That's not to say that it'd be bad for a student who's motivated and able, to pick up a language on his or her own time; as an academic field though, "Computer Science" is not "Computer Programming."
I don't care what companies want. Companies are stupid. But I *do* care if those languages are relevant, interesting, are used by lots real people and have free implementations. Pascal fails all those tests. Wasn't that the crippled little 1970s language which lacked modularity and variable-sized arrays? ObjectPascal (or whatever it's called) can be used for real programming (I knew a guy ten years ago who did), but fails most of those criteria.
The "designed to teach programming and problem-solving" phrasing the board used almost certainly refers to Wirth's original Pascal. I bet Borland didn't design Delphi as a teaching tool.
The fact that U.K. schools are reimporting this stupidity will maintain the unnovation balance of power. Yes it's challenging to write a "commercial technology" neutral exam, but we should be striving for that so that graduates with training in version (n-1) won't be completely lost. Meanwhile I look forward to the day when I'm up against graduates with a PhD in cloud computing or whatever the technology buzzword du jour is.
As it was said before: "never take software advice from a bug tracking system salesman" -AV
"Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
Have people who have most likely never coded in their life develop the curriculum. Genius!
Pascal is relatively straightforward; at least until you hit something it wasn't designed to do. C, C++, Perl and (heaven help me) APL programmers have been known to take it as point of pride their code is "so clever nobody but me and the interpreter/compiler understand it"). Which one would you rather grade?
The differences between the languages is something that should not matter in teaching programming. It seems like they are trying to teach people to be compilers (Pascal, C, C#, PHP) instead of teaching programming.
Solving the Tower of Hanoi in Scheme:
(define (move N from to spare)
(if (= N 0)
(display "")
(begin
(move (- N 1) from spare to)
(display "move from ")(display from)(display " to ")(display to)(display "\n")
(move (- N 1) spare to from))))
Solving the Tower of Hanoi in C#:
static void move(int n, char from, char to, char spare)
{
if (n > 0)
{
move(n - 1, from, spare, to);
Console.Write(" move disk " + n + " from " + from + " to " + to + "\n");
move(n - 1, spare, to, from);
}
}
Solving the Tower of Hanoi in Pascal:
PROCEDURE move(N, Tfrom, Tto, Tspare : integer);
BEGIN
if N > 0 THEN
BEGIN
move(N-1, Tfrom, Tspare, Tto);
writeln('move ', Tfrom:1, ' --> ', Tto:1);
move(N-1, Tspare, Tto, Tfrom);
END
END;
Most of the times the bits and bytes are not part of the problem. And when they are then they need to be analysed as part of the problem like any other requirement. Also, not understanding the LOGIC of the recursion can have far more impact in performance than not understanding that virtual memory is mapped to segments (which is just an engeniering issue).
--
PAC
More specifically, Object Pascal is what Borland fucked up, compared to what Apple originally came up with. What Borland produced was a bastard child of Object Pascal, basically implementing C++ with a Pascal syntax, such as most objects being stored as non-relocatable structs (records) on the stack, rather than being exclusively refrerences to relocatable pointers. Back in the day, I was already doing "real" Object Pascal on the Mac, and I was banging my head into the desk over what Borland did.
However, I do understand that they were working with the 8086 and its horrible segment memory architecture, and they had nothing like the memory manager from MacOS. No large (>64k) memory blocks, no automatically relocatable handles, and the 640k limit.
#naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
If you're a good programmer, programming languages are easy. If you're curious about a language, you can learn the basics of it in a few hours and be adequate in the language in a weekend.
(Now, being good in the language requires more than that -- it requires a project or two, some refactoring and some time, but that's beyond what the poster said.)
Even mediocre programmers can pick up the basics of any language quickly. The focus on just a core of languages, and often, just ONE language, which we often hear from job candidates and young posters on slashdot are a reflection of the many graduates coming out of CS departments these days who exhibit a distinct lack of talent. There are still some great programmers coming out of our CS programs, but there are many, many more drones than came out of such programs 20 years ago.
Somewhere along the line, a CS degree became a way of ensuring yourself a job in much the same way a degree in accounting did, and CS began to get people who didn't really give a shit. "I'll pay the money, go to the classes, get the degree, and get a job. Then I'll be safe and happy until I die."
Talented programmers pick up languages when needed, and they do it quickly. Programmers have curiosity about computing. Missing either of those means a bad programmer. Not knowing the basics of such a simple language as C equals a bad programmer.
If you're bothered by that analysis, surf a little, write a few programs, read a few to see how things are done, and the point will be moot. Unless you're a bad programmer, in which case you'll find C very difficult, take weeks to get anywhere in the language, decide you need to take a class in C to learn it, never be able to figure out why your simplest C stuff won't run at all.
And ya know what? The same goes for FORTRAN!
Hmm... a quick check of Wiki, and it appears that things did change when Delphi came out, not surprising since it post-dated the 386. And now I remember what horrified me so much about the original Turbo Pascal dialect. It was that the "object" datatype was basically a "record" with method procedures attached, and you had to declare a separate pointer type for each one. Ugg-lee.
#naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
First! to post the requisite LISP rant! /rant on
Functional programming is the "nails on chalkboard", freshman weed 'um out language.
You think you want to earn big money programming computers, then think again sucker! You are going to get so lost in sets of parenthesis you'll forget who your Mamma is. LOL.
Some hoittie toittie schools, where professors have very high opinions of themselves, very low opinion of students, who shall remain nameless, like UC Berkeley and MIT, require LISP as a first-year language so as to kill all pleasure one might think one derives from programming and switch to something more pleasurable, like theoretical physics.
Lost is sets of parenthesis is the single best way to kill off all motivation to learn computer science. You can also make people scream. Which actually is kinda cool.
At least the UK is earnest enough not to torture their students with LISP. /rant off
No wonder the brits are such crap programmers. Pascal!?! That is the most worthless language ever invented. And nobody with half a brain uses Delphi anymore.
In other words, "normal" high school ends when students do their O.W.L.s, but before they attend university they do N.E.W.T.s. The muggle equivalent to the latter are A-levels.
Space game using normal deck of cards: http://BattleCards.org
I learned Lisp first, abruptly, as I stumbled across CS from a liberal arts background. I had some rough common sense knowledge of computers and engineering (family exposure) but did not know how to write C programs at all. My passion became understanding how one could implement Lisp (compiler, runtime system, garbage collection) on top of what I knew was a very primitive machine model. As this was university, I switched majors and immediately got submerged in machine architecture, assembly, data structures, and C/C++ as well as more advanced Lisp, all in the first 12 months.
The end result is that I notice the many naive ways in which traditional C "bare metal" programmers assume that higher level languages are implemented. They make bad "optimization" decisions in projects they influence, because they have no idea how a compiler works or how different a good runtime system may be from the naive macro-assembler model they understand. I've found these are often the same people who advise C programmers to "always compile in non-optimized debugging mode" because they cannot comprehend their program's behavior when there isn't a trivial mapping of line/statement to machine instructions in the step debugger.
So while you argue that someone needs to understand macro assembly, I argue that someone needs to understand high level language implementation concepts if they really want to have intuition for program costs. But the reality is probably really: people need to be taught program costs and a rough bit of complexity theory. Then, let their own tastes tell them how far to dive into the implementation guts. You could spend your days pondering garbage collectors; or whole-program analysis and type systems; or operating system level concepts like ABIs, virtual memory, and system calls; or machine code and macro-assembly organization; or digital design for CPU cores; or even just cache memory and memory hierarchies! Nobody has time to be truly expert in all of these, but they all are critical to "really understanding program cost".
"Local university miserably fails to prepare its students for the working world. More at 11."
...
Sad is it is, professors are usually so detached from real life that they think they can steer industry by molding the minds of the students they teach. In reality, the industry either just chews them up and spits them out, or spends extra time remolding them into useful employees.
My advice:
1. Go to college and have a good time
2. Get good grades; that GPA is really the only thing of use that may come out of your time there
3. Teach yourself a select few useful industry skills between parties (or find a good internship)
4. Emphasize those useful skills on your resume
(and the obligatory)
5.
6. Profit!
Gross incompetence maybe? Or it could be just sheer malice. C and C++ and (Java or Python or Ruby or Lisp or Perl or Pascal) need to be on the list. The M$ languages are useful in that if someone puts them on their resume, you can safely toss their application in the circular file because they won't be retrainable. It will take too long for them to unlearn the bad habits, if they ever can, to become productive in time.
There has always been a scheme to truly learning computer science, and it is spoken of with a lisp...
The first assignment was to write a program to search a dictionary for words that were still words after the first two letters were removed (eg. rewind -> wind).
We had to write this program in ML, Haskel, LISP, C, Java, Pascal and some other language, I can't remember which, at the time I had only C++ and Python experience, so they were all new to me (C wasn't that different, but I couldn't cout or anything like that).
The course was in CSci, I was an EE, I was one of the first to actually finish the assignment and thought it was pretty easy while many of the CScis thought it was hard. That is the difference between learning a language and learning programming.
... the were trying to generate a fairly abstract level of understanding regarding the programming process. Given that, I'm not sure they kept some of what they did, but getting bogged down with memory management in C is not how you develop a top-down view of the programming sector of IT.
I'll deny it it just to show it can be done.
There are tens of millions of lines of code in a variety languages that help run the world that were written and are maintained by hard working programmers who have never used C. There is also a lot of code that is written in C. It depends on where and what you are talking about.
The reality of the situation is that in industry there are a large number of camps. Some have huge repositories of code that is probably older than the OP that is mission critical and is still chugging along very well thank you very much. There are other places where the latest and greatest objected oriented, web based language invented at a University is the vogue. You have everything in between.
Saying one particular language is that basis of computing displays a very limited knowledge of the wide breadth and depth of computing both in industry and academia.
Now back to the original topic. What language(s) to use to teach beginning computing.
There are two basic methods. One is to teach the nitty gritty machine level first and then move up to higher and higher levels of abstraction. I.E. Bits, Nibbles, Bytes et al. The second is to start at a higher level of abstraction, teach the higher level concepts, such as iterative loops, without getting bogged down with the minutiae of what's under the hood. With the second method you can get more specific if you need to.
I would argue that most people will get bored with method 1 and have no real need for it. Method two does require selecting the level of abstraction you want to start at, you tailor the selection to the group you are trying to teach. People who argue C are simply picking a lower level of abstraction than people who argue for Java, either can be "right" or "wrong" depending on the people in the class and the objectives of the class.
I also think that a good grounding in computational theory and the study of algorithms is a good idea. If you know why a bubble sort on a 1 million entry list is a bad idea then it doesn't really matter what language you decide to not implement it in :-)
I would argue that non-CS majors should be taught a language that is most relevant to their field.
Engineers: Matlab.
Statistician: R
Visual Design: Javascript
Literature: Inform or TADS.
Philosophers: Lisp
A-levels are high school, where very few kids know what they want to do as a career, probably one or two of them out of a year group of 300 would be able to explain what a programming language is -- currently nobody teaches C anyway since it'd only scare 99% of them, and the 1% who could handle it are already teaching themselves, so the removal of C is no real loss. On the other hand, the addition of python finally means that there's a viable alternative to VBA which is what everyone I know is currently teaching.
I only hope that the teaching materials aimed at this age / education range (ie, children who struggle to operate a word processor, let alone an IDE) become available soon -- hell, if someone can tell me where to submit things to, I'll look at the current VB / pascal materials and come up with a python equivalent myself :)
I mod down anyone who says "I will be modded down for this", regardless of the rest of their comment
Too bad the only LISP interpreters for Windows that don't crash completely randomly due to memory leaks are all the non-free ones that cost upwards of $800 or much, much more.
SBCL, CLISP, ECL, GCL... their Windows ports are all, even to this day, extremely buggy, or have significant features cut from their native Unix/Linux versions.
The only reason why languages (or implementations thereof) matter is the availability of library bindings. If your favorite programming environment does not come with bindings for the libraries you might need on your development platform then you are at a serious disadvantage. In the M$ world C++ and .Net are supposedly the universal solution for every programmer. I think Delphi for .Net was Borland's way to awknowledge this fact and the switch to Oxygene/Delphi Prism (Object Pascal-like language for .Net) is probably "the better approach". Too bad it creates managed code instead of native code. Anyway, I guess C++/Java programmers have no idea how powerful Delphi is simply because they have been educated differently (=conditioned) and because Visual Studio Express is available for free to hobbyists. It's about time university curricula were given a face lift.
I forgot my login... I teach CS.
Part of the problem is how industry demands have skewed education and the demands of the students; college is viewed as a job factory more and more and less as an education.
Programming is a hugely important part of CS; conceptually, it is small - practically its almost all that matters. Programming is a skill, an art form that one develops over time; which hardly fits into the conventional college education system that well. It is far better off being a apprenticeship model like other professional trades like plumbers, metalworkers, and many traditional fields. The CS level understanding can be minimal if not skipped because conventions will get some of those benefits in there a bit. This would help industry as well. Perhaps this could fit better into an engineering major except that computer engineering means something else already.
CS itself; traditionally, is a math major. The theory is a tiny niche these days. Sure it could change a bit to fit with the times since the major discoveries were done 40 years ago; and to keep the major going it has already significantly changed/warped. It can be kept around and kept more "pure" and to its roots if we break out the programmer demands from it causing it to warp into a poor hybrid of two divergent requirements of it. It is already hard to get a CS degree in 4 years and even then you are missing out on a whole lot if you don't self educate a whole bunch outside of school.... Employers (HR morons) often do not feel happy with the results and this will get worse as more specialization ocurrs in this field and students have no clue about the massive frameworks and languages being used by the employer; not to mention the complex massive development and code management tools being used out there (which do not seem to be getting any easier.)
CS started as a niche in the math and electrical areas - now its undergoing severe specialization. A CS person isn't chosen over somebody with a Networking certification + experience and no degree simply because networking has grown so complex (needlessly so) that it has become its own field and all the CS major courses on networking do not output somebody as capable as the lousy certified person who hasn't a clue what is really going on (nor do they really need to know for most of those jobs; or how to really program for that matter...)
There could be long discussions on each of the things I bring up; I'msure there are examples in other areas as they developed over time and the downside of their education models etc. As well as the cultural errors at play undermining progress on properly addressing these issues. (for example the overvaluation of college degrees in areas where a "master" tradesman is better... not to say classes and theory learning are not part of that learning model.)
-----
Then we have the huge massive issue of corporate thinking against the workers. The holy grail of efficiency = kill off skilled labor. Ever since Henry Ford started the popular war against skilled labor we've seen 1 profession after another be watered down and simplified to the extremes to where its almost getting so we could engineer some smart chimps to do the work. These changes get into every field possible and are rewarding for the management and shareholders because that is the system we've allowed to develop and grow. I'm probably wasting my time here because most of you do not see it because it doesn't directly impact you. Well, back when manufacturing was dying in the USA I didn't care then because it wasn't me-- but I started seeing it coming shortly afterwards that it would start to come for us as well someday and there won't be enough middle class around to stand up for us when the time comes. (think of that old line about nazi germany; classic case of "its not my problem, why should I bother?")
Programming and the "lower" areas of CS will be simplified to the point where nearly minimum wage workers with no skills can develop software; and then just
These are courses akin to universal literature, history or sociology, intended mostly to give you a taster about a certain field of expertise.
YOu will pick up all those valuable skills later in university or by means of training paid by your employer (when you get your first jobs they will look for people that understand general concepts, not for accomplished programmers with specifc technologies).
More job security for us C/C++ programmers !
You free(3) the heap space associated with C and let the garbage collector do the rest!
It's true no man is an island, but if you take a bunch of dead guys and tie 'em together, they make a good raft.
I use and like PHP - but that's because of its utility and choice of libraries, its still horribly inelegant (especially when all those useful libraries are pre-OOP/namespace, although at least it now has half-decent database abstraction). I wouldn't recommend it as a first language.
Also, writing PHP-style web apps is a bit of a specialised programming model.
I'd pick Java for high-level OOP stuff, supplemented by C and/or assembler for low-level understanding. Java may be on the way out, but only slowly and switching from Java to C# is hardly a huge paradigm shift...
Its possible that Python might be really good - I'll let you know as soon as I manage to get past the page in the manual where it describes significant whitespace without disolving into peals of disbelieving laughter...
In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
No C#, ok, makes sense. No PHP?, well, I see your point. No C? That is ridiculous! most languages today are based on C's syntax!
And, specially stupid: Allowing visualbasic but forbidding C? Anyone that has learned to code in VB should be banned from programming! And this guys are allowing it, but not allowing C?
That's just crazy. You know what I think? They deleted PHP because of the vast amount of free code out there, and forums, etc. And they deleted C because they are lazy, and it takes teachers more time to review C code than it does to review some other braindead shit like VB or Delphi.
WTF am I doing replying to an AC at 5 A.M on a Friday night?
If you've only ever used a single language, you don't "understand programming" enough to instantly pick up any language.
If you've worked in at least a few, particularly a few from different areas -- asm, C, Java, Python, Lisp, Erlang, and Haskell would be my current list -- then you'll be able to pick up other languages, like JavaScript, C#, Ruby, etc.
But if you've only ever worked in Java, C will be hard, because you'll not only be learning a new syntax, you'll also be learning the concept of pointers, pointer arithmetic, and manual memory management. The reverse is also true -- if you've only ever worked in C, picking up Java will be hard, because you've probably never done any object-oriented programming. The same is true going higher-level -- if you've only ever worked in Java, it'll be hard to adjust to actual object-oriented programming in Ruby and JavaScript, as opposed to the class- and type-oriented programming of Java. Then again, if you've only worked in JavaScript, it'll be hard (and annoying!) to go to a language like Java, where types and interfaces matter.
These may not be as hard as learning to program in the first place -- though your first functional language will certainly feel that way. I certainly don't use all the languages I know, or list on my resume. But knowing a variety of languages is important to being able to grok any one language completely, let alone being able to pick up new languages in a snap.
Don't thank God, thank a doctor!
Okay, I could understand not needing C if you needed assembly, since it at least makes sure you can figure out what's going on. But when ALL of the languages you're teaching are high-level, it's not a computer science degree, it's just a programming degree. Because science is about understanding how stuff works, and the higher level it is, the less you understand. (Like how you start out with "Everything is made up of atoms." It's kind of true, and maybe it's science in fourth grade. But it's not really true, and when you have a college degree in the science, you should know better.)
-- IANAL, this isn't legal advice, and definitely isn't legal advice for you. Also, Squee!
Ah I miss BBSing immensely. I ran several different ones in different locations at various times. Each one was a joy to create and to see users visit.
Door games were of course one of the major attractions. I still have my licenses for my last used BBS software (Roboboard), and my most popular door games (Trade Wars, LoRD, etc). I would have to say that BBSes are what originally got me into being interested in computers and computing. I didn't start programming much until after that though.
"The first time I got drunk, I got married. The second time I bought a chimpanzee, after that I stayed sober" Arian Seid
... back in the early 1990's. Can't say that it really taught me any more than learning in any other language.
If we're just teaching "problem solving skills", then why not choose some super easy language like Phrogram (http://phrogram.com/)? That way, students don't have to be weighed down by all of that hard "thinking" stuff that we don't ever do in the real world .
Hey, I'm a Perl programmer but I have little issue with the language choice, particularly pascal and python, as both were designed with teaching in mind. Java I'm so so on, personally I think its a bad idea but I'm sure Sun/Oracle is probably donated a crapload of free stuff to get their language on this list, so I guess its not unreasonable tradeoff.
Peace, or Not?
People still use Pascal? LOL. I'm surprised they don't insist on PDP-11 and RPG II and have a punch-card section on the exam. Surely this is merely because Pascal would be easier to grade, being the inflexible piece of crap it is, rather than actually teaching the students useful skills with a flexible (yet highly dangerous - because it's so flexible) language like C/C++/C#
Seven puppies were harmed during the making of this post.
First: these are High School kids. No one is going to hire a high school kid with no other experience anyway.
Second: Pascal is a perfect introduction to programming concepts so long as it is followed up with OOP concepts. It forces you BY DESIGN to be a clean programmer. Without self enforced discipline C will easily become an unmanageable black hole.
I can even give a real work example. When I entered college; with only Pascal experience from high school. I outscored the native C programmers at their own language almost every time because my code was efficient, readable and did not crash.
I can take it a step further, my senior year my very small liberal arts school was invited to compete at the regional University of Illinois programming contest. For some reason the advanced data structures class at my school was offered only in Object Pascal. Since we were most recently fluent with Pascal we opted to use that platform for speed. You cannot believe the snobbery and condescension we received as a result. You can probably guess where this is going their laughter quickly faded when we were announced regional winners. I credit the structure enforced by Pascal with our win.
I think there are quite a few generally older C snobs out who need to find a new source of self value. Of course C and its offshoots are the most abundant language out there; but give it a rest, anyone in the industry will eventually pick it up no matter what their first language is. And if that first language is pascal they will be that much better for it.
Just for your future reference, while technically you can call what you did 'programming'.
By any acceptable definition of the word what you did was show how to use the Delphi gui, not teach programming, and that is a BIG distinction. You haven't taught anything but how to point and click.
Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
1) Java is the leading OO language. But it is a pain for a beginner to learn due to an overly complex and organically developed class library, and the whole JAR thing is pretty complex.
2) I'm the biggest OO-skeptic, but I recognize that is the way the world is going, and it is best to indoctrinate the children at a young age. So Object Pascal isn't such a bad idea. Frankly C# would be even better.
3) ((((((don't) talk) to) me ) about ) (cons LISP Scheme etc))
The fact that some Comp. Sci programs have courses dedicated to the learning of a given set of languages is different from what I've seen at my school. It's contrasting with my experience (at McGill) where there is no such courses. I only had 2 classes so far where the main topic was about software design. In any other classes, if they ever happen to require yo to code anything, it's up to you to manage this by yourself. Combinatorial proofs, and proofs or all sorts, tractability, and some of probability/statistics are the main elements we learn to deal with. The course named "Programming languages and paradigm" is actually about parsers, types proof, and lambda-calculus. This has a taste of the the good old debate of comp. sci vs software ing, but this is not the point of my comment.
The difference between ObjectPascal/Delphi and C++ is similar to the difference between cars with manual and automatic transmission. If you want to live more dangerously then you choose the former -- and of course, you might gain a few milliseconds in a tight loop; if you want to drive and not fret the small things then you choose the latter.
In natural languages, being a fluent speaker of Russian doesn't help much if what's needed is a fluent speaker of the Cantonese dialect of Chinese.
I'm just taking courses on system administration and programming at a community college, and while I gather there are lots of programming tools and techniques I know little about, the languages themselves don't seem much different. For one thing, structures in one language are consciously reproduced in another. Every textbook I've used is careful to compare the syntax of a given loop structure to the syntax used in other languages -- and it's usually just about the same, anyway.
Furthermore, non-CS majors (like mechanical and electrical engineers) don't have to understand the very basics of programming, they don't have much relevance to their field. For CS majors, start off with languages like C because their job is to understand the very very basics.
Perhaps I misunderstood what the basics of programming mean to you, or maybe times have changed in the 15 years since I got my BS in electrical engineering and became a HW engineer. In school, among other things, I was first taught how to make computers from scratch, then we learned some different computer architectures, then how to program them in assembly. At work, even though I do not get to design computers and program them in assembly, I do get to wire up ram, nvram, adc, dac, control lines to analog circuits, etc., pick their address in the programmers model, and then write c code to test that it's working right before handing it off to a team of embedded SW engineers. The programmers I'm working with are using c, so I will be using c as well. BTW, half of the programmers I work with have an EE degree too.
But I digress. As far as I could glean from your post, you're saying the basics of programming are knowing what is actually going on in the hardware. It used to be that HW engineers were EEs. Maybe something has changed in the curriculum since then, but in my job, you need to know how to bias an op-amp plus much other analog stuff, AND how to setup the programmers model of the HW the way the SW guys want it and much other digital stuff. Seems like EE is still the place where people like that are going to come from.
P.S. I know a few mechanical engineers who program traction control, active suspension, etc. Those guys need to know programming basics too.
Ah the well known algorithm "swap". What, not an algorithm? Well, it must be a well-known data structure then. No? For reference (joke at no extra charge), the full sentence was
What you need to concern yourself with is the algorithms and data structures employed, to that end references are as good as pointers.
(My emphasis).
Note: Delphi is not a language. Delphi is an IDE, Object Pascal is the language that it supports.
Maybe Delphi is also the name of the IDE, however there's a boatload of evidence for it being the name of a language/dialect:
From Wikipedia/Object Pascal
Borland used the name Object Pascal for the programming language in the first versions of Delphi, but later renamed it to the Delphi programming language...Object Pascal [is often confused] with Delphi source code.
Paradigm: imperative, structured, object-oriented, functional (Delphi dialect only)
Or the Article Summary:
...one of its other approved languages — Java, Pascal/Delphi...
So yeah, looks like a language to me.
coding is life
It is really sad to see the list of programming language that they have chosen. Two variants of Visual Basic, it is a joke or they are serious? Like if Visual Basic was a real programming language... And they have removed C, the most important programming language for any programmer. If I were a student I will have very serious doubts about this course.
The Exam Board seems to be run by people who have no feel for what computer science is about. They appear committed to languages that are either dead or close to dead.
I am surprised no one there is suggesting that students be taught how to write code for the PDP-11. Their sense of logic is non-existent.
Of their decrepit list, Python (more of a prototyping tool than a language) and Java (the purest OOP language I can think of) or the only ones that promise to be of practical use to the new crop of A-level examinees.
The Board members defy logic by excluding C, the foundation language, while promoting Java, its derivative. Pascal/Delphi is on life support, while Microsoft has already sent out invitations to VB 6's funeral; what's the point in forcing students to become proficient in a language they may never be able to use in real life?
Why would they drop C#, the original .NET language, in in favor of VB.NET which behaves more like a macro running on top of the former?
As US rapper Ludacris would put it, members of the Board, "Tell me who's your weed man, how do you smoke so good?"
I'll be doing A-level Computer Science next year. I already know Python 2.6 (and I know the differences in 3.1) so I'd be glad if my college teaches me Python. I also know a bit of Java and Pascal, though I disagree with Pascal being "easy to learn". C programming would be nice - I don't know why they're getting rid of it - as that's still needed for faster programs or extensions for said languages.
"A-level computer science students will no longer be taught C, C#, or PHP from next year following a decision to withdraw the languages by the largest UK exam board. Schools teaching the Assessment and Qualifications Alliance's (AQA) COMP1 syllabus have been asked to use one of its other approved languages — Java, Pascal/Delphi, Python 2.6, Python 3.1, Visual Basic 6, and VB.Net 2008. Pascal/Delphi is 'highly recommended' by the exam board because it is stable and was designed to teach programming and problem-solving."
This is really, really wrong and short-sighted.
I used to be an avid Pascal user, in the time between Turbo Pascal 3.0 for CP/M hit the shelves, and up to suspended animation period of Borland Pascal 7 (when Delphi 3 was already out). TP3 for DOS and Logo on TRS-80 were the first languages I could produce some non-trivial graphic output with.
Yet life moves on, and I can't imagine having my productivity limited by what Delphi offers. It is behind times, to say at least.
Even raw C++ feels somewhat kludgy these days. Qt's preprocessing lightens it up a bit, but it doesn't really go all that far in expressiveness.
I consider CLR, JVM and Python's VM to be the platforms where you can actually use and benefit from what are "modern" yet really decades-old concepts that were implemented on Lisp systems in early 80s. Closures, access to expression AST (C# LINQ!), type inference, code attributes/annotations + code generation -- all those things help out with productivity, and heighten the level of abstraction you can work with.
There is nothing "unstable" or somehow anti-"problem solving" or anti-"teaching" (their words!) in C#, or Java, or Python. Or C, or even PHP for that matter. The only difference between those languages is the availability of "modern" features and libraries. CLR (C#) and Java win the showoff hands-down in that regard, with PHP and Python being close contenders wrt. libraries. Methinks Python is somewhat higher, abstraction-level-wise, than Java, because generators come standard, and in Java you have to add rather niche libraries to get that. Popularity is good sometimes!
I recently took "enterprisey" C# and Java courses at a big 10 CS department, where they stressed how the modern features and lots of libraries help with rapid development and prototyping.
I admit that there's a lot of niftiness there that is rather absent from Delphi. I'd say that the combined power of LINQ, extension methods, lambda expressions, and Enumerable give a lot of flexibility and aid IMHO in declunkifying the code. Same goes for Java's code generation in various ORM frameworks, yielder, etc. It's all about how easily you can express yourself in code.
Blindly sticking with C (they don't) or Delphi (they do) hides a lot of good, state-of-the art programming language features. I see absolutely no reason why those
can't be taught even in introductory courses.
I have some rather passing exposure to Ocaml, and some more to Common Lisp, and I of course agree that all the hullaballoo about C#/Java is somewhat overblown in the sense that you could implement every feature of Java or C# in Lisp a good decade or two ago. What's missing from niche languages like Ocaml or Lisp, though, is decent, standard, widely-deployed libraries. There are of course plenty of libraries for C, but there's usually a few mutually incompatible "decent-enough" implementations of common things and that's rather unproductive to the end user -- how many string implementations do we really need? This also applies to C++...
If business sense and out-of-school applicability be damned, I'd be all for teaching Lisp and Logo.
If Lisp's flexibility be damned, one could argue for Ocaml and Logo, but then you can of course do F# and Logo, and that can all run on CLR so that can be taken directly to a .net shop and be applied. I presume that Python is a sane middle ground -- performs well enough
A successful API design takes a mixture of software design and pedagogy.
You haven't taught anything but how to point and click.
Except for introducing the concepts of components, objects, properties, events, syntax, variables, assignment statements, and build cycles, that is.
At the beginner level, what they did is exactly as much real programming as the traditional, "Don't worry about this boilerplate int main stuff, or the odd acronyms you're typing at the prompt, I'll explain it later," is in C-based classes.
At the advanced level, it is just as much real programming as parser-generators are.
"In short: monolinguism can be the result of mediocrity, but it can also be the result of a conscious aim to know one language in as much depth as possible rather than lots of languages at a basic level."
You mean to tell me that you know good programmers -- programmers who understand who computers work, and adapt to situations, who choose the right tool for the job, who are always able to do that and yet only know ONE programming language? I agree with a number of things in your post, but really, monolinguism? Monolinguism?
Monolinguism is ALWAYS the mark of a bad programmer. Choosing to concentrate on one may be the mark of a good programmer who is obsessive and wants to be the best in one thing, but if that programmer doesn't know (to the extent of having explored, played with, written some things to get the ideas of) more than one language, that my friend, is a bad programmer. He or she has only a hammer, and everything around him or her is a nail.
Monolinguism takes your perfectly good argument to an extreme where it doesn't begin to stand up.
PS. Learn a little of the second language used in your city. It'll give you an insight into how the two languages play off one another. You're getting good at communication on a simple verbal level by learning just one (sounds like a good plan) but you're missing out on the cultural aspects of a two language environment. You don't have to get good at it, but not knowing any at all cuts you off from the cultural differences which cause only 90% of the population to be bilingual.
Like when you teach someone to write the "Hello World program in C, you are only teaching them to type on an editor.
I just listed the steps in projects 1 and 2. I did not relay the teaching that went along with it - which involved much exploration of what was going on behind the scenes.
This was taught in a short series of two one-week courses and the projects I listed consumed about 90 minutes of those 80 hours.
Yep, helloworld.c isn't teaching C. Anyone who says otherwise is probably employed as a professor at MIT.
Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
I didn't spend five minutes on two simple projects as you assume. For future reference, read the whole post. The projects were the basis for teaching. Not the teaching itself.
wow, how incredibly out of touch these people are. If anything the only language that should be taught is C as most others are derived from it or use the same principles. C is the greatest gateway language. VB 6 or VB.Net instead of C
A Better Facebook - a facebook alternative that takes user privacy seriously and will have community-driven features. http://bit.ly/9Kxy1p
Implementations of algorithms differ between languages! News at eleven! But you admit that they're the same algorithms, so clearly it's not necessary to use pointers to understand them. (FWIW the algorithm book I have is CLR, which uses an imperative pseudocode).
I'm currently studying this piece-of-shit course, and to be honest it comes as no surprise. The spec is brand new, my year is the first to actually use it. The resources are poor, the content meaningless, and the exams are stupidly easy, but with ridiculous mark schemes which seem to be answering different questions to what was actually in the paper. This is all down to the Chief Examiner, someone who my tutor has spent the last year fighting. She has no experience in "real-world" CompSci, she has just taught IT at schools for however many years. This means that the course just seems to be bolted together, a confusing, and outdated, mix of IT and CompSci. One minute youre learning about the differences between Floppies and Zip Drives, the next you're learning how to traverse trees with her own overprice proprietary software. Maybe I just hate this course too much, having endured a year and a half of it, but it seems that it simply could not get much worse.
Can you give an example of an optimisation technique that you would use in C that is a "bad decision" in a higher level language? I can think of many that are unnecessary (like moving expressions that don't change outside a loop, writing calculations so that constant expressions are separated out, algorithm strength reduction, etc.) but not bad. In many cases these will be cleaner anyway.
So was the original Dartmouth BASIC.
So this is just a question of semantics.
I say if you've done something in a language and could recall it, you've learned it. You don't have to be good in it to have taken the time to understand what it brings to the table (at least roughly) and the complications it's designed to get around and the complications it causes. Good enough.
You're thinking fluency/mastership.
OK. Then it's perfectly sensible to aim for mastership in one programming language. But if you haven't done the lower level learning on other languages, you'll never have the mental tools to achieve mastery in that one language.
It's excellent that you have a working knowledge of the minority language in your city. I know people in the US (yes, we're famous for this kind of crap) who have one language, and only one, and would insist that the people around them use only it. I married into another language, and have had the pleasure of meeting other guys in the same situation. One of which spoke not one word of his wife's native language, even though he had been married for 5+ years and had kids who spoke that language as much as they spoke English. I've met people from other ethnic groups with the same husband situation.
So you're a breath of fresh air.
Just for your future reference, while technically you can call what you did 'programming'.
By any acceptable definition of the word what you did was show how to use the Delphi gui, not teach programming, and that is a BIG distinction. You haven't taught anything but how to point and drool.
FTFY
I taught a class on Delphi to a group of mostly non-programmers. It was very successful.
You, sir, are one of the people directly responsible for the popularity of the "magic button" anti-pattern. Please resign today and help make the world a little bit better!
(Not a fat chance, I know - and I've seen how this particular approach is extremely popular in today's IT "education".)
And you, sir, jump to conclusions too quickly and have not had an adequate opportunity to learn from the past. You apparently also think that there's one approved way to approach any problem. Nonsense.
What little I do know do today's IT education includes design patterns which are a rehashed rephrasing of old concepts like modularity, code reuse and general software design, etc. If you were to take my class you might've learned about how Delphi specifically accommodates all of these things.
But if you were in my class with noobs, and railed against a couple of simple demonstrations in the first 45 minutes of the course, I may well have asked you to leave.