Why are variables "i" and "j" used for counters?

VariablesLanguage Agnostic

Variables Problem Overview


I know this might seem like an absolutely silly question to ask, yet I am too curious not to ask...

Why did "i" and "j" become THE variables to use as counters in most control structures?

Although common sense tells me they are just like X, which is used for representing unknown values, I can't help to think that there must be a reason why everyone gets taught the same way over and over again.

Is it because it is actually recommended for best practices, or a convention, or does it have some obscure reason behind it?

Just in case, I know I can give them whatever name I want and that variables names are not relevant.

Variables Solutions


Solution 1 - Variables

It comes ultimately from mathematics: the summation notation traditionally uses i for the first index, j for the second, and so on. Example (from http://en.wikipedia.org/wiki/Summation):

> \sum_{i=1}^{n} i = \frac{n^2 + n}{2}

It's also used that way for collections of things, like if you have a bunch of variables x1, x2, ... xn, then an arbitrary one will be known as xi.

As for why it's that way, I imagine SLaks is correct and it's because I is the first letter in Index.

Solution 2 - Variables

I believe it dates back to Fortran. Variables starting with I through Q were integer by default, the others were real. This meant that I was the first integer variable, and J the second, etc., so they fell towards use in loops.

Solution 3 - Variables

Mathematicians were using i,j,k to designate integers in algebra (subscripts, series, summations etc) long before (e.g 1836 or 1816) computers were around (this is the origin of the FORTRAN variable type defaults). The habit of using letters from the end of the alphabet (...,x,y,z) for unknown variables and from the beginning (a,b,c...) for constants is generally attributed to Rene Descartes, (see also here) so I assume i,j,k...n (in the middle of the alphabet) for integers is likely due to him too.

Solution 4 - Variables

i = integer

Comes from Fortran where integer variables had to start with the letters I through N and real variables started with the other letters. Thus I was the first and shortest integer variable name. Fortran was one of the earliest programming languages in widespread use and the habits developed by programmers using it carried over to other languages.

EDIT: I have no problem with the answer that it derives from mathematics. Undoubtedly that is where the Fortran designers got their inspiration. The fact is, for me anyway, when I started to program in Fortran we used I, J, K, ... for loop counters because they were short and the first legally allowed variable names for integers. As a sophomore in H.S. I had probably heard of Descartes (and a very few others), but made very little connection to mathematics when programming. In fact, the first course I took was called "Fortran for Business" and was taught not by the math faculty, but the business/econ faculty.

For me, at least, the naming of variables had little to do with mathematics, but everything due to the habits I picked up writing Fortran code that I carried into other languages.

Solution 5 - Variables

i stands for Index.
j comes after i.

Solution 6 - Variables

These symbols were used as matrix indexes in mathematics long before electronic computers were invented.

Solution 7 - Variables

I think it's most likely derived from index (in the mathematical sense) - it's used commonly as an index in sums or other set-based operations, and most likely has been used that way since before there were programming languages.

Solution 8 - Variables

There's a preference in maths for using consecutive letters in the alphabet for "anonymous" variables used in a similar way. Hence, not just "i, j, k", but also "f, g, h", "p, q, r", "x, y, z" (rarely with "u, v, w" prepended), and "α, β, γ".

Now "f, g, h" and "x, y, z" are not used freely: the former is for functions, the latter for dimensions. "p, q, r" are also often used for functions.

Then there are other constraints on available sequences: "l" and "o" are avoided, because they look too much like "1" and "0" in many fonts. "t" is often used for time, "d & δ" for differentials, and "a, s, m, v" for the physical measures of acceleration, displacement, mass, and velocity. That leaves not so many gaps of three consecutive letters without unwanted associations in mathematics for indices.

Then, as several others have noticed, conventions from mathematics had a strong influence on early programming conventions, and "α, β, γ" weren't available in many early character sets.

Solution 9 - Variables

I found another possible answer that could be that i, j, and k come from Hamilton's Quaternions.

alt text

Euler picked i for the imaginary unit.

Hamilton needed two more square roots of -1: ii = jj = kk = ijk = -1

Hamilton was really influential, and quaternions were the standard way to do 3D analysis before 1900. By then, mathematicians were used to thinking of (ijk) as a matched set. Vector calculus replaced quaternionic analysis in the 1890s because it was a better way to write Maxwell's equations. But people tended to write vector quantities as like this: (3i-2j+k) instead of (3,-2,1). So (ijk) became the standard basis vectors in R^3.

Finally, physicists started using group theory to describe symmetries in systems of differential equations. So (ijk) started to connote "vectors that get swapped around by permutation groups," then drifted towards "index-like things that take on all possible values in some specified set," which is basically what they mean in a for loop.

Solution 10 - Variables

by discarding (a little biased)

a seems an array
b seems another array 
c seems a language name
d seems another language name
e seems exception
f looks bad in combination with "for" (for f, a pickup?)
g seems g force
h seems height

i seems an index                    
j seems i (another index)

k seems a constant k
l seems a number one (1) 
m seems a matrix
n seems a node
o seems an output
p sounds like a pointer
q seems a queue
r seems a return value
s seems a string
t looks like time
u reserved for UVW mapping or electic phase 
v reserved for UVW mapping or electic phase or a vector
w reserved for UVW mapping or electic phase or a weight
x seems an axis (or an unknown variable)
y seems an axis
z seems a third axis

Solution 11 - Variables

One sunny afternoon, Archimedes what pondering (as was usual for sunny afternoons) and ran into his buddy Eratosthenes.

Archimedes said, "Archimedes to Eratosthenes greeting! I'm trying to come up with a solution to the ratio of several spherical rigid bodies in equilibrium. I wish to iterate over these bodies multiple times, but I'm having a frightful time keeping track of how many iterations I've done!"

Eratosthenes said, "Why Archimedes, you ripe plum of a kidder, you could merely mark successive rows of lines in the sand, each keeping track of the number of iterations you've done within iteration!"

Archimedes cried out to the world that his great friend was undeniably a shining beacon of intelligence for coming up with such a simple solution. But Archimedes remarked that he likes to walk in circles around his sand pit while he ponders. Thus, there was risk of losing track of which row was on top, and which was on bottom.

"Perhaps I should mark these rows with a letter of the alphabet just off to the side so that I will always know which row is which! What think you of that?" he asked, then added, "But Eratosthenes... whatever letters shall I use?"

Eratosthenes was sure he didn't know which letters would be best, and said as much to Archimedes. But Archimedes was unsatisfied and continued to prod the poor librarian to choose, at least, the two letters that he would require for his current sphere equilibrium solution.

Eratosthenes, finally tired of the incessant request for two letters, yelled, "I JUST DON'T KNOW!!!"

So Archimedes chose the first two letters in Eratosthenes' exclamatory sentence, and thanked his friend for the contribution.


These symbols were quickly adopted by ancient Greek Java developers, and the rest is, well... history.

Solution 12 - Variables

i think it's because a lot of loops use an Int type variable to do the counting, like

for (int i = 0; etc

and when you type, you actually speak it out in your head (like when you read), so in your mind, you say 'int....'

and when you have to make up a letter right after that 'int....' , you say / type the 'i' because that is the first letter you think of when you've just said 'int'

like you spell a word to kids who start learning reading you spell words for them by using names, like this:

WORD spells William W, Ok O, Ruby R, Done D

So you say Int I, Double d, Float f, string s etc. based on the first letter.

And j is used because when you have done int I, J follows right after it.

Solution 13 - Variables

I think it's a combination of the other mentioned reasons :

For starters, 'i' was commonly used by mathematicians in their notation, and in the early days of computing with languages that weren't binary (ie had to be parsed and lexed in some fashion), the vast majority of users of computers were also mathematicians (... and scientists and engineers) so the notation fell into use in computer languages for programming loops, and has kind of just stuck around ever since.

Combine this with the fact that screen space in those very early days was very limited, as was memory, it made sense to keep shorter variable names.

Solution 14 - Variables

Possibly historical ?

FORTRAN, aurguably the first high level language, defined i,j,k,l,m as Integer datatypes by default, and loops could only be controlled by integer variable, the convention continues ?

eg:

do 100 i= j,100,5 .... 100 continue ....

Solution 15 - Variables

i = iterator, i = index, i = integer

Which ever you figure "i" stands for it still "fits the bill".

Also, unless you have only a single line of code within that loop, you should probably be naming the iterator/index/integer variable to something more meaningful. Like: employeeIndex

BTW, I usually use "i" in my simple iterator loops; unless of course it contains multiple lines of code.

Solution 16 - Variables

i = iota, j = jot; both small changes.

iota is the smallest letter in the greek alphabet; in the English language it's meaning is linked to small changes, as in "not one iota" (from a phrase in the New Testament: "until heaven and earth pass away, not an iota, not a dot, will pass from the Law" (Mt 5:18)).

A counter represents a small change in a value.

And from iota comes jot (iot), which is also a synonym for a small change.

cf. http://en.wikipedia.org/wiki/Iota

Solution 17 - Variables

Well from Mathematics: (for latin letters)

a,b: used as constants or as integers for a rational number
c: a constant
d: derivative
e: Euler's number
f,g,h: functions
i,j,k: are indexes (also unit vectors and the quaternions)
l: generally not used. looks like 1
m,n: are rows and columns of matrices or as integers for rational numbers
o: also not used (unless you're in little o notation)
p,q: often used as primes
r: sometimes a spatial change of variable other times related to prime numbers
s,t: spatial and temporal variables or s is used as a change of variable for t
u,v,w: change of variable
x,y,z: variables

Solution 18 - Variables

Many possible main reasons, I guess:

  • mathematicians use i and j for Natural Numbers in formulas (the ones that use Complex Numbers rarely, at least), so this carried over to programming
  • from C, i hints to int. And if you need another int then i2 is just way too long, so you decide to use j.
  • there are languages where the first letter decides the type, and i is then an integer.

Solution 19 - Variables

It comes from Fortran, where i,j,k,l,m,n are implicitly integers.

Solution 20 - Variables

It definitely comes from mathematics, which long preceded computer programming.

So, where did if come from in math? My completely uneducated guess is that it's as one fellow said, mathematicians like to use alphabetic clusters for similar things -- f, g, h for functions; x, y, z for numeric variables; p, q, r for logical variables; u, v, w for other sets of variables, especially in calculus; a, b, c for a lot of things. i, j, k comes in handy for iterative variables, and that about exhausts the possibilities. Why not m, n? Well, they are used for integers, but more often the end points of iterations rather than the iterative variables themselves.

Someone should ask a historian of mathematics.

Solution 21 - Variables

Counters are so common in programs, and in the early days of computing, everything was at a premium...
Programmers naturally tried to conserve pixels, and the 'i' required fewer pixels than any other letter to represent. (Mathematicians, being lazy, picked it for the same reason - as the smallest glyph).
As stated previously, 'j' just naturally followed...

:)

Solution 22 - Variables

I use it for a number of reasons.

  • Usually my loops are int based, so you make a complete triangle on the keyboard typing "int i" with the exception of the space I handle with my thumb. This is a very fast sequence to type.

  • The "i" could stand for iterator, integer, increment, or index, each of which makes logical sense.

With my personal uses set aside, the theory of it being derived from FORTRAN is correct, where integer vars used letters I - N.

Solution 23 - Variables

I learned FORTRAN on a Control Data Corp. 3100 in 1965. Variables starting with 'I' through 'N' were implied to be integers. Ex: 'IGGY' and 'NORB' were integers, 'XMAX' and 'ALPHA' were floating-point. However, you could override this through explicit declaration.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCarlosView Question on Stackoverflow
Solution 1 - VariableszwolView Answer on Stackoverflow
Solution 2 - VariablesIgnacio Vazquez-AbramsView Answer on Stackoverflow
Solution 3 - VariablestimdayView Answer on Stackoverflow
Solution 4 - VariablestvanfossonView Answer on Stackoverflow
Solution 5 - VariablesSLaksView Answer on Stackoverflow
Solution 6 - VariablesericksonView Answer on Stackoverflow
Solution 7 - VariablesMichael BorgwardtView Answer on Stackoverflow
Solution 8 - VariablesCharles StewartView Answer on Stackoverflow
Solution 9 - VariablesCarlosView Answer on Stackoverflow
Solution 10 - VariablesHernán EcheView Answer on Stackoverflow
Solution 11 - VariablesBrendanView Answer on Stackoverflow
Solution 12 - VariablesMichelView Answer on Stackoverflow
Solution 13 - VariablesAlex MarshallView Answer on Stackoverflow
Solution 14 - Variablesbrett View Answer on Stackoverflow
Solution 15 - VariablesChris PietschmannView Answer on Stackoverflow
Solution 16 - VariablesStephenView Answer on Stackoverflow
Solution 17 - VariablesMaDMaD MadView Answer on Stackoverflow
Solution 18 - VariablestowiView Answer on Stackoverflow
Solution 19 - VariablesWalter BrightView Answer on Stackoverflow
Solution 20 - VariablesDavid LewisView Answer on Stackoverflow
Solution 21 - VariablesGerratView Answer on Stackoverflow
Solution 22 - VariablesJohn TView Answer on Stackoverflow
Solution 23 - VariablesPierreView Answer on Stackoverflow