You get a bonus - 1 coin for daily activity. Now you have 1 coin

Programming: The Difference Between Computer Science and Programming

Lecture



Computer science — is the science of the processes and methods of collecting, processing, storing, analyzing, transmitting, and evaluating information using computer technologies, which make it possible to use that information for decision-making.

Programming — is the range of activity associated with creating and maintaining software in working order. This engineering discipline is called «software engineering». Programming — is the process of creating computer programs. In the words of one of the founders of programming languages, Niklaus Wirth, «Programs = algorithms + data structures». Programming is based on the use of programming languages in which the source texts of programs are written.

Programming: The Difference Between Computer Science and Programming

Fig. 1. The difference between computer science and programming

The sections above the red line pertain to software development. The areas of study below this line are the core subjects of computer science, or informatics. Computer science has clear, formal results. These topics build on one another: cryptography on complexity, and compilers on algorithms, for example.

Why is none of the programming topics below the red line? This line represents a quality known as «direct human involvement». Software development has this quality, whereas traditional computer science does not. The results of the disciplines below the line can be used by people, but these results are not directly influenced by people.

Connell's thesis:

Software development will never be a rigorous discipline with proven results, because it involves human activity.

In this section of our portal you will be able to find practically all the topics related to solving various problems of the IT industry and artificial intelligence. The computer was created to solve mathematical and logical problems, to optimize business processes or to solve their tasks. Nowadays a computer can also be entrusted with more complex processes; however, anything complex in any field can be decomposed into simple components. After all, in essence, on a computer we can process, create, and consume multimedia content and texts, but all of this consists only of binary logic. And what could be simpler? If you keep only one thing, you won't be able to make combinations, but it turns out that from just two components you can make everything.

By studying all the material on programming and computer science, you will be able not only to work excellently with information, but also to create algorithms and applications for working with it, including commercial ones. Remember that we are not a reference desk or a dump of articles from periodic online sites, but structured knowledge that is far better absorbed by you and honed in practice.

A modern programmer, or a person associated with this industry, should have a good knowledge of other disciplines as well; these can be studied or deepened in the corresponding sections.

Programming: The Difference Between Computer Science and Programming

What is programming? Programming is indeed often associated with solving complex puzzles or untangling tangled threads. The process of creating program code can be full of challenges and subtleties, but when all the elements fall into place, the result can be amazing.

Good code is like untangled threads that are easy to read and comprehend. When code is written neatly and in a structured way, it becomes more maintainable and reusable, which saves time and effort in the future.

And when these untangled threads "come to life" in the form of programs or applications, they can become powerful tools for solving various problems and, as a result, bring profit to their owners

History of programming languages

Programming: The Difference Between Computer Science and Programming
Plugboard of the IBM 402 accounting machine

205 BC (150 BC ) — the Antikythera mechanism from Ancient Greece was a calculator that used gears of various sizes and configurations that determined its operation , for tracking the Metonic cycle, still used in lunisolar calendars .

1206 — Al-Jazari built a programmable humanoid automaton. One system used in these devices employed pegs and cams placed in a wooden box in specific locations, which sequentially engaged levers that in turn controlled percussion instruments.

1804 — the Jacquard loom was built, constructed by Joseph Marie Jacquard, which revolutionized the weaving industry by making it possible to program patterns on fabrics using punched cards; it is sometimes considered the first programmable device

July 19, 1843 — Charles Babbage designed (but was unable to build) the «Analytical Engine» — the first programmable computing device

July 19, 1843 — Countess Ada Augusta Lovelace, daughter of the English poet George Byron, wrote the first program in the history of mankind for the Analytical Engine. This program solved Bernoulli's equation, which expresses the law of conservation of energy of a moving fluid. In her first and only scientific work, Ada Lovelace addressed a great number of questions. A number of the general principles she stated (the principle of economizing working memory cells, the connection of recurrence formulas with cyclic computation processes) have retained their fundamental significance for modern programming as well

Babbage's materials and Lovelace's comments outlined such concepts as the subroutine and the library of subroutines, instruction modification, and the index register, which only came into use in the 1950s However, none of the programs written by Ada Lovelace was ever run

The first widely known and successful high-level programming language was Fortran, developed from 1954 to 1957 by a team of IBM researchers led by John Backus. The success of Fortran led to the formation of a committee of scientists to develop a «universal» computer language. Separately, John McCarthy of the Massachusetts Institute of Technology developed the Lisp programming language (based on lambda calculus), the first language to originate in academic circles and achieve success. With the success of these initial efforts, programming languages became an active topic of research in the 1960s and beyond.

The first programming books in the USSR

The first openly published Soviet book on programming, electronic computing machines, and their various applications was the monograph by Anatoly Ivanovich Kitov, «Electronic Digital Machines», released in early 1956 . The final third of this book is devoted to the «Non-arithmetic use of computers» — the application of computers to controlling production processes, solving economic problems, artificial intelligence, machine translation, and so on. The book was translated into several foreign languages and published in the USA, China, Poland, Czechoslovakia, and other countries. About this book, the President of the USSR Academy of Sciences G. I. Marchuk wrote: «A. I. Kitov's book „Electronic Digital Machines“, which came out in 1956, actually caused a revolution in the minds of many researchers». The outstanding scientist of our time V. M. Glushkov noted: «A. I. Kitov is a recognized pioneer of cybernetics who laid the foundations of the national school of programming and the use of computers for solving military and national-economic problems. I myself, like tens of thousands of other specialists, gained my initial computer knowledge from his book „Electronic Digital Machines“ — the first national book on computers and programming». Professor John Carr of the University of Michigan (John Carr, USA), in his monograph «Lectures on Programming» (1958, USA), wrote that, having analyzed on this subject about 150 books published in the world at that time, the questions of both manual and automatic programming were best covered in the book by Anatoly Kitov.

Six months later, in that same year of 1956, the book by A. I. Kitov, N. A. Krinitsky, and P. N. Komolov, «Elements of Programming» (for electronic computing machines), was published under the editorship of A. I. Kitov. This nearly three-hundred-page book became the second publicly available computer monograph in the USSR. In the conclusion of this book it was declared: «The widespread use of these machines (computers) will raise all types of production in our country to a new, unprecedentedly high level, will make it possible to sharply increase the material well-being of our people, and will significantly strengthen the defense capability of our Motherland». These two books covered the enormous shortage of literature on computers and programming that existed at that time in the Soviet Union.

The book «Electronic Digital Machines and Programming» by A. I. Kitov and N. A. Krinitsky, published in 1959, was the first official textbook in the USSR on computers and programming, officially approved by the Ministry of Education of the USSR for instruction in colleges and universities. About this book, the President of the USSR Academy of Sciences G. I. Marchuk wrote: «In 1959 another fundamental work by A. I. Kitov appeared, written together with N. A. Krinitsky — „Electronic Digital Machines and Programming“. It was in fact an encyclopedia of the science of computers. Many generations of students at the country's universities and colleges obtained a fundamental education with the help of this remarkable book and became first-class scientists in many fields of knowledge. The books by A. I. Kitov, written at the dawn of the computer era in our country, must not be forgotten». This book was published in Romania, Hungary, the German Democratic Republic, and a number of other countries. The second stereotype edition of the book «Electronic Digital Machines and Programming» appeared in 1961. The total print run of the foreign and two Soviet editions came to over 130,000 copies. About this encyclopedic textbook, in his memoirs the veteran of the computer engineering department of MEI (the first computer department in the country), Doctor of Technical Sciences, Professor A. K. Polyakov wrote as follows: «In my opinion, the textbook by A. I. Kitov and N. A. Krinitsky „Electronic Digital Machines and Programming“ (1959) was the best in the world at that time». .

Programming languages

Most of a programmer's work involves writing source code, testing, and debugging programs in one of the programming languages. The source texts and executable files of programs are objects of copyright and are the intellectual property of their authors and rights holders .

Different programming languages support different programming styles (programming paradigms). Choosing the right programming language for certain parts of an algorithm makes it possible to reduce the time spent writing a program and to solve the problem of describing the algorithm most effectively. Different languages require the programmer to pay different levels of attention to detail when implementing an algorithm, which often results in a trade-off between simplicity and performance (or between programmer time and user time).

The only language directly executed by a computer is machine language (also called machine code and machine instruction language). Originally all programs were written in machine code, but this is now practically no longer done. Instead, programmers write source code in one or another programming language and then, using a compiler, translate it in one or more stages into machine code ready for execution on the target processor, or into an intermediate representation that can be executed by a special interpreter — a virtual machine. But this is true only for high-level languages. If full low-level control over the system at the level of machine instructions and individual memory cells is required, programs are written in assembly language, whose mnemonic instructions are converted one-to-one into the corresponding instructions of the machine language of the target computer processor (for this reason, translators from assembly languages turn out to be the algorithmically simplest translators).

In some languages, instead of machine code, an interpreted binary code of a «virtual machine» is generated, also called byte-code (byte-code). This approach is used in Forth, some implementations of Lisp, Java, Perl, Python, and languages for the .NET Framework.

Programming: The Difference Between Computer Science and Programming
Screenshot of a fragment of Java code in the vim text editor, demonstrating syntax highlighting, Unicode support, and folding

Tools System software / development tools

The text editor of a programming environment may have specific functionality, such as name indexing, documentation display, syntax highlighting, and tools for visually creating a user interface. Using a text editor, the programmer types and edits the text of the program being created, which is called the source code. The programming language defines the syntax and the initial semantics of the source code.

In the programming process, integrated development environments are now widely used [10], which usually include:

  • a code editor for entering and editing the text of programs[10];
  • a debugger for debugging (finding and eliminating errors);
  • a translator for converting the program text into a machine representation;
  • a linker for assembling the program from several modules;
  • other utility modules and tools.

Modern programming

Quality requirements

Whatever the approach to development, the final program must satisfy some fundamental properties. The following properties are among the most important:

  • Reliability: how often the program's results are correct. This depends on the conceptual correctness of the algorithms and on minimizing programming errors, such as errors in resource management (for example, buffer overflows and race conditions) and logic errors (for example, division-by-zero errors or off-by-one errors).
  • Robustness: how well the program anticipates problems due to errors (rather than bugs). This includes situations such as incorrect, inconsistent, or corrupted data, unavailability of necessary resources such as memory, operating system services, and network connections, user error, and unexpected power outages.
  • Usability: the ergonomics of a program: the ease with which a person can use the program for its intended purpose or, in some cases, even for unforeseen purposes. Such issues can make or break success even independently of other issues. This includes a wide range of textual, graphical, and sometimes hardware elements that improve the clarity, intuitiveness, cohesiveness, and completeness of a program's user interface.
  • Portability: the range of computer hardware and operating system platforms on which a program's source code can be compiled/interpreted and run. This depends on differences in the programming facilities provided by different platforms, including hardware and operating system resources, the expected behavior of the hardware and operating system, and the availability of platform-specific compilers (and sometimes libraries) for the source code language.
  • Maintainability: the ease with which a program can be modified by its present or future developers in order to make improvements or customizations, fix bugs and security holes, or adapt it to new environments. Best practices[26] during the initial stage of development matter in this respect. This quality may not be obvious to the end user, but it can significantly affect the fate of a program in the long term.
  • Efficiency / performance: a measure of the system resources consumed by a program (processor time, memory footprint, slow devices such as disks, network bandwidth, and to some extent even user interaction): the less, the better. This also includes careful resource management, for example cleaning up temporary files and eliminating memory leaks. This is often discussed in the shadow of the chosen programming language. Although the language definitely affects performance, even slower languages such as Python can execute programs instantly from a human standpoint. Speed, resource use, and performance are important for programs that create bottlenecks in the system, but efficient use of the programmer's time is also important and is tied to costs: more hardware may be cheaper.

Source code readability

In computer programming, readability means the ease with which a human reader can understand the purpose, control flow, and operation of source code. It affects the aspects of quality listed above, including portability, usability, and, most importantly, maintainability.

Readability is important because programmers spend most of their time reading, trying to understand and modify existing source code, rather than writing new source code. Unreadable code often leads to bugs, inefficiency, and duplicated code. A study[27] showed that several simple readability transformations made the code shorter and significantly reduced the time needed to understand it.

Following a consistent programming style often promotes readability. However, readability is more than just programming style. Many factors, having little or nothing to do with a computer's ability to efficiently compile and execute the code, contribute to readability. [28] Some of these factors include:

  • Different indentation styles (whitespace)
  • Comments
  • Decomposition
  • Naming conventions for objects (such as variables, classes, procedures, etc.)

In presentation, aspects of this (for example, indentation, line breaks, highlight color, etc.) are often handled by the source code editor, but aspects of content reflect the talent and skill of the programmer.

Various visual programming languages have also been developed with the aim of addressing readability problems by adopting unconventional approaches to code structure and display. Integrated development environments (IDEs) seek to combine all such assistance. Techniques such as code refactoring can improve readability.

Algorithmic complexity

The academic field and engineering practice of computer programming are largely concerned with discovering and implementing the most efficient algorithms for a given class of problems. To this end, algorithms are classified into orders using the so-called Big O notation, which expresses the use of resources such as execution time or memory consumption in terms of the size of the input. Experienced programmers are familiar with a multitude of well-established algorithms and their respective complexities and use this knowledge to choose the algorithms best suited to particular circumstances.

Chess algorithms as an example

«Programming a Computer for Playing Chess» is a 1950 article that evaluated the «minimax» algorithm, which is part of the history of algorithmic complexity; the IBM Deep Blue (chess computer) course is part of the computer science curriculum at Stanford University.

Methodologies

The first step in most formal software development processes is requirements analysis, followed by testing to determine a value model, implementation, and elimination of failures (debugging). For each of these tasks there are many different approaches. One popular approach to requirements analysis is use case analysis. Many programmers use forms of agile software development, in which the various stages of formal software development are more integrated into short cycles that take a few weeks rather than years. There are many approaches to the software development process.

Popular modeling methods include object-oriented analysis and design (OOAD) and model-driven architecture (MDA). The Unified Modeling Language (UML) is a notation used for both OOAD and MDA.

A similar technique used for database design is entity-relationship modeling (ER modeling).

Implementation techniques include imperative languages (object-oriented or procedural), functional languages, and logic languages.

Measuring language use

It is very difficult to determine which modern programming languages are the most popular. Methods for measuring the popularity of a programming language include: counting the number of job postings that mention the language, the number of books and courses sold that teach the language (this overestimates the importance of new languages), and estimates of the number of existing lines of code written in the language (this underestimates the number of users of business languages such as COBOL).

Some languages are very popular for certain types of applications, while some languages are regularly used to write many different types of applications. For example, COBOL is still strong in corporate data centers, often on large mainframes, Fortran in engineering applications, scripting languages in web development, and C in embedded software. Many applications use a combination of several languages during creation and use. New languages are usually developed based on the syntax of a previous language with the addition of new features (for example, C++ adds object orientation to C, and Java adds memory management and byte-code to C++, but as a result loses efficiency and the possibility of low-level manipulation).

Program debugging

Programming: The Difference Between Computer Science and Programming
The first known actual bug causing a problem in a computer was a moth stuck inside the Harvard mainframe, which was recorded in the log on September 9, 1947. [32] «Bug» was already a common term for a software defect when this error was discovered.

Debugging is a very important task in the software development process, since the presence of defects in a program can have serious consequences for its users. Some languages are more prone to certain kinds of errors because their specification does not require compilers to perform as thorough a check as other languages. Using a static code analysis tool can help detect some possible problems. Usually the first step in debugging is to try to reproduce the problem. This can be a non-trivial task, for example with parallel processes or some unusual software bugs. In addition, the specific user environment and usage history can make it difficult to reproduce the problem.

After the bug is reproduced, the program input may need to be simplified in order to make debugging easier. For example, when a bug in a compiler can cause it to crash while parsing some large source file, simplifying the test case so that only a few lines remain in the original source file may be enough to reproduce the same crash. A trial-and-error / divide-and-conquer method is needed: the programmer will try to remove some parts of the original test case and check whether the problem still exists. When debugging a problem in a graphical interface, the programmer may try to skip some user actions from the original problem description and check whether the remaining actions are enough for the errors to appear. Scripting and setting breakpoints are also part of this process.

Debugging is often done with the help of an IDE. Standalone debuggers such as GDB are also used, and they often provide a less visual environment, usually using the command line. Some text editors, such as Emacs, allow GDB to be invoked through them in order to provide a visual environment.

Software architecture

Software architecture refers to the fundamental structures of a software system and the discipline of creating such structures and systems. Each structure includes software elements, the relationships between them, and the properties of both the elements and the relationships. The architecture of a software system is a metaphor, analogous to the architecture of a building. It functions as a blueprint for the system and the project being developed, laying out the tasks that must be carried out by the project teams.

Software architecture is about making fundamental structural decisions that are costly to change after implementation. The choice of software architecture includes specific structural options from the possibilities in software development. For example, the systems controlling the "Space Shuttle" launch vehicle had to be very fast and very reliable. Consequently, an appropriate real-time computing language had to be chosen. In addition, in order to satisfy the need for reliability, one could choose several redundant and independently created copies of the program and run these copies on independent hardware while cross-checking the results.

Documenting software architecture facilitates communication between stakeholders, records early high-level design decisions, and allows design components to be reused between projects

The Art of Computer Programming

The Art of Computer Programming ( TAOCP) is a comprehensive monograph written by computer scientist Donald Knuth that covers many kinds of programming algorithms and their analysis.

Knuth began this project, originally conceived as a single book with twelve chapters, in 1962. The first three volumes of what was then intended to be a seven-volume set were published in 1968, 1969, and 1973. Serious work on volume 4 began in 1973, but was suspended in 1977 for typesetting work. Writing of the final copy of volume 4A began by hand in 2001, and the first online pre-fascicle, 2A, appeared later in 2001. The first published installment of volume 4 appeared in paperback as Fascicle 2 in 2005. Volume 4A, combining Volume 4, Parts 0–4, was published in 2011. Volume 4, Fascicle 6 («Satisfiability») was released in December 2015; Volume 4, Fascicle 5 («Mathematical Preliminaries Redux; Backtracking; Dancing Links»

Fascicles 5 and 6 are expected to make up the first two-thirds of volume 4B. Knuth has not announced any anticipated release date for volume 4B, although his method used for volume 4A is to release the volume in hardcover some time after releasing the paperback fascicles it contains. According to the publishers' most recent estimates, the release date was May or June 2019, which turned out to be incorrect

See also

  • Association for Computing Machinery
  • [[b2494]]
  • Hello world program
  • System programming
  • Computer programming in the punched card era
  • [[b8565]]
  • [[b8566]]
  • [[b38]]
  • [[b7825]]
  • [[b4960]]
  • [[b5187]]
  • [[b3123]]
  • [[b5918]]
  • [[b4474]]
  • Chemoinformatics
  • Bioinformatics
  • [[b9448]]
  • Computer science and engineering
  • Computer engineering
  • Unsolved problems in computer science
  • Digital revolution
  • Algorithmic trading
  • Information and communication technologies
  • Structured program theorem
created: 2021-06-15
updated: 2026-03-09
271



Was this answer useful?
Choose a quick rating so we can improve the next answer for you.
How satisfied are you?


Comments

To leave a comment

If you have any suggestion, idea, thanks or comment, feel free to write. We really value feedback and are glad to hear your opinion.
To reply

Lectures and tutorial on "Software and information systems development"

Terms: Software and information systems development