Saturday 24 September 2022

Ifá - A Computer Programmer’s Perspective

For some of us who earn our daily bread from programming computers (I have been doing this for over 2 decades), making the connection between Ifá binary notation and programming is a no brainer.

We programmers write codes/instructions (incantations) on the cpu - made from silicon (sand) to carry out our desires.

The parallel between a Babaláwo and a computer programmer is striking. We write on sand (silicon/cpu), a Babalawo writes on Iyerosun (camwood powder). We chant/write binary codes, a Babaláwo recites Odù Ifá!

In essence, a computer code is àfọ̀ṣẹ par excellence! In Yoruba, àfọ̀ṣẹ means “oun tí a fọ̀ tí ó sì ṣẹ” - something commanded to happen.

Our incantations (computer codes) can animate the entities in the cpu (sand) and make them become whatever we want: a game console, a financial trading system, an air traffic controller, facebook, Google, Twitter, Amazon, Bitcoin etc.

How did this come about? Well, the Binary System makes this possible.

The Binary System of Ifá is based on the Yorùbá philosophical duality of Ibi and Ire (Evil and Good); for several millennia, the Yorùbá had been using the binary system before the German mathematician - Gottfried Leibniz formalised in 1679.

These days, the Binary Numeral System (Base 2) is well known in Mathematics and digital electronics and the system underpins how computers work by representing numeric values using just two digits - zero (0) and one (1)

In Computing, a Bit (i.e. BInary digiT) is the smallest unit of storage and can either be 1 or 0

A Nible (also called half Byte or semi-octet) is the grouping of four Bits e.g 0 1 0 1

In Ifá, Odù signatures are marked with “|” and “||”. Where “|” is the binary number “0” and “||” is “1”.

For example Ogbè (0000) has the following signature:

|

|

|

|

Ọ̀sá (1000) is represented as:

||

|

|

|

Òtúrá (0100) is marked as:

|

||

|

|

We can therefore summarise the representation of the first sixteen Odus as follows:

Decimal == Nibble == Odù

00 == 0000 == Ogbè 

01 == 0001 == Ògúndá

02 == 0010 == Ìrẹtẹ̀

03 == 0011 == Ìrosùn

04 == 0100 == Òtúra

05 == 0101 == Ọ̀sẹ́ 

06 == 0110 == Èdí

07 == 0111 == Ọ̀bàrà 

08 == 1000 == Ọ̀sá 

09 == 1001 == Ìwòrì 

10 == 1010 == Ọ̀̀fún 

11 == 1011 == Ìká 

12 == 1100 == Ọ̀wọ́nrín 

13 == 1101 == Òtúrúpọ̀n

14 == 1110 == Ọ̀kànràn 

15 == 1111 == Òyẹ̀kú.

Since Ifá speaks only in binary (Odu Èjì Ogbè says: "Èjèèji ni mo gbè, n ò gbe ọ̀kan ṣoṣo mọ́" i.e “I will only support two, I will not support one”), each Odu must be paired.

For example, after pairing the main Odu, we get the following (see graphic for the main Odu signature).

Èjì Ogbè (also called Ògbè Méjì): 00000000

Ògúndá Méjì : 00010001

Ìrẹtẹ̀ Méjì : 00100010

Ìrosùn Méjì : 00110011

Òtúrá Méjì : 01000100

Ọ̀sẹ́ Méjì : 01010101

Èdí Méjì : 01100110

Ọ̀bàrà Méjì : 01110111

Ọ̀ṣá Meji: 10001000

Ìwòrì Méjì : 10011001

Ọ̀fún Méjì : 10101010

Ìká Méjì :10111011

Ọ̀wọ́nrín Méjì :11001100

Òtúrúpọ̀n Méjì :11011101

Ọ̀kànràn Méjì :11101110

Ọ̀yẹ̀kú Méjì : 11111111

The other 240 minor Odus are derived from the main 16 Odus. 

For example (note: the binary notation and the marks are read from right to left).

Ogbè-Ògúndá : 0001-0000

| |

| |

| |

|| |

Ọ̀yẹ̀kú-Ìrẹtẹ̀ : 0010-1111

| ||

| ||

|| ||

| ||

Computers also speak in binary and binary numbers can be converted to decimal, hexadecimal, octal etc.

Without getting into too much maths, below are the decimal values of the 16 main Odu:

00000000 = 00

00010001 = 17

00100010 = 34

00110011 = 51

01000100 = 68

01010101 = 85

01100110 = 102

01110111 = 119

10001000 = 136

10011001 = 153

10101010 = 170

10111011 = 187

11001100 = 204

11011101 = 221

11101110 = 238

11111111 = 255

Below is a computer machine code that adds the numbers from 1 to 10 together and prints out the result:

i.e. 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

0 0 1 1 0 0 0 1  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0

0 0 1 1 0 0 0 1  0 0 0 0 0 0 0 1  0 0 0 0 0 0 0 1

0 0 1 1 0 0 1 1  0 0 0 0 0 0 0 1  0 0 0 0 0 0 1 0

0 1 0 1 0 0 0 1  0 0 0 0 1 0 1 1  0 0 0 0 0 0 1 0

0 0 1 0 0 0 1 0  0 0 0 0 0 0 1 0  0 0 0 0 1 0 0 0

0 1 0 0 0 0 1 1  0 0 0 0 0 0 0 1  0 0 0 0 0 0 0 0

0 1 0 0 0 0 0 1  0 0 0 0 0 0 0 1  0 0 0 0 0 0 0 1

0 0 0 1 0 0 0 0  0 0 0 0 0 0 1 0  0 0 0 0 0 0 0 0

0 1 1 0 0 0 1 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0

In Ifa, the patterns of bits above translate to...

ọ̀wọ́nrín-ọ̀sá     èjì-ogbè               èjì-ogbè

ọ̀wọ́nrín-ọ̀sá     ogbè-ọ̀sá            ogbè-ọ̀sá

ọ̀wọ́nrín-méjì    ogbè-ọ̀sá            ogbè-ọtúrá

ọ̀fùn-ọ̀sá           ogbè-òtúrùpọ̀n   ogbè-ọtúrá

ọtúrá-méjì         ogbe-ọtúrá          ogbè-ògúndá

ìrẹtẹ̀-ọ̀wọ́nrín   ogbè-ọ̀sá             èjì-ogbè

ìrẹtẹ̀-ọ̀sá           ogbè-ọ̀sá             ogbè-ọ̀sá

ọ̀sá-ogbè          ogbè-ọtúrá          èjì-ogbè

èdì-ọtúrá           èjì-ogbè               èjì-ogbè

This was how programmers used to write computer programs before high level programming languages like Fortran and Lisp were created in 1957 and 1958 respectively.

For programmers, entering these patterns manually was a laborious, tedious and error-prone task. Even for a seasoned programmer, it could get dizzy and nauseating after assembling a couple of these patterns.

However, a competent Ifá priest can commit to memory 256 of these patterns without breaking a sweat and able to recite close to 4,000 Ifá verses by heart!

Effectively, the meaning of the 1s and 0s in the code above is as follows:

1. Store the number 0 in memory location 0.

2. Store the number 1 in memory location 1.

3. Store the value of memory location 1 in  memory location 2.

4. Subtract the number 11 from the value in memory location 2.

5. If the value in memory location 2 is the number 0 continue with instruction 9.

6. Add the value of memory location 1 to memory location 0.

7. Add the number 1 to the value of memory location 1.

8. Continue with instruction 3.

9. Output the value of memory location 0.

Using names in place of numbers for memory and instruction locations, we can do the following:

Set the value of "total" to 0.

Set the value of "count" to 1.

[loop]

Set the value of "compare" to the "count" value.

Subtract 11 from the value of "compare" .

If "compare" is zero, continue at [end].

Add "count" to the value of "total".

Add 1 to the value of "count".

Continue at [loop].

[end]

Output "total".

In a modern programming language like Python, we can write the following:

total = 0

count = 1

while count <= 10:

total = total + count

count = count + 1

print total

In 2017, I wrote series of programming tutorials on this wall using the Python programming language. In the coming days, I will translate the posts into Yoruba so stay tuned.

Ire o.

1 comment:

Related Posts Plugin for WordPress, Blogger...