پنج دلیل که پایتون را دوست دارم
در اینجا، برخی ویژگیهای موردعلاقهام از پایتون را آوردهام.
من از سال 1998، زمانی که پایتون زبان مشهوری نبود، با آن کار میکنم. در آن زمان، در دنیای کدهای منبع باز (open source) زبان Pearl بسیار مشهور بود؛ اما من از زمانی که پایتون را کشف کردم، به آن ایمان داشتم. پدر و مادرم همیشه دوست دارند یادم بندازند که زمانی دائما میگفتم: "پایتون در آینده خیلی مهم خواهد شد" و "من کاری به عنوان برنامهنویس پایتون پیدا خواهم کرد". محقق شدن این پیشبینی ها مدتی طول کشید، اما بالاخره به واقعیت پیوست.
چیزهای زیادی درباره پایتون دوستداشتنیست. در اینجا، 5 دلیل برای علاقه زیادم به پایتون را از اهمیت کم به زیاد، لیست میکنم:
5. پایتون مانند سودوکدها، خواناست
سودوکد، به معنای نوشتن منطق یک برنامه به طور خالص و بدون پیروی از سینتکس و گرامر زبانی خاص است. از زمانی که با پایتون کار میکنم، نیاز چندانی به نوشتن سودوکدها ندارم.
حتی اگر به پایتون مسلط نباشید، با خواندن کدها، متوجه خواهید شد که قابل درک خواهند بود و این تا حد زیادی به دلیل نوع طراحی آن است. این زبان تا حد زیادی به علت حساسیت به فاصلهها (whitespace) مشهور است. در هر زبان برنامهنویسی، فاصلهها ضروری هستند – زیرا باعث میشوند هر کلمه از جملات را از یکدیگر تشخیص دهیم. اکثر زبانها "پیشنهاد"هایی درباره استفاده مناسب از فاصلهها ارائه میدهند، اما پایتون با الزامی کردن یک نوع استانداردسازی، قدمی جسورانهتر برداشتهاست. تجربه شخصی من نشان داده که این کار سبب خواناترشدن کد و فهم دقیق عملکرد آن شده است.
برای مثال، این نمونه کد الگوریتم مرتبسازی حبابی (Bubble sort) به زبان پایتون است:
def bubble_sort(things):
needs_pass = True
while needs_pass:
needs_pass = False
for idx in range(1, len(things)):
if things[idx - 1] > things[idx]:
things[idx - 1], things[idx] = things[idx], things[idx - 1]
needs_pass = True
حال آن را با نمونه کد همین الگوریتم، در زبان جاوا مقایسه میکنیم:
public static int[] bubblesort(int[] numbers) {
boolean swapped = true;
for(int i = numbers.length - 1; i > 0 && swapped; i--) {
swapped = false;
for (int j = 0; j < i; j++) {
if (numbers[j] > numbers[j+1]) {
int temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
swapped = true;
}
}
}
return numbers;
}
من فکر میکنم رعایت فاصلهگذاریها که سبب شده بلاکهای تودرتو قابل تشخیص شوند، بسیار مفید است. در جاوا نیز فواصل میتوانند رعایت شوند، اما انجام این کار اجباری نیست و تنها آکولادها ( {} ) نشاندهنده آغاز و پایان یک بلاک از کدها هستند. در پایتون به علت الزامی بودن رعایت فاصلهها، نیازی به آکولادها برای نشانهگذاری شروع و پایان کد نیست.
به علاوه، در پایتون نیازی به استفاده از نقطه ویرگول (;) در انتهای جملات نیست؛ این یک مزیت در سینتکسهاست که زبانها را برای ما خواناتر میکند. پایتون به چشم من خیلی خواناتر از سایر زبان هاست و گاهی به علت شباهت بسیار زیاد کدهای قابل اجرایش به سودوکدها، مرا شگفتزده میکند!
4. پایتون قویترین مقادیر اولیه (primitive) را دارد
در طراحی زبانهای برنامهنویسی، primitive ها سادهترین المانهای قابل دسترسی هستند. خوانایی پایتون به معنای قدرتمند نبودن این زبان نیست، و قدرت این زبان هم به علت استفاده آن از primitive ها است. مثال موردعلاقه من برای نمایش راحتی استفاده و سطح بالا بودن پایتون، مفهوم generatorها است.
فرض کنید یک درخت باینری ساده با مقادیر value، left و right دارید و میخواهید به ترتیب آن را پیمایش کنید. معمولا در این حالت به دنبال المانهای کوچکتر میگردیم تا به محض پیدا کردن مقدار right، از درخت خارج شویم. تا اینجا بسیار ساده به نظر میآید، اما الگوریتمهای متعددی برای پیمایش گرهها وجود دارند.
در سایر زبانهای برنامهنویسی، مجبور میشدیم یک ملاقاتکننده (visitor) ایجاد کنیم و با نوشتن یک تابع که در آن به هر گره میگفتیم: "آیا این المان سمت راست تو است؟" و صدا کردن این تابع با اشارهگرهای تابع، بر درخت کنترل به دست میآوردیم.
این کار در پایتون هم شدنی است؛ اما نیازی نیست انجامش دهیم!
def in_order(tree):
if tree is None:
return
yield from in_order(tree.left)
yield tree.value
yield from in_order(tree.right)
تابع generator شمارندهای برمیگرداند که اگر در یک حلقه for به کار رود، تنها در زمانی که احتیاج باشد، کار میکند و نه بیشتر. این بسیار قدرتمند است.
3. کتابخانه استاندارد پایتون
پایتون دارای یک کتابخانه استاندارد عالی با امکانات خارقالعادست که تا زمانی که لیست تمامی تابعها، ثابتها، انواع دادهها و... آن را بررسی نکرده بودم، برایم ناشناخته بودند. یکی از ماژولهای موردعلاقه من itertools است که در رده ماژولهای برنامهنویسی ساختاریافته قرار گرفته است (بله، پایتون از برنامهنویسی ساختاریافته پشتیبانی میکند!).
با این ماژول میتوانید سربهسر مصاحبهکننده خود بگذارید! برای مثال، راهحل زیر را برای حل معمای مشهور FizzBuzz که در مصاحبهها استفاده میشود، ببینید:
fizz = itertools.cycle(itertools.chain(['Fizz'], itertools.repeat('', 2)))
buzz = itertools.cycle(itertools.chain(['Buzz'], itertools.repeat('', 4)))
fizz_buzz = map(operator.add, fizz, buzz)
numbers = itertools.islice(itertools.count(), 100)
combo = zip(fizz_buzz, numbers)
for fzbz, n in combo:
print(fzbz or n)
با یک جستجوی ساده متوجه میشویم که این روش، مستقیمترین راهحل این معما نیست، اما مطمئنا روشی بسیار مفرح است!
اما جدای شوخی، ماژول itertools، به همراه heap و functools جواهراتی هستند که به طور خودکار، در پیادهسازی پایتون در اختیار شما قرار میگیرند.
2. پایتون محیطی بسیار گسترده دارد
پایتون به غیر از کتابخانه استاندارد، محیطی گسترده برای پذیرش هر چیزی مرتبط به خود، از پکیجهای موجود تا ویرایشگرهای متن مختص زبان پایتون دارد. با وجود جدود 200000 پروژه در PyPi و رشد روزافزون آنها (در زمان نوشتن این مطلب)، پایتون برای هر حوزهای کارآمد است: علوم داده، فریمورکهای ناهماهنگ (async)، فریمورکهای وِب، و یا ابزارهایی برای آسانسازی خودکارسازی از راه دور.
1. جامعه کاربران پایتون، خاص است
جامعه پایتون فوقالعاده است! این جامعه اولین گروهی بود که یک کد در حال توسعه را در میان خود پذیرفتند (اول برای بنیاد نرمافزار پایتون و سپس برای PyCon). در این جامعه وفاداری و تنوع به وفور مشاهده و کنفرانسها و مطالب متعدد، خوانا و مفیدی توسط اعضای این جامعه منتشر میشود.
با وجود جهانی بودن این جامعه، فعالیتهای محلی زیادی نیز در آن شکل میگیرند. ملاقاتهای اعضای محلی این جامعه با هم، مکان مناسبی برای ملاقات افراد باذکاوت، باتجربه و مشتاق برای کمک به دیگران است. در برخی از این ملاقاتها، زمان خاصی به رفع اشکال و آموزش به نوآموزان، توسط افراد باتجربه اختصاص داده میشود. گروه برنامهنویسان در منطقه من از زمانی که شروع به کار کردم، از من پشتیبانی کردند و من هم اکنون تمام سعیم را میکنم تا به نوآموزان کمک کنم.
فرق نمیکند که به ملاقاتهای محلی بروید یا به طور آنلاین در IRC، Stack یا Twitter با برنامهنویسان ارتباط برقرار کنید،مطمئنم افراد دوستداشتنی را ملاقات میکنید که مایلند به شما کمک کنند.
خلاصه مطلب
چیزهای دوستداشتنی زیادی درباره پایتون وجود دارد، اما مطمئنا فهمیدهاید که بخش موردعلاقه من، افراد جامعه آن هستند.
من با پایتونکارهای مهربان و باهوش زیادی در سراسر جهان آشنا شدهام. در این جامعه، بهطور فوقالعادهای با کمک کردن به نوآموزان، بر روی آنان سرمایهگذاری میشود. علاوه بر این، زبان منظم، ساده و قدرتمند پایتون، به هر برنامهنویس در مسیر شغلی مهندسی نرمافزار، یا حتی در مسیر تفریح و لذتبردن از برنامهنویسی، امکاناتی بیش از حد نیاز او میدهد. اگر میخواهید اولین زبان برنامهنویسی، یا زبانی جدید یاد بگیرید، پایتون را بررسی کنید و اگر به کمک نیاز داشتید، حتما مرا خبردار کنید!