امروز بالاخره فرصت شد تا قسمت Smithereens از فصل جدید سریال Black Mirror رو ببینم. خیلی ذهنمو درگیر خودش کرد و باعث شد تا بیام اینجا در مورد چیزهایی که گاهی بهشون فکر می‌کنم صحبت کنم😃. البته الان هدفم این نیست که خودم نتیجه گیری کنم و بیشتر دنبال این هستم که یه سری موضوع مطرح بشن تا بشه بیشتر در موردشون صحبت کرد.

نکته: شاید باعث اسپویل قسمت Smithereens بشه

آقای رابرت مارتین (عمو باب) یه سوگند برای برنامه‌نویسا نوشته با عنوان The Programmer's Oath که خیلی جالبه اما چیزهای بیشتری از فقط یه کد خوب مهم هستند. اینکه یه کد بدون باگ بنویسیم یا Code Coverage کدمون بالا باشه، دلیل نمیشه یه توسعه‌دهنده‌/مهندس/… نرم‌افزار عالی باشیم.

آدم باید در کنار افزایش مهارت‌های فنی، حتما یه نیم نگاهی به مهارت‌های نرم (Soft Skills) داشته باشه. هر چقدر کدت خوب باشه ولی نتونی ۴ کلمه با همکارت تعامل داشته باشی یا توی یه همفکری فنی شرکت کنی یا حتی هنوز جنسیت/سن برات مهمتر از دانش فرد باشه، اون کدت هم ارزش خاصی نداره.

حالا غیر از تعامل با بقیه، چندتا موضوع دیگه هم هست که بنظرم نیاز به بحث دارند:

۱- چطوری باید یه پروژه رو قیمت گذاری کنیم؟ اگر پروژه‌ای رو به یکی دادیم، با چقدر تغییر مجازیم به یکی دیگه بفروشیم؟ آیا اگر پروژه‌ای رو به کسی میدیم باید بهش بگیم از چیزی مثل وردپرس استفاده کردیم یا نه؟ اگر از صفر یه هسته‌ی نرم‌افزاری برای خودمون درست کرده باشیم و باهاش چندتا پروژه بزنیم، آیا باید قیمت ارزونتر بشه یا اینکه همه رو به قیمت همون ساخت یه پروژه باید فروخت؟

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

۳- شاید از همشون مهمتر این مورد باشه، اینکه مسئولیت ما در قبال کاربرهایی که از نرم‌افزارمون استفاده می‌کنند چی هست. کاری به بحث حفاظت از داده ندارم که بدیهی هست. مثال‌های دیگه رو بررسی میکنیم.

  • یه مثالش همین قسمت از سریال Black Mirror بود. یه شرکتی سعی کرده بود تا میتونه کاربرهارو مجذوب نرم‌افزارش کنه که همیشه ازش استفاده کنند (تقریبا یا شاید همه ماها دوست داریم که کاربرها زمان بیشتری رو توی ا‌پ‌مون بگذرونن). در نهایت همین قضیه باعث شده بود که راننده حواسش به اپ پرت بشه و تصادفی رخ بده و داستان سریال درست بشه. چقدر حواسمون به همچین چیزهایی هست؟ من تنها اپی که دیدم هشدار میده، اپ Waze هست که زمان استفاده از اپ میپرسه مسافر هستید یا راننده؟ اگر بگید مسافرید، میذاره با اپ کار کنید.
  • یه مثال دیگه از این مسئولیت‌ها میتونه این باشه که ما چقدر مسئول روابطی هستیم که آدم‌ها توی اپ‌مون دارن. یه بار نظرات یه اپ توی کافه‌بازار رو میخوندم که بنظر اپ از یه تاریخی غیر فعال شده بود و تعداد زیادی آدم نظر گذاشته بودن که دوستایی که توی اپ داشتیم رو از دست دادیم و راه ارتباطی باهاشون نداریم. توی نگاه اول شاید هرکی حق داشته باشه که اپ‌شو غیر فعال کنه ولی خب شاید همین غیرفعال کردن، تاثیر زیادی روی بعضی از کاربرها بذاره.

عید امسال رو به خوردن و فیلم دیدن میگذروندم تا اینکه یه وظیفه‌ای رو بهم محول کردن😃. اونم این بود که قیمت بلیت‌ هواپیمارو توی یه سایتی چک کنم تا وقتی که خیلی ارزون شد، ازش بخریم. چند دفعه‌‌ای توی سایت رفتم و قیمت‌هارو نگاه کردم ولی بعدش گفتم چکاریه که خودم چک کنم، بجاش یه اپ اندروید درست میکنم تا قیمت بلیت رو هر ۱۵ دقیقه بگیره و اگر از یه حدی ارزون‌تر بود، خبرم کنه.

چون پروژه برای خودم بود و وقت هم داشتم، هرچیزی که این یه مدت میخواستم امتحان کنم ولی نشده بود رو توی این پروژه استفاده کردم!😃 دو روزی ازم وقت گرفت ولی تجربه‌ی خوبی بود، در ادامه چندتا نکته از این تجربه رو میگم. در ضمن سورس پروژه رو هم توی گیت‌هاب منتشر کردم تا شاید به عنوان نمونه سورس به کار کسی بیاد یا حتی بعدا خودم چیزهای دیگه‌ای رو روش تست کنم. لینک ریپوی گیت‌هاب پروژه:

https://github.com/abbas-oveissi/Charter

نکاتی که میخواستم بگم اینا هست: ادامه …

این مقاله بیشتر از اینکه یه مقاله‌ی تخصصی از یه متخصص اسپرینگ و داکر باشه، داستان آخر هفته‌ایه که به کلنجار رفتن با داکر و پلتفرم فندق گذشت. قضیه از اینجا شروع شد که قبلا برای پایان‌نامه‌ام یه وب اپلیکیشن با اسپرینگ بوت (و دیتابیس PostgreSQL) درست کرده بودم و از VPSها برای هاستش استفاده می‌کردم. با توجه به اینکه هزینه‌های VPS خیلی زیاده، همیشه به مشکل میخوردم. چند وقت پیش توی توییتر دیدم یه پلتفرم Paas به اسم فندق توی ایران درست شده که سرویس رایگان هم داره. واسه همین کنجکاو شدم تا ببینم میشه ازش برای کارم استفاده کنم یا نه.

برای شروع فکرکنم بهتر باشه اول یکم در مورد کلمه‌های توی این مقاله مثل داکرایز، فندق، اسپرینگ بوت و … صحبت کنیم. ادامه …

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

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

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

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

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

توی توسعه این پروژه از کتابخونه‌هایی مثل Rxjava ,Dagger2 ,Retrofit, Room , Databinding و … استفاده شده ولی تمرکز اصلی روی ساخت اپ ماژولار با استفاده از Dagger2 بوده. یعنی اگر میخواید RxJava یاد بگیرید، توی این پروژه نباید دنبال Best Practiceهاش باشید.

ادامه …

 

روزی که جنریتور “حلما” رو درست کردم، تصمیم گرفتم Open Sourceش کنم. چون اولین بار بود که میخواستم اینکارو بکنم، هیچ ایده‌ای نداشتم که از کجا باید شروع کرد یا باید به چه نکاتی توجه کنم. به همین دلیل، پیش یکی از بهترین دوستام به اسم گوگل!! رفتم تا مثل همیشه کمکم کنه، توی گوگل با کلیدواژه‌های start، open source و how جستجو کردم. بیشتر مقاله‌هایی که آورد رو خوندم، یه تعدادیشون نکته‌های خیلی خوب داشتند، این نکته‌هارو توی Evernote نوشتم تا سرفرصت تبدیلشون کنم به این مقاله‌ای که الان میخونید. ادامه …

هر موقع در مورد اینکه توی شرکت‌های خوب خارجی TDD کار میکنند صحبت میشد، پیش خودم میگفتم که خب توی ایران با توجه به ددلاین‌های پروژه، اخلاق کارفرما و … نمیشه مثل اونا بود وگرنه منم حتما TDD کار میکردم. برای خودم تست ننوشتن رو همینجوری توجیه میکردم تا اینکه تصمیم گرفتم یه پروژه که فرصت زیاد داشت رو بصورت TDD انجام بدم. همیشه فکرمیکردم Unit Testing خیلی راحته و اگر توی تست نوشتن بخوام جاییش گیر کنم قسمت Integration Testing و End to End Testing هست. ولی همون اول کار تا شروع به Unit Test نوشتن کردم، برام کلی سوال جورواجور پیش اومد! مثلا چطوری باید تست‌هارو نامگذاری کرد؟ چطوری میشه متدهایی که نیاز دارند با پارامترهای زیاد تست بشن رو تست کرد؟ حتما باید برای تست نوشتن از mockito استفاده کرد یا نه؟ ادامه …

میخواستم وقتی رسپبری‌پای خریدم، از کارهای جالبی که باهاش میکنم توی کانال و بلاگم بنویسم! ولی خب متاسفانه خیلی فرصت نمیشه سراغش برم، این تعطیلات چند روزه باعث شد تا بعد مدت‌ها سعی کنم کارهایی که میخواستم باهاش انجام بدم رو عملی کنم. مهمترین کارم این بود که بجای وصل کردن لپ‌تاپ به تلویزیون از رسپبری‌پای برای دیدن سریال یا ویدئوهای یوتیوب استفاده کنم. یه روزی درگیر این بودم که یه فیلم FullHD رو روی رسپبری‌پای با زیرنویس فارسی اجرا کنم که آخرشم نشد. (البته میخواستم اینکار رو روی Raspbian انجام بدم، OMXPlayer فیلمو خیلی خوب پخش میکرد ولی با زیرنویس فارسی مشکل داشت)

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

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