Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 High Level vs Low Level in education
Index -> General Discussion
Goto page 1, 2, 3, 4  Next
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
mirhagk




PostPosted: Fri Oct 21, 2011 4:33 pm   Post subject: High Level vs Low Level in education

An interesting debate came up today in my computer science class, and it's a fairly common debate. Should programming classes use IDE's and high level languages to abstract the work and difficulties away from the programmer, or should they teach them command line, and low level languages, so they can truly understand what they are doing.

Both sides of the argument are missing the key point of the argument. The argument is not about which you would rather use (as many believe it is, arguing which is a better system and what not). The argument also isn't about which would be better to know. The argument is, in a classroom setting, which is a better system to teach.

Many advocate low level, as it's better to know, and I concur on that point, I personally believe that until you have coded in assembly, you have not learned enough to call yourself a programmer. However I don't believe that the average joe can start off learning assembly, or even command line. Already courses are crammed full of junk the board requires, meaning there is not enough time to actually learn how to code. If that precious time is spent on learning how to compile from a command line, or what a pointer is, or making their own functions for string manipulation and sorting, then there will be very little time left to learn programming.

Low level coding is more time consuming to learn, as well as MUCH more scary to a new programmer.

I believe the issue comes down to one thing. Do the courses exist to test students on their competence, and let those who excel rise up to the top (as in low level), or to teach all the basics of it, even if those students will never touch a computer again, and don't currently understand that internet explorer is NOT the internet. Is computer science a field with few jobs for a large workforce, or is it a field with many jobs, and a small workforce.

I also think people overlook the causes of what makes a copy-and-paste programmer, and what makes a programmer who does not understand anything. Does it have to do with being spoon-fed (not learning enough of how it actually works), or does it have to do with just plain interest?

I'd love to see some research on this last point, and for my data project, this is what I will be doing. In the grade 10 class I help out in, the students who know what a pointer is, and who understand what a compiler does are the students who are interested in it. They are the students who take the small assignments and take them too the extreme (overkilling them). The ones who don't understand really don't care that much. We teach them what a compiler is, and the ones who get it are the ones who are interested, not necessarily the ones who are smart.

I'd like to know other people's views on this, so please share yours. And please leave out discussions about whether language X runs faster than language Y, or which is a better language for someone to use. I am merely talking about which should be used in a high school setting. My school will be rewriting the grade 10 course this year, so if someone desperately believes in low level teaching, perhaps they are willing to actually help write the course material?
Sponsor
Sponsor
Sponsor
sponsor
DemonWasp




PostPosted: Fri Oct 21, 2011 4:54 pm   Post subject: RE:High Level vs Low Level in education

One of the key obstacles to overcome in teaching is loss of interest. There's a steep learning curve to pretty well anything in programming, and without a reason--a goal--most people simply won't bother. Worse, programming is a lot more involved than most people outside the profession believe*, so creating even relatively trivial applications is time-consuming and requires a lot of knowledge.

The steepness of the learning curve drops off after a while: a professional programmer can pick up new concepts, languages, frameworks and so on with relatively little effort, once they have the basic mental framework to handle this kind of abstract information and reasoning. Getting to that point, however, requires a dedicated and concerted effort. Usually, that requires that students be able to measurably progress to a goal.

In terms of high-level versus low-level, the problem I see is that the choice shouldn't depend on the instructors or technology or workplace. Instead, it should be based on that students' goal. If student A wants to learn exactly how a CPU works and student B wants to learn how to show webpages, then there is no language, course or book that will satisfy both. Clearly, an elementary knowledge of each is necessary to both A and B, but if you try to teach PHP/ASP/JSP/etc, then A will probably be bored to tears; similarly, if you try to teach C/ASM, then B will be bored.

If you fail to establish a goal in the minds of students, then both A and B will be bored no matter what you teach.

I don't believe either high-level or low-level is inherently "scary". Low-level is scary because you have to learn a lot of things (compiling, basic CPU design, ...) before you can get started. High-level is scary because you're relying on dozens of systems underneath you (OS, servers, protocols, libraries, ...) to work as expected, which means reading a lot of documentation on how they work.

* This is almost certainly true of a lot of professions, it just seems particularly well-hidden in programming.
mirhagk




PostPosted: Fri Oct 21, 2011 5:40 pm   Post subject: RE:High Level vs Low Level in education

But you must agree that the learning curve is a lot steeper with C then it is with Java/C#/Turing etc. To make a project that demonstrates something tangible to the user requires merely a day with a high level language (assuming everything is installed and set up already), where to make anything equivalent with C or ASM requires more time.

Another argument for more high level language/environments is that it is easy to allow students to program in whatever language they desire, so teaching for those students who have a harder time understanding, and allowing the skilled programmers to go deeper on their own is a system that works well.
Tony




PostPosted: Fri Oct 21, 2011 6:28 pm   Post subject: RE:High Level vs Low Level in education

well, no. Java is a terrible example, because the learning curve goes something like this -- "welcome to Java. Ignore everything but the bolded part"
Quote:

class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

Sure, you have something tangible up on the screen. You also understand maybe 25% of the characters that you've just typed out. Some languages hide that complexity away by making a bunch of stuff implicit.

Do ~45 instructions of MIPS assembly have a steeper learning curve than understanding what it means for main() method to be static? Hardly. Are you going to argue that it's easier to write an application server in Java? No kidding. But this is very domain-specific applications. You could make a "3D game" by drag-and-drop'ing some things around in Unity3D. The "actual complexity" per "amount of understanding" ratio is off the scale!

Picking a language first is not the right side of the problem. What particular concepts are you hoping to teach? Do you want to delight students with making an image spin on the screen? There are tools for that. Do you want them to build the formally mentioned tools? There are other tools for that. How about algorithms and data-structures? Why, those don't require any programming at all! We can spend years doing nothing but Math, finally emerging with a CS paper for someone else to implement.
Latest from compsci.ca/blog: Tony's programming blog. DWITE - a programming contest.
mirhagk




PostPosted: Fri Oct 21, 2011 7:38 pm   Post subject: RE:High Level vs Low Level in education

Well the grade 10 course right now focuses on variables and basic data structures, if statements, loops (for and regular), functions and graphics (it's in turing).

I think the goal of a grade 10 class should be similar to this. It introduces the concepts of programming and also shows students some cool things for making games.

Here's one of the ideas we're thinking of doing:

Switch to using a system where the students create functions to manipulate objects in a visual system. For instance we'd create a maze program, and the students would write a program to solve it. Other things would be writing artificial intelligence, sorting algorithms etc.


I'm not sure about this idea, but grade 11 does not have a grade 10 pre-req, so we can't rely on any knowledge of this course in grade 11. This might provide a neat abstraction that might interest them, and teach them. Essentially it'd be like scripting as a course.

Another idea is to switch to C# and use console applications. Teach the students ifs, loops, etc, and then in grade 11 we could go over this quickly, expecting more of the students who didn't take grade 10.

Let me know if anyone has any ideas.
crossley7




PostPosted: Fri Oct 21, 2011 9:10 pm   Post subject: RE:High Level vs Low Level in education

From my experience, both have advantages, disadvantages and limitations. First, so you know where I am coming from, my comp sci classes in grade 10 and 11 consisted of no algorithms (I have no idea what O(log n) efficiency truly means, but know that it is super efficient) and really only covers extreme basics (functions are not mentioned until grade 11) and so I taught mysself how to use turing and then once the class was learning java in grade 11, I taught myself parts of C++ since I find it to be an easier language to look at and various other reasons. Then this summer I worked for my parents developing business software applications using Filemaker Pro.

Java,Turing,C++ etc. are mid level languages that incorporate aspects of both low level (C, assembly) and high level (Filemaker scripts) programming.

I think that for grade 10 comp sci, the best option would be a language similar to turing where commands are somewhere between typical programming languages and real world terms that are understandable to the average joe. It will give them the basic knowledge and at some point basic concepts about algorithm efficiency, data structures and classes could be introduced.

In grade 11, you can do a 2-3 week summary of the grade 10 curriculum for those who weren't in grade 10 and then use a language such as C++/Java to learn more advanced concepts and how to implement some of the more efficient algorithms and using more advanced concepts to create functional programs.

Once you get to Grade 12, I feel that someone will have enough experience to be able to pick 1 of 3 or 4 languages that they will use to implement the course requirements (Python,C#, Java,C++) and also teach basics of PHP and MySQL for people that are interested in web design.
mirhagk




PostPosted: Sat Oct 22, 2011 1:02 am   Post subject: RE:High Level vs Low Level in education

I think if we go with the traditional model, what we would do is teach C# in grade 10 with console. Then in grade 11, move onto XNA, and in grade 12 actually get to advanced algorithms and what not. I think additional languages will be taught in our school's programming club, so interested students can learn, but focusing all on one language means that we could move much faster through it.
Insectoid




PostPosted: Sat Oct 22, 2011 10:13 am   Post subject: RE:High Level vs Low Level in education

I think that a low-ish level language with a very simple graphics library is what's needed. Keep the language simple enough to do learn quickly while providing the tools to keep kids interested.

Kids don't want to worry about pointers or how data is stored or what a class is. They want to make games or animations and have fun. From my experience a lot of kids didn't even mind producing very trivial games as long as someone in the class was making something awesome. Turing, although garbage for every other application, is excellent in this regard. It's low-level enough that you're forced to write a lot of common code, but high-level enough that you won't be overwhelmed.

I believe there are some people who 'just get it'. Maybe not right away, but fairly soon after beginning their education it 'clicks' and suddenly it makes sense. Students are used to regurgitating information on every test and then having maybe one assignment that requires you to put everything you've learned together to solve a single large problem. In a computer science class, every single assignment is that one problem.

Grade 10 compsci is mostly about exposure I think. Show the students what the field is about, keep it simple enough that everyone does moderately well, and then toughen up on the keeners that come back in grade 11. Nobody knows if they like to program before taking the
class so you get a lot of diversity.

Quote:
Is computer science a field with few jobs for a large workforce, or is it a field with many jobs, and a small workforce.


Every big company has an IT department. Every small company has a website. Everything with a circuit board in it has an engineer or computer scientist behind it. Pretty much every field requiring a degree is supported somewhere along the line by a programmer. All the software in the world was written by a programmer (except if it was written by another program, in which case, that program was probably written by a programmer). Hell, My school's co-op office hired one of its own computer science co-op students to completely streamline the co-op and employer application and placement process. I talked to representatives of two nuclear facilities in Ontario about a co-op position in IT yesterday, involving programming simulations of nuclear reactors, and re-writing old software for new systems. A computer science degree (and the experience it's supposed to come with) is probably the best degree to get, to guarantee a job once you graduate.
Sponsor
Sponsor
Sponsor
sponsor
mirhagk




PostPosted: Sat Oct 22, 2011 11:00 am   Post subject: RE:High Level vs Low Level in education

Insectoid that's my point. That's why I think the course should really be a "here's what you can do/let's interest students" kind of course instead of making sure they really *get* it. Computer science needs more workers, and the more people to advance the tech field, the less other jobs are needed (self serve lines at grocery stores are amazing, 1 employee to help 8 people at once, instead of 1 each).

I think abstraction is a great thing for students, which is a plus with turing's graphics libraries, however it does not have support for lists, or sorting, so if a kid wants to sort something, they need to learn that.

C#, while requiring some header code, abstracts pretty much any common function that a programmer will do. It has support for all the major collections, and more, while having a simple syntax.

Also with C# we can use the Visual studio IDE, which means students can open it up, create a console application, and just start typing code into the main function. It also provides dynamic library look up, so students don't even need to search through documentation or ask the teacher how to use commands that they haven't studied.

I think if turing had intellisense, library look-ups, and smart syntax highlighting/formatting, then it'd be the best language to teach, but without those students need to search the internet to see how to use commands (or ask me 1000 times a day, or fool around till it works lol). I scouted first couple of days for those kids that will go above and beyond course material, and showed them this site, as this is the only place that the students can look up turing commands (the documentation doesn't work at our school).
crossley7




PostPosted: Sat Oct 22, 2011 12:19 pm   Post subject: RE:High Level vs Low Level in education

You don't necessarily want people trying to use commands to do a simple thing such as a sort. Is a bubble sort that hard to show someone in turing that you have to have the option sort(array.start,array.end) for anyone to do a simple sort? Too many built incommands I feel is a bad thing and it results in a beginner student relying on these built in commands instead of trying to learn how to do those types of things and then moving up to a point where if they don't want to, they don't have to code the sort manually.
Insectoid




PostPosted: Sat Oct 22, 2011 1:18 pm   Post subject: RE:High Level vs Low Level in education

Quote:
Also with C# we can use the Visual studio IDE


I personally believe that IDEs are a bad idea for new students. It's not that hard to explain how to compile from the command line. There's no need to force this extra overhead on 'em. I have yet to find an IDE I like more than a text editor with syntax highlighting and the command line. There's nothing more infuriating than helping a student learn to use an IDE.

Say we have this thing called 'magic'. Magic does things we don't know, in ways we don't know, for reasons we don't know. We don't like not knowing things, so we try to minimize magic. An IDE adds magic. High-level languages like C# include a lot of magic. Of course, not having enough magic hurts too. Hardware is mostly magic, but we don't want to worry about that yet so it's okay. It's all about balance, and I think an IDE more complicated than Turing's (Turing's IDE is just a compile button and syntax highlighting, really) is detrimental to a student's learning.
mirhagk




PostPosted: Sat Oct 22, 2011 6:15 pm   Post subject: RE:High Level vs Low Level in education

Have you ever tried explaining what the command line even is to someone who hasn't programmed before? An IDE is not that difficult, you can ignore 99.9999% of the features at the beginning, and treat it as "create a project by clicking on the type you like, enter the name, now a central window pops up. It's like a text editor, type your code here". I find that people are against IDE's because they are TOO much, but they let you ignore most of the stuff, and they provide one thing that would be very difficult to explain how to do, debugging. With an IDE, click the line you want to stop at, it'll run, reach that line, and pause, now you can hover over variables to see what they look like.

If you can give me a way to explain how to write a program from the text editor, and compile from the command line that's easier than "Basically an IDE is like microsoft word for programming. There's a lot of stuff you can ignore now, as you won't need it until later. Open it up, and click create a project, choose your type, and now some code will pop up. You will be typing your code between the curly brackets that that follow the line "static void Main(string[] args)". The code that your given is basically all you need to get started, we'll learn about it all later. For now type Console.WriteLine("Hello");"

The thing is command line is unfamiliar to anyone who does not have experience with linux, which almost every student hasn't, and most who have already know programming.
Tony




PostPosted: Sat Oct 22, 2011 6:27 pm   Post subject: RE:High Level vs Low Level in education

Does the approach of "we'll use 1% of the tool's functionality to teach you about 1% of the language" not makes itself sound like there's some problem in there?

Students new to programming are just as unfamiliar with your IDE as they are with command-line. And yes, your explanatory paragraph littered with here be dragons is much harder to digest than "type: gcc your_file.c"
Latest from compsci.ca/blog: Tony's programming blog. DWITE - a programming contest.
Insectoid




PostPosted: Sat Oct 22, 2011 6:58 pm   Post subject: RE:High Level vs Low Level in education

Quote:
If you can give me a way to explain how to write a program from the text editor, and compile from the command line that's easier than "Basically an IDE is like microsoft word for programming.


1st year compsci students at U of Guelph have to remotely log into a server to edit their code in pico and compile in gcc. And by compsci students, I mean compsci students and every student who for some reason or other needs a first year programming course and has never programmed in his life. A friend of mine was one such student, and he did fine.

Quote:
they provide one thing that would be very difficult to explain how to do, debugging.


I've never used a debugger in an IDE. I've used GDB before, but mostly I just output state data to the screen. I'd rather let the students debug by hand at first (they won't do anything complicated enough to need a debugger anyway) so that they actually understand what they did wrong. Don't give someone a power drill before you teach them to use a screwdriver.
mirhagk




PostPosted: Sat Oct 22, 2011 7:03 pm   Post subject: RE:High Level vs Low Level in education

Okay tony, prove me wrong. Write up an explanation of how to write, compile, and debug from the command line. Keep in mind that in classroom's IDE's are explained in at most 5 minutes, and while navigating them WELL might take a little while, very few kids have trouble typing in and running their first program, especially if the IDE is taught with any skill at all (ie including pictures, or just by demonstration).

And yes tony, using 1% of a tool to learn 1% of a language may not be amazing, but there's no time to learn more than 1% of it. That goes for anything they would teach you, there is no way to learn more than 1% of any language, and no way to learn more than 1% of any tool.

Also there is nothing wrong with having tools that you rarely if ever use. For instance say I was using a screw driver, should I get a specific size/shaped one, since it's all I will normally use, or should I get one that comes with detachable heads just in case (assuming they are the same price).

Students are more familiar with an IDE, since it resembles the other programs they use (word, internet etc), and they know what a toolbar is, can figure out pretty easily how to do day to day stuff, and can be told in 2 seconds that clicking on a file in solution explorer will open it. A command line on the other hand is completely foreign. Keep in mind that 90% of the population would rather go to their homepage (google) and type in facebook then use the address bar. People do not like having to type to do things, which is why the mouse was invented in the first place.
Display posts from previous:   
   Index -> General Discussion
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 4  [ 51 Posts ]
Goto page 1, 2, 3, 4  Next
Jump to:   


Style:  
Search: