প্রশ্ন ১. ভাইয়া কোথা থেকে শুরু করবো বা কোন প্রোগ্রামিং ল্যাংগুয়েজ টা আগে শিখা সবথেকে ভালো হবে.?
উত্তর : এই প্রশ্নের উত্তর দিতে গেলে বলতে হয় যে কথাটা প্রথমে সেটা হলো, আগে ফাস্ট আপনাকে ভালোভাবে জেনে নিতে হবে প্রোগ্রামিং ল্যাংগুয়েজ টা আশাকরি, আর আপনি আসলে কিসের জন্য বা কি কাজে এটা ব্যবহার করতে চান এই প্রশ্নের উত্তর গুলো ভালোভাবে ক্লিয়ার হয়ে আপনাকে প্রোগ্রামিং এ হাত দেওয়া উচিৎ। এবার আসি, আপনি কোন ল্যাংগুয়েজ দিয়ে প্রোগ্রামিং লাইফ এর যাত্রাটা শুরু করবেন সেই সম্পর্কে।
যদি আপনার মাথায় কোন নির্দিষ্ট প্রোজেক্টের আইডিয়া থাকে তাহলে আপনার কী শেখা উচিত সেটা বলাটা সহজ। যেমন আপনার যদি Android App ডেভেলপ করার ইচ্ছা থাকে বা অ্যান্ড্রয়েডের জন্য কোন একটা এপের আইডিয়া আছে সেটা আপনি বানাতে চাচ্ছেন তাহলে আপনি Java শিখতে পারেন। আবার আইফোনের জন্য এপ বানানোর ইচ্ছা হলে আপনি Objective C বা Swift শিখতে পারেন। ওয়েবের কোন কাজ করতে চাইলে HTML, CSS, PHP, JavaScript শেখা যেতে পারে। আবার আপনার যদি উদ্দেশ্য হয় এই মুহুর্তেই সফটওয়্যার বা এপ ডেভেলপ না বরং প্রোগ্রামিং এর লজিক ডেভেলপ করা বা ACM problem solve করা। তাহলে সি/সি+ শিখতে পারেন। তবে আমার মতে ফাস্ট এর দিকে আপনি C বা পাইথন শিখতে পারেন। তবে C টা সহজ + ব্যাসিক। আর যার ব্যাসিক যতো স্টং, সে ততোবেশী পারফেক্ট। যদি আপনার ব্যাসিক স্টং না থাকে তাইলে আপনি অল্পতেই ঝড়ে পরবেন। একটা গাছ এর গোড়া শক্ত না হলে সেই গাছটা একটু বাতাসেই মাটিতে ঝড়ে পড়ে যায়। তাই আমার মতে আপনার সর্ব প্রথমে ব্যাসিক জিনিষটা ভালো ভাবে বুঝে নিতে হবে, যেন আপনি একটুতেই মনোবল হারিয়ে না ফেলেন।
প্রশ্ন ২. আপনি প্রোগ্রামিং আসলে কেন শিখবেন.?
উত্তর : আপনি প্রোগ্রামিং শিখবেন আমার মতে, আপনার নিজের কোন একটা প্রবলেম সলভ করার জন্য। আপনার দৈনন্দিন জীবনের কোন কাজকে automate করার জন্য বা improve করার জন্য। আপনি প্রোগ্রামিং শিখতে পারেন স্রেফ আপনার আনন্দের জন্য। চিন্তা করার চেয়ে আনন্দের আর কিছু হতে পারে না। দীর্ঘ সময় একটা প্রবলেমে আটকে থাকার পর চিন্তার একটা পর্যায়ে এটা সলভ হয়ে গেলে যে নির্মল আর অনাবিল আনন্দ পাওয়া যায় সেটা এক্সপেরিয়েন্স করার জন্য। আপনি টাকা কামানোর জন্য প্রোগ্রামিং করলে টাকা কামাতে পারবেন, আবার আনন্দের জন্য প্রোগ্রামিং করলেও টাকা কামাতে পারবেন। প্রথম ক্ষেত্রে একটা পর্যায়ে লাইফটা বোরিং মনে হবে, দ্বিতীয় ক্ষেত্রে লাইফটাকে এঞ্জয় করতে পারবেন। এখন আপনার উপর পুরোটাই নির্ভর করে। আপনি কী করতে চান.?
প্রশ্ন ৩. আমি তো ভালো ম্যাথ পারি না ভাইয়া, আমার দ্বারা কি কোডিং করা সম্ভব বা আমার প্রোগ্রামিং করতে বোর লাগে, কিছুই পারি না আমি। তাহলে কি আমি প্রোগ্রামার হতে পারবো না.?
উত্তর : তুমি যদি কোড করতে না পেরে নিজেকে গালাগালি করতে থাকো। বা চিন্তা কর যে “এসব কোডিং-ফোডিং আমারে দিয়া হবে না”, “এগুলা অনেক কঠিন”, “আমার আসলে ব্রেইন ভাল না”, “আমি ট্যালেন্ট না, বলদা একটা”… ইত্যাদি। তাহলে এর থেকে বাজে জিনিস কিন্তু আর হয় না। তোমার প্রাপ্তির ঝুলি ভারি হওয়ার ক্ষেত্রে তুমি কতটা disciplined আর তোমার প্রচেস্টার ধারাটা কেমন এই দুইটা জিনিস কিন্তু বেশি দায়ী। কোন একটা প্রোজেক্ট বা প্রবলেম সলভ করার জন্য তুমি নিচের স্টেপগুলো ফলো করতে পারোঃ
১.তুমি সত্যিই সলভ করতে চাও বা কোন একটা প্রোজেক্ট করতে চাও এমন কিছু সিলেক্ট কর। মানে কারো চাপিয়ে দেয়া কোন কাজ না। যেই কাজটা তুমি ভালবেসে করতে পারবে সেরকম একটা প্রোজেক্ট চিন্তা কর।
২.পুরো প্রোজেক্টের কাজগুলোকে ছোট ছোট task এ ভাগ কর। যেমন ধর একটা সাইট বানাতে চাচ্ছ তার একটা টাস্ক হতে পারে “লগিন পেজ বানানো”। সাধারণত টাস্কগুলো হতে হয় প্রোজেক্টের সর্বনিম্ন ইউনিক। ২০-২৫ লাইনের কোডের মধ্যে একেকটা টাস্ক শেষ করা ভাল।
একটা টাস্ক নিয়েই কাজ করো। এক সাথে একাধিক টাস্কের কথা চিন্তা করলে মাথায় গিট্টু লেগে যাবে। যখন কোন একটা টাস্কের ব্যাপারে মোটামুটি নিশ্চিত হবে যে এটা কাজ করবে, কোনরকম বাঘ-ভাল্লুক (bug) এর মধ্যে নাই। তখনই পরের task টা শুরু করবে।
কোন একটা টাস্কের কোড শুরু করার আগে অবশ্যই ঐ টাস্কের থিওরিগুলো জেনে নিবে। যেমন ধর তোমার একটা টাস্ক হচ্ছে কোন ইউজার কোন দেশের কোন শহর থেকে তোমার এপটা ব্যবহার করছে সেটা জানা। তাহলে কোড শুরু করার আগে তোমার জেনে নেয়া উচিত GPS কিভাবে কাজ করে? latitude ও longitude কী? এই দুইটা মান থেকে কিভাবে কোন জেলা বা শহরের নাম পাওয়া যায়? এজন্য কোন কোন API পাওয়া যায় বা কোন টেকনোলজিটা ব্যবহার করা হয়?
প্রশ্ন ৪ : প্রোগ্রামিং এর ক্ষেত্রে আসলে কি কি জিনিষ আগে ভালো ভাবে শিখা উচিৎ বা আমার পরামর্শটা কি.?
উত্তরঃ প্রথমেই আপনাকে স্ট্রাকচার প্রোগ্রামিং শিখতে হবে। এক্ষেত্রে পাইথন অথবা সি, এই দুটোর একটা দ্বারা শুরু করতে পারেন। এরপর আপনি ডিসক্রেট ম্যাথ শিখতে পারেন। আপনি এর মাধ্যমে আরও সহজ ভাবে প্রোগ্রামিং বুঝতে পারবেন। সমস্যার সমাধান করতে পারবেন। তারপর সময় অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং শেখার। আপনি এক্ষেত্রে সি প্লাস প্লাস অথবা জাভা অথবা সি শার্প শিখতে পারেন। এতে আপনি বিভিন্ন প্লাটফর্ম ভিত্তিক সফটওয়ার, গেমস তৈরি করতে পারবেন। আপনি প্রোগ্রামার হয়ে গেলেন, এখন ভালো প্রোগ্রামার হতে হবে। একজন ভালো প্রোগ্রামার কে সৃজনশীল হতে হয়। তাই, আপনিও নিজের সৃজনশীলতাকে ফুটিয়ে তোলার চেষ্টা করুন। কোন কিছুকে না বুঝলে, সামনে এগোবেন না। আগে ওইটা ভালো করে বোঝার চেষ্টা করুন। প্রোগ্রামিং শিখতে শিখতে আপনি এতে এক্সপার্ট হয়ে উঠবেন। কারন প্রোগ্রামিং হচ্ছে চর্চার বিষয়। তারাহুরো করলেই বিপদ, কারন এই লাইনে ধৈর্য না থাকলে ঝরে পরতে হবে। আর তা ছাড়া প্রোগ্রামিংকে আপনি লেখা পড়া না বলে আর্ট বলতে পারেন। আর্ট রপ্ত করতে সাধনা লাগে। প্রোগ্রামিং শিখতেও সাধনা লাগে। একটা কোড মুখস্থ করলেও মনে থাকবেনা যদি সেইটা আপনি বার বার লিখে অনুশীলন না করেন। নইলে ছিটকে পরতে বেশী টাইম লাগবেনা।
এখন যদি আপনি মনে করেন, আপনি ভালো গনিত জানেন না, তবুও আমি আপনাকে প্রোগ্রামিং শিখতে বলবো, যদি আপনি বলেন আপনার ধৈর্য্য নেই.তাহলে বিপদ। আপনি অন্যকিছু চেষ্টা করাই ভালো। সৃজনশীলতা, ধৈর্য, শিখার ইচ্ছা, সমস্যা সমাধান করার প্রবণতা হল ভালো প্রোগ্রামারদের বৈশিষ্ট্য।
সারকথা, আপনি ভাল করে অনুশীলন করেন। নিজের প্রোজেক্ট তৈরি করতে পারেন। প্রতিযোগিতায় অংশগ্রহণ করতে পারেন। যেমন প্রোগ্রামিং কনটেস্ট।
এইবার টেকনিক্যালঃ
১। variable, if-else, array, for loop এবং function সম্পর্কে ক্লিয়ার ধারণা থাকতে হবে।
২। ডাটা স্ট্রাকচার শিখতে হবে। হ্যাশ টেবিল বা ডিকশনারি অবশ্যই শিখতে হবে। তারপরে Stack এবং Queue সম্পর্কে কিছু আইডিয়া নিতে হবে। এছাড়াও linked list, Tree নিয়ে ঘাটাঘাটি করতে পারেন।
৩। সার্চ এবং সর্ট জানতে হবে, কমপক্ষে লিনিয়ার এবং বাইনারি সার্চ পুরোপুরি রপ্ত করতে হবে, আর বাবল সর্ট অবশ্যি নিজে পারতে হবে (বুজে এবং নিজে কোড লিখতে), তারপর মারজ, সিলেকশন সর্ট আস্তে আস্তে শিখতে হবে।
৪। ডাটাবেস ব্যবহার করা শিখতে হবে। ডাটাবেসে কিভাবে ডাটা রাখতে হয়, বের করে আনতে হয় সেটা জানতে হবে।
৫। OOP এর তিনটা প্রধান অংশ- Inheritance, Encapsulation এবং Polymorphism সম্পর্কে ক্লিয়ার ধারণা থাকতে হবে।
৬। সব প্রোগ্রামিং ল্যাঙ্গুয়েজেরই কিছু প্যাকেজ/লাইব্রেরি/ফ্রেমওয়ার্ক থাকে। আপনাকে কমপক্ষে একটা ভালো করে জানতে হবে। যেকোনো একটা এডিটর (Notepad+, eclipse, visual studio, webstorm, sublime text, ইত্যাদি) ব্যবহার করা জানতে হবে। সোর্স কন্ট্রোল সফটওয়্যার (সবচেয়ে বেশি জনপ্রিয় -github) ব্যবহার করা জানতে হবে।
আর হ্যাঁ অবশ্যই একেকটা টাস্ক শেষ করার পর আপনি নিজেকে এই প্রশ্নগুলো করতে পারেন, এই কোডের ক্ষেত্রে কি কোন edge case আছে যার জন্য কোডটা কাজ করবে না? অথবা কোড কাজ করলেও পুরো এপ্লিকেশনটা যখন রান করবে তখন এই কোডের জন্য কোন ঝামেলা হবার কি কোন চান্স আছে?
আমার কোডটা কি clean enough? বছরখানেক পরে এই কোডের চেহারা দেখলে চিনতে পারবো তো? যে কোন ধরনের modification বা edit করার দরকার হলে করা যাবে তো? এই টাস্কের কোন আপডেটের কারণে এপের অন্য কোন টাস্কের কাজ আটকে যাবে না তো?
আমার approach-টা কি best approach? নাকি এর থেকেও ভাল কোন উপায়ে এটা করা যায়? অন্য আর কোন্ ভাবে এই একই জিনিস করা যায়? সেই সিসটেমের সুবিধা-অসুবিধাগুলো কী কী?
আমার এই মডিউলটা অন্য আরেকটা মডিউলের সাথে কিভাবে কাজ করছে? একটা আরেকটার উপর কতখানি dependent? একটার কারণে আরেকটার উপর কোন বাজে প্রভাব পড়বে না তো?
Language Syntax, API কিভাবে কাজ করে বা কোন library/method কিভাবে ব্যবহার করতে হয়, programming paradigms (for example: asynchronous programming)।
how the system works (for example: HTTP requests are a crucial thing to understand in Web development)
এসব ক্ষেত্রে আপনার কাজ হচ্ছে থিওরিগুলোকে আবারো ভাল ভাবে স্টাডি করা।
প্রশ্ন ৫: ভাইয়া প্রোগ্রামিং বা কোডিং করি তবে প্রোগ্রাম টা রান হয় না বা করতে পারি না.?
উত্তর : আপনি কোড করেছন। তা কাজ করার কথা কিন্তু কাজ করছে না এটা কম্পিউটার প্রোগ্রামিং এর ক্ষেত্রে প্রাচীনতম সমস্যা। এমন কি অনেক বছর ধরে প্রোগ্রামার হিসেবে যিনি কাজ করছেন তার ক্ষেত্রেও এমনটা ঘটতেই পারে। এজন্য আপনাকে শিখতে হবে debug করা। Debugging নামের একটা সম্পূর্ণ বইই আছে! আপনার শেখা উচিত কিভাবে ডিবাগ করতে হয়। এর চেয়ে বেশি শেখা উচিত কিভাবে ডিবাগিং বিষয়টাকে ভালবাসা যায়। ইউনিভার্সিটি বা অনলাইন কোর্সগুলোর খুব কম কোর্সেই ডিবাগ করার ব্যাপারে কিছু বলা থাকে। প্রথম প্রথম এই বিষয়টা খুব painful হতে পারে। কিন্তু এটা কাজ করার জন্য সারা জীবনই লাগবে।
কোন একটা bug ধরার পর fix করলেন। উচিত হবে এই বাগের ব্যাপারে একটা নোট রাখা। আস্তে আস্তে এই নোটের তালিকাটা বাড়তে থাকবে। আপনি একটা প্যাটার্ন ধরতে পারবেন যে কী টাইপের ভুলগুলো আপনি বেশি করেন, সেই অনুযায়ী পরে কোড করার সময় সতর্ক হতে পারবেন।
আশাকরি এইখানে সবকিছু তুলে ধরার চেষ্টা করেছি। আর এইখানে সবকিছুই ভালোভাবেই বলে দেওয়া হয়েছে। Now Ur Turn, Happy Codding 🙂
আমি মোঃ রুহুল আমিন। Software Engineer, Dhaka। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 4 বছর 4 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 8 টি টিউন ও 0 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 2 ফলোয়ার আছে এবং আমি টেকটিউনসে 1 টিউনারকে ফলো করি।
আমি সাধারণত টিউনগুলা করি, যেগুলো নিয়ে বর্তমানে সবাই সমস্যায় পড়ে ( প্রোগ্রামিং, ওএব ডিজাইন বা ডেভোলপমেম্ট, অ্যাপস বা সফটওয়্যার ডেভোলপমেম্ট, সাইবার সহ ইত্যাদি সেই সাথে গুগল, মাইক্রোসফট সহ বিশ্বের বড় বড় জব প্লাটফরম গুলো নিয়েও টিউন করে থাকি। আমি আশাকরি এটা একটা গাইডলাইন হিসেবে আপনাদের কাজ করবে আর সেই সাথে...