Jump to content

Talk:Computer program

Page contents not supported in other languages.
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Robert Kowalski (talk | contribs) at 08:56, 22 August 2023 (Prolog rule 4 a subclass or superclass?: Wrong use of the term "definition".). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Former good articleComputer program was one of the Engineering and technology good articles, but it has been removed from the list. There are suggestions below for improving the article to meet the good article criteria. Once these issues have been addressed, the article can be renominated. Editors may also seek a reassessment of the decision if they believe there was a mistake.
Article milestones
DateProcessResult
November 4, 2007Good article nomineeNot listed
November 9, 2007Good article nomineeListed
November 17, 2007Good article reassessmentDelisted
October 28, 2021Good article nomineeNot listed
June 7, 2022Good article nomineeNot listed
June 25, 2022Good article nomineeNot listed
Current status: Delisted good article

Template:Vital article


Definition

I think the first paragraph puts undue weight on the distinction between imperative and declarative. It's not relevant for the definition of a program, which is just some commands written in a language for a computer to execute. What is fundamental to a computer program is syntax and semantics, not the format that the commands are written in (which can be a list, a syntax tree, a set, or something else, as long as it is (at least in almost all cases) conforming to some Formal grammar.

For example, Datalog is a classic declarative language in which programs are written as sequences of commands. If I were describing the syntax of datalog, it would be a sequence. It's true that the semantics of Datalog doesn't depend on the order, but the distinction in the first paragraph is confusing. The definitions at Declarative programming and Imperative programming are much better quality and I would suggest those are used here, but I think the distinction should be removed entirely. Caleb Stanford (talk) 13:32, 26 June 2022 (UTC)[reply]

Forming a definition for this article has been as fun as chasing my own tail. Regarding Datalog is a classic declarative language in which programs are written as sequences of commands.: Datalog#Features,_limitations_and_extensions says, "Unlike in Prolog, statements of a Datalog program can be stated in any order." Timhowardriley (talk) 16:15, 26 June 2022 (UTC)[reply]
Thanks -- but I am aware of that (I referenced that in my post: "doesn't depend on the order") and my point is that it's not a set, it's a sequence that can be stated in any order. In other words, the syntax is a sequence, the semantics is a set. Also, the exact sentence you quote mentions Prolog as being order-dependent, which is another declarative language.
My contention is that the definition as currently stated is controversial, and it doesn't agree with definitions at either of the linked articles imperative programming and declarative programming. More importantly, the distinction between imperative and declarative is irrelevant for what a computer program is, violating WP:Undue and WP:Relevance. (Edit: though I think mentioning it somewhere in the intro is good, it shouldn't be part of the definition/scope.) By the way, programming languages is my area of research expertise, I'm not just making stuff up out of a hat. :) Caleb Stanford (talk) 16:26, 26 June 2022 (UTC)[reply]
Feel free to correct the definition. Also, that edit won't constitute the significant contribution necessary to preclude rating the article GA. Timhowardriley (talk) 16:55, 26 June 2022 (UTC)[reply]
OK, sounds good! Hope my message didn't come across as too strongly worded. Edited to add, I think mentioning declarative/imperative somewhere in the intro is good, it shouldn't be part of the definition/scope of the concept in the first sentences. I may make an edit at some point soon. Thanks Caleb Stanford (talk) 17:01, 26 June 2022 (UTC)[reply]

class=C

I think class=C is more appropriate for the article's present state. @Timhowardriley: I'd like to request that you stop re-nominating the article in its current form (as you have now done twice) without a careful pass by someone else. I am happy to do a pass at some point but the article needs, in my estimation, more than 7 days of work. Caleb Stanford (talk) 15:18, 28 June 2022 (UTC)[reply]

For completeness sake, here are the B-class criteria and why I think it fails currently.
1. The article is suitably referenced, with inline citations.
Agree
2. The article reasonably covers the topic, and does not contain obvious omissions or inaccuracies.
no Disagree The article coverage overlaps with, but does not exactly align with, what an overview of "computer program" should cover. Some ideas of what's not covered is in the suggested organization below.
3. The article has a defined structure.
no Disagree The current organization of the article is a bit of a mess, currently unstable, and lacks focus. An idea for how to improve it is below.
4. The article is reasonably well-written.
? Maybe Parts are well-written, others need editing and cleanup.
5. The article contains supporting materials where appropriate.
Agree For the most part.
6. The article presents its content in an appropriately understandable way.
? Maybe It's very hard to present a concept of such basic importance in an understandable way to a general audience -- I believe that the article is currently too technical, covering a technical overview of many important concepts, but should explain to a very basic level (e.g., to someone who has never written a computer program or never heard of what it is) what a computer program is.
Caleb Stanford (talk) 19:02, 28 June 2022 (UTC)[reply]

Request for comments on downgrade to Class=C

Was it appropriate to downgrade this article to Class=C on this edit? Timhowardriley (talk) 18:33, 28 June 2022 (UTC)[reply]

Why do you need a full-blown thirty-day formal WP:RFC for this? --Redrose64 🌹 (talk) 19:05, 28 June 2022 (UTC)[reply]
Article-class assessments aren't particularly formal, and the assignment of a letter which isn't even shown to the reader isn't important enough to warrant a site-wide RfC. Timhowardriley: The criticisms of the article are well-founded. Presenting such a broad topic in a broadly satisfactory way is a Herculean task, sure, but it can definitely be done better than how it currently is. Ovinus (talk) 19:31, 28 June 2022 (UTC)[reply]

Suggested outline (2022-06-28)

Overall, the current article is well cited and has some good material, but its organization is a bit of a mess. It consists of a hodge podge of vaguely related topics, and the delineation between sections is unclear. Additionally, the article doesn't seem focused around "computer program" as a central theme. It contains several subsections now which elaborate on things of unclear relevance to computer programs -- for example the BNF discussion under "Syntax and semantics" uses linguistics as an example and is only tangentially relevant to what a "computer program" is. Recent edits have moved some things around and added material, and these have mostly been improvements I think, but there's still a ways to go.

Here is a draft suggested outline that I think would make sense. What do you think?

1. History (the earliest computer programs and overview of how the notion of a program has evolved)

2. Modern computer programs (survey of what a computer program means today)

This is a current major omission from the article. What I have in mind is illustrating through examples what today's computer programs are and look like. This section could incorporate much of the material currently under Imperative Languages and Declarative Languages as example programs.
The "hello world" section might also fit here. It's currently out of place but could instead be "examples" or something.
It would be great for this section to also include some empirical survey information such as: who writes programs today, what language(s) are they typically written in, etc.

3. Program elements

3.1 Syntax and Semantics
This is currently under "programming langauges and paradigms" but it doesn't quite fit there. It's more fundamental to what a program is.
3.2 ???

4. Programming languages and paradigms

5. Program development (current section titled software engineering & computer programming)

6. Classification of computer programs

4.1 By language
4.2 By platform (OS, architecture)
4.3 By use case (e.g., embedded systems programs, mobile phone apps, web apps, etc.)
4.4 By functional category

7. In popular culture (another section missing right now, could be nice to have)

Caleb Stanford (talk) 18:42, 28 June 2022 (UTC)[reply]

The current structure is just fine. Timhowardriley (talk) 19:02, 28 June 2022 (UTC)[reply]
I generally agree with Caleb Stanford's assessment. (Do you prefer Caleb, Mr. Stanford, something else?) This article should be mostly accessible to people with no programming experience, with occasional detail (perhaps in footnotes) to make it enjoyable for more-experienced folks. Your proposed scope and organization of the article makes sense and is highly navigable. There is just too much inappropriate content in the article at the moment, the most unfortunate being the sprawling C++ code and Makefile. Short snippets of code illustrating different levels of languages is best. I also agree with the emphasis on modern programming; as important as ALGOL, BASIC, etc., are, they are unrepresentative of what programmers do today, which again is very important for the layman. Ovinus (talk) 19:24, 28 June 2022 (UTC)[reply]
This article spends too much time covering things it shouldn't, I can agree on that much. In particular we devote way too much space to object oriented programming and technical details of C and C++ which should just be a brief summary and pointer to their own articles. I disagree that a modern definition of a computer program is much different from a historical one. We have other articles (lots of them! Software development, Computer programming, Software engineering) that can cover the process of programming or what specific tools and language variants are used today. This article should be general in scope - the parent of many child articles, in keeping with Wikipedia:Summary style. Sections on particular platforms and use cases don't really belong here. Also, no popular culture section. This article will not be helped by a collection of cruft and trivia. MrOllie (talk) 20:19, 28 June 2022 (UTC)[reply]
Good point about separate articles, thanks! Ovinus (talk) 21:14, 28 June 2022 (UTC)[reply]
Thanks, you both put it better than I did. ("Caleb" is fine!) Re: modern definition, my point is that the modern notion of a program is very different from, say, Ada Lovelace's note G or the universal Turing machine currently surveyed under History. Explaining what a program is today and what it was historically are two very different things. About classification, I think it would be nice to overview some answers to the question: what are some of the ways that programs can be categorized? Those subsections are just some ideas. Caleb Stanford (talk) 22:17, 28 June 2022 (UTC)[reply]


  • The key sentence is, "Once the mechanics of basic computer programming are learned, more sophisticated and powerful languages are available to build large computer systems." Timhowardriley (talk) 22:15, 1 December 2022 (UTC)[reply]
  • The most profound passage is, "Object-oriented programming developed by combining the need for containers and the need for safe functional programming. This programming method need not be confined to an object-oriented language." Timhowardriley (talk) 10:25, 5 December 2022 (UTC)[reply]
  • The most difficult objective to achieve is, "To be effective, program modules need to be defined and distributed to team members. Also, team members must interact with one another in a meaningful and effective way." Timhowardriley (talk) 10:31, 5 December 2022 (UTC)[reply]
  • The most insightful sentence is, "C allows the programmer to control which region of memory data is to be stored." Timhowardriley (talk) 11:38, 5 December 2022 (UTC)[reply]
  • The "hodge podge" includes the sentence, "Software engineering is a variety of techniques to produce quality software." Timhowardriley (talk) 01:51, 12 February 2023 (UTC)[reply]
  • The "modern notion of a program is very different from, say, Ada Lovelace's note G" because "[a]t each stage in hardware's history, the task of computer programming changed dramatically." Timhowardriley (talk) 09:33, 12 February 2023 (UTC)[reply]
  • The "hello world" program in Basic at the beginning is is not "currently out of place" because "if a student didn't go on to a more powerful language, the student would still remember Basic." Timhowardriley (talk) 10:45, 22 February 2023 (UTC)[reply]
  • The "most unfortunate [inappropriate content is] the sprawling C++ code" which illustrates how "[i]n the 1970s, software engineers needed language support to break large projects down into modules. One obvious feature was to decompose large projects physically into separate files. A less obvious feature was to decompose large projects logically into abstract datatypes." Timhowardriley (talk) 12:59, 6 March 2023 (UTC)[reply]
    @Timhowardriley: With kindness, can you please stop editing the talk page of this article with non-constructive edits? I understand you disagree with the assessment of the article, but it doesn't help to repeatedly edit the talk page in this way. I also apologize if you took offense to the tone of my comments or felt that any of them are not actionable. My intention was to propose, in my view, how the article can be improved. Thanks, Caleb Stanford (talk) 04:42, 7 March 2023 (UTC)[reply]
    So far, this thread has successfully dissuaded any editor from trying to implement any of these substandard suggestions. Timhowardriley (talk) 11:00, 7 March 2023 (UTC)[reply]
    Follow up: an example of a quality suggestion would be, "Dr. Alpha from Bravo University wrote a computer textbook that has a chapter titled 'Program development'. In this chapter, software engineering and computer programming are discussed." Timhowardriley (talk) 12:51, 7 March 2023 (UTC)[reply]
    Tim, your posts have not successfully dissuaded any editor; nor do they attempt to substantively address any points that were raised. Your edits here are WP:DISRUPTIVE. They are non-constructive and do not engage with the criticism. Please do not continue this behavior.
    If you have any suggestions for how to improve the article in a different way, that is appropriate for the talk page. If you think the article is perfect as is, then simply let the page be. Caleb Stanford (talk) 16:51, 7 March 2023 (UTC)[reply]
  • Regarding About classification, I think it would be nice to overview some answers to the question: what are some of the ways that programs can be categorized?: The article currently describes a handful of program categories. They are: knobs and switches, first generation, second generation, third generation, fourth generation, imperative languages, declarative languages, functional languages, logical languages, object-oriented programs, application software, system software, utility programs, and microcode programs. What is your vision for an overview? Timhowardriley (talk) 17:32, 8 March 2023 (UTC)[reply]

Moved "program execution" template and top image to talk.

I'm moving the newly added "program execution" and the top image to this talk section.

Program vs. Process vs. Thread
Scheduling, Preemption, Context Switching

The "program execution" template is too large and negatively affects the article's format. The top image has interesting information, but too much of it. Also, the image should be split in two. There are two concepts present, and the joining of them is unclear. Timhowardriley (talk) 07:31, 10 June 2023 (UTC)[reply]

@Timhowardriley The distinction between "Program", "Process" and "Thread" and the steps that a line of "instruction code of program" is delivered to a CPU for processing is important. So in my opinion the image can be restored. That is, the image says "What happens that a CPU processes a program?". Thanks, Hooman Mallahzadeh (talk) 11:01, 10 June 2023 (UTC)[reply]
This edit to move the image to the OS section was a good idea. Timhowardriley (talk) 22:10, 14 June 2023 (UTC)[reply]

Prolog rewrite

This edit changed the Prolog section from material I could understand to material I cannot understand. This article is general purpose. It should explain computer programs at the most elementary level possible. The prior Prolog material was elementary. The current material is complicated. Was the prior material incorrect? Timhowardriley (talk) 20:22, 15 August 2023 (UTC)[reply]

Yes, unfortunately, the previous program was not correct. See the talk page for declarative programming. For example, the clauses cat(tom). animal(cat).are not correct Prolog. Robert Kowalski (talk) 21:24, 15 August 2023 (UTC)[reply]

Correct results for Prolog numeric grade example

The displayed results for Prolog's numeric grade example is not what the user would expect. The article says the results will display: X = 'A'. The expected results should display: X = 4. Timhowardriley (talk) 19:59, 16 August 2023 (UTC)[reply]

The example in its current form has two relations, which can be queried in isolation, or which can be queried in combination (like a join in a relational database). For example:
numeric_grade('A', 4).
numeric_grade('B', 3).
numeric_grade('C', 2).
numeric_grade('D', 1).
numeric_grade('F', 0).
numeric_grade(X, -1) :- not X = 'A', not X = 'B', not X = 'C', not X = 'D', not X = 'F'.
grade('The Student', 'A').
?- grade('The Student', X), numeric_grade(X, Y).
X = 'A',
Y = 4
Alternatively, the query could be used to define a new relation, which gives the grade of a student as a number:
numeric_grade('A', 4).
numeric_grade('B', 3).
numeric_grade('C', 2).
numeric_grade('D', 1).
numeric_grade('F', 0).
numeric_grade(X, -1) :- not X = 'A', not X = 'B', not X = 'C', not X = 'D', not X = 'F'.
grade_as_number(Student, Number) :- 
        grade(Student, Letter), numeric_grade(Letter, Number).
grade('The Student', 'A').
?- grade_as_number('The Student', Number).
Number = 4

Robert Kowalski (talk) 08:18, 18 August 2023 (UTC)[reply]

Followup: It would be nice to learn Prolog's syntax for forming functions. Could this example be converted to a function? If so, then how would the the driver program execute it? Timhowardriley (talk) 20:33, 16 August 2023 (UTC)[reply]

Here is the example in Ciao Prolog's functional syntax:
numeric_grade('A') := 4.
numeric_grade('B') := 3.
numeric_grade('C') := 2.
numeric_grade('D') := 1.
numeric_grade('F') := 0.
numeric_grade(X) := -1 :-  X \= 'A', X \= 'B', X \= 'C', X \= 'D', X \= 'F'.
grade_as_number(Student) := numeric_grade(grade(Student)).
grade('The Student') := 'A'.
grade(bob) := good.

?- ~grade_as_number(Student) = Number.
Number = 4,
Student = 'The Student' ;

Number = -1,
Student = bob
Just for fun, the query asks for all input-output pairs that satisfy the functional relationship "grade_as_number". Good for debugging.
Ciao executes the functional program by transforming it into the relational representation, with the value of the function as the last argument of the relation.

Prolog example use of word "clause"

The comprehensive example uses the word "clause" twice: "third clause" and "fourth clause". What are the first two clauses? Perhaps the clauses could be labeled in comments. Timhowardriley (talk) 12:33, 18 August 2023 (UTC)[reply]

Good idea. Thanks. Robert Kowalski (talk) 15:02, 18 August 2023 (UTC)[reply]

Prolog rule 4 a subclass or superclass?

@Robert Kowalski Rule 4) seems to define a superclass, not a subclass: A thing is a creature if the thing is a dragon:

is_a_creature(X) :-
    is_a_dragon(X).

Combining Rule 2) to Rule 4) constrains a creature to be a dragon if one parent is a dragon. I'm trying to wrap my head around the possibility of introducing a monster to the mix. A monster is a creature that doesn't billow fire.

is_a_monster(X) :-
    is_a_creature(X),
    not billows_fire(X).

Yet, the new rule would seem to contradict rule 4), unless rule 4) defines a superclass. Timhowardriley (talk) 00:54, 22 August 2023 (UTC)[reply]

@Timhowardriley Hm... You are right that rule 4 is not a definition of dragon as a subclass of creature. Nor is it a definition of creature as a superclass of dragon. At best, it is only a partial definition of the superclass creature, because there might be other creatures, such as monsters, which do not billow fire, and which therefore are not dragons. Good catch! Robert Kowalski (talk) 08:56, 22 August 2023 (UTC)[reply]