Talk:Introduction to Programming

Critiques
Hi, I have a number of critiques I'd like to offer about this article.


 * Of course, computers don't understand recipes written on paper. Computers are machines, and at the most basic level, they run on 1's and 0's. If you really wanted to tell a computer directly what to do, you'd have to talk to it in binary, giving it coded sets of 1's and 0's that tell it what instructions to execute.
 * It's not clear what it means to "run on ones and zeroes". A car runs on gasoline, and some people might have an idea of what that really means.  But a complete novice is not going to have a clue what it means to say a computer runs on ones or zeroes.
 * Most people are not going to know what binary is.
 * Most people are not going to know what a "coded set" is.


 * A programming language is a way for a person to write a program without writing directly in binary. A programming language is not a way to do things -- a programming language is a way to express instructions that both a computer and a human can understand.
 * Programming languages are meant to be read by a person, so a computer must either compile or interpret them before they can be executed.
 * You're not defining either of those words, so people are not going to know what compile or interpret mean! Remember, as computer scientists we take our knowledge of computer science of granted.  Beginners are not going to know these teams, and consequently these sentences won't teach them anything.
 * I think it's best to leave out the mechanics of how programming languages are executed by the computer. It's OK if a beginner thinks that the computer actually directly executes Python.  Telling them about compilation and interpretation is just going to confuse them.
 * There are a couple different levels of programming languages. At the most basic level is assembly language. This language is just a direct translation of the binary instructions the computer executes. Every kind of computer has its own assembly language. Here's how to add two numbers in MIPS assembly:
 * Beginners don't need to know about the varieties of programming languages. We should especially stay away from assembly because it does not resemble things they have learned before.  High level languages are OK because most people know what the syntax f(x,y) = x+y means, so we have a common ground by which to explain.
 * You've said There are a couple different levels of programming languages but haven't actually specified what those levels are. Mentioning assembly and high level languages is not defining the levels; you're leaving it to the user to infer that levels are defined by how abstract they are from the hardware.  We don't want to make people infer things when it can be said explicitly.
 * Most people don't program in assembly, because it can be complicated, it takes a long time to write, and it only works on one kind of computer.
 * Yes, so let's not teach it to beginners. Let's not even mention it until introductory courses.
 * High-level languages look more like English with mathematical operations thrown in.
 * What we show below looks nothing like English.
 * These languages require more translation before the computer will understand them,
 * So does every language, but we shouldn't mention that now.
 * The process of translating a program from high-level language to assembly to machine instructions is called either compiling or interpreting, depending on what language you are using.
 * This is factually incorrect. Compilation and interpretation are not conceptually similar.
 * The paragraph following this quotation is far too detailed for a beginner to understand.

I will attempt to rewrite this article. As I have mentioned in other places, I think it would be highly beneficial for the Intro computer science curriculum to use exactly one language, at least until the intermediate level.

A student would not learn Spanish effectively by also being taught German and French concurrently. The fastest way to learn would be to focus on Spanish, then pick up Frech and German later. Similarly, we want to let people focus on as few language concepts as possible while still conveying general programming concepts. Hence, one language.

JustinC 20:54, 14 October 2006 (UTC)

About the merging
I think this resource shouldn't be in the Topic namespace, it should rather be a resource linked to under the Topic:Programming resource. --Devourer09 02:37, 27 September 2008 (UTC)

Computer programming
Does anyone have any comments on Computer programming at Wikibooks? Is it good? Is it worth working on? How do we integrate it with Wikiversity? --JWSchmidt 02:38, 30 January 2007 (UTC)


 * It is ambitious. Very general survey with links into all kinds of topics at Wikipedia.  Brief overview I gave it made it look more like a course that should be at Wikiversity than a specific textbook which should be at Wikibooks.  I will check out some more of it when I get back to Java language programming instead of top level design on cisLunarFreighter game.  Maybe a few well placed questions with links to Wikiversity will woo some of the authors there into helping some with exercises and courses here to attract students to their text there.  70.110.42.176 07:13, 30 January 2007 (UTC)


 * We need to develop some wisdom about how to divide content between the projects. Calling encyclopedia articles or textbook modules a "course" does not change such content into Wikiversity content. --JWSchmidt 15:03, 30 January 2007 (UTC)


 * I think that dividing content is partly going to be a function of "best practices". What techniques are effective for enabling learning? How does one combine those techniques into learning projects that are as effective as we can make them? Do we even know or are we making wild speculative guesses? We are probably going to have to engage in a period of experimentation. We may need to recruit guinea pigs. Dmclean 16:40, 30 January 2007 (UTC)


 * "run small experiments, tests, see what works, what doesn't, and be prepared to be flexible and change, and not be too locked into stone about how things should work" .... "host learning communities, so people who are actually trying to learn, actually have a place to come and interact and help each other figure out how to learn things. We're also going to be hosting and fostering research into how these kinds of things can be used more effectively." When the Wikiversity project was under discussion, many people said that there was no need for Wikiversity, that it would just duplicate existing efforts. We need to make sure that we do not prove that those critics were right. --JWSchmidt 16:54, 30 January 2007 (UTC)

I have started slicing this content up into lesson-like things. Also, I have added a couple of references to programming exercises. I have no clue what languages we actually want to recommend so I just threw is a couple. I am sure that Java should be one of the recommended languages because it is free and cross-platform. Since we don't have a policy on this, I guess that folks should feel free to recommend a language for which there is a course in development. Dmclean 21:35, 30 January 2007 (UTC)

Introduction to Programming Logic/Lesson 1: Variables
Introduction to Programming Logic/Lesson 1: Variables Should probably be combined into, or linked to/from this article.


 * In Topic_talk:Introduction_to_Programming_Logic I expressed my reservations about that entire course, but I also gave my opinion about how to cover variables. Dmclean 18:10, 30 January 2007 (UTC)

Computer Programming vs Computer Science
This is intended to be a course about programming and a course about programming is about something concrete and practical - as opposed to computer science which is not necessarily either. So, I am proposing, and strongly believe that this course should have references to practical exercises in some variety of languages. Opinions? Dmclean 02:16, 31 January 2007 (UTC)
 * I totally agree. My biggest issue with Wikiversity right now is that it feels generally disorganized. I would suggest that each programming language have it's own set of lessons geared towards those who have at least basic knowledge of computer programming (so no need to explain what an if-then statement is, etc.). The more generalized "Computer Programming" lessons can borrow reading and examples from the language specific lessons (e.g. this is what an if-then statement is, here's a Java example, a VB example, and so forth). If you need help, feel free to give me some small assignments on my to-do list.
 * --James Tharpe 15:22, 31 January 2007 (UTC)
 * P.S. A cool feature would be a "language filter" such as that found on MSDN. Users could pick the language or languages they care to learn from and the content of the lessons would narrow or expand based on these preferences (for example: Show me C# and Ruby, but not VB).


 * My only concern is that the structure and/or content level of the programming language course will be incompatible with what the folks who are truly new to programming will need. Do we alter the language course so that it is reasonably compatible or do we have separate material? Dmclean 19:27, 31 January 2007 (UTC)
 * If the examples could be seperated from (but included in) the lessons, I think the issue would be solved. So, for example, there could be a Java/if-then syntax and a Delphi/if-then syntax; the Java lesson could include the Java example and the Delphi lesson could include the Delphi example and the Introduction to Programming lesson could include both (I'm not sure how to do "includes" in a Wiki). --James Tharpe 19:44, 5 February 2007 (UTC)


 * Thank you, James, for responding. I have decided to do basically what you suggested. Introduction to Programming has a companion course Introduction to Programming in Java that parallels it and provides Java specific information. I may, at a later date, also work up other, similar courses for other languages that I know, but I'm going to start with Java. Dmclean 21:36, 5 February 2007 (UTC)


 * I look forward to going through it! I've done some Java, but only as a hobby - sticking mostly to Delphi and C# (and VB when I must) professionally. Is there an easy way to copy an entire course? Once it's further along, I'd love to take your Java course and morph it into other languages (C#, VB.NET, Delphi). --James Tharpe 14:46, 6 February 2007 (UTC)

A Plan
I was thinking that the introduction of integers and then boolean expressions would make control structures a little more straightforward - most loops use integer counters and all control structures have a boolean expression in them somewhere. Control structures plus integers would make it possible to do some modest toy problems such as Fibonacci sequences.

Perhaps floating point should be right after that.

Next I think it would be time for structures, objects and arrays.

Then we can look at functions which will lead us to structured and object-oriented programming.

Finally perhaps a bit on strings and libraries in general.

I think that would be enough for a very basic introduction. Combined with an equivalent programming course, that should enable them to work on non-trivial toy programs. Dmclean 15:19, 5 February 2007 (UTC)


 * I think that's a bit ambitious for the introduction to programming. Maybe it could be re-titled? This section seems to be an overview of general programming concepts, but it is far from complete, as I suppose you both would acknowledge.  I'm willing to write some pieces. One immediate comment, the Variables section that has 3 parts should not be divided as it is currently.  It should be sorted into scalar values, array values, and some form of class-object principle.  This could even be reduced to 2 sections: primitive scalars and arrays of primitive scalars; and class variables and object properties. The "organization of a program is a good thing, an essential element to have.  (comments or "inline documentation" should be mentioned here) and the Scope article is a must as well.  Flow control, as mentioned immediately above, will also be essential.


 * It has been said that this section is to be an introductory section with precise terminology and a correct foundation that is still simple for a completely inexperienced curious reader to understand. Let us adhere to this goal very carefully.  Pnguyen 08:11, 9 February 2007 (UTC)


 * I should have put in my reasoning behind parts of my plan. I think that it is essential to mix up the material a bit so that it doesn't become boring or repetitive. That's part of the reason why I wanted to introduce integer stuff and then boolean stuff and then do control flow and subprograms. Integers and booleans are needed to do control flow. Having control flow makes it possible to do some interesting toy programs - but it also makes it possible to demonstrate cyclomatic complexity and the necessity of subprograms. From there, we can do arrays and structures and this will allow us to make the case for objects.


 * I'm trying to make it possible for someone with absolutely no previous programming experience to ramp up. Yes, that is an ambitious goal but one that should be possible and eminently worthwhile. I think that this goal requires a careful consideration of the order and manner in which material is presented. I certainly am not going to claim infallibility on this point, given my years of experience, degree and tendency to use intuitive rather than logical thought processes.


 * One of the things that I am leery about is the premature introduction about the importance of good program design. Yes, it's important, but is a true neophyte really going to care? I'm not convinced. I would rather see them have a little fun with a bunch of toy programs, get them comfortable with basic concepts, have them try some things and then, when we get to the point where cyclomatic complexity starts to become an issue, then hit them with design principles. Dmclean 14:00, 9 February 2007 (UTC)


 * Sounds good; I'll be reading and help clarify/flesh out the lessons. If you have an writing assignment for me, send email.  Maybe I can work on some of the examples/practical applications?  I realize now that I did not analyze the project as a whole before releasing my initial impressions.  Pnguyen 20:07, 10 February 2007 (UTC)

The two of us appear to have a consensus on an overall plan, but there is so much to do. At the moment, I intend to continue nibbling away at the material. As the course continues to take shape, hopefully our understanding of what is needed will improve, leading us to an elegant solution. Dmclean 16:35, 11 February 2007 (UTC)

Added heading for computer science unofficial degree
I added a header and category on this page for thethe Unofficial Computer Science Degree.-- Azotochtli (talk) 19:13, 11 August 2012 (UTC)