תוכן שניצל - HWzone פורומים
עבור לתוכן
  • צור חשבון

שניצל

מנהל פורום
  • מספר הודעות

    12063
  • הצטרפות

  • ביקר לאחרונה

הודעות שנפתחו על-ידי שניצל

  1. html היא לא שפת תכנות ולכן היא לא רלוונטית כאן (אני בספק אם תתעסק איתה בתואר, אולי באיזה קורס בחירה).

    בעקרון במוסד שבו תלמד (איפה, אגב?) ילמדו אותך מה שאתה צריך. אם אתה רוצה head start אז כדאי לך לברר איזה שפות תכנות מלמדים ופשוט ללמוד אותן בעצמך. C ו-Java הן אכן השפות העיקריות שמלמדים, למיטב ידיעתי, ולכן הן הכיוון המומלץ.

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

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

    קודם כל, האלגוריתם מתבסס על פונקציית גיבוב קריפטוגרפית (Cryptographic Hash Function). פונקציית גיבוב זו פונקציה מתמטית שמקבלת קלט באורך כלשהו ומחזירה פלט קצר בהרבה (בדרך כלל בגודל קבוע). דוגמה לפונקציית גיבוב פשוטה - פונקציה שמקבלת מספר ומחזירה את סכום ספרותיו. פונקציית גיבוב קריפטוגרפית צריכה לקיים תנאים נוספים - בראש ובראשונה שיהיה קשה "להפוך" אותה, כלומר צריך שבהינתן פלט מסויים, יהיה קשה למצוא קלט אשר יוצר אותו. יש דרישות נוספות, אבל הן לא רלוונטיות כרגע. מה הכוונה ב"קשה"? שאין דרך טובה לעשות זאת, חוץ מלעבור באופן סדרתי על הרבה קלטים עד שמוצאים קלט מתאים.

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

    הכרייה עצמה מתבססת על אלגוריתם בשם HashCash (או ליתר דיוק, רעיון דומה לו). הרעיון הוא פשוט: נניח שאני שולח אי-מייל לחבר שלי, אבל אני רוצה להוכיח לו שהשקעתי מאמץ (חישובי) על מנת לשלוח לו את ההודעה (כלומר, הייתי צריך לעשות פעולה חישובית שלוקחת הרבה זמן על מנת ליצור את ההודעה ששלחתי לו). אז מה שאני עושה הוא לכתוב את ההודעה, להוסיף לה מחרוזת אקראית בסוף ולהפעיל עליה פונקציית גיבוב (לדוגמה SHA256). אם התוצאה שקיבלתי מתחילה ב-20 אפסים, אני שולח את ההודעה (יחד עם המחרוזת האקראית כמובן), אחרת אני ממשיך להגריל מחרוזות אקראיות עד שאני מוצא הודעה מתאימה. הדרישה שהפלט של פונקצית הגיבוב יתחיל ב-20 אפסים גורמת לכך שרק אחת מכל 2 בחזקת 20 הודעות יענו על התנאי - כלומר, אני אצטרך להריץ את האלגוריתם שלי בתוחלת 2 בחזקת 20 פעמים עד שאני אמצא הודעה מתאימה. אחרי שאני שולח את ההודעה לחבר שלי, כל מה שהוא צריך לעשות זה לחשב את פונקציית הגיבוב על ההודעה, ואם התוצאה לא מתחילה ב-20 אפסים אז הוא יודע שלא השקעתי את המאמץ הדרוש. ככל שנדרוש יותר אפסים בהתחלה, ככה יהיה יותר קשה למצוא הודעה מתאימה, ונוכיח שהמאמץ שהושקע גדול יותר.

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

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

  3. גם פייתון תתאים למה שאתה מחפש. הסברתי בהודעה הראשונה למה לדעתי ג'אווה עדיפה על פניה, אבל זה עניין של העדפה אישית - כאמור לדעתי ג'אווה מקנה הרגלי תכנות נכונים יותר, וקל בה יותר לבנות גדולות (אם כי יש רבים שיחלקו על דעתי).

  4. שלום לכולם!

    מטרת נושא זה היא לרכז מקורות לימוד (מדריכים וספרים) לכל שפות התכנות למיניהן.

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

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

    למי שרוצה לשאול איזו שפת תכנות כדאי ללמוד, מוזמן להיכנס לדיון הזה.

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


    ++C

    Parashift C++ FAQ

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


    Python

    מדריך פייתון הרשמי

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

  5. אני חושב שצריך להתחשב גם בגיל הלומד.

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

    חוץ מזה, אין קשר בין זה שהשפה היא מפורשת (interpreted) לזה שאין צורך להגדיר בה משתנים (אלה שתי תכונות נפרדות של השפה, למרות שהרבה פעמים שפות המקיימות את האחת מקיימות גם את השנייה). לדוגמה, Visual Basic היא שפה שבה אין צורך להגדיר משתנים מראש, אבל היא אינה מפורשת.

  6. ברוכים הבאים!

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

    למקורות מידע בנושאי תכנות, אנא היכנסו לדיונים הבאים:

    שפות עילית (Java, C/C++, Python וכו')

    פיתוח אתרי אינטרנט (HTML, JavaScript, CSS, PHP וכו')

    אלו הן שתי האגורות שלי בנושא:

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

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

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

    Java ו-#C הן שתי שפות מאוד דומות (#C שאבה השראה רבה מ-Java). שתיהן מזכירות את ++C בתחביר שלהן, אבל שם הדמיון מסתיים, והן שפות הרבה יותר נוחות וחזקות ממנה (למרות השם, אין קשר בין ++C ל-#C). בניגוד לפייתון יש להן חוקי תחביר הרבה יותר קשיחים, שלדעתי יעזרו להקנות לכם הרגלי תכנות נכונים. לשתיהן יש סביבות פיתוח חינמיות (Eclipse עבור Java, ו-Visual Studio Express עבור #C) ועשרות, אם לא מאות, מדריכים ברשת. יש לשים לב שבגלל שהשפות כל הזמן מתפתחות ומשתפרות עדיף ללמוד ממדריך עדכני, לפחות משנת 2005-6 (ליתר דיוק, לפחות מגרסה 5.0 של Java או גרסה 2.0 של #C). אישית, אני מעדיף את שפת #C ממספר סיבות - היא מכילה מספר כלים יותר חזקים מאשר Java, מיקרוסופט כל הזמן מעדכנת ומכניסה בה שיפורים, והחבילה הסטנדרטית שלה יותר רחבה ונוחה לשימוש (לדוגמה, כתיבת ממשק גרפי - GUI - הרבה יותר קלה ב-#C מאשר ב-Java). לעומתה, Java הוא Cross-Platform (כלומר ניתן להשתמש בה בכל מערכת הפעלה, ולא רק בחלונות) והיא יותר חופשית לשימוש (רוב השפה הוא קוד פתוח) ולכן היא יותר נפוצה בלימודים באוניברסיטאות.

    בניגוד למה שרבים אומרים, אני ממליץ לא להתחיל מ-C או מ-++C (או רחמנא ליצלן, ללמוד C ואז "להתקדם" ל-++C). הן אמנם מלמדות יותר איך "באמת" עובד המחשב (על ידי כך שהן מתורגמות ישירות לשפת המכונה שרצה על המעבד ללא שפת ביניים, והן משתמשות בגישה ישירה לזכרון בלי שום ניהול) והן עדיין השפות הפופולריות ביותר בשוק פיתוח התוכנה, אך הן יותר קשות ללימוד ולתחזוקה, מתכנתים צריכים להתעסק הרבה ב"ג'יפה" שמסביב לתכנות, וזה ויכול בקלות מאוד להרתיע מתכנתים חדשים.

    בנוסף, חשוב לציין האם אתם רוצים ללמוד שפת תכנות למטרה ספציפית. לדוגמה, אם ברצונכם ללמוד לתכנת עבור טלפונים סלולריים, אז מומלץ ללמוד דווקא Java (אשר באמצעותה כותבים למערכת Android) או Objective-C (שפה המבוססת על C, ובאמצעותה כותבים למערכת iOS). אם ברצונכם לפתח אתרי , אז תלמדו את השפות המתאימות לכך - HTML+CSS (לבנייה ועיצוב של אתרים) ולאחר מכן JavaScript ושפת צד שרת (PHP, ASP.NET וכד') בשביל לבנות אתרים דינמיים.

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

    • אהבתי! 1
  7. כמו שאמרתי, סיבכת :)

    צריך משהו כזה:


    <script>
    function validate() {
    phrase = document.getElementById("phrase").value;
    if (phrase is valid) {
    return true;
    } else {
    return false;
    }
    }
    </script>

    <form action="search.php" method="get" onsubmit="return validate()">
    <input type="text" name="phrase" />
    <input type="submit" />
    </form>

    כשכמובן במקום "phrase is valid" שים את הקוד שבודק שהביטוי אכן תקני.

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

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

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

    לדוגמה בשביל למצוא pdfים אתה יכול פשוט לחפש את המחרוזת filetype:pdf בגוגל.

×
  • צור חדש...