ar
Feedback
ToCode

ToCode

الذهاب إلى القناة على Telegram

טיפים קצרים למתכנתים מאת ינון פרק

إظهار المزيد
1 419
المشتركون
لا توجد بيانات24 ساعات
لا توجد بيانات7 أيام
-530 أيام
أرشيف المشاركات
ToCode
1 419
היום למדתי להיזהר מקבצי pyc החברים ב JFrog פירסמו השבוע פוסט שתפס אותי בהפתעה: https://jfrog.com/blog/leaked-pypi-secret-token-revealed-in-binary-preventing-suppy-chain-attack/ הסיפור הפעם הוא על מתכנת או מתכנתת שהחליטו לנסות משהו בקוד לפני שבונים משהו מסודר. אז הם כתבו פונקציה שנראית בערך כך:
def _fetch_github_file(github_repository="owner/repo", ref="main", access_token=None, filename="Dockerfile"):
    headers = {
        "Accept": "application/vnd.github+json",
        "X-GitHub-Api-Version": "2022-11-28",
        "Authorization": "Bearer 0d6a9bb..."
    }
    if access_token is not None:
        headers['Authorization'] = f'token {access_token}'
        ...
אחרי זה הפעילו את הקוד, ואחרי שראו שזה עבד תיקנו אותו ומחקו את הטוקן מהקוד כלומר שינו את הקוד ל:
def _fetch_github_file(github_repository="owner/repo", ref="main", access_token=None, filename="Dockerfile"):
    headers = {
        "Accept": "application/vnd.github+json",
        "X-GitHub-Api-Version": "2022-11-28",
    }
    if access_token is not None:
        headers['Authorization'] = f'token {access_token}'
        ...
ואז קומיט, דחיפה, בנייה ושלום על ישראל. אלא מה, בהרצת הבדיקה (של הקוד עם הטוקן) נוצר קובץ pyc. הקובץ הזה גם נדחף ל CI שבנה את האימג' לדוקר ומשם נכנס ל Dockerhub כחלק מהאימג' הציבורי. אה ובתור בונוס אותו טוקן בדיקה שעכשיו כבר היה זמין לכל העולם היה גם מחובר לחשבון גיטהאב בעל הרשאה לכל המאגרים של Python Foundation ויכול לדחוף קוד למאגרים של PyPI ופייתון עצמה. בצד החיובי אגב JFrog ציינו לטובה את העובדה ש PyPI תיקנו את הבעיה תוך 17 דקות בלבד מרגע הפנייה וככל שידוע לא היתה פעילות חשודה עם טוקן זה.

ToCode
1 419
איך להתחיל לפתח Miniapp לבוט בטלגרם אחת היכולות המלהיבות של בוטים בטלגרם היא האפשרות "לברוח" מהבוט לדף ווב, כאשר דף הווב מקבל המון מידע מטלגרם כדי לייצר מראה אחיד בין הבוט לאפליקציה. פירוט מלא על מיניאפס אפשר למצוא בדף התיעוד של טלגרם כאן: https://core.telegram.org/bots/webapps. ואם כבר יש לכם בוט אלה השלבים בקצרה: 1. יוצרים תיקייה על המחשב עבור הבוט. אפשר לבנות ווב אפ מתוחכם או בשביל הדוגמה קובץ html פשוט. המינימום שצריך זה קובץ index.html וקובץ manifest.json. קובץ ה manifest.json נראה ככה:
{
  "name": "My Telegram Mini App",
  "short_name": "Mini App",
  "description": "A brief description of what your Mini App does",
  "version": "1.0.0",
  "start_url": "/index.html",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#0088cc",
  "icons": [
    {
      "src": "/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

והקובץ index.html נראה ככה:
<!DOCTYPE html>
<html>
<head>
    <link rel="manifest" href="/manifest.json">
</head>
<body>
<script src="https://telegram.org/js/telegram-web-app.js"></script>
<script>
    const webapp = window.Telegram.WebApp;
    webapp.ready();
</script>
</body>
</html>
2. מתקינים https://telebit.cloud או ngrok או כלי דומה כדי לקבל URL ציבורי לסרביס שרץ אצלכם על המחשב. 3. מפעילים מקומית שרת ווב בתיקייה שיצרנו, או אם יצרתם ווב אפ מתוחכם אפשר להפעיל את סקריפט הפיתוח שלו. 4. מפעילים את טלביט לפורט של השרת שיצרתם. בדוגמה שלי אני מפעיל:
python -m http.server
כדי לקבל שרת ווב סטטי לקבצים על פורט 8000 ולכן אני מפעיל:
~/telebit http 8000
כדי לחבר את הפייתון ל URL הציבורי שקיבלתי מטלביט. 5. שולחים הודעה ל Botfather עם הפקודה /newapp. 6. עונים על המון שאלות. השאלה היחידה שחשובה שם היא ה URL של ה Web App. מכניסים שם את ה URL שקיבלנו מטלביט (זה שמחובר לשרת ווב שרץ אצלנו על המחשב). 7. מקבלים מ botfather קישור. לחיצה על הקישור פותחת את ה miniapp שיצרתם בתוך טלגרם. עכשיו אפשר לעדכן את הקוד ולראות את השינויים בטלגרם. 8. אחרי שמסיימים לפתח תוכלו להעלות את דף הווב לשרת אמיתי ולעדכן את הכתובת באמצעות שליחת הודעת /editapp ל botfather.

ToCode
1 419
שמונה מיומנויות גיט שממש שווה להכיר בעל פה לא משנה איך אתם עובדים בגיט וכמה נעים לכם ללכת לשאול את ChatGPT לפקודה, עדיין בשביל להיות פרודוקטיביים יש כמה דברים שכדאי לדעת בעל פה. וזה לא משנה אם אתם רגילים לעבוד מכלי גרפי או משורת הפקודה, מה שחשוב שבכלי בו אתם עובדים אתם יודעים בלחיצת כפתור לבצע את הפעולות הבאות בלי לבדוק ברשת: 1. להוסיף קבצים, לעשות קומיט ולדחוף את השינויים לשרת מרוחק. 2. להסתכל איך נראה קובץ בקומיט אחר. 3. לעבור בין ענפים, מקומיים או מרוחקים. 4. לראות את רשימת כל השרתים המרוחקים איתם הפרויקט שלכם מסונכרן. 5. לראות מה היה הקומיט שגרם לשורה מסוימת להצטרף לקוד, או לבלוק מסוים להימחק. 6. לקבל רשימה של שמות הקבצים שהשתנו בקומיט מסוים. 7. למחוק ענפים מקומיים או מרוחקים. 8. לפתור קונפליקטים אחרי merge או cherry-pick או rebase או כל דבר אחר שיוצר אותם. וזה כל מה שצריך בשביל לקבל חווית גיט הרבה יותר שוטפת. בשביל להיות מסוגלים "לטייל" בכל ההיסטוריה של הפרויקט בלי שהטיול הזה יגרום לעצירת רצף המחשבה על הבעיה הנוכחית שאנחנו מנסים לפתור.

ToCode
1 419
בדיוק מה שביקשת פעם עוד היה אפשר לטעון על המחשב שהוא עושה בדיוק את מה שביקשת, גם אם זה לא בדיוק מה שהתכוונת. רוב הזמן שפות תכנות הן צפויות ולכן אנחנו יודעים מה תחזיר תוכנית מחשב. המצב היום עם ה AI הרבה יותר מבלבל. הלכתי לאדון קלוד היום וביקשתי: > create an encrypted messages with deno זה הקוד שקיבלתי - ובבקשה אל תשתמשו בו בקוד שלכם:
import { encode, decode } from "https://deno.land/std/encoding/base64.ts";
import { Aes } from "https://deno.land/x/crypto/aes.ts";
import { Cbc } from "https://deno.land/x/crypto/block_modes.ts";

function encrypt(message: string, key: string): string {
  const iv = crypto.getRandomValues(new Uint8Array(16));
  const aes = new Aes(key);
  const cbc = new Cbc(aes, iv);
  
  const encoder = new TextEncoder();
  const encodedMessage = encoder.encode(message);
  
  const encryptedData = cbc.encrypt(encodedMessage);
  
  const combined = new Uint8Array(iv.length + encryptedData.length);
  combined.set(iv);
  combined.set(encryptedData, iv.length);
  
  return encode(combined);
}

function decrypt(encryptedMessage: string, key: string): string {
  const combined = decode(encryptedMessage);
  const iv = combined.slice(0, 16);
  const encryptedData = combined.slice(16);
  
  const aes = new Aes(key);
  const cbc = new Cbc(aes, iv);
  
  const decryptedData = cbc.decrypt(encryptedData);
  
  const decoder = new TextDecoder();
  return decoder.decode(decryptedData);
}

// Example usage
const key = "mySecretKey123456"; // 16, 24, or 32 bytes long
const message = "Hello, this is a secret message!";

const encrypted = encrypt(message, key);
console.log("Encrypted:", encrypted);

const decrypted = decrypt(encrypted, key);
console.log("Decrypted:", decrypted);
לא צריך יותר מדי להתעמק בשביל לראות שהמפתח הסודי שמור בתוך קוד התוכנית ושהקוד לא חותם על התוכן המוצפן מה שיאפשר לפורצים עתידיים להשתמש בתוכנית שלי כדי לפרוץ את ההצפנה באמצעות שינוי המידע המוצפן ושליחתו למפענח (מה שמכונה Padding Oracle Attack). הסיפור הסתבך כשביקשתי ממנו לתאר איזה בעיות אבטחה הוא מצא בקוד שהוא כתב. כן הוא מצא את הבעיות שאני מצאתי אבל גם עוד כמה בעיות פחות קריטיות וערבוב זה מקשה עלינו כמתכנתים להתמקד. כל הסיפור בא להדגים כמה קשה לקבל תוצאה טובה מ AI כשאנחנו לא יודעים מספיק טוב מה אנחנו צריכים או לא מכירים מספיק טוב את עולם התוכן. מנועי AI מגיעים לתוצאות טובות יותר ככל שניתן להם יותר קונטקסט רלוונטי, והיכרות עם עולם התוכן הכרחית כדי להוסיף את הקונטקסט הרלוונטי לבקשה ולזהות הזיות כדי שאפשר יהיה לחתוך את השיחה כשהן מתחילות.

ToCode
1 419
אחרי כמה זמן זה מפסיק להיות קשה? כשלומדים מיומנות חדשה השאלה הראשונה שאנשים ישאלו תהיה "מתי זה יפסיק להיות קשה", אולי בתיאום עם "מתי אוכל להרוויח מזה כסף". אלה שאלות מאוד חשובות אבל קצת מטעות, כיוון שהן שמות את הדגש על הסוף במקום על הדרך ועל מטרות רחוקות במקום על יעדים קרובים יותר (מה שפוגע במוטיבציה). הנה כמה שאלות שאפשר להעלות במקום- 1. מתי זה יתחיל להיות כיף? 2. מתי אתחיל להתגעגע לזה אם אדלג על שיעורים? 3. מתי אגלה לבד משהו שלא מצאתי קודם בספר? 4. מתי אוכל לפגוש אנשים חדשים שגם לומדים את הדבר הזה? 5. מתי אצליח משהו שאף פעם לא הצלחתי קודם? 6. מתי לא ארצה להפסיק? אני אוהב את השאלות האלה כי הן פותחות את הדלת ומזכירות לנו שלימוד מיומנויות חדשות זה קודם כל אחד הדברים שאנחנו עושים כבני אדם ומיומנות חדשה היא מתנה לכל החיים.

ToCode
1 419
מימוש חלקי בסקאלה דרך מיקסינים התבנית הבאה עזרה לי לארגן מחדש קצת קוד (נו, הרבה קוד) ולחלק אותו מקובץ אחד להרבה קבצים קטנים יותר, מה שגם עזר בבדיקות. נתחיל עם דוגמה פשוטה ונתבונן בקוד הבא:
class MyBigHandler {
  def handle(message: String): String =
    message match
      case "error" => "Handling error"
      case "warning" => "Handling warning"
      case "info" => "Handling info"
      case "zzz" => "MyHandler"
      case _ => "Unhandled message"
}
אז זה קל יש בסך הכל פונקציה אחת שמטפלת בכל מיני סוגים של הודעות. אבל נדמיין שההודעות מחולקות לקבוצות ושיש המון הודעות וקוד הטיפול בכל קבוצה צריך פונקציות עזר משותפות ואין ממש קשר בין הקבוצות. במצב כזה נרצה לפצל את ה match לקבצים וכל קובץ יהיה אחראי על קבוצת הודעות. ופה באים לעזרתנו ה Mixins. זה הקוד אחרי אירגון מחדש:
trait MessageHandler {
  def handle(message: String): String = "Unhandled Message"
}

trait ErrorHandler extends MessageHandler {
  abstract override def handle(message: String): String = message match {
    case "error" => "Handling error"
    case _ => super.handle(message)
  }
}

trait WarningHandler extends MessageHandler {
  abstract override def handle(message: String): String = message match {
    case "warning" => "Handling warning"
    case _ => super.handle(message)
  }
}

trait InfoHandler extends MessageHandler {
  abstract override def handle(message: String): String = message match {
    case "info" => "Handling info"
    case _ => super.handle(message)
  }
}

class MyHandler extends MessageHandler
  with ErrorHandler
  with WarningHandler
  with InfoHandler {

  override def handle(message: String): String =
    message match
      case "zzz" => "MyHandler"
      case _ => super.handle(message)
}
כל trait מטפל בהודעות שרלוונטיות עבורו ויכול לשבת בקובץ נפרד עם אוביקט של פונקציות עזר. ה Handler הוא פשוט הרכבה של כל המיקסינים ויכול להוסיף מימוש משלו לדברים שלא היה להם מקום באף מיקסין ועכשיו הרבה יותר קל לשלב את הטיפול בכל קבוצת הודעות גם במחלקות אחרות או לכתוב בדיקות לכל קבוצה בנפרד.

ToCode
1 419
תחזוקה ו GPT מנועי GPT הפכו לחלק אינטגרלי מאינסוף אפליקציות חדשות שיוצאות כולל כמה פרויקטים שהייתי מעורב בהם. הפיתוח תמיד מאתגר כי אנחנו אף פעם לא יודעים מה בדיוק יענה ה AI, ויש צורך גם לנקות את הקלט לפני שפונים אליו וגם לנקות את הטקסט שחוזר ממנו אבל בסוף אחרי מספיק Prompt Engineering אפשר להגיע לתוצאה טובה. השבוע לראשונה (לפחות עבורי) נתקלתי באתגר חדש - והוא שינוי במנוע ה GPT עצמו שגרם לפרומפט שכבר עבד להפסיק לעבוד. אני משווה את זה לעבודה מול שירותי צד-שלישי מסורתיים ורוצה לבכות - כל API חיצוני מולו אני עובד כולל מספר גירסה. כשיש שינוי הוא תמיד יזום. ה AI אומנם כולל מזהה מודל, אבל עדכונים למודל לא תמיד מתורגמים לגירסה חדשה. אין גם Release Notes שכולל את רשימת כל הדברים שהשתנו או מדריך שידרוג לפרומפטים. מרגע שהחלטת לשלב AI בפרויקט עליך להקפיד לעקוב כל הזמן אחרי התשובות שמתקבלות, לזהות מתי פרומפטים מסוימים מפסיקים לעבוד ולהעלות תיקון, תמיד מאוחר מדי. ככל שעובר הזמן ואנחנו נהיים תלויים יותר ב AI בתור רכיב תשתית במערכות, המצב הנוכחי נראה יותר ויותר לא סביר. במבט קדימה אנחנו נצטרך לעבור לפיתרונות AI מבוססי קוד פתוח, שיותקנו על השרתים שלנו ובשליטה שלנו. במקביל נצטרך לקבל SLAs הרבה יותר טובים מהחברות שיפעילו מנועים כאלה בענן.

ToCode
1 419
יתרונות וחסרונות של למידה ממושחקת בשנים האחרונות הרעיון של Gamified Learning תפס תאוצה ומהווה אלטרנטיבה לשיטות למידה ישנות יותר. כשבאים עם ציפיות נכונות מנגנונים כאלה יכולים להיות מהפכניים ולקדם אותנו יותר מכל טכניקה אחרת. בפוסט זה אנסה להבין אתכם את המאפיינים של שיטת הלמידה הממושחקת ואשתף מהניסיון שלי מה עבד. מהי Gamified Learning למידה דרך משחק היא שיטת למידה בה החלק הלימודי קורה מעצמו בזמן שאנחנו משחקים במשחק, אבל המשחק בנוי מראש כדי להעצים את אותו חלק לימודי. או במילים אחרות שיטת למידה בה אלמנטים מתחום המשחקים קובעים את מהלך הלימוד. אלה הדברים המרכזיים שאנחנו מצפים למצוא באפליקציות למידה מסוג זה: 1. משימות קצרות שאפשר לסיים תוך שניות, בדרך כלל יינתנו ברצפים של "שיעורים" שגם אותם אפשר לסיים ב 2-3 דקות. 2. שימוש ב"נקודות" וספירת "רצפים" כדי לעודד את המשתמשים לחזור לשחק כל יום. הרבה פעמים משתמשים בשיטת המקל והגזר בתוך האפליקציה, מצד אחד מאיימים שתאבד את הרצף ובאותו זמן מדגישים בכתב ובפירסומות כמה חשוב לתרגל כל יום. 3. יצירת הישגים מהירים מלאכותיים, כשהאפליקציה דואגת לגשר על הפערים. 4. קבלה של טעויות בתור חלק מהתהליך, או "לא לעשות עניין מטעויות". שתי המשפחות המרכזיות של למידה דרך משחק שאני התנסיתי איתן היו Duolingo (בעיקר ללימוד שפות אבל יש להם גם מתמטיקה ואנגלית) ו Simply (בעיקר ללימוד נגינה אבל יש גם שירה וציור). ניסיתי גם אפליקציות למידה דרך משחק לספורט ולתכנות אבל מצאתי אותן הרבה פחות ממכרות. מה אפשר להשיג מאפליקציית לימוד דרך משחק אפליקציות של לימוד דרך משחק עוזרות להתמודד עם לא מעט אתגרים של לימוד מיומנות חדשה: 1. בעיית המוטיבציה ובמיוחד בהתחלה - כשמתחילים משהו חדש עדיין לא מצליחים להגיע להישגים ולכן קשה להתמיד. 2. בעיית ההפתעה אחרי כמה שבועות - מכירים את זה שמתחילים לעשות ספורט ואחרי שבועיים מפסיקים לבוא לחדר כושר? זה קורה כי אחרי שבועיים-שלושה של כל לימוד החיים האמיתיים חוזרים ואנחנו מגלים מצד אחד שייקח המון זמן להגיע להישגים ומצד שני שיש עוד המון דברים שצריך לעשות וקשה למצוא זמן ולהתמיד. הבום הזה גורם לירידה עצומה ופיתאומית במוטיבציה אחרי שלושה שבועות. 3. הקושי למצוא זמן. זה עובד בגלל שאם אני יכול בחמש דקות ביום ללמוד שפה אז אין לי תירוץ לא להיכנס לאפליקציה ולהתאמן את החמש דקות האלה. המשחקים בנויים בכוונה כדי לאפשר התקדמות בזמנים מאוד קצרים. לכן מעבר לזה שקל מאוד להתחיל ללמוד מיומנות חדשה אנחנו גם מצליחים להגיע לרמה לא רעה בכלל באמצעות אפליקציות אלה. בסוף גם אם האפליקציה מלמדת מעט מאוד, עצם זה שממשיכים להתאמן כל יום וכל הזמן יש פוטנציאל התמכרות אומר שאנחנו משקיעים המון זמן באימון וזה מביא תוצאות. מה החסרונות של אפליקציות לימוד דרך משחק ובכל זאת היוטיוב מלא בסרטוני אלף ימים בדואולינגו ואני עדיין לא מדבר ספרדית. מה שבור פה? בשביל לענות צריך לחזור לשיטת הלימוד: 1. משימות קצרות שאפשר לסיים תוך שניות אומר שאנחנו אף פעם לא מתמודדים עם אתגרים משמעותיים שדורשים יותר השקעה - אתגרים כמו שיש בחיים האמיתיים. 2. יצירת הישגים מהירים מלאכותיים אומר שאנחנו חושבים שאנחנו יודעים יותר ממה שאנחנו יודעים באמת ולא מנסים להשלים את הפער באמצעים אחרים. 3. שימוש בנקודות אומר שהרבה פעמים אנחנו מחפשים להגדיל את הנקודות במקום לעשות משהו שיותר יקדם אותנו בנושא אותו אנחנו לומדים. 4. היכולת לטעות בלי הגבלה אומרת שלפעמים אנחנו לא מתאמצים מספיק כדי להבין את התיאוריה ולמנוע טעויות בעתיד. מכל הסיבות האלה למידה דרך משחק יכולה להביא אותנו עד רמה מסוימת אבל החל ממנה כבר קשה להתקדם רק בשיטה זו. יש רגע שבו צריך להיפרד מהאפליקציה או לפחות להוסיף עליה דרכי לימוד נוספות מסורתיות יותר.

ToCode
1 419
מה יש ב Gem הזה? אחת המדרגות הכי חשובות לעלות בתור מתכנתים היא היכולת להיכנס לקוד של ספריה באינטרנט, להבין מה יש בה ולקחת רק חלקים או לבנות לבד מנגנון שעובד בצורה דומה. ה"לפני" וה"אחרי" כאן מאוד בולט- אנשים שעדיין לא עלו את המדרגה הזאת יחפשו למצוא פיתרונות קיימים או לבנות מאפס בעזרת ChatGPT ופיתרונות מ Stack Overflow. כשדברים לא עובדים הם יחפשו הודעות שגיאה ברשת וינסו להתקין גירסאות אחרות של הספריה או ספריות אחרות שפותרות את הבעיה. אנשים שכבר נכנסו לקוד של ספריות אחרות מגיעים לבעיות אחרת לגמרי. הם יכולים להתקין ספריה מוכנה, אבל הרבה פעמים מתוך סקרנות או כשדברים לא עובדים הם בלי בעיה ייכנסו לקוד של אותה ספריה, יחפשו מה בדיוק לא עובד בה עבור ה setup שלהם, יתקנו דברים בקוד הספריה או יבנו מעקפים בקוד שלהם כדי לגרום לדברים לעבוד, או לפעמים יקחו רק את החלק שהם צריכים מהספריה ויעבירו את זה לספריה שלהם או לקוד המערכת. וגם כאן ChatGPT הוא חבר מדהים בתהליך הלימוד. אנחנו נכנסים לקוד שאנחנו לא מכירים ויכולים פשוט להעתיק ולהדביק קטעים בחלון הפרומפט, לבקש הסבר ולשאול שאלות הבהרה כדי לראות שהבנו הכל כמו שצריך. וכמו תמיד במדרגות הזמן הכי טוב לנסות לטפס אותה הוא היום.

ToCode
1 419
איך ללמוד תכנות לבד מהבית ב 2024 לפני 4 שנים כתבתי כמה טיפים איך ללמוד תכנות לבד מהבית. מאז קרו כל מיני דברים ודבר אחד ששינה את הכל, וזה ההופעה של ChatGPT וחבריו הרובוטים. ככה זה נראה היום. האם זה בכלל אפשרי? לפני 4 שנים כתבתי שאפשרי ללמוד לתכנת לגמרי לבד מהבית והדבר הזה עדיין נכון ובמידה רבה אפילו הרבה יותר קל. בעזרת מנועי GPT כל אחד ואחת יכולים לבנות לעצמם מסלול לימודים אישי כדי ללמוד בדיוק את הדברים שמעניינים אותם. אפילו לא צריך למצוא קורס וידאו טוב או מדריך ברשת. אז כן עדיין צריך מוטיבציה ועדיין צריך להיות מסוגלים להתמיד במשהו גם כשהוא לא עובד ולהשקיע שעות מתוך אמונה שיהיה בסדר בסוף אבל בצד החיובי תמיד יש מה לשעות ואיך להתקדם. איזה שפת תכנות ללמוד? כשרק מתחילים ללמוד זה בכלל לא חשוב איזה שפת תכנות בוחרים. פעם חשבתי שכדאי ללמוד שפת תכנות שיש עליה הרבה חומרים ומדריכים ברשת. היום עם הבוטים זה ממש לא חשוב כי ממילא ה AI יודע הכל. במקום לחפש שפה פופולרית כדאי להתחיל בלחשוב מה אנחנו רוצים לבנות. זה יכול להיות אוטומציה על נתונים באקסל שאתם עורכים, בוט לטלגרם, אתר או משחק לטלפון. ברגע שיש קונספט אפשר להתקדם. איפה מתחילים? שלב ראשון הוא להבין איזה כלים צריך להתקין על המחשב. הייתי הולך לאיזה Claude או ChatGPT עם שאלה כמו:
What tools do I need to build a mobile game for Android?
ואז אפשר לחדד את הרשימה עם:
Let's say I'm starting to program my mobile game from scratch - and I have no idea how to write code. What's the easiest way to build my first game? Focus on free tools
עכשיו כבר קיבלתי המלצה מפורשת על Godot ולינק למדריך שמסביר איך לבנות את המשחק הראשון. אגב אחרי ההתקנה אני יכול להמשיך עם קלוד ולבקש ממנו הסברים על כל שלב במדריך, דוגמאות קוד וגם כשמקבל הודעות שגיאה להדביק אותן לחלון ה Chat כדי לקבל פיתרונות. בעזרת מנועי AI והחומר שיש באינטרנט בניית הדבר שרציתם לבנות היא לגמרי אפשרית אפילו אם אתם מתחילים ממש מאפס. האם אי פעם אצליח למצוא עבודה? כן, אבל זה ייקח זמן. כתבתי לפני 4 שנים וזה עדיין נכון - יש אנשים שיצליחו למצוא עבודה מאוד מהר, ואחרים שיצטרכו יותר זמן, אבל בגדול עבודה בתור Junior בסוף מוצאים. מבחינת ציפיות לדעתי בין חצי שנה לשנה זה הזמן שדרוש כדי להגיע לרמה שאפשר למצוא עבודה ראשונה. איך להתקדם בתעשייה? אני בטוח שאפשר ללמוד תכנות מאפס והיום עם מנועי ה GPT זה אפילו קל מתמיד. אחרי שמתחילים לכתוב דברים, לומדים איך לכתוב כמעט כל דבר לבד בעזרת Chat GPT ומוצאים את העבודה הראשונה מגיעה הקפיצה הבאה, והיא ההבנה שלכתוב קוד זה גם לעבוד עם אנשים. מערכות גדולות שונות ממערכות שאתם כותבים לבד ועבודה בצוות שונה מאוד מעבודה עם Chat GPT. בשלב הזה תרצו ללמוד יותר על Design Patterns, אלגוריתמים, סיבוכיות, שפות תכנות חדשות, תכנות מונחה עצמים, ועוד המון נושאים שמתכנתים צריכים כדי להתקדם. זאת הנקודה שיהיה לכם מועיל לקחת קורס מסודר, ספר או אפילו לימודים לתואר כדי לחזק את הידע ולעזור לשים את התיאוריה במקום יחד עם הפרקטיקה. בהצלחה!