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

თუ ვებფილტრს იყენებთ, დარწმუნდით, რომ *.kastatic.org და *.kasandbox.org დომენები არ არის დაბლოკილი.

ძირითადი მასალა

პროგრამირების პროექტის დაგეგმვა

გახდეთ პროგრამისტი არ ნიშნავს უბრალოდ სინტაქსისა და პროგრამირების კონცეფციების სწავლას: პროგრამისტობა ნიშნავს ცოდნის გამოყენებას პროგრამების შესაქმნელად. ამ კურსის გამოწვევებსა და პროექტებში თქვენ შექმენით მრავალი პროგრამა, თუმცა ამჯერად თქვენ უნდა მოიგონოთ იდეები ახალი პროგრამებისთვის - იდეები, რომლებიც პირადად თქვენ განსაკუთრებით გაინტერესებთ - და სცადოთ მათი რეალურ პროგრამებად გადაქცევა.
პროგრამის დაწყებისას, სავარაუდოდ, ყველაფერი, რაც ამ პროგრამისათვის გჭირდებათ, არ გეცოდინებათ. არაუშავს –– ამ სიახლეების შესწავლის მოტივაცია აუცილებლად გექნებათ, რადგან ძალიან გენდომებათ თქვენი პროგრამის რეალობად ქცევა. პროგრამისტები მუდმივად სწავლობენ სიახლეებს ახალი პროექტებისთვის და ნაწილობრივ სწორედ ამიტომ გვიყვარს ეს საქმე.
მოდით, შევაბიჯოთ პროგრამირების პროექტის დაგეგმვის პროცესში:

1. რისი გაკეთება გსურთ?

როდესაც პროგრამირება დავიწყე, გამუდმებით ახალ პროგრამებზე ვფიქრობდი და მათ სიაში ვწერდი. დამოკიდებული გავხდი შექმნის ძალაზე და ჩემს ტვინს ბევრი რამის გაკეთება უნდოდა. თუ თქვენც ასე ხართ, სავარაუდოდ, უკვე იცით, რისი გაკეთება გსურთ, ან შეიძლება, თქვენც გაქვთ საკუთარი სია.
თუ იდეა ჯერ არ გაქვთ, მაშინ აქ რამდენიმე შეკითხვაა, რომლებიც დაგეხმარებათ „ბრეინსტორმინგში":
  • რომელია თქვენი საყვარელი თამაში - არკადული თამაში, სამაგიდე თამაში, სპორტული თამაში? შეგიძლიათ თუ არა, შექმნათ ამ თამაშის გამარტივებული, ციფრული ვერსია? შეგიძლიათ, ცოტაოდენ შეცვალოთ, მაგალითად მიანიჭოთ განსხვავებული ფონი ან მთავარი გმირები?
  • სხვა რა აკადემიური სფეროები გიტაცებთ? თუ გიყვართ ხელოვნება, შეგიძლიათ, შექმნათ პროექტი, რომელიც ხელოვნებას ქმნის? თუ ისტორია გიყვართ, რას ფიქრობთ ინტერაქტიული დროის სკალის შექმნაზე? თუ მეცნიერება გიყვართ, რას იტყვით მეცნიერულ სიმულაციაზე
  • რომელია თქვენი საყვარელი კინო ან სატელევიზიო შოუ? შეგიძლიათ, მისი სცენის ან პერსონაჟის ციფრული ვერსია შექმნათ? იქნებ თამაში შექმნათ მასზე?
  • რომელი მოწყობილობა მოგწონთ რეალურ ცხოვრებაში? შეგიძლიათ მისი სიმულაციის გაკეთება?
როგორც კი იდეა გაგიჩნდებათ, მისი აღწერა უნდა დაწეროთ. მაგალითად, თუ გადავწყვიტე, შევქმნა თამაშ „ბრეიქაუთის" ასლი, რადგან ის ჩემი საყვარელი რეტრო არკადული თამაშია, შეიძლება, დავწერო:
ბრეიქაუთი: თამაში, რომელშიც აკონტროლებთ ნიჩაბს ეკრანის ძირში და იყენებთ მას ბურთის ზემოთ და კუთხურად დარტყმისათვის, რათა დაამტვრიოთ აგურები. თამაშის მიზანია ყველა აგურის დამტვრევა ბურთის მიწაზე ბევრჯერ დავარდნის გარეშე.
ამ აღწერაში უფრო დეტალურად მოგვიანებით გაერკვევით, მაგრამ ამ დროისათვის ის საკმარისად კარგ ბიძგს მოგცემთ დაგეგმვის პროცესის გასაგრძელებლად.

2. რომელ ტექნოლოგიას გამოიყენებთ?

ამ ნაბიჯში უნდა განიხილოთ, რომელ ტექნოლოგიებს (ენებს/ბიბლიოთეკებს/გარემოს) იცნობთ ან ისწავლით იოლად და მათგან ყველაზე მეტად რომლები ერგება დასახულ მიზანს. ბევრი თქვენგანისათვის შეიძლება, ეს სია ერთ ელემენტს მოიცავდეს, „1. JS+ProcessingJS" და ეს გიადვილებთ გადაწყვეტილების მიღებას.
ჩვენი JS+ProcessingJS გარემო ძალიან კარგად მუშაობს ანიმაციების, თამაშების, ვიზუალიზაციებისა და სიმულაციების შექმნისას. გადახედეთ მომხმარებელთა დაწერილ პროგრამებს.
ჩვენი გარემო არ მუშაობს სხვა რაღაცებისთვის, როგორიცაა მრავალმოთამაშიანი თამაშები, მობილური აპლიკაციები, მონაცემებით დატვირთული აპლიკაციები. თუ იცით სხვა ენები/გარემოები (როგორიცაა JS+HTML, Python, SCRATCH, Swift და ა. შ.) და ისეთი რამის გაკეთებას ფიქრობთ, რისთვისაც ProcessingJS მოსახერხებელი არ იქნება, მაშინ მოიფიქრეთ, იმ ტექნოლოგიებიდან რომლები იქნება ყველაზე ხელსაყრელი თქვენი პროგრამისათვის. შეიძლება, ახალი პროგრამის იდეა დაგებადოთ. თქვენ შეგიძლიათ ახალი ტექნოლოგიის სწავლა ახალი პროექტისათვის, მაგრამ თუ ახლა იწყებთ პროგრამირებას, ჯობს, ჯერ თქვენი პირველი ენა ისწავლოთ ძალიან კარგად.
თუ გადავწყვეტდი ისეთი თამაშის გაკეთებას, როგორიცაა „ბრეიქაუთი", ავიღებდი JS–სა და ProcessingJS–ს, რადგან უკვე ვიცი ეს ტექნოლოგია და ის ძალიან ხელსაყრელია მსგავსი 2–განზომილებიანი თამაშებისათვის.

3. რა განსაკუთრებული თვისებები ექნება მას?

აი, აქ გადავდივართ ნამდვილ დაგეგმვაზე და (ჩემი აზრით) აქ იწყება გართობა. ამ ნაბიჯში თქვენი მიზანია, გაარკვიოთ, ზუსტად რას აკეთებთ– როგორი იქნება ის ვიზუალურად, რა მახასიათებლებს მოიცავს, რა მახასიათებლებს არ მოიცავს.
პირველი რამ, რისი გაკეთებაც შეგიძლიათ, არის „მოდელები" - სკეტჩები, რომლებიც ჰგავს რაიმეს, რისი გაკეთებაც გსურთ, მაგრამ არ აქვს ისეთი დეტალები, როგორიცაა გაფერადება და ზუსტი ზომები. შეგიძლიათ, მოდელები შექმნათ ფურცელზე ან ონლაინ პროგრამებში:
მოდელებზე თქვენთვის წარმოდგენის შესაქმნელად ჩემი „ბრეიქაუთის" ასლის ქვეშ შეგიძლიათ, იხილოთ ისინი. მე შევქმენი თითოეული სცენის მოკლე გეგმა და მათ შორის ისრები დავხაზე, რათა გაჩვენოთ, როგორ გადადის ერთი სცენა მეორეში. ეს ისრები დამეხმარება ჩემს პროგრამაში ერთი მდგომარეობიდან მეორეში გადასვლის ლოგიკის გააზრებაში.
ახლა შეგიძლიათ, ეს მოდელები გამოიყენოთ მახასიათებლების სიის გასაკეთებლად, სადაც ფიქრობთ თქვენი პროგრამის ყველა მახასიათებელზე და მას სიად აქცევთ.
ჩემი ბრეიქაუთის ასლისათვის ეს შეიძლება, იყოს მახასიათებელთა სია, რომელიც დაყოფილია სცენებად:
თამაშის სცენა
  • მომხმარებლის მიერ კონტროლირებული ნიჩაბი
  • მრავალფეროვანი აგურები
  • ბურთის დახრილი მოძრაობა
  • დაჯახების დაფიქსირება
  • სიცოცხლეების გამოჩენა
  • ქულის გამოჩენა
  • ხმოვანი ეფექტები
მთავარი სცენა
  • თამაშის ღილაკი
  • დახმარების ღილაკი
დახმარების სცენა
  • ტექსტი
  • უკან გადასვლის ღილაკი
გამარჯვების სცენა
  • სათაური
  • ფეიერვერკის ანიმაცია
მარცხის სცენა
  • ტექსტი
  • ხელახლა დაწყების ღილაკი

4. მაგრამ რა მახასიათებლებს უნდა შეიცავდეს ის?

უსასრულო დრო რომ გვქონოდა ყველა იმ პროგრამის დასაწერად, რომლებიც გვაფიქრდება, მაშინ ყოველ მათგანს ექნებოდა ჩვენს სიაში ჩამოწერილი ყველა მახასიათებელი. მაგრამ უსასრულო დრო არ გვაქვს, ამიტომ ამ ნაბიჯში უნდა გადაწყვიტოთ, რომელი მახასიათებლებია ყველაზე მნიშვნელოვანი და რომელ მახასიათებლებს დაამატებთ მხოლოდ მაშინ, თუ დრო დაგვრჩა. ეს მახასიათებლების გაკეთების რიგითობის გამორკვევაშიც დაგეხმარებათ, ყველაზე მნიშვნელოვნიდან ყველაზე ნაკლებ მნიშვნელოვნამდე.
თითოეული მახასიათებლის მნიშვნელობის გამოსარკვევად დაუსვით თქვენს თავს ეს შეკითხვები:
  • თუ ამას ჩემს მეგობარს გავუზიარებდი, რომელი მახასიათებლების ქონა მენდომებოდა აუცილებლად?
  • ყველაზე მეტად რომელი მახასიათებლების შექმნა მინდა?
  • რომელი მახასიათებლებია ყველაზე უნიკალური ჩემი პროგრამისათვის?
  • რომელი მახასიათებლების იმპლემენტაცია მასწავლის ყველაზე მეტს?
  • რომელიმე მახასიათებელი ზედმეტად რთული ხომ არ არის ჩემი ახლანდელი ცოდნის დონისათვის?
შემდეგ მიჰყევით ბოლო ნაბიჯში შექმნილი მახასიათებლების სიას და ან დაალაგეთ სია მნიშვნელოვნობის მიხედვით, ან თითოეულ მახასიათებელს მიანიჭეთ კოეფიციენტი.
ჩემი „ბრეიქაუთის" ასლის მახასიათებელთა სიაში მე ჩამოვწერე „პ1", „პ2" და"პ3" მახასიათებელთა გვერდით, რომელიც აღნიშნავს ყველაზე პრიორიტეტულს (პ1), საშუალოდ პრიორიტეტულს (პ2) და ყველაზე ნაკლებ პრიორიტეტულს (პ3). გადავწყვიტე, პრიორიტეტი უფრო მეტად მიმენიჭებინა თამაშის უნიკალურ მექანიკაზე, ვიდრე თამაშის ზოგად მახასიათებლებზე, როგორიცაა სცენები, რადგან ამას ყველაზე სახალისოდ მივიჩნევ პროექტში:
(პ1) თამაშის სცენა
  • (პ1) მომხმარებლის მიერ კონტროლირებადი ნიჩაბი
  • (პ1) მრავალფეროვანი აგურები
  • (პ1) ბურთის დახრილი მოძრაობა
  • (პ1) შეჯახების დაფიქსირება
  • (პ2) სიცოცხლის გამოჩენა
  • (პ2) ქულის გამოჩენა
  • (პ3) ხმოვანი ეფექტები
(პ2) მთავარი სცენა
  • (პ2) თამაშის ღილაკი
  • (პ3) დახმარების ღილაკი
(პ3) დახმარების სცენა
  • (პ3) ტექსტი
  • (პ3) უკან დაბრუნების ღილაკი
(პ2) გამარჯვების სცენა
  • (პ2) სათაური
  • (პ3) ფეიერვერკის ანიმაცია
(პ2) დამარცხების სცენა
  • (პ2) ტექსტი
  • (პ3) გადატვირთვის ღილაკი
მათ, ვინც თამაშებს აკეთებთ, მოგცემთ ზოგად რჩევას, აი, ის მახასიათებლები, რომელთათვისაც ნაკლები პრიორიტეტის მინიჭებას გირჩევდით: მენიუები, ბევრი დონე, 3–განზომილებიანი გრაფიკა. კონცენტრირდით თქვენი თამაშის უნიკალურ და სახალისო ნაწილზე, შემდეგ გადადით დამატებით დეტალებზე.
თქვენი პრიორიტეტების სია პროექტის ვერსიებადაც შეგიძლიათ, აქციოთ, რათა ადვილად დაინახოთ, რისი იმპლემენტაცია გჭირდებათ თითოეულ ვერსიაში. ყოველთვის შეგიძლიათ, გაჩერდეთ რომელიმე ვერსიის დასრულების შემდეგ და იყოთ ბედნიერი იმით, რაც გააკეთეთ.
აი, როგორი იქნებოდა ჩემი „ბრეიქაუთის" ასლის ვერსიები:
V1
  • მომხმარებლის მიერ კონტროლირებადი ნიჩაბი
  • მრავალფეროვანი აგურები
  • ბურთის დახრილი მოძრაობა
  • შეჯახების დაფიქსირება
V2
  • სიცოცხლის ჩვენება
  • ქულის ჩვენება
  • საწყისი სცენა დაწყების ღილაკით
  • გამარჯვების სცენა სათაურით
V3
  • ხმოვანი ეფექტები
  • დახმარების ღილაკი
  • ფეიერვერკები
  • დამარცხების სცენა ხელახლა დაწყების ღილაკით

5. როგორ განახორციელებთ მის იმპლემენტაციას?

ახლა დაახლოებით იცით, რა მახასიათებლებს შექმნით თავდაპირველად თქვენს პროგრამაში – მაგრამ თუ ახლა დაიწყებთ, დარჩებით სრულიად ცარიელი პროგრამის პირისპირ, რომელშიც კოდი არ წერია, ამან შესაძლოა, შეგაშინოთ. რომელი ცვლადები უნდა დაწეროთ პირველად? რომელი ფუნქციები?
ამის გამორკვევის ერთ–ერთი საშუალებაა თქვენი პროგრამის „მაღალი დონის არქიტექტურაზე" დაფიქრება – მისი კატეგორიებად დაყოფა, როგორიცაა „ობიექტები", „ლოგიკა", „მომხმარებელთან ინტერაქცია", „მომხმარებლის მონაცემები" და „სცენები" – და ამის შემდეგ იფიქრეთ, როგორ აპირებთ მათ იმპლემენტაციას, როგორც ობიექტზე ორიენტირებულ ობიექტთა ტიპებს, ფუნქციებს, თუ ცვლადებს.
მაგალითად, აი, ჩემი „ბრეიქაუთის" ასლის არქიტექტურა:
ობიექტები
  • (აგური) Brick (.isHit())
  • (ნიჩაბი) Paddle (.move())
  • (ბურთი) Ball (.move())
სცენები
  • დაწყება
  • თამაში
  • დასასრული
ლოგიკა
  • ბურთის და აგურის დაჯახება (function, გამოიყენეთ გარემომზღუდველი ყუთი)
  • ჩოგანის და ბურთის კუთხის განსაზღვრა (function, შეაბრუნეთ კუთხე)
მომხმარებელთან ინტერაქცია
  • ნიჩბის კლავიატურით გამოძრავება (keyPressed)
  • ღილაკები სცენების შესაცვლელად (mouseClicked)
მომხმარებლის მონაცემები
  • ბურთების სიკვდილი (array)
  • ბურთების დავარდნა (array)
მას შემდეგ, რაც მაღალი დონის არქიტექტურაზე იფიქრებთ, უფრო ცხადი უნდა გახდეს, რისი კოდის წერით უნდა დაიწყოთ.
შესაძლოა, პროგრამა თავიდან მთლიანად ფსევდოკოდად დაწეროთ, რომელზეც ამ გაკვეთილში მოგვიანებით ვისაუბრებთ. ეს ნიშნავს მთელი პროგრამის ჩვეულებრივი სიტყვებით ჩაწერას კომენტარში და შემდეგ მის ნელ–ნელა კოდად ქცევას.

6. როგორია თქვენი სამუშაო განრიგი?

რამდენი დრო გაქვთ ამ პროგრამის გასაკეთებლად? რამდენი კვირა და რამდენი ხანი დღეში? რა მახასიათებლებს დაწერთ ყოველ კვირას? ამ ნაბიჯში თქვენი მიზანია, შეადგინოთ თქვენს პროექტზე მუშაობის განრიგი – ეს განსაკუთრებით მნიშვნელოვანია, თუ განსაზღვრული ბოლო ვადა გაქვთ, მაგრამ აგრეთვე გამოგადგებათ პროგრამის დასაწერად თქვენთვის საჭირო დროის გამორკვევაში.
აი, მუშაობის განრიგი ჩემი „ბრეიქაუთის" ასლისათვის. დავუშვი, რომ ყოველ კვირა 2–4 საათი ვიმუშავებ:
  • კვირა 1: დიზაინი და ფსევდო–კოდი
  • კვირა 2: მარტივი ვიზუალი
  • კვირა 3: ბურთის მოძრაობა/შეჯახების მექანიკა
  • კვირა 4: ქულების დაწერის მექანიკა
  • კვირა 5: სცენები (დაწყება/გამარჯვება/დამარცხება)
  • კვირა 6: ხარვეზების გამოსწორება, ხელოვნური ტესტები (ხარისხის უზრუნველყოფა), დემო ვერსიისათვის მომზადება
პროგრამირების პროექტებზე სამუშაო განრიგის სწორად შექმნა რთულია. ზოგიერთი რამ, რაც ადვილი ჩანს, გაცილებით მეტ დროს მოითხოვს, ვიდრე ელით (როგორიცაა უცნაური შეცდომა კოდში, რომლის გამართვაზეც საათები გეხარჯებათ). ზოგიერთი რამ, რაც რთული ჩანს, მოითხოვს ნაკლებ დროს, ვიდრე ელით. ზოგადად, ჩათვალეთ, რომ მეტი დრო დაგჭირდებათ, ვიდრე ფიქრობთ და მუშაობის პროცესში უკეთ გაერკვევით.

მზად ხართ!?

იმედია, ეს წარმოდგენას შეგიქმნით პროგრამირების პროექტის დაგეგმვის პროცესზე და თქვენი ახალი პროექტის დაწყების შთაგონების წყარო გახდება. იმის მიხედვით, თუ რისი გაკეთება გსურთ, შეიძლება, სხვა კურსების დათვალიერება გადაწყვიტოთ, როგორიცაა გაძლიერებული JS: თამაშები და ვიზუალიზაციები ან გაძლიერებული JS: ბუნებრივი სიმულაციები
მნიშვნელოვანია, რომ გარკვეულ დროს თქვენს საკუთარ პროგრამებს წერდეთ, რადგან ყველაზე მეტს სწორედ აქ ისწავლით და, აგრეთვე, ასე ყველაზე მეტად ისიამოვნებთ პროგრამირებით, რადგან ამ დროს თქვენს ოცნებებს რეალობად აქცევთ.

გსურთ, შეუერთდეთ დისკუსიას?

პოსტები ჯერ არ არის.
გესმით ინგლისური? დააწკაპუნეთ აქ და გაეცანით განხილვას ხანის აკადემიის ინგლისურენოვან გვერდზე.