שפת תכנות עילית (high-level programming language) היא שפה שאנשים מתכנתים כותבים בה כדי להנחות מחשבים. היא שונה משפות ביניים שמיועדות לכלים אוטומטיים, ומשפות low-level שמקרובות יותר לשפת המכונה. שפות עיליות משתמשות במבנים שמזכירים שפה אנושית, והן מקלות על קריאה וכתיבה. רבות מהן מסתירות פעולות טכניות, כמו ניהול זיכרון, כך שהמתכנת לא צריך לטפל בפרטים הקטנים.
שפות עיליות עובדות ברמת "אבסטרקציה" גבוהה יותר. במקום כתובות זיכרון ואוגרים, הן מציעות משתנים (מקום לשמור ערכים), מערכים (רשימות של ערכים), אובייקטים (יחידות שמכילות נתונים ופונקציות), לולאות, פונקציות ותהליכונים (threads, קווי ביצוע בו זמנית). שפות עיליות נוטות להעדיף שימושיות על פני יעילות נמוכה, וכוללות שירותים מוכנים כמו טיפול במחרוזות, תכנות מונחה-עצמים ותמיכה בקבצים.
האבסטרקציה מקלה על פיתוח, אבל גוררת לעיתים "קנס" בביצועים. קוד בעזרת שפה עילית יכול לרוץ לאט יותר, להשתמש ביותר זיכרון וליצור קבצים בינאריים גדולים יותר. לכן תוכניות שצריכות מהירות מרבית נכתבות לפעמים בשפות low-level. עם זאת, אפשר לשפר ביצועים על ידי כתיבה ידנית של חלקים קריטיים בשפת סף, או על ידי מהדרים טובים שמבצעים אופטימיזציות חכמות. ארכיטקטורות ומהדרים מודרניים מצמצמים את ההבדלים ביעילות.
המושגים "עילית" ו"נמוכה" הם יחסיים. בעבר שפת C נחשבה עילית בגלל פונקציות, טיפוסים ומבנים. כיום רבים רואים אותה כיותר נמוכה, כי היא קרובה לחומרה ומאפשרת גישה ישירה לזיכרון. גם שפת סף (assembly) יכולה להיחשב "גבוהה" יחסית לשפת מכונה, כי היא מוסיפה סימון ואלמנטים מסוימים.
שפות עיליות יכולות לפעול בדרכים שונות. שפות מפורשות (interpreted languages) נקראות ומבוצעות ישירות על ידי מפרש (interpreter), שמקרא את הקוד שורה אחר שורה ומריץ אותו. שפות מהודרות (compiled languages) מומרות לפני ההרצה. מהדרים יכולים ליצור קוד מכונה ישיר, או לייצר ייצוג ביניים כמו bytecode. ייצוג ביניים מאפשר אופטימיזציות ושימוש במכונה וירטואלית, והטשטוש בין פרשנות והידור הופך חלק מההבחנות לפחות ברורות. שפות ופרויקטים מסוימים יכולים גם להתרגם לשפות יעד אחרות, כך ש-JavaScript, C ו-Python משמשות לפעמים כשפות יעד עבור מתרגמים.
שפת תכנות עילית היא שפה שאנשים כותבים כדי להגיד למחשב מה לעשות. "עילית" אומרת שהשפה רחוקה יותר ממחשבות המחשב הפנימיות.
שפות כאלה משתמשות במילים פשוטות כמו משתנה (מקום לשמור ערך), מערך (רשימה של דברים), פונקציה (בלוק שמבצע פעולה) ולולאה (חזרה על פעולה). הן עוזרות לכתוב תוכנה יותר בקלות, כי הן מסתירות פרטים קשים כמו ניהול זיכרון (איך המחשב שומר נתונים).
הקלות בכתיבה עלולה להפוך את התוכנה לאיטית יותר ולדרוש יותר זיכרון. לכן לפעמים לכתוב חלקים חשובים בשפה קרובה למכונה משפר מהירות.
יש שני דרכים להריץ קוד: מפרש (interpreter) קורא ומריץ שורה שורה, ומהדר (compiler) מתרגם את כל התוכנית מראש. יש גם תרגום ל-bytecode, שהוא קוד ביניים שמכונה וירטואלית יכולה להריץ.
תגובות גולשים