On 27 Oct, 2005, at 4:22, guy keren wrote:

I tried to make the first 3 programs comparing list, array and deque
more pythonic
<http://faassen.n--tree.net/blog/view/weblog/2005/08/06/0> and example
of best practice in general:
* Don't repeat the same code more then once

i think you're confusing 2 things here. i was demonstrating 3
_seperate_
programs - so this is not code-repetition per-ce.

Which are the same except one or two lines...

again, you're missing the point of how _new_ programmers grasp material. remember - i'm not talking to people with experience in programming - this is the first programming language. what to you might look like a "nice and
clean and easy abstraction" - would look confusing to them.

what i could do, perhaps, is write the 3 seperate programs, and _then_
show that they can be combined in this manner. you can't show people just the end result and hope they figure how you got there - you need to make the whole path explicit. otherwise, they won't learn how to make the whole
path on similar occasions.

אני מסכים שצריך להראות את הדוגמאות הפשוטות ביותר האפשריות, כדי להתמקד במה שחשוב. אני גם מסכים עם מה שכתבת באתר:

"הקורס מלמד, בכל שלב נתון, רק את מה שצריך כדי לכתוב משחק מסויים"

הבעייה היא שאתה רוצה ללמד על מבני נתונים, בהנחה שאתה חייב לדעת על זה כדי לכתוב משחק יעיל, וכדי לבחור מבני נתונים מתאימים, אתה רוצה להשוות את הביצועים שלהם. כאן אנחנו נכנסים לסיבוך מיותר, איך לבדוק את הביצועים בלי לכתוב קוד מסובך מידי, מכיוון שאין להם מספיק נסיון...

הפתרון הוא לסלק את השוואת הביצועים, שלא מעניינת אף אחד מהתלמידים בשלב זה. לקצר את השלבים כמה שיותר, כדי להפוך את הלימוד לקל יותר ומהנה יותר.

"אם וכאשר הילדים ירצו ללמוד יותר, כדי לתכנת דברים נוספים - נעודד אותם להתקדם בעצמם, ונעזור להם במידה ויתקשו."

אם יהיו תלמידים שירצו לכתוב משחק מהיר יותר בשלב זה, כדאי להכנס לנושא של שיפור ביצועים, בדיקה של מבני הנתונים שנבחרו, השוואת ביצועים של מבנים שונים וכולי.

אבל יש לי תחושה שלא תשתכנע לכן ננסה להיות מעשיים :-)

1. add the pre-section about python issues such as timing code (perhaps
add it right after i explain time and space complexity - which reminds me, i need a good way to measure the ammount of memory data structures take.
anyone has an idea?).

כדאי ללמוד להשתמש בפרופיילר, בגלל שבדיקת מהירות של קטעי קוד קטנים היא לא מאוד אמינה בפייתון. זה די קל ללמוד, יכול להיות נושא לשיעור אחד, בו לומדים איך לעשות פרופיילים לתוכנה שלך, אוספים תוצאות ומנתחים אותם.

אפשר לבדוק את כמות הזכרון שהתהליך לוקח בעזרת ps בשלבים שונים של הריצה. אפשר גם לקבל מידע מענין על כמות האוביקטים במערכת ועל מערכת "איסוף הזבל" של פייתון דרך מודול gc.

2. teach more about text formatting in the frontal classes (i'll see where
   to add that to the study plan).

השימוש העקרי של פירמוט טקסט הוא שתילת מחרוזות בתוך מחרוזות אחרות, ולפעמים פרמוט של מספרים, זה בסך הכל נושא קטן מאד שכדאי שילמדו ברגע שהם צריכים את זה.

3. show this example code as 3 seperate programs, and then combine them
   all into one larger program in your style.

אולי הם יעשו תרגיל כזה בשלב יותר מוקדם ואז לא יהיה ממש צורך בתרגיל כזה בשלב שבו הם יקראות את הספרון על מבני נתונים?

אני מצרף תוכנית שכתבתי לעצמי שמחליפה את כל ששת התוכניות (לא הכרתי את deque). היא טיפה יותר מורכבת, בגלל שהיא שולחת פונקציה לפונקציה אחרת, אבל בפייתון זה ענין טבעי ופשוט. אם אתה רוצה להוסיף עוד פונקציה לבדיקה, אתה פשוט כותב אותה ומוסיף שתי שורת כדי להריץ אותה.

אפשר בקלות להוסיף לכאן או לקובץ נפרד קוד שיבדוק גם את כמות הזכרון הנדרש לכל טסט, או אולי יבדוק את כמות הזכרון במקום זמן הריצה - ואז תוכל להשוות שתי טבלאות, אחת של זמן ריצה ואחת של כמות זיכרון.


Attachment: test_collections.py
Description: application/text



ניר סופר

ִ

לענות