All blogs / Software / engineering practice
The Craft of Coding
Musings on programming and education
Software / engineering practiceAlgorithms / data structuresCEssays / personal
- Posts
- 1,346 from 28 Jun 2013 to 9 Sep 2026
- Posting
- monthly (12 in the last year)
- Kind
- personal blog
- Feed
- https://craftofcoding.wordpress.com/feed/
2026 10
- Petzval on academia (1840-ish Vienna)
- University education is cooked
- Will we embrace sentient androids? (when they evolve)
- Everyone hates a sad professor
- Don’t judge new professors too harshly
- Why do students fail at computer science?
- Participation vs. commitment
- Good writing comes from life experiences
- The passing of Sir Tony Hoare
- Numbers in context − Chinese EV’s: Is 3% significant?
2025 17
- Numbers in context − $1M lump sum, or $1000 per week?
- Numbers in context − Cookware statistics
- The age of computer science is waning (mostly)
- Has smartphone technology peaked?
- Is the human mind becoming overwhelmed?
- Computer-science is cooked (at least for some)
- Predictions of the internet : 1994
- Rise of the human machines − the ascent of the AI-driven student
- Do I miss coding?
- Unix was a new style of computing
- You don’t know the power of grep
- It’s the end of the PhD as we know it (and I feel fine)
- On life in retirement from academia
- Reflections on 25 years in academia
- Only now, at the end, do you understand
- cis*3190 a students perspective
- Why is so much modern software garbage?
2024 87
- Musings from an almost-retired prof
- In C some things aren’t exactly what they seem
- Is this the weirdest thing in C?
- In C, memory management begins immediately
- Do Canadian CS degrees need to be 4 years long?
- Why does Star Wars tech seem so clunky?
- The wrong reason to do computer science
- My thoughts on course evaluations
- Dijkstra on the essence of programming
- Dijkstra on competent programming
- Niklaus Wirth on programming in 1968
- Algol-68 seemed like a good idea – until it wasn’t
- Tony Hoare on language design
- Niklaus Wirth on ALGOL-68
- Why Star Wars tech was often so secure
- What happened to futurism?
- The Wirth Trinity – Language comparison
- For some people self-learning is the best kind of pedagogy
- Fortran is a timeless language
- Winter is here for the mediocre CS grad
- A dozen basic skills for computer science students
- Why the Star Wars universe is decidedly anti-technology
- A non-recursive ruler
- Is writing a book worth it?
- The slowness of software
- Will I miss programming?
- C programming: while versus do-while
- Why didn’t “The Empire” have Google?
- Recursive patterns – the Heighway Dragon curve
- Who are the greatest computer scientists?
- The iPhone is ubiquitous – but what is it used for?
- Academic writing is often kinda blah
- Office emptied – check ☑︎
- Quicksort – Algorithm 63, and 64
- Is technology dehumanizing society?
- Is a computer science degree worthwhile in 2024?
- The math behind 30 year mortgages
- A non-recursive Towers of Hanoi
- The Josephus puzzle – using a circular linked list
- The Josephus puzzle – using arrays
- The Josephus puzzle – using recursion
- The Josephus puzzle
- The hailstone sequence and mutual recursion
- The hailstone sequence and recursion
- Recursion – The monkey in the well puzzle
- Why I’m glad to be done teaching
- Software is really quite forgettable
- The Eight Queens Puzzle (iv) – non-recursive
- I don’t want to sail with this ship of fools
- A Fortran stack module
- How to calculate large factorials
- A statistics program in Cobol
- Obfuscated code for π
- R.I.P. – Lena finally gets retired
- Printing Unicode in Ada
- Why isn’t it possible to calculate π to 100 decimal places?
- Going to cheat? Maybe don’t post to stackoverflow
- Numbers aren’t forever
- Troublesome calculations in algorithms
- Backtracking (via recursion) and maze-running
- Q&A on writing blog articles
- Lego versus Stoky’s
- Is it possible to “fix” higher education in Canada?
- Droste effect ads
- A multi-tiered approach to teaching recursion
- University tuition put into context
- Plateauing technology and boring computing
- Rise of the bricks – Does LEGO still engage children in creativity?
- An iterative Quicksort
- Recursive patterns – the Hilbert curve
- Why slow computing was a better learning experience
- R.I.P. Niklaus Wirth – you will be sorely missed
- Classic moments in Python…
- A simple but useful program
- Is programming useful in everyday life?
- Programming languages by generation
- Humanities are important as well
- Solving a word jumble in Fortran (v) – final things
- Solving a word jumble in Fortran (iv) – the lexicon
- Where are the fantastical new programming languages?
- Classic moments in coding…
- Solving a word jumble in Fortran (iii) – anagrams
- Solving a word jumble in Fortran (ii) – input
- Solving a word jumble in Fortran (i) – background
- Recursion – Pascal’s Triangle (ii)
- Recursion – Pascal’s Triangle (i)
- Exit stage left? (or just about…)
2023 126
- My thoughts on the Star Wars spin-offs
- Need a PhD supervisor? Please don’t email me.
- I’m on a break…
- Star Wars droids offer a good road forward for AI
- A Q&A about learning in a university environment
- Dijkstra on education
- Why not just use Python instead of Fortran?
- Computing phrases and meanings
- Recursion – the various types
- Failure is okay
- Coding with C-3PO
- Nature’s algorithms are better
- The algorithms of antiquity : Egyptian multiplication
- The algorithms of antiquity : Euclid’s GCD
- Kids learning to code might be a fruitless venture
- The algorithms of antiquity : Eratosthenes
- The algorithms of antiquity: Babylonia
- R.I.P. 🪦 archive.org
- Wading through the software mediocrity
- Tips for first-year computer science students
- The original Googol
- What is Meansort?
- What number is this?
- Thinking of cheating in computer science?
- Fibonacci humour
- Why do people question math?
- Calculating the volume of a gugelhupf pan
- Why a computer science degree isn’t everything
- Think a CS degree is a golden ticket? Why mediocre CS grads may have a harder time getting a good job in the future
- The truth about mental-health in academia
- Everyone in technology should read this book
- How much did mortgages cost in the 1980s?
- Why are so many young people oblivious to financial literacy?
- Just say NO to AI
- Why scientific journalism can be a joke at times
- Could software be the real problem with electric vehicles?
- Median filtering using Quickselect
- Why Fortran and Cobol will likely be immortal
- Recursion – The Knight’s Tour (N.Wirth)
- Is Gen-X tiring of technology?
- On HTML…
- In academia few dare to criticize the status quo
- AI will make some people mindless
- Stroustrup on the fine details
- Shouldn’t we worry about how “green” computing is?
- Wirth on “Good enough software”
- High school GPAs are *way* too high, and that’s a big problem
- Does university broaden the mind?
- Wirth on “Good languages”
- Niklaus Wirth on the complexity of systems
- Ignore-land
- The problem with (CS) grad school
- A trace of a recursive function
- AI will likely replace mediocre programmers
- A recursion example : step-by-step
- Recursion – implementing sum
- What is recursion?
- How computer graphics have changed…
- The reluctant academic
- A historical background to the word “recursion”
- Technology has just become a big blah
- Dobosort – An improved Bubblesort
- The best Sci-fi series?
- Technology, and poor parenting is making people soft
- Computer versus natural language
- Sorry, image processing is NOT a sub-field of AI
- The Eight Queens Puzzle (iii) – recursion
- The Eight Queens Puzzle (ii) – brute force
- The Eight Queens Puzzle (i) – background
- Students and the art of spoon-feeding
- Marvin on advice (in general) …
- Sheil on computer science
- Programming inefficiencies and redundant computations
- Wirth on inventing languages
- Generating a cylinder to represent HSB colour space
- How to deep dive for information
- Problem solving and the human condition
- Recursion – The Sieve of Eratosthenes
- Generating a colour wheel in Processing
- Why Processing is so good for visual things
- The Sieve of Eratosthenes (iii) – Cobol
- The Sieve of Eratosthenes (ii) – Fortran
- The Sieve of Eratosthenes (i) – Introduction
- Coding Cobol: Variable length arrays
- Coding Cobol: Arithmetic and picture clauses
- Coding Cobol: Adding “time to accrue” calculation
- Checking ISBN numbers in Cobol (ii)
- Checking ISBN numbers in Cobol (i)
- Does academia matter anymore?
- Coding Cobol: Simple compound interest
- Recursion – Compound Interest (in Ada)
- Do you remember the Macintosh 128K?
- A month in Ada
- Why don’t we use more Ada?
- Outputting special characters in Ada
- A more interesting linked list in Ada
- A basic linked list of words in Ada (ii)
- Skip_line through the tulips…
- A basic linked list of words in Ada (i)
- The rise of the mediocre programmer
- What it feels like sometimes to read other peoples code…
- Image processing in Ada (v) – the main program
- Image processing in Ada (iv) – more functionality
- The world of useless things
- Image processing in Ada (iii) – the package imageprocess
- Image processing in Ada (ii) – the package imagepgm
- Image processing in Ada (i) – the theory
- A recursive function for reading lines (from a file)
- The usability failures in our everyday lives
- How cold will my coffee be in X minutes?
- Some Fortran string tips
- More 2D strings in Fortran
- Calculating wind chill in Fortran
- One of the problems in the world is a lack of understanding about math
- Computing power is too often wasted
- Recursion: Permutations by interchange
- As AI gets smarter, humans get more stupid
- Translating an Algol-60 program to Fortran
- What is reverse engineering?
- The problem with π (iv) – Fortran to Ada
- Coding Fortran: A dynamic array of ragged strings
- Recursion : An algorithm for anagrams
- The problem with π (iii) – Pascal to Fortran
- Fortran – then versus now
- Why Fortran is a scientific powerhouse
- Another year, another piece of boring technology (or perhaps not?)
2022 143
- Kenya Hara on technology
- Tips for potential CS grad students
- It’s the end of social media as we know it, and I feel fine
- Python, where art thou?
- Punch-card humour
- I dislike OS upgrades because they break things
- Where is my flying car?
- Are there too many PhDs?
- Using awk: Adding line numbers to a program
- The shell: Calculating the size of directories
- What makes a successful CS grad student?
- Using awk: Counting words?
- Why some Python libraries aren’t all they’re cracked up to be
- University degrees ≠ intelligence
- The shell: Finding files using a specific name
- What is a modern programming language?
- Nonsensical recursion algorithms: Stutter
- The shell: Finding files using a specific date
- It’s not dead, Jim
- Why I hate this ad
- The problem with white text on a black background
- Languages Pre-Fortran
- Choosing a university? – Forget the guides and lists
- The worst type of usability?
- Half empty or half full?
- Why is software (usability) so horrible?
- Dȳkstra on the difficulty of recursion
- Computer science pioneers: Andrei P. Ershov
- Ershov on programmers
- How some institutions view scholarly work
- Dijkstra’s view of Ada
- Dȳkstra on the amathematical society
- Dȳkstra on Lisp
- Dȳkstra answers a question
- Some advice on post-secondary education – for parents
- Hoare on PL/1
- Dijkstra on curricula
- Dijkstra on AI
- Education has become the winter of our discontent
- Dijkstra on the end of computing science
- Dijkstra on faculty
- When is a question considered stupid?
- Why don’t we build simpler things?
- Are cars too complex?
- Where are the pink OO unicorns?
- Why some students “miss the mark” in computer science
- Teach yourself you must
- Do you need course material?
- On a breather…
- Arrays are not pointers!
- The programming problem
- The “Average Joe” system
- Who are we?
- Sagan on books
- The do’s and don’t of student success
- A limit to human abilities?
- This is the way
- McIlroy on C
- On the complexity of C++
- Flon on Programming
- Do computer scientists love computers?
- A CS education is about teaching yourself
- Ritchie on C (1977)
- Dijkstra on software maintenance
- Dijkstra on software engineering
- Ritchie on C’s terseness (1977)
- A weird C memory bug (i.e. stack directions)
- Expectations of writing abilities in higher education
- Advice for programming language designers
- Technology is often just a house of cards
- With recursion a problem solves itself
- Do these equations differ?
- How to interpret a simple equation
- Fibonacci and sunflowers
- Fibonacci and pinecones
- Technology – as harmful as it is helpful
- A simpler life with less technology
- Memories of Fortran II
- Do or do not…
- Timing a Python program
- A few words with Niklaus Wirth
- Memories of Fortran
- A learnable language can be judged by the quality of its error messages
- The art of googling
- Fortran – the greatest thing (for arrays) since bread came sliced
- Blue
- Tactile experiences and the world of reverse digitization
- Coding Fortran: external vs. module vs. interface
- Are you writing safety critical code in C?
- Making funny characters visible
- Ever wondered why goto is considered harmful?
- Coding Cobol: Many ways of doing things
- Coding Cobol: Tricks with arrays (or tables)
- Coding Cobol: Reading in an array of things
- A process zapper in C
- The Myths of Fortran
- Coding Cobol: A note on strings
- Dijkstra on PL/1
- Star Trek’s Achilles heel is time-travel.
- Why I have given up on Julia
- Shell script: batch converting filenames to lowercase
- If you want to learn a new language then teach yourself!
- The timeline of Fortran
- Shell script: Deleting executable’s from the command-line
- What to learn Unix?
- Cobol is no zombie!
- The basics of program legibility
- The timeline of C
- The confusing world of Nim
- The basics of configuring the Z shell (on a Mac)
- You don’t know the power of the shell
- Recursion versus iteration
- The evolution of C-based languages
- The evolution of C
- Recursion in Python
- Recursion and problem solving
- Toy programming languages are like atomic playsets of the 1950s
- What Fortran does better than C-like languages
- Coding Ada: get vs. get_line (ii) – some caveats
- Coding Ada: Using multiple packages
- Coding Ada: get vs. get_line (i) – the basics
- Ada is defensive by default
- Forget about teaching kids to code
- Reengineering a messy “arithmetic if” in Fortran (iv) – rebuilding the code
- Dead, extinct and expired programming languages
- Reengineering a messy “arithmetic if” in Fortran (iii) – reverse engineering
- The art of naming variables
- What are the most common website usability mistakes?
- Exploring website usability (ii)
- Is C++ just pure dark magic?
- Exploring website usability (i)
- Reengineering a messy “arithmetic if” in Fortran (ii) – the analysis
- Reengineering a messy “arithmetic if” in Fortran (i)
- Coding Fortran: Writing an image as a text image file
- Translating BASIC to Fortran: Twin primes
- The caveat of fixed-point numbers
- Coding Fortran: Reading a text image from a file
- Coding Fortran: Funny read behaviour from files
- The low down on legacy code and languages
- Why rankings are kind of hogwash
- The origins of the word “program” in computing
- Why Fortran is easy to learn
- Saving the princess
2021 174
- How to build a horse with programming…
- Programming languages through the ages…
- Why Python dependencies are just plain cruel
- When not to use recursion
- Fibonacci by linear recursion is better
- The tapering of technology
- The best what?
- The age of zombie apps
- Fortran Re-engineering: Debt repayment schedule (vi)
- Fortran Re-engineering: Debt repayment schedule (v)
- Why higher education needs more problem solving courses
- Can computers think?
- The conundrum of languages in a CS curriculum
- The value of a liberal arts degree
- Big-O and speed
- Vacations of the mind (or the burden of data)
- Big-O – Some examples
- Big O notation- What is it good for?
- Tail recursion – What’s so special?
- Amicable numbers in Fortran
- The origins of algorithm
- Algorithms are as easy as cake
- Wirth’s thoughts on the “new Algol” committee.
- Programming made easy (ix) – mortgage payments
- Recursion – the basics of tail recursion
- Thresholding algorithms: Bernsen (local)
- Programming made easy (viii) – carbon dating
- Is “for” the best term for a loop?
- Programming made easy (vii) – looping
- Programming made easy (vi) – making decisions
- Programming made easy (v) – input and output
- Programming made easy (iv) – arithmetic
- Programming made easy (iii) – data
- Universities not preparing students? Likely.
- Programming made easy (ii) – algorithms
- Programming made easy (i) – languages
- Not every algorithm works every time
- Are bootcamps the future for the software industry?
- Thresholding algorithms: Sauvola (local)
- Why isn’t CS pedagogy progressive?
- Chaos and bifurcation diagrams
- Thresholding algorithms: Niblack (local)
- If UFOs exist, what do they code in?
- Thresholding algorithms: Phansalkar (local)
- Image processing algorithms in Julia
- What is the Shuttle sort?
- The origins of Bubble sort
- Why new algorithms are hard to develop
- Recursive patterns – lightning bolts
- Governments making software “in house” is just a bad idea
- Fractal patterns – Barnsley ferns
- Recursive patterns – the Sierpinski gasket
- The origins of Fibonacci and recursion
- Why Julia is not great for novice programmers
- The Square-Diamond algorithm for 2D surfaces (ii) – implementation
- The Square-Diamond algorithm for 2D surfaces (i) – basics
- Midpoint displacement in 2D
- Generating terrain with midpoint-displacement
- Demystifying random numbers – Box-Muller Method
- Demystifying random numbers – Schrage’s Method
- Demystifying random numbers
- Fractal Brownian motion using random midpoint displacement
- Plankalkül – the first language (ii)
- Plankalkül – the first language (i)
- Recursion and Matryoshka dolls
- What’s wrong with CS degrees?
- Quora – adventures in stupidland
- Peasant multiplication algorithm (ii) : Recursion
- Peasant multiplication algorithm (i)
- A recursive Bubblesort
- Are computer science degrees archaic?
- Recursion – Listing Unix directories in C (alternative output)
- Recursion – The Hofstadter sequences
- Recursion (not) – Ackermann’s Function (iv) – iterative
- Recursion – McCarthy’s “91 function”
- The Babylonians upstage Pythagoras
- Recursion (not) – Ackermann’s Function (iii) – stacks
- Why blog?
- Why are most programming languages in English?
- Recursion – subfactorials and double factorials
- How to write a bad program
- Why academia is not as open minded as people think
- The Terminal Digits of 2^T
- The Wirth Trinity – Design and examples
- Recursion – Fibonacci using Vorob’ev’s Equation
- Recursion – structural versus generative
- Euler : The beginnings of a journey
- Recursion – What is a primitive recursive function?
- Recursion – Ackermann’s Function (ii)
- Recursion – Ackermann’s Function (i)
- Algol-W : A precursor to Pascal
- The black magic of casting pointers in C
- The Wirth Trinity – Oberon
- Understandability and compactness
- The Wirth Trinity – Modula-2
- The usability of Fortran
- Fun with C and Pascal
- Recursion – Sudan’s Function
- Testing Julia for Speed – 2021 update
- The Wirth Trinity – Pascal
- Myths about becoming a programmer
- C++ – The Cobol of the 90s
- When you could read about the whole Internet in a book
- Why C and C++ are dangerous languages (for novice programmers)
- Has programming language design become dull and soulless?
- The shell: Searching file contents with grep
- The art of over-commenting
- The shortcomings of C: (v) control structures
- The shortcomings of C: (iv) floats and ints
- The shortcomings of C: (iii) too many operators
- Legacy code and comments
- The shortcomings of C: (ii) undefined behaviour
- The shortcomings of C: (i) ambiguities
- Algorithm 35: The Sieve (in Algol-68)
- Zuse on academic theoreticians
- Things you should never do as computer science student
- C++ versus Ada for safety critical software (ii)
- C++ versus Ada for safety critical software (i)
- When designing a website, test *all* the browsers
- Why does no one write language critiques anymore?
- The caveats of Julia for image processing (ii) – the image structure
- Zero-based indexing considered harmful
- An insight into legacy systems
- Coding Cobol: A bubblesort
- The caveats of Julia for image processing (i) – overview
- Coding Cobol: Checking a file exists
- A thought on COBOL
- The Swiss Army Knife Syndrome and ALGOL 68
- The Zuse Z4: Computing at ETH in the 1950s
- Recursion – the Pascal years
- Recursion – local variables
- Recursion – Fortran finally gets it!
- Ditching a tricky arithmetic if
- 2D strings in Fortran
- Who were the best language designers?
- Why does NASA not allow recursion?
- Superplan – groovy!
- Is the software crisis chronic?
- Defensive programming: Validating input in C and Fortran
- Why APL floundered as a language
- The problems with Julia.
- Program readability and tricky logic
- The problem with implementing algorithms
- Is HTML easy to learn?
- Evolution of the assignment operator
- The Wirth Trinity
- Algol – Breaking the sequential flow
- Coding Ada: strings (iv) – unbounded to string
- What I really dislike about Julia? It’s scope.
- Julia is bad at recursion
- Recursion – Slowsort
- Fortran Reengineering: entombing legacy subprograms
- Why Python is horrible for recursion
- Explaining pointers – Pascal and C
- What makes a good online grocery experience in Ontario?
- Coding Fortran: contains (modularity)
- Coding Fortran: Interface blocks (modularity)
- Coding Fortran: subprograms (modularity)
- Coding Fortran: Validating input
- How to write a program specification
- Fortran Reengineering: arctan (iv)
- Fortran Reengineering: arctan (iii)
- Fortran Reengineering: arctan (ii)
- Fortran Re-engineering: arctan (i)
- Coding Cobol: reading a file of integers
- Why do some “technical” books cost so much?
- Programming isn’t software development
- Into the depths – infinite recursion
- Computer Science Pioneers: Konrad Zuse
- Coding Fortran: nested functions
- The subtleties of language elegance
- Coding Ada: strings (iii) – arrays of strings
- The power of the backup
- Why Algol bested Fortran (for a bit)
2020 135
- Examples of well designed e-commerce sites
- Some big-box retailers still don’t get e-commerce
- The irony of e-commerce
- If you want to do a PhD, here are some things you should know
- The dark art of defensive programming
- Sloppy coding? Try some defensive programming
- In the 1960s you had to implement your own compiler
- Recursion in APL
- Recursion – Fortran bends the rules
- Recursion – the trouble with early Fortran
- Recursion – the ALGOL60 years
- Nuclear winter – coding for fun?
- A exceptional article on the use of Cobol
- Image processing was once simple
- The advent of flexible learning
- Programming languages are like ancient script
- Learning linked lists (v) – deleting a node
- Imagination and tinkering
- Learning linked lists (iv) – inserting a node
- Learning linked lists (iii) – traversing a list
- How to become a good writer
- Why is Julia not more popular?
- The Great Beyond – the future of Computer science education
- Recursion – Decimal to binary
- Learning linked lists (ii) – adding nodes to a list
- Learning linked lists (i) – the low-down
- The craft of programming
- Want to learn to program?
- The pandemic will change the way technology companies operate
- Overloading of the mind
- On hiatus…
- So long, and thanks for all the fish.
- Musings on why the Towers of Hanoi is hard to comprehend
- Recursion and the human mind
- Programming is…
- Teaching Grade One’s to code – Are U nuts???
- The value of a humanities education
- Recursion – The Towers of Hanoi (iii)
- Don’t mention the “search”
- Recursion – The Towers of Hanoi (ii)
- The internet: Drinking from a hydrant
- Teachers aren’t always good learners
- Why a syntax-heavy course = lack of programming skill diversity
- Why we skipped the superfluous semi-symbol
- Too much information?
- Recursion – The Towers of Hanoi (i)
- Fibonacci and pineapples
- The new norm in post-secondary education?
- Why novice programmers end up hating programming
- Are arrays in C pointers?
- Time travelling with the post
- Why technology is a thin facade
- Explaining pointers – the basics
- Recursive patterns – the Cantor set
- What is elegant code?
- Does brace style matter?
- Programming made easy – nested loops
- Are programs beautiful?
- The conundrum of the tab
- Kernighan on C
- Programming made easy – loops (iii)
- Programming made easy – loops (ii)
- Programming made easy – loops (i)
- Programming made easy – if statements
- Are Dolphins smarter?
- Do droids have consciousness?
- Recursion and marking a rule (ii)
- Calculating π with Gregory-Leibniz (iv) – Julia just for fun
- Cobol is alive!
- Calculating π with Gregory-Leibniz (iii) – C by other means
- Calculating π with Gregory-Leibniz (ii) – Fortran
- Calculating π with Gregory-Leibniz (i) – C
- Live forever as a synth?
- Coding Ada: Bitwise operators
- Recursion and marking a rule (i)
- Recursion – Listing Unix directories in C
- Global variables and side effects
- Beyond the edge…
- Life? It’s all around us.
- To infinity and beyond
- Recursion (versus iteration)
- Unix and C living in symbiosis
- A cat by any other name?
- Why calculating Fibonacci using binary recursion is just plain moronic
- Coding Cobol: Recursion
- Unix – The most powerful OS?
- Programming made easy – how to learn the basics of any language
- A quick comparison of sh vs. csh
- Sally Sells C Shells, but what about Bourne?
- The shell: Stripping parts of filenames (in Unix)
- Removing a.out’s with a shell script
- How to develop a recursive algorithm
- Coding Cobol: Legacy if statements
- Coding Cobol: Replacing “go to” with a loop
- Coding Cobol: Replacing “go to” with perform
- Coding Cobol: Transfer of control in paragraphs and sections
- Coding Cobol: functions (external)
- Coding Cobol: built-in functions
- Calculating Babylonian square roots (ii)
- Calculating Babylonian square roots (i)
- Loading language syntax into the brain is expensive
- Removing goto’s that jump backwards
- Random integers in a range
- What is throw-away code?
- 7 Degrees of Correctness
- Coding Ada: Random numbers
- The world of unstructured programming, i.e. spaghetti code
- Usability confusion: Streetcar buttons
- The bustling evolution of languages
- Is goto evil?
- A Processing Example – The Archimedes Spiral
- If you want to visualize algorithms, code in Processing
- How efficient is your code?
- Fortran re-engineering: subprograms
- How to convert a decimal fraction to binary
- Fortran re-engineering: arithmetic if
- Fortran re-engineering: loops
- Floating-point precision in Fortran
- Is Fortran a weed, or an invasive species?
- The world of numeric errors
- Why 1/10 is not a precise real number
- Fortran re-engineering: data statements
- Converting characters to hexadecimal
- Fortran re-engineering: A small program for basic stats (iii)
- Fortran re-engineering: A small program for basic stats (ii)
- Fortran: character → hexadecimal
- Fortran re-engineering: A small program for basic stats (i)
- One thing Fortran won’t let you do (anymore, but C will)
- Fortran re-engineering: equivalence statements (ii)
- Fortran re-engineering: equivalence statements (i)
- Fortran is omnipotent
- Could you decipher this narly flowchart?
- The Fortran print statement
- Why Fortran is easier to learn than C
- An ancient math problem (in Fortran)
2019 54
- Sally sells C shells, but should she have?
- Learning recursion through visual patterns (ii)
- The dangers of technology in the home
- A simple Julia example – The Yorkshire Estates
- You could think like a computer scientist, but do you want to?
- Recursive patterns – the Koch snowflake
- Is a CS education meaningful?
- Recursive patterns – the Koch curve (iii)
- Recursive patterns – the Koch curve (ii)
- There are no 10-in-1 programming languages
- To learn how to program, you actually need to code
- Recursive patterns – the Koch curve (i)
- What we forsake for the sake of digital data
- Invention + making = resilience
- The truth about moisture vaporators
- What Dijkstra thought of AI
- Why blogging in academia is ok.
- A language, is a language, is a language
- Data, is not information, or knowledge
- Are we computing for computings sake?
- Why designing algorithms is hard
- Technology may be our biggest problem
- Principles of program efficiency
- Why teaching programming needs an experiential approach
- Hate OO? – read this article
- When Google translate fails
- A new blog!
- Semantics – human vs. programming languages
- Why human brains are so great
- Are programming languages really languages?
- Is HTML a *real* programming language?
- Teaching – We’re not in Kansas anymore
- Are 8K TVs useful technology?
- The fading light of technology?
- Computer vision, AI and the art of fruit picking
- Practicing problem solving with puzzles
- Coding Cobol: Calling C (ii) – arrays
- Coding Ada: Timing code and passing functions to functions
- Coding Cobol: Calling C (i)
- Human intuition
- Coding Cobol: Paragraphs, loops, and if statements
- Coding Cobol: A basic program
- The realm of real innovation
- Ada and goto
- Experiential learning in a food course
- Understanding history via experiential learning
- Fortran Re-engineering: Debt repayment schedule (iv)
- Fortran Re-engineering: Debt repayment schedule (iii)
- Fortran Re-engineering: Debt repayment schedule (ii)
- Fortran Re-engineering: Debt repayment schedule (i)
- A lack of problem solving in CS education
- Assume nothing
- Mediocrity in programming
- The [over] complexity of experiential learning
2018 131
- Machines don’t think, they process
- Too much schooling ? (or maybe just a different type)
- Experiential learning and failure
- The problem with programming is a lack of problem solving skills
- AI – the great abyss
- How the brain rewires itself…
- Deciding on post-highschool studies
- Computing – It’s life Jim, but not as we know it.
- A port, a port, my kingdom for a port!
- Cognitive load and arrays
- My “history of food” course in winter
- Pascal’s syntactic ambiguity and C’s ineptitude
- Pascal – a language for novice programmers
- Can an algorithm find the pattern?
- Why technology may not save us
- Why most institutions of higher learning are antediluvian
- Decaying apps
- Generating a recursive Romanesco broccoli
- Are great writers born?
- Is computing sustainable anymore?
- Is the world too complex?
- When algorithms may not be optimal
- Syntactic sugar and C : A report
- Recursive algorithm – The River Crossing puzzle
- Presto cards, and dodgy TTC software
- So I got 150Mbps fibre optic – what does that mean?
- Why Apple is king of the tech companies
- Quirky software in cars
- Away… for a bit.
- Human-machine interaction and the usability conundrum
- Art is about humanistic sensibilities
- Weird recursive algorithms
- What is Quickselect?
- My axe never needs an upgrade
- The new Loblaws self-checkouts – usability
- Stupid switch (ii) – Bad design
- Stupid switch (i) – Why B’s switch statement was better
- AI and Westworld
- Where did C arrays come from?
- Median image filtering: efficiency
- What ever happened to ideas?
- Recursive patterns – the Sierpinski Carpet
- Recursive patterns – the Sierpinski curve
- The recursive nature of baking powder
- Evolution of “if” in C
- Syntactic inheritance
- Learning recursion through visual patterns (i)
- A survey for computer science students
- The problem with Pi (ii)
- Parallelism in Julia (ii) – image processing
- The problem with Pi (i)
- Building a visualization of a sunflower spiral (ii)
- Building a visualization of a sunflower spiral (i)
- Using the “Processing” language
- TTC digital transfers – Is there something wrong with their Presto algorithm?
- Parallelism in Julia (i) – parallel loops
- Famous coding blunders
- Coding Ada: reading lines from files.
- Timing and efficiency in C programs (ii)
- Timing and efficiency in C programs (i)
- Coding Ada: Using an exception
- Why the Montreal Metro (subway) has good usability
- While C is a surfer dude, Ada is Thor
- Coding Cobol: dynamic filenames
- Are autonomous vehicles that important?
- C language: The good, the badly, and the ugly
- A weird C memory bug
- Coding Cobol: Basic re-engineering
- Coding Cobol: A program with loops (and an array)
- Coding Cobol: An alternate program
- Coding Cobol: What’s with those weird numbers?
- Coding Cobol: if statements (and reading from a file)
- Cognitive load and knowledge transfer
- Cognitive load in programming languages – loops
- Cognitive load in programming languages – the basics
- Coding Cobol: A more verbose calculation
- Coding Cobol: A picture is worth 1000 words
- Coding Cobol: A basic “Hello World”
- Memory in C – peeking at the HEX addresses (ii)
- Coding Ada: pointers (the extreme basics)
- Thoughts on becoming a good programmer
- Memory in C – peeking at the HEX addresses (i)
- Segmenting eyes through thresholding (ii)
- Segmenting eyes through thresholding (i)
- Programming languages are the interface to the machine
- Coding Fortran: file I/O
- Coding Ada: packages (+ records and file I/O) (ii)
- Coding Ada: packages (+ records and file I/O) (i)
- Why I like organic coding
- Coding Ada: strings (ii) – unbounded
- Coding Ada: strings (i) – fixed
- Coding Ada: declare blocks
- Coding Ada: arrays (ii)
- Coding Ada: arrays (i)
- Coding Ada: global variables
- Coding Ada: nested subprograms and scope
- Coding Ada: functions
- Coding Ada: procedures
- Give me an “A”, give me an “I”, what do they spell?
- Coding Ada: other loops (or “do you need a loop and a half?”)
- Coding Ada: for loops (and raising errors)
- Coding Ada: if-else (and some I/O)
- Coding Ada: datatypes and assignment
- Coding Ada: A basic “Hello World!”
- Autonomous vehicles… and the real world
- Why taxpayer funded research should be open-access
- Interoperability : Calling Fortran from C (ii)
- Coding Fortran: strings
- Interoperability : Calling Fortran from C (i)
- Partial re-engineering and frameworks (entombing)
- Arrays and memory in Fortran
- Coding Fortran: Allocatable (dynamic) arrays
- Character arrays vs strings in Fortran
- Coding Fortran: modules
- Coding Fortran: a sorting module
- Coding Fortran: Arrays
- Fortran re-engineering: Prime Number Generator (v)
- Fortran re-engineering: Prime Number Generator (iv)
- Coding Fortran: functions
- Fortran re-engineering: Prime Number Generator (iii)
- Fortran re-engineering: Prime Number Generator (ii)
- Fortran re-engineering: Prime Number Generator (i)
- Coding Fortran: subroutines
- Coding Fortran: loops (or rather the do loop)
- Coding Fortran: if-else
- A brief guide to Fortran Re-engineering
- Coding Fortran: A basic “Hello World”
- Does Fortran matter?
- Windows – 200 years in the future? I hope not!
- Recollections of programming in the 1980s
- Haiku
2017 194
- Is there something weird going on here?
- Why we should all share code
- Pupil segmentation with blobs
- What life means – and it’s not the number 42
- An example of the Hough transform – pupil segmentation
- How many logs can a woodchuck count?
- Image mean filtering (iii) – in C
- Where is static memory stored in C?
- I like simple code
- Creating photographic filters (i) – desaturation and saturation
- Image mean filtering (ii) – in Fortran
- Image mean filtering (i) – in Python
- The worst usability = washing machines
- Computer humour – “real” programmers
- The real world of software development is not in academia
- Making a colour-splash effect filter
- Reducing technology [complexity] for a simpler life
- Life – a universe of possibilities
- What is a closed-loop?
- Why physical usability really matters
- Software – a step back in time
- Coding? Why kids don’t need it.
- When things aren’t quite what they seem
- Apple and design
- The usability of old blenders
- Is blogging an academic pursuit?
- Writing a textbook ≠ get rich quick scheme
- Why learning to code is easier in Julia (iii)
- Why learning to code is easier in Julia (ii)
- Why learning to code is easier in Julia (i)
- The driverless train
- Free smart thermostats? – no free lunch
- Why AI should be avoided
- Learning to program (xi) – files in Julia (Julia 1.0)
- When Google maps gets it wrong…
- Learning to program (x) – usability (Julia 1.0)
- Valerian – my thoughts on the movie
- The material of software craftsmanship is the language
- On furlough…
- Learning to program (ix) – all about style (Julia 1.0)
- Learning to program (viii) – Julia strings and functions (Julia 1.0)
- Learning to program (vii) – Julia strings (Julia 1.0)
- Learning to program (vi) – Julia arrays (Julia 1.0)
- Learning to program (v) – adding a subroutine (Julia 1.0)
- Errors never cease to amaze…
- Learning to program (iv) – going loopy in Julia (Julia 1.0)
- Learning to program (iii) – an intermediary Julia program (Julia 1.0)
- Learning to program (ii) – an interactive Julia program (Julia 1.0)
- Learning to program (i) – a simple program in Julia (Julia 1.0)
- So you want to get a PhD?
- Learning to program – One algorithm, many languages
- Software craftsmanship
- Learning to program – throw yourself in at the deep end
- Debunking myths about programming languages
- Debunking myths about programming (ii)
- Debunking myths about programming (i)
- Life Skills 101
- Is it a subroutine, or a function, or a procedure?
- Eco-conscription anyone?
- It’s life Jim – but not as we know it.
- Test, test, and test again
- The problem with CS education
- Why image segmentation is difficult (2)
- A simple programming language
- Forward creative thinking
- Are we too reliant on technology?
- Calling Fortran from Julia (iii) : passing 2D arrays
- The art of tagging (ii) – describing cereal boxes
- The art of tagging (i)
- Simplicity is the key to robust algorithms
- Caveats of algorithm complexity (ii)
- Caveats of algorithm complexity (i)
- Ghosts in the machine: Why Fortran failed to maintain its hold
- Coding: A small note on Cyclomatic complexity
- Ghosts in the machine: Algol 60
- The recursive factorial began life as Algorithm 33
- Why Algol 68 was weird (and ultimately failed)
- Why software is pre-Neolithic
- Puzzles that programs can’t solve
- Why building things is good for you
- Abbreviations in programming languages
- Program re-engineering: code cocooning
- Indenting… why not use 3-space indents?
- Occupational hazards
- Fibonacci in Swift
- Experiential programming (with Julia 1.0) (ii)
- Swift fixes C’s “issues”
- Experiential programming (with Julia 1.0) (i)
- Why programming for non-CS students is different
- CamelCase or Underscore?
- The design of dead languages…
- History of the horrid switch statement (iii): C and beyond
- What’s in a name?
- History of the horrid switch statement (ii): Algol 68
- History of the horrid switch statement (i): the early years
- Coming out this July: Valerian and the City of a Thousand Planets
- History of the early algorithmic languages
- Apps that “improve” photos
- Evolution of if (iv): Ada and beyond
- The use of in-camera filters
- Computer science pioneers: Heinz Rutishauser
- Early years of the for loop
- Efficiency considerations in loops
- The evolution of if (iii): Algol68, Pascal and C
- The evolution of if (ii): Fortran IV and 66
- The evolution of if (i): pre-Fortran to Algol 60
- SURF, SIFT? What about ORB?
- Software is like Lego bricks… except it isn’t
- Python and its “dependency” issues
- A stylistic viewpoint on compressed code
- Building a contrast enhancement filter in Julia (ii)
- Why reading code is important
- Building a contrast enhancement filter in Julia (i)
- In the software world..
- Image binarization (9) : Why image processing involves tinkering
- A crazy command line
- A cool software engineering degree
- Why long computer science degrees are passé
- Image binarization (8) : An example of differing approaches
- Ada loves exceptions
- Why you *have* to understand memory constraints
- What is sed?
- Image binarization (7) : What about local thresholding algorithms?
- Automatic line numbering
- Nested functions and scope in Julia
- Timing a Fortran function
- Julia and nested functions
- Dynamic strings in Fortran
- Timing an Ada function
- Tales of cryptic Cobol: strings
- Plotting image histograms with Julia
- The usability of washing machine labels
- UPPERCASE to lowercase with Cobol (oh yeah!)
- Binary images: dark objects on a light background?
- How long should an identifier be?
- Why uppercase is not so good for programs
- Reading “dynamic” filenames in Cobol programs
- The humble semicolon
- Why 1-based indexing is *OK*.
- Image binarization (5) : A harder example
- Image binarization (6) : The pitfalls
- Python is fast enough
- Software glitches?
- Image binarization (4) : A simple example
- What’s wrong with image processing?
- A brief look at the utter madness of Algol 68
- Languages in Perspective: The Algol ”family”
- Don’t think legacy systems are real?
- Why you should become a multilingual programmer
- AI – Answers from the great beyond?
- Calling Fortran from Julia (ii)
- Fortran re-engineering example (6)
- Fortran re-engineering example (5)
- A nice error message?
- Calling Fortran from Julia (i)
- Image binarization (3) : What should be binarized?
- Fortran re-engineering example (4)
- Fortran re-engineering example (3)
- Fortran re-engineering example (2)
- Image binarization (2) : Art or science?
- Why some algorithms *seem* to work
- Image processing fun with FFT! (iii)
- Image processing fun with FFT! (ii)
- Image processing fun with FFT! (i)
- Image binarization (1b) : It’s all about the data
- Image Processing: Why Lena doesn’t matter anymore.
- Ada : Generic stacks (ii)
- Ada : Generic stacks (i)
- Image binarization (1) : Introduction
- Finding specific elements in a Julia array
- Calling C from Julia (ii) : 2D arrays
- Ada : building with blocks
- Why image segmentation is difficult (1)
- Calling C from Julia (i) : Simple arrays
- Why Ada matters.
- Fortran re-engineering example (1)
- Column-major vs row-major arrays: Does it matter?
- Real random numbers in Fortran
- Read your own punch cards
- Python’s Achilles heel
- Re-engineering loops for efficiency (ii)
- Quote from “The Mind of Mechanical Man”
- Backus on programming in the 1950s
- Re-engineering loops for efficiency (i)
- An artistic filter (in Julia)
- Simpler Japanese toilet user interfaces…
- How to process problematic images?
- Want to see a real legacy Fortran program design spec?
- Where did image processing begin?
- NASA’s image processing in the 60s.
- How many goto’s in old code?
- Don’t like pointers? Where did they come from?
- My periodic table of programming languages
- One of my favourite words.
2016 134
- Why universities don’t work anymore
- Software is not rocket science
- Xmas bug
- What’s up for 2017?
- What’s with technology companies?
- “Smart” homes – the dark side
- The F-35 : An exercise in what software shouldn’t be
- Will computers take over the world?
- A.I. – what’s all the hype?
- e-books take over the word… NOT!
- The art of searching for knowledge
- Grapheme clusters – YUM!
- The problem with evolving languages today
- Imagination versus skill
- Did old code have weird style?
- Where did the use of long variables in C come from?
- Living languages
- Why ulimit is not a cure all for stack problems
- I type, therefore I am – The conundrum of data types in languages.
- When did indenting appear in programs?
- Memories of memory
- Design of a string type for C
- How lucid is Lucid?
- The shortcut if
- Pascal’s Achilles Heel
- The devolution of usability
- Structural erosion in old code, i.e. rot
- The user interfaces of Star Trek – vocal
- Survival usability
- Are some people just clueless?
- Usability and online reviews
- Programming blunders
- McDonalds gets their touchscreen right
- Should the switch statement exist?
- Programming syntax and its analogy with English (ii)
- Never trust software
- Programming syntax and its analogy with English (i)
- Miracles You’ll See in the Next 50 Years: A retrospective
- The butterfly effect
- The cognitive load of C: arrays
- The cognitive load of C: functions
- The cognitive load of programming languages on the novice programmer
- Image processing in Julia (ii)
- What Star Wars teaches us about technology
- Overflowing the stack in Python
- Hubots and technology creep
- Thinking considered superfluous (part 2)
- Is legacy computing infrastructure to blame?
- Life is but a funny walk.
- On hiatus…
- Are computers morons?
- Memory in C – an example
- The biggest problem with Python?
- Image Processing toolbox for Julia
- Translating code to Julia
- Debunking TV technology: Reflections in the cornea
- The house of the future… in 1956
- The life of variables in functions
- What is code complexity?
- Machine code in BASIC
- Learning to code 1980s style
- Julia breaks recursion!
- Making a heterogeneous stack in Julia
- And now? A real craft.
- Why add a string type to C?
- Technology overload?
- Image processing in Julia (i)
- Testing Julia for speed (iii)
- Testing Julia for speed (ii)
- Testing Julia for speed (i)
- Programming in Julia – the caveats
- Julia – Design in the small
- Programming in Julia – First impressions
- A lesson in life
- Usability – When “updating” software goes so wrong.
- Is it possible to fix C?
- Removing tabs from programs in Unix
- Chef vs. programmer
- Origins of the for loop
- What’s with the “dangling” else?
- Why Pascal is a good language
- One programming book you should read
- What happens when the glass falls?
- Is the computer science degree endangered?
- Calling a C function from Cobol
- UPPERCASE 2 lowercase conversion made easy
- History of languages: 1990s – super blah
- Calculating π
- Why nested functions can be cool.
- Programs written in other languages: German
- Is code optimization evil?
- Classic computer science papers you should read.
- How smart is AI?
- Exceptions are the Wookiees of Ada
- Humans and the usability of avocado’s
- BASIC was, well… basic
- The evolution of language symbols
- C obscenities = versus :=
- Thinking considered superfluous (part 1)
- C obscenities – the shortcut operators
- C obscenities – three increment operators
- C obscenities – && and ||
- When software updates, do you question it?
- Interesting items from the Joint Strike Fighter C++ coding standards.
- The F-35 jet fighter is programmed using what??
- Efficient compilers = less need for optimization?
- Language design: the control structure “terminator”
- History of languages: 1980s – super freaky!
- Ada characters are tricky… or not?
- goto not always considered harmful (in Ada)
- Backus on designing Fortran
- The utility of sets (in Pascal)
- The programmers biggest obstacle: time management
- Re-engineering versus Refactoring
- Dijkstra on Ada
- Do kids really need to code?
- The evolution of programming languages
- Fixing the “dangling else”
- Best introductory languages?
- Why you don’t need dynamic arrays in Fortran
- Tower of Babel
- Playing with arrays in Fortran (Part 2)
- Playing with arrays in Fortran (Part 1)
- The evolution of arrays in Fortran
- History of languages: disco days
- An example of why goto is horrible
- Banishment of goto
- Quote from Niklaus Wirth
- History of languages: automatic programming
- History of languages: bohemian times
- I code, therefore I am.
- Predicting the future… in the 1950s
- Computer science and AI – Stop the madness
- History of languages: the freewheeling fifties
2015 78
- Want to learn about legacy programming languages and re-engineering?
- Programming moisture vaporators
- Star Wars and Valerian
- The heap – malloc() and free()
- Memory and C – how the stack works
- Memory in C – stack versus heap
- Memory in C – the stack, the heap, and static
- How to store large images in C without pointers
- How to store large data in C?
- Why does int = long in C?
- My kingdom for a stack.
- And last but not least – arrays of structs.
- What is a typedef?
- What about nested structs?
- structs and functions
- Simple structs in C
- Algol compiler with some interesting feedback
- Dijkstra on APL
- Sally sells C strings by the C shore
- AI in Sci-Fi robots
- The Life of Variables.
- Reeds
- Why numbers don’t add up
- Computer science education should come out of the dark ages
- Why floating-point numbers aren’t really real
- What is dead code?
- DON’T fix what isn’t broken
- Clang – YIKES – a C compiler with user-friendly error messages!
- Zen-like algorithms
- Simple things
- The computers of Star Trek
- Read some code today
- Artificial intelligence ??
- Hindsight
- The potential for AI, or building a brain
- The user interfaces of Star Trek – LCARS
- The = and == conundrum
- Ingenuity of …
- The computers of Star Wars
- Why “smart” homes may not be the best idea.
- Deleted files on Unix or “Speaking with the undead”
- Why user interfaces in space should be simple
- Debunking TV technology: Deblurring and enhancing photographs
- Logging on to a Raspberry pi remotely
- The wildcards in Unix
- Overflows in space
- Changing file permissions in Unix
- Basic file permissions in Unix
- Killing programs softly
- The software on Apollo missions
- Hackable cars are a reality
- Who wrote the software for Apollo 11?
- What about Swift?
- C++ as an introductory programming language?
- Organic software design
- The most evil programming language
- Internet of things? It’s probably foolhardy.
- Psst… got an a.out problem?
- Debunking TV technology
- Programming is… not magic
- How jovial is Jovial?
- Forgotten algorithms: Euclidean Algorithm
- Unmastered complexity
- Languages for image processing
- Why technology isn’t always better
- Image processing – contrasting things
- First programming language – multiple languages anyone?
- See recursion
- Why Cobol is feared.
- Don’t underestimate the power of the Forth
- History of languages – it starts with Fortran
- The first programming languages (aka compilers)
- Programming in PL/I
- May the Forth be with you
- Lego and imagination
- Quote of the day
- Pointers in Fortran (Part 2) – arrays
- Pointers in Fortran (Part 1) – the basics
2014 32
- Recommended reads – the writings of Jon Bentley
- First programming language – industrial vs academic
- When the Pi kills your program.
- Cobol – the elephant in the room
- FORTRAN is dead! Long live Fortran.
- The stack versus the heap
- One language to rule them all.
- C obscenities – weird array notation
- Why global variables are considered harmful.
- Code Tricks: Swapping values without a third variable
- Weird memory problems in C – or – “how to smash the stack”.
- Quad precision in C – make it a double double!
- C and core dumps.
- Infinite recursion and the stack
- History of Computing 101: Preparing a program… 60 years ago
- Why C is NOT a memory safe language.
- It’s a trap! – Inputting sentences in C programs
- Code Tricks: Strings of words with scanf
- Code Tricks: The * I/O modifier
- Code Tricks: Printing fancy characters in C
- The best language for a novice to learn programming?
- Software complexity and bugs in the code.
- Dijkstra’s musings on programming languages
- Quote on programming
- Using the Raspberry Pi in introductory programming
- Optimization in real-world apps
- Computer Science presentations for schools
- Dijkstra on Ada
- The training of programmers
- Computer science and the age of the app
- Computer science skills
- The history of computing
2013 31
- 2D array subscripts in Python
- Image processing in Python – code efficiency
- Does haze suppression really work?
- In Python loops can be lethal
- Why IDEs lead you to the dark side.
- Why comments are important.
- Billy bookcase + books = sag
- Crashing an in-flight entertainment system
- Why image processing can be perplexing.
- Origami and algorithms
- What is spaghetti code?
- iPhone 5s fingerprint reader hacked!
- Software and redundancy
- Why some testing is impossible
- The art of crowdsource-testing
- Is programming a craft?
- Debunking TV technology: Reflections in drinking glasses
- Why facial recognition shouldn’t scare you.
- Finding faces in a crowd: Debunking a TV myth
- Why internet searching is more like rummaging
- Software bloat
- Using Moore’s Law to solve program inefficiencies
- Does the number of pixels matter?
- Why building a better iPhone is challenging
- Why COBOL doesn’t cripple the mind
- Computer science is about knowing how to program
- Hoare on constructing software
- Kernighan & Plauger on software
- Memories of C
- Variable name mnemonics
- Dijkstra on testing