হতাশ প্রোগ্রামার

আগের লেখাটা ছিল কনফিউজড প্রোগ্রামারদের নিয়ে যারা ১০রকমের উপদেশের ভিড়ে বুঝতে পারছে না ডানে যাবে, নাকি বামে যাবে। এবারের লেখাটি হতাশ প্রোগ্রামারদের জন্য যাদের কোড লিখতে গেলেই মনে হয় “আমাকে দিয়ে কিছু হবে না”। প্রোগ্রামিং শিখতে গিয়ে এক পর্যায়ে হতাশ হয়ে যায় নি এমন কোনো মানুষ সম্ভবত ১টাও পাওয়া যায় না, পার্থক্য হলো অনেকে হতাশ হয়ে হাল ছেড়ে দেয়, অনেকে একগুয়ের মত লেগে থাকে। এই লেখার উদ্দেশ্য তোমাকে বড় বড় কথা বলে মোটিভেটেড করা না, বরং প্রোগ্রামিং করতে গিয়ে কেন মানুষ হতাশ হয় সেরকম কয়েকটা কারণ খুজে বের করা, অনেক সময় আমরা হতাশ হয়ে গেলে মাথাঠান্ডা করে চিন্তা করতে পারি না কেন হতাশ লাগছে আর তাই হতাশাটাও কমতে চায় না। এই লেখায় আমরা সেরকম কিছু কারণ খুজে বের করার চেষ্টা করবো।

প্রোগ্রামিং আমাদের সবার কাছেই একদম নতুন ধরনের একটা জিনিস, আমরা যেহেতু রাশিয়ান বা চাইনিজ বাচ্চাদের মত ১০বছর বয়সে কোডিং শিখিনা বরং কম-বেশি মুখস্থবিদ্যা দিয়ে স্কুল-কলেজ পার করে ফেলি তাই আমাদের প্রথম প্রথম প্রোগ্রামিং শিখতে একটু কষ্ট হয়। “প্রোগ্রামাদের মত চিন্তা করা” বা ইংরেজিতে “think like a programmer” বলে একটা কথাই আছে কারণ প্রোগ্রামিং করতে হলে আমাদের সাধারণ মানুষের থেকে একটু অন্যভাবে চিন্তাভাবনা করতে হয়। প্রথমত আমরা বেশিভাগ বিষয়ই খুব ডিটেইলস এ ভেবে অভ্যস্ত না। তোমার যদি একটা নতুন কলম কেনার দরকার হয় তুমি হয়তো ছোট ভাইকে বলো “যা দোকান থেকে একটা কলম কিনে আন”, কিন্তু তুমি যদি একটা রোবটকে বলতে চাও কলম কিনে আনতে তখন অনেক ডিটেইলস চিন্তা করতে হয়। যেমন রোবট কোন দোকানে যাবে? দোকানে কলম না থাকলে কি করবে? দোকান বন্ধ থাকলে কি করবে? অন্য দোকানে খুজবে নাকি ফিরে আসবে? কয়টি দোকানে খুজবে? কোন কোম্পানির কলম কিনবে? কত টাকা বাজেট? কলমের দাম বাজেটের থেকে বেশি হলে কি হবে? এরকম অনেক ইন্স্ট্রাকশন রোবটকে দিয়ে দিতে হবে, নাহলে হয়তো দেখা যাবে রোবট কলম খুজতে খুজতে অন্য শহরে চলে গেছে! তো প্রোগ্রামার হতে হলে তোমার এরকম খুটিয়ে খুটিয়ে চিন্তা করার অভ্যাস রপ্ত করতে হবে, নাহলে দেখা যাবে কোড লেখার সময় নানান রকমের কেস মিস যাবে, কখনো নেগেটিভ ইনপুট হ্যান্ডেল করতে ভুলে যাবে, কখনো রিকার্শন থামাতে ভুলে যাবে, প্রোগ্রাম ক্র্যাশ করবে এবং তুমি হতাশ হয়ে যাবে।

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

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

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

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




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

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

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

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

হ্যাপি কোডিং!

Print Friendly, PDF & Email

ফেসবুকে মন্তব্য

comments

Powered by Facebook Comments

24,473 times read (exlcuding bots)

Leave a Reply

Your email address will not be published. Required fields are marked *