آیا برنامه‌نویسی به زبان مادری می‌تواند آموزش علوم کامپیوتر را تغییر دهد؟

انگلیسی پیش‌نیاز پنهان بیشتر دوره‌های برنامه‌نویسی است. این مقاله بررسی می‌کند برداشتن آن چه می‌تواند بکند، پژوهش‌ها چه چیزی را تأیید می‌کنند و یک زبان دوزبانه چطور به دانشجو اجازه می‌دهد با فارسی شروع کند و با انگلیسی ادامه دهد.

در این مقاله
  1. پیش‌نیاز پنهان دوره‌های برنامه‌نویسی
  2. شواهد چه می‌گویند و چه نمی‌گویند
  3. زبان برنامه‌نویسی به زبان مادری چه باید داشته باشد
  4. رویکرد زبان سلام به آموزش برنامه‌نویسی فارسی
  5. آموزش فارسی زبان سلام
  6. رفتن به انگلیسی در گام بعد
  7. اعتراض‌های رایج
  8. توصیه‌هایی برای معلمان و استادان
  9. پرسش‌های پرتکرار درباره‌ی برنامه‌نویسی به زبان مادری

برنامه‌نویسی به زبان مادری یعنی یاد گرفتن و نوشتن کدی که واژه‌های کلیدی، نام‌های کتابخانه و پیام‌های خطایش به همان زبانی است که با آن فکر می‌کنید، نه به انگلیسی. این کار می‌تواند یک مانع مشخص را در آموزش علوم کامپیوتر کم کند، یعنی نیاز به خواندن انگلیسی فنی هم‌زمان با یاد گرفتن طرز فکر برنامه‌نویسی؛ اما میان‌بری برای دور زدن بخش دشوار، یعنی یاد گرفتن استدلال دقیق درباره‌ی برنامه‌ها، نیست. اینکه این مانع چقدر مهم باشد به یادگیرنده بستگی دارد: برای یک کودک ده‌ساله در تهران یا دانشجوی سال اولی که انگلیسی را کند می‌خواند، ممکن است فرق میان دنبال کردن درس و رونویسی آن باشد.

این مقاله پرسش را با دقت بررسی می‌کند: انگلیسی برای یک نوآموز چه هزینه‌ای دارد، پژوهش‌ها چه می‌گویند و چه نمی‌گویند، یک زبان برنامه‌نویسی به زبان مادری برای اینکه در کلاس به کار بیاید چه باید داشته باشد، و طراحی زبان برنامه‌نویسی سلام چطور به یادگیرنده اجازه می‌دهد با فارسی شروع کند و بعدها، بی آنکه زبانش را عوض کند، به انگلیسی برود.

پیش‌نیاز پنهان دوره‌های برنامه‌نویسی

تقریباً همه‌ی زبان‌های برنامه‌نویسی پرطرفدار واژه‌ی کلیدی انگلیسی، نام‌های کتابخانه‌ی انگلیسی، مستندات انگلیسی و پیام خطای انگلیسی دارند. برای انگلیسی‌زبان این‌ها یادآورند: while، return و print تقریباً همان چیزی را می‌گویند که انجام می‌دهند. برای یادگیرنده‌ای که انگلیسی را خوب نمی‌خواند، همین واژه‌ها نمادهای مبهمی‌اند که باید پیش از فهمیدن، حفظ شوند.

این هزینه هم‌زمان در چند جا پیدا می‌شود:

  • واژه‌های کلیدی و نام‌ها باید به‌صورت نماد حفظ شوند، به‌جای آنکه مثل واژه خوانده شوند.
  • پیام‌های خطا، که اصلی‌ترین بازخورد نوآموز است، دقیقاً در لحظه‌ای که یادگیرنده سردرگم است به انگلیسی می‌رسند.
  • مستندات و نتیجه‌های جست‌وجو بیشتر انگلیسی‌اند.
  • نام‌گذاری، یکی از مهارت‌های اصلی برنامه‌نویسی، به زبان دوم انجام می‌شود و نوآموزها اغلب به نام‌های تک‌حرفی یا فینگلیش پناه می‌برند.

هیچ‌کدام از این‌ها غیرقابل‌عبور نیست؛ میلیون‌ها برنامه‌نویس در سراسر جهان برنامه‌نویسی را با انگلیسی به‌عنوان زبان دوم یا سوم یاد گرفته‌اند. پرسش این است که این موانع چقدر از توجه محدود یک نوآموز را می‌گیرند و چه کسانی به خاطرشان کنار می‌کشند.

شواهد چه می‌گویند و چه نمی‌گویند

اینجا باید محتاط بود، چون این موضوع نظرهای تند را جذب می‌کند.

در سطح کلی، از مدت‌ها پیش پشتوانه‌ای برای آموزش به زبانی که یادگیرنده می‌فهمد وجود دارد. گزارش ۱۹۵۳ یونسکو با عنوان The Use of Vernacular Languages in Education (کاربرد زبان‌های بومی در آموزش) از آموزش کودکان به زبان مادری دفاع کرد و این سازمان از آن زمان آموزش چندزبانه‌ی مبتنی بر زبان مادری را ترویج کرده است. این پژوهش‌ها درباره‌ی آموزش به‌طور کلی‌اند، نه برنامه‌نویسی.

درباره‌ی خود برنامه‌نویسی، شواهد کمتر است اما به همان سو اشاره می‌کند. مقاله‌ی فیلیپ گو (Philip Guo) در کنفرانس CHI سال ۲۰۱۸ با عنوان Non-Native English Speakers Learning Computer Programming: Barriers, Desires, and Design Opportunities از یادگیرندگانی در سراسر جهان نظرسنجی کرد و بار اضافه‌ای را که انگلیسی بر دوش آن‌ها می‌گذارد ثبت کرد، از خواندن مطالب آموزشی و واژگان فنی تا فهمیدن نمونه‌کدها. زبان آموزشی Hedy، ساخته‌ی فلین هرمانز (Felienne Hermans)، طوری ساخته شده که واژه‌های کلیدی‌اش را بشود به زبان‌های طبیعی بسیاری به کار برد، با این استدلال که واژه‌های کلیدی انگلیسی مانعی غیرضروری برای کودکان‌اند.

چیزی که ما از آن خبر نداریم یک پژوهش کنترل‌شده‌ی بزرگ است که نشان دهد واژه‌های کلیدی به زبان مادری به‌تنهایی برنامه‌نویس بهتری می‌سازند. واژه‌های کلیدی بخش کوچکی از یک زبان برنامه‌نویسی‌اند و جدا کردن اثر محیط زبان مادری از اثر آموزش بهتر، منابع بهتر و پیام‌های خطای بهتر دشوار است. جمع‌بندی منصفانه این است: مانع زبانی برای بسیاری از یادگیرندگان واقعی است، برداشتنش برای بعضی‌ها اهمیت زیادی دارد و برای بعضی هیچ، و ترجمه‌ی فقط واژه‌های کلیدی بیشتر این مانع را سر جایش باقی می‌گذارد.

زبان برنامه‌نویسی به زبان مادری چه باید داشته باشد

اگر هدف آموزش است، زبانی با واژه‌های کلیدی ترجمه‌شده کافی نیست. معلم این‌ها را لازم دارد:

  1. یک زبان کامل، نه یک زیرمجموعه‌ی اسباب‌بازی، تا دانشجو به دیوار نخورد و ناچار نشود با زبان دیگری از نو شروع کند.
  2. پیام‌های خطا به زبان دانشجو، چون بیشتر یادگیری همان‌جا اتفاق می‌افتد.
  3. دوره‌ی آموزشی و منابع مرجع به همان زبان، با نمونه‌هایی که واقعاً اجرا می‌شوند.
  4. ابزارهایی که کار می‌کنند: ویرایشگری که خط را درست نشان دهد، ترجیحاً در مرورگر تا نیازی به نصب نباشد.
  5. راهی به اکوسیستم جهانی، تا دانشجویی که با زبان خودش شروع کرده همان‌جا گیر نیفتد.

نکته‌ی آخر همان است که بیشتر پروژه‌ها از آن غافل‌اند. زبانی که فقط به فارسی وجود دارد دانشجویانش را زندانی می‌کند؛ زبانی که به فارسی و انگلیسی یکی است، برایشان پل می‌سازد.

رویکرد زبان سلام به آموزش برنامه‌نویسی فارسی

سلام یک زبان همه‌منظوره‌ی کامپایلی با دو املای کامل، انگلیسی و فارسی، است که در مقاله‌ی یک زبان، دو خط به تفصیل شرح داده شده. برای آموزش، این واقعیت‌ها مهم‌اند:

  • هر چیزی که زبان تعریف می‌کند نام فارسی دارد: واژه‌های کلیدی، گونه‌ها، تابع‌ها و متدهای داخلی، همه‌ی بسته‌های کتابخانه‌ی استاندارد و تابع‌هایشان، و همه‌ی پیام‌های کامپایلر.
  • کامپایلر برای فایل فارسی خطاها را به فارسی گزارش می‌کند، با رقم فارسی در کد خطا و اصلاح‌هایی که املای فارسی را نام می‌برند. فایل انگلیسی هم با --error-lang=fa پیام فارسی می‌گیرد.
  • ویرایشگر آنلاین در مرورگر اجرا می‌شود، برای فارسی به چیدمان کامل راست به چپ می‌رود و به نصب نیازی ندارد.
  • زیرمجموعه‌ی آموزشی نیست. همین املای فارسی برای سرور وب، پایگاه داده و بقیه‌ی کتابخانه‌ی استاندارد هم به کار می‌رود.

این از جنس برنامه‌ای است که دانشجو در هفته‌ی اول به فارسی می‌نویسد:

سلام
تابع میانگین(نمره‌ها: صحیح[]): اعشار۶۴:
    ناپایا جمع := ۰
    هر ن در نمره‌ها:
        جمع += ن
    پایان
    برگشت جمع برگردان اعشار۶۴ / طول(نمره‌ها)
پایان

تابع ریشه:
    نمره‌ها := [۱۸، ۱۵، ۲۰، ۱۲]
    م := میانگین(نمره‌ها)
    سرچاپ «میانگین:»، م
    اگر م >= ۱۷:
        سرچاپ «عالی»
    وگرنه م >= ۱۲:
        سرچاپ «قبول»
    وگرنه:
        سرچاپ «مردود»
    پایان
پایان
خروجیمیانگین: 16.25 قبول

دانشجوی فارسی‌زبان همه‌ی سطرهای آن را می‌خواند: میانگین، نمره‌ها (با همان نیم‌فاصله‌ای که فارسی‌نویس‌ها به کار می‌برند)، هر ن در نمره‌ها، اگر و وگرنه. نمره از ۲۰ همان نظام نمره‌دهی مدرسه‌های ایران است، پس خود نمونه هم آشناست. هیچ چیز در آن نیست که لازم باشد مثل یک نماد بیگانه حفظ شود.

آموزش فارسی زبان سلام

دوره‌ی آموزشی سلام ۴۷ درس به فارسی در همین سایت دارد و همان ۴۷ درس به انگلیسی در سایت انگلیسی هم هست. دوره کل زبان را پوشش می‌دهد: نخستین برنامه، متغیرها و گونه‌ها، شرط‌ها و حلقه‌ها، تابع‌ها و لامبداها، آرایه‌ها و ظرف‌ها، ساختارها، جداشمارها، گونه‌های عام، بسته‌ها، حافظه، کد زمان کامپایل، فراخوانی C و نخ‌ها، بعد حدود بیست درس درباره‌ی ساختن صفحه‌های وب با زبان صفحه‌ی سلام، و در آخر سرو کردن و انتشار یک سایت با salam serve.

دو ویژگی آن را برای کلاس درس کاربردی می‌کند. نخست، هر برنامه‌ی نمونه در دوره هنگام ساختن سایت کامپایل و اجرا می‌شود و خروجی‌ای که زیر هر نمونه می‌بینید خروجی واقعی است؛ درس نمی‌تواند بی‌صدا از زبان عقب بماند. دوم، درس‌های فارسی با سلام فارسی و نام‌های فارسی نوشته شده‌اند، پس دانشجو از درس اول کد فارسی می‌خواند.

نخستین درس‌ها برای شروع: نخستین برنامه، متغیرها، حلقه‌ها و تابع‌ها. درس واژه‌های کلیدی همه‌ی واژه‌های کلیدی را با هر دو املا فهرست می‌کند.

رفتن به انگلیسی در گام بعد

اصل ماجرا همین پل است. دانشجویی که سلام را به فارسی یاد گرفته، مفهوم‌ها، نحو و کتابخانه‌ی زبان انگلیسی را هم از پیش می‌داند؛ فقط املا فرق می‌کند. همان برنامه به انگلیسی و با نام‌های انگلیسی یک نگاشت مستقیم است:

سلام
func average(scores: int[]): f64:
    mut sum := 0
    each s in scores:
        sum += s
    end
    ret sum as f64 / len(scores)
end

func main:
    scores := [18, 15, 20, 12]
    a := average(scores)
    println "Average:", a
    if a >= 17:
        println "Excellent"
    else a >= 12:
        println "Pass"
    else:
        println "Fail"
    end
end
خروجیAverage: 16.25 Pass

سه راه برای این گذر وجود دارد:

  • تدریجی. همچنان کد فارسی بنویسید، اما نام‌های انگلیسی را در پیام‌های خطا و مستندات بخوانید؛ کدهای خطا (E001 و خطا۰۰۱) مشترک‌اند، پس جست‌وجوی یکی دیگری را هم پیدا می‌کند.
  • با مترجم. salam translate en یک فایل فارسی را به واژه‌های کلیدی و نام‌های کتابخانه‌ی انگلیسی تبدیل می‌کند و نام‌هایی را که خود دانشجو ساخته دست نمی‌زند. دانشجو می‌تواند کد خودش را کنار شکل انگلیسی‌اش مقایسه کند. مقاله‌ی درون salam translate را ببینید.
  • یکباره. یک پروژه‌ی تازه را به انگلیسی شروع کنید. هر چه یاد گرفته‌اید همچنان به کار می‌آید و واژگان لازم اندک است:
فارسیانگلیسیکاربرد
تابعfuncتعریف تابع
برگشتretبرگرداندن مقدار
ناپایاmutتغییرپذیر کردن متغیر
پایانendبستن بلوک
سرچاپprintlnچاپ یک سطر
اگر / وگرنهif / elseانشعاب
هر ... درeach ... inپیمایش یک ظرف
تاuntilحلقه تا وقتی شرط برقرار است
تکرارrepeatحلقه به تعداد مشخص
برگردانasتبدیل گونه

بعد از آن، رفتن از سلام به پایتون، Go یا C تغییر زبان است، نه تغییر املا، و مفهوم‌ها همان‌طور منتقل می‌شوند که میان هر دو زبان دیگری.

اعتراض‌های رایج

«برنامه‌نویس به هر حال باید انگلیسی بداند.» بیشترشان سرانجام می‌دانند. استدلال یادگیری به زبان مادری درباره‌ی ترتیب است، نه فرار از انگلیسی: اول برنامه‌نویسی را یاد بگیرید، بعد واژگان انگلیسی موضوعی را که از پیش می‌فهمید. یک زبان دوزبانه این ترتیب را بدون بن‌بست ممکن می‌کند.

«جامعه را چندپاره می‌کند.» فقط اگر کد نتواند از مرز بگذرد. چون سلام فارسی و انگلیسی یک زبان‌اند، بسته‌ی یک دانشجوی فارسی‌زبان از برنامه‌ی انگلیسی قابل استفاده است و برعکس، و مترجم میان آن‌ها تبدیل می‌کند.

«زبان‌های بومی اسباب‌بازی‌اند.» بسیاری بوده‌اند. سلام زبانی با گونه‌های ایستاست که به کد بومی کامپایل می‌شود، با کتابخانه‌ی استاندارد بزرگی عرضه می‌شود و کامپایلر خودش را می‌سازد. محدودیت‌هایش محدودیت‌های یک زبان جوان است (جامعه‌ی کوچک، استقرار عملیاتی کم، زبانی پیش از نسخه‌ی ۱٫۰ که هنوز تغییر می‌کند)، نه محدودیت املای فارسی‌اش.

«فقط به فارسی‌زبان‌ها کمک می‌کند.» امروز، بله: سلام دو بسته‌ی زبانی دارد، انگلیسی و فارسی. طراحی آن، یعنی یک هسته‌ی مشترک با املای جداگانه برای هر زبان، به فارسی محدود نیست، اما هنوز بسته‌ی زبانی دیگری وجود ندارد.

توصیه‌هایی برای معلمان و استادان

  • با زبانی شروع کنید که دانشجوها با آن فکر می‌کنند و روشن بگویید که املای انگلیسی هم وجود دارد و همان زبان است.
  • در درس‌های اول از ویرایشگر آنلاین استفاده کنید تا جلسه‌ی اول صرف نصب ابزار نشود.
  • پیام‌های خطا را زود نشان دهید و خواندن کد خطا را یاد بدهید؛ این کد پل دانشجو به منابع انگلیسی در آینده است.
  • وقتی دانشجوها راحت شدند، salam translate را معرفی کنید و بگذارید کد فارسی‌شان را با شکل انگلیسی‌اش مقایسه کنند.
  • وقتی دانشجوها شروع به استفاده از منابع بیرونی می‌کنند به نام‌های انگلیسی بروید، نه پیش از آنکه آماده باشند.

پرسش‌های پرتکرار درباره‌ی برنامه‌نویسی به زبان مادری

آیا می‌شود برنامه‌نویسی را به فارسی یاد گرفت؟

بله. سلام را می‌شود سراسر به فارسی نوشت و دوره‌ی رایگان ۴۷ درسی آن در salamlang.ir/learn آن را به فارسی آموزش می‌دهد، با نمونه‌هایی که همه کامپایل و اجرا شده‌اند. پیام‌های خطای کامپایلر هم فارسی‌اند.

یادگیری برنامه‌نویسی به زبان مادری بهتر است یا به انگلیسی؟

بستگی دارد انگلیسی را چقدر خوب می‌خوانید. اگر انگلیسی فنی سرعتتان را کم می‌کند، شروع با زبان خودتان اجازه می‌دهد توجهتان را صرف خود برنامه‌نویسی کنید. اگر انگلیسی را راحت می‌خوانید، شروع با انگلیسی هم مشکلی ندارد. با سلام هر وقت بخواهید می‌توانید جابه‌جا شوید، بی آنکه زبان برنامه‌نویسی‌تان را عوض کنید.

آیا یادگیری به فارسی پیدا کردن کار برنامه‌نویسی را سخت‌تر می‌کند؟

نه، اگر به انگلیسی هم بروید، و سلام برای همین طراحی شده است: مفهوم‌ها، کتابخانه و کدهای خطا در هر دو املا یکی‌اند. مهارت‌هایی که کارفرماها دنبالشان هستند، یعنی استدلال درباره‌ی برنامه، اشکال‌زدایی و طراحی، به املای واژه‌های کلیدی بستگی ندارند.

آیا شواهدی هست که برنامه‌نویسی به زبان مادری به دانشجوها کمک می‌کند؟

شواهدی هست که انگلیسی برای بسیاری از یادگیرندگان مانع واقعی است، برای نمونه پژوهش ۲۰۱۸ فیلیپ گو درباره‌ی یادگیرندگان غیرانگلیسی‌زبان، و شواهد گسترده‌ای از پژوهش‌های آموزشی به سود آموزش به زبان مادری. پژوهش‌های کنترل‌شده‌ای که اثر واژه‌های کلیدی به زبان مادری را به‌تنهایی جدا کنند هنوز اندک‌اند.

زبان سلام

از کد فارسی به انگلیسی و برعکس: نگاهی به درون ابزار salam translate

salam translate یک برنامه‌ی سلام را از انگلیسی به فارسی یا از فارسی به انگلیسی بازنویسی می‌کند، بی آنکه به نام‌ها، توضیح‌ها یا رشته‌های خود شما دست بزند. اینجا می‌بینید چه چیزی را عوض می‌کند، چطور تصمیم می‌گیرد و بعد از آن چه چیزی را باید بررسی کرد.

خواندن مقاله
زبان سلام

چرا دنیا هنوز به زبان‌های برنامه‌نویسی تازه نیاز دارد؟ فلسفه‌ی طراحی و هدف‌های زبان برنامه‌نویسی سلام

هر زبان موفق بیست سال اخیر برای برطرف کردن یک درد مشخص ساخته شد. این مقاله انگیزه‌ی ساخت Go، Rust، Swift، Kotlin و Zig را مرور می‌کند و بعد سراغ خلأیی می‌رود که سلام هدف گرفته و تصمیم‌های طراحی‌ای که از آن نتیجه می‌شود.

خواندن مقاله