Në mënyrë që pajisja të funksionojë siç i duhet përdoruesit, ajo duhet të programohet në mënyrë korrekte (shkruani një program për një kompjuter, zhvilloni një qark logjik për një FPGA, shkruani informacion në ROM, etj.). Një numër i madh veprimesh mund të quhet programim, por në kuptimin e zakonshëm është të shkruash programe kompjuterike.
Në një kuptim të ngushtë, programimi (ose kodimi) do të thotë të shkruash programe (udhëzime për një kompjuter) në një gjuhë specifike programimi sipas një algoritmi të krijuar. Zakonisht, ato kanë sintaksë të lexueshme nga njerëzit. Njerëzit të cilët merren me programim quhen programues (kodues ose thjesht “kodues”), dhe ata që krijojnë algoritme quhen algoritme. Në një kuptim të gjerë, programimi duhet të kuptohet si një gamë e tërë e aktiviteteve që shoqërohen me krijimin dhe mirëmbajtjen e produkteve softuerike (softuer kompjuterik) në gjendje pune. Më i saktë është termi modern - "inxhinieri softveri" (ose thjesht "inxhinieri softuer"). Specialistët në këtë fushë janë të angazhuar në vendosjen e detyrave, hartimin e programeve, ndërtimin e algoritmeve, shkrimin e tekstit të programit, testimin, korrigjimin e gabimeve, dokumentimin dhe mirëmbajtjen. Çdo programim kompjuterik bazohet në përdorimin e gjuhëve të programimit. Për të ekzekutuar një program në kompjuter, është e nevojshme të përdoren përkthyes që do të përkthejnë një gjuhë të lexueshme nga njerëzit (një program të shkruar) në gjuhën e udhëzimeve të makinës. Ekzistojnë dy lloje të përkthyesve - interpretues dhe përpilues. Dallimi kryesor midis tyre është se i pari menjëherë ekzekuton programin, ndërsa i dyti thjesht e përkthen atë në gjuhën e udhëzimeve të makinës, pa e ekzekutuar më tej atë. Për të ekzekutuar një program, ai së pari duhet të përpilohet ose interpretohet. Më parë, ju është dashur të shkruani programe dhe më pas t'i përpiloni ato veçmas, gjë që komplikoi procesin e testimit dhe korrigjimit të gabimeve. Aktualisht, ekzistojnë mjedise të ndryshme të zhvillimit të integruar. IDE-të përfshijnë redaktorë për redaktimin dhe futjen e teksteve të programeve dhe përkthyes të ndryshëm nga gjuhë të ndryshme. Përveç kësaj, ato mund të përfshijnë rutina të ndryshme të tjera që lehtësojnë procesin e krijimit, testimit dhe mirëmbajtjes së produkteve softuerike.