સંગણક
પ્રોગ્રામ્સ
કમ્પ્યુટર પ્રોગ્રામ, વર્ડ પ્રોસેસર અથવા વેબ બ્રાઉઝર માટેના પ્રોગ્રામોની જેમ થોડી સુચનાઓથી લઇને અસંખ્ય સુચનાઓને અનુસરી શકે છે. વિશિષ્ટ આધુનિક કમ્પ્યુટર સેકંડદીઠ ગીગાહર્ટઝ અથવા GHz ની ગતિ થી અબજો સુચનાઓને અનુસરી શકે છે અને ભાગ્યે જ ઓપરેશનના અનેક વર્ષો માં એક વાર ભૂલ કરી શકે છે. મોટા કમ્પ્યુટર વિવિધ હજ્જારો સુચનાઓનો સમાવેશ કરતા હોય છે અને તે લખવા માટે અનેક પ્રોગ્રામર્સની સહાય લઇ શકે છે, આમ ભૂલ વિના સમગ્ર પ્રોગ્રામ લખાઇ જવાની સંભાવના અત્યંત ઓછી છે. કમ્પ્યુટર પ્રોગ્રામમા આવતી ભૂલોને “બગ્સ” કહેવાય છે. બગ્સ સારા હોઇ શકે છે અને પ્રોગ્રામની ઉપયોગિતાને અસર કરતા નથી અથવા નજીવી અસર હોઇ શકે છે. પરંતુ કેટલાક કિસ્સામાં તે પ્રોગ્રામને “હેન્ગ” કરી શકે છે એટલેકે સ્થગીત કરી શકે છે-કે જેથી કમ્પ્યૂટર માઉસ ક્લિક્સ અથવા કીસ્ટ્રોક્સનો પ્રતિભાવ આપતું નથી અથવા સંપૂર્ણપણે નિષ્ફળ અથવા “ક્રેશ” થઇ જાય છે. અલબત્ત સારા બગ્સ કેટલીકવાર ખરાબ ઇરાદા સાથે “એક્સપ્લોઇટ”લખતા ખરાબ યૂઝર દ્વારા નુકસાન પહોંચાડી શકે છે- બગ અને પ્રોગ્રામનો યોગ્ય અમલ ખોરવવા માટે કોડ તૈયાર કરવામાં આવ્યા છે. બગ્સ એ મોટેભાગે કમ્પ્યુટરની ખામીને લીધે આવતા નથી. કમ્પ્યુટરો તેમને આપવામાં આવતી સુચનાઓને જ અનુસરતા હોવાથી બગ્સ મોટે ભાગે પ્રોગ્રામરની ભૂલનું પરિણામ અથવા પ્રોગ્રામની ડિઝાઇનમાં કરેલ ભૂલનું પરિણામ હોય છે. મોટા ભાગના કમ્પ્યુટરોમાં, વ્યક્તિગત સુચનાઓને મશિન કોડ તરીકે સ્ટોર કરવામાં આવે છે, જેમાં દરેક સુચનાઓને વિશિષ્ટ નંબર(તેના ઓપરેશન કોડ અથવા ટૂંકાણ માટે ઓપકોડ  આપવામાં આવે છે. બે નંબર ઉમેરવા માટેના કમાન્ડને એક ઓપકોડ હશે, તેમને મલ્ટીપ્લાય કરવા માટેના કમાન્ડને અન્યઓપકોડ અને તે રીતે હશે. સરળ કમ્પ્યુટરો થોડી વિવિધ સુચનાઓને અનુસરવા સક્ષમ હશે; જ્યારે વધુ જટિલ કમ્પ્યુટરો પાસે વિશિષ્ટ ન્યૂમરિકલ કોડ સાથે હજ્જારોમાંથી પસંદગી કરવાની રહેશે.  કમ્પ્યુટરની મેમરી નંબરો સ્ટોર કરવા સક્ષમ હોવાથી તે સુચના કોડ્સ પણ સ્ટોર કરી શકે છે.  તેના કારણે એક અગત્યની હકીકત એવી થાય છે કે સમગ્ર પ્રોગ્રામ (કે જે ફક્ત સુચનાઓની યાદી છે)ને નંબરોની યાદી તરીકે પ્રદર્શિત કરી શકાય છે અને તે જો ન્યૂમરિક ડેટા હોય તો કમ્પ્યુટરની અંદર તેમની રીતે ખોટા આંક દર્શાવી શકે છે. તેઓ જે ઓપરેટ કરે છે તે ડેટાની સાથે કમ્પ્યુટરની મેમરીમાં પ્રોગ્રામ સ્ટોર કરવાનો મૂળ ખ્યાલ એ છે કે વોન ન્યમનનો ક્રક્સ અથવા સ્ટોર થયેલા આર્કિટેક્ચર પ્રોગ્રામ છે.  કેટલાક કિસ્સાઓમાં કમ્પ્યુટર કેટલોક ડેટા સેવ શકે છે અથવા તે ઓપરેટ કરે છે તે ડેટામાંથી અલગ મૂકાયેલા સમગ્ર પ્રોગ્રામને મેમરીમાં સમાવી શકે છે. તેને હાર્વર્ડ માર્ક I કમ્પ્યુટર બાદ હાર્વર્ડ આર્કિટેક્ચર કહેવાય છે. આધુનિક વોન ન્યૂમન કમ્પ્યુટર તેમની ડિઝાઇનમાં હાર્વર્ડ આર્કિટેક્ચરના કેટલાક લક્ષણો જેમ કે સીપીયુ કેશ, સમાવેલ હોય છે. "મશિન ભાષા"ના લાંબા નંબરોની યાદીની જેમ કમ્પ્યુટર પ્રોગ્રામ લખવો શક્ય છે અને આ તરકીબનો ઉપયોગ અગાઉના કમ્પ્યુટરો માં કરવામાં આવતો હતો, જે વ્યવહારમાં આવી રીતે, ખાસ કરીને જટિલ પ્રોગ્રામ માટે કરવું અત્યંત કંટાળાજનક છે. તેના બદલે તેના ફંકશનનો નિર્દેશ કરતી હોય તેવી ટૂંકા નામવાળી દરેક મૂળ સુચનાઓ આપી શકાય અને તે નેમોનિકને યાદ રાખવી સરળ છે જેમ કે એડીડી, સબ, મલ્ટ અથવા જંપ. આ નેમોનિક્સ સામુહિક રીતે કમ્પ્યુટરની "એસેમ્બલી ભાષા" તરીકે ઓળખાય છે. એસેમ્બલી ભાષામાં લખેલા પ્રોગ્રામોને કમ્પ્યુટર ખરેખર સમજી શકે (મશિન ભાષા) તેવી ભાષામાં રૂપાંતર કરવાનું કામ એસેમ્બ્લર તરીકે ઓળખાતા કમ્પ્યુટર પ્રોગ્રામ દ્વારા કરવામાં આવે છે. મશિન ભાષાઓ અને એસેમ્બલી ભાષાઓને સામૂહિક રીતે લો લેવલ પ્રોગ્રામીંગ લેંગ્વેજ તરીકે ઓળખાય છે અને તે ખાસ પ્રકારના કમ્પ્યુટર તરીકે વિશિષ્ટ બનવા લાયક છે. ઉદાહરણ તરીકે એઆરએમ આર્કિટેક્ચર કમ્પ્યુટર (જેમ કે પર્સનલ ડિજિટલ આસિસ્ટંટ (પીડીએ) અથવા હેન્ડ હેલ્ડ વિડીયોગેમ) ઇન્ટેલ પેન્ટિયમ અથવા એએમડી એથલોન 64, જે કદાચ પર્સનલ કમ્પ્યુટરમાં હોઇ શકે છે, કમ્પ્યુટરની મશિન ભાષા સમજી શકે નહી. મશિન ભાષા કરતા નોંધપાત્ર રીતે સરળ હોવા છતાં એસેમ્બલી પ્રોગ્રામમાં લાંબા પ્રોગ્રામો લખવા ઘણી વાર મુશ્કેલ અને ભૂલ થઇ શકે તેવા હોય છે. તેથી, મોટા ભાગના જટિલ પ્રોગ્રામો વધુ સંક્ષિપ્ત હાઇ લેવલ પ્રોગ્રામીંગ ભાષામાં લખેલા હોય છે, જે ક્મ્પ્યુટર પ્રોગ્રામરની જરૂરિયાતોને વધુ સરળ (અને તેથી પ્રોગ્રામરને ઓછી ભૂલો કરવા સહાય કરે છે) રીતે છતી કરવા સક્ષમ હોય છે. હાઇ લેવલ ભાષાઓ સામાન્ય રીતે કંપાઇલર નામના અન્ય કમ્પ્યુટર પ્રોગ્રામનો ઉપયોગ કરીને સામાન્ય રીતે મશિન ભાષામાં (અથવા કેટલીકવાર એસેમ્બલી ભાષા અને ત્યાર બાદ મશિન ભાષામાં)‘’ભાષાંતરીત’’ હોય છે. હાઇ લેવલ ભાષાઓ એસેમ્બલી ભાષાઓ કરતા વધુ સંક્ષિપ્ત હોવાથી, વિવિધ પ્રકારના કમ્પ્યુટરની મશિન ભાષામાં સમાન પ્રકારની હાઇ લેવલ ભાષા ભાષાંતર કરવી કરવા માટે અલગ કંપાઇલરોનો ઉપયોગ કરવો શક્ય છે. વિવિધ પ્રકારના કમ્પ્યુટર આર્કિટેક્ચર જેમ કે પર્સોનલ કમ્પ્યુટર્સ અને અલગ અલગ વીડીયો ગેઇમ કોન્સોલ માટે વીડીયો ગેઇમ ઉપલબ્ધ કરાવી શકાય તે માટેના સોફ્ટવેરના અનેક ઉપોયોગોનો એક ભાગ છે. મોટી સોફ્ટવેર સિસ્ટમ્સ વિકસાવવાનું કાર્ય પુષ્કળ પરસ્પરાવલંબી પ્રયત્ન છે. ધારણાયુકત શિડ્યૂલ અને બજેટ પર સ્વીકાર્ય. ઊંચી વિશ્વસનીયતા સાથે સોફ્ટવેરના ઉત્પાદને ઐતિહાસિક રીતે ભારે પડકાર ફેંક્યો છે; સોફ્ટવેર એન્જિનીયરીંગની શૈક્ષણિક અને વ્યાવસાયિક શિસ્ત ખાસ કરીને આ સમસ્યા પર ધ્યાન કેન્દ્રિત કરે છે.