June 12, 2007 at 10:26 am
I saw article on new ways to teach computer science and I thought it was really interesting. I was expecting something on colleges having new classes, maybe starting to integrate more .NET and J2EE classes in with business problems, but I found a unique way of getting people interested in computer science.
The idea is basically that they're trying to make the classes more exciting using a programmable robot that kids have to make do certain things for their assignments. I think that it's a good blend that requires two difference skills: working with robotics, which will definitely become more prevelant, and also it could require some nice low level skills.
When we learn to read, we learn the A-B-Cs, the sounds, etc. and then read. While the methods of introduving these skills have changed slightly, the basic process is the same. We've tried to increase the speed at which you learn, but the basics are still required.
Which to me means that I think kids should still learn C, a low level language that allows you to so almost anything, but is unforgiving of mistakes. From there you can quickly progress to more modern languages and those basic skills will help you. It would be cool if the robot could be programmed in multiple languages, C for freshman, C++ for sophomores, and other languages in avanced years.
While that works for many students, there are definitely some of the best and brightest that might need new approaches. Computer Science is a unique area, it lends itself to a hobby that kids will experiment with before they reach school. Probably a good portion of CS students have had substantial exposure to some programming, something that wasn't the case when I entered college.
And maybe they could do more database work with kids, introduce them to BI and data mining, which are very cool. Let them analyze data from RFID chips or other widespread data gathering systems that can generate a lot of data from very cool sources. Like the movement of kids through a concert or plays called by a football team or something else.
I'm sure there could be interesting database problems as well. Maybe they could get to analyze Denial-of-Service attacks and learn to deal with sets of data. There are lots of interesting problems in the world and college students have tremendous capacities for examining them. They might not solve them all, but they you never know. Many great technologies have come out of colleges.
Steve Jones
Editor's Note: Steve is on vacation this week, so he will respond to this when he returns
Date: 6/20/07
Steve Jones
June 13, 2007 at 7:47 am
Great editorial!
Also, there should be more practical SQL taught. Not enough students are taught real-world SQL or basic database design. Perhaps if there is a robot in the curriculum, one of the database projects could be to (1) design a database to track tasks done by the robot (task type, student, task dates, etc.), and then (2) load the database with data from the tasks and finally (3) report on the data.
Just my two cents,
webrunner
-------------------
A SQL query walks into a bar and sees two tables. He walks up to them and asks, "Can I join you?"
Ref.: http://tkyte.blogspot.com/2009/02/sql-joke.html
June 13, 2007 at 9:14 am
If they do that you will definitely start seeing more of these types of inventions.
http://www.foxnews.com/story/0,2933,257698,00.html
It took the 22-year-old Cornwell about 150 hours and $400 in parts to modify a mini-fridge common to many college dorm rooms into the beer-tossing contraption, which can launch 10 cans of beer from its magazine before needing a reload.
With a click of the remote, fashioned from a car's keyless entry device, a small elevator inside the refrigerator lifts a beer can through a hole and loads it into the fridge's catapult arm.
A second click fires the device, tossing the beer up to 20 feet — "far enough to get to the couch," he said.
June 13, 2007 at 9:15 am
You know, it's hard not to be cynical when they are doing this stuff at the Grade School level. I love playing with my Lego NXT, and I gave one to my kids too, to inspire them, but doing this kind of thing in college is not impressing me. The problem with programming in colleges right now isn't simply a lack of interest, it's that they aren't actually teaching any programming skills, and all the interest in the world isn't going to help the workforce become more skilled, which is the real bottom line here.
In colleges and tech schools today, they are teaching languages (C#, Java), technology(.Net, J2EE), and applications(SQL Server, Visual Studio), rather than problem-solving, research skills, and basic algorithms. If you read the ads for schools you see that this is the focus, not skills which will benefit you in the long term. So it really irritates me when I read editorials that say "we should be teaching more SQL" because if anything, we should be teaching LESS SQL and more relational theory, set logic, and algebra.
The classes my intern is taking are essentially a long series of "How Do I..." workshops, which is great if you never face any problems outside the domain of that class. He is not being taught any programming skills at all. When he faces a problem, and he hasn't been given the solution prior to that moment, he's screwed. He is not being taught the skills required to define problems appropriately for computing, and doesn't have the basic toolbelt of known algorithms to choose from, so he doesn't know about a lot of problems that are solved already, and he is not being taught how to divide a problem into smaller units. I'm teaching him better myself, and respect for his grades is keeping me from going over to the school and giving them a piece of my mind.
"Type this code into the machine" is what's happening, and they aren't explaining what the code does. Dustin doesn't even know what a 'using' statement does in C#, he was just told it has to be there or your code won't work, which isn't even true. Setting up what libraries will be used by the compiler is something so basic you should probably understand it before you write any other code. There is a reason it's the first thing in the file.
Using robots to get young kids excited about technology and programming is really great, but frankly, if someone isn't interested by the time they get to college, they are not the kind of person who is going to be worth a damn as a programmer and I would rather they didn't learn it at all. Send those kids to the art department where they can excel at something. Stop trying to make them do things they are going to suck at!
10 year olds are doing this stuff - college kids need to do better:
http://mindstorms.lego.com/news/
I blogged this issue a while back as well:
http://smoothjazzy.blogspot.com/2007/06/decline-of-art-of-programming.html
June 13, 2007 at 9:47 am
So it really irritates me when I read editorials that say "we should be teaching more SQL" because if anything, we should be teaching LESS SQL and more relational theory, set logic, and algebra.
I agree in principle, and I think you are being very noble and optimistic about how much college students should be challenged, but in the real world, most college students are not going to get jobs where they will be working purely in relational theory, set logic, and algebra. I think there should definitely be a track such as the one you suggest, but I don't think that negates the reality of needing to learn SQL. Everyone puts SQL on their resumes yet few people are conversant in it.
Perhaps there can be two tracks - "Practical Track" and "Theory Track" with relative differences in what is emphasized. It is my opinion that every college student should do the practical track, and then move on to the theory track if they want to, or have more practical projects if they don't want the theory track. Frankly, I think it has been an oversight for years, where instructors have not realized how esoteric database topics can be, and they need to make students realize why the theory is relevant to the practice while at the same time acknowledging that there is practical knowledge (such as SQL) to acquire.
That is why I suggested teaching database design *and* SQL (whether in a robot class or a traditional programming class). Relational theory is crucial, and can be pursued in heavy detail for someone who wants to be a professor or a very high-level systems analyst. But given the lack of basic normalization knowledge, I think we can't put the cart in front of the horse. It's almost like trying to teach literary theory when students are having trouble reading at all. Practical normalization is needed for the real-world entry level database jobs that college graduates are likely to compete for, even if it means not demanding deep relational theory in that track.
And if a college student graduates knowing all of C.J. Date but cannot write a SQL query (as opposed to building one in the Access grid), they will have a very hard time getting a first job in IT. Even other languages such as Java, C++, etc. are being used with databases these days. College graduates need to be able to compete in the current world of database programming, and SQL is the common language.
Employers want someone who can write queries, not just talk about them in the abstract, and good basic training in SQL is a valuable skill that should not be underestimated.
That doesn't mean "dumbing down" the curriculum; it just means arranging the curriculum to ensure basic knowledge of SQL and database design and wrapping the topics of data modeling, normalization, and SQL into a coherent project that simulates an actual job of buliding a database application. That way, if someone finds that they are not good at or don't want to do the advanced stuff, they can stay in the practical track for a year to get credit and then either do more pratical projects or switch to another subject altogether.
Just my two cents,
webrunner
-------------------
A SQL query walks into a bar and sees two tables. He walks up to them and asks, "Can I join you?"
Ref.: http://tkyte.blogspot.com/2009/02/sql-joke.html
June 13, 2007 at 10:45 am
One of my teachers from more years ago than I care to admit is now in charge of the programming curriculum at one of my old schools. She hates the fact that they no longer have a course in programming theory because people wouldn't sign up for it and it wouldn't make. So she's stuck in every Language101 course teaching programming theory every semester.
At the junior/community college level, the desire is to 'learn C#' and get a job. And they may be an adequate coder, but they're never going to be a good systems analyst because they don't have the training and background in theory and analysis.
Job security for us!
-----
[font="Arial"]Knowledge is of two kinds. We know a subject ourselves or we know where we can find information upon it. --Samuel Johnson[/font]
June 13, 2007 at 12:51 pm
Yes, I see your point. I think that programming theory (and relational theory) courses should be offerred, since they should be available to show students that if they want to advance more they will have to take them. There are also big gaps in the fact that there never seems to be adequate college training for software testing and security to prepare students for the real world. So it is indeed a shame that such courses are being shelved. I think in that sense there is too much emphasis on practicality.
There is a case to be made for making them learn the theory and analysis in school (and for talking them into another major if they can't keep up), but even then the real-life work scenarios are always going to require learning something that is different from the way it was in the textbooks. So I guess there is no easy answer as far as I can tell.
Regards,
webrunner
-------------------
A SQL query walks into a bar and sees two tables. He walks up to them and asks, "Can I join you?"
Ref.: http://tkyte.blogspot.com/2009/02/sql-joke.html
June 13, 2007 at 1:14 pm
"And they may be an adequate coder, but they're never going to be a good systems analyst because they don't have the training and background in theory and analysis."
...which in my mind, is somebody who is not a good programmer and is likely contributing the degradation of the company's code and causing everyone else a lot of grief. College can't prepare you for everything, but it should educate you enough to make yourself prepared for anything. So, rather than teaching someone how to do something... teach them how to figure out how to do it. And that is my intern's main problem - he doesn't know how to read documentation, search for programming information, define what to search for in the first place, etc.
I actually helped him through a project the other day where he was trying to figure out how to use Office Automation. I showed him how to use F1 in Visual Studio to get to the help file for a class or type... but he didn't understand any of the information that was presented there and had no idea how to figure it out... he doesn't even know where to start. I showed him how when you go to Google and ask about this subject, you get a lot of pages talking about "primary interop assemblies" and when you see this kind of thing, you need to recognize that as a situation where further research about "primary interop assemblies" is required. His instinct is to simply ignore the things that he doesn't understand, and try to figure out how to accomplish the task anyway. This is going to eventually lead to someone who "knows enough code to get in trouble" and he won't be able to get out of it.
"Learn C# and get a job" is only applicable as long as C# stays around. When it goes away (and it will), are you going to be one of those programmer who is capable of learning whatever the new thing is, or are you going to be going back to school? I know who I want to be. (And I suppose that's the point... if someone doesn't want to be what I consider a good programmer, fine - that's their own deficiency and when it bites them in the ass, it won't be my problem, but I will be there to say "I told you so")
I suppose I'm irritated by the fact that people don't seem to accept the lack of interest. Cancel the class and move on. If people don't want to learn certain things, why try so hard to get them to learn it? If they aren't interested in it, chances are they are going to be horrible at it anyway.
June 13, 2007 at 1:17 pm
FYI, I did have the advantage of a fairly good understanding of CJ Date, *before* I ever typed a single SQL statement. It is not impossible to teach it that way, and I think it's the whole reason why I "get it" and other people "don't get it", regardless of how much SQL they know.
June 13, 2007 at 1:27 pm
"His instinct is to simply ignore the things that he doesn't understand, and try to figure out how to accomplish the task anyway."
I think this is more of a problem than how much SQL the person does or does not know. That just sounds like a lack of motivation to learn. Somehow I suspect that this issue has little to do with the way the person learned in college and probably dates back a lot farther.
I understand the "teach a man to fish" rather than "give a man a fish" philosophy, but I think it goes only so far. At some point you have to commit to learning a specific method or language. Learning how best to learn is certainly commendable, but you also then have to do the learning too. If this person has no interest in the second part, then that is not a problem with the curriculum but with the person's attitude.
webrunner
-------------------
A SQL query walks into a bar and sees two tables. He walks up to them and asks, "Can I join you?"
Ref.: http://tkyte.blogspot.com/2009/02/sql-joke.html
June 13, 2007 at 1:31 pm
Yes, I agree. All I was saying was that you eventually do need to learn real-world SQL, and learning only C.J. Date will not provide that.
In other words, I disagreed with your statement that there should be less SQL taught. I think there isn't enough SQL *or* theory taught, and as a result there are legions of graduates who are not prepared for the job market.
webrunner
-------------------
A SQL query walks into a bar and sees two tables. He walks up to them and asks, "Can I join you?"
Ref.: http://tkyte.blogspot.com/2009/02/sql-joke.html
June 13, 2007 at 1:56 pm
Absolutely. I learned formal programming theory early on along with Cobol, Fortran, RPG, Basic (MS-, Turbo & Quick), Pascal, C, etc. I've never had a real problem picking up languages, though it takes some time to pick up on some language-specific features, but that's to be expected. I was fortunate when it came to database: I don't know if it was learning fundamentals first or what, but sets and relational database design just seemed to come naturally to me (starting with dBase III v1.0). 1NF-3NF just made sense, as did de-normalization.
Then I got my grubby mitts on Wang PACE! Wonderful database, considering it was hosted on a mini, but it was a nice relational implementation with a great data dictionary. Unfortunately the system after that was a let-down: DataFlex. Fortunately after that came SQL Server! (v4.21a)
And the beat goes on....
-----
[font="Arial"]Knowledge is of two kinds. We know a subject ourselves or we know where we can find information upon it. --Samuel Johnson[/font]
June 13, 2007 at 2:28 pm
"I actually helped him through a project the other day where he was trying to figure out how to use Office Automation. I showed him how to use F1 in Visual Studio to get to the help file for a class or type... but he didn't understand any of the information that was presented there and had no idea how to figure it out..."
So maybe he is the type of person who won't ever 'get it' and wouldn't have made it through the theory stuff in a class.
I'm not saying that there shouldn't be theory classes offered. Those people that truly get it will probably learn theory on their own, if they don't have the opportunity to take a class.
To use the teach a man to fish analogy:
Some people you have to teach how to fish.
Some people can learn to fish by watching others fish.
And some people will never learn, regardless if they are taught or teach themselves.
June 14, 2007 at 9:42 am
No, it's because the help file is high-level, and he hasn't been taught how to drill down to low-level. This isn't an instinct, it's a research skill that should be taught, and not just to programmers.
He gets the theory when I finally explain it - but I shouldn't have to explain it because HE IS TAKING COMPUTER PROGRAMMING CLASSES IN COLLEGE! Second year stuff, even.
He also understands the class material a lot better when I give him the theory behind it. The prof is in the mindset of "don't understand it, just do it this way." Dustin is one of those people who doesn't like to do things a certain way simply because someone else said so - there should be a reason why it is done that way. Yeah he's a youngster.
This is very similar to music and other arts - you start with the basics and you put your heart into it after that. Without the basic building blocks, you can't create art - but you might be able to copy someone else's work. With the basics, you can choose to copy or create, but you have the choice and that's super-important.
I don't know where this came from but I like it and I think it applies to programming too:
If you build something from instructions, you are an assembler.
If you build something from your head, you are a craftsman.
If you build something from your heart, you are an artist.
(But the artist is also a craftsman and assembler)
We need all three types in the programming community, but colleges are creating assemblers, when at the very least, they should be creating craftsmen, who can do the thing without instructions from someone else. People can become script-kiddies without a college degree, and those who choose to spend the time and money on college should get what they pay for.
Maybe there should be two separate tracks - a script kiddie track and a real developer track. Choose who you want to be.
Viewing 14 posts - 1 through 13 (of 13 total)
You must be logged in to reply to this topic. Login to reply