প্রোগ্রামিং- কেন শিখবো? কীভাবে শিখবো?

Author Topic: প্রোগ্রামিং- কেন শিখবো? কীভাবে শিখবো?  (Read 676 times)

Offline Md. Alamgir Hossan

  • Hero Member
  • *****
  • Posts: 935
  • Test
    • View Profile
একটি সমস্যা দিয়ে শুরু করা যাক। ধরুন আপনাকে বলা হলো ১ থেকে ১০ পর্যন্ত সংখ্যার যে ক’টি সংখ্যা ৩ দিয়ে ভাগ করা যায় সেগুলোর যোগফল কত তা বের করতে। কাজটা কিন্তু খুবই সহজ, কারণ ১ থেকে ১০ এর মধ্যে ৩ দিয়ে ভাগ যায় ৩, ৬ ও ৯। এদের যোগফল ১৮। এটা সমাধান করতে যে আপনার এক মিনিটের বেশি লাগবে না সেটা নিশ্চিত। কিন্তু যদি বলা হয় ১ থেকে ১০০০ পর্যন্ত যে সংখ্যাগুলো ৩ অথবা ৫ দিয়ে ভাগ যায় তার যোগফল বের করতে, তাহলে কিন্তু আপনি একটু ঝামেলায় পড়ে যাবেন। কারণ এবার আপনি একটি একটি সংখ্যা নিয়ে যাচাই করতে গেলে কিন্তু অনেক সময় লেগে যাবে।

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

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

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

x = 0
for i in range(0,1000):
    if i%3==0:
        x = x + i

print(x)

এখন এটুকু যদি আপনি বুঝতে পারেন তাহলে যেকোনো প্রোগ্রামিং ভাষাতেই তা লিখে আপনি সমস্যাটির সমাধান করতে পারেন। এখানে প্রথম x = 0 দিয়ে আসলে একটি চলক ধরে নেয়া হয়েছে (declare করা হয়েছে) এবং তার মান ধরা হয়েছে শূন্য। এবার একটি for লুপ চালানো হয়েছে যেখানে ‘i’ নামের আরেকটি চলক রয়েছে যার মান লুপের ভেতর ০ থেকে ১০০০ পর্যন্ত যাবে এবং প্রতি ধাপে এটি i এর যে মান থাকবে তাকে ৩ দিয়ে mod করে দেখবে যে ভাগশেষ ০ থাকে কিনা। যদি(if) ভাগশেষ ০ হয় তাহলে i এর মান x এর সাথে যোগ করবে। এবং প্রোগ্রাম শেষে x এর মান আপনার স্ক্রিনে print করে দেবে (স্ক্রিনে দেখিয়ে দেবে)।

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

প্রথমে দেখুন ১ থেকে ১০ পর্যন্ত আমাদের যোগফল এরকম আসবে-

18 = 3 + 6 + 9

একে এরকমও লেখা যায়-

18 = 3(1+ 2 + 3)

এক্ষেত্রে আপনি কিন্তু একটা সিরিজ n সংখ্যক সংখ্যার একটা বীজগাণিতিক সিরিজ পাচ্ছেন। ১০০ এর ক্ষেত্রে এই সিরিজটা হবে এরকমঃ
3(1+2+3+4+…+33)

এ ধরনের সিরিজের যোগফল কিন্তু আপনি সহজেই এই সূত্র দিয়ে বের করতে পারবেন-

$latex \displaystyle \large S_{n}=\frac{n(n+1)}{2}$

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


Share
কোন প্রোগ্রামিং ভাষা দিয়ে শুরু করবো? image source: wikihow.com
প্রোগ্রামিং শেখার শুরুতে অনেকে এই ভেবেই কূল পায় না যে, কোন ভাষা দিয়ে শুরু করবেন। Java, C++ নাকি Python? আবার যারা C দিয়ে শুরু করেন তাদের মনে আবার খচ খচ করতে থাকে – “C++ তো আরও আধুনিক বা, আপগ্রেডেড, ওটা দিয়ে শুরু করলে ভালো হত না?”। আসল কথা হলো, আপনি যেকোনো একটা দিয়ে শুরু করতে পারেন। কিন্তু দক্ষ প্রোগ্রামার হওয়ার জন্য আসলে আগে প্রয়োজন আপনি একটি সমস্যাকে কীভাবে দেখেন। একটি সমস্যা প্রোগ্রামিং করে সমাধানের আগে সেটা আসলে আমাদের চিন্তার জগতে সমাধান করা লাগে। সেই চিন্তাটাই যদি আপনি না করতে পারেন তাহলে চার পাঁচটা প্রোগ্রামিং শিখেও আপনি খুব একটা দক্ষ প্রোগ্রামার হতে পারবেন না।

মূলত প্রোগ্রামিংয়ের বেসিক যে ধারণাগুলো শেখার দরকার হয় সেগুলো হলো- চলক (variable), শর্তমূলক নির্দেশনা (conditional program), লুপ, ডাটা স্ট্রাকচার এবং লাইব্রেরি। এই পাঁচটি ধারণা আপনি ধরতে পারলে যেকোনো প্রোগ্রামিং ভাষাই আপনি রপ্ত করে নিতে পারবেন।


Share
প্রোগ্রামিং-এর মৌলিক ধারণা
একটি প্রোগ্রামিং ভাষা পারলে অন্য যেকোনোটির মূল কথা বুঝতে আপনার সময় লাগবে মাত্র দুই দিনের মতো। ইন্টারনেটে প্রোগ্রামিং বিষয়ক উপকরণের অভাব নেই। বাংলা ভাষাতেও প্রচুর তথ্য যুক্ত হচ্ছে। কিন্তু তার আগে আপনাকে চিন্তা করাও শিখতে হবে। সেক্ষেত্রে আপনি একটি ভাষা শিখে সেটি দিয়ে অনলাইনে কিছু প্রোগ্রামিং সমস্যার সমাধান করতে পারেন। সেক্ষেত্রে Hackerrank, UVa, URI এই তিনটি ওয়েবসাইট‎ শুরু করার জন্য ভালো।

কিছু প্রশ্ন
১. প্রোগ্রামিংয়ে দক্ষ হওয়ার জন্য কতগুলো সমস্যার সমাধান করবো?

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

আপনি যদি ডেক্সটপ এপ্লিকেশন (অ্যাপ) বানাতে চান সেক্ষেত্রে C++ বা Python শিখতে পারেন। Python শেখার সুবিধা হলো, এটি শেখা সহজ এবং এখনকার সময়ে অনেক জনপ্রিয়। আর মোবাইল App বানাতে চাইলে আপনাকে Java শিখতে হবে। তবে এক্ষেত্রেও দক্ষভাবে প্রোগ্রাম লিখতে গেলে আগে থেকে কিছু সমস্যা সমাধানের অভিজ্ঞতা থাকা ভালো। এতে আপনার প্রোগ্রামিং দক্ষতা যেমন বাড়বে, বিভিন্ন সমস্যা মোকাবেলা করার ধৈর্য্যও বাড়বে। কিন্তু প্রতিযোগী প্রোগ্রামার না হলেও চলবে। প্রোগ্রামিং সমস্যার সমাধান করা আসলে প্রোগ্রামারদের কাছে একটা খেলার মতো।

২.প্রোগ্রামিং শেখার জন্য খুব বেশি করে গণিত শেখা দরকার কি?

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

৩. বাংলা ভাষায় প্রোগ্রামিং শিখবো কোথায় থেকে?

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

৪. দক্ষ প্রোগ্রামার হওয়ার জন্য কি মেধাবী হতে হবে?

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