Tuesday, March 17, 2009

জাভা নতুন শিক্ষার্থীদের জন্য কতোটুকু ক্ষতিকারক?

এই সময়ের সবচেয়ে জনপ্রিয় কয়েকটি প্রোগ্রামিং ভাষা'র নাম বলতে বললে সবার আগে আসবে জাভা'র নাম। জাভা Platform Independent বলে সফটওয়্যার/ওয়েবসাইট বানায় এমন কম্পানিগুলোতে জাভা জানা লোকের চাহিদা ব্যাপক। বিশ্বব্যাপী জাভা'র এই চাহিদার প্রতি লক্ষ্য রেখেই বিশ্বের অনেক বিশ্ববিদ্যালয়ই তাদের CS, CSE, CSSE, SE এই ধরনের চার বছর ব্যাপী অনার্স কারিকুলামে স্বতন্ত্র কোর্স হিসেবে জাভাকেও স্থান দিয়েছে। নর্থ আমেরিকান বিশ্ববিদ্যালয়গুলো এই ক্ষেত্রে আরেকটু বেশি এগিয়ে যে কাজটি করছে সেটি হলো, Introduction to Programming বা প্রোগ্রামিং ভাষার পরিচিতিমূলক কোর্স হিসেবে প্রথমেই জাভা পড়াচ্ছে। গোলটা বেধেছে এখানেই। সম্প্রতি নিউইয়র্ক বিশ্ববিদ্যালয়ের দু'জন অধ্যাপক ড. রবার্ট এবং ড. এডমান্ড, ‘প্রথম প্রোগ্রামিং ভাষা' হিসেবে জাভা পড়ানোর ব্যাপার ঘোর আপত্তি তুলেছেন।.....

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

 

নিউইয়র্ক বিশ্ববিদ্যালয়ের ঐ দুজন অধ্যাপক সুনির্দিষ্ট কিছু অভিযোগ এনেছেন এব্যাপারে। সেগুলো হলো:

  1. প্রোগ্রামিং ভাষা হিসেবে প্রথমেই জাভা শেখানো হলে, শিক্ষার্থীরা এতোটাই গ্রাফিক্স নির্ভর হয়ে পড়ে যে পরবর্তীতে সি নিয়ে কাজ করতে গেলে তারা কিছুই বুঝে উঠতে পারেনা। তাদের বক্তব্য হলো প্রথমে সি শিখিয়ে তারপর সি প্লাস প্লাস বা জাভা শেখানো হলে শিক্ষার্থীরা প্রোগ্রামিং ভাষার স্বাভাবিক বিবর্তনের মধ্যে দিয়ে যেতে পারে এবং তাদের শিক্ষাটা পরিপক্ক হয়। যেমন OOP কোন্ অর্থে data encapsulation করে? তারপর, সোর্স কোড কি? একটা প্রোগ্রাম কম্পিউটারের মুল হার্ডওয়্যারের সাথে কিভাবে কাজ করে? ইত্যাদি ইত্যাদি...
  2. সি ভাষার অন্যতম শক্তি হলো এতে ‘পয়েন্টারের' ব্যবহার। প্রথমেই শিক্ষার্থীদের জাভা শেখানো হলে পরবর্তীতে তাদের ‘পয়েন্টার' সম্পর্কিত ধারণা অর্জন করতে বেশ বেগ পেতে হয়। তাছাড়া, পয়েন্টার কিভাবে memory management এ সহায়তা করে বা পয়েন্টার ব্যবহার করে কিভাবে মেমোরির অযথা ব্যবহার পরিহার করা যায় এ সম্পর্কিত ধারণাগুলো তাদের কাছে অস্পষ্ট থেকে যায়। যা পরবর্তীতে সফটওয়্যার বানানোর ক্ষেত্রে অনেকসময়ই নিরাপত্তার ইস্যু হয়েও দেখা দেয়।
  3. সি ভাষায় প্রোগ্রামিং লেখা হলে সেই কোডকে আবার কম্পাইলার দিয়ে আলাদা ভাবে মেশিন ল্যাঙ্গুয়েজে পরিবর্তিত করতে হয়। এই কাজটা করার ফলে এবং মেশিন ল্যাঙুয়েজে পরিবর্তিত ফাইল দেখলে পরে শিক্ষার্থীদের মানসপটে প্রোগ্রামিং'র পুরো ঘটনাটা পরিষ্কার হয়। যদিও জাভাতেও এই কাজটি একটু ভিন্ন উপায়ে করতে হয় কিন্তু জাভার IDE গুলো এতো উন্নত যে মাইক্রোসফট ওয়ার্ডের মতো একই উইন্ডোতে বসে বিভিন্ন ধরনের ক্লাস ব্যাবহার করে শুধুমাত্র ‘RUN' বাটন টিপলেই প্রোগ্রামের আউটপুট দেখা যায়। তাও আবার ঐ উইন্ডোতেই (অধিকাংশ ক্ষেত্রে)। সি'র ক্ষেত্রে এই রকম উন্নত IDE নেই বললেই চলে। কারন সি-তে তেমন উন্নত গ্রাফিক্সই নেই।
  4. সি হলো লো-লেভেল (অর্থাৎ মুল হার্ডওয়ারের সাথে অপেক্ষাকৃত নিবিড়ভাবে সংযুক্ত) ল্যাঙ্গুয়েজ। এই ভাষা শেখানো হলে শিক্ষার্থীরা স্ট্রাকচারড প্রোগ্রামিং ভাষা মুলত কি এবং OOP'র সাথে এর মুল পার্থক্য কোথায় কোথায়, এটা সহজে বুঝতে পারে।

যাহোক, ঐ দু'জন অধ্যাপকই এই মত ব্যক্ত করেছেন যে, প্রোগ্রামিং ভাষা সম্পর্কিত ‘মুল' ধারণা পরিষ্কার থাকলে একজন প্রোগ্রামার যে কোন প্রোগ্রামিং ভাষাই ব্যবহার করতে সক্ষম। (এ সম্পর্কিত, স্ক্রাকচারড প্রোগ্রামিং ল্যাঙ্গুয়েজের প্রাথমিক যুগের, একটি স্লোগান চালু আছে: ‘Real programmers can write Fortran in any language.') শুধু তাকে ঐ ভাষার ভিন্ন syntax সম্পর্কে জেনে নিলেই হবে। ওনারা এও উল্লেখ করেছেন যে ইদানীং সফটওয়্যার কম্পানীগুলো মানসম্পন্ন প্রোগ্রামার পাচ্ছেনা বলে তাঁদেরকে জানিয়েছেন। তাছাড়া তাঁরা মনে করেন তাঁরা প্রোগ্রামিং ভাষা শিখেছেন মুলত অনেকটা শখের বশে। এই তাড়না তাঁরা পেয়েছেন শুধু এই কারনে যে প্রোগ্রামিং ভাষায় গাণিতিক সমস্যা সমাধানের প্রক্রিয়াগুলোকে তাঁরা এক ধরনের মেধার চ্যালেঞ্জ হিসেবে নিয়েছিলেন। তাঁরা বলেন, "প্রোগ্রামিং শেখা কঠিন এবং পরিশ্রমের এটা যারা ভাবে তাদের কম্পিউটার বিজ্ঞান পড়া উচিত নয়। বরং যারা গাণিতিক সমাধানের ভতেরর সৌন্দর্য দ্বারা তাড়িত হয় তাদেরই এই বিষয় পড়া উচিত। ধরুন একজন ছাত্র একটি প্রোগ্রাম লিখল যার ফলাফর আসার কথা ৫৩ কিন্তু আসলো ৮৫। এখন সেই ছাত্রের মধ্যে যদি সত্যিকার অর্থেই কম্পিউটার বিজ্ঞানের স্পিরিট থাকে তাহলে সে এর কারন খুঁজে বের করে তার সমাধান করবে।"

 

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

 

এখানে একটি কথা উল্লেখ্য যে, অধিকাংশের মনেই কিন্তু বিশ্ববিদ্যালয়ের শিক্ষা সম্পর্কিত কিছু ভুল ধারনা আছে। একটি বিশ্ববিদ্যালয় কিন্তু কোনো ট্রেনিং ইনষ্টিটিউট নয়। এর উদ্দেশ্যও training দেয়া নয় বরং education provide করা। মানুষকে শিক্ষিত করে তোলা। এজন্যই কম্পিউটার বিজ্ঞানে পড়তে গেলে কিন্তু অর্থনীতি, ব্যবসায় প্রশাসন এগুলো'র ওপরও কোর্স করা লাগে। তাছাড়া প্রোগ্রামিং ল্যাঙ্গুয়েজই কম্পিউটার বিজ্ঞান নয়। বরং বলা যায়, ডেটা স্ট্রাকচার এবং এ্যালগরিদম কম্পিউটার বিজ্ঞানের মুল ভিত্তি।

 

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

যাহোক, কিছু কিছু ব্লগার এই মন্তব্যও করেছেন যে ঐ দুজন অধ্যাপক আসলে নিজেরা Ada Core'র কর্ণধার; যে প্রতিষ্ঠান Ada প্রোগ্রামিং ভাষায় defense related সফটওয়্যার প্রস্তুত করে; যে কারনে ওনারা এ্যাডার ব্যবহারকারি বাড়ানোর জন্যই এতো তোড়জোড় করছেন! স্বার্থপরতার এই যুগে এতে আর বিস্ময়ের কি আছে!