ফান্ডামেন্টাল শক্ত না করলে প্রোগ্রামার হতে পারবেন না

ফান্ডামেন্টাল শক্ত না করলে প্রোগ্রামার হতে পারবেন না

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

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

আসল ব্যাপারটা জানেন? আমি সফটওয়্যারের একদম ফান্ডামেন্টাল জিনিসগুলো মিস করতেসিলাম।

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

আমার গল্প রাখেন, আপনার নিজেরটা চিন্তা করেন।

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

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

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

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

আমি প্রায়ই চিন্তা করতাম, এই ভার্সিটি আমাকে দিয়ে হলো না ভালো কথা, সফটওয়্যার ডেভেলপমেন্ট আরো ভালোভাবে শেখার জন্য কি ভালো কোন উপায়ই নেই?

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

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

কিন্তু আমার কি আসলে এটা দরকার ছিলো, নাকি অন্য কিছু?

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

গাইডের যন্ত্রণায় পাগল হয়ে, আমি এক পর্যায়ে নিজেকে প্রশ্ন করা শুরু করলাম।

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

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

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

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

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

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

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

ভালো ডেভেলপার হওয়ার জন্য আপনি কয়েকটা স্টেপ পার করতে হবে। ফাঁকিবাজি করে লাভের চেয়ে লসই বেশি হবে। আচ্ছা তো স্টেপগুলো হলোঃ

  • ০। ইংরেজি শিখুন, ইংরেজি জানুন।
  • ১। আত্মবিশ্বাস রাখুন, আপনি অলরেডি অনেকটুকু এগিয়ে গিয়েছেন যে আপনি অলরেডি অনেকটুকু এগিয়ে গিয়েছেন।
  • ২। জানুন, আপনার গ্যাপ কোথায় কোথায়?
  • ৩। জানুন কিভাবে কম পরিশ্রমে বেশি আউটপুট করতে পারবেন।
  • ৪। ফান্ডামেন্টালগুলো আরো ঝালাই করুন।
  • ৫। কোডের বাহিরে কি হয় তা দেখতে শিখুন।

০। ইংরেজি শিখুন, ইংরেজি জানুন।

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

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

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

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

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

কিন্তু ততক্ষন আমরা বসে থাকবো না। সব রকম রিসোর্স আমাদের মাতৃভাষা বাংলা ভাষাভাষীর জন্য সহজলভ্য করতে হলেও ইংরেজি শিখুন, এটা (দুনিয়ায়) মোটামুটি সবজায়গায় কাজে আসবে।

১। আত্মবিশ্বাস রাখুন, আপনি অলরেডি অনেকটুকু এগিয়ে গিয়েছেন

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

ইভান্স ডাটা করপোরেশনের চালানো একটা সার্ভে অনুযায়ী দুনিয়ায় ধরেন এই মূহূর্তে ২৭ মিলিয়ন সফটওয়্যার ডেভেলপার আছে। যেটা প্রতি বছর প্রায় ১-২ মিলিয়ন গতিতে বাড়ছে। ২৭ মিলিয়ন মানুষের ভীরে হারিয়ে যাবার আগেই একটু অপেক্ষা করেন। পৃথিবীতে ধরেন প্রায় ৭.৭ বিলিয়ন মানুষ আছে, তার মধ্যে মাত্র ০.৩৪% সফটওয়্যার ডেভেলপার। আপনি এই বুদ্ধিজীবীদের একজন, যারা বুদ্ধির চর্চা করে থাকেন, ব্যাপারটা জোস না?

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

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

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

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

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

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

যাক, মূল সমস্যা ত বুঝতে পেরেছেন? এবার আসেন পরের স্টেপে যাই।

২। আপনার গ্যাপগুলো কোথায়?

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

ডিজাইন প্যাটার্নের ছোটগল্প

প্যাটার্নের যেই কনসেপ্ট আছে, সেটা সবার সামনে ভালোভাবে ১৯৭০ সালের দিকে তুলে ধরসিলেন একজন রাজমিস্ত্রী। উনি আর্কিটেক্ট ছিলেন। বিল্ডিং তৈরির উপর উনি অনেকগুলা প্যাটার্ন নিয়ে আলোচনা করেছিলেন। একটা বিল্ডিংয়ে কতগুলো জানালা থাকা দরকার, কতগুলো লেভেল থাকা দরকার, কত উঁচু হলে সমস্যা হবেনা, আশেপাশে কি পরিমাণ গাছপালা থাকা দরকার। এইসব একটা প্যাটার্নের মধ্যে নিয়ে আলোচনা করেছিলেন।

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

এইসব ছোটখাট রিসোর্সের কারণে ইন্ডাস্ট্রি বদলে গেলে বুঝতে হবে সেখানে রিসোর্স অনেক ছিলো কিন্তু ভিতরে অনেক গ্যাপ ছিলো।

ব্রিটিশদের জাহাজ ডুবে যাওয়ার ছোটগল্প

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

তো জন হ্যারিসন নামে একজন একটা ক্রোনোমিটার তৈরি করলো, উনার এই আবিস্কারের কারণে সমস্যার সমাধান হয়ে গেল। উনি কিন্তু নিজে থেকে কাঠমিস্ত্রী করা শিখেছেন, আর এই ক্রোনোমিটার বানাতে তার প্রায় ৪০ বছরের মত লেগেছিলো।

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

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

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

আপনাকে আপনার নিজের গাইডলাইন তৈরি করতে হবে, কারণ সব গাইডলাইন সবার জন্য তৈরি করা হয়না। আপনি ঠিক কোথায় আছেন, সেই অনুযায়ী কিন্তু একটা কোর্স তৈরি করা হয়না, হাজার হাজার স্টুডেন্টের কথা মাথায় রেখে তৈরি করতে হয়। তো, প্রথমে নিজের গ্যাপ বের করুন, কোথায় যাবেন, কি শিখবেন, এগুলোর একটা ম্যাপ তৈরি করুন, এরপর বাকিটা এক্সিকিউশনের ব্যাপার।

গাইডলাইন পেলেও কাজ হয়না, বেশিরভাগই গাইডলাইন পেয়ে ফলো করতে পারেন না। কারণ উনাদের গাইডলাইন এত বড় হয় যে শুরুর আগেই উনারা ভয় পেয়ে যান।

৩। কম পরিশ্রমে বেশি কাজ করুন, (বি স্মার্ট, ডু মোর)

আপনার টেকনিকাল স্কিলের গ্যাপ কোথায় কোথায় আছে সেটা দিয়ে আপনার জ্ঞানের কোন অংশগুলো বাকি আছে সেগুলো বের করতে পারলেন। কিন্তু আপনি যদি এই বিশাল গ্যাপ পূরণ করতে গিয়ে উল্টাপাল্টা বিষয়ে ফোকাস করেন, এবং একশন নেয়া শুরু করে দেন, তাহলে এইটার কোন মূল্য নাই, বরং কোন কোন ক্ষেত্রে এটা আরো ক্ষতির কারণ হতে পারে।

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

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

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

আমার মতই, যখন বেশিরভাগ ডেভেলপার তাদের স্কিল উন্নত করতে চায়, তখন তারা কি করে? আট দশটা কোর্স কিনে, চার পাঁচটা সাইড প্রজেক্ট শুরু করে। আপনার সেইম প্ল্যান থাকলে জেনে রাখেন, আপনি জীবনেও ওইগুলা শেষ করতে পারবেন না।

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

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

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

৪। ফান্ডামেন্টাল শিখেন, ভিত শক্ত করেন

আচ্ছা ছোটকালের কথা মনে করেন। ছোটকালে কখনো বালু দিয়ে ঘর বানাইসিলেন? একটু মনে করে দেখেন ত, বালু দিয়ে তৈরি করা ঘরটা কি বেশিক্ষন টিকতো? আচ্ছা গ্রামে মাটির চুলা ত দেখসেন? মাটি দিয়ে না করে যদি বালু দিয়ে করতো, তাহলে কি এটা বেশি টিকতো?

কেন টিকতো না? কারণ বালু এমনি এমনি বেশিক্ষণ টিকে থাকে না, কাঁদা, সিমেন্ট, রড, এগুলো ঠিকমত ব্যবহার না করলে বালুর তৈরি ঘর, কিংবা চুলা, দুইটাই অল্প সময়েই ভেঙ্গে পড়বে। না এগুলো কোন কিছুর ভর নিতে পারবে, না এগুলো কোন কাজে আসবে।

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

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

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

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

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

আপনার টেকনিকাল স্কিলের উপর আত্মবিশ্বাস আনতে চাইলে প্রথমে ফান্ডামেন্টাল শিখতেই হবে।

৫। কোডের বাইরে কি হচ্ছে দেখুন

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

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

আর যারা ভালো করতো, তারা অংক আসলেই বুঝতে পারতো। অংকের বিভিন্ন অংশের প্যাঁচ বুঝতো, কোন অংশের সাথে কোন অংশ ঠিকমত যায়, সেটা বুঝতে পারতো। শুরু থেকে শেষ পর্যন্ত পুরোটার একটা মানচিত্র তারা তৈরি করে ফেলতে পারতো।

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

দিন শেষে আপনার কাজটা যদি প্রডাকশনে না যেতে পারে, আপনি যদি সমস্যার সমাধান না করতে পারেন, তাহলে আপনি জুনিয়র রয়ে যাবেন। বারবার সিনিয়র কারো আশায় বসে থাকতে হবে, কবে এসে সলুশন বাতলে দিবে আর আপনি সলুশন করতে পারবেন। একসময় আত্মবিশ্বাসও হারিয়ে ফেলবেন।

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

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

কিভাবে এত জ্ঞান কাজে লাগাবেন?

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

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

এগুলা করতে ত অনেক বছর লেগে যাবে!

আমার কোম্পানীর সিনিয়র যারা, উনাদের ৫-১০-২০ বছরের অভিজ্ঞতা আছে। আমি যদি এইসব ফান্ডামেন্টালের দিকে তাকাই, আমার মনে হয়না এইসব শিখতে পারবো। উনাদের মত সিনিয়র হতে আমার আরো ৫-১০ বছর সময় লাগবে। এত সময় কই?

১০-২০ বছর চেয়ারে বসে থাকলেই সিনিয়র হওয়া যায়না। এক্সপেরিয়েন্স অবশ্যই গুরুত্বপূর্ণ, কিন্তু ঠিক কি উপায়ে আপনি এক্সপেরিয়েন্স তৈরি করতেসেন, তা আরো বেশি গুরুত্বপূর্ণ। আপনি একটা কোম্পানীর সিনিয়র হয়ে আরেক কোম্পানীর জুনিয়রের চেয়েও কম জানতে পারেন।

উপরের স্টেপগুলোর কয়েকটা করা শুরু করুন। আর কয়েক মাস পর এসে আমাকে নক দিন, দেখেন আপনার কোন পরিবর্তন এসেছে কিনা।

আমার হাতে সময় নাই!

ভাই জবে সারাদিন-সারারাত কাজ করি, কাজের পর শরীর আর চলে না। বন্ধের দিনগুলোও একদম কিভাবে যেন চলে যায়।

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

ভাই একটা পার্সোনাল সমস্যায় আছি

আমি অনেক কিছু শিখতে চাই। কিন্তু আমার একটু ফ্যামিলিতে সমস্যা চলতেসে, পরে শিখবো।

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

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

©অসাধারণ ডেভেলপাররা যা করে এখনই করে।

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

গাইডলাইন আর রিসোর্স দরকার

ভাই সব বুঝছি, কিন্তু একটা ছোট গাইডলাইন, রোডম্যাপ বা কিছু যদি দিতেন।

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

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

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

রিক্যাপ

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

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

আপনি এখনই শুরু করতে পারেন। শিখতে চাইলে কেউ আটকাতে পারবে না। শিখুন, জানুন, তৈরি করুন।