CodeNFacts
CodeHub
Home

All Categories


Sign In
~/programming
$ cat what-is-programming.md

Programming, from first principles

Everything on this page exists to answer one question honestly: what actually is programming, why does it matter right now, and how do you build a real, lasting relationship with it - not just finish a tutorial and forget it a month later.

Definition

What is programming?

definition.txt

Programming is the act of writing precise, step-by-step instructions — called code — that tell a computer exactly what to do. A computer has no intuition of its own; it only follows what it's told, exactly as it's told. Programming is the skill of translating a human goal ("show me my bank balance," "recommend a song," "land this rocket booster") into a sequence a machine can execute without ambiguity.

analogy.txt

Think of a recipe. A chef doesn't just say "make a cake" — they list exact steps, quantities, and order: crack two eggs, whisk for 30 seconds, bake at 180°C for 25 minutes. Code is that recipe, except the "kitchen" is a processor executing billions of tiny steps every second, and the "ingredients" are data.

Relevance

Why programming matters right now

Every industry — healthcare, finance, agriculture, entertainment — now runs partly on software, so understanding code is closer to a literacy skill than a niche one.

Automation and AI are reshaping jobs; the people who can build or adapt tools tend to shape the change instead of just reacting to it.

Startups and small teams can now build products that once needed entire departments, because a handful of programmers with the right tools can move fast.

Remote, global, well-paid opportunities are unusually accessible in software compared to many other fields.

Even outside 'tech' jobs, scripting and automation skills save enormous time in day-to-day work — spreadsheets, reports, data cleanup.

Counterfactual

What if programming didn't exist?

No internet as you know it

No websites, no search engines, no maps, no video calls — the web itself is built from code.

No modern devices

Phones, laptops, cars, ATMs, planes, and even microwaves run on embedded software. Without programming they're just inert metal and plastic.

No automation

Every task — payroll, hospital records, flight scheduling, factory lines — would be manual, slower, and far more error-prone.

No AI, no data-driven decisions

Recommendation systems, medical diagnosis models, fraud detection, translation tools — all of it depends on code that processes data at a scale humans can't.

Benefits

How learning to program helps you

Sharper problem-solving

Breaking a big, vague problem into small, testable steps is a transferable habit that shows up far beyond code.

Building instead of just using

You stop being limited to what an app lets you do, and start being able to make the tool you actually need.

Career flexibility

Web, mobile, data, AI, security, game dev, robotics — one core skill set opens many different paths.

Understanding the systems around you

Once you can read code, algorithms feeds, apps, and 'the algorithm' stop being a black box.

Diagram

From idea to running program

pipeline.svg
ProblemAlgorithmCodeCompile / InterpretMachine CodeOutput

Every program, regardless of language, follows roughly this pipeline: a real-world problem gets turned into an algorithm (the logic), the algorithm gets written as code, and a compiler or interpreter turns that code into machine instructions the processor can run.

History

Who discovered programming, and when

Programming wasn't invented in a single moment — it evolved over more than a century, from the first theoretical algorithm to the languages powering today's apps.

timeline.svg
1843The first algorithm1936The theoretical foun…1957FORTRAN — the first …1959COBOL for business1972C is born1983C++ arrives1991Python1995Java & JavaScript, s…2009Go2010Rust2014Swift
1843

The first algorithm

Ada Lovelace

While translating notes on Charles Babbage's Analytical Engine, Ada Lovelace wrote a method for calculating Bernoulli numbers — widely regarded as the first published algorithm meant for a machine, making her the first programmer, decades before computers existed.

1936

The theoretical foundation

Alan Turing

Alan Turing described the 'Turing Machine,' a mathematical model of computation that defined what it means for a problem to be 'computable.' It's the theoretical bedrock every programming language still stands on.

1957

FORTRAN — the first high-level language

John Backus & IBM

FORTRAN (Formula Translation) let scientists write math-like instructions instead of raw machine code, cutting programming time drastically and kicking off the era of compiled high-level languages.

1959

COBOL for business

Grace Hopper (concept) & CODASYL committee

Grace Hopper's earlier work on the A-0 compiler inspired COBOL, a language built for business, finance, and administrative systems — some of it is still running in banks today.

1972

C is born

Dennis Ritchie, Bell Labs

C gave programmers close-to-hardware control with a readable syntax. It became the language most operating systems, including Unix and later Linux and Windows components, were built on.

1983

C++ arrives

Bjarne Stroustrup

C++ added object-oriented programming on top of C, enabling large, structured software systems — from game engines to trading platforms.

1991

Python

Guido van Rossum

Designed for readability, Python's philosophy of 'one obvious way to do it' made it the language of choice decades later for data science, AI, and scripting.

1995

Java & JavaScript, same year

James Gosling (Java) · Brendan Eich (JavaScript)

Java promised 'write once, run anywhere' for enterprise software. JavaScript, written in just 10 days, became the only language that runs natively in every web browser.

2009

Go

Rob Pike, Ken Thompson, Robert Griesemer @ Google

Built for simplicity and concurrency at internet scale, Go became the backbone of cloud infrastructure tools like Docker and Kubernetes.

2010

Rust

Graydon Hoare @ Mozilla

Rust guarantees memory safety without a garbage collector, giving C-level performance with far fewer crashes — now used in browsers, OS kernels, and embedded systems.

2014

Swift

Chris Lattner @ Apple

Apple's replacement for Objective-C, designed to be safer and friendlier for building iOS and macOS apps.

Concepts

Programming paradigms

Procedural

Step-by-step instructions grouped into procedures/functions.

e.g. C, Pascal, BASIC

Object-Oriented

Models code as objects with data (state) and behavior (methods).

e.g. Java, C++, Python, C#

Functional

Treats computation as evaluating pure functions, avoiding shared state.

e.g. Haskell, Elixir, Clojure

Declarative

Describes what result you want, not the steps to get there.

e.g. SQL, HTML, Prolog

paradigms.sketch
ProceduralFunctionalObject-Orientedmost reallanguages mix
Rankings

The most popular languages — and who built them

"Popular" shifts year to year, but these have held real staying power across industry surveys, job postings, and open-source activity.

top-languages.csv
LanguageCreatorYearBest known for
PythonGuido van Rossum1991AI/ML, data science, scripting, backend
JavaScriptBrendan Eich1995Web front-end, full-stack (Node.js)
TypeScriptMicrosoft / Anders Hejlsberg2012Typed JavaScript for large apps
JavaJames Gosling1995Enterprise systems, Android apps
CDennis Ritchie1972Operating systems, embedded, low-level
C++Bjarne Stroustrup1983Game engines, systems, performance-critical apps
C#Anders Hejlsberg / Microsoft2000Windows apps, Unity games, enterprise
GoPike, Thompson, Griesemer2009Cloud infra, microservices, DevOps tools
RustGraydon Hoare2010Systems programming, safety-critical software
KotlinJetBrains2011Modern Android development
SwiftChris Lattner / Apple2014iOS, macOS apps
PHPRasmus Lerdorf1994Server-side web (WordPress, Laravel)
RubyYukihiro Matsumoto1995Web apps (Ruby on Rails)
SQLDonald D. Chamberlin & Raymond F. Boyce1974Querying and managing databases
RRoss Ihaka & Robert Gentleman1993Statistics, data analysis
Reference

Programming languages of the world

This isn't every language ever created — thousands exist, many academic or historical — but it's a broad, practical spread across eras and use cases.

languages --list
AdaALGOLAPLAssemblyAWKBallerinaBashBASICCC#C++ClojureCOBOLCoffeeScriptCrystalCythonDDartDelphi (Object Pascal)ElixirElmErlangF#ForthFORTRANGoGroovyHaskellHaxeHTML/CSS (markup)JavaJavaScriptJuliaKotlinLabVIEW (G)LispLuaMATLABNimObjective-COCamlPascalPerlPHPPL/SQLPowerShellPrologPythonRRacketRubyRustScalaSchemeScratchShell (sh/zsh)SmalltalkSoliditySQLSwiftTclTypeScriptVVerilogVHDLVisual Basic .NETWebAssembly (WAT)Zig
Cheat sheet

Syntax, side by side

Print output

Python
JavaScript
Java
C++

Variable

Python
JavaScript
Java
C++

If statement

Python
JavaScript
Java
C++

For loop

Python
JavaScript
Java
C++

Function

Python
JavaScript
Java
C++

List / Array

Python
JavaScript
Java
C++
Habits

How to stay consistent

Small daily reps beat rare marathons

30–45 focused minutes every day compounds far more than one 6-hour session once a week.

Always be building something

Tutorials teach syntax; a real project — even a tiny one — forces you to actually solve problems.

Track your progress visibly

A GitHub commit streak, a habit tracker, or a simple daily log gives you evidence you're moving forward on hard days.

Pick one thing at a time

Jumping between five languages and frameworks each week feels productive but rarely compounds. Go deep before you go wide.

Get comfortable being stuck

Debugging and confusion aren't signs you're bad at this — they're most of what programming actually is.

Revisit old code

Rereading something you wrote a month ago is the fastest way to see how much you've actually improved.

Keep in mind

Important things to remember

Read error messages fully

Most beginners panic and Google the first five words. The message usually already tells you the file, line, and reason.

Understand before you copy

Pasting a Stack Overflow answer that works is fine — leaving it without understanding why is a debt you'll pay for later.

Version control from day one

Even solo hobby scripts benefit from `git init`. It's the undo button for your entire project's history.

Write for humans, not just the compiler

Clear names and small functions matter more than clever one-liners — code is read far more often than it's written.

Don't chase every new framework

Fundamentals — data structures, algorithms, how HTTP works — outlast almost every framework trend.

Tutorial hell is a real trap

Watching endless tutorials can feel like progress while you're actually avoiding the harder, messier work of building alone.

Don't compare day 10 to someone's year 5

Public portfolios show the polished result, never the hundreds of failed attempts behind it.

Security and edge cases aren't optional extras

'It works on my machine' is not the same as 'it works.' Empty inputs, bad data, and malicious input are part of the job.

closing-thought.md

Programming isn't a fixed body of facts to memorize - it's a way of thinking that keeps compounding the longer you stick with it. Languages will change, frameworks will come and go, but the core skill - breaking a real problem into something a machine can execute, then debugging your way to a working answer - stays valuable no matter what you build next.