Jump to content
Science Forums

Speaking of School: Computer Science


Recommended Posts

I was wondering what can be done to revitalize a computer science class. We at Butte Community College have an ailing computer science program that is getting cut left and right.

 

I, as a student, feel I have an obligation to assist the program. The problem in my eyes with the program is that it kills the magic of using computers. Most people go through a greater drop out rate in the CSCI classes than is experienced in math classes.

 

I believe that what hurts the classes the most is the lack of "fun" and "social involvement". I think it is stupid that we are expected to work on micro projects individually when, as I understand it, out in the business world people work collaboratively on projects; thus, achieving things collectively that no single individual can accomplish by themselves.

 

What can be done to improve the quality of these classes and the attraction of more students to the program?

 

PS: What are the standard topics for an "Introduction to Computer Science" class?

Link to comment
Share on other sites

Wow, you have a class called "Introduction to Computer Science" ? that's neat....

 

You need to make computer classes more FUN to make people not drop out.... so here are a few activities i'd do, and how i would structure the class (vague and general)

 

First class, would be general outline of computer science, this class end would be spent filling out a small questionaire as to what kind of experience people have, also what they think cs is, and very importantly, what they want to learn more about, etc. (that to you, as a teacher will tell what topics you should focus on more and which sections you can mention, but omit going into deeply)

 

Also from this point on, once you choose the topics, come up with people that are interested in areas you are going to discuss, and always engage class in discussions, you control where the discussion goes as well as help filter out meaningless and wrong or mythical information.

 

Second class more detailed look at all the areas of CS and their applications in people's lives (that will generally filter out anyone who didn't want to be in computers, and now youare left with a class of Interested computer people). Remember that here, you should also define KEY CS terms, and stick to them.

 

By this class, you also have your topic outline that you can then hand out. Try to make sure that the book will explain your topic, but i think that for an intro class, HW should be more research-based then dumb question and answer from the book. Also the engagement in conversations and debates in class, will make it so you can identify people struggling and give you the ability to focus in on their level or comprehension.

 

From there, follow your outline, create group projects that everyone can do, perhaps at this stage more research-based. Also create in-class project. Like for example, you are talking about programming, buy a dozen boe-bot basic kits, and make a lab for people to write a simple program for the boe-bot to do something, its one thing to see output on the screen, its a totally different thing to see a robot do it (also remember to structure these labs such that people have the ability to play with the "toys")

 

I would not omit security, and set up a demonstration of an attack that goes through, people like visual things, and certainly those who are interested in security will stick more to the program.

 

Similarly, hardware, well, don't just ask people to know in basic terms, how a computer operates, have them build one on the bench (detailed instructions are a must)

 

I think that generally the reason that people drop out of a program is because they have not gotten enough interest in any area of the program, but the people that create a program should understand that the people that get into intro classes, don't do it just because they don't know what to do with their lives, they do it because they have read something, know someone, or saw something interesting on it and decided to see what it's about; so market it, advertise your program, it's not much different from a car, you know, just a bigger investment.

 

Also remember to always debunk myths that make people think that their future jobs are not as secure as they are in other areas, myths such as all IT work going over seas and stuff like that.

 

Hope that at least some ideas may be helpful...

Link to comment
Share on other sites

To summerize, an "Intro to CSci" should touch on security as demonstration, robotics and programming by hands on (like Vex), hardware exposure by hands on, and net exploration/research by embedded project requirements?

 

I like the idea of teaching team and/or buddy-based programming practices, so I dig the group/class project ideas.

Link to comment
Share on other sites

How relevant, do you think, is the History of Computer science to a "Intro to CSCI" class?

 

Extremely!

 

What almost every discipline does that makes it hard to learn is that those who teach it make such broad assumptions about how much context the students have, when in most cases they have *none*!

 

Its one thing to learn out of context that "analog computing is complicated," but its extremely useful to learn about various attempts at it over the years (e.g. its early use in ballistics), and how its coming back (in AI).

 

Its not just important to learn "what" its also important to learn "why" and to understand that that "why" came from lots of useful experience that you can learn from rather than have to repeat the mistakes yourself! :sun:

 

I'd much rather learn the easy way, :rainumbrella:

Buffy

Link to comment
Share on other sites

Yes, absolutely very extremely relevant!

 

How else would students learn about history's greatest cs woman....?

(Buffy will kill me for this joke, but i kinda hope she just takes it litely...or at least spares my life in the end.)

 

No, with all seriousness, the history of computing is as important to CS as the history of the Roman Empire to Theology, not saying you should spend a semester learning it in the intro class, but i think its a course commonly lacking in CS programs, Computing History...

Link to comment
Share on other sites

I've developed an outline of a Intro to Computer Science Course. I would to share it with the wonderful people of hypography to look at and critique. I hope that with some discussion it can be filled out to requist detail.

 

Take a Look Here.

 

This is a topical outline based on feedback from this thread, students I've talked to and personal reflection. Ideally, this class is suitable to be taught at the High School Level (or lower).

 

I Appreciate the tips, insights and feedback, Alex and Buffy (by alphabetic, of course :)),

-Ian

Link to comment
Share on other sites

If you're going to mention Babbage, you have to mention Augusta Ada King, Lady Lovelace, who was arguably more important than Charlie: what's hardware without software, eh? ;)

 

No one taking this class will have a clue as to what a "punched card" is, but skipping Jacquard and Hollerith is criminal (but feeds directly into the discussion of "why binary?").

 

Its also criminal not to mention Turing and von Neumann, especially as a lead in for the explanation of early analog computers that were used in...

 

You also need a WWII section: US ballistics computations as well as the US and Bletchley Park code-breaking drove huge advances in computer technology.

 

Also when you get to the "bit-wars" its fun to go through a list of all the odd combinations of bits that people tried (like my fave, the PDP-8, a 12-bit gizmo), and also the ASCII vs. EBCDIC war as an analog to VHS vs. Beta and every other standard that followed in computer technology (anyone remember OSF?).

 

Oh, and no intro to CS class is complete without making people learn to "program http://video.google.com/videoplay?docid=-8058767226095640627" a "CARDIAC" (also here) and while finding one is just about impossible, there's a PD emulator here...

 

I'll think about it and send you more suggestions...

 

Stop interrupting my accumulator, :)

Buffy

Link to comment
Share on other sites

I had an abysmal (or an ideal, depending on ones point of view) formal CS education: basically, beginning in my mid teens and continuing through my early 20s, a series of engineering, math, and science projects that needed computer programs, and whatever education was needed to write those programs, and, in my last two undergrad college years, some independent study classes in subjects like finite and infinite state automata. This latter class involved writing Turing machine state diagrams to do various calculations, and a cursory introduction to Turing and some of the early UTM paper writers. About the same time, Kidder’s “The Soul of a New Machine” came out, and was widely read and liked by computer types, including me. Of course, I’d read GEB a couple of years before, so knew about Ada Lovelace, Babbage, and Jacquard looms, and, along with most of the my local undergrad math/science community, discussed these and its many other themes at length.

 

The end result for me was an odd, distorted sense of CS history that jumped from the 1800 to 1930 to the 1970s, with hardly anything in between. Not until the mid 1990s did it get much better, as I just filled in bits and pieces of specialized (mostly medical and biotech) industry history, and bits of general history from conversations with better educated folk.

 

Shasta and Lazere’s “Out of Their Minds” filled in a lot of gaps. I highly recommend it.

 

I think their approach is a pretty good one for writing a brief overview of CS history suitable for an “intro to” course. OoTMs is simply 15 essays about 15 different famous computer folk, preceded by an introduction and followed by some commentary and speculation.

 

Regardless of background, people relate well to biographical sketches. So, collect a big pile of more or less famous computer folk, and weed it down to a number that fits your syllabus – in short, tell the history as a series of histories of people.

 

Not only would such a study potentially yield a good short history for an intro class, it could prove personally enlightening, and even yield a book like Shasta and Lazere’s.

Link to comment
Share on other sites

I am going to be showing this outline and a summary of the topics to professors at the University near by because our CSCI 3 (Community College) is supposed to be analogous to their CSCI 101 (CSU).

 

From the looks of it, our Intro to CSCI class is suppose to be the prerequist for Programming and Algorithms I, so I would venture to guess that it needs to prepare the student for that later class.

 

CSCI 101

Introduction to Computer Science

3 FS

Students who have had limited experience with computers should take CSCI 101 before CSCI 111. CSCI 101 provides an overview of the fundamentals of computer science. Number systems and data representation are introduced. An overview of hardware, including the control unit, memory, the ALU, I/O is provided. Software is introduced with an overview of operating systems, programming languages, applications, and software tools. Students are exposed to common operating systems and applications. Student also design and implement several programs.

 

CSCI 111

Programming and Algorithms I

3 FS

At least one year of high school algebra and strong computer skills or CSCI 101.

A first-semester object-oriented programming course, providing an overview of computer systems and an introduction to problem solving, object-oriented software design, and programming. Coverage includes the software life cycle, as well as algorithms and their role in software design. Students are expected to design, implement, and test a number of programs.

 

-Taken from the CSUC 2007-2009 Catalog

 

If you were to require your students to design and program a given project, what language would you teach them and what tools (like UML for instance) would you equip them with to perform the assigned task?

 

Thanks abunch,

-Ian

Link to comment
Share on other sites

Sadly, the two have to be one class; luckily, the intro class only needs to touch on the topics that are going to be taught more in-depth in the programming class.

 

I would like to hear your thoughts on an intro to programming class; It is the programming stuff that I have the hardest time figuring what should be put in and what should be left out.

Link to comment
Share on other sites

emmk, but you asked for it (just so we are clear) :)

 

So my idea of a programming class, is a class that is not centered on programming any one language, but rather a class that teaches how to think program. It's a skill one gains after about the first 4-5 languages, when one can pick up a book on a language and be coding in it in hours, needless to say, being profficient with any language in a few weeks. It's developing that same skill that allows you to read any code in any language, and even without knowing the exact syntax, point out obvious flaws.

 

So a programming class should do just that, teach students how to code in what they want to code in. So, you don't teach the class in C, or Basic or Python, you make students choose which language they want to use for their projects, and have them learn it, while you teach the class in pseudo code, making people understand the logic, while applying it to their particular language. If you are teaching datastructures, you perhaps want to first make sure that the languages being used, support OOP. Another thing for projects, language limitations may deny someone the ability to make code work, so for the times that someone can not complete the project in the language they choose, one, they get to submit the code they have written (at least till the point that their language does not support), pseudocode for the parts missing or the whole project, and an explanation (in the form of a writeup) thoroughly explaining why they could not do what was asked in their language. This way nobody chooses QBasic or Pascal or something, and misses the whole DS section of the class saying "Ooh, i can't do this in my language. Oooh, i didn't know we couldn't pick QBasic". I would require more work done by those students, then those who actually did the work.

 

And basically the class would be conducted as such, explanation of a topic (such as control structures) about 1/2 the class, independent reading to understand the topic in your language, about 1/4 of the class, and finally project, another about 1/4 of the class and HW if you did not complete it. Depending on interruptions or the topics this will vary, but basically that is it. Unless its a midterm or final exams, in which case, they will have 2 full class periods to complete the assigned project (which will vary for each person in class, so they can't copy off of each other even if they use the same language).

 

well this is about it, i think or rather hope that this fairly well explains the idea :)

Link to comment
Share on other sites

I like the idea, but I would hasten to add inter-language team projects. I would like to participate in the very kind of class you describe except that the point of the class would be to program only the parts of the project that your language is best suited to cover. You would communicate (needs applied method to encourage this) with other students on how their portions work and how to interface your language/project of choice with theirs.

 

What you discribe sounds like a technical linguistics class. Where one studies the structure of languages by applying and examining a language or multiple languages.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...