Computer programming: Difference between revisions

Content deleted Content added
History: Added additional information and a source about Ada Lovelace and her significance to the creation of the first program.
Undid revision 1305143863 by 2409:40E4:1093:6A79:4197:77B:EB10:F20D (talk) unexplained removal of content
 
(36 intermediate revisions by 22 users not shown)
Line 3:
{{Use American English|date=November 2020}}
{{Software development process}}
'''Computer programming''' or '''coding''' is the composition of sequences of instructions, called [[computer program|programs]], that [[computer]]s can follow to perform tasks.<ref>{{cite web|url=http://yearofcodes.tumblr.com/what-is-coding|title=What is coding|last=Bebbington|first=Shaun|year=2014|website=Tumblr|url-status=live|archive-url=https://web.archive.org/web/20200429195646/https://yearofcodes.tumblr.com/what-is-coding|archive-date=2020-04-29|access-date=2014-03-03}}</ref><ref>{{cite web|url=http://yearofcodes.tumblr.com/what-is-programming|title=What is programming|last=Bebbington|first=Shaun|year=2014|website=Tumblr|url-status=live|archive-url=https://web.archive.org/web/20200429195958/https://yearofcodes.tumblr.com/what-is-programming|archive-date=2020-04-29|access-date=2014-03-03}}</ref> It involves designing and implementing [[algorithm]]s, step-by-step specifications of procedures, by writing [[source code|code]] in one or more [[programming language]]s. Programmers[[Programmer]]s typically use [[high-level programming language]]s that are more easily intelligible to humans than [[machine code]], which is directly executed by the [[central processing unit]]. Proficient programming usually requires expertise in several different subjects, including knowledge of the [[Domain (software engineering)|application ___domain]], details of programming languages and generic code [[library (computing)|libraries]], specialized algorithms, and [[Logic#Formal logic|formal logic]].
 
Auxiliary tasks accompanying and related to programming include [[Requirements analysis|analyzing requirements]], [[Software testing|testing]], [[debugging]] (investigating and fixing problems), implementation of [[Build automation|build systems]], and management of derived [[Artifact (software development)|artifacts]], such as programs' [[machine code]]. While these are sometimes considered programming, often the term ''[[software development]]'' is used for this larger overall process – with the terms ''programming'', ''implementation'', and ''coding'' reserved for the writing and editing of code per se. Sometimes software development is known as ''[[software engineering]]'', especially when it employs [[formal methods]] or follows an [[engineering design process]].
Line 85:
It is very difficult to determine what are the most popular modern programming languages. Methods of measuring programming language popularity include: counting the number of job advertisements that mention the language,<ref>{{cite web|url = http://www.computerweekly.com/Articles/2007/09/11/226631/sslcomputer-weekly-it-salary-survey-finance-boom-drives-it-job.htm|title = SSL/Computer Weekly IT salary survey: finance boom drives IT job growth|date = 11 September 2007|first = Nicholas|last = Enticknap|url-access = registration|access-date = June 24, 2009|archive-date = October 26, 2011|archive-url = https://web.archive.org/web/20111026035734/http://www.computerweekly.com/Articles/2007/09/11/226631/SSLComputer-Weekly-IT-salary-survey-finance-boom-drives-IT-job.htm|url-status = live}}</ref> the number of books sold and courses teaching the language (this overestimates the importance of newer 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 writing particular kinds of applications, while someother languages are regularly used to write many different kinds of applications. For example, [[COBOL]] is still strongprevalent in corporate data centers<ref>{{cite web|last1=Mitchell|first1=Robert|title=The Cobol Brain Drain|url=http://www.computerworld.com/article/2504568/data-center/the-cobol-brain-drain.html|publisher=Computer World|access-date=9 May 2015|date=2012-05-21|archive-date=February 12, 2019|archive-url=https://web.archive.org/web/20190212185631/https://www.computerworld.com/article/2504568/data-center/the-cobol-brain-drain.html|url-status=live}}</ref> often on large [[mainframe computer]]s, [[Fortran]] in engineering applications, [[scripting language]]s in [[World Wide Web|Web]] development, and [[C (programming language)|C]] in [[embedded software]]. Many applications use a mix of several languages in their construction and use. New languages are generally designed around the syntax of a prior language with new functionality added, (for example [[C++]] adds object-orientation to C, and [[Java (programming language)|Java]] adds memory management and [[bytecode]] to C++, but as a result, loses efficiency and the ability for low-level manipulation).
 
===Debugging===
Line 98:
==Programming languages{{anchor|Languages}}==
{{Main|Programming language|List of programming languages}}
{{See also|Computer program#Languages|List of open-source programming languages}}
 
Different programming languages support different styles of programming (called ''[[programming paradigm]]s''). The choice of language used is subject to many considerations, such as company policy, suitability to task, availability of third-party packages, or individual preference. Ideally, the programming language best suited for the task at hand will be selected. Trade-offs from this ideal involve finding enough programmers who know the language to build a team, the availability of compilers for that language, and the efficiency with which programs written in a given language execute. Languages form an approximate spectrum from "low-level" to "high-level"; "low-level" languages are typically more machine-oriented and faster to execute, whereas "high-level" languages are more abstract and easier to use but execute less quickly. It is usually easier to code in "high-level" languages than in "low-level" ones.
Line 115:
 
==Learning to program==
{{also|Computing education}}
Learning to program has a long history related to professional standards and practices, academic initiatives and curriculum, and commercial books and materials for students, self-taught learners, hobbyists, and others who desire to create or customize software for personal use. Since the 1960s, learning to program has taken on the characteristics of a ''popular movement'', with the rise of academic disciplines, inspirational leaders, collective identities, and strategies to grow the movement and make institutionalize change.<ref>{{cite book |last1=Halvorson |first1=Michael J. |title=Code Nation: Personal Computing and the Learn to Program Movement in America |date=2020 |publisher=ACM Books |___location=New York, NY |pages=3–6}}</ref> Through these social ideals and educational agendas, learning to code has become important not just for scientists and engineers, but for millions of citizens who have come to believe that creating software is beneficial to society and its members.
 
Line 128 ⟶ 129:
Programmers soon had a range of learning texts at their disposal. ''Programmer's references'' listed keywords and functions related to a language, often in alphabetical order, as well as technical information about compilers and related systems. An early example was IBM's ''Programmers' Reference Manual: the FORTRAN Automatic Coding System for the IBM 704 EDPM'' (1956).
 
Over time, the genre of ''programmer's guides'' emerged, which presented the features of a language in tutorial or step by step format. Many early primers started with a program known as [[Helloworld|“Hello"Hello, World”World"]], which presented the shortest program a developer could create in a given system. Programmer's guides then went on to discuss core topics like declaring variables, data types, formulas, flow control, user-defined functions, manipulating data, and other topics.
 
Early and influential programmer's guides included [[John G. Kemeny]] and [[Thomas E. Kurtz|Thomas E. Kurtz's]] ''BASIC Programming'' (1967), Kathleen Jensen and [[Niklaus Wirth|Niklaus Wirth's]] ''The Pascal User Manual and Report'' (1971), and [[Brian W. Kernighan]] and [[Dennis Ritchie|Dennis Ritchie's]] ''The C Programming Language'' (1978). Similar books for popular audiences (but with a much lighter tone) included [[Bob Albrecht|Bob Albrecht's]] ''My Computer Loves Me When I Speak BASIC'' (1972), Al Kelley and Ira Pohl's ''A Book on C'' (1984), and [[Dan Gookin|Dan Gookin's]] ''C for Dummies'' (1994).
 
Beyond language-specific primers, there were numerous books and academic journals that introduced professional programming practices. Many were designed for university courses in computer science, software engineering, or related disciplines. [[Donald Knuth|Donald Knuth's]] ''[[The Art of Computer Programming]]'' (1968 and later), presented hundreds of computational algorithms and their analysis. ''The Elements of Programming Style'' (1974), by [[Brian W. Kernighan]] and [[P. J. Plauger]], concerned itself with programming ''style'', the idea that programs should be written not only to satisfy the compiler but human readers. [[Jon Bentley (computer scientist)|Jon Bentley's]] ''Programming Pearls'' (1986) offered practical advice about the art and craft of programming in professional and academic contexts. Texts specifically designed for students included Doug Cooper and Michael Clancy's ''Oh Pascal!'' (1982), [[Alfred Aho|Alfred Aho's]] ''Data Structures and Algorithms'' (1983), and Daniel Watt's ''Learning with Logo'' (1983).
 
===Technical publishers===
Line 142 ⟶ 143:
 
===Digital learning / online resources===
{{See also|Online integrated development environment|l1=List of online integrated development environments|List of educational software#Computer science|l2=List of educational software for computer programming}}
Between 2000 and 2010, computer book and magazine publishers declined significantly as providers of programming instruction, as programmers moved to Internet resources to expand their access to information. This shift brought forward new digital products and mechanisms to learn programming skills. During the transition, digital books from publishers transferred information that had traditionally been delivered in print to new and expanding audiences.<ref>{{cite book |last1=Halvorson |first1=Michael J. |title=Code Nation: Personal Computing and the Learn to Program Movement in America |date=2020 |publisher=ACM Books |___location=New York, NY |pages=365–368}}</ref>
 
Important Internet resources for learning to code included blogs, wikis, videos, online databases, subscription sites, and custom websites focused on coding skills. New commercial resources included [[YouTube]] videos, Lynda.com tutorials (later [[LinkedIn Learning]]), [[Khan Academy]], [[Codecademy]], [[GitHub]], [[W3Schools]], [[Codewars]], and numerous [[Coding bootcamp|coding bootcamps]].
 
Most software development systems and [[game engine|game engines]] included rich online help resources, including [[integrated development environment|integrated development environments]] (IDEs), [[context-sensitive help]], [[API|APIs]], and other digital resources. Commercial [[software development kit|software development kits]] (SDKs) also provided a collection of software development tools and documentation in one installable package.
Line 173 ⟶ 175:
*[[Computer network]]ing
*[[Competitive programming]]
*[[List of software programming journals]]
*[[List of free and open-source software packages#Programming language support|List of free and open-source software packages for programming]]
*[[Programming best practices]]
*[[Systems programming]]