Computer Science Canada

High Level vs Low Level in education

Author:  mirhagk [ 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?

Author:  DemonWasp [ 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.

Author:  mirhagk [ 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.

Author:  Tony [ 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.

Author:  mirhagk [ 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.

Author:  crossley7 [ 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.

Author:  mirhagk [ 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.

Author:  Insectoid [ 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.

Author:  mirhagk [ 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).

Author:  crossley7 [ 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.

Author:  Insectoid [ 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.

Author:  mirhagk [ 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.

Author:  Tony [ 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"

Author:  Insectoid [ 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.

Author:  mirhagk [ 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.

Author:  Insectoid [ Sat Oct 22, 2011 7:18 pm ]
Post subject:  RE:High Level vs Low Level in education

Quote:
90% of the population would rather go to their homepage (google) and type in facebook then use the address bar.


Show me the study that says 90% of people set Google as their homepage. Most people I know just set it to Facebook or their email provider, or leave it at the default.

Quote:
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).


Say you need a screwdriver. Do you buy an entire toolset, including table saw, rotary, sander, files, and lathe? I think that's a more fitting metaphor.

Quote:
People do not like having to type to do things


Well, they'd better get used to it, or find a different field. Computer programming is typing.

Quote:
A command line on the other hand is completely foreign.


Now, I may be grasping at straws here, but when I was introduced to the command line I thought it was awesome and cool. You don't see people type into an IDE in the movies. You see them typing into a terminal. I think it's as likely to intrigue as terrify the students.

Another issue I have with IDEs is startup time. Maybe my school's computers just suck (well, we did just upgrade to Intel i7's) but it takes like 5 minutes just to open a new project. A text editor opens instantly, and the command line doesn't even have to open until you're ready to test your code.

Author:  mirhagk [ Sat Oct 22, 2011 7:43 pm ]
Post subject:  RE:High Level vs Low Level in education

Insectoid indeed your computers must SUCK! To open a new project even on our school's crappy computers it takes a matter of seconds. And on a good computer it takes even less. On mine it takes longer to click start a new project than for it to open.

And as for your metaphor, if they are the same price (which they are) then I'd get the entire tool-set. I don't know what moron wouldn't. Worst case scenario is they either collect dust in your attic, or get thrown out. That metaphor demonstrates my point A LOT more than yours, find a new one.

And about the homepage, the point is that non-computer people are incapable of setting their own home page, so it's set as whatever program last set it.

Author:  Tony [ Sat Oct 22, 2011 7:57 pm ]
Post subject:  Re: RE:High Level vs Low Level in education

mirhagk @ Sat Oct 22, 2011 7:03 pm wrote:
Okay tony, prove me wrong. Write up an explanation of how to write, compile, and debug from the command line.

I already did above. Here are the steps again:
1. open up a terminal (equivalent to opening up IDE)
2. type "interpreter program"
3. there is no step 3; your program is already running

(in a compiled language step 3 will be replaced with "type name_of_executable" to start your program)

mirhagk @ Sat Oct 22, 2011 7:03 pm wrote:
there is no way to learn more than 1% of any language, and no way to learn more than 1% of any tool.

most RISC architectures are very very small, making it easy to familiarize yourself with 100% of the language.

command line tools typically have small and very well defined interfaces.

This is a big argument in favour of starting with simpler tools -- it's easy to learn them really well.

mirhagk @ Sat Oct 22, 2011 7:03 pm wrote:
Keep in mind that 90% of the population would rather go to their homepage (google) and type in facebook then use the address bar.

90% of the population does not take computer science courses. This statistic is at least as valid as the one quoted above.

mirhagk @ Sat Oct 22, 2011 7:03 pm wrote:

People do not like having to type to do things, which is why the mouse was invented in the first place.

Just for laughs -- no. Pointing devices were in various levels of obscurity until they were pushed into the consumer market by Apple, in their typical "here's the future yo" way.
http://aaplinvestors.net/2009/01/10/25-years-of-macintosh/
John C. Dvorak @ 19 February 1984 wrote:

The Macintosh uses an experimental pointing device called a ?mouse?. There is no evidence that people want to use these things.

Author:  Tony [ Sat Oct 22, 2011 8:01 pm ]
Post subject:  Re: RE:High Level vs Low Level in education

mirhagk @ Sat Oct 22, 2011 7:43 pm wrote:
And as for your metaphor, if they are the same price (which they are) then I'd get the entire tool-set. I don't know what moron wouldn't.

You are thinking of the dollars price for tool-sets. You are not talking about dollar "price" of software tools. The metaphor is just fine.

Author:  mirhagk [ Sat Oct 22, 2011 8:09 pm ]
Post subject:  RE:High Level vs Low Level in education

Tony I really hope you don't actually believe that people don't like/want to use the mouse.

Also you can't just say type compiler filename because then students will type out csc C:\Users\mirhagk\Documents\school work\filename.c
and receive an error. So you must explain quote. Then if you want them to understand you must explain what's happening. You must also explain how to change paths instead of fully typing the file path each time. Point is, there is more to it than that. If you are willing to write a word document (or something equivalent if you hate Microsoft too much) that can describe to a completely new user how to get started with programming. You can assume that the programs are already installed. Note that if you insist of being thorough then there are many topics you'd have to talk about the command line, and the text editor, but you may skip over as much as you'd like, teaching students only what they should learn to get started. (past the hello world, because they need to know how to use it, not just go through a specific example, assume that the course will not touch on these topics again)

Author:  Tony [ Sat Oct 22, 2011 8:34 pm ]
Post subject:  RE:High Level vs Low Level in education

- I haven't said that people now don't want mice. I was pointing out that such want was not the reason for their invention.

- keep source files in home directory -- no need for directories.

- explaining quotes seems really straight forward. If you want some prior-knowledge analogy -- use of quotes in Google search is a good one. Though skipping that and saying "don't use spaces in file names" is hardly a bigger hurdle than any of IDE/language's "we'll just ignore this feature/language-part for now(and at high school level -- ever)"

Author:  mirhagk [ Sun Oct 23, 2011 1:59 pm ]
Post subject:  RE:High Level vs Low Level in education

People are used to ignoring 90% of features, programs now give many more features than you'd ever need. But the point is tony, if it was easy to teach, you'd be able to write a guide for it, but noone who advocates it seems able to write a guide for it.

Author:  crossley7 [ Sun Oct 23, 2011 2:48 pm ]
Post subject:  RE:High Level vs Low Level in education

mirhagk, that is because it is such a simple concept to compile from command line that you don't need a guide for it. I've used windows all my life and barely understand command prompt, yet within about 5 minutes I taught myself how to compile from command line. If you can learn what you need to know in 5 minutes, why make a guide for it?

Author:  Aange10 [ Sun Oct 23, 2011 3:00 pm ]
Post subject:  RE:High Level vs Low Level in education

crossley7 wrote:

If you can learn what you need to know in 5 minutes, why make a guide for it?


If it's so easy then why not

Author:  Insectoid [ Sun Oct 23, 2011 3:01 pm ]
Post subject:  RE:High Level vs Low Level in education

I think the biggest hurdle in using the command prompt is actually getting the tools themselves installed properly (on Windows). If we assume the school computers already have these tools installed then that's irrelevant.

Quote:
People are used to ignoring 90% of features


Where are you getting this figure from? I certainly don't ignore 90% of my programs' features. I might not use all of them all the time, but I don't ignore them. If I know I'm never going to use them I disable them or find a program with a smaller footprint that only includes the functions I need. You don't give Photoshop to someone who's never used MS Paint.

Author:  Tony [ Sun Oct 23, 2011 3:18 pm ]
Post subject:  RE:High Level vs Low Level in education

mirhagk @ Sun Oct 23, 2011 1:59 pm wrote:
But the point is tony, if it was easy to teach, you'd be able to write a guide for it

Here, let me mention it in this thread for the 3rd time
Tony @ Sat Oct 22, 2011 7:57 pm wrote:

I already did above. Here are the steps again:
1. open up a terminal (equivalent to opening up IDE)
2. type "interpreter program"
3. there is no step 3; your program is already running


No doubt you'll find some problem with it. "It's missing this explanation or that". You can nitpick as much as you want, and just about every argument would be applicable to your "IDE guide" just the same.

As Insectoid point out, I'm of course making an assumption that an ideal environment is set up and provided to users. If there are some limitations that favour one approach over another, then that is a different question.

re: 90% stuff -- you seem to be talking about feature bloat http://en.wikipedia.org/wiki/Software_bloat which is regarded as a bad thing. I strongly favour the UNIX approach to software where tools are specialized to do some minimal things, and do them really really well (as oppose to a commercial product coming out with "900% more features!" that don't work well, since people ignore them anyway).

Author:  mirhagk [ Sun Oct 23, 2011 3:19 pm ]
Post subject:  RE:High Level vs Low Level in education

Which browser do you use? I can show you countless features in that that you've never even knew existed, let alone used. Most companies use microsoft word, or some equilvalent, and there are so many features that they devote entire teams to organize the icons better. Yet most of the time people change font, line spacing, and type. That's about it.

Author:  Tony [ Sun Oct 23, 2011 3:42 pm ]
Post subject:  Re: High Level vs Low Level in education

I use curl. Your attempts to argue ad hominem scores you negative points.

Word comes with many many features because marketing guys wanted to sell site licenses to large businesses, which fall for more-is-better trap. Those 100s of extra features don't make "fonts/spacing/typing" better. In fact, when those basics are the only thing that a user does, all the other features get in the way (resource and UI footprint; software complexity introduces bugs).

Now, if you care to come back to the original topic of IDEs/compilers -- most of the time people change font compile programs. The unused features just get in the way.

Author:  mirhagk [ Sun Oct 23, 2011 4:48 pm ]
Post subject:  RE:High Level vs Low Level in education

Well people that don't know what their doing don't use the debugging, code organization and resource management features yes, but once someone learns them they become very valuable.

Also re: your guide. Are you serious tony? You think that's satisfactory for a complete beginner to computer science to understand? And you missed the whole code writing procedure. You missed what people should do if there's an error etc. Point is, if that was an introductory lesson to programming, kids who haven't programmed before would struggle pretty darn hard. I'm asking you to write something that you could actually give to someone who hasn't programmed before to introduce and teach them how to write and compile programs (of course not teaching everything about programming, just how to input and compile code)

Author:  Tony [ Sun Oct 23, 2011 5:05 pm ]
Post subject:  Re: RE:High Level vs Low Level in education

mirhagk @ Sun Oct 23, 2011 4:48 pm wrote:
but once someone learns them they become very valuable.

Once someone learns GDB, that is also a very valuable tool.

mirhagk @ Sun Oct 23, 2011 4:48 pm wrote:

Also re: your guide. Are you serious tony? You think that's satisfactory for a complete beginner to computer science to understand?

Absolutely serious. Next to the "guide" that you've posted for IDEs, mine seems more straight-forward.

mirhagk @ Sun Oct 23, 2011 4:48 pm wrote:

And you missed the whole code writing procedure. You missed what people should do if there's an error etc.

Presumably both the stand-alone compiler and an IDE compiler (could even be the same one under the hood!) will take the same code.

Author:  mirhagk [ Sun Oct 23, 2011 5:14 pm ]
Post subject:  RE:High Level vs Low Level in education

I never posted a guide. I was serious tony, I'm rewriting the school's guides. Each guide represents 1 weeks worth of work, and if you are able to write a decent guide, I will probably follow suit and write the rest.

And by code writing procedure, I mean how does someone enter code into the computer, remember that some students don't even know what a text file is, you need to explain the basics to these students.

Author:  Tony [ Sun Oct 23, 2011 6:02 pm ]
Post subject:  RE:High Level vs Low Level in education

mirhagk @ Sat Oct 22, 2011 6:15 pm wrote:
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...

Thought that was your benchmark for a guide.

But I'm not going to rewrite your school's material. I just picked a side of the argument opposite of yours, for the sake of discussion. I don't know what quality of students your school gets, and what your school hopes to accomplish with them. From the sound of it:

mirhagk @ Sat Oct 22, 2011 7:03 pm wrote:
People do not like having to type to do things...

mirhagk @ Sun Oct 23, 2011 4:48 pm wrote:
...kids who haven't programmed before would struggle pretty darn hard.

mirhagk @ Sun Oct 23, 2011 5:14 pm wrote:
...some students don't even know what a text file is...


maybe your peers will take too much of a hit to their self-esteem if the teacher ever lets go of their hand and requires a bit of critical thinking (to be fair this is a problem with secondary education in general). Perhaps the graphical drag-and-drop interface of building LEGO Mindstorm programs out of control "blocks" is the best way to keep students from failing. "Look mom, no syntax errors!"

Author:  mirhagk [ Sun Oct 23, 2011 6:26 pm ]
Post subject:  RE:High Level vs Low Level in education

LOL tony, it's grade 10 compsci that's the point. It's not supposed to teach them to be L33T programmers, it's supposed to hold their hand, introduce them to programming, and help them decide if they want to do it. That's why grade 11 has no pre-req. Whether that's right or not is a different story (personally I think compsci should start in middle school, and high school should have at least 1 mandatory course in it).

The point is of all the people I meet who are advocates of using command line, none are willing to write a guide for it. You can't just say "It should be this way" if you are not willing to help make it that way.

Point is, I have yet to meet any advocate of low level programming who have been capable of writing any sort of intro to the subject.

Author:  Tony [ Sun Oct 23, 2011 7:30 pm ]
Post subject:  RE:High Level vs Low Level in education

There is plenty of documentation on command-line environments out there. The Architecture of Open Source Applications has a chapter on Bash http://www.aosabook.org/en/bash.html written by Bash's primary developer and goes into deep deep details of some aspects.

So you must mean that it is me in specific who has not wrote a guide. Sure. You got me. I don't have enough time to regurgitate the information that is already there.

Author:  mirhagk [ Sun Oct 23, 2011 7:58 pm ]
Post subject:  RE:High Level vs Low Level in education

The problem is that the information is not made for a new high school level programmer

Author:  Dan [ Mon Oct 24, 2011 8:01 am ]
Post subject:  RE:High Level vs Low Level in education

I think it maybe more valubale to a higher schoolers programming career to learn how to read the manual for there complier then reading a dumbed down tutorial on using the GUI of an IDE.

Teach a student how to use a simple GUI to run there code in one IDE and langaue and they leave you along for a day. Teach a student to use the man command and they leave you alone forever (at least i can hope).

Author:  mirhagk [ Mon Oct 24, 2011 9:41 am ]
Post subject:  RE:High Level vs Low Level in education

But again Dan, reading a manual for a compiler requires some knowledge of how compilers work. This may be acceptable at a higher level, but not for grade 10 intro to computer science.

Author:  Dan [ Mon Oct 24, 2011 10:09 am ]
Post subject:  Re: RE:High Level vs Low Level in education

mirhagk @ 24th October 2011, 9:41 am wrote:
But again Dan, reading a manual for a compiler requires some knowledge of how compilers work. This may be acceptable at a higher level, but not for grade 10 intro to computer science.


Have you ever looked at a unix/linux man page?

For example take a look at the ruby man page: http://www.manpagez.com/man/1/ruby/

There is no need to understand anything about how compliers work, compiler theory or programming language design to read and understand that. It's just a manual for how to use the command and most linux and unix installs come with the man command installed and with man pages for most of your programs.

It's better to learn how to learn (in this case read man pages) then to simply be tough a single task you can only repeat exctatly with no deviation.

Author:  mirhagk [ Mon Oct 24, 2011 10:30 am ]
Post subject:  RE:High Level vs Low Level in education

Oh yes I agree tony, but that's why we like to focus on things like debuggers in school. Then when the students have problems they don't understand, they are able to find them on their own instead of having to ask us or classmates or on this website each time. Debugging is the most useful skill to have I think, so it's one of the major reasons we chose using Visual studio, which has the best debugging tools.

Author:  Tony [ Mon Oct 24, 2011 10:45 am ]
Post subject:  Re: High Level vs Low Level in education

Dan @ Mon Oct 24, 2011 10:09 am wrote:

Posted Image, might have been reduced in size. Click Image to view fullscreen.

mirhagk @ Mon Oct 24, 2011 10:30 am wrote:
Oh yes I agree tony... herp derp debugging tools.


- A wild "I agree tony" has appeared!
- mirhagk uses: go off on a tangent (it's not very effective)

I think this discussion has concluded. Thx Dan!

Author:  mirhagk [ Mon Oct 24, 2011 11:08 am ]
Post subject:  RE:High Level vs Low Level in education

LOL Okay. Sorry was discussing this with my teacher, and he agreed to do command line as long as we could still do debugging, which is probably the most important skill (you guys know how hard it is dealing with students who can't figure out their own problems).

I thought talking about that would be the best way to get you guys to tell me about how to debug with command line.

Author:  Tony [ Mon Oct 24, 2011 11:22 am ]
Post subject:  RE:High Level vs Low Level in education

debugging is not really command-line specific.

- read code, reason about it
- use print statements to follow execution
- use assert statements (or print) to validate your assumptions about state
- in high school you are not going to be doing anything complicated enough to warrant an advanced debugger to make sense of things, but there's always GDB

Author:  Insectoid [ Mon Oct 24, 2011 11:25 am ]
Post subject:  RE:High Level vs Low Level in education

So, I was in a lab today using Visual Studio 2010. I opened it up, and was prompted to select an environment. I picked visual C++, the prompt disappeared, VS tried to start up, and it crashed. So I launched it again, it opened, and I tried to open a new project. Because I'm on a school computer I like to save to my network drive. So I selected that as my save location. When I clicked 'create project' Visual Studio complained that it couldn't save to N:\, because it was a network drive and therefore an unsuitable location (lolwut?) so is saved in my temporary local folder. F

or some reason the gui layout was not the default, and the button to add a new item to the project was not there. I clicked 'reset to default layout' but that didn't do anything. I had to close and re-launch Visual Studio four or five times before it would open to the proper UI, AND it wouldn't open my previously created project so I had to make a new one.

After all this, I was finally able to do my work. THIS is the kind of overhead we're talking about. The extra 'features' that I don't use got in the way and reduced my productivity. I've been using VS semi-regularly since last september and I STILL struggle with it, and you want to give this to kids who've never, ever programmed before?

Author:  2goto1 [ Mon Oct 24, 2011 1:19 pm ]
Post subject:  RE:High Level vs Low Level in education

Command line versus not is not a lower level versus higher level thing, it's just a tool thing. But I concur, it is feasible to use. It was feasible to do so decades ago before IDEs were commonplace in high schools. I also think that a lower level machine instruction language is a useful language of choice for a first programming classes as well and would recommend it in high school curriculum because:

- it gives the opportunity to connect the dots closer to computer architecture and programming
- It forces kids to focus on algorithms and problem solving, instead of focusing a lot of unnecessary time on useless bells and whistles of graphics, music, etc., thereby limiting the tangents that they can go off on (graphic design, music composition, etc.) so that a computer science class can remain focused on computer science

The classes should be designed to strike a balance between frustrating and fun. Grade 10 and 11 kids are not the most patient and autonomous when it comes to encountering obstacles.

Graphics, music composition, etc.are useful skills to learn but their benefit and purpose is questionable in an intro programming / computer science class. Other types of intro classes with different tools might be better places for them.

Author:  mirhagk [ Tue Oct 25, 2011 7:19 am ]
Post subject:  RE:High Level vs Low Level in education

@insectoid, yes there is a lot of unneeded features, but there also are a lot of features that the current grade 10 class is looking at when I program in it, and they want to use it. The current grade 10's think that C# and visual studio should be used in the course, so I think I am going to go with what the students say.

In terms of low level programming, I'm thinking we should actually do it, since the current course spends 12/20 units on Turing 4/20 on C++ 2/20 on HTML and 2/20 for the dumb careers in compsci required by the ministry. I'm thinking about switching turing to C#, then for the 6 units doing something more low level, possibly even some HLA (not allowing the high level constructs, just using the standard library) or MASM if I can find some standard library for it. It'd be really intense and difficult, but it'd be after the other programming, so it might be possible to do.

Author:  Insectoid [ Tue Oct 25, 2011 9:21 am ]
Post subject:  RE:High Level vs Low Level in education

Quote:
The current grade 10's think that C# and visual studio should be used in the course


Are you sure grade 10's are qualified enough to make that decision? If that logic held up in math I'd still be doing basic algebra.

Author:  crossley7 [ Tue Oct 25, 2011 1:08 pm ]
Post subject:  RE:High Level vs Low Level in education

Then get them to learn it on the side. That is what anyone curious to learn a new language does. I wasn't taught C++ by anyone yet it is what I use most of the time now unless it is a really basic program that requires graphics. At that point turing is quicker to do

Author:  mirhagk [ Tue Oct 25, 2011 4:13 pm ]
Post subject:  RE:High Level vs Low Level in education

My point insectoid is that it's what people want to do, and it's based off what interests them, and what they would be able to understand, which is the point of this argument. I know that learning more advanced topics gives deeper understanding but the discussion has long since diverged from the topic of learning in depth how something works vs abstracting/skipping over stuff to get through it, into the discussion of low level being more difficult to learn or not.

I actually meant to originally discuss whether things should be done in high level of detail and be very difficult and not cover as much, or be lighter, more abstracted and cover more topics, just not as in depth.

In terms of what I wanted to discuss think depth first search vs breadth first search, that was my original question, but I guess I wasn't clear enough and we diverged into this other topic.

Author:  randint [ Fri Jan 20, 2012 5:57 pm ]
Post subject:  Ide

Well, using an IDE is far easier than command line, you see, why did programmers build GUI? Why do we have libraries to help us to get input and output? Why do I care about how exactly it is done in the background? I do not want to waste my time on doing these things, as it is completely useless whatsoever. I'm a Java programmer, and I use a lot of those classes to make GUIs, such as JFrame and ActionListener, yet I create my own classes, but all this is done in an IDE, it is called Eclipse for Java EE Programmers.

Author:  Tony [ Fri Jan 20, 2012 6:17 pm ]
Post subject:  Re: Ide

randint @ Fri Jan 20, 2012 5:57 pm wrote:
Why do I care about how exactly it is done in the background? I do not want to waste my time on doing these things, as it is completely useless whatsoever.

The next obvious step is to become a manager, so that you don't have to write any code at all. You wouldn't need to care how exactly other developers actually make things work.

Author:  mirhagk [ Fri Jan 20, 2012 9:36 pm ]
Post subject:  RE:High Level vs Low Level in education

I mostly make console line programs, since I mostly make programs to help me out in different classes (like physics and data management. I hate calculating large amount of numbers by hand). Benefit of console programs is that they are much quicker to write out, so if the only user is someone who will know how to read it (namely, me), then console is perfect.


: