روبوکد یک بازی برنامهنویسی است که در آن با زبان جاوا، اقدام به برنامهنویسی کردن روباتهای کوچکی میکنید که با بقیهٔ روباتها باید بجنگند. مبارزه میتواند به صورت تکبهتک با یک روبات دیگر یا به صورت گروهی با مثلاً ۹ روبات دیگر باشد. هرچند که باید روباتهای خود را به زبان جاوا بنویسید، اما دانش عمیقی از این زبان مورد نیاز نیست و در صورتی برنامهنویس یکی از زبانها از همین خانواده باشید، میتوانید بهراحتی یک روبات بسازید.
در این مطلب میگیم که چطور میشه در پایتون یک پروسه دیگر را اجرا کرد و خروجی استاندارد و ورودی استاندارد رو بگیریم و ازش استفاده بکنیم. خروجی و ورودی استاندارد همون چیزایی هستن که تو محیط متنی چاپ میشن یا کاربر توی ورودی برنامه وارد میکنه. در واقع توی این مطلب یاد میگیرید که چطور میتونید در پایتون با برنامه های کنسولی دیگه تعامل کنید.
پایپ (pipe) چیست؟
به طور پیشفرض سیستمعامل ورودیها رو از موس و کیبورد میگیره و خروجیها رو روی صفحهنمایش مینویسه. اما در بعضی مواقع نیاز هست که یک برنامه از خروجیهای یک برنامه (یا دستور) دیگه استفاده کنه یا به ورودی استاندارد یک برنامه داده ارسال کنه. در چنین شرایطی pipe استفاده میشه. pipe یک فضای موقتی در حافظه برای جابهجایی اطلاعات بین دو برنامه هست که البته یک طرفه هم هست؛ یعنی مثلا برای گرفتن خروجی باید از یک pipe و برای نوشتن ورودی هم از یک pipe دیگر باید استفاده کرد.
زبانها معمولاً یا تعیین نوع پویا دارند؛ مانند کامن لیسپ، پایتون، جاوا اسکریپت یا دارای تعیین نوع ایستا هستند؛ مانند سی و سیپلاسپلاس، راست و دوباره کامن لیسپ (معمولاً پیادهسازیهای مدرن کامن لیسپ، مانند SBCL، اجازه میدهند بنا به خواست برنامهنویس، قسمتی از کد، دارای تعیین نوع ایستا و قسمتی دارای تعیین نوع پویا باشد).
در پایتون، تعیین نوع متغیرها، مقدار یا مقادیر بازگشتی توابع و متدها و آرگومانهای توابع اجباری نیست. اما میتوانیم با تعیین نوع و استفاده از یک نرمافزار Linter به کاهش خطاهای خود پیش از اجرا کمک کنیم.
def f(x: int) - > int:
return x * 2 + 1
با این که تعیین نوع آرگومان یا ورودی تابع f که x باشد و مقدار بازگشت آن یعنی x*2 + 1
در اجرا تأثیری ندارد، اما زمانی که بخواهم مقدار بازگشت تابع f را با یک رشته نویسه (کاراکتر) جمع کنم به من اخطار داده میشود:

بدیهی است که اجرای این برنامه به وسیلهٔ پایتون نیز باعث خطا میشود. در مقابل زمانی که نوع ورودی و خروجی تابع را مشخص نمیکنم اخطاری داده نمیشود:

در ادامه با تعیین نوع ورودیها و خروجی توابع و متدها و ویژگیهای یک کلاس آشنا میشویم.
زمانی که از یک برنامهنویس پایتونی بخواهید یک تابع ساده بنویسد تا ارقام یک عدد را جمع کند و برگرداند، احتمالاً ابتدا عدد را به یک رشته تبدیل میکند و سپس رشته را به لیست (فهرست) و نهایتاً تکتک اعضای لیست را که ارقام عدد به صورت رشتههای تکنویسهای هستند به عدد تبدیل میکند و سپس آنها را با هم جمع میکند. ولی الزاماً اولین روشی که برای حل مسئله به ذهنمان میرسد، بهترین روش نیست. در این مطلب دو الگوریتم برای جمع ارقام یک عدد صحیح به صورت بازگشتی و تکرارشونده به همراه کد های پایتون آن ها ارائه میدهم.
مسئلهٔ ۸ وزیر یک تمرین معروف در علوم کامپیوتر و ریاضیات میباشد. این مسئله در مورد یک صفحهٔ شطرنج رایج و مهرهٔ وزیر در این بازی فکری میباشد. در ریاضیات ثابت میشود که میتوان ۸ وزیر را در یک صفحهٔ شطرنج چنان قرار داد که هیچکدام از وزیرها، دیگری را تهدید نکنند. با تعمیم این مسئله در ریاضیات، ثابت میشود که در یک صفحهٔ شطرنج به ضلع n، میتوان تعداد n وزیر قرار داد؛ چنانچه هیچکدام دیگری را تهدید نکنند. در علوم کامپیوتر میتوان با روشهای مختلفی این مسئله را حل کرد و به یک چینش از مهرههای وزیر رسید که هیچکدام دیگری را تهدید نکنند. یکی از این روشها «الگوریتم ژنتیک» است.

طی دهههای گذشته بحثهای زیادی راجع به اینکه مشخصات زبانهای برنامهنویسی، به عنوان مثال تعیین نوعشان و مثلا ایستا(static) یا پویا(dynamic) بودن چه تاثیری روی روند توسعه نرمافزارها دارد. یک مقاله علمی(paper) با مطالعه ۶۰۰ پروژه در گیتهاب شامل تقریبا ۷۰ میلیون خط کد و ۳ میلیون کامیت به نتایجی در این مورد رسیدهاست.
اینکه برای یادگیری برنامهنویسی دانستن زبان انگلیسی لازم هست یا نه، پرسش بسیاری از کسانی هست که میخواهند برنامهنویسی را شروع به یادگیری کنند. در این پست بنده با توجه به تجربهی خودم سعی میکنم به این پرسش جواب دهم. اگر نمیخواهید کل مطلب را بخوانید، جواب کوتاه این پرسش در یک جمله این است که «بله، برای یادگیری برنامهنویسی باید حتما انگلیسی هم یاد بگیرید»