نود و هفت چیزی که هر برنامه‌نویسی باید بداند: DSL چیست و چرا آشنایی با آن در حوزهٔ برنامه‌نویسی اهمیت دارد؟

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: DSL چیست و چرا آشنایی با آن در حوزهٔ برنامه‌نویسی اهمیت دارد؟

منظور ازDSL که مخفف واژگان Domain-Specific Language به معنی «زبان اختصاصی هر حوزه ی کاری» می باشد، یکسری زبان‌های برنامه نویسی است که به صورت تخصصی برای یکسری کارهای خاص در یکسری حوزه های خاص مورد استفاده قرار می‌گیرند. برای درک بهتر دی اس ال ها، می‌توان آن‌ها را همچون زبان‌های برنامه نویسی کوچکی تلقی کرد که برای انجام یکسری کارهای خاص در یک سیستم مورد استفاده قرار می‌گیرند و از جمله حوزه های خاصی که از دی اس ال ها در آن‌ها استفاده می شود، می‌توان به صنعت بیمه، صنعت هواپیمایی، پتروشیمی و … اشاره کرد.

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

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

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

نکته توجه داشته باشیم که ما با استفاده از دی اس ال ها نخواهیم توانست یک برنامه ی کامل و جامع بنویسیم بلکه صرفاً به منظور انجام کارهای کوچکی که به سرعت می بایست انجام شوند می‌توان از این زبان‌های برنامه نویسی کوچک استفاده کرد.

از جمله دی اس ال های رایج می‌توان به CSS, Ant و SQL اشاره کرد. به یاد داشته باشید که از برخی زبان‌های General Purpose یا «چند منظوره» همچون سی شارپ، اسکالا، روبی و … می‌توان به منظور ساخت یک DSL استفاده کرد. مثلاً از زبان اسکالا -که خود این زبان برگرفته از زبان برنامه نویسی جاوا است- می‌توان برای ساخت DSL هایی برای صنایع بسیار حساس همچون صنعت نفت استفاده کرد.

انواع DSL ها
به طور کلی، زبان‌های دی اس ال را می‌توان به دو دسته ی Internal (اینترنال یا داخلی) و External (اکسترنال یا خارجی) تقسیم‌بندی کرد.

دی اس ال های اینترنال به گروهی از زبان‌های برنامه نویسی گفته می‌شود که بر پایه زبان‌های برنامه نویسی همه منظوره ای همچون سی شارپ، جاوا، اسکالا، روبی و … بوده و این در حالی است که بسیاری از قابلیت‌های این زبان‌های مادر در DSL هایی که بر پایه ی آن‌ها نوشته شده‌اند مشهود است که به عنوان مثال می‌توان به سینتکس -نحوه ی نوشتار- این زبان‌ها اشاره کرد. از زبان‌های دی اس ال اینترنال در جامعه ی توسعه دهندگان زبان برنامه نویسی Lisp به کرات استفاده می شود.

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

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

مزایای DSL ها
به طور کلی، مزایای طراحی زبان های دی اس ال را می توان به صورت زیر خلاصه کرد:
- برخلاف زبان های همه منظوره، دی اس ال ها بهترین گزینه برای نیازهای خاص هستند.
- کسانی که با برنامه نویسی هم آشنایی نداشته باشند به سادگی قادر خواهند بود تا یک دید کلی نسبت به آن ها پیدا کنند.
- این امکان وجود خواهد داشت تا با طراحی یک GUI یا «رابط گرافیکی کاربری» فرایند استفاده از دی اس ال را ساده تر نمود.
- امکان ساخت Prototype (پروتوتایپ یا نمونه ی اولیه) یک نرم افزار یا اپلیکیشن با استفاده از دی اس ال ها به مراتب راحت تر صورت می گیرد.

یکی از بهترین نمونه های دی اس ال، CSS است که مخفف واژگان Cascading Style Sheets به معنی «الگوی های آبشاری» می باشد. به طور کلی، کدهای سی اس اس به طراحان سایت اجازه می دهند تا به عناصر تشکیل دهنده ی یک صفحه ی وب شکل و ساختار دهند. برای مثال، کدهای سی اس اس زیر رنگ بنده ی یک صفحه ی سایت را قرمز کرده، اندازه ی فونت را 16 پیکسل کرده و رنگ فونت را هم سفید می کنند:

body {
    background: #F00
    font-size: 16px;
    color: #FFF
}
2-1

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

بهزاد مرادی
2-2

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: به کارگیری اصولی از توابع در برنامه نویسی

بهزاد مرادی
2-3

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: نیاز کاربر چیست؟

بهزاد مرادی
2-4

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

بهزاد مرادی
2-5

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

بهزاد مرادی
2-6

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: آشنایی با مفهوم ریفکتورینگ در کدنویسی

بهزاد مرادی
2-7

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: نظافت را رعایت کنید!

بهزاد مرادی
2-8

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: پیش از آن که دیگران را متهم کنید، کد خود را چک کنید!

بهزاد مرادی
2-9

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: انتخاب ابزار مناسب

بهزاد مرادی
2-10

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: برنامه های خود را به زبان مشتریان بنویسید!

بهزاد مرادی
2-11

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: طرح‌های خود را بی‌نقص کنید

بهزاد مرادی
2-12

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

بهزاد مرادی
2-13

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: نقد و بررسی کدها

بهزاد مرادی
2-14

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: کامنت‌گذاری را فراموش نکنید

بهزاد مرادی
2-15

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تنها توضیحاتی را بنویسید که کدهایتان قادر به شرح آنها نباشند!

بهزاد مرادی
2-16

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: از کدهای قبلی خود در شرایط مناسب مجدداً استفاده کنید

بهزاد مرادی
2-17

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: همواره در حال یادگیری موضوعات جدید باشید

بهزاد مرادی
2-18

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: ویژگی‌های یک API با طراحی مناسب

بهزاد مرادی
2-19

نود و هفت چیز که هر برنامه‌نویسی باید بداند: از ابتدای کار توسعهٔ اپلیکیشن خود روی فرآیند نصب و دیپلوی آن به طور پیوسته کار کنید

بهزاد مرادی
2-20

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

بهزاد مرادی
2-21

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تمرین آگاهانه لازمهٔ حرفه‌ای شدن است!

بهزاد مرادی
2-22

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: پشت هر خط از کد شما می‌بایست یک منطق وجود داشته باشد!

بهزاد مرادی
2-23

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: DSL چیست و چرا آشنایی با آن در حوزهٔ برنامه‌نویسی اهمیت دارد؟

بهزاد مرادی
2-24

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: از ساختارشکنی نترسید!

بهزاد مرادی
2-25

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: برای تست نرم‌افزار از دیتای واقعی استفاده کنید

بهزاد مرادی
2-26

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: حتی یک ارور را هم نادیده نگیرید!

بهزاد مرادی
2-27

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: فرهنگ استفاده از یک زبان برنامه‌نویسی را در کنار سینتکس آن بیاموزید

بهزاد مرادی
2-28

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: اکسپش‌ها را به راحت‌ترین شکل ممکن هَندل کنید

بهزاد مرادی
2-29

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: فرایند توسعه یک نرم‌افزار خوب اصلاً شانسی نیست

بهزاد مرادی
2-30

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: آشنایی با قانون DRY

بهزاد مرادی
2-31

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: آشنایی با مراحل توسعهٔ نرم‌افزار

بهزاد مرادی
2-32

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: به‌کارگیری درست از اصول برنامه‌نویسی شیٔ‌گرا

بهزاد مرادی
2-33

نود و هفت چیز که هر برنامه‌نویسی باید بداند: اعداد اعشاری با خطای محاسباتی در کامپیوتر ذخیره می‌شوند

بهزاد مرادی
2-34

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: با مشارکت در پروژه‌های اپن‌سورس، حس جاه‌طلبی خود را ارضاء کنید!

بهزاد مرادی
2-35

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: قانون طلایی طراحی API

بهزاد مرادی
2-36

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: کسی که چند سال است کدنویسی می‌کند، اصلاً علامهٔ دهر نیست!

بهزاد مرادی
2-37

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: کار زیاد ضمانت موفقیت در برنامه‌نویسی نیست!

بهزاد مرادی
2-38

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: چگونه به یک باگ نگاه کنیم؟

بهزاد مرادی
2-39

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: با حذف کدهای اضافی، سورس‌کد خود را بهبود بخشید

بهزاد مرادی
2-40

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: برنامه‌هایی که می‌نویسید را کاربرپسند کنید

بهزاد مرادی
2-41

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

بهزاد مرادی
2-42

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: Build اصولی ارائه کنید

بهزاد مرادی
2-43

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

بهزاد مرادی
2-44

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

بهزاد مرادی
2-45

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: IDE خود را مثل موم در دست بگیرید

بهزاد مرادی
2-46

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: با محدودیت‌های خود دست و پنجه نرم کنید

بهزاد مرادی
2-47

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: همواره بدانید چه چیزی را قرار است کامیت کنید

بهزاد مرادی
2-48

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: آشنایی با نحوهٔ به‌کارگیری دیتابیس‌های رابطه‌ای

بهزاد مرادی
2-49

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: آشنایی با مهارت‌های ارتباطی و فراگیری زبان‌های خارجی

بهزاد مرادی
2-50

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: خود را با مهارت تخمین زدن تجهیز کنید!

بهزاد مرادی
2-51

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: IDE یا Editor مسأله این است!

بهزاد مرادی
2-52

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: ارسال پیام خطا به دولوپر توسط نرم‌افزار

بهزاد مرادی
2-53

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: چیزهای اضافی را لود نکنید!

بهزاد مرادی
2-54

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: چه‌موقع و چگونه از راه‌کارهای موقتی در کدنویسی استفاده کنیم؟

بهزاد مرادی
2-55

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: استفادهٔ نادرست از اینترفیس‌ها را غیرممکن سازید

بهزاد مرادی
2-56

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

بهزاد مرادی
2-57

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: ضرورت آشنایی با مفاهیم کانکارنسی و پاراللیزم

بهزاد مرادی
2-58

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

بهزاد مرادی
2-59

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: دولوپری که نداند Polymorphism چیست، دولوپر نیست!

بهزاد مرادی
2-60

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

بهزاد مرادی
2-61

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

بهزاد مرادی
2-62

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: فقط سورس‌کد است که حرف اول و آخر را می‌زند

بهزاد مرادی
2-63

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: فقط کد نزنید بلکه Build Process را نیز مدنظر قرار دهید

بهزاد مرادی
2-64

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

بهزاد مرادی
2-65

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: آشنایی با تفاوت Static Typing و Dynamic Typing در برنامه‌نویسی

بهزاد مرادی
2-66

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

بهزاد مرادی
2-67

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: به چه برنامه‌نویسی حرفه‌ای می‌گویند؟

بهزاد مرادی
2-68

نود و هفت چیزی که برنامه‌نویسی باید بداند: از ورژن کنترل غافل نشوید!

بهزاد مرادی
2-69

نود و هفت چیزی که برنامه‌نویسی باید بداند: ماوس و کیبورد را کنار بگذارید!

بهزاد مرادی
2-70

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: کدخوانی کنید!

بهزاد مرادی
2-71

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تعاملات اجتماعی کلید موفقیت است!

بهزاد مرادی
2-72

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تا حد ممکن دست به اختراع مجدد چرخ نزنید!

بهزاد مرادی
2-73

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تا حد ممکن از Singleton Pattern استفاده نکنید

بهزاد مرادی
2-74

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: وابستگی‌های زیاد دشمن ریفکتورینگ هستند!

بهزاد مرادی
2-75

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: هرچه تعداد خطوط کد کمتر، بهتر!

بهزاد مرادی
2-76

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: آشنایی با قانون Single Responsibility

بهزاد مرادی
2-77

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: همه‌ چیز با یک آری شروع می‌شود!

بهزاد مرادی
2-78

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تا حد ممکن همه‌ چیز را خودکار کنید

بهزاد مرادی
2-79

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

بهزاد مرادی
2-80

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: در تست نرم‌افزار فقط رفتار مورد انتظار را بسنجید

بهزاد مرادی
2-81

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تست‌ها علاوه بر صحیح بودن، می‌بایست دقیق هم باشند

بهزاد مرادی
2-82

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تست نرم‌افزار و سورس‌کد را آخر شب‌ها و آخر هفته‌ها انجام دهید!

بهزاد مرادی
2-83

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: مقایسه‌ای مابین مهندسین نرم‌افزار و دیگر مهندسان

بهزاد مرادی
2-84

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

بهزاد مرادی
2-85

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: اهمیت برنامه‌نویسی دونفره در کدنویسی را هرگز نادیده نگیرید

بهزاد مرادی
2-86

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: منفی در مفنی می‌شود مثبت!

بهزاد مرادی
2-87

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

بهزاد مرادی
2-88

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: ابزارهای یونیکسی دوست دولوپرها هستند!

بهزاد مرادی
2-89

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: استفادهٔ درست از الگوریتم‌ها و دیتا استراکچرها

بهزاد مرادی
2-90

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: با لاگ‌گیری Verbose دچار دردسر خواهید شد!

بهزاد مرادی
2-91

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: درک تفاوت مفاهیم DRY و WET در کدنویسی بهینه

بهزاد مرادی
2-92

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تعامل مابین دولوپرها و تسترها

بهزاد مرادی
2-93

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: طوری کد بزنید که گویی قرار است تا آخر عمر سورس‌کدتان را ساپورت کنید!

بهزاد مرادی
2-94

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

بهزاد مرادی
2-95

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

بهزاد مرادی
2-96

نود و هفت چیزی که هر برنامه‌نویسی باید بداند: مراقب سورس‌کد باشید!

بهزاد مرادی
2-97

نود و هفت چیزی که هر برنامه‌نویسی باید بداند‍: خیلی به حرف‌های مشتریان اعتماد نکنید!

بهزاد مرادی