An open letter to oDesk from an Iranian software developer

Dear oDesk managers,

I’m an Iranian software developer living and working in Tehran/Iran. Recently I opened an account in oDesk and started to bid on oDesk projects as a contractor. But unfortunately oDesk has suspended my account just because I’m an Iranian.

I can’t realize why I can’t work in oDesk like many other people all around the world including Pakistan, Latin America, Egypt, Ukraine, India, etc? What is difference between them and us? I know about Iran Sanctions Act (ISA), but we, the people of Iran not the government, do not deserve it. In Iran, a very few software developers work directly for government or government organizations. While American and Iranian politicians hate each other, why we, the people of Iran must be sacrificed? Why we must pay for it?

Please watch software developers of Iran more carefully, we don’t program for nuclear weapons, mass destruction weapons or anything else dangerous for people of world. Main stream of software development in Iran is LOB applications deployed in boring offices manipulating personal data, banking data, accounting data and any none military data. Why you are think these poor and peaceful software developers are dangerous to other people?

I beg you think twice…

Best Regards,
A peaceful Iranian software developer,
Afshar Mohebbi

نرم‌افزارهای داده‌ای در وب

در حین جستجو در oDesk متوجه شدم طیف جالبی از پروژه‌ها وجود دارد که انجامشان جالب خواهد بود: پروژه‌های مربوط به استخراج یا بازتولید اطلاعات از وب. این جور پروژه‌ها و نرم‌افزار برای ما برنامه‌نویسان ایرانی کمتر شناخته شده هستند. البته یک دلیل آن هم این است که معمولاً در بازار داخل چنین تقاضایی وجود ندارد. تقریباً تمام پروژه‌های داخلی از نوع پروژه‌ها مالی اداری هستند و همیشه یک سر آنها به دیتابیس وصل هستند.

به عنوان نمونه به پروژه‌های زیر توجه کنید:

۱- ترافیک مصنوعی: بازدید مصنوعی از یک سایت خاصی به طور مکرر. به طوری که سایت مذکور فکر کند بازدید کننده‌هایش از OSها و browserها مختلف آمده است.

۲- تبدیل فید RSS به تکست

۳- نرم‌افزار email marketing

پ. ن.: به نرم‌افزارهای web scraping هم نگاهی بیندازید.

گناهی به اسم ایرانی بودن

odesk سایتی است مشابه vworker که برای برون‌سپاری پروژه‌های نرم‌افزاری و غیره به برنامه‌نویسان Freelance سراسر دنیا استفاده می‌شود. عمده contractorهای این طور سایت‌ها از کشورهای ارزان قیمتی مثل هند، روسیه، شرق اروپا، آمریکای لاتین و کشورهای عربی مثل مصر هستند. دیروز پروفایلم را در odesk تکمیل کردم، البته آدرسم را در دوبی دادم و تنها یک شماره تلفن از ایران (با کد ۹۸) دادم. نمی‌دانم از روی کد کشور یا از روی IP به ایرانی بودن و در نتیجه مجرم بودن بی‌دلیلم پی برده‌اند و ایمیل زیر را برای من فرستاده‌اند:


دقت کنید که برای درست و حسابی کار کردن در odesk باید identity خودتان را verify کنید. برای verfiy کردن هم عملاً نیاز به passport و اینجور حرف‌ها می‌شود که…

‫NHibernate session management در محیط‌های مختلف

مهم‌ترین مسئله‌ای که در Session management در NHibernate وجود دارد، مسئله نگهداری session است. به طور معمول سعی می‌شود برای انجام یک کار فقط یک session باز شود نه بیشتر. اگر طی انجام همان کار مجدداً نیاز به session شد از همان session قبلی استفاده می‌شود نه این که یک session جدید open شود.

این کار در وب خیلی راحت است. session instance مورد نظر در HttpContext قرار داده می‌شود. در مورد ویندوز و WCF هم کار چندان سختی نیست. چون از Thread برای نگهداری session استفاده می‌شود. اما موقعیت‌هایی وجود دارد که می‌خواهیم به طور هم زمان در دو محیط از یک Session Factory و Session استفاده نماییم. مثلاً هم وب را داریم و هم یک سرویس WCF را.

این طور وقت‌ها می‌توان یک SessionContext سفارشی ساده ساخت که هم session را در HttpContext نگاه داشت و هم در جای دیگری که در محیط مورد نظر معنی دار است. اصل این راه حل در اینجا توضیح داده شده.

‫راه ابتکاری برای تبدیل تاریخ میلادی به تاریخ شمسی در SQL Server

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

در دیتابیس فوق‌الذکر برای تبدیل تاریخ میلادی به تاریخ شمسی از یک جدول ۵۱ هزار رکوردی استفاده شده بود. این جدول دو ستون داشت. یکی تاریخ میلادی و دیگری تاریخ شمسی. اولین رکورد با ۱۹۰۰٫۱٫۱ و تاریخ معادل شمسی آن شروع می‌شد. هر رکورد بعدی روز بعدی را نشان می‌داد. این روال تا روز میلادی ۲۰۴۱٫۳٫۱۹ و معادل شمسی آن ادامه داشت. حالا خودتان select مربوطه را حدس بزنید!

‫‫مطالعه موردی شماره ۹ vWorker: ماریانو ایگلسیاس و کلودیا مانسیلا (کریکاوا)

vWorker یکی از سایت‌های معروف برون‌سپاری پروژه‌های نرم‌افزاری است. جهت آشنایی بیشتر با آن و مدل کاریش، یکی از آخرین پست‌های وبلاگ آنها را ترجمه و در اینجا می‌گذارم. این نوشته مصاحبه‌ای با یکی از موفق‌ترین پیمانکاران (worker, employee) سایت vWorker است.

——————–

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

ماریانو ایگلسیاس و کلودیا مانسیلا (از موسسین کریکاوا):

ماریانو ایگلسیاس و کلودیا مانسیلا که با نام کاربری cricava در vWorker حضور دارند، فعالیت جدی‌شان را از سال ۲۰۰۵ شروع کردند. آنها با مناقصه روی پروژه‌های کوچک‌تر شروع کردند تا بتوانند سابقه خوبی برای خودشان درست کنند. البته آنها بدون آن که به کوچک بودن پروژه اهمیت بدهند سعی می‌کردند سرویس بسیار خوبی به کارفرمایشان ارائه دهند. آنها بالاخره توانستند پروژه‌های بزرگ هم بگیرند. اعتماد و اعتبار کسب شده باعث شد بتوانند درآمد خوبی کسب کنند. کریکاوا در می ۲۰۱۰ به رتبه شماره یک vWorker رسید و هنوز هم در این رتبه باقی مانده است.

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

۱- چرا وارد vWorker شدید و چطور آن را پیدا کردید؟

ما vWorker را به طور اتفاقی در اواخر ۲۰۰۳ پیدا کردیم. درست بعد از ثبت نام در سایت، یک پروژه محلی پیدا کردیم و بی‌خیال vWorker شدیم. اما از اوایل ۲۰۰۵ دوباره شروع به کار با vWorker کردیم. ما فهمیدیم که vWorker فرصت‌های بی‌نظیری برای ما فراهم کرده است. پس هر روز وقت بیشتری برای مناقصات گذاشتیم تا جایی که تصمیم گرفتیم تنها منبع کارمان vWorker باشد. سوددهی ما از چند ماه بعد شروع شد چون پروژه‌های اولیه‌ای که می‌گرفتیم کوچک بودند و پول زیادی بابت آن نمی‌گرفتیم. با این وصف همیشه سعی می‌کردیم چیزی فراتر از آنچه که مشتری می‌خواست به او بدهیم.

بازخورد بسیار مثبتی که مشتریانمان ارائه می‌دادند کمک می‌کرد تا بتوانیم در مناقصات بزرگتری شرکت کنیم. اعتماد مثبتی که بین مشتریان ما ایجاد شده بود باعث می‌شد تا بتوانیم درآمد خوبی کسب کنیم بخصوص این که بعضی مشتری‌ها صرفاً به خاطر این که بتوانند با ما کار کنند وارد vWorker می‌شدند. در اواخر ۲۰۰۵ ما جز ۲۵۰ پیمانکار برتر vWorker بودیم. دوران جالبی پیش روی ما بود.

با افزایش معروفیت ما و با توجه به تعداد قابل توجه مشتری‌های ثابتی که داشتیم در سال ۲۰۰۶ فهمیدیم که با کار مداوم و پیوسته نه تنها می‌توان پول درآورد بلکه می‌توان هر روز در رتبه‌بندی‌ها مقام بهتری کسب کرد تا این که نهایتاً در می ۲۰۱۰ به رتبه شماره یک رسیدیم.

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

۲- چه توصیه‌هایی برای کسانی که می‌خواهند راه شما را طی کنند دارید؟

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

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

این توصیه‌ای است که شاید خیی کم مثل آن را شنیده باشید: کارفرمایتان را خودتان انتخاب کنید. به خصوص در ابتدای کار در vWorker مواظب باشید که با کارفرماهایی که قصد سو استفاده از شما (با درخواست کار مجانی، یا کار زیاد در ازای پول کم) را دارند یا کارفرماهایی که که می‌خواهند شما را به خاطر ناتوانی خودشان در پروژه‌های بی‌پایان گیر بیندازند، کار نکنید. پیدا کردن کارفرمای خوب کار دقیق و حساسی است.

۳- جالب‌ترین خصوصیت vWorker از نظر شما چیست؟

Arbitration. چیزهای خیلی زیادی در مورد یک پروژه هست که ممکن است اشتباه باشند. در این طور موارد داشتن حفاظت مناسب بسیار مفید است. بدون arbitration غیر ممکن بود که ما از vWorker استفاده کنیم.

۴- تجربه شما در مورد mediation/arbitration چه بوده؟

ما mediationها و arbitrationهای زیادی داشته‌ایم. ما حتی یکی را هم از دست نداده‌ایم چون همیشه از قوانین vWorker پیروی کرده‌ایم. ما با قطع ارتباطات خارج سایتی همیشه توانسته‌ایم همه ادعاهایمان را ثابت کنیم.

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

۵- آیا تکنیک، روش، راه یا راز خاصی در مورد vWorker هست که بخواهید آن را با دیگران به اشتراک بگذارید؟

سبدی (portfolio) از پروژه‌ها به عنوان رزومه داشته و همیشه آن را به روز نگه دارید. شما مجبور نیستید هر پروژه‌ای را که روی آن کار کرده‌اید را نمایش دهید. بهتر است فقط بهترین‌های آنها را انتخاب کنید. اگر تعداد پروژه‌هایتان خیلی زیاد نیست، یک پروژه کد باز یا یک پروژه خیریه ایجاد کنید. این کار نه تنها سبد شما را پربارتر خواهد کرد بلکه ممکن است مشتری‌های جدید برای شما جور کند.

۶- آیا داستان یا خاطره‌ای از کارفرماها یا پروژه‌ها دارید؟

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

مهربانی به وضوح به کمک‌تان می‌آید و ارزشش را دارد.

تویتر: راه ارتباطی راحت‌تر از وبلاگ‌نویسی

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

۱- کیوان نیری
۲- اسکات هنزلمن
۳- علی اقدم
۴- مهدی تقی‌زاده
۵- ناصر حاجلو
۶- مسعود رمضانی
۷- جف اتوود
۸- ریک استرال
۹- افشار محبی (اینجانب)
۱۰- اسکات کان
۱۱- مارتین فولر
۱۲- سپهر لاجوردی
۱۳- اشکان روشنایی
۱۴- هادی اسکندری
۱۵- سهیل رشیدی
۱۶- سروش ایوبی
۱۷- حامد سعیدی فرد
۱۸- مجید آواژ (بهساد)
۱۹- جو استنگر
۲۰- صالح سوزنچی
۲۱- سلمان عرب عامری
۲۲- بهنام بهمنی

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

‫programmers.stackexchange.com جای جالبی است

بیشتر برنامه‌نویس‌ها StackOverflow.com را می‌شناسند، مزایایش را می‌دانند و از آن استفاده کرده‌اند. اما شاید خیلی‌ها ندانند سایت مشابه آن یعنی programmers.stackexchange.com هم چیز جالبی است و سوال و جواب‌های جالب و مفیدی در آن یافت می‌شود. به عنوان نمونه به سوالات زیر دقت کنید:

۱- آیا یاد گرفتن هم زمان دو زبان برنامه‌نویسی کار درستی است؟

۲- چه کار کنم تا کیفیت کد در تیم برنامه‌نویسی بالا برود؟

۳- آیا زیبا بودن ظاهری کد ارزشی دارد؟

۴- همکار (برنامه‌نویس) من از روش‌های بدی برای کد نویسی استفاده می‌کند. چه باید کرد؟

۵- آیا برون‌سپاری پروژه‌های نرم‌افزارهای به کشورهای خارجی، نوعی خیانت به کشور خودم و هم وطنانم محسوب می‌شود؟

۶- من در زمان مصاحبه گاف‌های بدی داشته‌ام ولی استخدام شده‌ام. آیا باید از مدیر جدیدم خجالت بکشم؟

۷- آیا استفاده از مونو در یک پروژه تجاری با توجه به خطر ادعای مایکروسافت به آن کار درستی است؟

۸- علاقه‌ام رو به برنامه‌نویسی از دست دادم. حالا چه کار کنم؟

۹- چطور مدیرم را متقاعد کنم که کیفیت در کد چیز با ارزشی است؟

۱۰- چرا گفته می‌شود که مرکوری از گیت راحت‌تر است؟

۱۱- من مجبور شده‌ام که کد نویسی را با کیفیت پایین انجام دهم. حال چه می‌شود کرد؟

۱۲- آیا TDD در مقابل بهره‌وری قرار می‌گیرد؟

چند آگهی استخدام جالب توجه

از وقتی که کارویس رو شروع کردم گهگاه به آگهی‌های جالبی برمی‌خورم. به عنوان نمونه:

۱- برنامه نویس مسلط به C#‎ و Delphi بااسکان در محل کار و مزایای عالی: هیچ وقت فکر نمی‌کردم روزی آگهی استخدام برنامه‌نویس با جای خواب ببینم. درست مثل کارگر ساده با جای خواب، کارگر رستوران کم سن و سال شهرستانی با جای خواب نیازمندیم.

۲- برنامه نویس حرفه ای آقا , مسلط به PHP,Drupal , Android,ios,Java , ActionScript3,J2ME , C,Python,.Net: فکر نمی‌کردم به این زودی‌های آگهی استخدام Android و iOS رو ببینم.

۳- برنامه نویس (خانم) , مسلط به Net. , و آشنا به Delphi: نمی‌دونم چرا بعضی‌ها تاکید دارند که برنامه‌نویس‌هایشان فقط خانم باشد. مگر مشکل خاصی با آقایون دارند؟ مگر نه این که معمولاً محدودیت‌های آقایان، مثل ماموریت، ساعات کاری و محیط کاری کمتر از خانم‌هاست؟

۴- به یک برنامه نویس حرفه ای نیازمندیم: از بعضی آگهی استخدام‌ها هیچ اطلاعاتی در نمی‌آید. حتی زبان برنامه‌نویسی مورد نیاز.

۵- اوضاع WCF با وجود جدیدن بودنش چندان بد نیست.

۶- آگهی‌های استخدام منتشره در نیازمند‌های همشهری بیشتر راجع به دات‌نت است تا جاوا.

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

چندین سال قبل کتابی به دستم رسید که بیشتر صفحات آن نیمه خالی بود. در واقع این کتاب چیز زیادی برای خواندن نداشت بلکه بیشتر کتاب تمرین بود. این کتاب به شما کمک می‌کرد علل رنج خود را دریابید و به آن فکر کنید بدون آن که بخواهد راه حلی برای حل مشکلات ارائه دهد. عنوان کتاب یادم نیست ولی یادم می‌آید یک ارتباطی به چیزی مثل «انجمن ذن کالیفرنیا» داشت.

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

به عنوان مثال آنها مثل من و مدیران من نگران تغییرات در نرم‌افزار نیستند. چون از چیزی به اسم unit test استفاده کرده و این unit testها را هم به نحوی به ابزار buildی مثل TeamCity یا TFS معرفی کرده‌اند. هر وقت که check-inی در سورس کنترل برنامه اتفاق بیفتد، نتیجه تغییر حاصله در تمام unit testها بررسی شده و درست بودن یا نبودن تغییر بلافاصله مشخص می‌شود. حال من برنامه‌نویس ایرانی از همه جا بی‌خبر هم می‌خواهم مثل اونها در برنامه‌ام تغییر ایجاد کنم بدون داشتن این همه ترس. اما نمی‌توانم. چون آن‌ها ساختار و روش‌شان را برای استفاده از unit test آماده کرده‌اند. مثلاً بدنه متودها را کوچک نگه داشته‌اند، اصل Separation of Concern را رعایت کرده‌اند، در صورت لزوم از Mocking استفاده کرده‌اند و غیره و غیره. از این دست مثال‌ها زیاد می‌توان پیدا کرد.

این روزها این رنج را بیش از بیش احساس می‌کنم. اما نمی‌دانم با آن چه کنم. آیا چاره کار Freelance شدن است؟ آیا چاره کار عوض کردن شغل است؟ آیا چاره کار همکاری با پروژه‌های Open Source و در نیاوردن پول است؟ آیا چاره کار مهاجرت است؟ آیا چاره کار تاسیس شرکت شخصی و قبول همه مصائب شرکت‌داری است و پروژه گرفتن است؟ آیا …؟