Content deleted Content added
Mindmatrix (talk | contribs) m Reverted edit by Serendipitykoch (talk) to last version by Nita Amalia |
Undid revision 1305143863 by 2409:40E4:1093:6A79:4197:77B:EB10:F20D (talk) unexplained removal of content |
||
(48 intermediate revisions by 30 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.
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 15:
[[Code-breaking]] algorithms have also existed for centuries. In the 9th century, the [[Mathematics in medieval Islam|Arab mathematician]] [[Al-Kindi]] described a [[cryptographic]] algorithm for deciphering encrypted code, in ''A Manuscript on Deciphering Cryptographic Messages''. He gave the first description of [[cryptanalysis]] by [[frequency analysis]], the earliest code-breaking algorithm.<ref>{{cite book |last1=Dooley |first1=John F. |title=A Brief History of Cryptology and Cryptographic Algorithms |date=2013 |publisher=Springer Science & Business Media |isbn=9783319016283 |pages=12–3}}</ref>
The first [[computer program]] is generally dated to 1843 when mathematician [[Ada Lovelace]] published an [[algorithm]] to calculate a sequence of [[Bernoulli numbers]], intended to be carried out by [[Charles Babbage]]'s [[Analytical Engine]].<ref name="IEEE">{{Cite journal | last1 = Fuegi | first1 = J. | last2 = Francis | first2 = J. | title = Lovelace & Babbage and the Creation of the 1843 'notes' | journal = IEEE Annals of the History of Computing | volume = 25 | issue = 4 | pages = 16 | year = 2003 | doi = 10.1109/MAHC.2003.1253887}}</ref> The algorithm, which was conveyed through notes on a translation of Luigi Federico Menabrea's paper on the analytical engine was mainly conceived by Lovelace as can be discerned through her correspondence with Babbage. However, Charles Babbage himself had written a program for the AE in 1837.<ref name="IEEE2021">{{Cite journal | last1 = Rojas | first1 = R. | title = The Computer Programs of Charles Babbage | journal = IEEE Annals of the History of Computing | volume = 43 | issue = 1 | pages = 6–18 | year = 2021 | doi = 10.1109/MAHC.2020.3045717}}</ref><ref name="IEEE2024">{{Cite journal | last1 = Rojas | first1 = R. | title = The First Computer Program | journal = Communications of the ACM | volume = 67 | issue = 6 | pages = 78–81 | year = 2024 | doi = 10.1145/3624731| doi-access = free | url = https://refubium.fu-berlin.de/bitstream/fub188/44090/1/3624731.pdf }}</ref> Lovelace was also the first to see a broader application for the analytical engine beyond mathematical calculations.
[[File:PunchCardDecks.agr.jpg|thumb|Data and instructions were once stored on external [[punched card]]s, which were kept in order and arranged in program decks.]]
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
===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|
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
===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]]
Line 183 ⟶ 187:
*{{Cite book|url=https://books.google.com/books?id=C8ouDwAAQBAJ&q=9780735211759&pg=PP1|title=Broad Band: The Untold Story of the Women Who Made the Internet|last=Evans|first=Claire L.|publisher=Portfolio/Penguin|year=2018|isbn=9780735211759|___location=New York}}
*{{Cite journal|last=Gürer|first=Denise|s2cid=6626310|date=1995|title=Pioneering Women in Computer Science|url=https://courses.cs.washington.edu/courses/csep590/06au/readings/p175-gurer.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://courses.cs.washington.edu/courses/csep590/06au/readings/p175-gurer.pdf |archive-date=2022-10-09 |url-status=live|journal=Communications of the ACM|volume=38|issue=1|pages=45–54|doi=10.1145/204865.204875}}
*{{Cite journal|last=Smith|first=Erika E.|date=2013|title=Recognizing a Collective Inheritance through the History of Women in Computing
*Essinger, J., & EBSCO Publishing (Firm). (2014). ''Ada's algorithm: How lord byron's daughter ada lovelace launched the digital age''. Melville House.
==Further reading==
|