# কম্পিউটার প্রোগ্রামিং
সংক্ষিপ্ত ইউআরএল

প্রোগ্রামিং তালিকা
**কম্পিউটার প্রোগ্রামিং** (ইংরেজি: Computer programming) হলো এমন একটি প্রক্রিয়া যেখানে নির্দিষ্ট কাজ সম্পাদনের জন্য কম্পিউটার প্রোগ্রাম তৈরি করা হয়। এই প্রোগ্রামের লিখিত রূপকে সোর্স কোড বলা হয়, যা প্রোগ্রামার বা ডেভেলপার দ্বারা একটি নির্দিষ্ট প্রোগ্রামিং ভাষায় (যেমন পাইথন, সি++, জাভা) লেখা হয়।

প্রোগ্রামিংয়ের মূল লক্ষ্য হলো একটি সমস্যা সমাধানের জন্য এমন নির্দেশনা তৈরি করা, যা স্বয়ংক্রিয়ভাবে কম্পিউটার দ্বারা কার্যকর হতে পারে। প্রোগ্রাম তৈরির সময় অ্যালগরিদম ডিজাইন, বিশ্লেষণ এবং বাস্তবায়নের মাধ্যমে কার্যক্ষমতা নিশ্চিত করা হয়।

প্রোগ্রামিংয়ের সাথে সংশ্লিষ্ট কাজের মধ্যে সোর্স কোড পরীক্ষা, ডিবাগিং, রক্ষণাবেক্ষণ, এবং বিল্ড সিস্টেম ব্যবস্থাপনা অন্তর্ভুক্ত। এটি সফ্টওয়্যার উন্নয়নের একটি গুরুত্বপূর্ণ অংশ, যেখানে প্রকৌশল কৌশল ও প্রোগ্রামিং দক্ষতার সমন্বয় প্রয়োজন।

কম্পিউটার প্রোগ্রামিং আধুনিক প্রযুক্তির ভিত্তি, যা স্বয়ংক্রিয়করণ , সমস্যা সমাধান এবং নতুন উদ্ভাবনে গুরুত্বপূর্ণ ভূমিকা রাখে।

## ইতিহাস

আডা লাভলেস, যাঁর নোটস লুইজি মেনাব্রেয়ার কাগজপত্রের শেষে সংযুক্ত করা হয়েছিল, চার্লস ব্যাবেজের অ্যানালাইটিক্যাল ইঞ্জিনের জন্য প্রক্রিয়াকরণের প্রথম অ্যালগরিদম ডিজাইন করেছিলেন। তাঁকে সাধারণত ইতিহাসের প্রথম কম্পিউটার প্রোগ্রামার হিসেবে স্বীকৃতি দেওয়া হয়।
দেখুন: কম্পিউটার প্রোগ্রাম#ইতিহাস, প্রোগ্রামার#ইতিহাস, এবং প্রোগ্রামিং ভাষার ইতিহাস

প্রোগ্রামেবল যন্ত্র বহু শতাব্দী ধরে বিদ্যমান। ৯ম শতাব্দীতে, পারস্য বানু মুসা ভাইরা একটি প্রোগ্রামেবল মিউজিক সিকোয়েন্সার আবিষ্কার করেছিলেন, যেটি স্বয়ংক্রিয় যান্ত্রিক বাঁশির খেলার ব্যাখ্যা দেয় Book of Ingenious Devices-এ। 1206 সালে আরব প্রকৌশলী আল-জাজারি একটি প্রোগ্রামেবল ড্রাম মেশিন উদ্ভাবন করেছিলেন, যেখানে একটি যান্ত্রিক সঙ্গীত যন্ত্র বিভিন্ন ছন্দ এবং ঢাক প্যাটার্ন বাজাতে পারে পেগ এবং ক্যামস ব্যবহার করে। 1801 সালে, জাকার্ড লুম সম্পূর্ণ ভিন্ন বুনন তৈরি করতে পারত "প্রোগ্রাম" পরিবর্তনের মাধ্যমে – যা ছিল পাঞ্চড কার্ডের সিরিজ।

কোড-ব্রেকিং অ্যালগরিদমও বহু শতাব্দী ধরে বিদ্যমান। ৯ম শতাব্দীতে আরব গণিতজ্ঞ আল-কিনদি একটি ক্রিপ্টোগ্রাফিক অ্যালগরিদম বর্ণনা করেছিলেন এনক্রিপ্টেড কোড ডিকোড করার জন্য, "A Manuscript on Deciphering Cryptographic Messages"-এ। তিনি ফ্রিকোয়েন্সি অ্যানালিসিসের মাধ্যমে ক্রিপ্ট্যানালিসিসের প্রথম বর্ণনা দিয়েছিলেন, যা প্রাচীনতম কোড-ব্রেকিং অ্যালগরিদম।

প্রথম কম্পিউটার প্রোগ্রাম সাধারণত 1843 সালে ধরা হয়, যখন গণিতজ্ঞ আডা লাভলেস বার্নোলি সংখ্যা গণনার জন্য একটি অ্যালগরিদম প্রকাশ করেছিলেন, যা চার্লস ব্যাবেজের অ্যানালাইটিক্যাল ইঞ্জিন দ্বারা সম্পাদিত হওয়ার জন্য পরিকল্পিত। এই অ্যালগরিদম মূলত লাভলেসের চিন্তাভাবনা অনুযায়ী তৈরি, যা ব্যাবেজের সঙ্গে তাঁর পত্রলিপির মাধ্যমে বোঝা যায়। তবে চার্লস ব্যাবেজ নিজেও 1837 সালে AE-এর জন্য একটি প্রোগ্রাম লিখেছিলেন। লাভলেস অ্যানালাইটিক্যাল ইঞ্জিনের ব্যবহার কেবল গণিত হিসাবের বাইরে আরও বিস্তৃত হতে পারে তা প্রথম দেখেছিলেন।

ডেটা এবং নির্দেশাবলী আগে বাইরের পাঞ্চড কার্ডে সংরক্ষিত হতো, যা ক্রম অনুযায়ী সাজানো হতো এবং প্রোগ্রাম ডেকে রাখা হতো।
1880-এর দশকে, হারম্যান হোলারিথ মেশিন-পঠনযোগ্য ফর্মে ডেটা সংরক্ষণের ধারণা উদ্ভাবন করেন। পরে 1906 সালে তার Type I Tabulator-এ একটি কন্ট্রোল প্যানেল (প্লাগ বোর্ড) যোগ করা হয়, যা এটিকে বিভিন্ন কাজের জন্য প্রোগ্রামেবল করে তোলে, এবং 1940-এর দশকের শেষের দিকে, IBM 602 এবং IBM 604-এর মতো ইউনিট রেকর্ড যন্ত্রগুলি কন্ট্রোল প্যানেলের মাধ্যমে প্রোগ্রাম করা হতো, যেমন প্রথম ইলেকট্রনিক কম্পিউটারগুলিও। তবে 1949 সালে স্টোরড-প্রোগ্রাম কম্পিউটারের ধারণা উদ্ভাবিত হলে, প্রোগ্রাম এবং ডেটা একইভাবে কম্পিউটার মেমরিতে সংরক্ষণ এবং পরিচালনা করা যায়।

## মেশিন ভাষা

মেশিন কোড ছিল প্রাথমিক প্রোগ্রামের ভাষা, যা নির্দিষ্ট যন্ত্রের ইনস্ট্রাকশন সেটে লেখা হতো, সাধারণত বাইনারি নোটেশনে। দ্রুতই অ্যাসেম্বলি ভাষা উদ্ভাবিত হয় যা প্রোগ্রামারকে টেক্সট ফর্ম্যাটে নির্দেশাবলী নির্ধারণের সুযোগ দেয় (যেমন ADD X, TOTAL), প্রতিটি অপারেশন কোডের সংক্ষিপ্ত রূপ এবং ঠিকানা নির্ধারণের জন্য অর্থপূর্ণ নাম ব্যবহার করে। তবে, যেহেতু অ্যাসেম্বলি ভাষা মূলত মেশিন ভাষার একটি ভিন্ন নোটেশন, দুটি ভিন্ন ইনস্ট্রাকশন সেটের মেশিনের জন্য পৃথক অ্যাসেম্বলি ভাষা থাকে।

## কম্পাইলার ভাষা

উচ্চ-স্তরের ভাষাগুলি প্রোগ্রাম বিকাশ প্রক্রিয়াকে সহজ এবং বোধগম্য করেছে, এবং হার্ডওয়্যারের সাথে কম বাঁধা ছিল। প্রথম কম্পাইলার সম্পর্কিত সরঞ্জাম, A-0 সিস্টেম, 1952 সালে গ্রেস হপার দ্বারা তৈরি হয়, যিনি 'কম্পাইলার' শব্দটি তৈরি করেন। FORTRAN, প্রথম ব্যাপকভাবে ব্যবহৃত উচ্চ-স্তরের ভাষা যার কার্যকর বাস্তবায়ন ছিল, 1957 সালে প্রকাশিত হয়, এবং এর পরে দ্রুত অন্যান্য ভাষা তৈরি হয় – বিশেষত, COBOL বাণিজ্যিক ডেটা প্রসেসিংয়ের জন্য এবং Lisp কম্পিউটার গবেষণার জন্য।

এই কম্পাইল করা ভাষাগুলি প্রোগ্রামারকে সিনট্যাকটিকভাবে সমৃদ্ধ এবং কোডকে বিমূর্ত করার জন্য সক্ষম করে। কম্পাইলার কম্পিউটারের ক্ষমতা ব্যবহার করে প্রোগ্রামিং সহজ করে, যেখানে প্রোগ্রামার ইনফিক্স নোটেশনে সূত্র ব্যবহার করে গণনা নির্ধারণ করতে পারেন।

## সোর্স কোড এন্ট্রি

প্রোগ্রামগুলি প্রায়শই পাঞ্চড কার্ড বা পেপার টেপ ব্যবহার করে প্রবেশ করানো হতো। 1960-এর দশকের শেষের দিকে, ডেটা স্টোরেজ ডিভাইস এবং কম্পিউটার টার্মিনাল এত সস্তা হয়ে যায় যে প্রোগ্রাম সরাসরি কম্পিউটারে টাইপ করে তৈরি করা সম্ভব হয়। টেক্সট এডিটরও তৈরি হয়েছিল, যা পাঞ্চড কার্ডের তুলনায় পরিবর্তন এবং সংশোধন সহজ করে।

## আধুনিক প্রোগ্রামিং

### গুণমানের প্রয়োজনীয়তা

চূড়ান্ত প্রোগ্রাম অবশ্যই কিছু মৌলিক বৈশিষ্ট্য পূরণ করতে হবে। গুরুত্বপূর্ণ বৈশিষ্ট্যসমূহের মধ্যে রয়েছে:

* **বিশ্বাসযোগ্যতা**: প্রোগ্রামের ফলাফল কতটা সঠিক। এটি অ্যালগরিদমের ধাৰণাগত সঠিকতার উপর নির্ভর করে এবং প্রোগ্রামিং ভুল কমানোতে সাহায্য করে।
* **দৃঢ়তা**: প্রোগ্রাম কতটা সমস্যা অনুমান করতে পারে, যেমন ভুল বা অনুপযুক্ত ডেটা, মেমরি বা অপারেটিং সিস্টেমের সমস্যা, ব্যবহারকারীর ত্রুটি।
* **ব্যবহারযোগ্যতা**: প্রোগ্রামের ইউজার ইন্টারফেস ব্যবহার করা কতটা সহজ।
* **পরিবহনযোগ্যতা**: প্রোগ্রাম বিভিন্ন কম্পিউটার হার্ডওয়্যার এবং OS প্ল্যাটফর্মে কতটা চলতে পারে।
* **রক্ষণযোগ্যতা**: প্রোগ্রামকে ভবিষ্যতে উন্নত করা, বাগ ফিক্স করা বা নতুন পরিবেশে অভিযোজিত করা কতটা সহজ।
* **দক্ষতা/পারফরম্যান্স**: প্রোগ্রাম কতটা কম সিস্টেম রিসোর্স ব্যবহার করে।

স্বয়ংক্রিয় পরীক্ষা এবং ফিটনেস ফাংশন এই বৈশিষ্ট্যগুলি বজায় রাখতে সাহায্য করতে পারে।

### সোর্স কোডের পাঠযোগ্যতা

পাঠযোগ্যতা বোঝায় যে একজন মানুষ কতটা সহজে সোর্স কোডের উদ্দেশ্য, নিয়ন্ত্রণ প্রবাহ এবং কার্যকারিতা বুঝতে পারে। এটি প্রোগ্রামের গুণমান, ব্যবহারযোগ্যতা, পরিবহনযোগ্যতা এবং রক্ষণযোগ্যতাকে প্রভাবিত করে।

পাঠযোগ্যতা গুরুত্বপূর্ণ কারণ প্রোগ্রামাররা বেশি সময় কোড পড়া, বোঝা, পুনঃব্যবহার এবং পরিবর্তন করতে ব্যয় করেন। অস্পষ্ট কোড প্রায়ই বাগ, অদক্ষতা এবং কোড পুনরাবৃত্তি ঘটায়।

ধারাবাহিক প্রোগ্রামিং স্টাইল অনুসরণ পাঠযোগ্যতায় সাহায্য করে। এছাড়া, ভিজ্যুয়াল প্রোগ্রামিং ভাষা এবং IDE-র ব্যবহারও পাঠযোগ্যতা উন্নত করে। কোড রিফ্যাক্টরিংও সহায়ক।

### অ্যালগরিদমিক জটিলতা

কম্পিউটার প্রোগ্রামিং শাস্ত্র এবং প্রকৌশলে সর্বোত্তম অ্যালগরিদম খুঁজে বের করা এবং প্রয়োগ করার উপর গুরুত্ব দেয়। অ্যালগরিদমের ব্যবহার Big O নোটেশন দ্বারা পরিমাপ করা হয়, যা ইনপুট আকারের উপর নির্ভর করে সম্পদ ব্যবহারের মাত্রা প্রকাশ করে।

### পদ্ধতিগত উন্নয়ন

সফটওয়্যার উন্নয়নের প্রথম ধাপ হল চাহিদা বিশ্লেষণ, তারপর পরীক্ষার মাধ্যমে মূল্যায়ন, বাস্তবায়ন এবং ডিবাগিং। বিভিন্ন পদ্ধতি রয়েছে, যেমন Use Case বিশ্লেষণ, Agile পদ্ধতি।
জনপ্রিয় মডেলিং পদ্ধতি: অবজেক্ট ওরিয়েন্টেড বিশ্লেষণ ও ডিজাইন (OOAD), মডেল-চালিত আর্কিটেকচার (MDA), ইউনিফাইড মডেলিং ভাষা (UML)। ডাটাবেস ডিজাইনে ব্যবহৃত: Entity-Relationship মডেলিং।

বাস্তবায়ন প্রযুক্তি: ইম্পেরেটিভ ভাষা, ফাংশনাল ভাষা, লজিক প্রোগ্রামিং ভাষা।

### ভাষার ব্যবহার পরিমাপ

আধুনিক প্রোগ্রামিং ভাষার জনপ্রিয়তা নির্ধারণ কঠিন। পদ্ধতি: চাকরির বিজ্ঞাপন, বই বিক্রয়, কোর্স, বিদ্যমান কোড লাইন। কিছু ভাষা নির্দিষ্ট অ্যাপ্লিকেশনের জন্য জনপ্রিয়, যেমন COBOL কর্পোরেট ডেটা সেন্টারে, Fortran ইঞ্জিনিয়ারিংয়ে, স্ক্রিপ্টিং ভাষা ওয়েব উন্নয়নে, এবং C এমবেডেড সফটওয়্যারে।

### ডিবাগিং

প্রথম পরিচিত বাগ ছিল একটি প্রজাপতি, যা 9 সেপ্টেম্বর 1947-এ হার্ভার্ড মেইনফ্রেমে ধরা পড়েছিল। "বাগ" তখনও সফটওয়্যার ত্রুটির জন্য প্রচলিত শব্দ ছিল।
ডিবাগিং সফটওয়্যার উন্নয়নের একটি গুরুত্বপূর্ণ কাজ। IDE এবং স্ট্যান্ডঅ্যালোন ডিবাগার যেমন GDB ব্যবহার করে এটি করা হয়। GUI ডিবাগিং, স্ক্রিপ্টিং এবং ব্রেকপয়েন্টিংও এর অংশ।

## প্রোগ্রামিং ভাষা

মূল নিবন্ধ: প্রোগ্রামিং ভাষা, প্রোগ্রামিং ভাষার তালিকা
আরও দেখুন: কম্পিউটার প্রোগ্রাম#ভাষা, ওপেন-সোর্স প্রোগ্রামিং ভাষার তালিকা

ভিন্ন ভিন্ন প্রোগ্রামিং ভাষা ভিন্ন ধরণের প্রোগ্রামিং পদ্ধতি (যাকে প্রোগ্রামিং প্যারাডাইম বলা হয়) সমর্থন করে। কোন ভাষা ব্যবহার করা হবে তা নির্ভর করে অনেক বিষয়ে, যেমন—প্রতিষ্ঠানের নীতি, কাজের উপযোগিতা, তৃতীয় পক্ষের প্যাকেজের প্রাপ্যতা বা ব্যক্তিগত পছন্দ। আদর্শভাবে, নির্দিষ্ট কাজের জন্য সবচেয়ে উপযুক্ত প্রোগ্রামিং ভাষা বেছে নেওয়া হয়। তবে বাস্তবে এর সঙ্গে কিছু সমঝোতা করতে হয়—যেমন পর্যাপ্ত প্রোগ্রামার খুঁজে পাওয়া যারা ঐ ভাষায় দক্ষ, ঐ ভাষার জন্য কম্পাইলারের প্রাপ্যতা এবং লেখা প্রোগ্রাম কতটা দক্ষতার সঙ্গে চলবে। ভাষাগুলোকে সাধারণত "লো-লেভেল" থেকে "হাই-লেভেল" পর্যন্ত একটি ধারায় ধরা হয়। "লো-লেভেল" ভাষা সাধারণত যন্ত্রকেন্দ্রিক এবং দ্রুত চলে, আর "হাই-লেভেল" ভাষা বেশি বিমূর্ত ও ব্যবহার উপযোগী হলেও তুলনামূলকভাবে ধীরগতির। সাধারণত "হাই-লেভেল" ভাষায় কোড লেখা সহজ, তবে "লো-লেভেল" ভাষায় তা তুলনায় কঠিন। প্রোগ্রামিং ভাষা সফটওয়্যার উন্নয়নের জন্য অপরিহার্য। সহজতম অ্যাপ্লিকেশন থেকে শুরু করে সবচেয়ে জটিল সফটওয়্যার পর্যন্ত সবকিছু তৈরির মূল ভিত্তি এগুলো।

অ্যালেন ডাউনি তার *হাউ টু থিংক লাইক আ কম্পিউটার সায়েন্টিস্ট* বইতে লিখেছেন:

বিভিন্ন ভাষায় এর ভিন্ন ভিন্ন রূপ থাকলেও প্রায় প্রতিটি ভাষায় কয়েকটি মৌলিক নির্দেশ থাকে:

* ইনপুট: কীবোর্ড, ফাইল বা অন্য কোনো ডিভাইস থেকে তথ্য সংগ্রহ।
* আউটপুট: পর্দায় তথ্য দেখানো বা ফাইলে/অন্য ডিভাইসে পাঠানো।
* গাণিতিক ক্রিয়া: যোগ, গুণের মতো মৌলিক গাণিতিক কাজ সম্পাদন।
* শর্তাধীন নির্বাহ: নির্দিষ্ট শর্ত পূরণ হলে প্রয়োজনীয় নির্দেশ চালানো।
* পুনরাবৃত্তি: একই কাজ বারবার করা, সাধারণত কিছু পরিবর্তনসহ।

অনেক ভাষা শেয়ারড লাইব্রেরি থেকে ফাংশন কল করার ব্যবস্থা দেয়। যদি কোনো লাইব্রেরির ফাংশন রানটাইম নিয়ম (যেমন আর্গুমেন্ট পাঠানোর নিয়ম) অনুসরণ করে, তবে তা অন্য কোনো ভাষায় লেখা হলেও ব্যবহার করা যায়।

## প্রোগ্রাম শেখা

আরও দেখুন: কম্পিউটিং শিক্ষা

প্রোগ্রাম শেখার দীর্ঘ ইতিহাস রয়েছে। এটি পেশাগত মানদণ্ড ও চর্চা, একাডেমিক উদ্যোগ ও পাঠক্রম, বাণিজ্যিক বই এবং শিক্ষার্থীদের জন্য বিভিন্ন শিক্ষাসামগ্রীর সঙ্গে যুক্ত। ১৯৬০-এর দশক থেকে প্রোগ্রাম শেখা এক ধরণের জনপ্রিয় আন্দোলনে পরিণত হয়, যেখানে একাডেমিক শাখা, অনুপ্রেরণাদায়ক নেতা, সমষ্টিগত পরিচয় এবং প্রতিষ্ঠানিক পরিবর্তনের কৌশল তৈরি হয়। এই সামাজিক ধারণা ও শিক্ষামূলক কার্যক্রমের মাধ্যমে প্রোগ্রাম শেখা শুধু বিজ্ঞানী বা প্রকৌশলীদের জন্য নয়, বরং লাখো সাধারণ মানুষের জন্যও গুরুত্বপূর্ণ হয়ে ওঠে, যারা বিশ্বাস করেন যে সফটওয়্যার তৈরি সমাজের জন্য উপকারী।

### প্রেক্ষাপট

১৯৫৭ সালে যুক্তরাষ্ট্রে প্রায় ১৫,০০০ কম্পিউটার প্রোগ্রামার কর্মরত ছিলেন, যা সে সময় বিশ্বের মোট সক্রিয় প্রোগ্রামারের ৮০%। ২০১৪ সালে বিশ্বে প্রায় ১৮.৫ মিলিয়ন প্রোগ্রামার ছিলেন, যার মধ্যে প্রায় ১১ মিলিয়ন পেশাদার এবং ৭.৫ মিলিয়ন শিক্ষার্থী বা শখের প্রোগ্রামার।

বাণিজ্যিক ইন্টারনেট আসার আগে (১৯৯০-এর দশকের মাঝামাঝি), অধিকাংশ প্রোগ্রামার বই, ম্যাগাজিন, ব্যবহারকারী গোষ্ঠী ও অনানুষ্ঠানিক শিক্ষাপদ্ধতির মাধ্যমে সফটওয়্যার শেখতেন। একাডেমিক পাঠ্যক্রম এবং কর্পোরেট প্রশিক্ষণ পেশাদারদের জন্য বড় ভূমিকা রাখত।

প্রথম কম্পিউটার প্রোগ্রাম লেখার নির্দিষ্ট নির্দেশাবলী নিয়ে প্রকাশিত বইটি সম্ভবত মরিস উইলকস, ডেভিড হুইলার ও স্ট্যানলি গিল-এর *Preparation of Programs for an Electronic Digital Computer* (১৯৫১)। এতে EDSAC কম্পিউটারের জন্য সাধারণ সাবরুটিন দেওয়া হয়েছিল।

উচ্চ-স্তরের ভাষা যেমন FLOW-MATIC, COBOL, FORTRAN, ALGOL, Pascal, BASIC এবং সি আসার পর এগুলো শেখানোর জন্য অসংখ্য বই প্রকাশিত হয়। এর মধ্যে মার্শাল এইচ. রুবেলের *A Primer of Programming for Digital Computers* (১৯৫৯) এবং ড্যানিয়েল ম্যাকক্র্যাকেনের *A Guide to FORTRAN Programming* (১৯৬১) উল্লেখযোগ্য।

১৯৬১ সালে অ্যালান পেরলিস প্রস্তাব দেন যে কার্নেগি টেকনিক্যাল ইনস্টিটিউটের সব প্রথম বর্ষের শিক্ষার্থীকে একটি প্রোগ্রামিং কোর্স নিতে হবে। তার এই পরামর্শ *Computers and Automation* পত্রিকায় প্রকাশিত হয়েছিল, যা নিয়মিতভাবে প্রোগ্রামারদের জন্য তথ্য সরবরাহ করত।

সময়ের সঙ্গে সঙ্গে প্রোগ্রামিং শেখার জন্য নানা ধরণের বই ও নির্দেশিকা প্রকাশিত হয়। অনেক বইতে শুরুতে *Hello, World* প্রোগ্রাম দেখানো হতো। পরবর্তীতে ভেরিয়েবল ঘোষণা, ডেটাটাইপ, সূত্র, ফ্লো কন্ট্রোল, ফাংশন, ডেটা ম্যানিপুলেশনসহ নানা বিষয় শেখানো হতো।

জনপ্রিয় ও প্রভাবশালী বইগুলোর মধ্যে রয়েছে জন জি. কেমেনি ও টমাস ই. কার্টজের *BASIC Programming* (১৯৬৭), নিকলাউস উইর্থের *The Pascal User Manual and Report* (১৯৭১), এবং ব্রায়ান ডব্লিউ. কার্নিহান ও ডেনিস রিচির *The C Programming Language* (১৯৭৮)।

এছাড়াও ডোনাল্ড নুথের *The Art of Computer Programming* (১৯৬৮–), ব্রায়ান কার্নিহান ও পি. জে. প্লাউগারের *The Elements of Programming Style* (১৯৭৪), জন বেন্টলির *Programming Pearls* (১৯৮৬) বিশেষভাবে গুরুত্বপূর্ণ।

### প্রযুক্তিগত প্রকাশক

পার্সোনাল কম্পিউটার জনপ্রিয় হয়ে ওঠার সঙ্গে সঙ্গে হাজার হাজার বই ও ম্যাগাজিন প্রোগ্রাম শেখানোর জন্য প্রকাশিত হয়। এর মধ্যে উল্লেখযোগ্য ডেভিড আহলের *BASIC Computer Games* (১৯৭৮), রডনে জ্যাকসের *Programming the Z80* (১৯৭৯), মিচেল ওয়াইটের *C Primer Plus* (১৯৮৪), পিটার নরটনের *The Peter Norton Programmer's Guide to the IBM PC* (১৯৮৫), চার্লস পেটজোল্ডের *Programming Windows* (১৯৯২–) ইত্যাদি।

এই সময় অ্যাডিসন-ওয়েসলি, ম্যাকগ্রো-হিল, মাইক্রোসফট প্রেস, ও’রেইলি মিডিয়া, প্রেন্টিস হল, সিবেক্স, ওয়াইলি প্রভৃতি প্রকাশকরা প্রোগ্রামিং শেখার বই প্রকাশে অগ্রণী ভূমিকা নেয়।

কম্পিউটার ম্যাগাজিনও শিক্ষার গুরুত্বপূর্ণ মাধ্যম ছিল। যেমন বাইট, Communications of the ACM, Compute!, Dr. Dobb's Journal, PC Magazine, UnixWorld ইত্যাদি।

### ডিজিটাল শিক্ষা / অনলাইন উৎস

আরও দেখুন: অনলাইন সমন্বিত উন্নয়ন পরিবেশের তালিকা, শিক্ষামূলক সফটওয়্যারের তালিকা

২০০০–২০১০ সালের মধ্যে প্রোগ্রামিং শেখানোর বই ও ম্যাগাজিনের গুরুত্ব কমে যায়। প্রোগ্রামাররা ইন্টারনেট থেকে শেখা শুরু করেন। এ সময়ে ইউটিউব, Codecademy, খান একাডেমি, GitHub, W3Schools এবং নানা ধরনের কোডিং বুটক্যাম্প জনপ্রিয় হয়ে ওঠে।

অনেক সফটওয়্যার উন্নয়ন ব্যবস্থা এবং গেম ইঞ্জিনে অনলাইন হেল্প, আইডিই, এপিআই ও অন্যান্য ডিজিটাল উৎস অন্তর্ভুক্ত থাকে। অ্যাপল, মাইক্রোসফট, অরাকল, গুগল, অ্যামাজন প্রভৃতি কোম্পানি প্রোগ্রামারদের জন্য তাদের ওয়েবসাইটে শেখার উপকরণ সরবরাহ করে। সমসাময়িক উদ্যোগ যেমন *Hour of Code* (Code.org) প্রমাণ করে যে প্রোগ্রাম শেখা এখন ডিজিটাল শিক্ষা, শিক্ষানীতি ও কর্পোরেট সামাজিক দায়বদ্ধতার অংশ হয়ে উঠেছে।

## প্রোগ্রামার

মূল নিবন্ধ: প্রোগ্রামার, সফটওয়্যার প্রকৌশলী

কম্পিউটার প্রোগ্রামাররা হলেন তারা যারা কম্পিউটার সফটওয়্যার লেখেন। তাদের কাজের মধ্যে সাধারণত থাকে:

* প্রোটোটাইপ তৈরি
* কোড লেখা
* ডিবাগিং
* নথিপত্র তৈরি
* একীভূতকরণ
* রক্ষণাবেক্ষণ
* প্রয়োজনীয়তা বিশ্লেষণ
* স্থাপত্য নকশা
* সফটওয়্যার পরীক্ষা
* স্পেসিফিকেশন

যদিও মিডিয়ায় প্রোগ্রামিংকে গণিতনির্ভর বিষয় হিসেবে উপস্থাপন করা হয়, কিছু গবেষণা বলছে ভালো প্রোগ্রামারেরা প্রাকৃতিক ভাষায়ও দক্ষ হন এবং কোড শেখা অনেকটা বিদেশি ভাষা শেখার মতো।

## আরও দেখুন

* কম্পিউটার প্রোগ্রামিংয়ের রূপরেখা
* কোড স্মেল
* কম্পিউটার নেটওয়ার্কিং
* প্রতিযোগিতামূলক প্রোগ্রামিং
* সফটওয়্যার প্রোগ্রামিং জার্নালের তালিকা
* ওপেন-সোর্স সফটওয়্যার প্যাকেজের তালিকা
* প্রোগ্রামিংয়ের শ্রেষ্ঠ অনুশীলন
* সিস্টেমস প্রোগ্রামিং

## তথ্যসূত্র