ম্যাথ, কম্পিটিটিভ প্রোগ্রামিং ও কম্পিউটার সায়েন্সের কনফিউশন আহসান

5 min read

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

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

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

তুমি যদি ম্যাথ ভালোবাসো। তুমি ম্যাথে প্রো কি প্রো না সেটা কোন বিষয়ই না। আমার কাছে মনে হয় ম্যাথ এতোই গভীর একটা জিনিস যে এতে প্রো হওয়া সম্ভব না, তবে হ্যাঁ ম্যাথের কিছু স্পেসিফিক সেক্টর কিংবা থিওরিতে তুমি প্রো হতেই পারো।

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

“So, when you start, it doesn’t matter. What matters is your passion and love towards it.”

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

“Love is emotional connection & feelings towards something. Passion is love in action, it is what you love doing.”

যাই হোক আজাইড়া কথা বাদ দিয়ে আসল কথায় আসি। এই আর্টিকেলটা পড়তে পারো - Computer Science is Not Math

সোজা কথা হল তুমি নিজেকে কোথায় দেখতে চাও?

1. তুমি কি নিজেকে একজন পিওর ম্যাথেমেটিশিয়ান হিসেবে দেখতে চাও? নাকি,

2. নিজেকে একজন প্রোগ্রামার হিসেবে দেখতে চাও?

  1. তুমি যদি নিজেকে একজন পিওর ম্যাথেমেটিশিয়ান হিসেবে দেখতে চাও তাহলে you need to learn math the pure mathematical way. তুমি যদি এর সাথে কিছুটা কম্পিউটার কিংবা প্রোগ্রামিংয়ে দক্ষতা রাখো তাহলে তোমার রিসার্চের জন্যই অনেক ভালো হবে। কিন্তু এটা আবশ্যক না। সুতরাং, ম্যাথ যদি তোমার ভালোবাসা ও প্যাশন হয়ে থাকে তাহলে আমার সাজেশন হবে অন্য সব কিছুতে কম প্রায়োরিটি দিয়ে ম্যাথ নিয়েই জীবন কাটিয়ে দাও। হয়তো তুমি একদিন বিখ্যাত কেউ হবা। আর তোমার রিসার্চের জন্য যতটুকু প্রোগ্রামিং জ্ঞান লাগবে তা তোমার আছে/হয়ে যাবে।

  2. তুমি যদি নিজেকে একজন প্রোগ্রামার হিসেবে দেখতে চাও তাহলে you need to learn math the programmer’s way. তোমাকে একজন গ্রেট প্রোগ্রামার হতে হলে যে ম্যাথে প্রো হওয়াই লাগবে কিংবা আগে থেকে ম্যাথে প্রো হয়ে তারপর প্রোগ্রামিং এ আসা লাগবে এমনটা কখনোই না। তোমাকে the programmer’s way তে ম্যাথ শিখে নিতে হবে। যদি একজন গ্রেট প্রোগ্রামার হতে ম্যাথে প্রো হওয়াই লাগতো তাহলে যারা ম্যাথ নিয়ে অনার্স, মাস্টার্স করে তারা ২/১ টা প্রোগ্রামিং ল্যাঙ্গুয়েজ শিখেই বিশ্বের সেরা প্রোগ্রামার হয়ে যেতো।

learning math the programmer’s way বলতে যেটা বোঝাচ্ছি আমি সেটা হল - কম্পিউটার সায়েন্সের বিভিন্ন ডাটা স্ট্রাকচার, অ্যালগোরিদম কিংবা বিভিন্ন কম্পিউটেশনাল থিওরি বোঝার জন্য তোমার যেসব ম্যাথ জানা/বোঝা লাগবে সেগুলো সম্পর্কে হয় আগে থেকে কিছু ধারনা রাখা না হয় প্রোগ্রামিং এর সাথে প্রবলেম সল্ভ করতে করতে ওই থিওরিগুলো শিখে নেয়া। সত্যি বলতে প্রোগ্রামিং প্র্যাকটিসের সাথে সাথে / প্রবলেম সল্ভ করার সাথে সাথে যেকোনো বিষয়ের থিওরি গুলো শিখে নেয়াই লার্নিং দ্যা প্রোগ্রামার্স ওয়ে। এভাবে শিখলে তোমার লাভ হল -

তুমি যদি আগে একটা থিওরি পিওর ম্যাথেমেটিকাল ভাবে শিখো তাহলে তুমি ওই থিওরিটা অ্যাবস্ট্রাক্ট লেভেলে শিখবা। যখন ওই থিওরিটা প্রোগ্রামিং এ অ্যাপলাই করতে যাবা তখন তোমার ওই অ্যাবস্ট্রাক্ট লেভেল আর অ্যাপ্লাইড লেভের মাঝে একটা গ্যাপ তৈরি হবে যেটা তোমার অনেক সময় ও মাথা খরচ করাবে। অনেক সময় হতাশও করাবে। কিন্তু যদি থিওরিটা অ্যাপ্লাইড ওয়েতেই শিখো তাহলে এই গ্যাপটা তৈরি হবে না + তোমার শেখাটাও এফিসিয়েন্ট হবে।

এখন আসি কম্পিটিটিভ প্রোগ্রামিং এর ক্ষেত্রে-

কম্পিটিটিভ প্রোগ্রামিং আসলে আমাদের কি কি দেয়?

১) প্রোগ্রামিং ল্যাঙ্গুয়েজের কনসেপ্টের উপর দক্ষতা

২) যেকোনো রিয়েল লাইফ প্রবলেমের সল্যুশনকে প্রোগ্রামিং ল্যাঙ্গুয়েজের মাধ্যমে ইমপ্লিমেন্ট করার দক্ষতা

৩) ক্রিটিকাল থিংকিং করার দক্ষতা

৪) কম্পিউটার সায়েন্সের টেকনিক, থিওরি (ডাটা স্ট্রাকচার, অ্যালগোরিদম) এফিসিয়েন্টলি প্রয়োগ করার দক্ষতা

৫) সর্বোপরি একজন ভালো প্রোগ্রামার, রিয়েল লাইফ প্রবলেম সল্ভার এবং একজন চিন্তাশীল মানুষ হতে সহায়তা করা

কিন্তু কম্পিটিটিভ প্রোগ্রামিং কিন্তু কাউকে একজন ম্যাথেমেটিশিয়ান বানায় না।

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

সত্যি বলতে এটাই একজন প্রোগ্রামার এর জন্য শিক্ষার সবচেয়ে কার্যকর ওয়ে।

যেহেতু তুমি SSC, HSC পার করে কম্পিউটার সায়েন্স পড়ছো সেহেতু কম্পিউটার সায়েন্সের জন্য প্রয়োজনীয় ম্যাথেমেটিকাল থিওরি/কন্সেপ্ট বুঝে নেওয়ার ক্ষমতা তোমার অবশ্যই আছে।

বিঃদ্রঃ শুধু মাত্র কম্পিটিটিভ প্রোগ্রামাররাই যে গ্রেট প্রোগ্রামার হতে পারে তা কিন্তু না। আমি এমন অনেকের সম্পর্কে জানি যারা কম্পিটিটিভ প্রোগ্রামিং করে না তবে তারা একেকজন গ্রেট প্রোগ্রামার। বিষয় হলো তারা কম্পিটিটিভ প্রোগ্রামিং/প্রোগ্রামিং কন্টেস্ট না করেই নিজে নিজে the programmers way তে শিখেছে ও পর্যাপ্ত প্র্যাকটিস করেছে।

আমার সহজ সরল পরামর্শ হল - আগে ম্যাথের থিওরিতে বস হয়ে পরে কম্পিটিটিভ প্রোগ্রামিং এ আসা ভালো অ্যাপরোচ না।

তাই তুমি যদি নিজেকে একজন ম্যাথেমেটিশিয়ান হিসেবে দেখতে চাও, ম্যাথ যদি তোমার ভালোবাসা + প্যাশন হয়। তাহলে কম্পিটিটিভ প্রোগ্রামিংয়ে সময় না দিয়ে learn math the pure mathematical way.

আর যদি নিজেকে একজন প্রোগ্রামার হিসেবে দেখতে চাও তাহলে আলাদাভাবে ম্যাথে সময় না দিয়ে learn math the programmer’s way. এবং কম্পিটিটিভ প্রোগ্রামিং এ সময় দাও। কম্পিটিটিভ প্রোগ্রামিং অনেক ধৈর্যের বিষয়। এটাকে সময় ও শ্রম দিলেই হয়।

আর যদি এরকম হয় যে তোমার ভালোবাসা একটা আর প্যাশন আরেকটা তাহলে যেটার প্রতি প্যাশন সেটা নিয়ে আগাও, কারণ Passion is love in action, it is what you love doing. আর যেটাকে ভালোবাসো সেটাকে আজীবন ভালোবাসার স্থানে রেখেই শিখতে থাকো।

শুভকামনা :+1:

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