কম্পিউটারের মেমোরি

কম্পিউটারের মেমোরির কী দরকার? প্রসেস করতে পারলেই তো হয়ে যায়। এরকম চিন্তা তোমরা অনেকেই করো। কিন্তু কম্পিউটার যে প্রসেস করবে, কী প্রসেস করবে? নিশ্চয়ই ডাটা। আর সেই ডাটা কোথাও তো রাখা দরকার, নইলে কম্পিউটার মহাশয় মনে রাখবে কী করে যে তাকে কোন জিনিসটি প্রসেস করতে হবে?

তোমরা তো ইতিমধ্যেই জেনে গিয়েছ যে কম্পিউটার যে হিসাবনিকাশ করে, সেগুলো যত বড় বড় হিসেবই হোক না কেন, শেষ পর্যন্ত কম্পিউটার কেবল শূণ্য আর এক ব্যবহার করে হিসেব করে (এই হিসেব করাটাকেই আমরা প্রসেস করা বলছি মাঝে মাঝে)। তো এই 0 এবং 1-গুলো রাখার জন্য আমাদের জায়গা দরকার। সেই জায়গাটি দেয় কম্পিউটারের মেমোরি। এই 0 আর 1, এগুলো হচ্ছে একেকটি বিট (ইংরেজিতে bit)। একটি বিট যে কোনো এক রকমের হবে, হয় শূণ্য (0) না হয় এক (1)। তাহলে একটি বিট দিয়ে দুটি আলাদা জিনিস প্রকাশ করা সম্ভব, যখন বিটটি হবে 0 তখন এক রকম, আবার যখন 1 তখন আরেক রকম। তাহলে পাশাপাশি দুটি বিট দিয়ে কয়টি আলাদা জিনিস রাখা যায়? তোমরা একটু চিন্তা করো তো। চিন্তা করা শেষ হলে নিচের টেবিলটি দেখো:

১ম বিট

২য় বিট

0

0

0

1

1

0

1

1

তাহলে দুটি বিট পাশাপাশি রাখলে চারটি আলাদা জিনিস রাখা যায়, 00, 01, 10 11। এবারে তোমার জন্য কাজ। খাতাকলম নিয়ে বসে পরো এবং তিনটি ও চারটি বিটের ক্ষেত্রে কতটি করে আলাদা জিনিস রাখা সম্ভব সেটি বের করো। উত্তর হবে যথাক্রমে 8 16। তাহলে দাঁড়াচ্ছে 2, 3 4টি করে বিটের ক্ষেত্রে যথাক্রমে 4, 8 16টি পৃথক জিনিস রাখা যায়। তাহলে তোমাদের যেহেতু বুদ্ধিশুদ্ধি বেশি, তোমরা সহজেই বলে দিতে পারবে, 5টি বিটের জন্য 32, 6টি বিটের জন্য 64, 7টি বিটের জন্য 128টি পৃথক জিনিস রাখা সম্ভব। তাহলে 8টি বিটের জন্য কত? উত্তর হবে 256। আর যাদের সামান্য একটু গাণিতিক বুদ্ধি আছে, তারা কিন্তু এতক্ষণে মনে মনে একটি সূত্র বের করে ফেলেছো। nটি বিট থাকলে 2n টি পৃথক জিনিস রাখা সম্ভব।

বাইট শব্দটি নিশ্চয়ই তোমরা শুনেছ? ইংরেজিতে byte। তবে এই শব্দের মানে কিন্তু কামড় নয়, সেটির ইংরেজি bite। আটটি বিট পাশাপাশি রেখে তৈরি হয় একটি বাইট। তাহলে এক বাইটে কতটি আলাদা জিনিস রাখা যায়? আমি জানি তোমরা চট্ করে বলে দিতে পারবে, 256টি।

তোমরা সবাই ক্যারেক্টার টাইপের (char) ভেরিয়েবলের সাথে পরিচিত। তাহলে এখন তোমরা নিশ্চয়ই বুঝতে পারছ যে একটি ক্যারেক্টার টাইপের ভেরিয়েবলে 256টি আলাদা জিনিস রাখা সম্ভব। এজন্যই আমরা বিভিন্ন অক্ষর, সংখ্যা, চিহ্ন এগুলোকে ক্যারেক্টার টাইপের ভেরিয়েবলের মধ্যে রাখি। প্রতিটি অক্ষরের একটি মান রয়েছে যাকে সংখ্যা দিয়ে প্রকাশ করা যায়। যেমন a-এর মান 97, b-এর মান 98, c-এর মান 99, এভাবে z-এর মান 122। আবার A-এর মান 65, B-এর মান 66, C-এর মান 67, এভাবে Z-এর মান 90, 0 থেকে 9 পর্যন্ত চিহ্নগুলোর মান যথাক্রমে 48 থেকে 57। এই মানগুলোকে বলে ASCII মান। ASCII হচ্ছে American Standard Code for Information Interchange-এর সংক্ষিপ্তরূপ। ইংরেজি সমস্ত অক্ষর, চিহ্ন সবগুলোরই ASCII মান রয়েছে। এখন তোমার মনে প্রশ্ন জাগতে পারে, পৃথিবীর বাকী ভাষাগুলো কী দোষ করল? তাদের সব অক্ষরের জন্য ASCII মান নেই কেন? আসলে 8 বিটে আমরা তো মোটে 256টি জিনিস রাখতে পারি, তাই সবার জায়গা দেওয়া সম্ভব হয় নি। অন্য সব ভাষার জন্য রয়েছে Unicode

এখন আসো, চট্ করে কয়েকটি প্রোগ্রাম লিখে ফেলি। তোমরা অবশ্যই কোডগুলো নিজে টাইপ করবে এবং রান করবে। প্রোগ্রামগুলো আমি ব্যাখ্যা করবো না, তোমরা নিজেরা চিন্তা করে বুঝে নেবে। আমাদের শিক্ষার্থীদের মূল সমস্যা হচ্ছে অলস মস্তিষ্ক, চিন্তা করে কিছু বুঝতে চায় না। আমি চাই তোমরা তোমাদের মস্তিষ্ক একটু খাটাও।

আমাদের প্রথম প্রোগ্রামঃ

#include <stdio.h>

int main()

{

    int i;

    for (i = 33; i <= 126; i++) {

        printf(“ASCII code for %c is %dn”, i, i);

    }

    return 0;

}

আমাদের দ্বিতীয় প্রোগ্রামঃ

#include <stdio.h>

int main()

{

    char small_letter, capital_letter;

    printf(“Please enter a small letter: “);

    small_letter = getchar();

    capital_letter = small_letter – 32;

    printf(“The capital letter is: %cn”, capital_letter);

    return 0;

}

এখন তোমার কাজ হবে একটি ফাংশন লেখা, যেটি প্যারামিটার হিসেবে একটি ক্যারেক্টার টাইপের ভেরিয়েবল নিবে এবং সেটি যদি কোনো অঙ্ক (digit) হয়ে, তবে 1রিটার্ণ করবে, আর না হলে 0 রিটার্ণ করবে। কাজ শেষ হলে চলো, আমরা মেমোরি নিয়ে আলাপআলোচনায় ফেরত যাই।

ইন্টিজার টাইপের ভেরিয়েবলের আকার হচ্ছে চার বাইট, মানে 32 বিট। এই 32 বিটে আমরা 232টি বা 4294967296টি সংখ্যা রাখতে পারি। এখন আমরা যদি কেবল ধনাত্মক সংখ্যা রাখতে চাই, তাহলে 0 থেকে 4294967295 পর্যন্ত রাখা যাবে। এ ধরণের ভেরিয়েবলকে বলে unsigned ভেরিয়েবল। আর যেসব ভেরিয়েবলে ধনাত্মক ও ঋনাত্মক – উভয় প্রকারের সংখ্যা রাখা যায়, তাকে বলে signed ভেরিয়েবল, তবে এক্ষেত্রে আলাদাভাবে সেটির উল্লেখ থাকে না। তাহলে আমরা বুঝতে পারলাম কেনো int টাইপের ভেরিয়েবলে -2147483648 থেকে 2147483647 পর্যন্ত সংখ্যা রাখা যায় আর কেনো unsigned int টাইপের ভেরিয়েবলে 0 থেকে 4294967295 পর্যন্ত সংখ্যা রাখা যায়।

কম্পিউটারের মেমোরিতে ক্ষুদ্রতম একক হচ্ছে বাইট। পরপর অনেকগুলো বাইট মেমোরিতে সাজানো থাকে। প্রতিটি বাইটের আবার নির্দিষ্ট ঠিকানা বা এড্রেস রয়েছে। তুমি যখন কোনো ক্যারেক্টার ভেরিয়েবল ডিক্লেয়ার করবে, সেটি মেমোরির একটি বাইট দখল করে ফেলবে। আবার তুমি যদি ইন্টিজার ভেরিয়েবল ডিক্লেয়ার করো তাহলে সেটি মেমোরির পরপর চারটি বাইট দখল করবে। ব্যাপারটি বোঝানোর জন্য নিচের ছবিটির মতো চিন্তা করা যায়। তোমরা দেখতে পাচ্ছ ছবিতে দশটি ঘর রয়েছে। প্রতিটি ঘরের আকার হচ্ছে এক বাইট। আবার প্রতিটি ঘরের আলাদা ঠিকানা বা এড্রেস রয়েছে। ধরে নিই, প্রথম ঘরের এড্রেস হচ্ছে 100। তাহলে পরের ঘরের এড্রেস হবে 101, তার পরের ঘরের এড্রেস হবে 102, এরকম। ছবিতে এড্রেসগুলো মূল ঘরের নিচে আরেকটি ঘরে লেখা হয়েছে।

100

101

102

103

104

105

106

107

108

109

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

এবারে নিচের প্রোগ্রামটা ঝটপট টাইপ করে রান করো। কম্পাইল করার সময় ওয়ার্নিং দেখাবে, সেটিকে এড়িয়ে যাবে এবং প্রোগ্রামটি রান করবে।

#include <stdio.h>

int main()

{

    char ch1 = ‘A’, ch2 = ‘B’;

    int n1 = 100, n2 = 100000;

    unsigned int address1 = &ch1;

    unsigned int address2 = &ch2;

    unsigned int address3 = &n1;

    unsigned int address4 = &n2;

    printf(“%c, %un”, ch1, address1);

    printf(“%c, %un”, ch2, address2);

    printf(“%d, %un”, n1, address3);

    printf(“%d, %un”, n2, address4);

    return 0;

}

আউটপুট কী? একেক জনের আউটপুট একেক রকম হবে, কারণ মেমোরির কোন জায়গায় কোন ভেরিয়েবল থাকবে, তার কোনো ঠিক নেই। এখন তোমরা লক্ষ করো, কোনো ভেরিয়েবল যদি n হয়, তবে তার এড্রেস হচ্ছে &n। একারণের আমরা scanf ফাংশন ব্যবহার করে কোনো ভেরিয়েবল ইনপুট নেওয়ার জন্য ভেরিয়েবলের নামের আগে & চিহ্ন ব্যবহার করি। কিন্তু অ্যারের বেলাতে সেটি করতে হয় না, কারণ অ্যারের নামটিতেই অ্যারের শুরুর এড্রেসটি থাকে। অর্থাৎ কোনো অ্যারে যদি হয় int ara[10], সেখানে ara-এর মান প্রিন্ট করলেই অ্যারের এড্রেস পাওয়া যায়।

এখন তুমি নিচের প্রোগ্রামটিও আগের মতো রান করবে (ওয়ার্নিং দেখালে পাত্তা দেওয়ার দরকার নেই)

#include <stdio.h>

int main()

{

    int ara[5] = {50, 60, 70, 80, 90};

    printf(“%d, %d, %d, %d, %dn”, ara[0], ara[1], ara[2], ara[3], ara[4]);

    printf(“%un”, ara);

    printf(“%un”, &ara[0]);

    printf(“%un”, &ara[1]);

    return 0;

}

প্রোগ্রামটির প্রথম লাইনে প্রিন্ট হবে অ্যারের উপাদানগুলো। দ্বিতীয় লাইন প্রিন্ট হবে অ্যারের শুরুর এড্রেস। একেক জনের কম্পিউটারে আউটপুট একেক রকম হবে। দ্বিতীয় লাইনে যা প্রিন্ট হবে, তৃতীয় লাইনে ঠিক তাই প্রিন্ট হবে, কারণ অ্যারের শুরুর এড্রেস আর অ্যারের প্রথম উপাদানের এড্রেস একই জিনিস। চতুর্থ লাইনে অ্যারের দ্বিতীয় উপাদানের এড্রেস প্রিন্ট হবে, যা প্রথম উপাদানের এড্রেসের চেয়ে চার বেশি। কারণ প্রথম উপাদান পরপর চারটি বাইট দখল করবে। যদিও তোমার মনে হতে পারে, 50 কেনো চার বাইট জায়গা নেবে, এক বাইটেই তো লিখা যায়, কিন্তু যখনই তুমি ডাটা টাইপ int বলে দিবে, তখনই চার বাইট জায়গা দখল হয়ে যাবে।

সিতে sizoeof নামে একটি অপারেটর আছে, যেটি বলে দেয় কোন ভেরিয়বলের সাইজ কত বাইট। নিচের প্রোগ্রামটি হুবুহু টাইপ করো, তারপরে কম্পাইল ও রান করো। এখন নিজে নিজে চিন্তা করে বুঝে নাও যে sizeof কিভাবে ব্যবহার করতে হয়।

#include <stdio.h>

int main()

{

    int num;

    char ch;

    double d_num;

    float f_num;

    printf(“%lun”, sizeof(int));

    printf(“Size of int: %dn”, sizeof(num));

    printf(“Size of char: %dn”, sizeof(ch));

    printf(“Size of double: %dn”, sizeof(d_num));

    printf(“Size of float: %dn”, sizeof(f_num));

    return 0;

}

এখন চলো জেনে নিই, কম্পিউটারে কয় ধরনের মেমোরি আছে।

কম্পিউটারের মেমোরিকে মোটা দাগে দুই ভাগে ভাগ করা যায়, অস্থায়ী ও স্থায়ী। ইংরেজিতে বলে ভোলাটাইল (volatile) ও ননভোলাটাইল (non volatile)। যেসব মেমোরীতে কম্পিউটার বন্ধ থাকলেও ডাটা সংরক্ষিত থাকে, তাকে বলে স্থায়ী (non volatile) মেমোরি, যেমন হার্ড ডিস্ক, রম, ডিভিডি, ইউএসবি ড্রাইভ। আর যেসব মেমোরির ডাটা কম্পিউটার বন্ধ (ক্ষেত্রবিশেষে প্রোগ্রাম বন্ধ) করলে হারিয়ে যায়, সেগুলোকে বলে অস্থায়ী মেমোরি, যেমন রেম (RAM)। কম্পিউটার প্রোগ্রামগুলো ডাটা নিয়ে কাজ করার সময় অস্থায়ী মেমোরি ব্যবহার করে। স্থায়ী মেমোরিগুলো বেশ ধীরগতির হয় বলে সেগুলো ব্যবহার করা হয় না।

কম্পিউটারের প্রসেসরের মধ্যেও কিন্তু মেমোরি আছে, প্রসেসরের সবচেয়ে কাছে থাকে রেজিস্টার, আর তার পরেই থাকে ক্যাশ মেমোরি। সি ল্যাঙ্গুয়েজে আমরা চাইলে কোনো ভেরিয়েবলকে রেজিস্টারে রাখার জন্য এভাবে ডিক্লেয়ার করতে পারি: register int number;। সেসব ভেরিয়েবলকেই আমরা রেজিস্টারে রাখার চেষ্টা করবো যেগুলো প্রোগ্রামের ভেতরে সবচেয়ে বেশি ব্যবহার করা হয়। তবে আজকাল রেজিস্টারে এভাবে না রাখলেও চলে, কম্পাইলারগুলো নিজেরাই বুঝে নেয় কোন ভেরিয়েবল কোথায় রাখতে হবে। রেজিস্টারের চেয়ে ক্যাশ মেমোরির আকার বড়, মানে বেশি তথ্য ধারণ করতে পারে, তবে গতি একটু কম। তারপরে আসে RAMRAM প্রসেসরের বাইরে মাদারবোর্ডে সংযুক্ত থাকে। ক্যাশের তুলনায় RAM-এর আকার বেশ বড়, তবে গতিও কম। এখন তোমরা প্রশ্ন করতে পারো, রেজিস্টার আর ক্যাশের আকার আরো বেশি হলে কী সমস্যা ছিল? শুধু শুধু RAM-এর ব্যবহার কেন করছি? আসলে রেজিস্টার মেমোরি তৈরিতে খরচ সবচেয়ে বেশি, তারপরে ক্যাশ মেমোরি। RAM তাদের তুলনায় বেশ সস্তা। RAM-এর পরে আসে ভার্চুয়াল মেমোরি। RAM-এ যখন জায়গা হয় না, তখন হার্ডডিস্কের একটা অংশকে কম্পিউটারের অপারেটিং সিস্টেম মেমোরি হিসেবে ব্যবহার করতে দেয় প্রোগ্রামগুলোকে। সেটা অবশ্যই RAM-এর তুলনায় ধীর গতির। নিচের ছবিটির দিকে একবার চোখ বুলিয়ে নাওঃ

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

 

এটি আমার কম্পিউটার প্রোগ্রামিং (২য় খন্ড)’ বইয়ের প্রথম চ্যাপ্টার। বইতে আরো আছে পয়েন্টার, রিকার্শন, স্ট্রাকচার ইত্যাদি বিষয়ক আলোচনা। প্রথম খন্ডের মতো, সি ল্যাঙ্গুয়েজ শেখার চাইতে প্রোগ্রামিং শেখার দিকেই জোরটা বেশি দেওয়া হয়েছে।

সিএসই বিভাগের ক্লাস শুরুর আগে

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

screen-shot-2016-12-02-at-9-17-16-am

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

cpbook1img

এটি নীলক্ষেতে ও রকমারি ডট কম (rokomari.com) -এ কিনতে পাওয়া যায়। আর টাকার সমস্যা থাকলেও অসুবিধা নাই। বইটি অনলাইনে ফ্রি পড়া যায়। আর বইয়ের সাথে সাথে তোমরা চাইলে অনলাইনে একটি প্রোগ্রামিং কোর্স করে ফেলতে পারো। এটিও সম্পূর্ণ ফ্রি, কোনো টাকাপয়সা লাগবে না। একা একা কিংবা বন্ধুরা কয়েকজন মিলে শিখতে পারো। বই এবং (অথবা) কোর্স করার পরে তোমরা কম্পিউটার প্রোগ্রামিং বইয়ের ওয়েবসাইটে দেওয়া প্রবলেমগুলো সলভ করার চেষ্টা করতে পারো। আর সমস্যাগুলোর সমাধান নিয়ে আলোচনা করেছি ‘৫২টি প্রোগ্রামিং সমস্যা ও সমাধান‘ বইতে। এই সমস্যাগুলোর সমাধানের চেষ্টা করলে তোমার প্রোগ্রামিং ও সি ল্যাঙ্গুয়েজের বেসিক শক্ত হয়ে যাবে। ভার্সিটির ক্লাশ শুরুর আগে এতটুকু ভালোভাবে রপ্ত করতে পারলে তোমার আর পেছনে ফিরে তাকাতে হবে না।

ক্লাশ শুরু হওয়ার পরে বইগুলো আবার পড়বে (হ্যাঁ, প্রোগ্রামিং বই কেবল একবার পড়ার জন্য নয়)। তারপরে “কম্পিউটার প্রোগ্রামিং ২য় খণ্ড” বইটি পড়া শুরু করে দাও। বইতে প্রোগ্রামিং ও সি ল্যাঙ্গুয়েজের বেশ কিছু জটিল ও গুরুত্বপূর্ণ বিষয় নিয়ে আলোচনা করা হয়েছে।

cpbook2pp         52_book_cover

(বইগুলো রকমারি ডট কম ছাড়াও ঢাকায় নীলক্ষেতের হক লাইব্রেরি ও মানিক লাইব্রেরি-তে পাওয়া যায়।)

rokimg_20150817_102370

আর ভার্সিটিতে অনেক সিনিয়র ভাইয়া-আপুরা তাদের নিজেদের দূর্বলতা ঢেকে রাখার জন্যই হোক, কিংবা নিজেদের কম জানার কারণেই হোক, জুনিয়রদের অনেক উল্টা-পাল্টা গাইডলাইন দেয় – ‘এটা করলে ভালো হবে’, ‘সেটা করার দরকার নাই’ এরকম। তাই আমি বাংলাদেশের এক ডজন সফল প্রোগ্রামারের সাক্ষাৎকার নিয়েও একটি বই লিখেছি ‘প্রোগ্রামিং ক্যারিয়ার গাইডলাইন: এক ডজন প্রোগ্রামারের কথা‘ – যেটি শিক্ষার্থীদের অনুপ্রেরণা যোগাবে ও সঠিক পথ দেখাবে।

প্রোগ্রামিং যাত্রা শুভ ও আনন্দময় হোক।

প্রোগ্রামিং শেখার ১০টি লিঙ্ক

যারা প্রোগ্রামিংয়ের জগতে একেবারেই নতুন এবং বাংলা ভাষায় প্রোগ্রামিং শিখতে চায়, তাদের জন্য ১০টি দরকারি লিঙ্ক : 

১) দ্বিমিক কম্পিউটিং – অনলাইনে বাংলায় তথ্যপ্রযুক্তি বিষয়ক বিভিন্ন ফ্রি কোর্স (ভিডিও লেকচার)। নতুনদের জন্য সি প্রোগ্রামিংয়ের ওপরও একটি কোর্স রয়েছে এখানে। :http://dimikcomputing.com/

২) কম্পিউটার প্রোগ্রামিং বইটির ওয়েব ভার্শন (ফ্রি) :http://cpbook.subeen.com/

৩) কম্পিউটার প্রোগ্রামিং বইয়ের পিডিএফ ডাউনলোড : http://goo.gl/vv0kRN

cpbookimg

৪) প্রোগ্রামিং বিষয়ক বই:

কম্পিউটার প্রোগ্রামিং ১ম খণ্ড

কম্পিউটার প্রোগ্রামিং ২য় খণ্ড

৫২টি প্রোগ্রামিং সমস্যা ও সমাধান

প্রোগ্রামিং কনটেস্ট – ডাটা স্ট্রাকচার ও অ্যালগরিদম

প্রোগ্রামিং ক্যারিয়ার গাইডলাইন – এক ডজন প্রোগ্রামারের কথা

৫) কম্পিউটার প্রোগ্রামিং বইয়ের ফ্রি অ্যান্ড্রয়েড অ্যাপ

৬) প্রোগ্রামিং শেখার গাইডলাইন (তামিম শাহ্‍‍রিয়ার সুবিন)

৭) প্রোগ্রামিং শেখার গাইডলাইন (তানভীরুল ইসলাম) :http://goo.gl/M1DeIZ

৮) প্রোগ্রামাবাদ – প্রোগ্রামিং প্রশ্নোত্তরের জন্য ওয়েবসাইট : http://programabad.com

 

৯) বাংলা ভাষায় প্রোগ্রামিং সমস্যা :http://cpbook.subeen.com/p/blog-page_11.html

১০) ফেসবুক গ্রুপ :https://www.facebook.com/groups/programming.school/