سیزده پاسخ به اینکه «چرا سی نحس نیست؟»

Screenshot from 2015-11-08 10-03-33

سوال امروزمون اینه:

جادی من این ترم برنامه نویس گرفتم ++C ولی خیلی سخته و یه سوال این زبان برنامه نویسی به چه دردی میخوره وقتی مثلا #C هست چرا باید برنامه نویسی با اون یاد گرفت

اولین جواب که اینه «چون استادتون گفته» (: به هرحال یک جایی هستی که پذیرفتی اونجا باشی و استاد هم داره یک چیزی درس می ده و تو هم باید بخونی و امتحانش بد‌ی (: اما این همه جواب نیست و خیلی‌های دیگه که اصولا تو مدرسه و دانشگاه نیستن هم می‌پرسن که «چرا باید سی /سی پلاس پلاس یاد گرفت». بذار در چندین نگاه مختلف جواب بدم، البته با تکیه بر سی. منم خیلی سی پلاس پلاس کار نیستم.

  1. سی یک زبان پایه‌ است. پسرخاله من گیتار می‌زنه و دخترهای اطرافش حسابی از این مساله خوشحالن. بسیار هم خوب می‌زنه و خیلی هم سریع آهنگ‌های جدید رو یاد میگیره. اون یکی پسر خاله‌ام هم علاقمند شد همین مهارت رو داشته باشه و با تبلچرهای گیتار شروع به تمرین کرد ولی هیچ وقت خیلی خوب نشد. فرقشون چیه؟ اولی مدت‌ها گیتار کلاسیک زده و نت خونی و غیره بلده و دومی فقط با هدف کارهای باحال و نتیجه گرفتن سریع، با تبلچر پیش می ره. این فرق بین کسی که پایه‌ای مثل سی رو بلده و بعد با پایتون برنامه می‌نویسه و کسی که سعی می‌کنه با یاد گرفتن جانگو یک سایت باحال بسازه دیده می‌شه چه برسه به کسی که سی بلده و سی شارپ می‌نویسه و کسی که فقط سی شارپ بلده.
  2. سی زبانی سطح پایینتر از جاوا و پایتون و سی شارپ است که به شما یاد می‌ده سخت‌افزار و سی پی یو چطوری کار می‌کنن و حافظه به چه شکلی مدیریت می‌شه. اگر قراره از برنامه نویسی درک خوبی داشته باشین، دونستن این چیزها کمک بسیار زیادی بهتون می‌کنه.
  3. بعضی معتقد هستند اگر قراره توی برنامه نویسی پیشرفت کنین، لازمه آبسترکشنی یک لایه پایین‌تر از زبان اصلی‌تون رو درک کنین. مثلا اگر پایتون و جاوا و سی پلاس پلاس می نویسین خوبه سی بدونین. اگر سی شارپ می نویسین باید سی پلاس پلاس رو بلد باشین و اگر سی می‌نویسین باید اسمبلی بدونین. اینجوری شیوه کارکرد زبان برنامه نویسی خودتون رو درک می‌کنین. درست مثل کسی که اگر قراره رانندگی حرفه ای کنه باید بدونه کلیت موتور چطوری کار می‌کنه و اگر قراره طراح موتور باشه باید از فیزیک مکانیک هم درک داشته باشه و اگر قراره فیزیک مکانیک رو پیش ببره، لازمه در مورد لایه پایینی (مثلا کوانتوم) اطلاعات داشته باشه.
  4. سی سریع است. برنامه خوبی که به سی نوشته بشه تقریبا از نظر سرعت همه زبان‌های سطح بالاتر رو پشت سر می‌ذاره. اگر قراره چیزی بنویسیم که اولویت اصلی‌اش سرعت باشه، سی یک گزینه بسیار خوبه.
  5. سی بهینه است. اگر قراره برای یک یخچال، تلویزیون و … برنامه نویسی کنیم یا از سیستم‌های امبد استفاده کنیم یا میکروپروسسور‌ها رو کنترل کنیم، سی یکی از بهترین گزینه‌ها است. تقریبا هیچ زبون دیگه ای (به جز اسمبلی) نیست که بتونه با محدودیت‌هایی مثل «حافظه چهار کیلوبایت» کنار بیاد.
  6. سی تقریبا در همه جا حاضره. در حال حاضر محبوب‌ترین زبان‌ها به ترتیب جاوا، سی، سی پلاس پلاس و بعدش سی شارپ هستن. این شاخص هر ماهه آپدیت می‌شه و سی در طول پونزده سال گذشته رتبه‌اش هر ماه یا اول بوده یا دوم.
  7. هر چقدر کار جدی‌تر باشه، حضور سی پر رنگ‌تر است. بحث نوشتن یک سیستم عامل است؟ لینوکس، ویندوز و مک هر سه بیشترین کد سی رو دارن. بحث استک‌های اینترنت است؟ بسیاری از اونها با سی پیاده سازی شدن. حجم عظیمی از مهمترین برنامه‌ها، با سی هستن؛ همینطوره خیلی از بازی‌ها. یاد گرفتن سی به شما فرصت کار روی چیزهایی بیشتر از برنامه حسابداری فلان و برنامه حضور غیاب بهمان رو می ده.
  8. سی یک زبان مبتنی بر بلاک و فانکشن است بدون اینکه شما رو درگیر شی گرایی کنه. نظر شخصی من است ولی آبجکت اورینت پروگرمینگ بیشتر از اونی که لازم بود احاطه پیدا کرد و دنیای آینده ازش دورتر خواهد شد. البته این مساله رو در حال حاضر هم با زبان‌های جدید می‌بینیم.
  9. سی یک زبان سطح متوسط است. تقریبا هیچ زبان دیگه ای در این سطح نیست. شما یا با زبان‌های سطح پایین (مثل اسمبلی) درگیر هستین یا با زبان‌های سطح بالا که سخت افزار رو از شما پنهان می‌کنن. به همین دلیل شروع به نوشتن چیزی مثل یک درایور سخت افزاری با چیزی به جز سی به دلایل خیلی خوبی نیاز داره.
  10. سی پورتابل است. یک برنامه رو با سی بنویسین و تقریبا هر جایی که دوست دارین اجراش کنین.
  11. سی خیلی کم تغییر می‌کنه. یک برنامه رو به سی بنویسین و دهه‌ها اجراش کنین.
  12. سی قشنگ است. سینتکس سی بسیار ساده است و برنامه‌های نوشته به سی بسیار خوانا.
  13. سی در این روزها برنامه‌نویس‌های خوب کمی داره. بازار پر است از سی‌شارپ‌کارهای متوسط و اگر شما علاقمند هستین به یک ارتش ذخیره کار چند ده هزاری بپیوندین، سی شارپ یا دات نت بهترین گزینه است. در مقابل اگر شما حرفه‌ای در سی باشین فرصت‌های کاری بسیار جالبتری پیش روی شماست. فکر می‌کنین وقتی یک شرکت دنبال یک برنامه نویس حرفه‌ای سی می‌گرده چند نفر بهش مراجعه می‌کنن یا اصولا چند نفر هستن که به یک پروژه نوشته شده به سی کامیت‌های مثبت کنن و در سطح جهان دیده بشن؟

معلومه که نمی‌گیم زبان‌های دیگه خوب نیستن. نظر من همیشه اینه که توی هر چیزی خوب باشین وضعتون خوبه و این رو هم می‌پذیرم که خیلی‌ها دنبال یک شغل معمول و مرسوم هستن که خب معمول‌ترین و مرسوم‌ترین زبان برنامه بازار براش بهترین چیزه (: ولی خب.. اگر سوالتون اینه که «چرا سی» جواب‌های من اینها بودن. معلومه که دوستان می‌تونن در کامنت‌ها تکمیلش کنن.

وحشیانه‌ترین شوخی برنامه‌نویسی

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

peter

نکته جالب فرعی اینه که مخاطبینش ۲۳۰۰ بار این توییت رو فیو کردن و ۳۳۰۰ بار ریتوییت. اطراف ما کمتر پیش می یاد که مخاطب ها بیشتر از فیو، ریتوییت کنن و به توییت کننده اصلی انرژی بدن و باعث بشن چیزی که خودشون خوششون اومده، دیده بشه.

اما بحث ما اینجا این نیست، بحث ما اینه که یک نفر این ایده شیطانی رو عملی کرده و شعارش هم اینه که با یونیکد تراژدی خلق کنین.

این برنامه آزاد یک متن رو می گیره و توش سمی کالن (;) رو با علامت سوال یونانی (;) جایگزین می‌کنه. این دو تا که عین همن؟ خب دقیقا همین باعث می شه دوست برنامه نویس شما روانی بشه و به دلیلی نامشخص بعضی ها از روانی شدن بقیه خوشحال می شن (:

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

mimic

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

اینم بگم که جالبترین سر کار رفتن من در مدت‌های اخیر وقتی بود که همکارها کیبورد بی‌سیم مجموعه کیبورد و ماوس بی‌سیم من رو با کیبورد مشابهی جابجا کردن! من پشت کامپیوتر نشستم ولی کیبورد بی‌سیم از کار افتاده بود و گاه گداری هم [با شیطنت بچه‌ها در اتاق کناری که کیبورد اصلی من دستشون بود] چند تا عدد و انتر و غیره تایپ می شد! دوستان در شوخی حرفه ای بودن و در نتیجه دو سه دقیقه ای بیشتر طول نکشید تا همه با هم بخندیم (:

شما تا حالا هدف چنین شوخی‌هایی بودین؟

جلوی باگ شیما رو بگیرین! کسی دوست نداره بهش بگن «شیما عزیز خوش اومدی»

به جز عنوان واقعا چیز زیادی برای گفتن نیست. توی فارسی وقتی اسمی به الف یا و ختم بشه و ما بهش بگیم «$اسم عزیز خوش اومدی» یک باگ ریز پیش میاد. مثلا این برنامه رو نگاه کنین:

package main

import "fmt"

func main() {
  var name string = "کاربر"
  for name != "رفتم" {
      fmt.Print(name, " عزیز خوش اومدی.\n\n")
      fmt.Print("حالا اسم جدیدت رو بده: ")
      fmt.Scanln(&name)
  }
}

که نمونه اجراش می‌شه این:

$ go run 1.go 
کاربر عزیز خوش اومدی.

حالا اسم جدیدت رو بده: جادی
جادی عزیز خوش اومدی.

حالا اسم جدیدت رو بده: شیما
شیما عزیز خوش اومدی.

حالا اسم جدیدت رو بده: رفتم

و درست همینجا است که شیما به من ایمیل زده و گفته وقتی سایتی بهش می گه «شیما عزیز خوش اومدی» اصلا براش جذاب نیست. پس برنامه باید این شکلی باشه:

package main

import "fmt"

func main() {
  var name string = "کاربر"
  var greeter string
  for name != "رفتم" {
      if (name[len(name)-2:] == "ا") || (name[len(name)-2:] == "و") {
        greeter = name + "ی"
      } else {
        greeter = name
      }
      fmt.Print(greeter, " عزیز خوش اومدی.\n\n")
      fmt.Print("حالا اسم جدیدت رو بده: ")
      fmt.Scanln(&name)
  }
}

که خروجی شخصی‌ترین شبیه این بده:

$ go run 1.go 
کاربر عزیز خوش اومدی.

حالا اسم جدیدت رو بده: جادی
جادی عزیز خوش اومدی.

حالا اسم جدیدت رو بده: شیما
شیمای عزیز خوش اومدی.

حالا اسم جدیدت رو بده: شاهو
شاهوی عزیز خوش اومدی.

حالا اسم جدیدت رو بده: رفتم

خوبه؟ پس یک if جلوی باگ شیما رو بگیرین تا افرادی که اسمشون با الف یا و نموم می‌شه حس نکنن یک باگ در برنامه شما هستن.

هفته‌های خوبیه: تقویم برنامه‌ها و ارائه‌های پیش رو در دنیای آزاد و برنامه‌نویسی

جشنواره روز آزادی نرم‌افزار در تهران

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

اولین همایش آینده وب در تهران

این همایش به همت مجید آنلاین برگزار می‌شه و من روز اول یعنی ۱۵ مهر ساعت ۱۴:۳۰ در پنلی هستم با عنوان «هر وب‌سایت یک رسانه» و روز دوم یعنی ۱۶ مهر ساعت ۱۰ صبح یک سخنرانی دارم با عنوان «چرا ممکنه کار کردن به صورت آزاد به نفع شما باشه؟». معلومه که من متخصص آینده وب نیستم ولی می تونم در این مورد گپ بزنم که چرا خوبه یک علاقمند آینده، آزاد کار کنه یا بهتر بگم بدونه که چقدر داره آزاد کار می‌کنه.

گردهمایی نرم‌افزارهای آزاد/متن‌باز

poster

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

آپدیت: از عکس یه پوستر قدیمی استفاده کرده بودم که خوشبختانه دوستان جدیدش رو دادن و آپدیت کردم


بسیار خوشحال می‌شم اگر برای هر کدوم از همایش‌ها چیزی دارین که به نظرتون خوبه توی صحبت‌های من گنجونده بشه همینجا کامنت بذارین تا چیزهای مهم جا نمونن! می‌بینمتون.

آیا لینوکس هم باگ داره؟

رحیم پرسیده:

سوال؟!
آیا لینوکس هم باگ داره؟ خیلی خوشحال میشم در موردش تو وبلاگ یا پادکست صحبت کنی.

خب این سوال چند تا جنبه داره. اول بذار ببینیم منظور از لینوکس چیه. از نظر فنی لینوکس فقط یک هسته سیستم عامل است که در کنار یک مجموعه بزرگ ابزار به اسم گنو و کلی پروژه دیگه تشکیل یک سیستم عامل کامل می دن که اسم درستش باید باشه گنو/لینوکس ولی خب برای راحت شدن زندگی خیلی وقت ها به این مجموعه بزرگ سیستم عامل که ترکیب یک هسته (لینوکس) و کلی برنامه دیگه (پروژه گنو) است هم می گیم همون لینوکس.

کرنل لینوکس به عنوان یک هسته حدود ۱۵ میلیون خط کد است در ۳۷هزار فایل پخش شدن و کل پروژه گنو/لینوکس (مثلا اوبونتو) چیزی حدود ۲۰۰میلیون خط برنامه است. سوال ساده اینه: آیا اصولا ممکنه اینهمه خط کد اشتباه نداشته باشه؟ (: بذار یک فلوچارت بکشم:

آیا برنامه باگ داره

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

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

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

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

فروم: برای یاد گرفتن پایه ای [منطق و اصول] برنامه نویسی باید چه چیزهایی خوند؟

نینجای برنامه نویسی

وحیده پرسیده:

درباره انتخاب زبون برنامه نویسی (با توجه به مطالبتون و کمک دوستان) به این رسیدم کi باید از پایه مثلا الگوریتم و فلوچارت شروع کرد و بعدش رفت سراغ یه زبون مثلا پایتون. هدفم اینه کi عمقی پایه ها رو یاد بگیرم کi وقتی به یه کد نگاه کردم بتونم درکش کنم خواهشم اینه کi سایتی مفید یا کتاب یا … میتونید معرفی کنید یا از دوستان برنامه نویستون بپرسید؟

و من ترجیح دادم به افتخار سیستم جدید کامنت‌ها از شما بپرسم… کسی که دوست داره الگوریتم یاد بگیره باید از کجا شروع کنه و کجا بره؟

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

دوستان در شیراز لاگ یک برنامه خوب هماهنگ کردن: کارگاه آموزش اسکرچ به کودکان بین ۹ تا ۱۳ سال. این کارگاه پنج ساعته در همین پنجشنبه یعنی ۱۲ شهریور برگزار خواهد شد و من بودم و بچه ای بود که دوستش داشتم حتما می بردمش.. چرا؟

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

  • و چند تا بچه هستن که بتونن بگن خودشون یک بازی نوشتن؟ (:

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

پیشنهاد به برگزار کننده: عکس و فیلم زیاد بگیرن و آپلود کنن. به الان من یک عکس بچه برنامه نویس ایرانی پیدا نمی کنم بذارم برای مطلب ):

فیلتر ابلهانه: سانسور سایت اسراییلی پی اچ پی دات نت

Screenshot from 2015-08-19 15:48:13

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

امیدوارم تا شما اینو می خونین دیگه باز شده باشه.

آپدیت ساعت ۱۹: الان باز شده (: وقتی می گم «ابلهانه» یعنی انتظار می‌ره سانسورچی این یکی رو دیگه بفهمه. ظاهرا واقعا ابلهانه بوده و سانسورچی متوجه اش شد (: