If you're seeing this message, it means we're having trouble loading external resources on our website.

তোমার যদি কোন ওয়েব ফিল্টার দেওয়া থাকে, তাহলে দয়া করে নিশ্চিত কর যে *.kastatic.org এবং *.kasandbox.org ডোমেইনগুলো উন্মুক্ত।

মূল বিষয়বস্তু

প্রোগ্রামিং প্রকল্প পরিকল্পনা করা

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

1. তুমি কি তৈরি করতে চাও?

আমি যখন প্রথম প্রোগ্রামিং করা শুরু করেছিলাম, আমি সবসময় নতুন প্রোগ্রাম তৈরি করার কথা চিন্তা করতাম এবং একটি তালিকায় সেগুলো লিখে রাখতাম। আমি সৃষ্টির ক্ষমতায় আসক্ত হয়ে পড়েছিলাম এবং আমার মস্তিষ্ক অনেক কিছুই তৈরি করতে চাইতো। তুমি যদি আমার মত হয়ে থাক, তাহলে তুমি কি বানাতে চাইছ সে সম্পর্কিত ধারণা তোমার হয়তো আগে থেকেই আছে এবং মনে হয় তোমার নিজেরও একটি তালিকা আছে।
তোমার যদি ইতোমধ্যে এরকম কোন ধারণা না থাকে, তাহলে এখানে কিছু প্রশ্ন আছে যা তোমার মস্তিষ্ককে চিন্তা করে নতুন কিছু তৈরি করার ধারণা আহরণে সহায়তা করবে:
  • তোমার পছন্দের গেম কোনটি - আর্কেড গেম, বোর্ড গেম, খেলার গেম? তুমি কি সেটার একটি সহজ ডিজিটাল রূপ তৈরি করতে পারবে? তুমি কি এটাকে একটু অন্যরকম করতে পারবে, যেমন ধর নতুন কোন বিষয়বস্তু বা মূল চরিত্র দিয়ে সাজাতে পারবে?
  • অন্যান্য আর কি প্রাতিষ্ঠানিক ক্ষেত্র রয়েছে যা তোমার পছন্দ? যদি অঙ্কন পছন্দ কর, তাহলে অঙ্কন করতে সক্ষম এমন প্রোগ্রাম কি তুমি তৈরি করতে পারবে ? যদি তুমি ইতিহাস ভালোবাসো, তাহলে ইন্টার‍্যাক্টিভ একটি টাইমলাইন তৈরি করতে পারবে? যদি বিজ্ঞান ভালোবাসো, তাহলে একটি বিজ্ঞান বিষয়ক সিমুলেশন করতে পারবে?
  • তোমার প্রিয় মুভি বা টেলিভিশনের অনুষ্ঠান কোনটি? তুমি কি সেটা থেকে কোনো দৃশ্য অথবা চরিত্রের ডিজিটাল সংস্করণ তৈরি করতে পারবে? এটার উপর ভিত্তি করে গেম তৈরি করলে কেমন হয়?
  • বাস্তব জীবনের কোন গ্যাজেটটি তোমার বেশি পছন্দ? তুমি কি সেটার সিমুলেশন তৈরি করতে পারবে?
একবার ধারণা (idea) পেয়ে গেলে, তার বর্ণনা লিখতে হবে। উদাহরণস্বরূপ, আমি যদি ঠিক করি যে "Breakout" এর ক্লোন তৈরি করব, কারণ সেটা আমার পুরনো প্রিয় গেম, তাহলে আমি লিখতাম:
Breakout: একটি গেম যেখানে পর্দার নিচ থেকে প্যাডেল নিয়ন্ত্রন করা যায় এবং এটা ব্যবহার করে একটি বলকে উপরের দিকে ইট ভাঙা যায় এরকম কোণ বরাবর নিক্ষেপ করা যায়। লক্ষ্য হল এখানে থাকা সবগুলো ইট ভাঙা এবং বলটি যেন বারবার মাটিতে না পড়ে তা নিশ্চিত করা।
বর্ণনাটি পরে আরো যাচাই করতে হবে কিন্তু এখনকার জন্য এটা পরিকল্পনা প্রক্রিয়ায় এগিয়ে নিয়ে যাওয়ার ক্ষেত্রে যথেষ্ট ভালো ধারণা দেয়।

2. তুমি কোন প্রযুক্তি ব্যবহার করবে?

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

3. কি কি বৈশিষ্ট্য এর অন্তর্ভুক্ত হবে?

আমরা এখন আসল পরিকল্পনার দিকে এগিয়ে যাব এবং (আমার মনে হয়) এটা বেশ মজার হবে। এই ধাপে তোমার লক্ষ্য হচ্ছে তুমি আসলে যেটা তৈরী করতে চাইছ, সেটার বর্ণনা যুক্ত করা- এটা দেখতে কেমন হবে, কি কি বৈশিষ্ট্য এখানে যুক্ত হবে, কোন বৈশিষ্ট্যগুলো যুক্ত হবে না
প্রথমে তুমি যে কাজটি করতে পার সেটা হল একটি  "মক-আপ" তৈরি করা- যে প্রোগ্রামটি তুমি তৈরি করতে চাইছ সেই প্রোগ্রামের খুবই সাধারণ একটি নকশা তৈরি করা, কিন্তু এর বিস্তারিত কোন বর্ণনা এখানে থাকবে না যেমন - এর রঙ কেমন হবে অথবা এর আকার কিরকম হবে। তুমি অনলাইনে অথবা কাগজে মক-আপ তৈরি করতে পার:
মক-আপ কেমন হতে পারে সে সম্পর্কে ধারণা দেওয়ার জন্য, নিচে আমার ব্রেকআউট ক্লোনের একটি মক-আপ সংযুক্ত করছি।  প্রতিটি দৃশ্য আমি আলাদা আলাদা করে এঁকেছি এবং এক দৃশ্য থেকে পরবর্তী দৃশ্যে যাওয়ার নির্দেশনা তীর চিহ্ন ব্যবহার করে বুঝিয়েছি। প্রোগ্রামের এক অবস্থা থেকে আরেক অবস্থায় যেতে কি কি লজিক আমার ব্যবহার করা লাগবে, এই তীর চিহ্নগুলো তা আমাকে বুঝতে সাহায্য করবে।
Breakout ক্লোনের মক-আপের ছবি
এখন এই মক-আপগুলো ব্যবহার করে প্রোগ্রামটির বৈশিষ্ট্যের একটি তালিকা আমরা তৈরি করতে পারব, যে তালিকাটিতে প্রোগ্রামটির সকল বৈশিষ্ট্যর উল্লেখ থাকবে।
ব্রেকআউট ক্লোনের জন্য, এটা হল দৃশ্য অনুযায়ী ভাগ করা বৈশিষ্ট্যের তালিকা:
খেলার দৃশ্য
  • User-controlled paddle
  • Multiple colored bricks
  • Angled ball movement
  • Collision detection
  • Life display
  • Score display
  • Sound effects
মূল দৃশ্য
  • Play button
  • Help button
সহায়তার দৃশ্য
  • Text
  • Back button
বিজয়ের দৃশ্য
  • Headline
  • Fireworks animation
হেরে যাওয়ার দৃশ্য
  • Text
  • Restart button

4. কিন্তু কি কি বৈশিষ্ট্য অবশ্যই থাকতে হবে?

আমাদের হাতে যদি অসীম সময় থাকত তাহলে তালিকার সবগুলো বৈশিষ্ট্যই যোগ করা যেত। কিন্তু আমাদের এতো সময় নেই, সেজন্য এই ধাপে, তোমাকে সিদ্ধান্ত নিতে হবে কোন বৈশিষ্ট্যগুলো খুবই জরুরি এবং কোন বৈশিষ্ট্যগুলো হাতে সময় থাকলে যোগ করা যাবে। এটি তোমাকে বেশি গুরুত্বপূর্ণ থেকে কম গুরুত্বপূর্ণ বৈশিষ্ট্যগুলো ক্রমান্বয়ে বাস্তবায়ন করতে সহায়তা করবে।
প্রতিটি বৈশিষ্ট্যের গুরুত্ব খুঁজে বের করার জন্য, নিজেকে এই প্রশ্নগুলো কর:
  • আমি যদি গেমটি কোন বন্ধুকে দেখাতে চাই তাহলে কোন বৈশিষ্ট্যটির ওপর বেশি জোর দিব?
  • কোন বৈশিষ্ট্যটি তৈরি করার ব্যাপারে আমি খুবই আগ্রহী?
  • প্রোগ্রামের কোন বৈশিষ্ট্যটি সবচেয়ে আলাদা?
  • কোন বৈশিষ্ট্যটি বাস্তবায়ন করলে আমার সবচেয়ে বেশি শেখা হবে?
  • কোনো বৈশিষ্ট্য কি আমার বর্তমান দক্ষতার বাইরে?
তারপর বৈশিষ্ট্যের তালিকাটির শেষ ধাপ থেকে আবার দেখা শুরু কর এবং প্রতিটি বৈশিষ্ট্যকে গুরুত্ব অনুসারে সঠিকভাবে বিন্যস্ত করে তালিকাটি সাজাও।
ব্রেকআউট ক্লোনের বৈশিষ্ট্যের তালিকায়, আমি বৈশিষ্ট্যের পাশে "P1", "P2" এবং "P3" যোগ করেছি যেখানে (P1) হল সবচেয়ে বেশি গুরুত্বপূর্ণ, (P2) হল (P1) থেকে একটু কম গুরুত্বপূর্ণ এবং (P3) হল সবচেয়ে কম গুরুত্বপূর্ণ। গেমের সাধারণ বৈশিষ্ট্যর উপরে, গেমের কার্যকরী বৈশিষ্ট্যগুলোকে প্রাধান্য দেওয়ার সিদ্ধান্ত আমি নিয়েছি যেমন দৃশ্য, কারণ এটাই এই প্রকল্পের সবচেয়ে মজার বিষয় বলে আমার কাছে মনে হয়:
(P1) খেলার দৃশ্য
  • (P1) User-controlled paddle
  • (P1) Multiple colored bricks
  • (P1) Angled ball movement
  • (P1) Collision detection
  • (P2) Life display
  • (P2) Score display
  • (P3) Sound effects
(P2) মূল দৃশ্য
  • (P2) Play button
  • (P3) Help button
(P3) সহায়তার দৃশ্য
  • (P3) Text
  • (P3) Back button
(P2) বিজয়ের দৃশ্য
  • (P2) Headline
  • (P3) Fireworks animation
(P2) হেরে যাওয়ার দৃশ্য
  • (P2) Text
  • (P3) Restart button
তোমাদের মধ্যে যারা গেম তৈরি করছ তাদের উদ্দেশ্যে সাধারণ একটি পরামর্শ হল, কম গুরুত্বপূর্ণ বৈশিষ্ট্যগুলো যেমন: মেন্যু, একাধিক গেম লেভেল, ত্রিমাত্রিক গ্রাফিক্স ইত্যাদি উপেক্ষা করাটাই ভালো। তোমার গেমকে মজার এবং ভিন্নরকম বানানোর চেষ্টা কর, তারপর বাকি বৈশিষ্ট্য যোগ করবে।
তুমি চাইলে বৈশিষ্ট্যের তালিকাটি প্রকল্প-সংস্করণে রূপান্তর করতে পার, যাতে তুমি সহজেই দেখতে পার কোন সংস্করণে কি বাস্তবায়ন করতে হবে এবং তুমি যে কোন সময় একটি নির্দিষ্ট সংস্করণের পর থেমে যেতে পার এবং যা তৈরি করেছ তা নিয়েই খুশি থাকতে পার।
আমার ব্রেকআউট ক্লোনের সংস্করণগুলো কিরকম হতে পারে তা নিম্নরূপ:
V1
  • User-controlled paddle
  • Multiple colored bricks
  • Angled ball movement
  • Collision detection
V2
  • Life display
  • Score display
  • Start scene w/play button
  • Win scene w/headline
V3
  • Sound effects
  • Help button
  • Fireworks
  • Lose scene w/Restart button

5. তুমি কীভাবে এটি বাস্তবায়ন করবে?

এখন একটি ধারণা পাওয়া গেল যে কোন বৈশিষ্ট্যটি প্রোগ্রামে আগে তৈরি করা হবে - কিন্তু তুমি যদি এখনই শুরু কর, তাহলে তোমাকে শূন্য একটি প্রোগ্রাম থেকে কাজ করা শুরু করা লাগবে যেখানে কোন কোড লেখা থাকবে না এবং এটা কিন্তু বেশ ভয়ানক। প্রথমে কোন চলক লেখা উচিত? কোন ফাংশন?
এগুলো তোমার প্রোগ্রামের "উচ্চ পর্যায়ের কাঠামো" চিন্তা করে - বিভিন্ন শ্রেণিতে যেমন "অবজেক্ট", "লজিক", "ব্যবহারকারীর প্রতিক্রিয়া", "ব্যবহারকারীর ডাটা" এবং "দৃশ্য" ইত্যাদিতে ভেঙে ফেলতে পারবে - এবং তারপর এসব কিছু যেমন, অবজেক্ট অরিয়েন্টেড অবজেক্টের ধরণ, ফাংশন অথবা চলক বাস্তবায়নের চিন্তা করবে।
উদাহরণস্বরূপ, এখানে ব্রেকআউট ক্লোনের কাঠামো দেওয়া আছে:
অবজেক্ট
  • Brick (.isHit())
  • Paddle (.move())
  • Ball (.move())
দৃশ্য
  • Start
  • Game
  • End
লজিক
  • Ball-brick collision (function, use bounding box)
  • Paddle-ball angling (function, invert angle)
ব্যবহারকারীর প্রতিক্রিয়া
  • Keyboard-paddle movement (keyPressed)
  • Buttons for scene changes (mouseClicked)
ব্যবহারকারীর ডাটা
  • Ball deaths (array)
  • Ball hits (array)
তুমি উচ্চ-পর্যায়ের কাঠামো সম্পর্কে চিন্তা করলে, এটি কোড করা আরও সহজ হয়ে যাবে।
তুমি প্রথমে তোমার পুরো প্রোগ্রামটি সুডো কোডে লিখে ফেলতে পার, এই অনুশীলনীতে আমরা পরে এই বিষয় নিয়ে আলোচনা করব। মূলত, এর মানে হল পুরো প্রোগ্রামটিকে একটি মন্তব্যতে সাধারণ ইংরেজি ব্যবহার করে লেখা এবং তারপরে ক্রমান্বয়ে সেটাকে আসল কোডে রূপান্তর করা।

6. তোমার সময়সীমা কি?

এই প্রোগ্রামটি তৈরী করার জন্য তোমার কত সময় আছে? কয় সপ্তাহ এবং প্রতিদিন কত সময় দরকার? প্রতি সপ্তাহে তুমি কোন বৈশিষ্ট্যটি লিখবে? এই ধাপে তোমার লক্ষ্য হল প্রকল্পের জন্য একটি সময়সীমা বের করা - তোমার যদি একটি নির্দিষ্ট সময়সীমার থাকে তাহলে সেক্ষেত্রে এটা খুবই জরুরি, এছাড়াও এটা তোমার জন্য প্রয়োজনীয় কারণ এর ফলে তুমি বুঝতে পারবে যে একটি প্রোগ্রাম লিখতে তোমার কত সময় লাগছে।
এখানে ব্রেকআউট ক্লোনের জন্য একটি সময়সীমা দিচ্ছি, ধরে নিচ্ছি প্রতি সপ্তাহে 2-4 ঘণ্টার কাজ এখানে করতে হবে:
  • সপ্তাহ 1: ডিজাইন এবং সুডো-কোড
  • সপ্তাহ 2: মোটামুটি রূপকল্পন
  • সপ্তাহ 3: বল সরানো/সংঘর্ষের ক্রিয়া
  • সপ্তাহ 4: স্কোরিং পদ্ধতি
  • সপ্তাহ 5: দৃশ্য (শুরু/জয়/হারা)
  • সপ্তাহ6: পরিপাটি করা, পরীক্ষা করে দেখা (QA), প্রদর্শনের জন্য প্রস্তুতি
প্রোগ্রামিং প্রকল্পের জন্য সময়সীমা খুঁজে বের করা কঠিন। কিছু কিছু বিষয় সহজ বলে মনে হলেও তোমার প্রত্যাশিত সময়ের তুলনায় অনেক বেশি সময় তোমার প্রয়োজন হতে পারে (যেমন কোডের বিভিন্ন ত্রুটি যেটা ঘন্টার পর ঘন্টা সময় ব্যয় করে তোমার সংশোধন করার প্রয়োজন হয়), আবার কিছু কিছু বিষয় কঠিন মনে হয় কিন্তু সেই কাজটিই সবচেয়ে কম সময়ে সম্পাদন করা যায়। একটি সাধারণ নিয়ম হল, তোমাকে ধরে নিতে হবে যে তোমার প্রত্যাশিত সময়ের থেকে এটা বেশি সময় নিবে এবং কোডে অগ্রসর হবার সাথে সাথে তোমাকে এর সাথে সমন্বয় করে নিতে হবে।

তুমি কি প্রস্তুত!?

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

আলোচনায় অংশ নিতে চাও?

কোন আলাপচারিতা নেই।
ইংরেজি জানো? খান একাডেমির ইংরেজি সাইটে আরো আলোচনা দেখতে এখানে ক্লিক কর।