এই পোস্টটি নিয়ে লাইফহ্যাকারে ফলো-আপ হয়েছে আর ইতিমধ্যে পোস্টটা স্প্যানিশচাইনিজ ভাষায় অনূদিত হয়েছে। বলে রাখা ভাল, এটা আমার মৌলিক কোন লেখা নয়। Yevgeniy (Jim) Brikman এর বিখ্যাত আর্টিকেল Don’t learn to code. Learn to think. এর বাংলা অনুবাদ করেছি আমি। না চিনে থাকলে Brikman সাহেবকে কে একটু পরিচয় করিয়ে দিই। ভদ্রলোক আগে লিংকডইনের সফটওয়্যার ইঞ্জিনিয়ার ছিলেন। বাকিটা এখানে পাবেন।

ব্যাপারটা এমন হয়ে দাড়িয়েছে যে সবাই কোডিং শিখতে চেষ্টা করছে। বিল গেটস, মার্ক জুকারবার্গ আর ক্রিস বোশের মত code.org এর সেলেব্রিটিরা বরাবরই বলছেন, যে কেউই কোডিং করতে পারে। CoderDojo সারাদেশে ছড়িয়ে পড়ছে, UK তাদের স্কুলের বাচ্চাদের কারিকুলামে কোডিংকে অফিসিয়ালি অন্তর্ভুক্ত করেছে।

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

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

যদি তুমি ভিডিও এক্সপ্লানেশন পছন্দ কর, তবে আমি তোমাকে সাইমন পিটন জোনসের Teaching Creative Computer Science ভিডিওটা দেখার জন্য সুপারিশ করছি। আর বলা ভাল, এই ভিডিওটাই এই পোস্টের অনুপ্রেরণা।

ভিডিওটা দেখার পরও আমার লেখা পড়তে আগ্রহী? গ্রেট! একটা প্রশ্ন জিজ্ঞেস করে আলোচনা শুরু করা যাক: তোমার কি কোডিং নিয়ে মাথা ঘামানো উচিত নাকি কম্পিউটার সায়েন্স নিয়ে?

উত্তরটা জানার জন্য, আমরা সামনের দিকে আগাব।

বাস্তব জগতে স্বাগতম

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

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

এবার একটু বাহিরে তাকানো যাক। তুমি কি তোমার গাড়ির পাশ দিয়ে হেঁটে গেলে? আধুনিক মটরগাড়িগুলো সফটওয়্যার দিয়ে ডিজাইন করা হয়, রোবোট দ্বারা নির্মিত হয় আর ফ্যাক্টরি কম্পিউটারে পরিপূর্ণ থাকে। তুমি যদি নিজে গাড়ি চালাও, তবে হয়ত গুগল ম্যাপস ব্যবহার করে তোমার রাস্তা খুঁজে বের কর। Yelp এ খাবার জায়গা খুঁজে পাবে আর TripAdvisor এ খুঁজে পাবে থাকার জায়গা। এবার, উপরের দিকে তাকাও – তোমার উপরে কোথাও দিয়ে একটা প্লেন উড়ে গেল, এটা অটো-পাইলট কন্ট্রোল করছে, যেটাতে ইন-ফ্লাইট ওয়াইফাই আর বিনোদনের ব্যবস্থা আছে আর প্রতিনিয়ত অন্যান্য প্লেন, ট্রাফিক আর এটার ম্যানুফ্যাকচারারের সাথে যোগাযোগ করছে। আরো উপরে কোথাও হয়ত স্যাটেলাইট আর স্পেশ স্টেশন পৃথিবীকে ঘিরে ঘুরপাক খাচ্ছে, ছবি তুলছে, আবহাওয়া পরিমাপ করছে আর ফোন কল রাউট করছে।

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

ম্যাট্রিক্স সর্বত্র

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

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

তারপরও এয়ারপ্লেনে আকাশে ওড়ার ব্যাপারটা বোঝার জন্য তোমার যা যা জানা দরকার তা কারিকুলামের অংশ:

(১) ফিজিক্স আর ম্যাথ তোমাকে মাধ্যাকর্ষণ, বল, চাপ, বেগ, ঘর্ষণ ও উড্ডয়ন বুঝতে সাহায্য করে।

(২) উঁচু জায়গায়, অক্সিজেন স্বল্পতায় আর চরম ঠান্ডায় মানবদেহে কি প্রভাব পড়ে তা বায়োলজি তোমাকে শেখায়।

(৩) হিস্টোরি তোমাকে বুঝায় কিভাবে এয়ারপ্লেন আবিষ্কার হয়েছিল, কিভাবে এটার বিকাশ ঘটেছিল এবং পরিবহন, বাণিজ্য ও যুদ্ধবিগ্রহে এটার ভূমিকা কি।

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

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

কম্পিউটার সায়েন্স কি?

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

(১) প্রব্লেম সলভিং (সমস্যা সমাধান): তুমি অ্যালগরিদম শিখবে – সাধারণ কৌশল যেমন: divide and conquer, recursion, heuristics, greedy search এবং randomized algorithms – যেগুলো তোমাকে যেকোন প্রব্লেম বিশ্লেষণ করতে ও সমাধান করতে সাহায্য করবে।

(২) লজিক (যুক্তি): তুমি অ্যাবস্ট্রাকশন, বুলিয়ান লজিক, নাম্বার থিওরি আর সেট থিওরির মত চিন্তা-চেতনার সুনির্দিষ্ট ও আনুষ্ঠানিক পদ্ধতিগুলো ব্যবহার করা শুরু করবে যাতে কঠিন চাপের ভিতরেও তুমি সমস্যা সমাধান করতে পার।

(৩) ডাটা (উপাত্ত): তুমি ইনফরমেশন থিওরি নিয়ে পড়াশুনা করবে আর প্রশ্ন জিজ্ঞেস করা শুরু করবে। যেমন: তথ্য কি? কিভাবে তুমি তথ্য উপস্থাপন কর? তুমি কিভাবে বাস্তব জগতের নকশা তৈরি করবে?

(৪) সিস্টেম: তুমি কিভাবে একটা জটিল সিস্টেম ডিজাইন ও তৈরি করবে যেটা কিছু প্রয়োজনীয়তা পূরণ করবে আর কিছু সীমাবদ্ধতা দূর করবে? মোটামুটি সব ব্যবসাতেই সিস্টেম ইঞ্জিনিয়ারিং একটা গুরুত্বপূর্ণ টপিক।

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

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

Computer science is no more about computers than astronomy is about telescopes, biology about microscopes, or chemistry about beakers and test tubes. Science is not about tools. Michael Fellows and Ian Parberry

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

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

প্রোগ্রামিং কি

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

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

কম্পিউটার সায়েন্স নিয়ে পড়াশুনার অংশ হিসেবে প্রোগ্রামিং শেখার ক্ষেত্রে কতগুলো সুবিধা পাওয়া যায়:

(১) নিজে কর (DIY): যদি তুমি কোড করতে পার, তবে তুমি নিজের জিনিস নিজেই তৈরি করতে পার। সিম্পল কিছু থেকে শুরু করতে পার : এক গোছা ট্রাভেল ফটো রিনেম করার জন্য একটা স্ক্রিপ্ট লিখতে পার অথবা তোমার ট্যাক্স হিসেব করার জন্য এক্সেল ফর্মুলা লিখতে পার। তারপর, ছোট খোকা বড় হ : তোমার পোর্টফোলিওর জন্য একটা ওয়েবসাইট বানাও, তোমার কোম্পানির জন্য একটা মোবাইল অ্যাপ বানাও, তোমার দোস্তের সাথে খেলার জন্য একটা গেইম বানাও।

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

(৩) ক্যারিয়ার: কম্পিউটার সায়েন্সে পড়াশুনার লক্ষ্য প্রফেশনাল প্রোগ্রামার হওয়া নয়। স্কুলে আমরা সবাই ম্যাথ, ফিজিক্স আর কেমিস্ট্রি পড়ি। কিন্তু আমরা সবাই প্রফেশনাল ম্যাথম্যাটিশিয়ান (ম্যাথবিদ), ফিজিসিস্ট (পদার্থবিদ) বা কেমিস্ট (রসায়নবিদ) হই না। যাহোক, যদি তোমার ঐ ধরনের প্যাশন থাকে তবে তুমি দেখবে যে সবচেয়ে দ্রুত বর্ধনশীল আর সবচেয়ে বেশি রেট ও বেতনের চাকরিগুলোর মধ্যে সফটওয়্যার ইঞ্জিনিয়ারিং একটা।

লাখ কথার এক কথা

একনজরে দেখা যাক:

(১) কম্পিউটার সায়েন্স হল চিন্তা-ভাবনার একটা নতুন ধারা। টেকনোলজীর এই দুনিয়ায় এর কনসেপ্টগুলো প্রতিটি মানুষের জন্যই বিশেষ দরকারি।

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

কনফিউজিং এই দুইটা কনসেপ্ট ‘কোড করতে শেখ’ আন্দোলনে বিঘ্ন ঘটাচ্ছে। Maybe Not Everybody Should Learn to Code শিরোনামে স্লেট একটা আর্টিকেল প্রকাশ করেছে; Should Journalism Schools Require Reporters to ‘Learn Code’? No শিরোনামে আটলান্টিক একটা আর্টিকেল প্রকাশ করেছে; Please Don’t Learn To Code শিরোনামে Jeff Atwood একটা আর্টিকেল লিখেছেন যেখানে তিনি একটা প্রশ্নের মাধ্যমে এই কনফিউশনের সারমর্ম পরিষ্কারভাবে তুলে ধরেছেন:

How [would] Michael Bloomberg be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder?

এটা অবশ্যই ভুল প্রশ্ন। এটা পাবলিক ক্যাম্পেইনের ফলাফল যা তুলে ধরে যে কোড শেখাই সর্বশেষ লক্ষ্য, ‘চিন্তা করতে শেখ’ এই আন্দোলনের বিপরীত। যেখানে Jeff Atwood এর মত একজন অভিজ্ঞ ও সম্মানিত প্রোগ্রামারও এই কনফিউশনে কনফিউজড হতে পারেন, সেখানে জনসাধারণ এটাকে ঠিকভাবে বুঝবে এরকম কোন সম্ভাবনাই নাই। যে প্রশ্নটা আমাদের জিজ্ঞেস করা উচিত:

Would Bloomberg—or anyone else—be better at their job if they improved their ability to think by learning new problem solving strategies and developing a better grasp of logic?

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

গুরু, তোমার নামেই শুরু

এই মুহূর্তে তুমি কম্পিউটার সায়েন্স নিয়ে পড়াশুনা শুরু করতে পার – তবে এই সুখবরটার জন্য code.org এর জন্য অপেক্ষা করার কোন প্রয়োজন নাই। আসলে, আসলে এটা সহজতম সাবজেক্টগুলোর একটা। তোমার শুধু একটা কম্পিউটার আর ইন্টারনেট কানেকশন দরকার। আর যেহেতু তুমি এই পোস্টটা পড়ছ তাই ধরে নিলাম তোমার দুটোই আছে।

এখানে কিছু রিসোর্স দিলাম:

ইউনিভার্সিটি কোর্স

  1. Coursera
  2. Udacity
  3. MIT OpenCourseWare
  4. Stanford Engineering Everywhere
  5. Academic Earth

অনলাইন টিউটোরিয়াল

  1. Khan Academy
  2. Treehouse
  3. MIT Scratch
  4. Codecademy
  5. Code School

কমিউনিটি ও ক্লাব