این مطلب ابتدا در تاریخ 3 شهریور در بلاگ mahdii.me منتشر شده است.
در هفته های گذشته که طرح صیانتِ زوری از اینترنت وارد مجلس شده است، چندین بار به این موضوع فکر میکردم که تاثیر این طرح در صورت اجرایی شدن برای افراد مختلف به چه شکل است. یکی از قشرهایی که احتمالا زندگیشون از چیزی که اکنون هست (و باور کنید که همین الان هم پدرشان دارد در میاید) بدتر میشود، توسعهدهندگان نرمافزار است؛ افرادی که در حال حاضر هم بدون VPN به سختی میتوانند یک ساعت هم کار کنند. اما چه تعداد توسعهدهنده نرمافزار در ایران مشغول به کار هستند؟ این سوالی بود که چند وقتی ذهنم رو مشغول کرده بود و در این نوشته میخواهم این تعداد را حدس بزنم.
ابتدا باید عواملی که باعث افزایش یا کاهش تعداد توسعه دهندههای نرم افزار میشود را بررسی کنیم.
مشخصا مهمترین عامل برای تعیین تعداد دولوپرهای یک ناحیه جغرافیایی، جمعیت آن میباشد. کشورهایی همچون چین و هند با جمعیت بیش از یک میلیارد نفر، دارای تعداد زیادی مهندس نرمافزار در دنیا میباشند. به عنوان مثال پیشبینی میشود که چین بین 3 تا 7 میلیون توسعهدهنده دارد.
دومین عامل مهم، پیشرفته بودن کشور و بزرگیِ اقتصاد میباشد. احتمالا مهمترین و خلاصهترین معیاری که نشان از بزرگی یک اقتصاد می باشد، سرانه تولید ناخالص داخلی (GDP per capita) میباشد.
نکتهای که اینجا وجود دارد این است که به عنوان مثال کانادا و عربستان سعودی هر دو دارای تولید ناخالص داخلی یکسانی میباشند. اما واضح است که عربستان سعودی به دلیل داشتن ذخایر عظیم نفت و گاز گونهای از توسعه نامتوازن را تجربه میکند. به همین دلیل بهتر است تا سهم بخشهایی همچون ارتباطات و فناوری اطلاعات کشورهای مختلف با یکدیگر مقایسه شود.
از آنجایی که اندازهگیری بخش ارتباطات و فناوری اطلاعات (یا بخش دیجیتال یا اقتصاد اینترنت) کشورهای مختلف کار دشواری میباشد و بسته به روش اندازهگیری و تعریف های متفاوت بین سازمان های مختلف متفاوت میباشد؛ حداقل برای من پیدا کردن آمار معتبری از سهم فناوری اطلاعات از مقدار سرانه تولید ناخالص داخلی کشورهای مختلف میسر نبود.
نهایتا برای حل این مشکل، میتوان از سرانه تولید ناخالص داخلی بخش خدمات استفاده کرد. بدین ترتیب بخش کشاورزی و بخش صنعتی (که به تولید «کالا» میپردازد) را حذف میکنیم. نرم افزار، فناوری اطلاعات و ارتباطات از بخش هایی هستند که در بخش خدمت اقتصاد به حساب می آیند.
یک عامل دیگر که به نوعی نشاندهنده میزان پیشرفته بودن یک کشور و سیگنالی برای پررونق بودن صنعت نرمافزار در کشورها میباشد، ضریب نفوذ اینترنت میباشد. به این معنا که از هر صد نفر، چند نفر از آنها به اینترنت دسترسی دارند. کیفیت اینترنت (سرعت اینترنت موبایل و خانگی) هم ارتباط خوبی با میزان رونق بازار نرمافزار دارد.
از عوامل دیگر میتوان به ضریب نفوذ تلفنهای هوشمند، درآمد نیروهای توسعهدهنده و امثالهم اشاره کرد. البته پیدا کردن مراجع قابل اعتماد برای گزارش موارد این شکلی معمولا دشوار میباشد و گاها باعث بدتر شدن عملکرد مدلهای یادگیری میشوند.
برای طراحی یک مدل ساده که کار پیشبینی تعداد توسعهدهندگان نرمافزار در ایران را بتوان با آن انجام داد، نیاز داریم تعداد مناسبی از کشورهایی که تعداد توسعهدهندگان آنها مشخص میباشد را پیدا کنیم و تاثیر عواملی که بالاتر اشاره کردیم را بر روی آنها بررسی کنیم.
نکته مهمی که در مرحله جمعآوری دیتا وجود دارد این است که باید ترجیحا از انواع مختلف کشورها در داده های ما وجود داشته باشند. به همین دلیل بهتر است از کشورها با درآمدها و سطح توسعهیافتگی مختلف در لیست ما وجود داشته باشد.
مجموعا با توجه به محدود بودن اطلاعات معتبر، 14 کشور مختلف را برای آموزش مدل خود انتخاب میکنیم. این 14 کشور عبارتند از: آمریکا، بریتانیا، آلمان، ایتالیا، فرانسه، مجارستان، روسیه، اوکراین، برزیل، آفریقای جنوبی، مصر، ترکیه، کلمبیا و مراکش.
از آنجایی که تعداد کارکنان مشغول در صنعت نرمافزار نمیتواند یک عدد منفی باشد، از Non-Negative Least Squares استفاده خواهیم کرد تا تمام پارامترهای ما اعدادی مثبت باشند.
برای دیدن جزئیات کد که بسیار ساده میباشد میتوانید به این ریپو مراچعه کنید.
پس از پیدا کردن ضرایب رگرسیون، همانطور که پیشبینی میکردیم، مهمترین عامل پیشبینی کننده تعداد توسعهدهندگان نرمافزار در یک جمعیت ثابت، سرانه ناخالص تولید داخلی در بخش خدمات میباشد. به طور متوسط بیش از 80 درصد تفاوت میان کشورهای مختلف را میتوان به کمک سرانه تولید ناخالص داخلی بخش خدمات توضیح داد.
از آنجایی که از مدل برای پیدا کردن سهم تعداد توسعه دهندگان نرمافزار در یک جمعیت استفاده میکنیم، قابل پیشبینی بود که جمعیت اثر قابل توجهی نداشته باشد و مدل ما نیز این را تایید میکند.
دیگر عاملی که نسبتا قدرت قابل توجهی برای پیشبینی به ما میدهد، درآمد توسعهدهندگان در کشورهای مختلف میباشد. به عنوان مثال اوکراین که از لحاظ سرانه تولید ناخالص داخلی تنها کمی وضعیت بهتری از ما دارد و نصف ایران جمعیت دارد، اما از لحاظ تعداد متخصصین نرمافزار به مراتب از ما وضعیت بهتری دارد. چیزی که احتمالا علت آن را میتوان در درآمد بالای توسعهدهندگان در اوکراین و کیفیت بالای زندگی آنها در این کشور جستجو کرد.
عامل دسترسی به اینترنت در جمعیت نیز خیلی تاثیر مشخص و مهمی در مدل ما نداشته است. البته باید در نظر داشت که کشورهای موجود در دیتاست ما، اکثرا بیش از 60 درصد دسترسی به اینترنت داشتهاند.
به طور کلی به نظر میاد مدل عملکرد خوبی از خودش نشان میدهد. در گراف بالا نتیجه روش Leave One Out Cross Validation بر روی این مدل را میتوان دید.
حال میرسیم به سوال اول مقاله، چه تعداد توسعهدهنده نرمافزار در ایران وجود دارند؟ سرانه تولید ناخالص داخلی بخش خدمات ایران حدود 7200 دلار میباشد، بیش از 95 درصد جمعیت ایران به اینترنت دسترسی دارند و حقوق سالانه میانه برنامهنویسان ایرانی چیزی در حدود 23 هزار دلار (PPP) میباشد. طبق پیشبینی مدل، 0.19 درصد از جمعیت ایران به برنامهنویسی مشغول است که با احتساب جمعیت 85 میلیونی، برابر با 168 هزار نفر (بین 91 هزارتا تا 306 هزارتا) میشود.
برای دیدن منابع و کد میتوانید به این مخزن گیتهاب مراجعه کنید.
برخی توضیحات بیشتر در مورد عدد نهایی را در تلگرام نوشتم.