A foundational collection of terms is crucial for comprehending the principles and practices within the Advanced Placement Computer Science curriculum. This lexicon encompasses specific terminology related to data structures, algorithms, programming paradigms, and computer systems. Proficiency in this terminology enables accurate communication and effective problem-solving within the field. For instance, understanding the distinctions between “recursion” and “iteration” is essential for selecting the appropriate algorithm design technique. Similarly, knowing the definition of “object-oriented programming” allows one to grasp the principles of encapsulation, inheritance, and polymorphism.
Mastery of this fundamental language facilitates clear communication, promotes conceptual understanding, and ultimately enhances performance on assessments. A strong command of the standardized terms allows for a more nuanced understanding of complex topics. Historically, this knowledge base has evolved alongside the field itself, reflecting advancements in hardware, software, and theoretical computer science. This evolving landscape necessitates continuous learning and adaptation to new terms and concepts.
Therefore, developing a strong foundation in this core set of definitions is essential. The following sections will elaborate on key topics, demonstrating the application of these concepts and providing practical examples to solidify understanding and improve proficiency in computer science principles.
1. Precise Terminology
The story of computer science, as with any scientific discipline, is written in the language it employs. In Advanced Placement Computer Science, “precise terminology” isn’t mere pedantry; it’s the cornerstone upon which algorithms are built, programs are debugged, and understanding is fostered. The lack of clarity in term definitions leads to confusion, error, and a fundamental inability to articulate the underlying principles of computation.
-
The Compiler’s Rigor
A compiler, the heart of turning human-readable code into machine instructions, demands exactitude. If the vocabulary within the code is vague or ambiguous, the compiler stumbles. For example, the subtle difference between an “integer” and a “floating-point number” is critical. Mishandling these data types can lead to significant computational errors. Precise terminology provides the compiler with the necessary certainty, ensuring a program functions as intended.
-
Debugging’s Clarity
When a program fails, the ability to diagnose the issue rests on a clear understanding of the language employed. The term “off-by-one error” describes a specific type of logical mistake common in loops and arrays. Someone without familiarity with the term may struggle to articulate, diagnose, and correct the issue. Terminology creates a shared vernacular for articulating, isolating, and resolving technical issues.
-
Algorithm Articulation
Algorithms, the core of computation, must be clearly defined. If the term “binary search” is ill-defined, implementing it becomes a game of chance. A lack of understanding leads to incorrect assumptions, inefficient searches, and ultimately, a failed algorithm. Therefore, each component of this fundamental search algorithm must be understood completely; this helps to identify its best use case.
-
Data Structure Distinction
The world of data structures is diverse, with each structure tailored to particular needs. A “linked list” is conceptually distinct from an “array.” Understanding the nuances of each structure, their time complexity for different operations (search, insertion, deletion), and their memory overhead, is paramount. Precision ensures the optimal structure is selected for each situation, preventing performance bottlenecks and memory wastage.
The story of Advanced Placement Computer Science, therefore, is fundamentally a story of precise terminology. The degree of precision achieved determines the ability to create robust, reliable, and efficient software systems. Without it, the entire endeavor unravels, devolving into chaos and ambiguity. The words themselves are not mere labels; they are the blueprints for a digital world.
2. Conceptual Foundation
Imagine a novice builder arriving at a construction site, armed with tools but lacking a blueprint. The hammer, saw, and level become instruments of potential chaos, incapable of erecting a stable structure. Similarly, in computer science, the vocabulary represents the tools, but the conceptual foundation is the blueprint. Without a deep understanding of the why behind each term, the vocabulary becomes a collection of hollow pronouncements, unable to support the weight of complex programs. Consider the term “recursion.” One might memorize its definitiona function calling itselfyet fail to grasp its underlying principle: breaking down a complex problem into smaller, self-similar subproblems. This lack of conceptual grounding renders the vocabulary useless. The builder needs to know how the tool works to build, in the same way, a computer scientist needs to know how concepts work to construct code.
The connection between a solid conceptual foundation and the practical application of terminology becomes starkly evident during debugging. A student who merely memorizes the definition of “stack overflow” may recognize the error message but remain clueless as to its cause, unable to trace the uncontrolled recursion that led to its occurrence. Conversely, a student with a deep conceptual understanding of the call stack can quickly identify the problematic code, even without a precise definition of the term readily available. Real-world programming projects demand the ability to apply concepts in novel situations. A game developer, for example, tasked with implementing a pathfinding algorithm, needs more than just knowledge of the term “A* search.” They require a solid conceptual understanding of graph theory, heuristics, and memory management. Without this foundation, the vocabulary becomes a roadblock, hindering the developer’s ability to adapt and innovate.
In essence, the “conceptual foundation” breathes life into the otherwise sterile “ap computer science vocabulary.” It transforms a collection of definitions into a powerful toolkit for problem-solving and innovation. Building this foundation requires a shift in focus from rote memorization to deep understanding. Students must be encouraged to explore the underlying principles, experiment with different approaches, and connect the vocabulary to real-world examples. The challenge lies in fostering a learning environment that values understanding over memorization, empowering students to become not just proficient coders, but insightful computer scientists, capable of tackling the complex challenges of the digital age.
3. Algorithmic Language
Once, a fledgling engineer stood before a complex machine, its gears grinding and steam hissing, a symphony of power and potential chaos. He possessed the finest tools, meticulously crafted and gleaming, but without the precise language of engineering, the tools were merely inert objects. So it is with “algorithmic language” and its vital connection to the terminology of computer science. “Algorithmic language” is the set of precise instructions and control structures that dictates a program’s behavior. It leverages the definitions in the collective vocabulary to transform a conceptual solution into executable code. A programmer’s inability to properly articulate that a variable must be of a certain data type could cause many issues down the line. As a result, algorithms cannot be described clearly and accurately without a solid grasp of fundamental concepts. The lack of specific terms like ‘loop’, ‘conditional statement’, or ‘function’ renders constructing intricate programs impossible. Thus, the importance of having algorithmic language is obvious.
The effect of lacking in algorithmic language can be devastating, especially in real-world projects. For example, in the development of self-driving vehicles, failure to accurately describe the algorithm for object detection leads to misinterpretations of the vehicle’s sensors, which in turn, increases the risk of accidents. It is clear that ‘if’ must be separated from ‘while’ or else the logic will be confused. Similarly, in financial modeling, an incorrectly specified algorithm can result in significant monetary losses. The connection between precise specification and the accuracy of results becomes critical. For instance, knowing the definitions of different types of sorting algorithms (e.g., ‘merge sort’, ‘quick sort’) is not enough; one must understand how to articulate their algorithmic steps correctly using appropriate control structures.
Therefore, a shared lexicon is the foundation of effective algorithm design and implementation. “Algorithmic language”, therefore, is not just a component of computer science study. It’s the means by which abstract ideas become concrete realities, and thus the language is a crucial part of the terminology. Challenges often arise in bridging the gap between theoretical knowledge and its practical expression; however, a commitment to learning and using the correct algorithmic language ensures clarity, precision, and success in the field. The machine of computation demands no less.
4. Data Structure Definitions
In the vast library of computer science, the section on “data structure definitions” stands as a critical reference, a compendium of organizational methods that dictate how information is stored and manipulated. These structures, from the humble array to the intricate graph, exist as precise terms within the broader “ap computer science vocabulary.” A misplaced or misunderstood definition can trigger a cascade of errors, corrupting algorithms and crippling entire systems. In an early space exploration mission, a misinterpretation of a data structure led to a critical navigation error. The probe’s trajectory was skewed, the mission jeopardized, all because a junior programmer had confused a linked list with a queue, creating a bottleneck in the guidance system. The significance of understanding these structures cannot be overstated. They are the architects of data management, shaping not only the efficiency of programs but their very functionality. Imagine attempting to build a skyscraper without precise blueprints defining the arrangement of steel beams and concrete supports. Similarly, a software engineer attempting to construct a complex application without a clear grasp of data structure definitions would be building on shifting sand, prone to collapse under its own weight.
Consider the role of hash tables in database indexing. Their efficient key-value lookup hinges on a thorough understanding of hashing functions, collision resolution techniques, and load factors. Each of these components requires clear data structure definitions. A poorly chosen hashing function, for example, can lead to clustered data, negating the benefits of the hash table and rendering searches inefficient. Similarly, in network routing, the choice between different graph representations (adjacency matrix versus adjacency list) directly impacts the performance of pathfinding algorithms. An ill-suited representation can result in exponential increases in computation time, overwhelming network resources and delaying data transmission. The selection of the appropriate structure relies on a granular understanding of its strengths, weaknesses, and performance trade-offs, concepts that are defined as vocabulary within computer science.
The mastery of “data structure definitions” within the broader “ap computer science vocabulary” is not merely an academic exercise but a fundamental requirement for competent software development. It provides the foundational knowledge required to design efficient algorithms, optimize program performance, and build robust applications. The challenge lies in moving beyond rote memorization and fostering a deep understanding of the underlying principles that govern these structures. As technology evolves and the demands on software systems continue to grow, the importance of these definitions will only intensify, solidifying their position as cornerstones of computer science.
5. Object-Oriented Concepts
In the chronicles of computer science, few paradigms have proven as transformative as the advent of object-oriented programming. It offered a structured approach to managing complexity. The terms associated with this methodology form a critical subset of the wider “ap computer science vocabulary.” These terms are not mere labels; they are keys that unlock the power of modularity, reusability, and abstraction. Its adoption reshaped how software was conceived, designed, and implemented. These concepts now drive the development of systems that power the modern world.
-
Encapsulation: The Protective Shell
Imagine an ancient fortress, its secrets guarded by thick walls and a single, well-protected gate. Encapsulation, within the lexicon of object-oriented concepts, is similar. It’s the bundling of data and methods that operate on that data within a single unit, the object, effectively shielding the internal workings from outside interference. Consider a car object: the engine’s intricate details are hidden from the driver, who interacts only through the steering wheel, pedals, and gearshift. In code, this means preventing direct access to an object’s internal variables, forcing interaction through defined methods. This promotes data integrity and reduces the risk of unintended side effects, vital principles in software development.
-
Inheritance: Building upon Legacy
The concept of inheritance mirrors the passing down of traits from parent to offspring. In object-oriented design, it allows the creation of new classes (blueprints for objects) that inherit properties and behaviors from existing ones, fostering code reusability and reducing redundancy. Picture a family of birds: a sparrow inherits the general characteristics of a bird but possesses unique attributes like its specific song. In programming, inheritance enables the creation of specialized classes that extend the functionality of more general base classes. This promotes efficiency and maintainability, as changes to the base class automatically propagate to its derived classes.
-
Polymorphism: Many Forms, One Interface
Polymorphism, meaning “many forms,” enables objects of different classes to respond to the same method call in their own unique ways. It’s like a universal remote control that can operate different devices, each responding according to its own programming. A classic example is the “draw” method in a graphical user interface: calling “draw” on a circle object results in a circle being drawn, while calling it on a square object results in a square. This adaptability makes code more flexible and extensible, allowing new classes to be added without modifying existing code.
-
Abstraction: Simplifying Complexity
Abstraction is the art of hiding unnecessary details and presenting only the essential information. It’s like driving a car without needing to understand the mechanics of the engine. A programmer using an object doesn’t need to know how it’s implemented internally; they only need to understand its interface, the set of methods it exposes. This simplifies the programming process, allowing developers to focus on higher-level logic without getting bogged down in implementation details. Abstraction reduces complexity, makes code more manageable, and promotes modular design.
-
Classes and Objects: The Blueprint and the Instance
Classes are essentially the blueprint of an object. They are the initial setup that defines the method and data of an object. Objects are instances of the class, such that you can have multiple objects that abide by the class. Classes are like a cookie cutter, and objects are the cookies that are being cut from that cookie cutter.
In essence, the synergy between “object-oriented concepts” and “ap computer science vocabulary” is vital. Understanding these terms allows software engineers to master the tools of this critical paradigm. This understanding will improve the quality and efficiency of code written, and make it more clear and maintainable. Ultimately, object oriented concepts are the key to understanding the inner workings of object-oriented programming. The combination of theory and understanding will improve programmers from all over.
6. Programming Paradigms
The chronicles of computation tell of varied approaches to crafting software solutions. These approaches, known as “programming paradigms,” represent fundamental styles of building the structure and elements of computer programs. Mastery of these styles, and the associated language, constitutes a critical portion of the wider “ap computer science vocabulary.” To learn the language is one thing, but to understand the style is the key to efficient programming.
-
Imperative Programming: The Step-by-Step Guide
Imagine a meticulous chef, following a recipe with unwavering precision, dictating each step from chopping vegetables to simmering sauces. Imperative programming operates in a similar fashion, providing the computer with a sequence of explicit instructions to be executed in a specific order. Key terms associated with this paradigm include “variables,” representing modifiable memory locations, and “control flow statements” (e.g., loops and conditionals), dictating the order of execution. A real-world analogy is a basic calculator program, where each operation (addition, subtraction, etc.) is coded as a series of imperative commands. Without a proper understanding of the order to do each step, it is impossible to calculate the correct result.
-
Object-Oriented Programming: The Collaborative Ecosystem
Picture a bustling city, where various specialized entities (buildings, vehicles, people) interact with one another, each performing specific tasks within a larger system. Object-oriented programming models this reality by organizing code into “objects,” self-contained units that encapsulate data and behavior. Key terms include “classes” (blueprints for objects), “inheritance” (creating new classes from existing ones), and “polymorphism” (the ability of objects to respond to the same method call in different ways). A modern video game, with its complex interactions between players, environments, and artificial intelligence, provides a perfect example of object-oriented design. Much like a city needs a structured approach, so does object-oriented programming.
-
Functional Programming: The Mathematical Equation
Envision a mathematical equation, where input values are transformed into output values through a series of functions, without altering the original data. Functional programming adopts this approach, emphasizing immutability (data that cannot be changed) and functions as first-class citizens (entities that can be passed as arguments and returned as values). Key terms include “pure functions” (functions that always produce the same output for the same input), “recursion” (defining a function in terms of itself), and “lambda expressions” (anonymous functions). Scientific simulations, which often require complex calculations and data transformations, frequently leverage the strengths of functional programming.
-
Declarative Programming: The Desired Outcome
Consider a scenario where the traveler specifies their destination to a driver, leaving the details of the route to the driver’s discretion. Declarative programming operates on a similar principle, describing the desired outcome without explicitly specifying the steps required to achieve it. Key terms include “logic programming” (expressing rules and facts to derive conclusions) and “database queries” (specifying the data to be retrieved). A common example is SQL (Structured Query Language), used to retrieve data from databases by describing the desired result set, rather than the specific algorithms to be employed. Without a specified destination, it’s impossible to start the trip, and the same applies to declarative programming.
Each paradigm offers a unique lens through which to view and solve computational problems. A comprehensive understanding of these styles, and the specific terms associated with each, empowers a software engineer to select the most appropriate approach for a given task. Proficiency in these paradigms is an important part of understanding the terminology. Much like a skilled craftsman understands the tools of their trade, a programmer must be fluent in the language of programming paradigms to craft elegant and efficient software solutions.
7. Logical Constructs
In the deepest chambers of the computational mind resides the domain of “logical constructs,” a realm where Boolean algebra reigns supreme and the architecture of thought itself is codified. Within the vast expanse of the “ap computer science vocabulary,” these constructs stand as the fundamental building blocks of decision-making, the very essence of digital reasoning. Without a thorough understanding of these core concepts, a programmer is akin to an architect attempting to design a skyscraper without knowledge of structural engineering. Consider the simple “if-then-else” statement, a cornerstone of conditional logic. It embodies the ability to evaluate a condition and execute different code paths based on the outcome. The power of this construct lies in its ability to simulate real-world scenarios, adapting the program’s behavior to changing circumstances. A flight control system, for instance, relies heavily on “if-then-else” statements to continuously monitor sensor data and adjust the aircraft’s trajectory accordingly. Were this construct to fail, the consequences could be catastrophic.
The significance of “logical constructs” extends beyond simple decision-making. They form the basis of complex algorithms, data structures, and control systems. The Boolean operators “AND,” “OR,” and “NOT” allow for the creation of intricate logical expressions, enabling programs to handle nuanced situations and make informed decisions. Consider a search engine, tasked with retrieving relevant results from a vast database. The engine relies on complex Boolean queries to filter and rank results based on user input. An improperly constructed query, resulting from a misunderstanding of “AND” versus “OR,” could lead to irrelevant or incomplete search results, rendering the engine effectively useless. Furthermore, loops such as “for” and “while” are based on logical conditions that must be met to iterate through a collection of data, to perform a task multiple times, or to reach a conclusion. Incorrect use of these constructs can lead to infinite loops or skipped code, drastically affecting a program’s functionality.
The mastery of “logical constructs” within the “ap computer science vocabulary” is, therefore, not merely an academic pursuit but a practical necessity for anyone seeking to navigate the complex landscape of software development. It is the foundation upon which reliable, efficient, and intelligent systems are built. The challenge lies in moving beyond the rote memorization of syntax and embracing the underlying principles of logical reasoning. Only then can a programmer truly harness the power of these constructs and craft solutions that are both elegant and effective, transforming abstract ideas into concrete realities in the digital realm. The future of innovation hinges on the ability to think logically and translate that logic into code, making “logical constructs” an indispensable part of the computational toolkit.
Frequently Asked Questions About the Language of Computation
The lexicon of computer science, specifically as it pertains to the Advanced Placement curriculum, presents a unique challenge. Understanding the nuances of this specialized language is essential for success, yet common misconceptions and points of confusion often arise. The following questions, distilled from years of observation and inquiry, aim to address these frequently encountered issues.
Question 1: Is rote memorization of terms sufficient for success in AP Computer Science?
The siren song of memorization tempts many a student, promising a shortcut to comprehension. However, like a mariner lured onto treacherous rocks, reliance on rote learning proves ultimately destructive. While familiarity with “ap computer science vocabulary” is necessary, true understanding lies in grasping the underlying concepts and their application. A student who can recite the definition of “recursion” but cannot apply it to solve a problem is ill-equipped for the challenges of the course.
Question 2: How important is it to use the terminology correctly when writing code?
In the meticulous world of computer science, precision is paramount. Imagine a surgeon attempting an operation with imprecise tools. A similar result occurs when code is written with the incorrect terminology. The compiler, that unforgiving judge of syntax, demands exactitude. Using “integer” when “float” is required, or misunderstanding the difference between “array” and “linked list,” leads to errors and unexpected program behavior. The correct usage of terms reflects clarity of thought and an understanding of the underlying principles.
Question 3: Are the definitions within the “ap computer science vocabulary” fixed, or can they evolve?
The world of computer science is one of constant innovation and evolution. New technologies emerge, paradigms shift, and the language adapts accordingly. While the core concepts remain relatively stable, the nuances of terminology can evolve over time. A term like “cloud computing,” relatively new to the lexicon, reflects a significant shift in how computing resources are delivered and utilized. A student who clings to outdated definitions risks being left behind by the relentless march of progress.
Question 4: How does the “ap computer science vocabulary” relate to real-world programming practices?
The language learned in the classroom provides a foundation for tackling real-world challenges. The terms and concepts encountered in the AP curriculum are not merely academic exercises; they are the building blocks of software development, data analysis, and artificial intelligence. A programmer who understands the principles of “object-oriented programming” is better equipped to design and implement complex systems. A data scientist who understands “algorithms” is better equipped to analyze and interpret data. The vocabulary learned in the classroom translates directly into practical skills applicable to a wide range of careers.
Question 5: What is the best way to learn and retain the “ap computer science vocabulary?”
Passive memorization yields limited results. The most effective approach involves active engagement with the material. This includes writing code, solving problems, participating in discussions, and explaining concepts to others. Creating flashcards, utilizing online resources, and seeking clarification from instructors and peers can also be beneficial. The key is to make the learning process interactive and personally meaningful, connecting new terms to existing knowledge and experiences.
Question 6: Is a perfect command of the “ap computer science vocabulary” necessary to excel in the field?
Perfection is an elusive ideal, rarely attained and often unnecessary. While a strong command of the terminology is undoubtedly beneficial, it is not the sole determinant of success. Creativity, problem-solving skills, and a passion for learning are equally important. A programmer who possesses a deep understanding of the underlying principles can often compensate for minor gaps in vocabulary. A relentless pursuit of knowledge and a willingness to adapt are more valuable than a flawless memory.
In summary, the “ap computer science vocabulary” is more than a collection of definitions; it is the language of computation, a tool for understanding and shaping the digital world. Mastering this language requires more than rote memorization; it demands a commitment to conceptual understanding, active engagement, and a willingness to embrace the ever-evolving nature of the field.
With the language of computation clarified, the discussion can now move into practice techniques, tips for success, and continuous learning.
Navigating the Labyrinth
The path to mastery in Advanced Placement Computer Science is fraught with challenges, not least of which is the sheer volume and complexity of the terminology. Like ancient mariners navigating uncharted waters, students must develop strategies for charting a course through this intellectual sea. The following tips, gleaned from years of experience and observation, offer guidance for navigating the labyrinth and reaching the destination of comprehension.
Tip 1: Embrace Active Recall: The mind, like a muscle, grows stronger through exercise. Instead of passively rereading definitions, actively test recall. Construct flashcards, quiz a peer, or attempt to define terms from memory. This active engagement strengthens neural connections, transforming knowledge from superficial acquaintance into ingrained understanding. Consider the term “polymorphism”: rather than simply memorizing the definition, attempt to explain it to a friend, drawing real-world analogies to solidify comprehension.
Tip 2: Contextualize Learning: Terms exist not in isolation, but within the context of larger concepts and programming paradigms. Rather than treating each definition as a separate entity, strive to understand its relationship to other elements of the “ap computer science vocabulary.” For instance, understanding “inheritance” becomes more meaningful when viewed in the context of “object-oriented programming” and its principles of code reusability and modularity.
Tip 3: Ground Theory in Practice: The abstract world of computer science finds its true expression in the tangible realm of code. Don’t limit learning to theoretical definitions; actively apply the terminology in programming exercises. Use “recursion” to solve a problem, implement a data structure using specific code, or trace the execution of an algorithm, paying close attention to the precise meaning of each term within the code. This practical application solidifies understanding and reveals subtle nuances often missed in passive study.
Tip 4: Seek Clarification Relentlessly: Confusion is a natural part of the learning process. The key is not to shy away from it, but to confront it head-on. When encountering a term that is unclear, seek clarification from instructors, peers, or online resources. Don’t be afraid to ask “stupid” questions; often, those questions reveal fundamental misunderstandings that, once addressed, unlock deeper levels of comprehension. The pursuit of clarity is a hallmark of intellectual rigor.
Tip 5: Build a Personal Glossary: The “ap computer science vocabulary” is vast and multifaceted. Creating a personalized glossary, tailored to individual learning styles and areas of difficulty, can be invaluable. Populate this glossary with definitions, examples, and personal notes, transforming it into a living document that evolves alongside understanding. Refer to this glossary frequently, reinforcing learning and consolidating knowledge.
Tip 6: Embrace the Errors: Errors in code are not signs of failure, but opportunities for growth. When encountering an error message related to a specific term, take the time to understand the root cause. Analyze the code, trace the execution, and consult relevant documentation. This process transforms the error from a source of frustration into a valuable learning experience, solidifying understanding and preventing future mistakes.
Tip 7: Teach to Learn: The act of teaching forces a deeper level of understanding. Attempt to explain complex concepts to others, whether it be a classmate, a family member, or even an imaginary audience. This exercise exposes gaps in knowledge and forces a reevaluation of assumptions, ultimately leading to a more robust and comprehensive understanding of the “ap computer science vocabulary.”
By embracing these strategies, students can transform the daunting task of mastering the “ap computer science vocabulary” into an engaging and rewarding intellectual journey. Like seasoned explorers charting a new continent, they can navigate the complexities of computation with confidence and skill, paving the way for future success in the field.
With the knowledge gained and the tips internalized, the discussion can now move to common pitfalls to avoid. These pitfalls often lead to failure and a poor learning experience.
The Architect’s Blueprint
The exploration of “ap computer science vocabulary” reveals more than just a list of definitions. It uncovers a foundational language upon which algorithms are built, software is designed, and digital innovation takes flight. This journey has underscored the importance of precise terminology, conceptual understanding, algorithmic expression, and the intricacies of data structures. It illuminates the power of object-oriented concepts and the nuanced approaches of different programming paradigms, all anchored by the bedrock of logical constructs. Just as an architect meticulously studies blueprints before laying a single brick, so too must the aspiring computer scientist immerse themselves in the language of their craft.
The mastery of “ap computer science vocabulary” is not a destination but a perpetual voyage. The digital landscape is ever-shifting, demanding continuous learning and adaptation. The pursuit of this knowledge is a strategic investment in the future. Whether constructing complex software systems, devising innovative algorithms, or simply seeking a deeper understanding of the technological world, the language of computation remains the indispensable tool. The call echoes: embrace the challenge, and wield “ap computer science vocabulary” with precision and purpose.