בתכנות, hard coding (הארד קודינג; בתרגום מילולי: "תכנות נוקשה") היא הכללה ישירה בקוד המקור או בקובץ ההרצה של התוכנית, של מה שעשוי להחשב (אולי רק בדיעבד), כמה שנכון יותר שיתקבל בצורה של נתוני קלט או דרך קובץ קונפיגורציה; או השימוש בנתונים קבועים מראש, במקום לקבל את הנתונים ממקורות חיצוניים.
Hard coding נחשב ל-anti-pattern - שיטת עבודה הנחשבת כלא יעילה או לא פרודוקטיבית (בניגוד ל-design pattern). שימוש ב-hard coding דורש לשנות את קוד המקור בכל פעם שרוצים לשנות את נתוני הקלט, בעוד שלמשתמש הקצה כנראה יהיה נוח יותר לשנות פרטים מסוג כזה בדרך שונה, מחוץ לתוכנית עצמה.
לעיתים נדרש שימוש ב-hard coding. ייתכן שמתכנת יידרש לשחרר גרסת תוכנה עוד לפני שהספיק לפתח ממשק משתמש דינמי, ואז הוא יוציא גרסת תוכנה שכוללת hard coding. בדרך כלל זהו פתרון זמני לטווח קצר, אבל הוא מאפשר לספק קוד בתנאיי לחץ זמן. מאוחר יותר יבוצע soft-coding, מה שיאפשר למשתמש הקצה להעביר לתוכנה פרמטרים ובכך להשפיע על תוצאות הריצה שלה.
לדוגמה, במקרה והתוכנית עושה שימוש במחרוזת המציינת את המיקום של קובץ שהתוכנית עושה בו שימוש, ניתן להימנע מ-hard coding של נתיב לקובץ מסוים, על ידי יצירת משתנה בשם filePath
, ולאפשר למשתמש לקבוע את הערך שלו על ידי שימוש בחלון "עיון..." (browse for file), המאפשר לו לבחור את הקובץ.
במקרים רבים, ערך hard-coded יחיד, כמו גודל של מערך, עשוי להופיע כמה פעמים בקוד המקור של התוכנית. ערך כזה מכונה "מספר קסם". לעיתים קרובות זה יכול לגרום לבאגים בתוכנה במידה ומשנים חלק מהמופעים של הערך הזה, אבל לא את כולם. באג כזה קשה לאיתור והוא עשוי להישאר בתוכנית לאורך זמן. בעיה דומה יכולה להגרם אם אותו ערך hard-coded משמש כערך עבור יותר מפרמטר אחד. לדוגמה, הגדרה של מערך בגודל 6, ואורך מינימלי של מחרוזת של 6 תוים. מתכנת עשוי בטעות לשנות את כל המופעים של הערך (לעיתים קרובות על ידי שימוש באפשרות "חפש-והחלף" של עורך הטקסט), מבלי לבדוק בקוד כדי לראות מה השימוש שנעשה בכל אחד מהמופעים של הערך. ניתן להימנע משתי השגיאות על ידי שימוש בקבועים (constants), המשייכים שמות לערכים, ואז להשתמש בשמות של הקבועים בכל פעם שעושים שימוש באותו ערך בקוד.
כתוביות מובנות בסרט גם נקרא hardcoded subs.