{"content_id":"zkrgx4ojs2","slug":"vibe-coding-programming-language-basics","locale":"en","schema_type":"TechArticle","category":"knowledge_base","category_name":"Knowledge Base","title":"Vibe Coding for Beginners: Programming Language Basics","summary":"In vibe coding, understanding where code runs and how it processes data is more useful than knowing language names. Learn programming basics, how to choose a language, and what to validate in AI-generated code.","sponsorship_disclosure":null,"affiliate_disclosure":null,"commerce_disclosure":null,"author":{"name":"Injoys Editorial Team","url":"https://injoys.com/ko/about"},"key_points":["Web development starts with understanding the distinct roles of HTML, CSS, and JavaScript.","TypeScript provides type checking before execution, but it does not automatically validate external input.","Rust's ownership system defines rules for memory management; it does not prevent every security error.","Mojo is a language aimed at high-performance computing on CPUs and GPUs.","AI-generated code must be run and tested to check whether it meets requirements."],"content_markdown":"Vibe coding requires a basic understanding of the roles of languages and where code runs. For the web, JavaScript and TypeScript are the starting points. Consider Python for data processing. Rust and Mojo are used for systems development and high-performance computing.\n\nThe performance figures are based on Microsoft's announcement on March 11, 2025.\n\n## Why language fundamentals matter in vibe coding\n\nVibe coding is a development approach centered on natural-language requests, where you write code with AI. You revise your requests based on the results of running the generated program. Natural-language requests still need to be implemented as executable code.\n\nLanguage fundamentals help you describe the features you want in specific terms. They also help you identify where errors occur. When starting out, focus on understanding each language's role rather than memorizing the syntax of every language.\n\n- Execution location: browser, server, smartphone, inside the operating system\n- Input: values entered by users or data received from external sources\n- Processing: tasks the program performs, such as calculation, search, and classification\n- Output: screen display, file creation, data storage\n- Failure conditions: empty input, invalid formats, lost connections\n\n## Basic concepts, starting with variables and types\n\nVariables and types are the foundation for describing the data a program handles. Conditionals and loops determine the order of processing. Functions group related tasks so they can be reused.\n\n| Concept | Simple definition | Example when describing a feature |\n| --- | --- | --- |\n| Variable | A way to name and refer to a value | A name that stores a search term |\n| Type | Rules about the kind of value and the operations allowed | Quantities are numbers; titles are strings |\n| Conditional | A statement that selects an action based on a condition | Reject saving if the title is empty |\n| Loop | A statement that applies the same task to multiple items | Display each item in a list |\n| Function | Code grouped to perform a specific task | A function that checks input |\n| Data structure | A way to organize data | An ordered list, values looked up by name |\n| Object | A unit that groups related state and behavior | A post's title and editing functionality |\n| Exception handling | A way to respond to errors during execution | Show an error message when a file cannot be read |\n| API | An agreement for programs to exchange functionality or data | Request search results from a server |\n| Dependency | External code or tools a program uses | A date-handling library |\n\nStatic type checking checks how types are used before execution. Dynamically typed languages also distinguish between value types. Dynamic typing does not mean there are no data types.\n\n## Why programming moved from machine code to high-level languages\n\nThe development of programming languages has reduced the detailed tasks people need to express. Machine code represents the instructions a processor executes. Assembly language gives those instructions human-readable symbols.\n\nAssembly is closely tied to a processor's instruction set. Changing a component does not mean rewriting all the code. Moving to an incompatible instruction set increases the work needed to modify it.\n\n| Language or development | Problem it aimed to solve | Concept to remember |\n| --- | --- | --- |\n| Machine code and assembly | Tell hardware what tasks to perform | Direct connection to the instruction set |\n| Fortran | Express scientific calculations in a form close to mathematical formulas | Numerical computing and compilers |\n| COBOL | Process business data in a readable format | Expressions centered on accounting and transaction processing |\n| Lisp | Compute using symbols and lists | Early AI research and function-centered expressions |\n| C | Write system software efficiently | Memory control and portability |\n| SQL | Process data in relational databases | Queries that declare the desired result |\n| C++ | Structure large programs and manage resources | Classes and multiple programming approaches |\n| Java | Port software between systems with different execution environments | JVM and bytecode |\n\nFortran emerged at IBM in 1957. Lisp developed alongside AI research in the late 1950s. COBOL came from a joint design effort that began in 1959.\n\nC developed alongside Unix. It helped make software portable across different machines. However, code that depends on the operating system or hardware requires separate modifications.\n\nObject-oriented programming organizes related data and behavior into objects. C++ supports object-oriented programming. C++ did not invent the concept itself.\n\n## The difference between compilers and interpreters\n\nA compiler is a program that transforms code into another representation. The result may be machine code. It may also be an intermediate execution format, such as bytecode.\n\nAn interpreter executes code or an intermediate representation by interpreting it. Actual language implementations may combine compilation and interpretation. Dividing languages into only fast compiled languages and slow interpreted languages is inaccurate.\n\n| Execution concept | Role | Representative examples |\n| --- | --- | --- |\n| Ahead-of-time compilation | Generate target code before execution | Typical executable builds in C and Rust |\n| Bytecode | An intermediate instruction format processed by an execution environment | Java bytecode, CPython bytecode |\n| Interpreter | Execute code or intermediate instructions by interpreting them | CPython's bytecode execution |\n| JIT compilation | Convert code into machine code as needed during execution | Various JVMs and JavaScript engines |\n| Runtime | Provide the functionality needed to run a program | JVM, Node.js |\n\nCPython is a widely used implementation of Python. It compiles source code into bytecode and executes it. Describing Python only as a language that translates source code one line at a time on every run is incorrect.\n\nJava's JVM is an environment that executes bytecode. This structure helps code run across different operating systems. Actual compatibility also depends on the JVM version and external libraries.\n\n## How do a web interface and a server differ?\n\nThe frontend handles the screens and interactions users encounter. The backend processes requests on the server. The database stores and retrieves the data needed.\n\nHTML is a markup language that expresses document structure. CSS specifies visual styling and layout. JavaScript implements conditional logic and handles user actions.\n\n| Name | Category | Main role |\n| --- | --- | --- |\n| HTML | Markup language | Document structure, including headings, paragraphs, and input fields |\n| CSS | Stylesheet language | Colors, spacing, screen layout |\n| JavaScript | Programming language | Browser interactions and server processing |\n| TypeScript | A language that adds a type system to JavaScript | Checking for errors before execution and managing code |\n| React | User interface library | Building interfaces from reusable components |\n| Node.js | JavaScript runtime | Running JavaScript outside the browser |\n| Next.js | React-based framework | Structuring web app pages and providing server functionality |\n| PHP | Programming language | Generating dynamic web responses on the server |\n| SQL | Database language | Retrieving, adding, updating, and deleting data |\n\nReact, Node.js, and Next.js are not the same kind of tool. A library is a collection of code from which you use the functionality you need. A framework also provides a way to structure an application. A runtime is the environment in which code executes.\n\n## Comparing languages by purpose\n\nChoose a language based on what you want to build and the existing execution environment. The table below gives typical starting points for considering each language. A language is not limited to the tasks listed in the table.\n\n| What you want to build | Languages to consider first | What to check before choosing |\n| --- | --- | --- |\n| A web app used in a browser | JavaScript, TypeScript | HTML and CSS basics and interface-building tools |\n| File organization and task automation | Python | Input file formats and deployment environment |\n| Data analysis and use of AI models | Python | Required analysis and model libraries |\n| Network servers and operations tools | Go | Concurrency structure and integration with existing systems |\n| JVM-based business systems | Java, Kotlin | Compatibility with existing code and libraries |\n| Apps focused on iOS | Swift | Apple development tools and platform features |\n| Apps focused on Android | Kotlin | Android development tools and existing app structure |\n| Systems that require memory control | C, C++, Rust | Performance requirements and ability to verify safety |\n| CPU and GPU computation optimization | Mojo | Supported hardware and required computational features |\n| Relational data processing | SQL | Syntax differences between database products |\n\nPython's usefulness is also tied to its library ecosystem. NumPy uses compiled code for speed. Not every calculation written in Python runs entirely as Python code.\n\nGo includes concurrency support in its language design. Concurrency is the concept of structuring multiple tasks to make progress together. Parallelism means multiple tasks are actually executing at the same time. Writing concurrent code does not automatically make calculations faster.\n\n## Differences between TypeScript, Rust, and Mojo\n\nTypeScript, Rust, and Mojo address different problems. TypeScript helps check types in JavaScript code. Rust imposes strong rules on memory management. Mojo targets high-performance computing and hardware use.\n\n| Comparison | TypeScript | Rust | Mojo |\n| --- | --- | --- | --- |\n| Main focus | Type checking and code management | Memory safety and system control | High-performance CPU and GPU computing |\n| Typical uses | Web apps and server applications | System tools and performance-focused components | AI infrastructure and computational kernels |\n| Concepts to understand first | JavaScript and data types | Ownership, borrowing, lifetimes | Types, memory, parallel computing |\n| What to check separately | External input and business rules | unsafe code and logic errors | Python interoperability and hardware support |\n\n### Type checking in TypeScript\n\nTypeScript adds static type checking to JavaScript. It helps find code that uses types incorrectly before execution. Type inference automatically determines some declarations.\n\nYou do not need to write a type explicitly for every variable. Type annotations are removed during the usual conversion to JavaScript. Type declarations alone do not create runtime input checks.\n\n### Ownership and memory safety in Rust\n\nOwnership is a set of rules that determines who manages a value's memory. Borrowing refers to a value without transferring ownership. The compiler checks the related rules to prevent memory errors.\n\nRust's safety guarantees depend on correct implementation. In unsafe code, the author is responsible for some safety conditions. The language does not automatically prevent errors in calculations or access permissions.\n\n### The relationship between Mojo and Python\n\nMojo is a separate language with syntax similar to Python. It supports writing high-performance code for CPUs and GPUs. It also provides interoperability features for connecting with Python code.\n\nDo not assume you can transfer existing Python code unchanged. Check the documentation for the Mojo version you plan to install for the features you need. Using a GPU also requires supported hardware and suitable drivers.\n\n## Common mistakes in language descriptions\n\nBrief language introductions often leave out the conditions under which claims apply. Historical facts and current features also need to be distinguished. The following misconceptions can cloud your judgment when choosing a language.\n\n| Common claim | Accurate understanding |\n| --- | --- |\n| JavaScript is the web version of Java | They are different languages |\n| HTML and CSS both appeared in 1991 | The W3C recommendation for CSS1 was issued on December 17, 1996 |\n| Kotlin was created by Google | JetBrains developed it; Google supports it on Android |\n| C code runs anywhere if recompiled | Parts that depend on the operating system or hardware may need modification |\n| Python is currently ranked No. 1 in popularity | This can only be assessed with a survey source, date, and methodology |\n| Using Rust solves every security problem | Memory safety and access permission checks are different issues |\n| Using Mojo makes every Python task faster | Measurements must account for the task, implementation, and hardware |\n| The term bug originated from the insect incident | The incident helped popularize a term already in use |\n\nThe famous record of an insect being found involves the Harvard Mark II in 1947. The Smithsonian explains that the incident helped popularize the related terminology. Presenting it as an ENIAC incident or the first use of the term is inaccurate.\n\n## How should you interpret performance figures?\n\nPerformance figures should be interpreted only in terms of the tasks measured. Compilation time and the execution speed of a finished app are different metrics. Faster development tools do not make web pages faster by the same proportion.\n\nMicrosoft announced a move to a native implementation of its TypeScript tools. The announcement on March 11, 2025 includes measurements for individual projects. Below is the VS Code codebase example from that announcement.\n\n| What was measured | Existing implementation | Native implementation | Announced speedup |\n| --- | --- | --- | --- |\n| TypeScript compilation of the VS Code codebase | 77.8 seconds | 7.5 seconds | 10.4 times |\n\nUnder the conditions in the announcement, processing time fell to **7.5 seconds**. Calculating the difference shows a reduction of 70.3 seconds for a single run. This does not mean every project will produce the same result.\n\nApply the same principle when comparing Python and C performance. Check whether they used the same input and algorithm. Compiler options and the libraries used are also comparison conditions. Figures without an execution environment are difficult to use as general speed ratios.\n\n## Type checking and external input validation\n\nEven after type checking passes, the contents of external data must be checked separately. This distinction is often overlooked when reviewing AI-generated code. Type declarations express the shape of the values a program expects.\n\nConsider a web app that declares a quantity as a numeric type. An external API might actually send a string. Assigning a type name or using a type assertion does not validate the value. Code that checks the data at runtime is needed.\n\n| Check stage | What to check | Issues that remain after passing |\n| --- | --- | --- |\n| Type checking | How types are used within the code | The values actually received from external sources |\n| Input validation | Data format and allowed range | Whether the user is allowed to perform the action |\n| Permission checks | The requester's access permissions | Whether the result follows business rules |\n| Functional testing | Actual results for expected inputs | Untested conditions |\n\nThis table provides a review framework based on type erasure and the scope of memory safety. It separates what the language guarantees from what the service must check. Ask AI to handle validation at each stage separately.\n\n## How to describe features to AI\n\nInclude both the input and expected result in feature requests. Simply naming a program can leave out the conditions for how it should work. If you have an existing project, also provide the language and version in use.\n\n1. Specify the environment you will use.\n2. Describe the format of the input to process.\n3. Define the result for valid input.\n4. Decide how to handle empty values and invalid input.\n5. Ask for the reasons behind the changes and how to verify them.\n\nThe following is an example prompt that breaks down the requirements. Adjust the actual file contents to suit your project. You must run the generated result yourself to verify it.\n\n```text\nFirst, check the language and execution environment of the existing project.\nRead rows with titles from a CSV file and display them as a list.\nShow an error message if a required column is missing.\nReport rows with empty titles separately.\nSeparate external input validation from the display code.\nFirst, check whether this can be implemented with the existing dependencies.\nExplain the changes and how to test them.\n```\n\nIf an error occurs, provide the conditions needed to reproduce it. Error messages contain clues that help narrow down where the error occurred. GitHub's Copilot documentation also requires reviewing generated code. Before adopting code, you need to check the results of running it.\n\n## Criteria for beginner learning and choosing courses\n\nBeginners can start with a narrow focus suited to the task they want to build. For web development, first try connecting the interface structure to its behavior. For automation, it is better to start by checking file input and saving results.\n\n1. Choose one language suited to what you want to build.\n2. Learn variables, types, conditionals, loops, and functions.\n3. Write a small feature and compare the execution results.\n4. Enter invalid input to check how it fails.\n5. Explain in your own words why you changed the code.\n\nWhen reviewing a course, check what it covers about verification, not just the resulting interface. Look for exercises in reproducing and fixing errors. Also check whether the versions and execution environment used are specified.\n\n- Code explanation: A process for explaining the inputs and outputs of generated functions\n- Error handling: Exercises in reading error messages and narrowing down causes\n- Data validation: Examples that handle external input and failure conditions\n- Reproducibility: Instructions for running the code again in the same environment\n\nYou can find language definitions in each project's official documentation. The TypeScript Handbook explains type erasure. The official Rust book covers ownership and unsafe separately. Check the Mojo Manual for language features and the scope of Python interoperability.","content_html":"\u003cp\u003eVibe coding requires a basic understanding of the roles of languages and where code runs. For the web, JavaScript and TypeScript are the starting points. Consider Python for data processing. Rust and Mojo are used for systems development and high-performance computing.\u003c/p\u003e\n\u003cp\u003eThe performance figures are based on Microsoft's announcement on March 11, 2025.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#why-language-fundamentals-matter-in-vibe-coding\" class=\"anchor\" id=\"why-language-fundamentals-matter-in-vibe-coding\"\u003e\u003c/a\u003eWhy language fundamentals matter in vibe coding\u003c/h2\u003e\n\u003cp\u003eVibe coding is a development approach centered on natural-language requests, where you write code with AI. You revise your requests based on the results of running the generated program. Natural-language requests still need to be implemented as executable code.\u003c/p\u003e\n\u003cp\u003eLanguage fundamentals help you describe the features you want in specific terms. They also help you identify where errors occur. When starting out, focus on understanding each language's role rather than memorizing the syntax of every language.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eExecution location: browser, server, smartphone, inside the operating system\u003c/li\u003e\n\u003cli\u003eInput: values entered by users or data received from external sources\u003c/li\u003e\n\u003cli\u003eProcessing: tasks the program performs, such as calculation, search, and classification\u003c/li\u003e\n\u003cli\u003eOutput: screen display, file creation, data storage\u003c/li\u003e\n\u003cli\u003eFailure conditions: empty input, invalid formats, lost connections\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\n\u003ca href=\"#basic-concepts-starting-with-variables-and-types\" class=\"anchor\" id=\"basic-concepts-starting-with-variables-and-types\"\u003e\u003c/a\u003eBasic concepts, starting with variables and types\u003c/h2\u003e\n\u003cp\u003eVariables and types are the foundation for describing the data a program handles. Conditionals and loops determine the order of processing. Functions group related tasks so they can be reused.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eConcept\u003c/th\u003e\n\u003cth\u003eSimple definition\u003c/th\u003e\n\u003cth\u003eExample when describing a feature\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eVariable\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eA way to name and refer to a value\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eA name that stores a search term\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eType\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eRules about the kind of value and the operations allowed\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eQuantities are numbers; titles are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eConditional\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eA statement that selects an action based on a condition\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eReject saving if the title is empty\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eLoop\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eA statement that applies the same task to multiple items\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eDisplay each item in a list\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eFunction\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eCode grouped to perform a specific task\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eA function that checks input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eData structure\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eA way to organize data\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eAn ordered list, values looked up by name\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eObject\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eA unit that groups related state and behavior\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eA post's title and editing functionality\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eException handling\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eA way to respond to errors during execution\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eShow an error message when a file cannot be read\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eAPI\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eAn agreement for programs to exchange functionality or data\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eRequest search results from a server\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Concept\"\u003eDependency\u003c/td\u003e\n\u003ctd data-label=\"Simple definition\"\u003eExternal code or tools a program uses\u003c/td\u003e\n\u003ctd data-label=\"Example when describing a feature\"\u003eA date-handling library\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eStatic type checking checks how types are used before execution. Dynamically typed languages also distinguish between value types. Dynamic typing does not mean there are no data types.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#why-programming-moved-from-machine-code-to-high-level-languages\" class=\"anchor\" id=\"why-programming-moved-from-machine-code-to-high-level-languages\"\u003e\u003c/a\u003eWhy programming moved from machine code to high-level languages\u003c/h2\u003e\n\u003cp\u003eThe development of programming languages has reduced the detailed tasks people need to express. Machine code represents the instructions a processor executes. Assembly language gives those instructions human-readable symbols.\u003c/p\u003e\n\u003cp\u003eAssembly is closely tied to a processor's instruction set. Changing a component does not mean rewriting all the code. Moving to an incompatible instruction set increases the work needed to modify it.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eLanguage or development\u003c/th\u003e\n\u003cth\u003eProblem it aimed to solve\u003c/th\u003e\n\u003cth\u003eConcept to remember\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Language or development\"\u003eMachine code and assembly\u003c/td\u003e\n\u003ctd data-label=\"Problem it aimed to solve\"\u003eTell hardware what tasks to perform\u003c/td\u003e\n\u003ctd data-label=\"Concept to remember\"\u003eDirect connection to the instruction set\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Language or development\"\u003eFortran\u003c/td\u003e\n\u003ctd data-label=\"Problem it aimed to solve\"\u003eExpress scientific calculations in a form close to mathematical formulas\u003c/td\u003e\n\u003ctd data-label=\"Concept to remember\"\u003eNumerical computing and compilers\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Language or development\"\u003eCOBOL\u003c/td\u003e\n\u003ctd data-label=\"Problem it aimed to solve\"\u003eProcess business data in a readable format\u003c/td\u003e\n\u003ctd data-label=\"Concept to remember\"\u003eExpressions centered on accounting and transaction processing\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Language or development\"\u003eLisp\u003c/td\u003e\n\u003ctd data-label=\"Problem it aimed to solve\"\u003eCompute using symbols and lists\u003c/td\u003e\n\u003ctd data-label=\"Concept to remember\"\u003eEarly AI research and function-centered expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Language or development\"\u003eC\u003c/td\u003e\n\u003ctd data-label=\"Problem it aimed to solve\"\u003eWrite system software efficiently\u003c/td\u003e\n\u003ctd data-label=\"Concept to remember\"\u003eMemory control and portability\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Language or development\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"Problem it aimed to solve\"\u003eProcess data in relational databases\u003c/td\u003e\n\u003ctd data-label=\"Concept to remember\"\u003eQueries that declare the desired result\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Language or development\"\u003eC++\u003c/td\u003e\n\u003ctd data-label=\"Problem it aimed to solve\"\u003eStructure large programs and manage resources\u003c/td\u003e\n\u003ctd data-label=\"Concept to remember\"\u003eClasses and multiple programming approaches\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Language or development\"\u003eJava\u003c/td\u003e\n\u003ctd data-label=\"Problem it aimed to solve\"\u003ePort software between systems with different execution environments\u003c/td\u003e\n\u003ctd data-label=\"Concept to remember\"\u003eJVM and bytecode\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eFortran emerged at IBM in 1957. Lisp developed alongside AI research in the late 1950s. COBOL came from a joint design effort that began in 1959.\u003c/p\u003e\n\u003cp\u003eC developed alongside Unix. It helped make software portable across different machines. However, code that depends on the operating system or hardware requires separate modifications.\u003c/p\u003e\n\u003cp\u003eObject-oriented programming organizes related data and behavior into objects. C++ supports object-oriented programming. C++ did not invent the concept itself.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#the-difference-between-compilers-and-interpreters\" class=\"anchor\" id=\"the-difference-between-compilers-and-interpreters\"\u003e\u003c/a\u003eThe difference between compilers and interpreters\u003c/h2\u003e\n\u003cp\u003eA compiler is a program that transforms code into another representation. The result may be machine code. It may also be an intermediate execution format, such as bytecode.\u003c/p\u003e\n\u003cp\u003eAn interpreter executes code or an intermediate representation by interpreting it. Actual language implementations may combine compilation and interpretation. Dividing languages into only fast compiled languages and slow interpreted languages is inaccurate.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eExecution concept\u003c/th\u003e\n\u003cth\u003eRole\u003c/th\u003e\n\u003cth\u003eRepresentative examples\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Execution concept\"\u003eAhead-of-time compilation\u003c/td\u003e\n\u003ctd data-label=\"Role\"\u003eGenerate target code before execution\u003c/td\u003e\n\u003ctd data-label=\"Representative examples\"\u003eTypical executable builds in C and Rust\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Execution concept\"\u003eBytecode\u003c/td\u003e\n\u003ctd data-label=\"Role\"\u003eAn intermediate instruction format processed by an execution environment\u003c/td\u003e\n\u003ctd data-label=\"Representative examples\"\u003eJava bytecode, CPython bytecode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Execution concept\"\u003eInterpreter\u003c/td\u003e\n\u003ctd data-label=\"Role\"\u003eExecute code or intermediate instructions by interpreting them\u003c/td\u003e\n\u003ctd data-label=\"Representative examples\"\u003eCPython's bytecode execution\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Execution concept\"\u003eJIT compilation\u003c/td\u003e\n\u003ctd data-label=\"Role\"\u003eConvert code into machine code as needed during execution\u003c/td\u003e\n\u003ctd data-label=\"Representative examples\"\u003eVarious JVMs and JavaScript engines\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Execution concept\"\u003eRuntime\u003c/td\u003e\n\u003ctd data-label=\"Role\"\u003eProvide the functionality needed to run a program\u003c/td\u003e\n\u003ctd data-label=\"Representative examples\"\u003eJVM, Node.js\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eCPython is a widely used implementation of Python. It compiles source code into bytecode and executes it. Describing Python only as a language that translates source code one line at a time on every run is incorrect.\u003c/p\u003e\n\u003cp\u003eJava's JVM is an environment that executes bytecode. This structure helps code run across different operating systems. Actual compatibility also depends on the JVM version and external libraries.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#how-do-a-web-interface-and-a-server-differ\" class=\"anchor\" id=\"how-do-a-web-interface-and-a-server-differ\"\u003e\u003c/a\u003eHow do a web interface and a server differ?\u003c/h2\u003e\n\u003cp\u003eThe frontend handles the screens and interactions users encounter. The backend processes requests on the server. The database stores and retrieves the data needed.\u003c/p\u003e\n\u003cp\u003eHTML is a markup language that expresses document structure. CSS specifies visual styling and layout. JavaScript implements conditional logic and handles user actions.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eCategory\u003c/th\u003e\n\u003cth\u003eMain role\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eHTML\u003c/td\u003e\n\u003ctd data-label=\"Category\"\u003eMarkup language\u003c/td\u003e\n\u003ctd data-label=\"Main role\"\u003eDocument structure, including headings, paragraphs, and input fields\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eCSS\u003c/td\u003e\n\u003ctd data-label=\"Category\"\u003eStylesheet language\u003c/td\u003e\n\u003ctd data-label=\"Main role\"\u003eColors, spacing, screen layout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eJavaScript\u003c/td\u003e\n\u003ctd data-label=\"Category\"\u003eProgramming language\u003c/td\u003e\n\u003ctd data-label=\"Main role\"\u003eBrowser interactions and server processing\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eTypeScript\u003c/td\u003e\n\u003ctd data-label=\"Category\"\u003eA language that adds a type system to JavaScript\u003c/td\u003e\n\u003ctd data-label=\"Main role\"\u003eChecking for errors before execution and managing code\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eReact\u003c/td\u003e\n\u003ctd data-label=\"Category\"\u003eUser interface library\u003c/td\u003e\n\u003ctd data-label=\"Main role\"\u003eBuilding interfaces from reusable components\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eNode.js\u003c/td\u003e\n\u003ctd data-label=\"Category\"\u003eJavaScript runtime\u003c/td\u003e\n\u003ctd data-label=\"Main role\"\u003eRunning JavaScript outside the browser\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eNext.js\u003c/td\u003e\n\u003ctd data-label=\"Category\"\u003eReact-based framework\u003c/td\u003e\n\u003ctd data-label=\"Main role\"\u003eStructuring web app pages and providing server functionality\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003ePHP\u003c/td\u003e\n\u003ctd data-label=\"Category\"\u003eProgramming language\u003c/td\u003e\n\u003ctd data-label=\"Main role\"\u003eGenerating dynamic web responses on the server\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"Category\"\u003eDatabase language\u003c/td\u003e\n\u003ctd data-label=\"Main role\"\u003eRetrieving, adding, updating, and deleting data\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eReact, Node.js, and Next.js are not the same kind of tool. A library is a collection of code from which you use the functionality you need. A framework also provides a way to structure an application. A runtime is the environment in which code executes.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#comparing-languages-by-purpose\" class=\"anchor\" id=\"comparing-languages-by-purpose\"\u003e\u003c/a\u003eComparing languages by purpose\u003c/h2\u003e\n\u003cp\u003eChoose a language based on what you want to build and the existing execution environment. The table below gives typical starting points for considering each language. A language is not limited to the tasks listed in the table.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eWhat you want to build\u003c/th\u003e\n\u003cth\u003eLanguages to consider first\u003c/th\u003e\n\u003cth\u003eWhat to check before choosing\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eA web app used in a browser\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003eJavaScript, TypeScript\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003eHTML and CSS basics and interface-building tools\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eFile organization and task automation\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003ePython\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003eInput file formats and deployment environment\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eData analysis and use of AI models\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003ePython\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003eRequired analysis and model libraries\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eNetwork servers and operations tools\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003eGo\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003eConcurrency structure and integration with existing systems\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eJVM-based business systems\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003eJava, Kotlin\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003eCompatibility with existing code and libraries\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eApps focused on iOS\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003eSwift\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003eApple development tools and platform features\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eApps focused on Android\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003eKotlin\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003eAndroid development tools and existing app structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eSystems that require memory control\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003eC, C++, Rust\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003ePerformance requirements and ability to verify safety\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eCPU and GPU computation optimization\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003eMojo\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003eSupported hardware and required computational features\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What you want to build\"\u003eRelational data processing\u003c/td\u003e\n\u003ctd data-label=\"Languages to consider first\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"What to check before choosing\"\u003eSyntax differences between database products\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003ePython's usefulness is also tied to its library ecosystem. NumPy uses compiled code for speed. Not every calculation written in Python runs entirely as Python code.\u003c/p\u003e\n\u003cp\u003eGo includes concurrency support in its language design. Concurrency is the concept of structuring multiple tasks to make progress together. Parallelism means multiple tasks are actually executing at the same time. Writing concurrent code does not automatically make calculations faster.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#differences-between-typescript-rust-and-mojo\" class=\"anchor\" id=\"differences-between-typescript-rust-and-mojo\"\u003e\u003c/a\u003eDifferences between TypeScript, Rust, and Mojo\u003c/h2\u003e\n\u003cp\u003eTypeScript, Rust, and Mojo address different problems. TypeScript helps check types in JavaScript code. Rust imposes strong rules on memory management. Mojo targets high-performance computing and hardware use.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eComparison\u003c/th\u003e\n\u003cth\u003eTypeScript\u003c/th\u003e\n\u003cth\u003eRust\u003c/th\u003e\n\u003cth\u003eMojo\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Comparison\"\u003eMain focus\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eType checking and code management\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eMemory safety and system control\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eHigh-performance CPU and GPU computing\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Comparison\"\u003eTypical uses\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eWeb apps and server applications\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eSystem tools and performance-focused components\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eAI infrastructure and computational kernels\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Comparison\"\u003eConcepts to understand first\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eJavaScript and data types\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eOwnership, borrowing, lifetimes\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eTypes, memory, parallel computing\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Comparison\"\u003eWhat to check separately\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eExternal input and business rules\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eunsafe code and logic errors\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003ePython interoperability and hardware support\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003ch3\u003e\n\u003ca href=\"#type-checking-in-typescript\" class=\"anchor\" id=\"type-checking-in-typescript\"\u003e\u003c/a\u003eType checking in TypeScript\u003c/h3\u003e\n\u003cp\u003eTypeScript adds static type checking to JavaScript. It helps find code that uses types incorrectly before execution. Type inference automatically determines some declarations.\u003c/p\u003e\n\u003cp\u003eYou do not need to write a type explicitly for every variable. Type annotations are removed during the usual conversion to JavaScript. Type declarations alone do not create runtime input checks.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#ownership-and-memory-safety-in-rust\" class=\"anchor\" id=\"ownership-and-memory-safety-in-rust\"\u003e\u003c/a\u003eOwnership and memory safety in Rust\u003c/h3\u003e\n\u003cp\u003eOwnership is a set of rules that determines who manages a value's memory. Borrowing refers to a value without transferring ownership. The compiler checks the related rules to prevent memory errors.\u003c/p\u003e\n\u003cp\u003eRust's safety guarantees depend on correct implementation. In unsafe code, the author is responsible for some safety conditions. The language does not automatically prevent errors in calculations or access permissions.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#the-relationship-between-mojo-and-python\" class=\"anchor\" id=\"the-relationship-between-mojo-and-python\"\u003e\u003c/a\u003eThe relationship between Mojo and Python\u003c/h3\u003e\n\u003cp\u003eMojo is a separate language with syntax similar to Python. It supports writing high-performance code for CPUs and GPUs. It also provides interoperability features for connecting with Python code.\u003c/p\u003e\n\u003cp\u003eDo not assume you can transfer existing Python code unchanged. Check the documentation for the Mojo version you plan to install for the features you need. Using a GPU also requires supported hardware and suitable drivers.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#common-mistakes-in-language-descriptions\" class=\"anchor\" id=\"common-mistakes-in-language-descriptions\"\u003e\u003c/a\u003eCommon mistakes in language descriptions\u003c/h2\u003e\n\u003cp\u003eBrief language introductions often leave out the conditions under which claims apply. Historical facts and current features also need to be distinguished. The following misconceptions can cloud your judgment when choosing a language.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommon claim\u003c/th\u003e\n\u003cth\u003eAccurate understanding\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Common claim\"\u003eJavaScript is the web version of Java\u003c/td\u003e\n\u003ctd data-label=\"Accurate understanding\"\u003eThey are different languages\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Common claim\"\u003eHTML and CSS both appeared in 1991\u003c/td\u003e\n\u003ctd data-label=\"Accurate understanding\"\u003eThe W3C recommendation for CSS1 was issued on December 17, 1996\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Common claim\"\u003eKotlin was created by Google\u003c/td\u003e\n\u003ctd data-label=\"Accurate understanding\"\u003eJetBrains developed it; Google supports it on Android\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Common claim\"\u003eC code runs anywhere if recompiled\u003c/td\u003e\n\u003ctd data-label=\"Accurate understanding\"\u003eParts that depend on the operating system or hardware may need modification\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Common claim\"\u003ePython is currently ranked No. 1 in popularity\u003c/td\u003e\n\u003ctd data-label=\"Accurate understanding\"\u003eThis can only be assessed with a survey source, date, and methodology\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Common claim\"\u003eUsing Rust solves every security problem\u003c/td\u003e\n\u003ctd data-label=\"Accurate understanding\"\u003eMemory safety and access permission checks are different issues\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Common claim\"\u003eUsing Mojo makes every Python task faster\u003c/td\u003e\n\u003ctd data-label=\"Accurate understanding\"\u003eMeasurements must account for the task, implementation, and hardware\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Common claim\"\u003eThe term bug originated from the insect incident\u003c/td\u003e\n\u003ctd data-label=\"Accurate understanding\"\u003eThe incident helped popularize a term already in use\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eThe famous record of an insect being found involves the Harvard Mark II in 1947. The Smithsonian explains that the incident helped popularize the related terminology. Presenting it as an ENIAC incident or the first use of the term is inaccurate.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#how-should-you-interpret-performance-figures\" class=\"anchor\" id=\"how-should-you-interpret-performance-figures\"\u003e\u003c/a\u003eHow should you interpret performance figures?\u003c/h2\u003e\n\u003cp\u003ePerformance figures should be interpreted only in terms of the tasks measured. Compilation time and the execution speed of a finished app are different metrics. Faster development tools do not make web pages faster by the same proportion.\u003c/p\u003e\n\u003cp\u003eMicrosoft announced a move to a native implementation of its TypeScript tools. The announcement on March 11, 2025 includes measurements for individual projects. Below is the VS Code codebase example from that announcement.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eWhat was measured\u003c/th\u003e\n\u003cth\u003eExisting implementation\u003c/th\u003e\n\u003cth\u003eNative implementation\u003c/th\u003e\n\u003cth\u003eAnnounced speedup\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was measured\"\u003eTypeScript compilation of the VS Code codebase\u003c/td\u003e\n\u003ctd data-label=\"Existing implementation\"\u003e77.8 seconds\u003c/td\u003e\n\u003ctd data-label=\"Native implementation\"\u003e7.5 seconds\u003c/td\u003e\n\u003ctd data-label=\"Announced speedup\"\u003e10.4 times\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eUnder the conditions in the announcement, processing time fell to \u003cstrong\u003e7.5 seconds\u003c/strong\u003e. Calculating the difference shows a reduction of 70.3 seconds for a single run. This does not mean every project will produce the same result.\u003c/p\u003e\n\u003cp\u003eApply the same principle when comparing Python and C performance. Check whether they used the same input and algorithm. Compiler options and the libraries used are also comparison conditions. Figures without an execution environment are difficult to use as general speed ratios.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#type-checking-and-external-input-validation\" class=\"anchor\" id=\"type-checking-and-external-input-validation\"\u003e\u003c/a\u003eType checking and external input validation\u003c/h2\u003e\n\u003cp\u003eEven after type checking passes, the contents of external data must be checked separately. This distinction is often overlooked when reviewing AI-generated code. Type declarations express the shape of the values a program expects.\u003c/p\u003e\n\u003cp\u003eConsider a web app that declares a quantity as a numeric type. An external API might actually send a string. Assigning a type name or using a type assertion does not validate the value. Code that checks the data at runtime is needed.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCheck stage\u003c/th\u003e\n\u003cth\u003eWhat to check\u003c/th\u003e\n\u003cth\u003eIssues that remain after passing\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Check stage\"\u003eType checking\u003c/td\u003e\n\u003ctd data-label=\"What to check\"\u003eHow types are used within the code\u003c/td\u003e\n\u003ctd data-label=\"Issues that remain after passing\"\u003eThe values actually received from external sources\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Check stage\"\u003eInput validation\u003c/td\u003e\n\u003ctd data-label=\"What to check\"\u003eData format and allowed range\u003c/td\u003e\n\u003ctd data-label=\"Issues that remain after passing\"\u003eWhether the user is allowed to perform the action\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Check stage\"\u003ePermission checks\u003c/td\u003e\n\u003ctd data-label=\"What to check\"\u003eThe requester's access permissions\u003c/td\u003e\n\u003ctd data-label=\"Issues that remain after passing\"\u003eWhether the result follows business rules\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Check stage\"\u003eFunctional testing\u003c/td\u003e\n\u003ctd data-label=\"What to check\"\u003eActual results for expected inputs\u003c/td\u003e\n\u003ctd data-label=\"Issues that remain after passing\"\u003eUntested conditions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eThis table provides a review framework based on type erasure and the scope of memory safety. It separates what the language guarantees from what the service must check. Ask AI to handle validation at each stage separately.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#how-to-describe-features-to-ai\" class=\"anchor\" id=\"how-to-describe-features-to-ai\"\u003e\u003c/a\u003eHow to describe features to AI\u003c/h2\u003e\n\u003cp\u003eInclude both the input and expected result in feature requests. Simply naming a program can leave out the conditions for how it should work. If you have an existing project, also provide the language and version in use.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eSpecify the environment you will use.\u003c/li\u003e\n\u003cli\u003eDescribe the format of the input to process.\u003c/li\u003e\n\u003cli\u003eDefine the result for valid input.\u003c/li\u003e\n\u003cli\u003eDecide how to handle empty values and invalid input.\u003c/li\u003e\n\u003cli\u003eAsk for the reasons behind the changes and how to verify them.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThe following is an example prompt that breaks down the requirements. Adjust the actual file contents to suit your project. You must run the generated result yourself to verify it.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003eFirst, check the language and execution environment of the existing project.\n\u003c/span\u003e\u003cspan\u003eRead rows with titles from a CSV file and display them as a list.\n\u003c/span\u003e\u003cspan\u003eShow an error message if a required column is missing.\n\u003c/span\u003e\u003cspan\u003eReport rows with empty titles separately.\n\u003c/span\u003e\u003cspan\u003eSeparate external input validation from the display code.\n\u003c/span\u003e\u003cspan\u003eFirst, check whether this can be implemented with the existing dependencies.\n\u003c/span\u003e\u003cspan\u003eExplain the changes and how to test them.\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eIf an error occurs, provide the conditions needed to reproduce it. Error messages contain clues that help narrow down where the error occurred. GitHub's Copilot documentation also requires reviewing generated code. Before adopting code, you need to check the results of running it.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#criteria-for-beginner-learning-and-choosing-courses\" class=\"anchor\" id=\"criteria-for-beginner-learning-and-choosing-courses\"\u003e\u003c/a\u003eCriteria for beginner learning and choosing courses\u003c/h2\u003e\n\u003cp\u003eBeginners can start with a narrow focus suited to the task they want to build. For web development, first try connecting the interface structure to its behavior. For automation, it is better to start by checking file input and saving results.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eChoose one language suited to what you want to build.\u003c/li\u003e\n\u003cli\u003eLearn variables, types, conditionals, loops, and functions.\u003c/li\u003e\n\u003cli\u003eWrite a small feature and compare the execution results.\u003c/li\u003e\n\u003cli\u003eEnter invalid input to check how it fails.\u003c/li\u003e\n\u003cli\u003eExplain in your own words why you changed the code.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eWhen reviewing a course, check what it covers about verification, not just the resulting interface. Look for exercises in reproducing and fixing errors. Also check whether the versions and execution environment used are specified.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode explanation: A process for explaining the inputs and outputs of generated functions\u003c/li\u003e\n\u003cli\u003eError handling: Exercises in reading error messages and narrowing down causes\u003c/li\u003e\n\u003cli\u003eData validation: Examples that handle external input and failure conditions\u003c/li\u003e\n\u003cli\u003eReproducibility: Instructions for running the code again in the same environment\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eYou can find language definitions in each project's official documentation. The TypeScript Handbook explains type erasure. The official Rust book covers ownership and unsafe separately. Check the Mojo Manual for language features and the scope of Python interoperability.\u003c/p\u003e\n","tags":["Generative AI","Prompt Engineering","AI Development","AI Coding","Development Tools"],"faqs":[{"question":"Do I need to learn every language before starting vibe coding?","answer":"You do not need to learn every language. First, choose a language that suits what you want to build. Understanding variables, types, functions, and where the code runs will help you make your requests more specific."},{"question":"Should I start web development with JavaScript or Python?","answer":"JavaScript is the starting point for adding behavior to a browser page. Learn the roles of HTML and CSS as well. You can consider Python as a starting point for automating file tasks and processing data."},{"question":"If I use TypeScript, can I skip learning JavaScript?","answer":"You need a foundation in JavaScript to understand how TypeScript behaves at runtime. TypeScript adds a type system to JavaScript. Understand the distinction between type checking and actual execution."},{"question":"Do I need to specify a type for every variable in TypeScript?","answer":"You do not need to specify types where they can be inferred. The tools determine types based on assigned values and context. Decide whether explicit types are needed based on the role of the code."},{"question":"Are React and Node.js programming languages too?","answer":"React is a user interface library. Node.js is a JavaScript runtime environment. Next.js is classified as a React-based framework."},{"question":"Does Python translate and execute source code one line at a time?","answer":"CPython, the main implementation, compiles source code into bytecode. It then executes the bytecode. Simply saying that it translates source code one line at a time does not adequately explain this process."},{"question":"If I use Rust, can I skip security reviews?","answer":"Rust's memory safety does not mean the entire service is secure. Access permissions and business rules must be checked separately. The safety requirements for unsafe code also need to be reviewed."},{"question":"Is Mojo a new version of Python?","answer":"Mojo is a separate language with syntax similar to Python. It provides Python interoperability features. Check compatibility with existing code in the official documentation for the version you plan to use."},{"question":"Do I need a GPU to use Mojo?","answer":"You can also write CPU code in Mojo. A GPU is not required for every program. If you use GPU features, check which devices and drivers are supported."},{"question":"Does concurrency in Go mean the same thing as parallel processing?","answer":"Concurrency is the concept of structuring multiple tasks so they can make progress together. Parallelism is when multiple tasks actually execute at the same time. Concurrency alone does not guarantee faster execution."},{"question":"Was Kotlin developed by Google?","answer":"Kotlin is developed by JetBrains. Google supports Kotlin for Android development. You need to distinguish between the organization that created the language and the organization that supports it on a platform."},{"question":"If the TypeScript compiler gets faster, will the app get faster by the same proportion?","answer":"Compilation time and app execution time are different metrics. Microsoft's performance examples concern processing time in development tools. App response speed must be measured separately."},{"question":"Is AI-generated code finished once it passes type checking?","answer":"You cannot judge whether a feature is complete based on type checking alone. You need to check external inputs and access permissions. Test whether you get the expected results under normal and failure conditions."},{"question":"What criteria should I use when choosing a vibe coding course?","answer":"Check whether there are hands-on exercises that involve explaining and modifying generated code. You can also check whether the course covers reproducing errors and validating inputs. Courses that specify the versions used and the runtime environment make it easier to check the conditions needed for reproducibility."}],"sources":[{"url":"https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html","title":"Official TypeScript documentation: TypeScript for JavaScript Programmers","type":"source"},{"url":"https://www.typescriptlang.org/docs/handbook/2/basic-types","title":"TypeScript Handbook: The Basics, type checking and type erasure","type":"source"},{"url":"https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html","title":"The Rust Programming Language: What Is Ownership?","type":"source"},{"url":"https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html","title":"The Rust Programming Language: Unsafe Rust","type":"source"},{"url":"https://docs.modular.com/mojo/manual/","title":"Mojo Manual: Language overview and Python interoperability","type":"source"},{"url":"https://docs.modular.com/mojo/requirements/","title":"Mojo System Requirements: CPU and GPU support requirements","type":"source"},{"url":"https://docs.python.org/3/glossary.html","title":"Official Python glossary: Bytecode and execution-related concepts","type":"source"},{"url":"https://numpy.org/doc/2.0/building/index.html","title":"NumPy 2.0 Manual: Building from source","type":"source"},{"url":"https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/What_is_JavaScript","title":"MDN: What is JavaScript?","type":"source"},{"url":"https://nodejs.org/learn/getting-started/introduction-to-nodejs","title":"Official Node.js documentation: Introduction to Node.js","type":"source"},{"url":"https://react.dev/","title":"Official React documentation: A user interface library","type":"source"},{"url":"https://nextjs.org/docs","title":"Official Next.js documentation","type":"source"},{"url":"https://www.php.net/manual/en/introduction.php","title":"PHP Manual: Introduction","type":"source"},{"url":"https://go.dev/doc/faq","title":"Official Go FAQ: Design goals and runtime characteristics","type":"source"},{"url":"https://go.dev/blog/waza-talk","title":"Official Go blog: Concurrency is not parallelism","type":"source"},{"url":"https://kotlinlang.org/docs/faq.html","title":"Official Kotlin FAQ: Developers and target platforms","type":"source"},{"url":"https://developer.android.com/kotlin","title":"Android Developers: Kotlin and Android","type":"source"},{"url":"https://www.swift.org/about/","title":"Swift.org: About Swift","type":"source"},{"url":"https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html","title":"Oracle Java Tutorials: About the Java Technology","type":"source"},{"url":"https://www.ibm.com/history/fortran","title":"IBM History: Fortran","type":"source"},{"url":"https://www-formal.stanford.edu/jmc/history/lisp/node2.html","title":"John McCarthy: LISP prehistory","type":"source"},{"url":"https://bitsavers.computerhistory.org/magazines/Datamation/196703.pdf","title":"Howard Bromberg: The COBOL Conclusion, Datamation, March 1967","type":"source"},{"url":"https://www.nokia.com/bell-labs/about/dennis-m-ritchie/chist.html","title":"Dennis Ritchie: The Development of the C Language","type":"source"},{"url":"https://www.stroustrup.com/bs_faq.html","title":"Bjarne Stroustrup FAQ: C++ and object-oriented programming","type":"source"},{"url":"https://www.ibm.com/think/topics/structured-query-language","title":"IBM: What Is Structured Query Language?","type":"source"},{"url":"https://www.w3.org/standards/history/CSS1/","title":"W3C: Cascading Style Sheets, level 1 publication history","type":"data_point"},{"url":"https://americanhistory.si.edu/collections/object/nmah_334663","title":"Smithsonian National Museum of American History: Log Book With Computer Bug","type":"source"},{"url":"https://devblogs.microsoft.com/typescript/typescript-native-port/","title":"Microsoft: A 10x Faster TypeScript, March 11, 2025","type":"data_point"},{"url":"https://docs.github.com/en/copilot/responsible-use/inline-suggestions","title":"GitHub Docs: Limitations of Copilot inline suggestions and responsibility for verification","type":"source"}],"images":[{"id":2241,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjEsInB1ciI6ImJsb2JfaWQifX0=--aa435b9d954b7e3cf19dca343a0d0fc5333fe68f/ai-73cc4d9e.webp","is_representative":true,"generation_method":"ai_photo","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"실습 교실에서 중년 남성이 노트북을 사용하고 옆의 여성이 탁자 위 스마트폰을 가리키고 있다.","caption":"AI가 생성한 코드는 실행과 테스트로 요구사항에 맞는지 확인해야 합니다.","description":null},"en":{"alt":"A middle-aged man uses a laptop in a classroom while a woman beside him points to a smartphone on the table.","caption":"AI-generated code must be run and tested to verify that it meets the requirements.","description":null},"ja":{"alt":"実習教室で中年の男性がノートパソコンを操作し、隣の女性が机の上のスマートフォンを指さしている。","caption":"AIが生成したコードは、実行とテストで要件を満たしているか確認する必要があります。","description":null},"es":{"alt":"Un hombre de mediana edad usa un portátil en clase mientras una mujer señala un móvil sobre la mesa.","caption":"El código generado por IA debe ejecutarse y probarse para comprobar que cumple los requisitos.","description":null},"id":{"alt":"Pria paruh baya menggunakan laptop di kelas, sementara perempuan di sebelahnya menunjuk ponsel di meja.","caption":"Kode buatan AI harus dijalankan dan diuji untuk memastikan kesesuaiannya dengan kebutuhan.","description":null},"pt":{"alt":"Um homem de meia-idade usa um notebook em aula enquanto uma mulher aponta para um celular sobre a mesa.","caption":"O código gerado por IA deve ser executado e testado para verificar se atende aos requisitos.","description":null},"zh-hant":{"alt":"實作教室裡，一名中年男子操作筆記型電腦，身旁的女子指著桌上的智慧型手機。","caption":"AI 生成的程式碼必須透過執行與測試，確認是否符合需求。","description":null},"de":{"alt":"Ein Mann mittleren Alters nutzt im Kurs einen Laptop, während eine Frau neben ihm auf ein Smartphone zeigt.","caption":"KI-generierter Code muss ausgeführt und getestet werden, um zu prüfen, ob er die Anforderungen erfüllt.","description":null}}},{"id":2242,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjcsInB1ciI6ImJsb2JfaWQifX0=--0a47db349b5b04ebfcd192a40d156aec0886d68c/ai-3af1935f.webp","is_representative":false,"generation_method":"ai_semi","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"서버실에서 CPU 방열판과 GPU 카드가 드러난 서버 내부를 살펴보는 여성","caption":"Mojo는 CPU와 GPU의 고성능 연산을 겨냥한 언어입니다.","description":null},"en":{"alt":"A woman inspects an open server with exposed CPU heatsinks and a GPU card in a server room.","caption":"Mojo targets high-performance computing on CPUs and GPUs.","description":null},"ja":{"alt":"サーバールームで、CPUヒートシンクとGPUカードが見えるサーバー内部を確認する女性","caption":"MojoはCPUとGPUでの高性能な演算を目指した言語です。","description":null},"es":{"alt":"Una mujer revisa un servidor abierto con disipadores de CPU y una tarjeta GPU en una sala de servidores.","caption":"Mojo está orientado a la computación de alto rendimiento en CPU y GPU.","description":null},"id":{"alt":"Seorang perempuan memeriksa server terbuka dengan heatsink CPU dan kartu GPU di ruang server.","caption":"Mojo ditujukan untuk komputasi berkinerja tinggi pada CPU dan GPU.","description":null},"pt":{"alt":"Uma mulher examina um servidor aberto com dissipadores de CPU e uma placa GPU em uma sala de servidores.","caption":"Mojo é voltada à computação de alto desempenho em CPUs e GPUs.","description":null},"zh-hant":{"alt":"一名女性在伺服器機房檢查打開的伺服器，內部可見 CPU 散熱器與 GPU 卡","caption":"Mojo 是以 CPU 與 GPU 高效能運算為目標的程式語言。","description":null},"de":{"alt":"Eine Frau prüft einen geöffneten Server mit CPU-Kühlkörpern und GPU-Karte im Serverraum.","caption":"Mojo ist auf Hochleistungsberechnungen mit CPUs und GPUs ausgerichtet.","description":null}}}],"published_at":"2026-10-29T14:25:12+09:00","updated_at":"2026-10-29T14:25:12+09:00","license":"cc_by","translation_status":"reviewed","available_locales":["ko","en","ja","es"],"data_locales":["ko","en","ja","es","id","pt","zh-hant","de"],"url":"https://injoys.com/en/articles/vibe-coding-programming-language-basics"}