Wednesday, March 11, 2015

თავი 1 (1,1 - 1,2)


Python for Informatics - Exploring Information
Version 0.0.9-d2
Charles Severance
____________________________________________________________________________


რატომ უნდა ისწავლო პროგრამის დაწერა? 

 

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

python words.py 
Enter file: words.txt 
to 16
      ჩვენმა პერსონალურმა ინფორმაციის გამაანალიზებელმა ასისტენტმა სწრაფად გვითხრა რომ   სამ პარაგრაფში სიტყვა "to" გამოყენებულ იქნა თექვსმეტჯერ.     ფაქტი რომ კომპიუტერები ზოგიერთ საქმეში ბევრად კარგია ვიდრე ადამიანი, არის მიზეზი იმისა, რომ ისწავლოთ ლაპარაკი "კომპიუტერის ენაზე". როცა ისწავლი ამ ახალ ენას ,  უკვე შეგიძლია პარტნიორს(კომპიუტერს) მიანდო ამქვეყნიური დავალებები და დაიტოვო მეტი დრო შენთვის, რომ აკეთო ის, რაც შენთვის შესაფერისია. ეს პარტნიორობა შენ მოგცემს მეტ გამჭრიახობას, შემოქმედობითობას და ინტუიციას.


1.1 შემოქმედობითობა და მოტივაცია 

 

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

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

1.2 კომპიუტერის ტექნიკის არქიტექტურა 

 

     სანამ იმ ენაზე დავიწყებდე ლაპარაკს ,რომელზეც კომპიუტერს მივცემთ ინსტრუქციებს პროგრამის კონსტრუირებისთვის, მანამდე საჭიროა ვისწავლოთ მცირედი იმის შესახებ თუ როგორაა კომპიუტერი მოწყობილი.  კომპიუტერს ან მობილურ ტელეფონს თუ გახსნი, დაინახავდი შემდეგ ნაწილებს:
 
 
  აღნიშნული ნაწილების  განმარტებები: 
  
The Central Processing Unit (CPU) - ცენტრალური პროცესორი (ცპ) არის კომპიუტერის ნაწილი რომელიც შეპყრობილია კითხვით "რა არის შემდეგი?".  თუ თქვენს კომპიუტერს აქვს 3.0 გიგაჰერცი,  ეს ნიშნავს რომ ცპ გკითხავთ "რა არის შემდეგს?" სამ მილიარდჯერ ყოველ წამში. მოგიწევს ისწავლო როგორ ელაპარაკო სწრაფად ცპ -ს.      
Main Memory -  ძირითადი მეხსიერება გამოიყენება იმ ინფორმაციის შესანახად , რომელიც სჭირდება ცპ -ს. ძირითადი მეხსიერება  დაახლოვებით ისეთივე სწრაფია როგორც ცპ, მაგრამ როცა კომპიუტერი გამორთულია  ძირითად მეხსიერებაში შენახული ინფორმაცია იკარგება.  
Secondary Memory - დამატებითი მეხსიერება ასევე გამოყნებულია ინფორმაციის შესანახად, მაგრამ ეს ბევრად უფრო ნელია, ვიდრე ძირითადი მეხსიერება. დამატებითი მეხსიერების უპირატესობა ისაა, რომ მას შეუძლია შეინახოს ინფორმაცია მაშინაც კი, როცა კომპიუტერს ელექტროენერგია არ მიეწოდება. დამატებითი მეხსიერების მაგალითებია მყარი და ფლეშ დისკები.     
 Input and Output Devices - შიდა და გარე მოწყობილობებია ეკრანი, კლავიატურა, თაგვი, მიკროფონი, დინამიკი, "თაჩფადი", და.ა.შ. ეს ყველაფერი არის კომპიუტერთან ურთიერთქმედების საშუალებები.    
Network Connection - ქსელთან კავშირი დღეს უმეტეს კომპიუტერს აქვს ქსელიდან ინფორმაციის მოსაპოვებლად. ქსელზე შეგვიძლია ვიფიქროთ , როგორც ძალიან ნელ ადგილზე ინფორმაციის განსათავსებლად ან საპოვნელად, რომელიც შეიძლება ყოველთვის არ იყოს ხელმისაწვდომი. ამ გაგებით, ქსელი არის  დამატებითი მეხსიერების ნელი და არასაიმედო ფორმა.     სანამ ყველა დეტალს გავარჩევდეთ, ჯობია კომპიუტერის ნაწილები მის ინჟინრებს დავუტოვოთ  და ვილაპარაკოთ პროგრამაზე.     როგორც პროგრამისტი, შენი საქმეა არსებული რესურსების ორკესტრირება პრობლემის გადასაჭრელად თუ მონაცემების გასაანალიზებლად. როგორც პროგრამისტს უმეტესად "სალაპარაკო" გექნება ცპ-სთან  რო უთხრა თუ რა გააკეთოს. ხანდახან ცპ-ს ეტყვი რო გამოიყენოს ძირითადი მეხსიერება, დამატებითი მეხსიერება, ქსელი ან შიდა და გარე მოწყობილობები. 



შენ უნდა გახდე ადამიანი რომელიც ცპ-ს კითხვას "რა გავაკეთო" გასცემს პასუხს. მაგრამ არაკომფორტული იქნება 5 მილიმეტრის სიმაღლემდე დაპატარავება, კომპიუტერში შეძვრომა და წამში 3 მილიარდი ბრძანების გაცემა. ამის ნაცვლად წინასწარ უნდა  დავუწეროთ ინსტრუქცია. ასეთ ინსტრუქციას ვეძახით პროგრამას და ინსტრუქციის დაწერა/შემოწმებას - პროგრამირებას.