I went through the computer classes that my high school offered (Pascal) as well as going through a CS program at Montana State University (started with C and Ada, OO concepts in C++, as well as assembly, and alot of theory, as well as some Java, Lisp, Perl...). After all that, here are my thoughts...
An introductory language should really give a good overview of control structures and data structures, as well as some (albeit high-level) overview of memory management and resource usage/allocation. Jumping into a full OO langage at this level is, in my opinion, a very bad idea. Java is a great language, and I use it every day at my job, but it's not a good first step. One of the things I was taught in college was to know how something (in this case yacc and lex) works, not just be able to use it. A foundation in procedural programming gives you a good starting point to learn assembly or OO, but I don't feel that OO is a good starting point to learn procedural or assembly. There's also a difference between using memory management and knowing how it works. If you don't understand how the memory is allocated, and how it is paged in and out, and the language's ordering of, say, multi-dimension arrays, you could write a program that loops through that array in an inefficient manner.
OO is a great tool in your toolbelt, but it isn't always the right tool for the job. In this case, I would say that an introductory course should give a good overview of the core of programming, which is control structures and data structures, with a high-level understanding of what's going on behind the scenes (pay no attention to the man behind the curtain). As far as higher education is concerned, the whole purpose of a degree in CS is to give you the knowledge foundation to go out and make intelligent decisions as to what you're going to write, how you're going to write it, what language you're going to use, what algorithms you're going to use, and WHY. The biggest piece is the WHY, because I have alot of friends that don't know WHY they do something, it's just the way they were taught.
I agree with the argument about peers, but I think the core of it all stems from lack of parental involvement in kid's lives. If the parents actually took the time to get to know their kids and love them, then they would have a pretty good idea of what their kid needs and what he/she is going through. Without a loving, moral household to grow up in, our kids are forced to seek out that love and attention through their peers, which leads to the points you raised above. I wasn't a popular kid in school, and I was teased and made fun of for some things, but when I went home I was always loved and cared for, and what I said or thought was important. That, more than anything, helped me deal with the hard time I was given in school, because I knew that they were being crass and shallow. This is just my opinion, but I'm sick of the media and anyone else that talks about "the plight of our youth" ignoring the first line of defense, the parents.
I went through the computer classes that my high school offered (Pascal) as well as going through a CS program at Montana State University (started with C and Ada, OO concepts in C++, as well as assembly, and alot of theory, as well as some Java, Lisp, Perl...). After all that, here are my thoughts...
An introductory language should really give a good overview of control structures and data structures, as well as some (albeit high-level) overview of memory management and resource usage/allocation. Jumping into a full OO langage at this level is, in my opinion, a very bad idea. Java is a great language, and I use it every day at my job, but it's not a good first step. One of the things I was taught in college was to know how something (in this case yacc and lex) works, not just be able to use it. A foundation in procedural programming gives you a good starting point to learn assembly or OO, but I don't feel that OO is a good starting point to learn procedural or assembly. There's also a difference between using memory management and knowing how it works. If you don't understand how the memory is allocated, and how it is paged in and out, and the language's ordering of, say, multi-dimension arrays, you could write a program that loops through that array in an inefficient manner.
OO is a great tool in your toolbelt, but it isn't always the right tool for the job. In this case, I would say that an introductory course should give a good overview of the core of programming, which is control structures and data structures, with a high-level understanding of what's going on behind the scenes (pay no attention to the man behind the curtain). As far as higher education is concerned, the whole purpose of a degree in CS is to give you the knowledge foundation to go out and make intelligent decisions as to what you're going to write, how you're going to write it, what language you're going to use, what algorithms you're going to use, and WHY. The biggest piece is the WHY, because I have alot of friends that don't know WHY they do something, it's just the way they were taught.
Sorry if I rambled...
I agree with the argument about peers, but I think the core of it all stems from lack of parental involvement in kid's lives. If the parents actually took the time to get to know their kids and love them, then they would have a pretty good idea of what their kid needs and what he/she is going through. Without a loving, moral household to grow up in, our kids are forced to seek out that love and attention through their peers, which leads to the points you raised above. I wasn't a popular kid in school, and I was teased and made fun of for some things, but when I went home I was always loved and cared for, and what I said or thought was important. That, more than anything, helped me deal with the hard time I was given in school, because I knew that they were being crass and shallow. This is just my opinion, but I'm sick of the media and anyone else that talks about "the plight of our youth" ignoring the first line of defense, the parents.