Portal talk:Computer Science/Wikibooks imported talk

Introduction to Programming in Pascal/Delphi
I find that learning object-oriented programming with a language like Pascal...I'd be up for writing an Introductory course module to programming with Pascal...would anyone have any objections to this? It would be CS1 level, just the basics of programming in Pascal with FreePascal, and maybe Delphi using Delphi 6, up until a point that they know how to program, and use the language references.--Dmacdonald95 03:16, 10 July 2006 (UTC)

Proposed mission
"To teach the theory of computation directly, with examples of certain concepts illustrated by various programming languages." This is concise and meaningful. It also clearly demonstrates that the point isn't programming, but the theory of computation. Most universities recognize the merit of this emphasis: they have separate information systems and computer science majors. So do we (see the School of Informatics). It has the side benefit of letting people who want to learn programming itself know where they will be served better. &mdash; 131.230.133.185 6 July 2005 03:56 (UTC)

OCW
If someone wanted a free CS curriculum online, why wouldn't they just go to MIT's OCW? I don't think that anything built here would be able to compare with what OCW already offers. (DMB)

Ahem, have *you* seen that site? It's full of microsoft documents. I found a few videos in Real Media format. We can definitely do better. OMouse 22:32, 25 October 2005 (UTC)


 * The other big problem is that its not aimed at students- its aimed at fellow teachers.  A lot of courses with just syllabi.  Others that are impossible to follow without the course book.  Other's who have notes but who's notes aren't followabkle unless you were at the lecture.  MIT is a great source, and we ought to look for it as places to take ideas from and point to good lectures/notes as alternate ways of explaining concepts.  But I don't think they fill the same roll Wikiversity will.  Although who knows-  we'll be offering our content for free under the GFDL (or similar license), perhaps one day we can work together with MIT.  --Gabe Sechan 22:50, 25 October 2005 (UTC)

MIT's OCW is simply a data dump. Most bright people I know learn best via some interaction with other people (instructors, students, parents, kids, friends, enemies, etc.). Wikiversity offers collaborative interactivity with other motivated students and instructors in a format that allows the participants to select their level of participation and manage their time to minimize impacts on the other portions of their lives. I suspect we already have MIT students, grads, and faculty contributing productively here while simultaneously studying. I know I have already downloaded some PDF files with FDL'ed material that will be valuable in Wikiversity courses I intend to participate in. As excellent as the material is, it is tough going solo. I am glad some brilliant people (judging by the material already available here and at Wikipedia) are establishing study groups on Relativity and Quantum Mechanics. My personal experience is that this is going to generate a lot of demand and motivated participation with the Math Department offerings, just as getting ready for some advanced engineering subjects has me here looking over the Computer Science department. Lazyquasar 03:16, 26 November 2005 (UTC)

Curriculum
Wikiversity:School of Computer Science:Discussion regarding curriculum (Underlying technology recommends pages less 32kb to keep some browsers happy.)

Question to computer scientists
Is there any merit to considering a less traditional form of organization? It seems that the primary concern discussed above is to follow a standard university-style curriculum, and that is causing (some of) the organizational difficulty.

There is an opportunity here to do something novel, since this is not a traditional university. There is no notion here of the semester or term, and in fact there is no notion of time at all. We are computer scientists, so why don't we create a curriculum the computer-science way? Perhaps there needs to be more modular structure to the courses in order to reduce the complexity of creating a curriculum. For example, above it was suggested that binary numbers not be taught at the CS1 level (I quite agree). Well, what if someone came to the Wikiversity wanting just to learn about binary numbers? There ought to be a module just for binary numbers, external from all courses. Maybe there can be a module just for hexadecimal numbers. One for TCP/IP. One for UDP/IP. One for the syntax of C. In fact, there can be a place here for any kind of module (like reverse engineering). Problem sets and projects can be associated with modules, and answers to selected exercises can also be provided.

Once the modules are defined, there can be groupings of related modules, with some modules appearing in multiple groups. A course can be defined as a list of modules with certain dependencies, and this way many course variants can easily be created (i.e., "here's what the ACM recommends for CS1, this is what Yale does, and this is what State Community College does..."). True, Wiki contains all these topics in an unordered fashion, but these topics are intended to be more explanatory than tutorial. There's no problem with using Wikipedia to supplement Wikiversity. --JeffreyMeunier 14:42, 11 Jan 2005 (UTC)

I like that idea a more fine grained course break down. alot of the texts sofar on the Wikiversity have become absolutly massive articles( I was just reading through the math sections). I do think the above course sylibus thing is a good start at breaking down but maybe we can come up with tree type thing to branch off of that. I can create the Basci tree thing tonight while I'm waiting here and people can fill in as they see necesary.--Stranger104 08:57, 16 Jun 2005 (UTC)

I agree that the modular approach is the best one to take. If I wanted to learn Perl, and only Perl, being able to take just that part of a broader course would be great. Each course could be broken down into catagories and modules. For example, the course "Computer Architecture and Assembly" might have a catagory of Architecture, and modules of Assembly, I/O, and Memory. To take a whole course just to learn Assembly language seems a waste... --MikePorter


 * I actually think I had that example in 2 classes at one time (with architecture a pre-req for assembly) and someone changed it around. I didn't particularly care, since noone is considering writing it yet (that I know of).  Although in that particular case, I can't see anyone truely understanding assembly without understanding hardware.  Then again, you could already know it, which is why I just made architecture a pre-req.  I was also probably thinking of a deeper teaching of architecture than you could learn in a combo course.  --Gabe Sechan 18:16, 1 November 2005 (UTC)

Okay, see Beginning Java or  HTML and Website Creation for examples of how I would handle modules. --MikePorter 18:16, 1 November 2005

Beta CS Course Structure
I decided to throw in a frame work for how everything is going to be broken down. feel free to reorganize as necesary. this is still deffinitly a work in progress. --Stranger104 09:12, 16 Jun 2005 (UTC)

Organization comments
I've been thinking on running a class in CS (likely Intro to Programming, taught in C), looking at this I have some questions on the organization.

1)Why the split between Infomatics and CS? FIrst off-  I've been programming for a decade, and never even heard of Infomatics.  A really poor name.  Secondly, while in academic halls CS may be separate from programming, in the real world the two aren't.  Theory should definitely be taught here and heavily stressed, but divorcing it from practice (or putting practice in an entirely different school) seems a bad call.  And if you are going to divorce the two, take the NPOV and be fair all around- no Ruby either.

2)It seems we have a parallel structure here [|CS Course Catalog]. I don't like a lot of their courses, but I do think they have the right idea about building on knowledge.

3)Here's how I would do it if I was to build it from base principles.

-courses follow a directed graph, building assuming you have taken the previous course. In several cases, there are choices of courses- for example intro to programming can be taught in 3 or 4 languages

-Courses come in levels, each course is at highest_prereq_level+1

-Level 1: Intro to programming (multiple versions), intro to discrete math (where this course ends is definitely up for discussion)

-Level 2: Data Structures (reqs: Intro to DM, Intro to programming), DM II (prereq: DMI), Computer design and operation (prereq: DMI (boolean logic))

-Level 3: DM III (prereq DMII), Logical analysis(prereq: DMI, Comp design), Networking (prereq: data structs), OS I (prereq: Data Structs), Databases (prereq: DMII, Data structs), etc

-Level 4-N: more advanced courses, generally dive into subtopics covered in level 3.

This structure is built to show exactly what you need to go into each course, and to minimize redundancy between courses.

I would also do some of the stuff you have in Infomatics, with individual APIs taught after the theory course (a level 4 course group after Networking may go into the BSD network API, or Windows, or Java). As I said before, I think pulling it out to another school just sows confusion. Stress the theory and teach those classes first, then teach the APIs. If we do want a separate school, I'd want it to be the school of IT, and focus in on administration and using computer programs, which is closer to the real life breakdown than programming vs theory is. Then again, I'm one of those people who think all science courses should have pratical labs too :) --Gabe Sechan


 * As noone has responded here or on the similar post I made on the wikiversity talk page, I'm going ahead with this reorg. Since there's no activity on any CS page in the past week, little in the past month, I'm assuming noone is doing serious work that will be upset by this.  If I am mistaken, lets discuss this.  --Gabe Sechan 07:07, August 18, 2005 (UTC)


 * If I were a newbie to Computer Science, I would want to learn at least a little background theory and organization before jumping into a programming language.  I wouldn't want so much theory that I overloaded before doing something practical, but I would want to get a basic understanding of why programming is important and what need specific languages fill.
 * Having taught courses for twenty years, I've learned that a classroom is a lot like a restaurant. The substance can only be appreciated when the environment is conducive and engaging.  --Zephram Stark 17:00, 4 November 2005 (UTC)


 * THe first problem with that is- noone wants to learn CS.  They want to learn programming.  Programming is what brings people in, CS is what they then learn to become better at programming. By and large, people don't want to become theorists-  they want to learn something practical, and learn theory because it helps them do that.  They may later learn to love the theoretical work as well, but they'll come in wanting to code.


 * In addition I don't think you can truely understand any subject without getting your hands dirty. If you learn concepts without learning practical concurrently, you don't really learn the concepts.  They end up being these nebulous concepts you think you know, but until you've used them you won't really get it.  I read about classes when I was just learning programming, but I didn't see why they were useful until I started seriously coding.  I know three ways of evaluating the current and voltage at any point in an RLC circuit, but I can't design an analog circuit for the life of me-  I was never taught how.  It wasn't until 7 years later when I was playing around with electronics that I finally understood analog circuitry.  The practical, in my mind, needs to be taught along side the theoretical.


 * That doesn't, by any means, mean the theoretical is unimportant. But its a lot easier to teach people, and to keep them engaged, if you teach something they can play around with as well as the broad concepts.  For an example, take a look at my (still under heavy development) C class.  I'm teaching C, but I'm also teaching the theory of what variables and types are, what boolean logic is, basic software engineering (hammering in on naming, commenting, etc).  I'm trying to teach the concepts and language at the same time, so at the end they know both.  If you were to take the C out, you'd know that there were these things called variables (but not how to use them), some boolean logic (but not why its important), these things called comments we need to be sure to write (but not why programs without comments are hard to use, and definitely no first hand experience at it).  You need a language that you can actually compile (or interpret) and see output in to tie it all together for them--Gabe Sechan 23:00, 4 November 2005 (UTC)


 * I agree that students want to immediately get to practical implementation and that implementation is a big part of that. However, practicality is also a major concern.  Users need to know exactly where your course fits into the grand scheme of things and what it can do for them.  They need to know how it is practical.  I suggest that just enough theory be explained on the School_of_Computer_Science page to let students know exactly what knowledge of Programming in C will do for them.  C, by itself, is not required for any more advanced course.  Some fourth level courses require "any high level language", but from a practicality standpoint, why would a student not simply take the C++ class to meet this prerequisite and skip C?  The School_of_Computer_Science page would be more friendly if it were empathic to the needs of the student, and only those needs.  --Zephram Stark 16:13, 5 November 2005 (UTC)


 * Some sort of intro page like that would probably be a good idea. I don't view what we have now for the intro page to be final by any means, but a work in progress.  Caew to write the additions? --Gabe Sechan 23:23, 5 November 2005 (UTC)


 * I would be happy to write the edit, but I need to know the answers to a few questions in order to do it since LISP for ANN and MMOC environment programming is my area of programming expertise, not C. --Zephram Stark 01:40, 6 November 2005 (UTC)

- To me, and I must admit that I know neither of these languages by personal experience, it sounds like a bad idea to learn C++ before C if you are going to learn both. It is easier to learn something and then expand it than to learn something complex and then have a lot of it taken away. --Simen - None. C++ is inbetween C and Java and is a good starting point. It is much more object oriented than C. C can be counter-intuitive at times. - General computing experience isn't really necessary. "This is a mouse..., this is a keyboard..." is all you need to know.
 * What advantage would one have in learning C before C++? Is general computer experience a factor?


 * C is counter intuitive? C is damned straight forward.  Its C++ thats counterintuitive.  But thats neither here nor there-  there's no reason you need to learn C before C++, but it is a simpler language.  Pick one and go. --Gabe Sechan 05:25, 29 November 2005 (UTC)


 * What, if anything, can be done better, faster, or easier in C than in C++?


 * C does just about everything faster- compilers can generally make more optimizations with C.  Tools, especially embedded ones, tend to be more advanced as well.--Gabe Sechan 05:25, 29 November 2005 (UTC)

- Perl. Everyone at Dal who's a 3rd or 4th year uses it whenever possible. Short and sweet code, very high-level language. Not that it's better, it's just faster for students to turn out code with. - If not Perl, then C++ or maybe Java. Everyone has their own opinion, but I find almost any language can get the assignment done. C++ or Perl for me.
 * Which language is more conducive to advanced courses?


 * Whoever said perl is on crack. Perl is glue language-  you use it to write a quick program to tie 2 apps together.  Perl has major maintenance and readability issues, is far slower than other languages (due to being interpreted), and can't be used for embedded or systems programing at all.  Between C and C++, they're about equally conductive to advanced course work.


 * Sorry, but the question is about advanced courses at wikiversity. Homework, deadlines, etc.. A student will have to get as much work done as quickly and easily as possible. I agree with the "Perl is glue language," and you can't expect to use it a lot in the workforce, but for a student who doesn't care about clock cycles Perl and PHP are great. And for most assignments that I've seen, the goal was to make it work, not to make it work efficiently.

- 5 to 10 minutes. 20 to 30 if they have to download an install the compiler and related software. - C, C++, and Java are the staples, I suppose. For the n00b Java is nice. After basic programming, you would want a course in algorithms, ie depth-first-search, Floyd's algorithm, etc.. - Probably the same ones as above. C, C++, or Java; then algorithms. -Mike Porter
 * How long will it take before a student can write their first program in C, C++, and Java?
 * Since all courses are not required, what are the best courses to take for a novice computer user?
 * What are the best courses to take for a proficient computer user who doesn't know how to program?


 * A bit longer than that. The utter novice does not know what a variable is, or boolean logic.  5 to 10 works if you want to know how long it would take them to copy paste Hello World, but to write and understand their program takes a few lessons. Especially if its slightly less trivial than Hello World--Gabe Sechan 05:25, 29 November 2005 (UTC)


 * What are the best courses to take for an advanced computer user who knows basic macro creation or other languages, but doesn't know C, C++, or Java?

Informatics
To clarify (but not criticize) Gabe Sechan's comment about informatics:

`Informatics' is the common name for computer science in Europe (`Informatik' in German). The issue is that there is controversy over whether or not there is any science in computer science (do a Goolgle search for _computer science "not science"_; it's easily argued either way). Some even consider writing programs to be closer to writing poetry than to something scientific. I mention this simply to clarify the point, not to spread hate and discontent.

If we want to pick nits, we could also say that not all computer applications deal with information, and hence `informatics' is also a misnomer. Information is data that is interpreted by a human, so if you are writing embedded systems, you are not doing informatics, right? At the most basic level, this is all data processing. However, that term fell out of popularity long ago. There are other names for what this is, but none is perfect. I personally like `computer and information systems', but `computer science' is most popular and widely recognized name in the US. We're calling it computer science, everyone understands what we mean by computer science, so we should keep calling it computer science. --Jeff Meunier Sep 1 2005


 * I personally think it's a bad idea to split things up at such an early stage. If everything is kept together, more collaboration is possible and work can proceed more quickly. If necessary, it could be rolled off into a seperate department at a later date, but dividing the contributors can't help either section. Xerol 21:09, 25 October 2005 (UTC)

Certification
Unless a student plans on always working for himself, knowledge of a discipline won't do him any good without proof that he has that knowledge. In my opinion, that proof should not come from the "good name" of the school, but from some objective measure.

The classes that I have taught for the last twenty years are centered around achieving a quantifiable goal of some practical knowledge upon completion. The level of knowledge, speed and skill is then demonstrated through third-party testing, available to anyone, whether they take the course or not, to generate an unbiased comparison of the student's abilities compared with those of people working in the industry or graduating from other schools. Taking a particular class from a particular school is irrelevant to whether or not a student is qualified to do the job. Hence, certification of a particular level of competency should not be tied to a school or a course, but to a demonstrable skill level in an unbiased environment. --Zephram Stark 16:39, 5 November 2005 (UTC)

Homework and Homework Problems
Hello, I think there should be a way to turn in homework problems and a way for Teachers to make homework.

The idea is to create a "turn in" page for each student, and then teachers comment on the student's work on their wikipage.

Meh, just a thought. --Dragontamer 21:14, 27 November 2005 (UTC)

Another thought on the implementation of this: The teacher writes a homework problem as a template, the student creates a new page with this template and then answers the questions. Anyone can check on the person's homework, and it would be a good idea to add a signature to the comments on the problem. --Dragontamer

Language of Choice
There seems to be much debate on this, so lets start a new section on this specific thing, k?

I think we should start with a high level language; not that there is anything wrong with C or C++, just I think a HLL like Python or Scheme would be better.


 * First off- C and C++ are a high level language.  The only low level language is assembly.  Perhaps you mean a 4GL?


 * Secondly- I think we should be language agnostic.  People prefer their own language for whatever reason.  Some sick and twisted people like Lisp or Scheme or even ML.  SHort of a trip to the psychiatric ward, there's no way to cure them :)  Personally, I'm happiest staring at assembly code (although usually use C as a development speed comprimise), and I know some people will think I need to go to the funny farm for that.  We aren't going to change our minds, ever.  Especially since I'm right, and C is the One True Language :)


 * To decide on a single language will stunt the growth of wikiversity courses. Teachers have their favorite language as well, and the ability to use or not use it will lose us contributors.


 * What I'd prefer to see is to have a variety of languages teach the intro to programming course, each in their own language. Then have the higher level courses try to be modular, so you can have a C version, a C++ version, a Java version, etc.  Maximize flexability, while not forcing policy decisions such as "All classes will be taught in X".  Perhaps with an intro page giving suggestions on what language you ought to pick for the first course, which will have to be closely watched to avoid the inevitable edit wars and advocacy.  --Gabe Sechan 21:07, 29 November 2005 (UTC)


 * I guess we can have examples in all languages in the upper level courses. We need to start on 1 language anostic CS course however, but then that usually limits us to the lowest-common-denominator: Command Line. Moving up to Scheme (wink wink) or Python, we can assume the use of a specific programming language AND toolkit. It is difficult if not impossible to translate GUI examples between not only languages, but APIs as well.


 * Not that there is anything too wrong with Command Line, just it is a restriction implicit to a language agnostic course. --Dragontamer


 * I think there's a big problem with learning only 1 toolkit- it sets your mind into that method of thinking.  You don't look at other solutions to the problem.  Look at Java's toolkit-  it does a shitload of stuff.  But it does very little of it well.  Its over engineered, confusing, and has about 10 levels of inheretance too deep.  But people use it, because its the standard.  It took them a decade to get rid of AWT as a windowing toolkit, despite its utter suckiness.  Because it was standard.  In a language without a behemoth standard library, a new library would have been adopted much quicker.  Likely multiple new libraries, each with innovative features, and the besgt of each would eventually bleed into the rest.


 * As for GUIs in particular- unless the class is teaching GUIs graphics, or human factors, why use one?  It overly complicates things.  Take a networking course.  You could make GUI examples, but why?  Command line examples would have simpler code, and concentrate on the part we're trying to teach-  the networking.


 * Finally, even for C or C++, there are cross platform GUI libraries- Ace, wxWindows, QT (yes, it exists for Windows) all come to mind.  They can easily use any of those. --Gabe Sechan 07:16, 1 December 2005 (UTC)


 * Aight, i can go for language angostic course. :) Just i know it be very difficult, right? I mean, Knuth did it in TAOcp, think we should emulate that style? (use of english to describe everything, and only dipping down to a computer language to describe low level components of a computer)


 * Oh, I think its ok for an individual course to choose a language (although best if it tried to stick those parts in its own lesson, so we can add versions in others). I just don't think we should bless one language as the official language of wikiversity. --Gabe Sechan 06:17, 2 December 2005 (UTC)


 * For a lot of upper level "computer science"/theory courses, why not use pseudocode for most things and offer modules with implementation examples in multiple languages? For any "programming"/implementation/"practical application" courses, follow the intro to programming idea mentioned above and offer it in whatever languages people feel like contributing. 66.169.71.66 07:16, 4 December 2005 (UTC)


 * It's been my experience that any professor of a higher level course can take code in just about any language. The language is, for many assignments, arbitrary. I think that unless a project / assignment requires a specific language, the course should be set up so that any language will be accepted. (if possible).  Also, by the end of the wikiversity program a student should know an assortment of languages, some PHP / Perl, some C / C++ / Java, and some Assembly / understanding of machine code and hardware instructions. For example anyone who only knows C could have a lot of difficulty if they ever have to understand some Java, so really both should be learned. -Porter


 * At my university, the lower level courses were taught in a single common language (in UVa's case, it was C++, and later Java). In higher level courses, it was mostly professor's choice.  I seem to think that having ONE language for all begining courses is important, so students can grasp concepts without having to learn a new language for each one.  Then, the students should have to take a Programming languages course, which introduces the students to about a trillion different languages (Some procedural, some functional, some domain specific) to prepare them for the higher level courses.  Now, with respect to the higher level courses, some profs at my university would tell the students "you can do this is C or C++ or Java or ...", but they would always explicitly narrow the choices to two or three to simplify the grading process.  If you let the students program in any language, they may just choose one that the professor is not qualified to grade, or send the professor on a wild goose chase trying to find an Occam compiler for linux... Nickjohnson 20:25, 4 May 2006 (UTC)

AP level courses
Someone just added this. I'm not opposed, but I'm curious if the course material might have way too much overlap with existing courses planned (the Intro to Prog. Java course specificly). Especially given the frequency with which they change that damn test (when I took it junior year of high school, it was a Pascal test. The next year it became C++.  Now its Java.). Would it be better to redirect the students to those course(s) rather than duplicate all the material?

Also, if we do want to do it, better make it 2 courses- there are 2 AP tests on the subject (one is a 1 sem test, 1 is a 2 sem test) unless things have changed. Or perhaps a 2nd class with the material found in the AB test but not the A test. --Gabe Sechan 22:08, 29 November 2005 (UTC)


 * However, it gives us a solid goal to work towards. The plans to the test are all right there published on that College Board webpage. And both AP compsci A and AB test are virtually the same, just AB includes 1 more semester worth of material. I think if we set our sights to teach for a test, it will give this site some ground to walk on, instead of just "lets build a university", at least we will gain one short term goal. BTW, I added the link :) --Dragontamer


 * I think I should add that I think teaching for the AP Comp Sci test is what everyone wants so far. It gives a 3rd party certificate so that the student knows he/she learned something, and it gives us feedback as to how good/bad the test was. I have friends who have taken AP classes without teachers, and I know too many friends who complain that their teacher sucks. An open course will appeal to both these students as well as give us a base here in Wikiversity. --Dragontamer


 * Good points. Yeah, I've done the teacherless AP thing (not in CS, but in Physics C, Lit, and Economics).  Something like this would have been helpful.  Nothing necessarily wrong with duplicated effort either, I just wanted to make sure you'd noticed the overlap and thought about it before jumping into a huge time commitment.  If you're starting to write the course, you may want to take a look at the Java intro course (which I think someone started) and the C intro course (that is feeling sadly neglected by me as of late) for material to convert.  If I end up finding some time, after donating a chunk to my neglected courses/books, I'll lend a hand. --Gabe Sechan 22:26, 29 November 2005 (UTC)


 * I got a couple of friends that I hope I can convince to teach that class. Of course, I gotta see if they think its a good idea, etc. etc. But if they agree, then I think we can pull it off :) --Dragontamer

Text editor/IDE?
I don't know where to put this, but I had an idea about maybe mentioning a tool such as Vi(m) or emacs, seeing as how they are much quicker when programming. Or maybe some introduction to some other ide, codewarrior, bluej, depending on the language. Seems like it should be worth a mention somewhere. If not, whatever. :) Gflores Talk 06:35, 16 December 2005 (UTC)
 * Maybe just add appropriate links to a list like this? While encouraging or requiring use of a specific IDE could be helpful in a course environment, users would probably be better off if they "found" something on their own that they find suits them. Xerol Oplan 18:54, 3 January 2006 (UTC)

Small code repository
A number of Wikipedia articles on algorithms are becoming swamped with code implementations written in multiple programming languages. Wikipedia is not the place for these, but they still should be available somewhere; so I'm trying to find a home for them on another wiki project, where the articles can link to them. Does the CS Wikiversity have any use for this pile of code? ~ Booya Bazooka 19:34, 26 May 2006 (UTC)


 * Update: I've started Algorithm implementation as a book to contain such code. ~ Booya Bazooka 02:36, 27 May 2006 (UTC)