FAQ – পাইথন দিয়ে প্রোগ্রামিং শেখা

পাইথন দিয়ে প্রোগ্রামিং শেখা (লেখক তামিম শাহরিয়ার সুবিন) বই সম্পর্কে কিছু সচরাচর জিজ্ঞাসিত প্রশ্নের উত্তর –

১) কোন প্রকাশনী থেকে বইটি প্রকাশিত হয়েছে?

উত্তরঃ দ্বিমিক প্রকাশনী (ওয়েবসাইট http://dimik.pub )

২) বইয়ের দাম কত?

উত্তরঃ গায়ের দাম ২০০ টাকা (দোকানে একটু কম রাখার কথা)।

৩) বইতে পাইথন ২ নাকি পাইথন ৩ ব্যবহার করা হয়েছে?

উত্তরঃ পাইথন ৩।

৪) আমি (তামিম শাহরিয়ার সুবিন-এর) কম্পিউটার প্রোগ্রামিং ১ম ও ২য় খণ্ড বইটি পড়েছি, এখন কি পাইথন বইটি পড়ব?

উত্তরঃ পাইথন শেখার কোনো দরকার থাকলে পড়া যেতে পারে, নইলে পড়ার দরকার নাই।

৫) বইটা কাদের জন্য উপযোগি?

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

৬) “পাইথন পরিচিতি” ও “পাইথন দিয়ে প্রোগ্রামিং শেখা” বই দুটির মধ্য পার্থক্য কী?

পাইথন পরিচিতি বইতে পাইথন 2.x ব্যবহার করা হয়েছে, আর পাইথন দিয়ে প্রোগ্রামিং শেখা বইটিতে 3.x। পাইথন পরিচিতি বইটি অভিজ্ঞ প্রোগ্রামার যারা পাইথন শিখতে চায়, তাদের জন্য, আর পাইথন দিয়ে প্রোগ্রামিং শেখা বইটি যারা নতুন প্রোগ্রামিং শিখতে চায়, তাদের জন্য।

৭) বইটি কোথায় পাওয়া যাবে?

নীলক্ষেতের হক লাইব্রেরি, মানিক লাইব্রেরি ও রানা বুক পাবলিশার্স-এ (ফোন নাম্বার দ্বিমিকের ওয়েবসাইটে দেওয়া আছে)। এছাড়া ঘরে বসে অনলাইনে অর্ডার করা যাবে রকমারি ডট কম-এ।

৮) ঢাকার বাইরে থেকে কিভাবে কিনব?

উত্তরঃ উপরে উল্লেখিত (নীলক্ষেতের) তিনটি বইয়ের দোকানে যোগাযোগ করতে হবে (ঠিকানা দ্বিমিকের ওয়েবসাইটে দেওয়া আছে)। এছাড়া rokomari.com বাংলাদেশের যেকোনো জায়গায় বই পৌঁছে দেয়।

৯) বাংলাদেশের বাইরে থেকে কিভাবে কিনব?

উত্তরঃ জানি না।

১০) বইতে কী কী বিষয় আলোচনা করা হয়েছে?

উত্তরঃ বইয়ের ওয়েবসাইটে বিস্তারিত আছে ঃ http://dimik.pub/book/155/

১১) পাইথন সম্পর্কিত কিছু প্রশ্ন ছিল, কোথায় জিজ্ঞাসা করবো?

উত্তরঃ পাইথন নিয়ে জিজ্ঞাসা থাকলে নিচের দুটি গ্রুপে কিংবা প্রোগ্রামাবাদে প্রশ্ন করতে হবে:

১২) আচ্ছা, পাইথন কী?

উত্তরঃ বিস্তারিত লিখেছি এই লেখায় : পাইথন কী?

প্রোগ্রামিং ল্যাঙ্গুয়েজ

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

আমি যখন কলেজে পড়তাম, তখন কিউ-বেসিক (Q Basic) নামে একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ব্যর্থ চেষ্টা করেছিলাম। কিউ-বেসিক ল্যাঙ্গুয়েজটা আমাদের সিলেবাসে ছিল আর কী। এইচএসসি পরীক্ষার পরে কম্পিউটার কিনি, তখন এইচটিএমএল (HTML) শিখলাম কিছুটা, যদিও এটা ঠিক প্রোগ্রামিং ল্যাঙ্গুয়েজ না। তারপরে ২০০১ সালের শুরু থেকে সি (C) শেখা শুরু করি। আমাদের ভার্সিটির ক্লাস শুরু হয় ২০০১ সালের মে মাসে, আর ততদিনে সি এর বেসিক কিছুটা শেখা হয়েছে। আমি আমার বাকী ভার্সিটি-জীবন এর সুবিধা ভোগ করি। আমার যদি ভার্সিটির সি কোর্সের ক্লাশ থেকে সি শেখা লাগতো, তাহলে একটু অসুবিধাই হতো হয়ত, যেটা আমার অনেক ক্লাসমেটকে দেখে বুঝতে পেরেছি। সি শেখার সময় প্রথম বছরে ৩-৪টা বই কিনেছিলাম, যদিও সবগুলো বই শুরু থেকে শেষ পর্যন্ত পড়ি নাই। এক বছর সি শেখার পরে আমি হার্বার্ট শিল্ডের টিচ ইয়োরসেল্ফ সি প্লাস প্লাস বইটা পড়ি। কিন্তু এরপরে আর আমার সি প্লাস প্লাস (C++) চর্চা করা হয় নাই।

ভার্সিটির ফার্স্ট ইয়ারে একটা ছোট প্রজেক্ট করতে হয়েছিল, যেখানে এইচটিএমএল-এর পাশাপাশি একটু জাভাস্ক্রিপ্টও (Javascript) ব্যবহার করতে হয়েছিল। সেই ২০০২ সালের শুরুর দিকের ঘটনা। অল্প একটু জাভাস্ক্রিপ্ট শিখেছিলাম। আমার ইচ্ছা ছিল আমার এক বন্ধুকে দিয়ে প্রজেক্টটা করিয়ে ফেলবো। তো ব্যাটা রাত ২টার দিকে ঘুমিয়ে গেল, আমি চারটা পর্যন্ত অপেক্ষা করলাম। কারণ ওইদিনই প্রজেক্ট জমা দিতে হবে। চারটার পরে আমি আর কোনো উপায় না দেখে নিজেই কাজ করতে বসে গেলাম এবং শেষ পর্যন্ত কাজটা করেও ফেললাম। এরপরেও মাঝে মাঝে জাভাস্ক্রিপ্ট ব্যবহার করতে হয়েছিল, কিন্তু তেমন ভালোভাবে শেখা হয় নাই। আর গত চার-পাঁচ বছরে জাভাস্ক্রিপ্টে কিছুই করি নাই।

ভার্সিটির সেকেন্ড ইয়ারে অবজেক্ট ওরিয়েন্টেড কোর্স ছিল। সেই কোর্সে জাভা (Java) শিখি। আর তারপরের সেমিস্টারে একটা প্রজেক্টও করি জাভা ব্যবহার করে। তারপরে ২০০৬-২০০৭ সালে কিছু টুকটাক কাজ করতে জাভা ব্যবহার করেছিলাম।

সম্ভবত ফোর্থ ইয়ারে আমাদের মাইক্রোপ্রসেস কোর্স ছিল, সেই কোর্সের ল্যাবের জন্য এসেম্বলি ল্যাঙ্গুয়েজ (Assembly Language) শিখতে হয়েছিল।

আমার প্রথম প্রফেশনাল চাকরি ছিল টাইগার আইটি-তে, ২০০৭ সালের মাঝামাঝি। সেখানে আমি যেই প্রজেক্টে জয়েন করলাম, সেই প্রজেক্টে পার্ল (Perl) প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করতে হয়। কিন্তু আমি আগে কখনও এই ল্যাঙ্গুয়েজের নাম শুনি নাই। তাই বলে আমার কিন্তু চাকরি পেতে সমস্যা হয় নাই। কারণ ভালো কোম্পানীগুলো বেশি গুরুত্ব দেয় প্রবলেম সলভিং স্কিলের ওপর, প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ওপর নয়।

আমার দ্বিতীয় সফটওয়্যার ইঞ্জিনিয়ারিং চাকরি ছিল ট্রিপার্ট ল্যাবসে (যেটা পরে প্লেডম কিনে নেয়, আবার প্লেডমকে ডিজনী কিনে নেয়)। সেখানে ব্যাকএন্ডের কাজ হতো পিএইচপি (PHP) প্রোগ্রামিং ল্যাঙ্গুয়েজে। আর মাঝেমধ্যে অল্পস্বল্প জাভাস্ক্রিপ্ট। তো সেই চাকরির ইন্টারভিউতে আমাকে জিজ্ঞাসা করল যে পিএইচপি পারি কী না। আমি সোজা বলে দিলাম যে পারি না, কারণ এর আগে ২-৩ দিন পিএইচপি নিয়ে গুতাগুতি করলেও সেটা বলার মতো কিছু না। কিন্তু সেজন্য আমার চাকরি পাওয়া আটকায় নাই। সেখানে এক বছর কাজ করার পরে একটা নতুন প্রজেক্টে কাজ করতে হয়, আর সেই প্রজেক্ট হচ্ছে অ্যাকশন স্ক্রিপ্ট (Actionscript)-এ। তো সেটাও দুই-তিন দিন শিখে কাজ শুরু করে দেই।

তারপরে তিন বছর আমার নিজের কোম্পানী মুক্তসফট নিয়ে ব্যস্ত ছিলাম। সেখানে পিএইচপি, পার্ল, পাইথন (Python) – এসব ল্যাঙ্গুয়েজ ব্যবহার করেছি, যখন প্রোগ্রামিং করতে হয়েছে। জেকুয়েরি ব্যবহার করেও একটা প্রজেক্ট করেছিলাম। আসলে ক্লায়েন্ট যেই ল্যাঙ্গুয়েজ চাইতো, সেটাই ব্যবহার করতাম। আর ক্লায়েন্ট কিছু না বললে পাইথন। তারপরে দুই বছর একটা আমেরিকান কোম্পানীর কাজ করি, সেখানে আমি পাইথন ব্যবহার করার সিদ্ধান্ত নেই, কারণ পাইথনে কোড করতে ভালো লাগে এবং সময় কম লাগে।

২০১৫ সালের মাঝামাঝি আমি সিঙ্গাপুরের গ্র্যাব নামক কোম্পানীতে ইন্টারভিউ দেই। বেশ কয়েকটা ইন্টারভিউ হয় এবং সেখানে আমি সি ব্যবহার করি, প্রবলেম সলভ করার জন্য। ইন্টারভিউ শেষে অফার পেয়ে জয়েন করি। জয়েন করার পরে জানতে পারলাম যে এখানে গো (Go বা Golang) ব্যবহার করা হয়, তাই প্রথম কিছুদিন গো শিখি। লক্ষ্য করার বিষয় হচ্ছে এত বড় কোম্পানী এত বেতন দিয়ে অন্য দেশ থেকে ইঞ্জিনিয়ার হায়ার করছে, ওরা কিন্তু এই বিষয় নিয়ে মাথা ঘামায় নাই যে আমি গো পারি কী না। সুতরাং বোঝাই যাচ্ছে যে কয়টা প্রোগ্রামিং ল্যাঙ্গুয়েজ পারি, এটা আসলে বিবেচ্য বিষয় নয়। কম্পিউটার সায়েন্সের বেসিক জ্ঞান (ডাটা স্ট্রাকচার, অ্যালগরিদম, অপারেটিং সিস্টেম, ডাটাবেজ, অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং, নেটওয়ার্কিং ইত্যাদি) এবং প্রবলেম সলভিং স্কিল-ই একজন ভালো সফটওয়্যার ইঞ্জিনিয়ার হওয়ার পূর্বশর্ত। আর কাজ করতে করতে সফটওয়্যার ইঞ্জিনিয়ারিংটাও শেখা হয়ে যায়, তবে তার জন্য ভালো কোম্পানীতে কাজ করাটা জরুরী।

বাইনারি সার্চ-এর কোড

আজকে সকালে গো (Go) প্রোগ্রামিং ল্যাঙ্গুয়েজে একটু কোডিং প্র্যাকটিস করার জন্য বাইনারি সার্চ ফাংশন লিখলাম, তারপরে ইউনিট টেস্ট লিখলাম (টেবল ড্রিভেন টেস্ট)। তো এমন সময় আমার মনে হলো লাইব্রেরি ফাংশনগুলো কিভাবে ইমপ্লিমেন্ট করা, সেটা দেখা দরকার। তো গো এর লাইব্রেরিতে যে বাইনারি সার্চ আছে, তার কোড (এবং ডকুমেন্টেশন) দেখে তো আমি মুগ্ধ!
এটা হচ্ছে গো-এর কোড:

func Search(n int, f func(int) bool) int {
    // Define f(-1) == false and f(n) == true.
    // Invariant: f(i-1) == false, f(j) == true.
    i, j := 0, n
    for i < j {
	h := i + (j-i)/2 // avoid overflow when computing h 
        if !f(h) { 
            i = h + 1 // preserves f(i-1) == false 
        } else { 
            j = h // preserves f(j) == true 
        } 
    } 
    return i
}

ওপরের কোডটুকু দেখলে আসলে পুরোপুরি বোঝা যাবে না কেন আমি এত মুগ্ধ। এই লিঙ্কে গেলে বিষয়টা আরো পরিষ্কার হবে: https://golang.org/src/sort/search.go। কোডের চেয়ে ডকুমেন্টেশন অনেক বেশি। আর এই বেশি ডকুমেন্টেশনসহ কোড হচ্ছে ১১৩ লাইন। কিন্তু বিষয় এখানেই শেষ নয়। আমার তারপরে চিন্তা আসল, আচ্ছা, এত সুন্দর কোড আর ডকুমেন্টেশন – এই কোডের টেস্ট কোড (ইউনিট টেস্ট) ওরা কিভাবে লিখল? তার জন্য চলে গেলাম এই লিঙ্কেঃ https://golang.org/src/sort/search_test.go। ১১৩ লাইনের search.go এর জন্য search_test.go তে আছে ১৬২ লাইন। এই দুইটা ফাইলের কোড এবং ডকুমেন্টেশন ঠিকমতো পড়লে শেখার আছে অনেক কিছুই।

তারপর চিন্তা করলাম, গো এর কোড এত সুন্দর, সি এর লাইব্রেরিতে এটা কিভাবে করা হয়েছে? গুগল সার্চ করে খুঁজে বের করলাম কোড।

void *
bsearch (register const void *key, const void *base0,
    size_t nmemb, register size_t size,
    register int (*compar)(const void *, const void *))
{
    register const char *base = (const char *) base0;
    register int lim, cmp;
    register const void *p;

    for (lim = nmemb; lim != 0; lim >>= 1) {
        p = base + (lim >> 1) * size;
        cmp = (*compar)(key, p);
        if (cmp == 0)
            return (void *)p;
        if (cmp > 0) {	/* key > p: move right */
            base = (const char *)p + size;
            lim--;
        } /* else move left */
    }
    return (NULL);
}

এই কোডটাও বেশ সুন্দর, গুছানো। ডকুমেন্টেশনও ভালো। আর পয়েন্টার দেখে ভয় পাওয়ার কারণ নাই (পয়েন্টার নিয়ে আমি কম্পিউটার প্রোগ্রামিং ২য় খণ্ড বইতে বিস্তারিত আলোচনা করেছি অনেক উদাহরণসহ)। তবে এখানে গিয়ে পুরো ফাইলটা না দেখলে এর মর্ম বোঝা যাবে না : https://github.com/gcc-mirror/gcc/blob/master/libiberty/bsearch.c

গো আর সি-এর কোড যেহেতু দেখলাম, পাইথনের কোডটাও দেখা যাক। তাই সেটাও সার্চ করে বের করে ফেললাম :

def bisect_left(a, x, lo=0, hi=None):
    """Return the index where to insert item x in list a, assuming a is sorted.

    The return value i is such that all e in a[:i] have e < x, and all e in a[i:] have e >= x.  So if x already appears in the list, a.insert(x) will
    insert just before the leftmost x already there.

    Optional args lo (default 0) and hi (default len(a)) bound the
    slice of a to be searched.
    """

    if lo < 0:
        raise ValueError('lo must be non-negative')
    if hi is None:
        hi = len(a)
    while lo < hi:
        mid = (lo+hi)//2
        if a[mid] < x: lo = mid+1
        else: hi = mid
    return lo

গো আর সি এর তুলনায় বেশ সহজ! তবে ডকুমেন্টেশন সংক্ষিপ্ত হলেও ভালো। এখানে গিয়ে পুরো কোড দেখা যাবে : https://github.com/python-git/python/blob/master/Lib/bisect.py

তারপরে ভাবলাম, আমার ব্লগের পাঠকদেরকে বিষয়টা জানানো যাক। আশা করি, বিশ্বমানের প্রোগ্রামারদের কোডের সঙ্গে পাঠকদের কিছুটা হলেও পরিচয় করিয়ে দিতে পেরেছি। কোডিং সঠিক হোক, কোড সুন্দর হোক।

ইউনিট টেস্টিং

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

ইউনিট টেস্ট কিভাবে করে? ফাংশন লেখার পরে ওই ফাংশনের জন্য আলাদা একটি ফাইলে আরেকটি ফাংশন লিখতে হবে যেটি বিভিন্ন ইনপুট প্যারামিটারের মাধ্যমে ওই ফাংশনকে কল করবে। তারপরে আউটপুট মিলিয়ে দেখতে হবে যে আমরা যেই আউটপুট আশা করছি আর ফাংশনটি যেই আউটপুট দিচ্ছে – দুটি সমান কী না। ব্যাস, আমাদের ইউনিট টেস্ট হয়ে গেল। ইন্ডাস্ট্রিতে প্রচলিত সব প্রোগ্রামিং ল্যাঙ্গুয়েজেই ইউনিট টেস্ট সহজ করার জন্য বিভিন্ন প্যাকেজ তৈরি করা থাকে। যদিও এসব প্যাকেজ ব্যবহার না করেও ইউনিট টেস্ট করা যায়, যেহেতু প্যাকেজ তৈরি করে দেওয়া আছে, তাই প্যাকেজ ব্যবহার না করার কোনো কারণ নেই। আমরা এখন পাইথনে একটি সহজ উদাহরণ দেখবো।

পাইথনে unittest নামে একটি বিল্ট-ইন মডিউল রয়েছে যেটি ব্যবহার করে ইউনিট টেস্ট করা যায়। কিন্তু আমরা ব্যবহার করবো pytest কারণ এটি ব্যবহার করা অনেক বেশি সহজ। তবে এটি আলাদাভাবে ইনস্টল করতে হয়। কীভাবে ইনস্টল করতে হয়, সেটি ওদের অফিশিয়াল ডকুমেন্টশন থেকে দেখে নিতে হবে, এই লেখা পড়ার জন্য পাইটেস্ট ইনস্টল করার দরকার নেই, পরে করলেও হবে (কারণ এই লেখার উদ্দেশ্য হচ্ছে ইউনিট টেস্টিং সম্পর্কে প্রাথমিক ধারণা দেওয়া)। আরেকটি জিনিস জানতে হবে, সেটি হচ্ছে assert স্টেটম্যান্ট। assert এর পরে কোনো কিছু লিখলে পাইথন সেটা চালিয়ে দেখে এবং ফলাফল হয় True না হয় False হয়। ফলাফল False হলে পাইথন AssertionError এক্সেপশন দেয়।

ধরা যাক, আমাকে একটি প্রোগ্রাম লিখতে বলা হলো, যেটি ইনপুট হিসেবে একটি বছর নেবে এবং বছরটি লিপ ইয়ার কী না, সেটি বলে দেবে। লিপ ইয়ার হলে True আর লিপ ইয়ার না হলে False রিটার্ণ করবে। আমি জানি যে, কোনো সালকে যদি 4 দিয়ে ভাগ করলে ভাগশেষ শূণ্য হয়, তাহলে সেটি লিপ ইয়ার। তো আমি ঝটপট পাইথনে সেটি লিখে ফেললাম :

def is_leap_year(year):
        """This functon returns True if year is a leap year, returns False otherwise"""
        if year % 4 == 0:
                return True
        return False

এখন এই ফাংশনের জন্য ইউনিট টেস্ট লিখব :

def test_is_leap_year():
        assert is_leap_year(2016) == True
        assert is_leap_year(2015) == False

আমি আমার প্রোগ্রাম leapyear.py নামে সেভ করলাম। এখন pytest রান করাবো।

 tamimshahriar$ pytest leapyear.py 

======= test session starts========

platform darwin -- Python 3.5.1, pytest-3.0.3, py-1.4.31, pluggy-0.4.0

rootdir: /Users/tamimshahriar/work/practice/pypractice, inifile: 

collected 1 items 

leapyear.py .

======= 1 passed in 0.01 seconds =====

ওপরে দেখতে পাচ্ছি যে আমার টেস্ট ঠিকঠাকভাবে পাশ করেছে, কোনো সমস্যা নেই। এখন আমি খোঁজখবর নিয়ে জানলাম যে 2100 সাল নাকি আসলে লিপইয়ার না, কারণ সালটা যদি 100 দিয়ে বিভাজ্য হয়, সেটা 400 দিয়েও বিভাজ্য হতে হবে। তাহলে আমি এই টেস্ট কেইসটি আমার টেস্টে যোগ করে আবার টেস্ট রান করবো। এখন আমার টেস্ট ফাংশনটি হবে এরকম :

def test_is_leap_year():
        assert is_leap_year(2016) == True
        assert is_leap_year(2015) == False
        assert is_leap_year(2100) == False

এখন আবার টেস্ট রান করি : pytest leapyear.py, আউটপুট আসবে এরকম :

========= FAILURES ===========
_______ test_is_leap_year __________

    def test_is_leap_year():
        assert is_leap_year(2016) == True
        assert is_leap_year(2015) == False
>       assert is_leap_year(2100) == False
E     assert True == False
E     +  where True = is_leap_year(2100)

leapyear.py:10: AssertionError

===== 1 failed in 0.03 seconds =====

কোন টেস্ট কেইস ফেইল করেছে সেটা একটা তীরচিহ্ন দিয়ে দেখানো হয়েছে। এখন আমি আমার অরিজিনাল ফাংশনের কোড ঠিক করলে টেস্ট কেস পাশ করবে (পাঠকদের সেটি করার পরামর্শ দেওয়া হলো)।

ইউনিট টেস্ট করার সময় বিভিন্ন ধরনের কেস টেস্ট করা উচিত। ইউনিট টেস্টের সুবিধা হচ্ছে :

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

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

অ্যারোস্পেসে ক্যারিয়ার গড়তে হলে

বিশ্ব মহাকাশ সপ্তাহ (World Space Week) উপলক্ষে ন্যাশনাল ইউনিভার্সিটি অব সিঙ্গাপুরে চলছে বিভিন্ন অনুষ্ঠান। গতকাল (শুক্রবার) সেখানে যাই তানভীরুল ইসলামের একটা বক্তৃতা শোনার জন্য।

এমা লেম্যান
এমা লেম্যান

তানভীরের বক্তৃতার পরই “Building a Career in Aerospace” শিরোনামে আরেকটি বক্তৃতা শুনি। বক্তৃতা করেন এমা লেম্যান (Ms. Emma Lehman), যিনি বর্তমানে গুগলের একটি প্রতিষ্ঠান টেরাবেলা-তে ফ্লাইট অপারেশনস টিমের নেতৃত্ব দিচ্ছেন।

 

সেখানে কী কাজ হয়, জানা যাবে নিচের ভিডিও থেকে:

সেখানে তিনি অ্যারোস্পেস-এ ক্যারিয়ার গড়ার জন্য নয়টি পরামর্শ দেন এমা। যদিও এগুলো নিয়ে তিনি বিস্তারিত বলেন, আমি কেবল বিষয়গুলোর নাম উল্লেখ করছি।

Jpeg
building a career in aerospace

১) লিখতে জানতে হবে: বিজ্ঞানীদের বিভিন্ন রিসার্স পেপার, গ্র্যান্ট প্রপোজাল ইত্যাদি খুব ভালোভাবে লিখতে হয়। তাই লেখালেখি-তে দক্ষতা অর্জন করতে হবে।

২) লেগে থাকতে হবে: কোনো কিছুই সহজ নয়, লেগে থাকা চাই। শুরুতে কোনো কাজ ভালো নাও লাগতে পারে। কিন্তু পরিশ্রম করে যেতে হবে। তাতে একসময় কাজটা সহজ হয়ে যাবে।

৩) নিজের নেটওয়ার্ক ব্যবহার করতে হবে: কেউ যখন লেখাপড়া শেষ চাকরির জন্য তৈরি, তখন নিজের কানেকশন মানে পরিচিত মানুষদের কাজে লাগাতে হবে। চাকরির জন্য কারো কাছে সিভি পাঠানোতে লজ্জ্বার কিছু নেই।

৪) ঝুঁকি নিতে হবে: সবসময় নিরাপদ চাকরি বেছে নিলে সেটা ক্যারিয়ারের জন্য ভালো নাও হতে পারে।

৫) এমন একটি কাজ বা চাকরি খুঁজে নিতে হবে, যেটি তুমি উপভোগ করবে আর কাজ থেকে তুমি অনুপ্রেরণাও পাবে।

৬) সবসময় আরামের কাজ খুুঁজবে না। যেসব জিনিস তুমি জানো, সহজেই করতে পারো, এরকম কাজ বারবার করে কোনো লাভ নেই।

ওপরের পরার্মশগুলো কেবল অ্যারোস্পেস না, সবার জন্যই সমানভাবে প্রযোজ্য। নিচের তিনটি অ্যারোস্পেসে ক্যারিয়ার গড়তে আগ্রহীদের জন্য বিশেষভাবে বলা:

৭) অ্যারোস্পেস স্টার্টআপে কাজ নিলে কাজ করার সুযোগ অনেক বেশি পাওয়া যায়। তাই স্টার্টআপেই কাজ খুঁজে নেওয়া উচিত।

৮) অ্যারোস্পেসের জগতেই অনেক ধরণের কাজ আছে। আমি কেবল এরকম কাজ করবো, বা এরকম কোম্পানীতে কাজ করব, এরকম মানসিকতা না রেখে নতুন চ্যালেঞ্জ নেওয়ার ব্যাপারে ফ্লেক্সিবল থাকতে হবে।

৯) পাইথন প্রোগ্রামিং শিখতে হবে।

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

এক ঘণ্টার পাইথন কোডিং

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

তো সামনে “কম্পিউটার বিজ্ঞান শিক্ষা সপ্তাহ” উদযাপনের একটি গুরুত্বপূর্ণ অংশ হচ্ছে “আওয়ার অব কোড“। সারা পৃথিবীর সাথে সাথে বাংলাদেশেও এটি বেশ ঘটা করে পালন করার উদ্যোগ নিয়েছে বিডিওএসএন, আর সাথে গত দুই বছরের মতো এবারেও আছে দ্বিমিক কম্পিউটিং। অনুষ্ঠানের বিস্তারিত জানা যাবে এই ওয়েবসাইটে : http://cseweek.bdosn.org

বেশিরভাগ মানুষই code.org ওয়েবসাইটে যেই গেমটি দেওয়া আছে, সেটি ব্যবহার করে ‘আওয়ার অব কোড’ পালন করবে। তবে সবার জন্য এটি উপভোগ্য কিংবা উপকারি না ও হতে পারে। বাংলাদেশের প্রেক্ষাপটে কেউ যদি ষষ্ঠ শ্রেণী বা তার ওপরের ক্লাসের শিক্ষার্থীদের নিয়ে এক ঘণ্টার কোডিং করতে চান, আমার পরামর্শ হবে পাইথন ভাষা ব্যবহার করে কয়েকটি প্রোগ্রাম লিখে দেখানোর।

প্রথমেই শিক্ষার্থীদের বলতে হবে, প্রোগ্রামিং কেন শিখবে। তাদের সাথে প্রোগ্রামিং ও প্রোগ্রামারদের নিয়ে গল্প করতে হবে। গল্প-স্বল্প বলা শেষ হলে শুরু করতে হবে এক ঘণ্টার পাইথন কোডিং

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

২) দ্বিতীয় কাজ হচ্ছে “Hello World” প্রোগ্রাম লেখা। এটি যে প্রোগ্রামিং সংস্কৃতির একটি অংশ, সেটি শিক্ষার্থীদের জানাতে হবে।

৩) 1 থেকে 100 পর্যন্ত সমস্ত পূর্ণসংখ্যা প্রিন্ট করার প্রোগ্রাম দেখাতে হবে। প্রথমে কেবল while লুপ ব্যবহার করে। তারপর for লুপ এবং range() ফাংশন ব্যবহার করে। লুপের ধারণা দিতে হবে। ফাংশন নিয়েও কিছু কথা বলতে হবে। তবে বেশি কথা বলে শিক্ষার্থীদের বিরক্ত করা যাবে না।

৪) এবারে লুপ নিয়ে আরো খেলাধূলা করতে হবে। 1, 3, 5, …, 99 প্রিন্ট করা ও 2, 4, 6, …, 98, 100 প্রিন্ট করার প্রোগ্রাম দেখাতে হবে। তবে এর আগে শিক্ষার্থীদের ১০-১৫ মিনিট সময় দিলে ভালো হয় যেন তারা নিজেরা কাজটি করার চেষ্টা করে। তারপর সংখ্যাগুলোকে বড় থেকে ছোট ক্রমেও প্রিন্ট করার প্রোগ্রাম দেখাতে হবে। শুধু লুপ ব্যবহার করে একবার দেখাতে হবে, তারপর range() ফাংশন ব্যবহার করে।

৫) এবারে কন্ডিশনাল লজিকের ধারণা দিতে হবে। এর জন্য আবার 1 থেকে 100 পর্যন্ত জোড়সংখ্যা ও বিজোড় সংখ্যা প্রিন্ট করার প্রোগ্রাম দেখাতে হবে।

৬) 1 থেকে 1000 এর মধ্যে সমস্ত পূর্ণবর্গ সংখ্যা (1, 4, 9, 16 …) প্রিন্ট করার প্রোগ্রাম দেখাতে হবে। প্রোগ্রামটি একাধিকভাবে লিখে দেখাতে হবে।

৭) লিস্টের ব্যবহার দেখাতে হবে। এর জন্য নিচের তিনটি প্রোগ্রাম দেখালে ভালো হয়:

day = raw_input()
if day in ["Friday", "Saturday"]:
   print day, "is holiday"
else:
   print day, "is not a holiday"
name = raw_input()
if name in ["Rose", "Tulip", "Lily", "Daffodil"]:
   print name, "is a flower"
elif name in ["Mango", "Jackfruit", "Guava", "Papaya"]:
   print name, "is a fruit"
else:
   print "I don't know!"
while True:
   name = raw_input()
   if name == "Exit":
      break
   if name in ["Rose", "Tulip", "Lily", "Daffodil"]:
      print name, "is a flower"
   elif name in ["Mango", "Jackfruit", "Guava", "Papaya"]:
      print name, "is a fruit"
   else:
      print "I don't know!"

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

সবাইকে অংশগ্রহনের জন্য সার্টিফিকেট দিলে সবাই হয়ত উৎসাহ পাবে।

পাইথনের জন্য কিছু লিঙ্ক:
১) হুকুশ-পাকুশের প্রোগ্রামিং শিক্ষা : http://hukush-pakush.com
২) Hour of Python : https://hourofpython.com
৩) পাইথনের ওপর ফ্রি ভিডিও লেকচার: http://pyvideo.subeen.com
৪) পাইথনের ওপর বাংলায় লেখা বই : http://bit.ly/pybook (প্রোগ্রামিংয়ে একেবারে নতুনদের জন্য উপযোগি নয়)।

কোড ইট গার্লের প্রোগ্রামিং কর্মশালা

শেষ হল Code it, Girl-এর প্রথম ইভেন্ট – প্রোগ্রামিংয়ের ওপর দিনব্যাপী কর্মশালা। ২৩ টি স্কুল/ কলেজ থেকে মোট ৪৩ জন ছাত্রী কর্মশালায় অংশগ্রহণ করেছে।  ওয়ার্কশপটি ছিল আট ঘণ্টার এবং ওয়ার্কশপে শিক্ষার্থীরা কম্পিউটার ব্যবহার করে হাতে-কলমে প্রোগ্রামিং করে। কর্মশালার বেশিরভাগ সময়ই তারা কাটায় পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজ দিয়ে নানান রকমের প্রোগ্রামিং করে। এছাড়া সার্চ ইঞ্জিনের ব্যবহার ও লিনাক্সের ব্যবহার সম্পর্কে তারা ধারণা লাভ করে ও আওয়ার অব কোড-এ অংশ নেয়।

10931001_895620120470590_5378801531121384549_n10940492_10153018552575797_3949335118392846653_n

কর্মশালাটি পরিচালনা করেন দ্বিমিক কম্পিউটিং-এর তামিম শাহরিয়ার সুবিন এবং তাহমিদ রাফি। তাদের সাথে আরো ছিলেন সফটওয়্যার প্রকৌশলী আশিকুর রহমান মুশফিক এবং রাশিদুল হাসান সৈকত।

10580036_10153018552515797_7995244114120466878_n

ইভেন্টটি স্পন্সর করেছে হাফিযা খাতুন মেমোরিয়াল ট্রাস্ট। এই ইভেন্টের ভেন্যু পার্টনার হিসাবে ছিল ড্যাফোডিল ইন্টারন্যাশনাল বিশ্ববিদ্যালয়। ইন্সপিরেশন পার্টনার ছিল কিশোর আলো। পার্টনার হিসাবে সহায়তার হাত বাড়িয়েছে বাংলাদেশ ওপেন সোর্স নেটওয়ার্ক (বিডিওএসএন)। আর ওয়ার্কশপের পরিকল্পনা ও সকল প্রকার একাডেমিক সহযোগীতায় ছিল দ্বিমিক কম্পিউটিং।

সন্ধ্যায় ওয়ার্কশপ-এর সমাপনী পর্ব অনুষ্ঠিত হয় ড্যাফোডিল বিশ্ববিদ্যালয়ের অডিটোরিয়ামে। সেখানে উপস্থিত ছিলেন বুয়েটের অধ্যাপক ডক্টর মোহাম্মদ কায়কোবাদ, বাংলাদেশ গণিত অলিম্পিয়াড কমিটির সাধারণ সম্পাদক জনাব মুনির হাসান, ড্যাফোডিল বিশ্ববিদ্যালয়ের সফটওয়্যার ইঞ্জিনিয়ারিং বিভাগের প্রধান তৌহিদ ভুঁইয়া, ভ্যানটেজ ল্যাবস এর ডেভেলপমেন্ট ম্যানেজার মোজাম্মেল হক, Code it, girl এর মেনটর এবং দ্বিমিক কম্পিউটিং এর সহপ্রতিষ্ঠাতা তামিম শাহরিয়ার সুবিন, স্পন্সর হাফিযা খাতুন মেমোরিয়াল ট্রাস্ট এর পক্ষ থেকে ফেরদৌস বাপ্পি এবং আরো অনেকে। আর Code it, girl আয়োজকদের পক্ষ থেকে কথা বলেন আফরীন হোসেন। শাহজালাল বিশ্ববিদ্যালয়ের অধ্যাপক জাফর ইকবাল স্যার অনুষ্ঠানে আসতে না পারলেও ফোন করে ছাত্রীদের উদ্দেশ্যে কথা বলেন এবং এই উদ্যোগ এর সাথে নিজের একাত্মতা প্রকাশ করেন। সমাপনী পর্বে আয়োজকরা দেশে ও বিদেশে বড় বড় সফটওয়্যার প্রতিষ্ঠানে কর্মরত সফল নারীদের নিয়ে একটি প্রেজেন্টেশান প্রদর্শন করেছেন যেটা অংশগ্রহণকারীদের প্রোগ্রামিং শিখতে আরও উৎসাহিত করেছে।

Code it, girl! একটি অলাভজনক ও স্বেচ্ছাসেবামূলক প্রতিষ্ঠান, এর উদ্যোক্তারা দেশে-বিদেশে বিভিন্ন সফটওয়্যার প্রতিষ্ঠানে কর্মরত। আয়োজকরা হলেন আফরীন হোসেন, মিরফাত শারমিন, রিজভী বিন ইসলাম, মোশ্তাক আহমেদ ম্যাক, তাপস পাল, আশিকুর রহমান মুশফিক, শুভ্র সরকার, রাশিদুল হাসান সৈকত, ওয়াজদা আখতার এবং নাদিয়া রাহমান বৃষ্টি। আয়োজকরা সবাই এক সময় ওয়ালট ডিজনির অংশ, প্লেডম বাংলাদেশ প্রাইভেট লিমিটেডে গেম ডেভেলপমেন্ট এর কাজ করতেন।

Code it, girl! এর চেষ্টা থাকবে অনলাইন গ্রুপ এর মাধ্যমে প্রতিনিয়ত বিভিন্ন টিউটোরিয়াল, ব্লগ, বই, তথ্য এবং প্রশ্নের উত্তর দিয়ে মেয়েদের কে নিজে নিজে প্রোগ্রামিং শিখতে সাহায্য করা। গ্রুপের সদস্যদের মধ্যে আছেন বেশ কিছু দক্ষ সফটওয়্যার ইঞ্জিনিয়ার যারা এই কাজে সাহায্য করবেন।  আর সুযোগ পেলে এরকম কিছু ওয়ার্কশপের আয়োজন করারও ইচ্ছা আছে এই প্রতিষ্ঠানের। উদ্যোক্তারা আশা করেন ধীরে ধীরে মেয়েরা কম্পিউটার সায়েন্সে পড়তে এবং প্রোগ্রামিং নিয়ে কাজ করতে আরও বেশি উৎসাহিত হবে তাদের এই প্রচেষ্টার মাধ্যমে।

ফেসবুক গ্রুপ এর লিঙ্কঃ https://www.facebook.com/groups/292738210923130/
পেইজের লিঙ্কঃ https://www.facebook.com/codeitgirl

– প্রেস বিজ্ঞপ্তি।

কোড ইট গার্লের উদ্যোগে পাইথন নিয়ে কর্মশালা

Code it, girl! একটি অনলাইন কমিউনিটি, যার যাত্রা শুরু হয়েছে মেয়েদেরকে প্রোগ্রামিং শিখতে উৎসাহিত করার লক্ষে। আমাদের দেশে খুব কম সংখ্যক মেয়ে কম্পিউটার সায়েন্সে পড়ে এবং তার মধ্যেও একটা খুব ছোট অংশ কাজ করতে আসে। এর একটা দীর্ঘমেয়াদি সমাধান হতে পারে মেয়েদেরকে ছোটবেলা থেকেই প্রোগ্রামিং শিখতে সাহায্য করা এবং উৎসাহিত করা, এবং এই দক্ষতার সাথে সম্পর্কিত বিভিন্ন পেশা সম্পর্কে সচেতনতা গড়ে তোলা।

এই উদ্দেশেই Code it, girl! এর প্রথম ইভেন্ট – নবম, দশম এবং একাদশ শ্রেণীর ছাত্রীদের জন্য দিনব্যাপী প্রোগ্রামিং ওয়ার্কশপ। এটি অনুষ্ঠিত হবে জানুয়ারি মাসের ১৭ তারিখ (শনিবার) ড্যাফোডিল বিশ্ববিদ্যালয়ের শুক্রাবাদ ক্যাম্পাসে। ওয়ার্কশপে পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে প্রোগ্রামিং জগতের সাথে মেয়েদের পরিচয় করিয়ে দেওয়া হবে। ওয়ার্কশপটি পরিচালনা করবেন ‘কম্পিউটার প্রোগ্রামিং’ বইয়ের লেখক তামিম শাহরিয়ার সুবিন ও দ্বিমিক কম্পিউটিংয়ের পরিচালক তাহমিদ রাফি। এই ইভেন্টে সকল প্রকার একাডেমিক সহায়তা প্রদান করবে তথ্যপ্রযুক্তি শেখার অনলাইন স্কুল – দ্বিমিক কম্পিউটিং। প্রথম ইভেন্টটি স্পন্সর করছে হাফিযা খাতুন মেমোরিয়াল ট্রাস্ট। এই ইভেন্টের ভেন্যু পার্টনার হিসাবে থাকছে ড্যাফোডিল ইন্টারন্যাশনাল বিশ্ববিদ্যালয়। ইন্সপিরেশন পার্টনার হচ্ছে কিশোর আলো। আর পার্টনার হিসাবে সহায়তার হাত বাড়িয়েছে বাংলাদেশ ওপেন সোর্স নেটওয়ার্ক (বিডিওএসএন)। ওয়ার্কশপ এর সমাপনী পর্বে উপস্থিত থাকবেন সাস্টের অধ্যাপক ড. মুহম্মদ জাফর ইকবাল, বুয়েটের অধ্যাপক ডক্টর মোহাম্মদ কায়কোবাদ, বাংলাদেশ গণিত অলিম্পিয়াড কমিটির সাধারণ সম্পাদক জনাব মুনির হাসান এবং নর্থ সাউথ বিশ্ববিদ্যালয়ের সহকারী অধ্যাপক নোভা আহমেদ। সমাপনী পর্বটি অনুষ্ঠিত হবে ড্যাফোডিল ইন্টারন্যাশনাল বিশ্ববিদ্যালয়ের অডিটোরিয়ামে, শুরু হবে সন্ধ্যা ৭ টায় এবং এটি সবার জন্য উন্মুক্ত। সমাপনী পর্বে আয়োজকরা দেশে ও বিদেশে বড় বড় সফটওয়্যার প্রতিষ্ঠানে কর্মরত সফল নারীদের নিয়ে একটি প্রেজেন্টেশান প্রদর্শন করবে যেটা অংশগ্রহণকারীদের প্রোগ্রামিং শিখতে আরও উৎসাহিত করবে।

Code it, girl! একটি অলাভজনক ও স্বেচ্ছাসেবামূলক প্রতিষ্ঠান, এর উদ্যোক্তারা দেশে-বিদেশে বিভিন্ন সফটওয়্যার প্রতিষ্ঠানে কর্মরত। আয়োজকরা হলেন আফরীন হোসেন, মিরফাত শারমিন, রিযভি বিন ইসলাম, মোশ্তাক আহমেদ ম্যাক, তাপস পাল, আশিকুর রহমান মুশফিক, শুভ্র সরকার, রাশিদুল হাসান সৈকত, ওয়াজদা আখতার এবং নাদিয়া রাহমান বৃষ্টি।

Code it, girl! এর চেষ্টা থাকবে অনলাইন গ্রুপ এর মাধ্যমে প্রতিনিয়ত বিভিন্ন টিউটোরিয়াল, ব্লগ, বই, তথ্য এবং প্রশ্নের উত্তর দিয়ে মেয়েদের কে নিজে নিজে প্রোগ্রামিং শিখতে সাহায্য করা। এমন কিছু বাংলা টিউটোরিয়াল এবং বই আছে যার মাধ্যমে খুব সহজে প্রোগ্রামিং এর বেসিক শেখা সম্ভব, অনেকের জন্যই ইংরেজি বই দিয়ে শুরু করা কঠিন হতে পারে। শুধু বাংলায় নয়, যেকোনো ভাল টিউটোরিয়াল পেলেই শেয়ার করে দেয়া হবে ফেইসবুক গ্রুপে। গ্রুপের মেম্বারদের মধ্যে আছেন বেশ কিছু দক্ষ সফটওয়্যার ইঞ্জিনিয়ার যারা এই কাজে সাহায্য করবেন।  আর সুযোগ পেলে এরকম কিছু ওয়ার্কশপের আয়োজন করার ও ইচ্ছা আছে এই প্রতিষ্ঠানের। উদ্যোক্তারা আশা করেন ধীরে ধীরে মেয়েরা কম্পিউটার সায়েন্সে পড়তে এবং প্রোগ্রামিং নিয়ে কাজ করতে আরও বেশি উৎসাহিত হবে তাদের এই প্রচেষ্টার মাধ্যমে।

ফেসবুক গ্রুপ এর লিঙ্কঃ https://www.facebook.com/groups/292738210923130/

পেইজের লিঙ্কঃ https://www.facebook.com/codeitgirl

– প্রেস বিজ্ঞপ্তি।

পাইথন শেখার ডিভিডি

সম্প্রতি পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ডিভিডি বের করেছে দ্বিমিক কম্পিউটিং স্কুল (http://dimikcomputing.com)।

 python-dvd

ডিভিডি পাওয়া যাচ্ছে হক লাইব্রেরি (নীলক্ষেত, ঢাকা), কম্পিউটার জগৎ (আইডিবি ভবন, আগারগাঁও, ঢাকা) ও রকমারি ডট কম-এ। এছাড়া যারা একসাথে বেশি সংখ্যক ডিভিডি কিনতে চান, তারা দ্বিমিক কম্পিউটিং স্কুলে সরাসরি যোগাযোগ করুন (ফোন: 01913884948)।

ডিভিডি সম্পর্কে বিস্তারিত তথ্য :

বিষয়বস্তুঃ
পাইথন বর্তমানে একটি বহুল ব্যবহৃত প্রোগ্রামিং ভাষা। দিন দিন এর জনপ্রিয়তা বেড়ে চলেছে। প্রফেশনাল কাজে যেমন পাইথনের ব্যবহার বাড়ছে, তেমনি একাডেমিক সেক্টরেও এটিও জনপ্রিয়তা বেড়ে চলেছে। Coursera-তে বিভিন্ন অনলাইন কোর্সে প্রোগ্রামিং ভাষা হিসেবে পাইথনের বহুল ব্যবহার লক্ষ্য করার মতো। পাইথন চলে লিনাক্স, ম্যাক ওএসএক্স ও উইন্ডোজ অপারেটিং সিস্টেমে। গুগলের অফিসিয়াল প্রোগ্রামিং ল্যাঙ্গুয়েজগুলোর একটি হচ্ছে পাইথন। এই কোর্সটিতে যারা মোটামুটি প্রোগ্রামিং জানে তাদেরকে পাইথনের সাথে পরিচয় করিয়ে দেওয়া হবে। প্রোগ্রামিংয়ে যারা একেবারেই নতুন তাদের জন্য কোর্সটি উপযোগি নয়। যারা শৌখিন প্রজেক্ট কিংবা প্রফেশনাল প্রজেক্টে পাইথন ব্যবহার করতে চায় তারা এই কোর্সটি দিয়ে পাইথন শেখা শুরু করতে পারে। আর যারা উচ্চশিক্ষার জন্য প্রস্তুতি নিচ্ছে, তারাও পাইথনের সাথে পরিচিত হয়ে নিতে পারে এই কোর্সটি দিয়ে।

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

সুচিপত্রঃ
ইউনিট ০১ : পাইথনের সূচনা ও কন্ট্রোল ফ্লো
০১.০১ সূচনা
০১.০২ পাইথন কি এবং কেনো?
০১.০৩ পাইথনের ভার্সন
০১.০৪ প্রথম ইউনিটের সিলেবাস
০১.০৫ ভ্যারিয়েবল
০১.০৬ স্ট্রিং – ১
০১.০৭ স্ট্রিং – ২
০১.০৮ লিস্ট
০১.০৯ কন্ডিশনাল লজিক
০১.১০ কন্ডিশনাল লজিক – ২
০১.১১ কন্ট্রোল ফ্লো – ১
০১.১২ কন্ট্রোল ফ্লো – ২
০১.১৩ প্রথম ইউনিটের সমাপ্তি

ইউনিট ০২ : ডাটা স্ট্রাকচার
০২.০১ পাইথনের ডাটা স্ট্রাকচার
০২.০২ ডাটা স্ট্রাকচার কি?
০২.০৩ লিস্ট ডাটা স্ট্রাকচার
০২.০৪ লিস্টের ব্যবহার
০২.০৫ স্ট্যাক ও কিউ হিসেবে লিস্ট
০২.০৬ টাপল ডাটা স্ট্রাকচার
০২.০৭ টাপলের ব্যবহার
০২.০৮ সেট ডাটা স্ট্রাকচার
০২.০৯ সেটের ব্যবহার
০২.১০ ডিকশনারি
০২.১১ ডিকশনারির ব্যবহার
০২.১২ দ্বিতীয় সপ্তাহের সমাপ্তি

ইউনিট ০৩ : পাইথনের মডিউল
০৩.০১ ফাংশন ও মডিউল
০৩.০২ ফাইল থেকে পাইথন স্ক্রিপ্ট চালানো
০৩.০৩ কিবোর্ড থেকে ইনপুট
০৩.০৪ প্যাকেজ ও মডিউল
০৩.০৫ ফাংশন লেখার নিয়ম
০৩.০৬ প্রথম ফাংশন : যোগ
০৩.০৭ ফাংশনের প্যারামিটার
০৩.০৮ ভ্যালু ও রেফারেন্স
০৩.০৯ প্যারামিটারের ডিফল্ট মান
০৩.১০ ফাংশনে একাধিক ভ্যালু রিটার্ন
০৩.১১ ইমপোর্ট
০৩.১২ ইমপোর্ট এর ব্যবহার
০৩.১৩ প্যাকেজ তৈরী করা
০৩.১৪ প্যাকেজের ব্যবহার
০৩.১৫ তৃতীয় সপ্তাহের সমাপ্তি

ইউনিট ০৪ : ইনপুট, আউটপুট ও এক্সেপশন হ্যান্ডলিং
০৪.০১ ইনপুট, আউটপুট, ফাইল ও এক্সেপশন
০৪.০২ স্প্লিট ও জয়েন
০৪.০৩ স্প্লিট ও জয়েনের ব্যবহার
০৪.০৪ স্ট্রিং ফরম্যাটিং
০৪.০৫ স্ট্রিং ফরম্যাটিং – ২
০৪.০৬ ফাইল অপারেশন
০৪.০৭ এক্সেপশন হ্যান্ডলিং
০৪.০৮ ট্রাই ও ক্যাচ
০৪.০৯ চতুর্থ সপ্তাহের সমাপ্তি

ইউনিট ০৫ : পাইথনে অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং
০৫.০১ এই ইউনিটে যা শিখব
০৫.০২ ওওপি এর ধারনা
০৫.০৩ ক্লাস তৈরী করা
০৫.০৪ ক্লাস ও অবজেক্ট
০৫.০৫ অবজেক্ট ও ইনস্ট্যান্স
০৫.০৬ ইনহেরিটেন্স
০৫.০৭ ইনহেরিটেন্সের ব্যবহার
০৫.০৮ ওওপি এর আরো কিছু কথা
০৫.০৯ পঞ্চম ইউনিটের সমাপ্তি

ইউনিট ০৬ : পাইথনের কিছু টুকিটাকি
০৬.০১ এই ইউনিটে যা শিখব
০৬.০২ ইটারেটর
০৬.০৩ জেনারেটর
০৬.০৪ জেনারেটর এক্সপ্রেশন
০৬.০৫ রেগুলার এক্সপ্রেশন
০৬.০৬ পাইথনের বিল্ট-ইন
০৬.০৭ নতুন প্যাকেজ ইনস্টল করা
০৬.০৮ ওয়েব প্রোগ্রামিং

শিক্ষক পরিচিতিঃ
তামিম শাহ্‍রিয়ার সুবিন — শাহজালাল বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয় থেকে ২০০৬ সালে কম্পিউটার সায়েন্স ও ইঞ্জিনিয়ারিং বিভাগ থেকে গ্রাজুয়েশন করেন। বাংলা ভাষায় ‘কম্পিউটার প্রোগ্রামিং’ নামে একটি বই লিখেছেন (বইটির অনলাইন ভার্শন সবার জন্য উন্মুক্ত http://cpbook.subeen.com)। পাইথনের উপর তাঁর লেখা ব্লগ (http://love-python.blogspot.com/) বেশ জনপ্রিয়। মুক্ত সফটওয়্যার লিমিটেড নামে একটি সফটওয়্যার কোম্পানী পরিচালনা করার পাশাপাশি বাংলাদেশ গণিত অলিম্পিয়াডে একজন একাডেমিক কাউন্সিলর (ভলান্টিয়ার) হিসেবে কাজ করেন। এছাড়া তিনি দ্বিমিক কম্পিউটিং স্কুলের একজন প্রতিষ্ঠাতা।

ডিভিডিহে আর‌ যা যা রয়েছেঃ
– পাইথনের ইন্সটলার সফটওয়্যার।
– ভিডিও প্লে করার জন্য প্রয়োজনীয় সফটওয়্যার।

পাইথন কী?

কম্পিউটারকে দিয়ে কাজ করাতে গেলে কম্পিউটার বুঝতে পারে, এমন ভাষায় তাকে নির্দেশ দিতে হয়। এরকম প্রোগ্রামিং ভাষা অনেক রয়েছে এবং নিত্যনতুন তৈরি হচ্ছে। তবে অল্প কয়েকটি প্রোগ্রামিং ভাষাই প্রোগ্রামারদের কাছে জনপ্রিয় হতে পেরেছে। তেমন একটি প্রোগ্রামিং ভাষা হচ্ছে পাইথন যেটি তৈরি করেন গুইডো ভন রুযাম (Guido van Rossum)। ১৯৮৯ সালের ডিসেম্বর মাসে ক্রিসমাসের ছুটিতে তিনি পাইথন তৈরি করা শুরু করেন। তবে পাইথন সবচেয়ে বেশি জনপ্রিয়তা পায় ২০০০ সালে তার ২.০ সংস্করণ চালু হওয়ার পরে। বর্তমানে পাইথনের ২.৭ এবং ৩.৪ এই দুটি সংস্করণ চালু রয়েছে।

Guido Van Rossum

পাইথন একটি উচ্চস্তরের প্রোগ্রামিং ভাষা। পাইথন স্ট্রাকচার্ড প্রোগ্রামিং এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং করা যায়। এছাড়া ফাংশনাল প্রোগ্রামিংও করা যায় পাইথন দিয়ে। সাম্প্রতিক একটি জরিপে [১] দেখা যায় যে সারা পৃথিবীতে বর্তমানে জনপ্রিয়তার বিচারে পাইথনের স্থান চতুর্থ (শীর্ষ তিনটি হচ্ছে, জাভা, সি, সি প্লাস প্লাস), আর যুক্তরাষ্ট্রের শীর্ষ বিশ্ববিদ্যালয়গুলোর ৬৯% তার শিক্ষার্থীদের প্রোগ্রামিংয়ের সাথে পরিচয় করিয়ে দেয় পাইথন ব্যবহার করে [২]। এছাড়া বিশ্ববিখ্যাত প্রতিষ্ঠান গুগলের তিনটি অফিশিয়াল প্রোগ্রামিং ভাষার একটি হচ্ছে পাইথন।

পাইথনের এত জনপ্রিয় হওয়ার কারণ কী? পাইথন প্রোগ্রামাররা নিচের কারণগুলোকেই প্রধান মনে করেন:‌

  • পাইথন কোড সহজে পড়া যায়
  • কোড সি বা জাভার চেয়ে তুলনামূলক অনেক ছোট হয়
  • পাইথনে রয়েছে লিস্ট, ডিকশনারি ও সেটের মতো চমৎকার ডাটা স্ট্রাকচার
  • পাইথন বিভিন্ন প্ল্যাটফর্মে ব্যবহার করা যায়
  • বিশাল ও কার্যকর স্ট্যান্ডার্ড লাইব্রেরি রয়েছে
  • শক্তিশালী অনলাইন কমিউনিটি
  • চমৎকার ওয়েব ফ্রেমওয়ার্ক (জ্যাঙ্গো, ফ্লাস্ক ইত্যাদি)

মোটামুটি সব লিনাক্স ডিস্ট্রিবিউশন ও ম্যাক অপারেটিং সিস্টেমে পাইথন বিল্ট-ইন থাকে, আলাদাভাবে ইনস্টল করতে হয় না। উইন্ডোজে পাইথন আলাদা করে ইনস্টল করতে হয়, যা পাইথনের অফিয়াল ওয়েবসাইট [৩] থেকে ডাউনলোড করা যায়।

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

পাইথন শেখার জন্য পাইথনের অফিশিয়াল টিউটোরিয়াল রয়েছে [৪]। এছাড়া অনলাইনে রয়েছে বিভিন্ন বই ও অনলাইন কোর্স। তবে বাংলা ভাষায়ও পাইথন শেখার সুযোগ রয়েছে অনলাইনে। একেবারে নতুনদের জন্য আছে ‘হুকুশ পাকুশের প্রোগ্রামিং শিক্ষা’ [৫] যেটি তৈরি করেছেন ইকরাম মাহমুদ। আর ‘পাইথন পরিচিতি’ [৬] নামে ধারাবাহিক ভিডিও লেকচার রয়েছে যা পাইথন শেখার জন্য বেশ কার্যকর। সম্প্রতি দ্বিমিক কম্পিউটিং স্কুল [৭], বাংলাদেশ পাইথন ইউজার গ্রুপ [৮] ও বাংলাদেশ ওপেন সোর্স নেটওয়ার্ক মিলে প্রথমবারের মতো আয়োজন করে ‘পাইকন ঢাকা ২০১৪’ যা পাইথনের উপর বাংলাদেশে প্রথম আন্তর্জাতিক সম্মেলন।

সত্যিকারের ডিজিটাল বাংলাদেশ তৈরি করবে আমাদের দেশের তরুণ প্রোগ্রামাররা। তাই তাদের আধুনিক প্রযুক্তিতে দখল থাকা চাই। পাইথনের মতো আধুনিক প্রোগ্রামিং ভাষার ব্যবহার বাংলাদেশের প্রোগ্রামারদের মান ও উৎপাদনশীলতা যেমন বাড়াবে তেমনি আমাদের সফটওয়্যার শিল্পকে নিয়ে যাবে এক নতুন উচ্চতায়।

লিঙ্কঃ
১) http://goo.gl/DiWrtA
২) http://goo.gl/eDyqM0
৩) http://python.org
৪) http://goo.gl/QTfyY1
৫) http://hukush-pakush.appspot.com
৬) http://pyvideo.subeen.com
৭) http://dimikcomputing.com
৮) http://pycharmers.net

লেখাটি প্রথম আলোতে প্রকাশিত হয় ২৫-০৭-২০১৪ তারিখে।

অনলাইন সংস্করণ: http://www.prothom-alo.com/technology/article/276553

ই-প্রথম আলো: http://epaper.prothom-alo.com/index.php?opt=view&page=28&date=2014-07-25