# Kɔmputa so dwumadi ahorow (Computer programming)

C programming language**Kɔmputa so dwumadi ahorow (Computer programming)** yɛ ɔkwan a wɔfa so yɛ akontaabu pɔtee bi (anaasɛ wɔ ɔkwan a ɛkɔ akyiri so no, wɔyɛ kɔmputa so aba pɔtee bi), mpɛn pii no denam kɔmputa so dwumadi ahorow a wotumi di ho nhyehyɛe na wɔyɛ so. Dwumadie fa nnwuma te sɛ nhwehwɛmu, algorithms a wɔyɛ, profiling algorithms’ pɛpɛɛpɛyɛ ne nneɛma a wɔde di dwuma, ne algorithms a wɔde di dwuma (mpɛn pii no wɔ programming kasa pɔtee bi mu, a wɔtaa frɛ no coding). Wɔkyerɛw dwumadi bi Fibea koodu (source code) wɔ kasa biako anaa nea ɛboro saa a nhyehyɛefo a wɔyɛ nhyehyɛe anaa dwumadifo (programmers) te ase mu, sen sɛ wɔbɛkyerɛw mfiri code a central processing unit no na ɛyɛ tẽẽ. Dwumadi nhyehyɛe atirimpɔw ne sɛ wobenya akwankyerɛ ahorow a ɛtoatoa so a ɛbɛma adwuma bi (a ebetumi ayɛ den te sɛ operating system ) ayɛ adwuma wɔ kɔmputa so, a mpɛn pii no wɔde bedi ɔhaw bi ho dwuma. Enti nhyehyɛe a wɔyɛ no yiye taa hwehwɛ sɛ wonya nimdeɛ wɔ nsɛmti ahorow pii mu, a nea ɛka ho ne nimdeɛ a ɛfa dwumadi no mu (application domain) ho, algorithms titiriw, ne ntease a wɔde di dwuma wɔ ɔkwan a ɛfata so (formal logic).

Nnwuma a ɛka nhyehyɛe ho na ɛfa ho no bi ne sɔhwɛ, debugging, source code a wɔhwɛ so, build systems a wɔde bedi dwuma, ne nneɛma a wonya fi mu a wɔhwɛ so, te sɛ kɔmputa so dwumadi ahorow mfiri code. Nanso, bere a wobetumi abu eyinom sɛ ɛyɛ nhyehyɛe nhyehyɛe no fa no, mpɛn pii no, wɔtaa de asɛmfua softwea nkɔso di dwuma kɛse ma nhyehyɛe kɛse yi nyinaa – bere a nsɛmfua *nhyehyɛe*, *dwumadie*, ne *mmarahyɛ* taa twe adwene si mmara a wɔkyerɛw ankasa so. Nea ɛne eyi hyia no, softwea mfiridwuma de mfiridwuma ho akwan ne nnyinasosɛm ahorow bom ne softwea a wɔyɛ. Afei nso, ɛtɔ mmere bi a wɔn a wɔde wɔn ho hyɛ softwea a wɔyɛ mu no betumi de wɔn ho ahyɛ *reverse engineering*, a ɛyɛ adeyɛ a ɛne sɛ wɔbɛhwehwɛ sɛ wɔbɛte dwumadi bi a ɛwɔ hɔ dedaw ase sɛnea ɛbɛyɛ a wɔbɛsan de ne dwumadi adi dwuma wɔ ɔkwan bi so no mu.

## Abakɔsɛm

Ada Lovelace, a ne nsɛm a ɔkyerɛwee de kaa Luigi Menabrea krataa no awiei ho no, nea ɛka ho ne algorithm a edi kan a wɔayɛ sɛ wɔde bɛyɛ adwuma denam Analytical Engine so. Wɔtaa gye tom sɛ ɔyɛ obi a odi kan a ɔyɛ kɔmputa so dwumadi wɔ abakɔsɛm mu.
Mfiri a wotumi yɛ ho nhyehyɛe wɔ hɔ mfehaha pii. Wɔ afeha a ɛto so 9 mu tɔnn no, Persiafo Banu Musa anuanom na wɔyɛɛ nnwom a wɔde di dwuma nhyehyɛe a wotumi yɛ ho nhyehyɛe, na wɔkaa mfiri a wɔde bɔ sanku a wɔde yɛ adwuma ho asɛm wɔ *Book of Ingenious Devices*. Wɔ 1206 mu no, Arab mfiridwumayɛfo Al-Jazari yɛɛ afiri a wɔde bɔ sanku a wotumi yɛ ho nhyehyɛe a wobetumi ayɛ mfiri a wɔde bɔ nnwom a wɔde bɔ nnwom a ɛyɛ dɛ ne sanku nhyehyɛe ahorow, denam pegs ne cams so. Wɔ afe 1801 mu no, Jacquard loom no tumi yɛɛ nwene soronko koraa denam "program" no a wɔbɛsesa so – pasteboard card ahorow a ɛtoatoa so a wɔabɔ ntokuru wɔ mu.

Nhyehyɛe ahorow a wɔde brɛki koodu nso awɔ hɔ mfehaha pii. Wɔ afeha a ɛto so 9 mu no, Arabni akontaabufo Al-Kindi kaa ɔkwan bi a wɔfa so kyerɛw nsɛm a wɔde asie a wɔde kyerɛkyerɛ mmara a wɔabɔ no kokoam mu ho asɛm, wɔ *A Manuscript on Deciphering Cryptographic Messages.* *Ɔde nkyerɛkyerɛmu a edi kan mae wɔ cryptanalysis by frequency analysis, algorithm a edi kan a ebrɛki koodu so.*

Mpɛn pii no, wɔkyerɛ sɛ kɔmputa so dwumadi a edi kan no wɔyɛɛ no 1843 mu, bere a akontaabufo Ada Lovelace tintim nhyehyɛe bi a wɔde bu Bernoulli akontaahyɛde ahorow a ɛtoatoa so, a na wɔahyɛ da ayɛ sɛ Charles Babbage ne Analytical Engine na ɛbɛyɛ no. Nanso, na Charles Babbage akyerɛw ne dwumadi a edi kan ama Analytical Engine no dedaw wɔ 1837.

Bere bi na wɔde nsɛm ne akwankyerɛ ahorow sie abɔnten so kaad a wɔabɔ no akuturuku so, na na wɔma ɛyɛ pɛpɛɛpɛ na wɔhyehyɛ no wɔ program deck ahorow mu.
Wɔ 1880 mfe no mu no, Herman Hollerith de adwene a ɛne sɛ wɔbɛkora nsɛm so wɔ ɔkwan a mfiri betumi akenkan so bae. Akyiri yi control panel (plug board) a wɔde kaa ne 1906 Type I Tabulator ho maa kwan ma wɔ hyehyɛ maa nnwuma ahorow, na ebeduu 1940 mfe no awiei no, wɔde unit record mfiri te sɛ IBM 602 ne IBM 604 yɛɛ nhyehyɛe denam control panels a ɛte saa ara kwan so, sɛnea na ɛlɛtrɔnik kɔmputa ahorow a edi kan no te no. Nanso, bere a wɔde adwene a ɛne sɛ wɔde kɔmputa a wɔde nneɛma akora so no bɛba wɔ 1949 mu no, wɔde nhyehyɛe ne nsɛm nyinaa siee na wɔyɛɛ ho adwuma wɔ ɔkwan koro no ara so wɔ kɔmputa so nkae mu (computer memory).

### Mfiri kasa

Na mfiri koodu yɛ kasa a wɔde kyerɛw nhyehyɛe ahorow a edi kan no, na wɔkyerɛw no wɔ mfiri pɔtee no akwankyerɛ nhyehyɛe mu, na mpɛn pii no wɔde nkyerɛwde abien na ɛkyerɛw. Ankyɛ na wɔyɛɛ assembly kasa ahorow a ɛma Nnhyehyɛefoɔ (programmer) no kyerɛ akwankyerɛ wɔ nsɛm a wɔakyerɛw no kwan so (text format) mu (sɛ nhwɛso no, ADD X, TOTAL), a wɔde tiawa ma adwumayɛ koodu biara ne din ahorow a ntease wom a wɔde bɛkyerɛ address ahorow. Nanso esiane sɛ assembly kasa yɛ kakraa bi sen nkyerɛwde soronko ma mfiri kasa nti, mfiri abien a ɛsono akwankyerɛ ahorow nso wɔ assembly kasa ahorow.

### Kɔmpaela kasa ahorow

Kasa ahorow a ɛkorɔn maa ɔkwan a wɔfa so yɛ dwumadi bi no yɛɛ mmerɛw na ntease wom, na na wonhia hardware a ɛwɔ ase no kɛse . Adwinnade a edi kan a ɛfa kɔmpaela ho, A-0 System, no, Grace Hopper, a ɔno nso hyehyɛɛ asɛmfua ‘compiler’ na ɔyɛɛ no afe 1952 mu. FORTRAN, kasa a ɛdi kan a wɔde di dwuma kɛseɛ a ɛwɔ dwumadie a ɛyɛ adwuma, puei wɔ afe 1957 mu, na ankyɛ na wɔyɛɛ kasa foforɔ pii —titiriw no, COBOL a na wɔde asi wɔn ani so sɛ wɔbɛyɛ nsɛm ho dwumadie wɔ aguadi mu, ne Lisp a wɔde yɛ kɔmputa nhwehwɛmu.

Saa kasa ahorow a wɔaboaboa ano yi ma nhyehyɛeyɛfo no tumi kyerɛw nhyehyɛe ahorow wɔ nsɛmfua a ɛyɛ den wɔ kasamufa mu, na otumi yi mmara no mu nsɛm pii, na ɛma ɛyɛ mmerɛw sɛ ɔde n’ani besi mfiri akwankyerɛ ahorow a ɛsonosonoe so denam mpaemuka a wɔaboaboa ano ne heuristics so. Wɔn a wɔboaboa nneɛma ano de kɔmputa tumi dii dwuma de maa nhyehyɛe yɛɛ mmerɛw denam ma a wɔmaa nhyehyɛeyɛfo kwan ma wɔkyerɛɛ akontaabu denam fomula bi a wɔde infix nkyerɛwde bɛhyɛ mu no so.

## Nhyehyeɛ Dwumadi kasa ahorow

Dwumadie kasa ahodoɔ boa dwumadie ahodoɔ (a wɔfrɛ no *programming paradigms*). Kasa a wɔde bedi dwuma no gyina nneɛma pii a ɛsɛ sɛ wosusuw ho, te sɛ adwumakuw no nhyehyɛe, sɛnea ɛfata sɛ wɔyɛ adwuma, sɛnea nnipa foforo package ahorow wɔ hɔ, anaa ankorankoro pɛ. Sɛnea ɛbɛyɛ yiye no, wɔbɛpaw programming kasa a ɛfata yiye ma adwuma a ɛwɔ hɔ no. Nneɛma a wɔde di gua fi saa adwene yi mu ne sɛ wobenya nhyehyɛeyɛfo a wɔdɔɔso a wonim kasa no a wɔde bɛkyekye kuw, sɛnea wɔbɛboaboa nneɛma ano ama saa kasa no, ne sɛnea dwumadi ahorow a wɔakyerɛw wɔ kasa bi mu no yɛ adwuma yiye.

Kasa ahorow a efi ase fi "nea ɛba fam" kosi "nea ɛkorɔn"; "low-level" kasa ahorow no taa yɛ nea ɛfa mfiri ho kɛse na ɛyɛ ntɛm sɛ wɔde di dwuma, bere a "high-level" kasa ahorow no ɛnyɛ den sɛ wɔde bedi dwuma nanso ɛnyɛ ntɛmntɛm. Mpɛn pii no ɛyɛ mmerɛw sɛ wobɛkyerɛw mmara wɔ "nea ɛkorɔn" kasa ahorow mu sen "nea ɛba fam" de. Nhyehyeɛ Dwumadi kasa ahorow ho hia ma sɔftwɛɛ nkɔso. Wɔn ne nneɛma a wɔde si sɔftwɛɛ nyinaa, efi aapɔ ahorow a ɛnyɛ den so kosi nea ɛyɛ nwonwa sen biara so.

Allen Downey, kyerɛw wɔ ne nhoma *How To Think Like A Computer Scientist* mu sɛ:

Ɛsono sɛnea nsɛm no mu nsɛm no te wɔ kasa ahorow mu, nanso ɛkame ayɛ sɛ akwankyerɛ atitiriw kakraa bi pue wɔ kasa biara mu:

* nea wɔde hyɛm: Boaboa data ano fi keyboard, fael, anaa mfiri foforo bi so.
* nea wɔde ba: Kyerɛ data wɔ screen no so anaasɛ fa data kɔ fael anaa mfiri foforo bi so.
* Nkontaabu: Yɛ akontabuo mfitiaseɛ dwumadie te sɛ nkabom ne dodoɔ.
* Tebea a Wɔde da no adi: Hwɛ sɛ tebea horow bi wɔ hɔ na di nsɛm a wɔahyehyɛ no nnidiso nnidiso a ɛfata.
* Mpɛn pii: Yɛ adeyɛ bi mpɛn pii, mpɛn pii no, wosakra no bi.

Kɔmputa kasa pii ma wonya ɔkwan bi a wɔfa so frɛ dwumadi ahorow a nhomakorabea ahorow a wɔkyɛ de ma no. Sɛ dwumadie a ɛwɔ nwomakorabea bi di dwumadi mber nhyiamde a ɛfata akyi (sɛ nhwɛsoɔ, method of passing arguments) a, ɛnde wɔbɛtumi akyerɛw saa dwumadie yi wɔ kasa foforɔ biara mu.

## Wɔn a wɔyɛ nhyehyɛe

Kɔmputa so dwumadifo ne wɔn a wɔkyerɛw kɔmputa so dwumadi ahorow. Wɔn nnwuma taa hwehwɛ sɛ:

* Nhwɛsode a wɔde yɛ
* Koodu kyerɛw
* Nsiesie wɔ koodu mu
* Nkrataa
* Wɔaka abom
* Nsiesie
* Ahwehwɛde ahorow mu nhwehwɛmu
* sɔftwɛɛ nhyehyɛe
* sɔftwɛɛ a wɔsɔ hwɛ
* nkyerɛkyerɛmu a wɔakyerɛkyerɛ mu

Ɛwom sɛ wɔde nhyehyɛe ho nsɛm akyerɛ wɔ nsɛm ho amanneɛbɔ mu sɛ ɛyɛ akontaabu asɛm bi de, nanso nhwehwɛmu ahorow bi kyerɛ sɛ nhyehyɛeyɛfo pa wɔ ahokokwaw a emu yɛ den wɔ nnipa awosu kasa mu, na sɛnea wosua sɛnea wɔkyerɛw koodu no te sɛ ɔman foforo so kasa a wosua.

## Beaɛ a menyaa mmoa fii