Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

My high school is starting a program where, instead of following the 'traditional' method of teaching programming (learning variables, then operations, loops, methods, and finally OOP), students are immediately introduced to object oriented programming without any other programming knowledge.

Is this a good idea?

My personal view is that teaching OOP first is misguided - when I was introduced to OOP, I was able to appreciate the power it gave me when designing complex programs, as I was already familiar with procedural programming. Introducing students to OOP at such an early stage might make them ignorant as to the power and flexibility that OOP gives programmers.

There are also the practical problems - students might have a difficult time designing classes when they have not been introduced to methods properly (how they work, when they should be used, etc.). I don't have many details about the course curriculum, but by my understanding, students are to be introduced to OOP by their third lesson, after having been taught variables and operations (as well as standard input/output).

In case it's relevant, the language my school teaches in is C#.

share|improve this question

closed as not constructive by Steven A. Lowe, GlenH7, MichaelT, Glenn Nelson, ChrisF Feb 18 '13 at 23:04

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

1  
So what if they're ignorant of the power and flexibility? I don't have a good answer, but frankly too many students can't do OO or imperative programming well. I applaud trying something to do a better job of teaching. –  Telastyn Feb 18 '13 at 21:21
    
Too lazy to write a full answer, but no, I don't think starting with OO is the way to go. The key to programming is the analytical mind, and I think programming on the bare metal is how students should begin, in assembler, or maybe C. I think programming an Arduino or PIC, etc would be much better for a HS program. –  whatsisname Feb 18 '13 at 21:30
    
Are there other classes where they teach free, as in non-Microsoft programming languages? –  ott-- Feb 18 '13 at 21:32
2  
@ott C# is free and open standard. The Mono Project makes extensive use of that fact. –  World Engineer Feb 18 '13 at 21:39
1  
Sorry, but I'm voting to close as not-constructive. As phrased, this question is going to elicit debate, not answers. –  GlenH7 Feb 18 '13 at 22:23
show 3 more comments

7 Answers 7

I believe it's a bad idea to teach object oriented programing first. My friend who took a course at a university where they taught OOP right away didn't properly learn how things worked. I believe not focusing on paradigms and not using classes is a good approach to introducing programing. Get familiar with the primitive data structures and flow control before learning OOP specific features.

share|improve this answer
    
A High School is not an Univerity. –  ott-- Feb 18 '13 at 21:28
    
@Ott-- that is true, assuming that students put in less work by themselves at a high school level than a university level, then it's even more reason not to teach OOP in high school before covering the fundamental syntax. –  user66282 Feb 18 '13 at 21:39
    
I have to agree. My college tried to teach OO first. Students who didn't fully understand functions/procedures were supposed to learn what classes and objects were and how to use them. It was a good way to not get students interested in programming and it didn't help them understand programming beyond learning the "everything is a class" mantra. (I have nothing against OOP, but there's other stuff that needs to come first.) –  Philip Feb 18 '13 at 22:57
add comment

I really think not.

Like many programmers of my generation, I learned using BASIC as a child, and I still think it has tremendous advantages over other more "modern" languages for those who are just starting to learn.

I think it may depend upon existing exposure and age (and what do you mean by the first thing they learn - kids as old as 2 or 3 are playing with tablets all the time now), but I have not seen any studies which looked at this at any age.

From a usability perspective for real neophytes, I think things like Python's white space and semicolon requiring languages (or JavaScript's automatic semicolon issues) can be a hindrance, but again, it depends upon their other experience to computers and keyboards etc.

I think a big mistake of people talking about the language to be taught is that they approach learning programming from the language at all instead of more holistically about all the gaps in people's computer experience. Some beginners are not familiar with the computer, or the names of special characters, etc. I expect this is actually GROWING rather than declining with the diminishing exposure to desktop computers in the home and decline of laptops compared to tablets among kids. I remember early computing courses I attended (talking TRS-80 days again) concentrated on flow charts, but that seems to have completely gone out of vogue.

share|improve this answer
add comment

I think there are many ways to teach programming, it really depends on the course content and the teacher, they may have a really good approach to teaching the concepts. I don't think you can really judge the quality of approach without knowing the whole story. This question feels like it is asked with a bias of expectation, highlighting how it can fail based on that expectation, rather than perhaps the course creators vision of how they want to build the concepts and teach.

share|improve this answer
add comment

I believe that there are at least two levels of writing code:

  • writing code that does the task that it is supposed to do;
  • writing maintainable code that does the task and is also maintainable.

According to me, OOP is mainly about writing maintainable and understandable code. I think that when you learn programming it is hard enough to write code that just does what it has to do. This does not mean that writing clean, structured, and object oriented code is less important, it just means that it is too early to speak about that problems.

I would not introduce OOP concept in an early stage of learning of programming, because you can appreciate the advantages of OOP only after having written at least medium size programs.

share|improve this answer
add comment

I think C# is an excellent choice. You can get some pretty cool applications up and running with minimal knowledge. OO programming is not very different, if not identical to procedural programming in many ways. The students will still have to learn procedural style programming when they implement methods, but they will get to make much more interesting programs because they can make use of existing classes and/or overriding methods in those classes.

The trick at high school level is not to teach the students the ins/outs of programming but instead to get them "hooked" on programming. If they can build a really cool graphical application that does some neat things but learn only very basic programming, that will go a lot further than teaching them procedural coding but they have to use the console window that only allows textual input/output like they would end up doing if they started using a procedural language.

There are probably very many potential good programmers who lost interest after having to work with just cin, cout, scanf and getch().

share|improve this answer
add comment

I think is a good idea because maybe then they won't write procedural code in a OO language as many programmers do. Of course they will not write good code from start or understand the concepts deeply but they will in time. Probably they will see it natural to use polymorphism and strategy pattern instead of many if-elses or switch.

Regarding procedures I believe is a good idea to learn with the idea of encapsulation from start; in OOP your procedures (methods) are not global and do no access global data so your are more restricted when writing them. If one learns this as a native and proper way, it will probably write better code with fewer dependencies.

However I believe OOP is probably better suited for university not for highschool.

share|improve this answer
add comment

I was teaching an introductory course to programming a while ago. In order to prepare my class, a few months before starting, I read a great book named:

Reflections on the Teaching of Programming: Methods and Implementation.

The book covers research about different approaches to teaching programming on different universities during a long period. This includes techniques as objects first, functional programming first, apprentice-learning, model driven, etc., etc.

I defintely think it is a good start to get a good answer to your question.

Now a great book on how to teach objects first is Objects First with Java: A Practical Introduction Using BlueJ.

The book is very well designed thinking on teachers and students. Your lessons are already well prepared and I like the approach, even when I did not use it.

I taught my class first using an imperative style with Python and then, in a second class, I moved to the object-oriented model, mostly using the Karel The Robot: A Gentle Introduction to the Art of Programming and the students loved it. I think I could have tought programming with the object-first aproach using any of these two books. Evidently, these are for introductory courses. And some videos of University of Standford that I have seen seems to use these same approach.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.