במחשבים, **קצה קדמי** ו**קצה אחורי** (באנגלית: **front end** ו-**back end** בהתאמה), הם מושגים כלליים המתייחסים לחלקים שונים במערכת תוכנה. הקצה הקדמי אחראי על איסוף ועיבוד הקלט מהמשתמש, על מנת להביא אותו לצורה שהקצה האחורי יכול להשתמש בה. הקצה הקדמי הוא הממשק שבין המשתמש לקצה האחורי. שני הקצוות יחד נקראים באנגלית **full stack**.

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

ביישומי רשת
-----------

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

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

במערכות הפעלה
-------------

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

שימוש בממשק שורת פקודה (CLI) דורש לימוד של מושגים מיוחדים ושינון פקודות. לכן ממשק משתמש גרפי (GUI) משמש כקצה קדמי המשמש כחלופה ל-CLI, המאפשרת לעבוד עם סביבת "שולחן עבודה". בסביבת מערכת ההפעלה Unix, ספריית ncurses היא קצה קדמי חצי-גרפי פשוט יותר עבור ה-CLI. ברמת ממשק שורת הפקודה עצמו של יוניקס, רוב הפקודות הן "פילטרים" – תוכניות עצמאיות שיכולות לשמש גם כקצה קדמי או כקצה אחורי עבור פקודות אחרות. במקרה זה התוכניות עובדות כך שהן מעבירות נתונים (piping) מהאחת לשנייה, לרוב לצורך עיבוד טקסט.

לדוגמה: `CLI-prompt> cmd1 | cmd2 | cmd3 | cmd4`

זוהי דוגמה לשרשור פקודות באמצעות קו ניצב (pipe). כאן הפלט של התוכנית `cmd1` משמש כקלט עבור `cmd2`; הפלט של `cmd2` משמש כקלט עבור `cmd3`, וכך הלאה.

שימושים נוספים
--------------

* בתקשורת נתונים, המושג front end יכול להתייחס לכל רכיב חומרה המשמש לאופטימיזציה או הגנה על התעבורה ברשת. רכיבים כאלה נקראים application front-end hardware מכיוון שהם מוצבים בקצה הקדמי, הפונה כלפי חוץ של הרשת המקומית. זרם הנתונים עובר דרך חומרת הקצה הקדמי לפני שהוא נכנס לתוך הרשת המקומית.
* במערכות ניהול תוכן (CMS), המושג front end יכול להתייחס לתצוגה המוצגת למשתמש הקצה של אתר האינטרנט, ואילו back end מתייחס לתצוגת הניהול של האתר.
* במהדרים, ה-front end מתרגם את קוד המקור לייצוג ביניים (intermediate language), וה-back end פועל על ייצוג הביניים כדי להפיק את הפלט בשפת מכונה. הקצה האחורי בדרך כלל מוסיף אופטימיזציות כדי להפיק קוד שרץ מהר יותר. ההבחנה בין front end ו-back end יכולה ליצור הפרדה בין החלק שפועל כ-parser (מנתח תחביר) המטפל בקוד המקור, וה-back end שמייצר את הקוד הסופי ומוסיף אופטימיזציות. חלק מהמימושים (כדוגמת GCC) מאפשרים בחירה בין כמה front ends המאפשרים ביצוע ניתוח תחבירי של קוד מקור של שפות תכנות שונות, וכמה back ends המפיקים שפת מכונה המותאמת למעבדים מסוגים שונים.
* בהפקת דיבור על ידי מחשב (speech synthesis), המושג front end מתייחס לחלק שממיר את קלט הטקסט לייצוג סמלים פונטי, ואילו תפקידו של ה-back end להמיר את הייצוג הפונטי לצליל.
* תהליך הייצור של מעגלים משולבים (semiconductor device fabrication) כולל תהליכים של front-end-of-line ו-back-end-of-line. ה-front end מטפל בהמרת שפת תיאור החומרה (hardware description language) לשערים לוגיים. ה-back end מטפל בהיבט הפיזי של המרת מעגלים של טרנזיסטורים לשבבים.

ראו גם
------

* צד שרת
* צד לקוח
* אבסטרקציה (מדעי המחשב)