প্রোগ্রামারদের মত ভাববেন যেমনে

মোঃ আবু তাহের
Coder Ants
Published in
8 min readApr 21, 2018

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

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

এই দেশের সবাই প্রোগ্রামিং শেখা দরকার, কারণ এইডা আপনারে চিন্তা করতে শেখায়।

আপনে হয়তো ভাবতেসেন এই কথাডার মানে কি আসলে? প্রোগ্রামারদের মত আবার ভাবে কেমনে? এই ভাবাভাবির কাজটাই বা কেমনে করে?

আসলে মূল ব্যাপারটা হইলো প্রোগ্রামারদের সকল ভাবাভাবির সবকিছুই হইলো যেকোন একটা সমস্যা সবচেয়ে কম ঝামেলায় সবচেয়ে ভালোভাবে সমাধান করা। যেখানেই সমস্যা পাইবেন ওইখানেই প্রোগ্রামাররা কিছু একটা সমাধান বাহির করবে।

এই পোস্টে আপনেরে আমি এই ভাবনা চিন্তার রাস্তাটাই বলে দিব। পোস্ট পুরাটা পড়া শেষ হইতে হইতে আপনে জেনে যাবেন কেমনে ভালো প্রবলেম-সল্ভার (সমস্যার সমাধানকারক) হইতে পারবেন। ফলস্বরূপ আপনের আশেপাশের সবাই আপনারে মহাজ্ঞানী বলে বলা শুরুও করতে পারে।

এত জ্ঞান দিয়া কি হবে?

সমস্যার সমাধান করা হইলো একটা সার্বজনিন স্কিল। এইটা সবজায়গাতেই কাজে লাগে।

ধরেন, আপনের সমস্যা আছে। আমারও আছে। বড় সমস্যা, ছোট সমস্যা। দিনের শুরুতে এক সমস্যা, শেষে আরেক সমস্যা। আমরা কিভাবে এইসব সমস্যার সমাধান করি? কেমনে কেমনে যেন করি, তাইনা?

যদি সমস্যা সমাধান করার কোন সিস্টেম জানা না থাকে তাইলে আপনে সম্ভবত নিচের সিস্টেম মেনে করেন:

১. প্রথমে একটা উপায়ে চেষ্টা করেন।

২. ওইটায় কাজ না হইলে আরেকটা উপায়ে চেষ্টা করেন।

৩. ওইটাতেও না হইলে আরেকটা উপায়ে চেষ্টা করতেই থাকেন, করতে করতে যতক্ষণ না বিরক্ত হইতেসেন ততক্ষণ করেন।

ততক্ষণের ধৈর্য থাকলে তবেই ত ততক্ষণ করবেন, তাইনা? যদি কোনমতে সমস্যার সমাধান হয়েও যায়, তাও দিন শেষে আপনের আফসোস হয়,

ইস, শুরুতেই কেন এইটা করলাম না?

মানে, পুরাটা সময় যে নষ্ট হইলো, ওই আফসোসটা রয়েই যায়। সময়টা ত নষ্ট হইসে সেইটা ত আফসোসের সাথে বোনাস মাত্র।

প্রবলেম সল্ভ করার সবচেয়ে ভালো উপায় হইলো একটা সিস্টেম তৈরি করে রাখা, এবং ওই সিস্টেম বারবার প্রাকটিস করতে থাকা।

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

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

বড় বড় কঠিন সমস্যাকে ভেঙ্গে টুকরা টুকরা করে, কেটে কুচি কুচি করে ছোট ছোট সমস্যায় ভাগ করাটা হইলো একটা বিশাল স্কিল।

আর হ্যাকারর‍্যাংকের ২০১৮ এর ডেভেলপার স্কিল রিপোর্টে এইসব কথাই আসছে। ওই রিপোর্টে প্রায় চল্লিশ হাজার মানুষ অংশ নিসিলো, আপনের কি মনে হয় না ৪০ হাজার মানুষের কথার কোন দাম আছে?

ফ্রেমওয়ার্ক বা সিস্টেম যেমনে বানাইবেন বা রাখবেন

সমস্যা সমাধান করতে গেলে ত আগে সঠিক সিস্টেম থাকা ত লাগবে। এমন একটা সিস্টেম লাগবে যেটা প্রায় সবাই ভালো বলে মনে করে।

নতুন নতুন কত পোলাপাইন দেখি, ওদের একটা বিশাল বড় ভুল হইলো ওরা প্রথমেই সিনট্যাক্স বা কেমনে কোড লিখবে ওইটা শিখে, কিন্তু কেমনে একটা সমস্যার সমাধান করবে ওইটা শিখে না। — ভি. এন্তন স্প্রাউল

তো যেকোন একটা সমস্যা পাইলে ওইটা কেমনে সমাধান করবেন? পড়তে থাকেন, তাইলেই না বুঝবেন? বুঝানোর স্বার্থে ধরি এইটা একটা প্রোগ্রামিং সমস্যা।

১। বুঝার চেষ্টা করবেন

আগে বুঝার চেষ্টা করেন প্রশ্নে কি বলতে চাইতাসে। কঠিন প্রশ্নগুলা আপনের কাছে কঠিন লাগে কারণ আপনে ওইটা বুঝতেই পারতাসেন না।

কেমনে বুঝবেন যে আপনে ঠিকমত বুঝতে পারসেন কিনা? খুব সহজ। আপনে সমস্যাটা অন্য কাউরে বুঝানোর চেষ্টা করেন।

বুঝাইতে গেলেই দেখবেন সমস্যার অনেক ফাঁকফোকড় বের হয়ে আসবে। এমন অনেক কিছুই দেখবেন যেইটা আগে চোখেই পড়ে নাই।

বেশিরভাগ প্রোগ্রামারই এই জিনিসটা বুঝতে পারে :D ।

এইজন্যই আপনের উচিত হবে সমস্যাটা লেইখা ফেলা, কিংবা খাতায় আইকা ফেলা, আর না হইলে কাউরে খুলে বলা। অনেকেই এই কাজটা করার জন্য রাবারের পুতুল ব্যবহার করে। অদ্ভুত, তাইনা?

আপনে যেইটা সহজ ভাষায় বুঝাইতে পারেন না, ওইটা আপনে বুঝেন না। — রিচার্ড ফেইনম্যান।

২। প্লান

কোন প্লান ছাড়াই সমস্যার সমাধানে লাফাইয়া পড়ার মত বোকামি কইরেন না। যতই ভাবেন যে কাজটা সহজ হইবো, ততই সহজ না ব্যাপারটা। প্লান কইরা মাঠে নামেন।

আপনারে কেউই সাহায্য করতে পারবো না যদি আপনি প্রতিটা স্টেপ লেখতে না পারেন। আপনে নিজেও দেখবেন একসময় হাবুডুবু খাইতে থাকবেন।

প্রোগ্রামিং এর জগতে এইটার মানে হইলো, সমস্যা পাইলেই কোড করতে যাইয়েন না। মাথাটারে একটু সময় দেন পুরা জিনিসটা বুঝার জন্য।

একটা ভালো প্লান পাওয়ার জন্য এই প্রশ্নডা করতে পারেন।

“যদি আমি ক বসাই, তাইলে খ পাওয়ার জন্য কি করতে হবে?”

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

প্রোগ্রামাররা এই কাজের জন্য “কমেন্ট” নামে একটা জিনিস ব্যবহার করে। যেকোন কিছুই নোট করে রাখতে এই জিনিস বেশ কাজে দেয়।

৩। ডিভাইড করেন, ভাঙ্গেন

নুডুলস খাইবেন ভালো কথা, বাসায় নুডুলস নাই ওইটাও বুঝতে পারসেন। এখন পুরা জিনিসটা কি এক মূহূর্তেই সমাধান করতে চাইতেসেন? এত সোজা পাইসেন?

যেকোন সমস্যা এক ধাক্কাতেই পুরাটা সমাধান করতে যাইলে কান্নাকাটি ছাড়া উপায় থাকবে না।

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

সবচেয়ে সহজ সমস্যা মানে হইলো ওইটার উপর অন্য কোন ছোট সমস্যা নির্ভর করতেসে না।

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

আপনে যদি নতুন প্রোগ্রামার হন, তাইলে অনেক কিছু দেখেই আপনার মাথা ঘুরাইবে। ধরেন আপনারে একটা সমস্যা দিলো, “এইযে নাও দশটা নাম্বার, এই নাম্বারগুলা হইতে বড়র দিক হইতে তৃতীয় যেইটা, ওই নাম্বারটা আমার দরকার।” এই প্রোগ্রাম লেখাটা বিশাল বড় একটা ব্যাপার।

এইডা একটা সমস্যা হইলো?১ হইতে ১০ দিলে উল্টা দিক হইতে গণলেই ত হইলো।

কাজটা সহজ ভাবতাসেন? আরি নাহ। দশটা নাম্বার ত দিমু কঠিন কঠিন বড় বড় নাম্বার, তাও উল্টাপাল্টা করে। ২০০০০ এর পর দিমু ২৩১৩১, এরপর দিমু ১২৩১২। এইভাবে দশটা।

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

এইটাও কঠিন লাগলে সমস্যা আরো কুচি কুচি করেন। দশটা না পারলে তিনটা নাম্বার হইতে সবচেয়ে বড় নাম্বার বের করেন তাইলে। এইটাও কঠিন লাগলে দুইটা নাম্বার হইতে বড় নাম্বার বের করেন।

এইভাবে বড় সমস্যারে এমন ছোট করবেন যেইটার সমাধান আপনে জানেন। এরপর এইটারে লিখে ফেলবেন। পরে এই জিনিসটার উপর কারসাজি করে আস্তে আস্তে বড় সমস্যার সমাধান হয়ে যাবে।

৪। আটকে গেছেন?

সবই ঠিক থাকলেও এই কিন্তু আমাকে ঠিকই প্রশ্ন করবেন, “ভাই, সবই ঠিক আছে, কিন্তু একটা সমস্যার সমাধান যদি করতে নাই পারি একদম? তাহলে কি করবো?”

প্রথমেই লম্বা একটা নিশ্বাস ছাড়েন, এরপর একটা লম্বা নিশ্বাস নেন। এরপর জেনে রাখেন, এইটা একদমই স্বাভাবিক। সবাই আটকে যায়।

সেরা সেরা প্রোগ্রামাররা যেকোন সমস্যা পাইলে বিরক্ত না হয়ে বরং ওইটার ব্যাপারে আরো আগ্রহী হয়, কেন বাগটা হইলো সেটা নিয়ে তারা ভাবতে থাকে। বাগের মূলে না যাওয়া পর্যন্ত তাদের ঘুমই হয় না যেন।

ঝামেলায় পড়লে এই স্টেপ মানতে পারেন।

ডিবাগঃ স্টেপ বাই স্টেপ আপনের সমাধানের প্রতিটা লাইন গুতায়ে দেখেন। খুজে বের করেন কোথায় ঘাপলা হইসে। এইটারে ডিবাগিং বলে। সত্যি বলতে, ডিবাগাররা এই কাজটাই করে।

ডিবাগিং এর আর্ট হইলো ওইখানে যে আপনে প্রোগ্রামরে আসলেই কি করতে বলসেন সেইটা খুজে বের করা, প্রোগ্রামরে কি করতে বলসেন বলে ভাবতেসেন ওইটা না। — এন্ডরু সিঙ্গার

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

১ হতে ১০০ পর্যন্ত প্রতিটা সংখ্যা যোগ করতে বলা হইলে দুইটা উপায়ে করা যায়। একটা হইলো ১ + ২ + ৩ + … এমনে। আরেকটা হইলো ১০০(১০০+১)/২, এমনে। দুইটাই একই রেজাল্ট দিবে। এখন প্রতিটা সংখ্যা যোগ করবেন নাকি কম সময়ে যোগ করে ফেলবেন, সেইটা আপনের বিষয়।

দৃষ্টিভঙ্গী বদলানোর আরেকটা উপায় হইলো পুরা জিনিসটা নতুন করে শুরু করা। সব বাদ দিয়া নতুন করে শুরু করেন। এমন অনেক কিছুই চোখে পড়বে যেটা আগে পড়ে নাই।

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

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

প্রাকটিস

সিস্টেম পাইসেন ভালো কথা। কিন্তু মাত্র এক সপ্তাহ সিস্টেম মানার পর নিজেরে আইনস্টাইন ভাবলে হবে না। ভালো প্রোগ্রামার হতে চাইলে প্রচুর সমস্যার সমাধান করতে হবে।

প্রাকটিস করতে থাকেন…করতে থাকেন…করতে থাকেন, করতে করতে একসময় এইরকম একটা সমস্যা পাইলে আপনেই বলবেন, “ওহ এই সমস্যাটা অমুক সিস্টেম দিয়া খুব সহজেই সমাধান করা যায়”।

কেমনে প্রাকটিস করবেন?

প্রোগ্রামিং, রুবিক কিউব, দাবা, অংকের সমস্যা, ভিডিও গেমস, পাজেল গেমস সহ হাজারো জিনিস আছে। প্রাকটিস করতে থাকেন।

বড় বড় সফল ব্যক্তিবর্গ যেমন মার্ক জুকারবার্গ, ইলন মাস্ক এরা সবাই আসলে ছোট ছোট সমস্যার সমাধান করার প্রাকটিস করে।

তারমানে কি এই যে আপনে সারাদিন গেমন খেলবেন যে কোনদিন এই গেমস খেলতে খেলতে আপনে ভালো প্রোগ্রামার হয়ে যাবেন? মোটেই না।

কিন্তু গেমসগুলার মূল বিষয় কি? ঠিকই ভাবসেন, সমস্যার সমাধান করাই হইলো ওইগুলার মূল বিষয়।

আমার কথাই ধরেন, আমি ছোট ছোট কোডিং চ্যালেন্জগুলা সমাধান করি। ছোট হইলে কি হবে, ছোট মরিচের ঝাল কি কম?

যত সমস্যা আছে প্রায় সবই একটা প্রায় একই প্যাটার্ন মেনে চলে।

পরিশেষে

এখন ত আপনেরা জানেন প্রোগ্রামারদের মত কেমন ভাবতে হয়। তাইনা?

এইটাও জানেন যে সমস্যার সমাধান করার স্কিল হইলো একটা অসাধারণ সার্বজনীন স্কিল।

আর এখন আপনে এইটাও জানেন যে সমস্যার সমাধান করার প্রাকটিস করার জন্য আপনার কি করা লাগবে।

পরিশেষে, আশা রইলো যে আপনার সারাটা জীবন সমস্যায় পরিপূর্ণ হয়ে উঠুক।

… হ, ঠিকই পড়তেসেন। কারণ এখন ত আপনে সমস্যাগুলা সমাধান করার উপায় জানেনই।

জীবনটাই এমন, যখনই আপনে একটা বিশাল সমস্যার সমাধান করে একটু হাফ নিতে চান, আরেকটা সমস্যা আপনের চোখের সামনে আসে। এভাবে আসতেই থাকে। প্রতিবারই আপনে নতুন কিছু শিখতে পারেন। প্রতিবারই আপনে জ্ঞান, ক্ষমতা, আর নতুন দৃষ্টিকোন লাভ করেন।

যান এইবার গিয়া কিছু সমস্যার সমাধান করেন।

বেস্ট অফ লাক ;) !

ওহ, পারলে পোস্টটা লাইক আর শেয়ার কইরেন। আপনের আমার উপকার ত হইলোই, সাথে অন্য কেউ এই সমস্যার সমাধান করা নিয়া আটকে ওই লোকটারও একটু উপকার করে ফেললেন। আপনে না করলে কে করবে?

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

--

--

মোঃ আবু তাহের
Coder Ants

প্রোগ্রামিং জগতে ঘুরি ফিরি। শিখতে ও শিখাতে ভালোবাসি।