কনফিউজড প্রোগ্রামার

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

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

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

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

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

এরপর এইচ.এস.সি পরীক্ষার পর এবং ভর্তি পরীক্ষার আগে এক বড়ভাইয়ের কাছে জানতে পারি সি শেখা খুব কঠিন না আর সবাই সি দিয়ে প্রোগ্রামিং শেখা শুরু করে। তখন ডেইটেলের একটা মোটাসোটা সি এর বই জোগাড় করে শেখা শুরু করি। সেসময় আমার কাছে ইন্টারনেট থাকলেও ব্যবহার ছিল খুবই সীমিত। সি এর বেসিক সব নলেজ আমি ডেইটেলের বই থেকেই শিখেছি, মাঝে মাঝে সেই বড়ভাইয়ের সাহায্য নিয়েছি। তখন আমি সি আর সি++ নিয়ে কনফিউজড হয়ে গিয়েছিলাম (এমন কি আছে যে হয় নি?), কোনটা আগে শিখবো? পরে যখন শুনলাম যে একটা ল্যাংগুয়েজ শেখার পর বাকিগুলা শেখা তেমন কঠিন না, আসল কাজ হলো “প্রোগ্রামারদের মত” চিন্তা করতে শেখা, তখন আর সেই নিয়ে দুশ্চিন্তা না করে ডেইটেলের সি এর বই, আর ইন্টারনেটে দুয়েকটা রেফারেন্স সাইট ছাড়া তেমন কিছু ধরিনি।

এখন আমার হাতে অনেক রিসোর্স, জানিও আগের থেকে অনেক বেশি, কিন্তু এখন নতুন কিছু শিখতে গেলে আমি কনফিউজড হয়ে যাই। চারিদিকে হাজারটা ফ্রেমওয়ার্ক (জাভাস্ক্রিপ্টের ফ্রেমওয়ার্কের জন্মহার বাংলাদেশের জন্মহারের সাথে পাল্লা দেয়ার চিন্তা করছে), দশ রকমের ডাটাবেস টুল, দশ রকমের ল্যাংগুয়েজ নিয়ে দশ হাজার ভিন্ন মতামত। HackerRank এ কাজ করার সময় রুবি অন রেইলস শিখলাম, এরপর জানলাম রুবি অন রেইলসে নাকি হাজার রকম সমস্যা, রবি ডেভেলপাররা না খেয়ে মারা যাবে কয়দিন পর, backbone.js শিখলাম, তারপর শুনি শুধুমাত্র মেরুদন্ডহীন ইঞ্জিনিয়াররাই ব্যাকবোন ব্যবহার করে, এখনকার ইঞ্জিনিয়াররা React.js ব্যবহার করে। এখান Traveloka.com এ জাভা নিয়ে কাজ করছি, কিন্তু একসময় আমি নিজেও কত জাভা নিয়ে নাক শিটকেছি!

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

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

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

যখনই নতুন কোনো বিষয় শিখবে, চেষ্টা করবে একসাথে একাধিক সোর্স থেকে না শিখতে। সবথেকে ভালো, নির্ভরযোগ্য সোর্সটা বেছে নিয়ে সেখান থেকে মোটামুটি ভালো করে শিখে এরপর অন্যান্য সোর্স নিয়ে গুতাগুতি করে দেখবে আরো কিছু শেখা যায় নাকি, তাহলে কনফিউজড হবার সম্ভাবনা কমে যাবে। যেমন সি শেখার জন্য ডেইটেল বা হার্ভার্ড শিল্ডের বই সারা পৃথিবীর ছেলেমেয়েরা পড়ে, এই বইগুলোর গ্রহণযোগ্যতা নিয়ে কোনো সন্দেহ নেই, তুমি এরকম একটা বই বেছে নিয়ে যতটা সম্ভব পড়ে ফেলতে পারো। অথবা ইংরেজী পড়তে না চাইলে তামিম শাহরিয়ার সুবিনের বাংলা বইও পড়তে পারো। আবার মেশিন লার্নিং সম্পর্কে জানতে চাইলে অ্যান্ড্রু এনজির কোর্সেরা ভিডিও কোর্সটা চোখ বন্ধ করে বেছে নিতে পারো। এর মানে এই না যে এক বিষয়ের উপর একটাই বই পড়ে সারাজীবন চালিয়ে দিবে, “The man of a single book” হওয়াটা বুদ্ধিমানের কাজ না। ভালো বই/ভিডিও/ব্লগ চেনার সহজ উপায় হলো, সেখানে খালি তোমাকে কি করলে কি হবে বলা থাকবে না, কেন হবে সেটাও বলা থাকবে।

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

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

তোমার প্রোগ্রামিং ক্যারিয়ার দীর্ঘায়িত হোক, হ্যাপি কোডিং‍!

অফিসিয়াল ফেসবুক পেজ

Print Friendly, PDF & Email

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

comments

Powered by Facebook Comments

44,871 times read (exlcuding bots)

4 thoughts on “কনফিউজড প্রোগ্রামার

Leave a Reply

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