#set document(title: "1.8 Why Python?", author: "OpenStax / XYZ Homework") #set page(width: 8.5in, height: auto, margin: 1in) #import "@preview/cetz:0.5.2" #set text(font: ("STIX Two Text", "Libertinus Serif", "New Computer Modern"), size: 10.5pt, lang: "en") #show math.equation: set text(font: ("STIX Two Math", "New Computer Modern Math")) #set par(justify: true, leading: 0.62em, spacing: 0.9em) #set enum(spacing: 1.1em) // room between list items so tall inline fractions don't collide #set list(spacing: 1.1em) #set table(stroke: 0.5pt + rgb("#c7ccd3")) #let BLUE = rgb("#183B6F") // brand navy — section bars + example/solution labels (white on navy 11.09:1) #let ORANGE = rgb("#A94509") // brand primary-700 — AA-safe deep orange for TEXT (5.93:1 on white; raw brand #F37021 is 2.94:1 and must never carry text) #let RED = rgb("#DC2626") // brand error-600 #let GREEN = rgb("#059669") // brand success-600 (decoration only; small green text uses green-text #007942) #show heading.where(level: 1): it => block(width: 100%, above: 0pt, below: 16pt, fill: gradient.linear(BLUE, rgb("#2C5AA0")), inset: (x: 14pt, y: 12pt), radius: 3pt, text(fill: white, weight: "bold", size: 19pt, it.body)) #show heading.where(level: 2): it => block(width: 100%, above: 18pt, below: 10pt, fill: BLUE, inset: (x: 10pt, y: 6pt), radius: 2pt, text(fill: white, weight: "bold", size: 12pt, it.body)) #show heading.where(level: 3): it => text(fill: ORANGE, weight: "bold", size: 12.5pt, it.body) #show heading.where(level: 4): it => text(fill: BLUE, weight: "bold", size: 10.5pt, it.body) #let examplebox(label, title, body) = block(width: 100%, breakable: true, fill: rgb("#EFF1F5"), stroke: 0.5pt + rgb("#CFDDF0"), radius: 4pt, inset: 10pt, above: 12pt, below: 12pt)[ #block(below: 6pt)[#box(fill: BLUE, inset: (x: 6pt, y: 2pt), radius: 2pt, text(fill: white, weight: "bold", size: 8.5pt, label)) #h(0.4em) #strong[#title]] #body] // rail = decorative left rule (raw brand token); labelcolor = AA-safe label text shade #let notebox(label, rail, labelcolor, tint, body) = block(width: 100%, breakable: true, fill: tint, stroke: (left: 3pt + rail), inset: (left: 10pt, rest: 8pt), radius: (right: 4pt), above: 11pt, below: 11pt)[ #text(fill: labelcolor, weight: "bold", size: 7.5pt, tracking: 0.5pt)[#upper(label)] #linebreak() #body] #let solutionbox(body) = block(above: 4pt, below: 8pt)[ #text(fill: BLUE, weight: "bold", size: 8.5pt)[Solution] #linebreak() #body] #let figph(msg) = block(width: 100%, height: 60pt, fill: rgb("#f6f7f9"), stroke: (paint: rgb("#c7ccd3"), dash: "dashed"), radius: 4pt, inset: 10pt)[ #align(center + horizon, text(fill: rgb("#889"), style: "italic", size: 9pt, msg))] // Standardize inlined figure sizes: measure the natural CeTZ canvas, then scale to a // consistent envelope (aspect-aware; see build_typst.py FIG_* constants). Unlike the // print preamble, dimensions are FLOORED: in an editor a user can trim a figure to a // degenerate 1-D shape (a bare line), and w/h or tw/w would then divide by zero. #let _STD_W = 3.5 #let _WIDE_W = 5.6 #let _MAX_H = 3.4 #let _ASPECT_WIDE = 2.2 #let _UPSCALE_MAX = 1.15 #let stdfig(body) = context { let m = measure(body) let w = calc.max(m.width / 1in, 0.01) let h = calc.max(m.height / 1in, 0.01) let tw = if w / h > _ASPECT_WIDE { _WIDE_W } else { _STD_W } let s = calc.min(tw / w, _MAX_H / h, _UPSCALE_MAX) align(center, box(scale(x: s * 100%, y: s * 100%, reflow: true, body))) } #show figure: set block(breakable: false) #set figure(gap: 8pt) #show figure.caption: set text(size: 8.5pt, fill: rgb("#555")) == 1.8#h(0.6em)Why Python? === Learning objectives By the end of this section you should be able to - Name two historical facts about how Python was first created. - Describe two ways Python is considered a popular language. === Historical background Python has an interesting history. In 1982, #link("https://openstax.org/r/100vanRossum")[Guido van Rossum], the creator of Python, started working at #link("https://openstax.org/r/100CWI")[CWI], a Dutch national research institute. He joined a team that was designing a new programming language, named ABC, for teaching and prototyping. ABC's simplicity was ideal for beginners, but the language lacked features required to write advanced programs. Several years later, van Rossum joined a different team at CWI working on an operating system. The team needed an easier way to write programs for monitoring computers and analyzing data. Languages common in the 1980's were (and still are) difficult to use for these kinds of programs. van Rossum envisioned a new language that would have a simple syntax, like ABC, but also provide advanced features that professionals would need. At first, van Rossum started working on this new language as a hobby during his free time. He named the language Python because he was a fan of the British comedy group #link("https://openstax.org/r/100MontyPython")[Monty Python]. Over the next year, he and his colleagues successfully used Python many times for real work. van Rossum eventually decided to share Python with the broader programming community online. He freely shared Python's entire source code so that anyone could write and run Python programs. Python's first release, known as Version 0.9.0, appeared in 1991, about six years after C++ and four years before Java. van Rossum's decisions to make the language simple yet advanced, suitable for everyday tasks, and freely available online contributed to Python's long-term success. #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Key decisions] #link("https://www.openstax.org/r/key-decisions")[Key decisions; ch 1, video 14] ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Python history] ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Exploring further] For more details about Python's history, see "#link("https://openstax.org/r/100history")[A brief history of Python]" by Vasilisa Sheromova, and "#link("https://openstax.org/r/100sheromova")[History and Philosophy of Python]" by Bernd Klein. ] === Popularity of Python Over the years, Python has become a nonprofit organization with a thriving community. Millions of programmers around the world use Python for all kinds of interesting projects. Hundreds of thousands of Python libraries have been released as open source software. The Python community is very active and supportive online, answering questions and sharing code. One way to see Python's popularity is the #link("https://openstax.org/r/100TIOBE")[TIOBE index]. TIOBE is a Dutch company that provides products and services for measuring software code quality. Since 2001, TIOBE has tracked the popularity of programming languages and posted the results online. shows the TIOBE index over time for five of the most popular languages. The TIOBE index is based on the number of search engine results for each language. The percentage refers to how many results belong to that language. Python has been among the top 10 languages every year since 2004. In October 2021, Python became the \#1 language on the TIOBE index. No other language but C and Java had been \#1 for the previous 20 years. Another way to see Python's popularity is to analyze how frequently Python is discussed online. #link("https://openstax.org/r/100overflow")[Stack Overflow] is a question-and-answer website for programmers. shows the number of questions asked each month that were tagged with Python, JavaScript, and so forth. In recent years, Python has become the most asked about language in programming forums. #figure(figph[Scatterplot with five lines representing the popularity of Python, JavaScript, Java, C++, and C. The x-axis spans the years 2016 to 2023. The y-axis ranges from 0% to 20% and represents the percentage of search engine results. The line for JavaScript is mostly flat and hovers around 2% to 4%. The line for C++ is also relatively flat and ranges from 4% to 8% until 2022, when C++ increases to 14% by 2023. The line for C starts around 12%, drops to 8% in mid 2017, rises back to 17% in 2021, but then falls to 12% by 2022. The line for Java starts at 21% in 2016, falls to 12% by 2018, remains on top until mid 2020, and then falls to 12%. The line for Python hovers around 4% from 2016 to 2018, but then steadily increases to 16% by 2022.], alt: "Scatterplot with five lines representing the popularity of Python, JavaScript, Java, C++, and C. The x-axis spans the years 2016 to 2023. The y-axis ranges from 0% to 20% and represents the percentage of search engine results. The line for JavaScript is mostly flat and hovers around 2% to 4%. The line for C++ is also relatively flat and ranges from 4% to 8% until 2022, when C++ increases to 14% by 2023. The line for C starts around 12%, drops to 8% in mid 2017, rises back to 17% in 2021, but then falls to 12% by 2022. The line for Java starts at 21% in 2016, falls to 12% by 2018, remains on top until mid 2020, and then falls to 12%. The line for Python hovers around 4% from 2016 to 2018, but then steadily increases to 16% by 2022.", caption: [#strong[TIOBE programming community index]. Source: #link("https://www.tiobe.com/tiobe-index/")[www.tiobe.com]]) #figure(figph[Scatterplot with five lines representing the popularity of Python, JavaScript, Java, C++, and C. The x-axis spans the years 2016 to 2023. The y-axis ranges from 0% to 20% and represents the percentage of questions asked. C and C++ are on bottom, hovering around 2% and 4% respectively. Java starts around 8% but steadily decreases to about 5% in 2023. JavaScript hovers between 12% and 8% and is the top language until Python crosses in 2018. Python starts at 7%, climbs steadily to 17% in 2022, and tapers off at 14% in 2023.], alt: "Scatterplot with five lines representing the popularity of Python, JavaScript, Java, C++, and C. The x-axis spans the years 2016 to 2023. The y-axis ranges from 0% to 20% and represents the percentage of questions asked. C and C++ are on bottom, hovering around 2% and 4% respectively. Java starts around 8% but steadily decreases to about 5% in 2023. JavaScript hovers between 12% and 8% and is the top language until Python crosses in 2018. Python starts at 7%, climbs steadily to 17% in 2022, and tapers off at 14% in 2023.", caption: [#strong[Stack Overflow questions per month]. Source: #link("https://data.stackexchange.com/")[data.stackexchange.com]]) #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Python popularity] ]