রবিবার, ১৭ সেপ্টেম্বর, ২০১৭

প্রোগ্রামিংঃ একটি অতি প্রয়োজনীয় ভাষা | Programming is a most needed language

 সংজ্ঞা

প্রোগ্রামিং ভাষার বিভিন্ন বৈশিষ্ট্যের ওপর ভিত্তি করে এর সংজ্ঞা দেয়া যায়:
  • কাজ (Function): প্রোগ্রামিং ভাষা হচ্ছে এক ধরনের ভাষা যা দিয়ে কম্পিউটার প্রোগ্রাম লেখা যায়, এবং এই প্রোগ্রামগুলোর সাহায্যে কম্পিউটারকে কোন গণণামূলক কাজ করার নির্দেশ দেয়া যায় , এবং সম্ভব হলে কম্পিউটারের বাইরের যন্ত্রাংশ যেমন প্রিন্টার, রোবট, ইত্যাদি নিয়ন্ত্রণ করা যায়।
  • লক্ষ্য (Target): প্রোগ্রামিং ভাষাগুলো থেকে স্বাভাবিক ভাষাগুলোর মধ্যে পার্থক্য হচ্ছে স্বাভাবিক মুখের ভাষা কেবল মানুষে-মানুষে যোগাযোগের জন্য ব্যবহৃত হয়, অন্যদিকে প্রোগ্রামিং ভাষাগুলোর মানুষকে যন্ত্রের কাছে আদেশ পৌঁছে দিতে সাহায্য করে। কিছু প্রোগ্রামিং ভাষা এক যন্ত্রকে আরেক যন্ত্রের সাথে যোগাযোগে সাহায্য করে। যেমন কিছু প্রোগ্রাম পোস্টস্ক্রিপ্টপ্রোগ্রাম তৈরির মাধ্যমে প্রিন্টার বা ডিসপ্লে নিয়ন্ত্রণ করতে পারে।
  • সংগঠন (Constructs): প্রোগ্রামিং ভাষায় সাধারণত কিছু সংগঠন থাকে যেগুলো দিয়ে বিভিন্ন উপাত্ত কাঠামো (data structure) সংজ্ঞায়িত করা হয় কিংবা নির্দেশ পালনের প্রবাহ বা ধারানিয়ন্ত্রণ করা হয়।
  • প্রকাশক্ষমতা (Expressive power): গণনা তত্ত্বে (theory of computation) প্রোগ্রামিং ভাষাসমূহকে তারা কী ধরনের গণনা (computation) প্রকাশ করতে পারে, তার ওপর ভিত্তি করে শ্রেণীকরণ করা হয় (চম্‌স্কি অনুক্রম দেখুন)। সমস্ত টুরিং-সম্পূর্ণ ভাষাগুলো একই অ্যালগোরিদমের সেট বাস্তবায়ন করতে পারে। টুরিং-সম্পূর্ণ না হলেও কিছু ভাষাকে প্রায়ই প্রোগ্রামিং ভাষা বলা হয়, যেমন - অ্যানসাই/আইএসও এসকিউএল এবং চ্যারিটি। 

আমরা কি অনুভব করি কী অভাবনীয় একটা সময়ে আমরা বাস করছি? এইতো একটু আগে আমি ডানে ঘুরে তাকালাম, আর পাঁচ ফুট দূরেই জানালার কাঁচে দেখতে পেলাম নিজের প্রতিবিম্ব। আমার ছবিটা কাঁচে প্রতিফলিত হয়ে আবার আমার কাছে ফিরে আসতে অতিক্রম করলো প্রায় দশ ফুট। এটুকু যেতে আসতে আলোর সময় লাগলো দশ ন্যানো সেকেন্ড । আমার ল্যাপটপের প্রসেসরের ক্লক স্পিড যদি ১ গিগা হার্জ হতো তাহলে এই অতি ক্ষুদ্র সময়ে সে প্রায় দশটা ছোট ছোট গণনার কাজ করে ফেলতে পারতো! কিন্তু আমার কম্পিউটারের স্পিড প্রায় ২ গিগা হার্জ। এবং তার প্রসেসরের কোর আছে ৪ টা অর্থাৎ এই সময়েই সে, ৮০ টা গণনা কাজ শেষ করে ফেলেছে । এ প্রসঙ্গে ভাবা যেতে পারে অ্যাপোলো ১১ নভোযানের কথা যেটাতে করে প্রথম মানুষ চাঁদে পৌছায়। এই নভোজানের নিয়ন্ত্রণকারী কম্পিউটার পুরো ৮ দিনের মিশনে যতগুলো গণনা কাজ করেছে, তা আমার এই ল্যাপটপ করতে পারবে মাত্র ৩ মিনিটে! আমি নিশ্চিত তুমি যে কম্পিউটারের সামনে বসে এই লেখাটা পড়ছো সেটার ক্ষমতাও এর কাছা-কাছি। কিন্তু কই, আমরা তো চাঁদে চলে যাচ্ছি না। এমনকি চাঁদে চন্দ্রবিন্দুর সাথে তুলনীয় কোনো “অ-সাম” কাজও করতে পারছিনা আমরা কেউই। কী অভাবনীয় এক শক্তির আধার হাতে নিয়ে বসে আছি তা আমরা উপলব্ধি করছি না। আর যারা একটু আধটু উপলব্ধি করি তারাও সেটা ব্যবহারে ব্যর্থ হই কারণ আমরা প্রোগ্রামিং জানি না। আর জানলেও, কখনো নিজের কম্পিউটারের ক্ষমতার আলটিমেট ব্যবহার কী করতে পারি তা নিয়ে ভাবি না আমরা কেউ। কম্পিউটারের সাহায্যে কী অভাবনীয় সব কাজ কর্ম করা হচ্ছে এবং নিজেদের অজান্তেই তার কতকিছু আমরা ব্যবহার করছি সেসব নিয়ে লিখবো অন্য কখনো। আজকের এই লেখাটি যারা প্রোগ্রামিং শিখতে চায় তাদের জন্য। অনেকটা প্রশ্ন-উত্তর ফরম্যাটে লেখা । পাঠকরা যদি নিজেদের প্রশ্নের উত্তর মূল লেখায় না পান, তাহলে মন্তব্যের ঘরে জিজ্ঞেস করলে পরবর্তী ভার্সনে আপডেট করে নেওয়া হবে। তাহলে শুরু করা যাক,
Image: Collected

১) প্রথম কোন প্রোগ্রামিং ভাষাটি শিখবো? সি/ সি++/ পাইথন/ জাভা/ হ্যাসকেল/ প্যাসকেল/ লিসপ/ অ্যাসেম্ব্লি/ ম্যাটল্যাব / আর/ ফরট্রান/ … ব্লা ব্লা ব্লা?
উত্তর:- সি
কারণ:- আমি ধরে নিচ্ছি, তুমি তোমার বাবা-মা বা বন্ধু-বান্ধবকে ইম্প্রেস করার জন্য প্রোগ্রামিং শিখতে চাইছো না। অথবা শুধু ঘরে বসে আউটসোর্সিং করে বড়লোক হওয়াই তোমার উদ্দেশ্য নয়। আমি ধরে নিচ্ছি, তুমি প্রোগ্রামিং শিখতে চাচ্ছো কারণ বাংলাদেশ যখন চন্দ্রযান পাঠাবে তার নিয়ন্ত্রণকারী কম্পিউটারের অপারেটিং সিস্টেম লিখবে তুমি, অথবা তুমি হয়তো ছোট্ট একটা রোবট বানাতে চাও যেটা তোমার টুকিটাকি কাজ করে দেবে। তুমি হয়তো চাও লক্ষকোটি টাকা দামে বিদেশ থেকে আনা জীবন রক্ষাকারী মেডিক্যাল ইকুইপমেন্ট কম খরচে দেশে বসেই তৈরি করতে। তুমি হয়তো এমন একজন এক্সপার্ট হতে চাও যে বিভিন্ন কল কারখানা অটোমেটেড করে ফেলতে পারে। অথবা তুমি হয়তো চাও কৃত্রিম বুদ্ধিমত্তা নিয়ে গবেষণা করতে… (এই তালিকা অনেক বড় হতে পারে)। অর্থাৎ তুমি যদি চাও, কম্পিউটারের সাহায্যে তোমার আসেপাশের প্রকৃতির সাথে মিথোস্ক্রিয়া করতে তাহলে সি-ই তোমার প্রথম প্রোগ্রামিং ভাষা। সি, এর মত এত পরিষ্কারভাবে আর কোনো ভাষাই কম্পিউটারকে আমাদের সামনে তুলে ধরতে দেখিনি। অ্যাসেম্ব্লি বা মেশিন ল্যাঙ্গুয়েজে হয়তো কম্পিউটারের নাড়ি নক্ষত্রের উপর আরো বেশি নিয়ন্ত্রণ পাওয়া যায়। কিন্তু ওর জন্য প্রয়োজনীয় সুদীর্ঘ্য ডিটেইল বেশিরভাগ সময়ই মূল চিত্রটা ঢেকে ফেলে। প্রথম শেখা কম্পিউটার ভাষাও অনেকটা মাতৃভাষার মত। পরবর্তী জীবনে অন্য অনেক ভাষা নিয়ে কাজ করলেও, মূল অ্যালগরিদমটা তুমি হয়তো সি-তেই ভাববে। সি, প্রতিটি ভেরিয়েবলকে কোনো রাখঢাক না করেই তুলে দেয় আমাদের হাতে। শিখিয়ে দেয়, এত শক্তিশালী কম্পিউটারের দুর্বলতার স্থান কোনগুলো। ফলে তুমি যখন কম্পিউটারের সাহায্যে তোমার হাতে বানানো কোনো যন্ত্রকে নিয়ন্ত্রণ করতে চাইবে, তখন সি এর জ্ঞান তোমাকে এগিয়ে নেবে অনেকখানি। সি জানলে, তুমি অন্যান্য হাই লেভেল ভাষাকে অ্যাপ্রিশিয়েট করতেও শিখবে। এবং তাদের শক্তি বা দুর্বলতাটাও বুঝতে পারবে।
২) আমি একবার একটা প্রোজেক্টের জন্য সি( / ম্যাটল্যাব/ আর/ ম্যাথমেটিকা/ জাভা) ব্যবহার করেছি। আমি কি এখন প্রোগ্রামিং শিখতে গিয়ে বাড়তি সুবিধা পাবো?
উত্তর:- এই তো কামটা সেরেছ। তোমার জন্য প্রোগ্রামিং শেখা একেবারে নতুন কারো চেয়ে অনেকগুণ কঠিন হয়ে গেছে।
কারণ:- কোনো একটা প্রোগ্রামিং ভাষা শেখা। আর কোনো একটা প্রোগ্রামিং ভাষা ব্যবহার করে কিছু-মিছু করে ফেলা এক কথা নয়। যেমন আমি হয়তো, ইন্টারনেট ঘেটে কিছু ফ্রেঞ্চ কথা শিখে প্যারিসের কোনো মুদি দোকান থেকে ঠিক ঠিক দুই কেজি আলু কিনে আনলাম। কিন্তু এর মানেই আমি ফ্রেঞ্চ শিখে ফেলেছি তা নয়। প্রোগ্রামিং ভাষার ক্ষেত্রে ব্যাপারটা আরো করুণ। কারণ প্রোগ্রামিং ভাষার শুরুতে, নানান টাইপের ভেরিয়েবল কোনটার কাজ কী, কিভাবে দুইটি সংখ্যা যোগ করা যায়। একটা স্ট্রিং-কে কিভাবে উলটো করে লেখা যায়। কত ভিন্ন ভিন্ন উপায়ে লুপ ঘোরাণো সম্ভব। একটা তালিকা থেকে নির্দিষ্ট কোনো উপাদান কিভাবে সব চেয়ে দ্রুত খুঁজে বের করা যায়। পয়েন্টার কিভাবে কাজ করে। নেগেটিভ সংখ্যার বাইনারি প্রকাশ কীভাবে করে। ফাংশন। রিকার্সন। এইসব খুটিনাটি খুব নিখুত ভাবে শিখতে হয়। এবং এগুলোতে পার্ফেকশন আনতে মাসের পর মাস সাধণা করতে হয়। ওদিকে, অতীতে হয়তো, এর ওর কোড থেকে কিছু অংশ নিয়ে, একটু এদিক ওদিক করে, তুমি বড় কোনো সিমুলেশন করে ফেলেছ। সেইসব বড় বড় কাজের স্মৃতি, তোমাকে এসব খুটিনাটি শেখার সময় অধৈর্য্য করে তুলবে। আমি আমার অনেক বন্ধুকেই, শুধুমাত্র এই কারণে সঠিকভাবে প্রোগ্রামিং শিখতে ব্যর্থ হতে দেখেছি। এই ফাঁদ কাটিয়ে ওঠার উপায় তোমাকে নিজের মত করে বের করতে হবে। তবে এ বিষয়ে আমার টিপ্স হলো, নিজের জন্য কিছু বেঞ্চমার্ক ঠিক করা। ধরো, নিজেকে প্রশ্ন করলে, যে ভাষাটি তুমি শিখছো, সেই ভাষায় কি তুমি একটা সিম্পল “নোট প্যাড” (টেক্স্ট এডিটর) প্রোগ্রাম বানাতে পারবে; যেটার সাহায্যে টেক্সট ফাইল খোলা যায়, এডিট করা যায়, কোনো শব্দ সার্চ করা যায়, রিপ্লেস করা যায়, নতুন কিছু টাইপ করা যায় এবং পরিবর্তিত লেখাটা সেইভও করা যায়? এটা যেদিন বানাতে পারবে, বা সত্য-সত্যই বানাতে পারার মত কনফিডেন্ট হতে পারবে। সেইদিন তুমি ঐ ভাষাটা মোটামুটি আয়ত্ব করে ফেলেছ।
৩) শুনেছি প্রোগ্রামার হতে হলে খুব ক্রিয়েটিভ হতে হয়। আমার তো অতো ক্রিয়েটিভিটি নেই, আমি কি পারবো?
উত্তর:- একদম বাজে কথা।
কারণ:- প্রোগ্রামিং শিখতে গেলে, যে দুইটা জিনিস লাগে তা হলো নিষ্ঠা, আর সততা। জিদ ধরে লেগে থাকতে হয়। বেশিরভাগ শিক্ষার্থী যাদের দেখে মনে হয়, অনেক চেষ্টা করেও প্রোগ্রামিং ঠিক মত আয়ত্ব করতে পারলো না, তারা স্রেফ নিজের কাছে অসৎ। তাই পারেনি। হয়তো কিছু একটা ধারণা পুরোপুরি পরিষ্কার হয়নি কিন্তু সে এগিয়ে গেল পরের টপিকে। এবং নিজেকে মিথ্যা প্রবোধ দিলো যে সে আগের জিনিসটা বুঝেছে। ফলে পরে উচ্চতর কোনো সমস্যা সমাধান করতে গিয়ে সে আটকে যাবে। হয়তো সে বুঝবেও না যে, অতীতে যে মামুলি জিনিসটা সে উপেক্ষা করেছিলো, সেটার কারণেই সে আজ আটকে আছে। সে ভাববে, সে হয়তো যথেষ্ট ক্রিয়েটিভ নয়। এ ছাড়া আমরা আরেকটা কথাও ভাবতে পারি। কেউ লিখতে পারলেই তো রবীন্দ্রনাথ ঠাকুর হয়ে ওঠে না। কিন্তু চেষ্টা সাধণা করলে, যে কোনো ভাষাতেই যে কেউ দক্ষতা অর্জন করতে পারে। কিন্তু মানুষের ভাষা নিয়ে আসলে খুব বেশি কিছু করার নেই। কবিতা লেখা, বা গান, বা গল্প, বা রচনা- প্রবন্ধ-ভাষণ দেওয়া, আড্ডাবাজি এসবের বাইরে তেমন কিছু না। কিন্তু কম্পিউটার ভাষায় দক্ষতা থাকলে এত হাজার কোটি ভিন্ন ভিন্ন জিনিস করা সম্ভব যে, তার কোনো না কোনোটা তোমার মন মত হবে। আর তখন নিজের সৃষ্টিশীলতা কোথা থেকে যে এসে হাজির হবে সেটা বুঝতেও পারবে না।
৪) প্রোগ্রামিং ভাষা শেখার সবচেয়ে উপযুক্ত বয়স কোনটা? 

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

কারণ:- গণিত, কম্পিউটার প্রোগ্রামিং, মিউজিক, জিমন্যাস্টিক্স এসব জিনিস যতো আগে থেকে শিখতে শুরু করা যায় ততোই ভালো। আন্তর্জাতিক প্রোগ্রামিং প্রতিযোগীতা, গণিত অলিম্পিয়াড বা অলিম্পিক এসবে যারা সেরাদের সেরা হয় তাদের বেশিরভাগই একেবারে ছোট থেকেই ওসব শিখতে শুরু করেছে। তবে প্রতিযোগীতামূলক ভাবে কিছু করা আর সৃষ্টিশীল কিছু করা এক কথা নয়। তাই অনেক পরে যারা শেখে, তারাও অভাবনীয় সব সৃষ্টিশীল কাজ করতে পারে এবং অহরহ করছে তাদের প্রোগ্রামিং স্কিল এর সাহায্যে। এমনকি ষাটোর্ধ বা পঞ্চাশোর্ধ কেউও চাইলে প্রোগ্রামিং শিখতে পারে। এ ধরনের কার্যক্রম তাদের ব্রেইনকে আরো অনেকদিন সক্রিয় রাখবে। এবং একটা কিশোর কম্পিউটার প্রোগ্রামিং শিখে যে আনন্দ পায়, সেই আনন্দটা সেও পেতে পারবে ঐ বয়সেও।
৫) আমি ভাষাতত্ত/বায়োলজি/মেডিক্যাল/অর্থনীতি/ সিভিল ইঞ্জিনিয়ারিং /চারুকলা/ সামাজিক বিজ্ঞান/বিবিএ… ইত্যাদিতে পড়েছি। কম্পিউটার প্রোগ্রামিং শিখে আমার কী লাভ?
উত্তর:- ওরে কে কোথায় আছিস ওকে দুটো টাকা দে, কারণ ও সব কিছুতে সবার আগে লাভ খোঁজে।
কারণ:- তুমি কি নোয়াম চমস্কির নাম শুনেছ? সে একজন ভাষাতাত্তিক ও দার্শনিক। কম্পিউটার বিজ্ঞানেও তার মৌলিক অবদান আছে। আজকাল ভাষাত্ত্ব সামাজিক বিজ্ঞান, এসবের অত্যাধুনিক গবেষণা হচ্ছে লক্ষ লক্ষ মানুষের তথ্য উপাত্ত বিশ্লেষণ করে। যা কম্পিউটার ছাড়া সম্ভব নয়। জেনেটিক্স, অনুজীব বিজ্ঞান, ফার্মাসিউটিক্যাল্স, অত্যাধুনিক অস্ত্রপচার পদ্ধতি, কৃষি, ইত্যাদি সকল জীব বিজ্ঞান সংশ্লিষ্ঠ বিষয়ের গবেষণা এখন কম্পিউটার ছাড়া কল্পনাও করা সম্ভব নয়। নগর পরিকল্পনাবিদ, ভূতাত্বিক, খনি অনুসন্ধান কারী, নতুন ধরনের সেতূ নির্মান কারী, গ্লোবাল ওয়ার্মিং এর কারণে সমুদ্রের উচ্চতা বেড়ে গেলে কিভাবে সেটা সামলাবো সেসব নিয়ে গবেষণাকারী কম্পিউটার ছাড়া একটুও এগোতে পারবে না। লিওনার্দো দ্য ভিঞ্চি যে সময়ে জন্মেছিলো, সেই সময়ে ছবি আঁকার সবচেয়ে সেরা/লেইটেস্ট পদ্ধতি ছিলো তেল রঙ এ আঁকা। তিনি সেটাই ব্যবহার করেছেন। এমনকি সেই রঙএর উন্নয়ন কিভাবে করা যায় সেটা নিয়েও গবেষণা করেছেন। এ যুগের লিওনার্দ দ্য ভিঞ্চিরা কাজ করবে কম্পিউটার গ্রাফিক্সে। এবং এ ক্ষেত্রে কম্পিউটার প্রোগ্রামিং জানলে কতটা বাড়তি সুবিধা পাওয়া সম্ভব সেটা বাইরে থেকে বোঝা সম্ভব নয়। সাম্প্রতিক অর্থনৈতিক মান্দার পরে, বড় বড় কোম্পানিগুলো বুঝে গেছে, কোট টাই পরে সুন্দর সুন্দর প্রেজেন্টেশন দেওয়ার চেয়েও গুরুত্বপূর্ণ স্কিল হলো মার্কেট প্রেডিকশন করতে পারা। এখন মার্কেট এত হাজারটা জিনিশের সাথে এমন ভাবে জড়িত, যে কম্পিউটারের সাহায্য ছাড়া সেগুলোর উপর কোনো রকম নিয়ন্ত্রণই সম্ভব নয়। আমরা বাংলাদেশে থেকে এসব হয়তো উপলব্ধি করি না। যেদিন উপলব্ধি করবো, সেইদিন আমাদের দেশটা আর এমন থাকবে না।
৬) আমি ফিজিক্স/ কেমিস্ট্রি/ ম্যাথ/ বায়োলজি পড়ছি কম্পিউটার প্রোগ্রামিং শিখে আমার কী হবে?
উত্তর:- তুমি হয়তো এসব বিষয়ে পড়েছ কিন্তু গবেষণা করছো না, বা এসব বিষয়ের সাম্প্রতিক গবেষণা নিয়ে খোঁজ খবর রাখো না। তাই এই প্রশ্ন করলে।
কারণ:- তুমি ফিজিক্স বা কেমিস্ট্রিতে পাশ করে ফেলেছ কিন্তু কম্পিউটার প্রোগ্রামিং জানো না। এর মানে হলো বিজ্ঞানী হিসাবে তুমি নিশ্চিত ভাবেই প্রথম শ্রেণীর কিছু হতে পারবে না। লার্জ হ্যাড্রন কলাইডার, গ্রাফেন, কোয়ান্টাম অপটিক্স, কোল্ড অ্যাটম, যে কোনো বিষয়ে গুগল করলেই দেখবে, কম্পিউটার ছাড়া ওসব গবেষণা স্রেফ অচিন্তনীয়। কেমিস্ট্রির ক্ষেত্রেও তাই। ইন ফ্যাক্ট এ যুগে কেমিস্ট্রি গবেষণা টেস্ট টিউবের চেয়ে বেশি হয় কম্পিউটারে। যেখানে নানান রকম নিউমেরিক্যাল মেথডের জয়-জয়কার। আর গণিতের ক্ষেত্রেও কাটিং এজ রিসার্চ করতে প্রোগ্রামিং না জানার বিকল্প নেই। কেন বা কীভাবে সেটা লিখবো অন্য কোনো সময়। বায়োলজি প্রসঙ্গটা এসেছে আগের প্রশ্নে, এর কারণ সাধারণভাবে দেখলে বায়োলজিকে গণিত, কম্পিউটার এসবের থেকে অনেক দূরের বিষয় মনে হয়। কিন্তু এই ধারণা যে কত বড় ভুল!
৭) প্রোগ্রামিং শিখে চাকরী পাবো কোথায়?
উত্তর:- যে প্রোগ্রামিং জানে, সে চাকরী খোঁজে না। চাকরীই তাকে খোঁজে।
কারণ:- তুমি যে একাডেমিক ব্যাকগ্রাউন্ডেরই হও না কেন সৎ ভাবে চেষ্টা করলে প্রোগ্রামিং শিখতে ফেলতে পারবেই। এবং আজকাল, নিজেকে একজন সুযোগ্য প্রোগ্রামার প্রমাণ করার জন্য বড় কোনো বিশ্ববিদ্যালয়ের ডিগ্রি থাকার দরকার নেই। অনলাইনেই সেটা প্রমাণ করার হাজারটা উপায় আছে। এত এত বিশ্ববিদ্যালয় থেকে হাজার হাজার কম্পিউটার বিজ্ঞানে পাশ করা ছেলেমেয়েকে হয়তো বের হতে দেখ। তাদের অনেকের মধ্যে চাকরী নিয়ে হতাশাও দেখা যায় প্রায়ই। তারাও যদি ঠিক ভাবে প্রোগ্রামিং শিখতো তাহলে এমন হতো না। কম্পিউটার বিজ্ঞান, কম্পিউটার ইঞ্জিনিয়ারিং এসব যারা পড়ে, তারা নানান রকম বিষয়ে ভালো গ্রেড পাওয়ার চাপে, প্রোগ্রামিং ঠিক মত শেখে না। প্রোগ্রামিংকেও অন্য আর দশটা বিষয়ের মত মনে করে। স্রেফ এই ভুলটা কাটিয়ে উঠতে পারলেই আমাদের দেশের আইটি ইন্ডাস্ট্রি অন্য যে কোনো দেশের সাথে পাল্লা দিতে পারতো।
৮) টিচ ইউওরসেল্ফ সি ইন ২১ ডেইজ নামক একটা বই কিনেছি। এটা পড়ে কি প্রোগ্রামিং শিখতে পারবো?
উত্তর:- না, পারবে না। ঠিক যেমন টিচ ইউরসেল্ফ ফ্রেঞ্চ ইন ২১ ডেইজ পড়ে একুশ দিনে ফরাসি ভাষা শিখতে পারবে না তেমন।
কারণ:- মাস ছয়েক নিয়মিত খাটাখাটনি না করে প্রোগ্রামিং শিখতে চাওয়াটা স্রেফ হঠকারিতা। আর ছয় মাস, অনেক সময় হলেও খুব বেশি সময় নয়। ছয়মাস আগের নিজেকে কল্পনা করো। তখন প্রোগ্রামিং শিখতে শুরু করলে এখন তুমি সেটা শিখে ফেলতে। অবশ্য নানাবিধ অ্যালগরিদম, ডাটা স্ট্রাকচার এসবে পারংগমতা আসতে সময় লাগতো আরো বেশি। তবে এই জার্নি কষ্টকর হলেও, পুরো সময়টা এত বেশি আনন্দময় হবে, যার সাথে খুব অল্প কিছুরই তুলনা চলে। প্রোগ্রামিং শেখার পিছনে সময় ব্যয় করে কেউ কখনো আফসোস করেনি।
৯) সি শেখার জন্য কোন বই পড়বো?
উত্তর:- ইংরেজীতে হার্বার্ট শিল্ডের টিচ ইয়োরসেল্ফ সি  বইটা দিয়ে শুরু করা যেতে পারো। এ ছাড়া বাংলায় সুবিন ভাই এর বই, এবং অন্যা আরো কিছু বই আছে। কয়েকটা ঘাটাঘাটি করে দেখতে হবে কোনটা ভালো লাগে।
কারণ:- একেক বই একেক জনের কাছে আবেদন সৃষ্টি করে। কোনো বিষয়ে পড়ে তেমন ভালো না লাগলে, শুরুতেই ভাবা ঠিক না যে বিষয়টা বোরিং। বরং খুব সম্ভবত তুমি যে বইটা পড়ছো, সেটা তোমার মন মত লেখা হয়নি। হাল না ছেড়ে একই বিষয়ে অন্য কোনো লেখকের অন্য কোনো বই চেষ্টা করে দেখ। এ ছাড়া ইন্টারনেটে অনেক রিসোর্স পাবে ।
১০) প্রোগ্রামিং বই কীভাবে পড়ে?
উত্তর:- আগাপাশতলা।
কারণ:- বেশির ভাগ বইয়ের ভুমিকায়, বা প্রিফেইসে, বইটি কীভাবে পড়বে তা বলা থাকবে। তবে নিজের প্রথম প্রোগ্রামিং ভাষা পুরোপুরি শেখার ক্ষেত্রে যেটা সব সময় সত্যি, সেটা হলো কোনো পাতা না পড়ে পরের পাতায় যাওয়া যাবে না। প্রতিটি অধ্যায়ের সবগুলো এক্সারসাইজ নিজে করতে হবে। কোনো পাতায় কোড দেওয়া থাকলে সেটা নিজ হাতে টাইপ করে চালিয়ে দেখতে হবে। (কোনো অবস্থাতেই কপি পেস্ট করা যাবে না)। একবার উদাহরণের কোড রান হয়ে যাবার পরে তার নানান অংশ নিজের ইচ্ছে মত বদলে বদলে এক্সপেরিমেন্ট করতে হবে। প্রতিটি পরিবর্তনের ফলে আউটপুটে কী বদল হচ্ছে, সেটা থেকে বুঝতে হবে কোডের কোন অংশের কাজ কী। অনেক সময় কোনো অধ্যায় পড়ে মনে হতে পারে সব বুঝে গেছি। কিন্তু সাঁতারের নিয়ম বুঝে ফেলা আর সাঁতার কাটতে পারা যেমন এক কথা নয়, প্রোগ্রামিংও তেমন।
১১) আমি আউটসোর্সিং করতে চাই। কিন্তু আপনি শুরুতে যেভাবে বললেন মনে হলো আউটসোর্সিং কে বাতিল করে দিলেন।

উত্তর:- আমি মোটেই তা বলিনি। আউট সোর্সিং করা খুবই ভালো। কিন্তু “ঘরে বসে আউট সোর্সিং করে বড় লোক হবো”, শুধু এরকম চিন্তা করে প্রোগ্রামিং শিখতে আসলে তুমি প্রোগ্রামিং এর অনেক মজা মিস করবে। এবং সম্ভবত ভালো প্রোগ্রামার হয়ে উঠতে পারবে না।
কারণ:- আমাদের দেশটা উন্নত বিশ্বের মত হয়ে যাবার আগ পর্যন্ত দেশে বসে প্রোগ্রামিং করে কর্মসংস্থানের জন্য বেশির ভাগ প্রোগ্রামারকেই আউটসোর্সিং করতে বা আউটসোর্সিংকারী প্রতিষ্ঠানে চাকরী করতে হবে। এবং ঠিক কী ধরনের কাজ তুমি পাচ্ছ তার উপর নির্ভর করে তোমাকে ব্যবহার করতে হবে নানান রকম প্রোগ্রামিং ভাষা। কিন্তু কম্পিউটারের প্রকৃত শক্তি সম্পর্কে জানতে। সেই শক্তি নিজের ইচ্ছেমাফিক ব্যবহার করতে সি জানার বিকল্প নেই।
১২) এইসব ল্যাপটপ ডেস্কটপ কম্পিউটার আমার ভালো লাগে না। আমার লাগবে সুপার কম্পিউটার। কিন্তু সেটা আমি কোথায় পাবো?
উত্তর:- একেবারে শুরুতেই সুপার কম্পিউটারের অ্যাক্সেস তুমি পাবে না। কিন্তু সুপারকম্পিউটারের মত কম্পিউটার আসলে তোমার হাতের নাগালেই আছে।
কারণ:- সুপার কম্পিউটারে লক্ষ লক্ষ প্রসেসর থাকে, যারা একই সঙ্গে কাজ করে। ফলে এক ক্লক সাইকেলেই লাখ খানেক কাজ হয়ে যায়। নরমাল কম্পিউটারের প্রোগ্রামিং আর সুপার কম্পিউটারের প্রোগ্রামিং একটু আলাদা হয়। কিন্তু জেনে অবাক হবে, গেইম খেলার জন্য উচ্চক্ষমতার যে গ্রাফিক্স কার্ডগুলো তুমি ব্যবহার করো সেগুলো ব্যবহার করে তুমি প্যারালাল প্রোগ্রামিং করতে পারো। সি বা সিপ্লাসপ্লাসেই!  যেটা তোমাকে প্রস্তুত করতে পারে, সত্যিকারের সুপার কম্পিউটার ব্যবহার করে বড় কোনো সমস্যা সমাধানের জন্য!

তথ্য সূত্রঃ

১.  Weiser, M. The Computer for the 21st Century. Scientific American, September 1991. ২.  এক ন্যানো সেকেন্ডে আলো যায় 3×10^8×10^(-9)m = 30 cm = 11.81 inch =~ 1 foot
৩.  আসলে একটা ইন্স্ট্রাকশন সম্পন্ন হতে, অনেকগুলো ক্লক সাইকেল লাগে। কিন্তু প্রতি ক্লক সাইকেলে, প্রসেসরের একটা মাইক্রো ইন্স্ট্রাকশন সম্পন্ন হয় ঠিকই। আমরা হিসাবে সুবিধার্থে সেটাকেই ধরেছি। এক গিগা হার্জ মানে প্রতি ন্যানো সেকেন্ডে একটা করে ক্লক পাল্স।
৪. অ্যাপোলোর পুরো মিশনের সময় ছিলো, 8 দিন 03 ঘন্টা 18 মিনিট 35 সেকেন্ড। তার কম্পিউটারের ক্লক স্পিড ছিলো ১ মেগাহার্জ। এক ক্লকে একটার বেশি মাইক্রোইনস্ট্রাকশন সম্পন্ন করা সম্ভব নয়। ফলে এই পুরো অভিযানের সময় সে যতগুলো মাইক্রো ইনস্ট্রাকশন চালাতে পারলো হিসাব করলে দেখা যায়, আমার ল্যাপটপ সেটা পারবে ৩ মিনিটের একটু কম সময়ে। এছাড়াও আমার কম্পিউটারের রেজিস্টার সংখ্যা, পাইপ লাইনিং, বাস উইড্থ, হিসাব করলে, ঐ পরিমান কাজ আসলে কয়েক সেকেন্ডে করতে পারার কথা এটার!
৫.  এগুলো আমার একান্তই ব্যক্তিগত মতামত। এতদিনের অভিজ্ঞতায় যতটুকু যা জেনেছি, শিখেছি তার আলোকে লেখা। যে প্রশ্নগুলো আলোচনা করেছি, আমার দেওয়া উত্তরগুলোই তাদের শেষ উত্তর নয়। কারণ শেষ কথা বলে কোনো কথা নেই। হা হা হা…
৬.  http://en.wikipedia.org/wiki/CUDA
৭.  http://www.sachalayatan.com/sporsho/43507
৮.  http://cpbook.subeen.com/
৯.  http://www.shikkhok.com/কোর্স-তালিকা/সি-প্রোগ্রামিং/
১০.  http://www.amazon.com/Teach-Yourself-C-Herbert-Schildt/dp/0078823110

বিশেষ দ্রষ্টব্যঃ এই পোস্টে ব্যবহৃত সবগুলো ছবি ইন্টারনেট থেকে সংগৃহীত। 

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন