یادداشت های یه برنامه نویس
280 subscribers
39 photos
3 videos
3 files
80 links
این کانال برای در میان گذاشتن یادداشت ها و تجربیات جالب در مورد برنامه نویسی هست امیدوارم دوست داشته باشین.

@one_programmer

https://t.me/one_programmer

ادمین @EngMohsen

Linkedin:https://www.linkedin.com/in/mohsen-rajabi72
Download Telegram
وقتی پشت میز تو شرکت یا خونه هستید، چند تا نکته رو رعایت کنید
قوز نکنید
گردن رو صاف بگیرید
خیلی به مانیتور خیره نشوید
خیلی به مانیتور نزدیک نشوید
ارتفاع مانیتور رو طوری تنظیم کنید که موقع نگاه کردن مجبور به حرکت گردن نشوید و رو به روی چشمان شما باشد
سعی کنید موقع تایپ آرنج زاویه 90 درجه باشد.
غیر این موارد سعی کنید هر نیم ساعت یا 1 ساعت حداقل یک بار از جای خود بلند شوید یه دوری بزنید، آب بخورید، به دور دست نگاه کنید برای چشم خیلی مفیده، حرکت کششی بکنید.
یکی از همکارانم که خیلی وقته برنامه نویسی میکنه بعد یک مدت که این موارد و انجام نمیداد دچار درد گردن و کمر و مچ شد طوری که بعد چند ساعت کار درد وحشتناکی بهش وارد میشد در حد جیغ زدن !!
پس اگه تا الآن رعایت نمیکردید رعایت کنید چون اثرات بلند مدت داره.
نکته دیگه ایی که مهمه شغل شما برنامه نویسیه ازش پول در میارید، تو روز حداقل 9 ساعت پشت سیستم هستید و آینده کاریتون بهش بستگی داره قراره حالا حالا برنامه نویسی کنید، پس دنبال یک صندلی خوب باشید، قیمت اون رو در نظر نگیرید چون آینده شما رو میسازه، دنبال یک میز خوب باشید، در نهایت کل هزینه ممکنه 1/5 میلیون بشه یا کمتر ولی ارزش اون رو داره، یادتون نره در مورده آیندتون داره صحبت میشه
@one_programmer

https://telegram.me/one_programmer
وب سرویس
برنامه ها و اپلیکیشن ها برای سرویس دادن به هم، نیازه که وب سرویسی رو ارائه بدن که برنامه های دیگه بتونن ارتباط برقرار کنن و سرویس بگیرن یا سرویس بدن.
تکنولوژی که مدت ها استفاده میشد Soap بود که بر پایه زبان Xml کار میکرد و وابسته به تکنولوژی خاصی نبود، سیستم ها راحت باهاش ارتباط بر قرار میکردن.
اما تکنولوژی جدیدی که اومد کار کردن با فرمت جیسون (Json) بود، این فرمت ابتدا در جاوا اسکریپت مورد استفاده قرار میگرفت.
فرمت Json به این شکل هست که هر کلاینتی که این فرمت رو میگیره اون رو به مدلی که میخاد برمیگردونه یعنی سرور داده رو Serialize میکنه و کلاینت اون رو Dersialize میکنه.
در کنار فرمت Json استفاده از Restful Api ها هم رواج پیدا کرد که برای عملیات خاصی اکشن خاصی در نظر گرفته شده بود.
برای مثال برای Api پاک کردن محصول متد مورد استفاده از نوع Delete بود یا برای گرفتن اطلاعات یک محصول متد Get است، برای هر موجودیت یک کنترلر تعریف میشه که 4 عمل اصلی رو پوشش میده، توضیحات بیشتر رو تو پست های آینده میدم.
دو تکنولوژی محبوب مورد استفاده رو بیان کردم اما تکنولوژی که محبوب تر هست و بیشتر مورد استفاده میشه Json هست.
مزیتی که داره
- سریعتر بود
- سادگی در پیاده سازی
- محبوب تر بودن
- قابل فهم بودن

کار با json سریعتر از soap هست و این سرعت با افزایش داده موجود رابطه مستقیم داره، یعنی هر چی داده بیشتری انتقال داده بشه soap کندتر میشه.
اگر با Api های شرکت های بزرگ مثل گوگل و اینستاگرام و... کار کرده باشید می بینید که از جیسون (Json) استفاده میکنن.
توصیه میکنم در مورد Json و Restful Api ها مطالعه کنید و اگه قراره سرویسی ارائه بدید به موبایل یا هر کلاینتی، از این تکنولوژی استفاده کنید.
تو آینده قصد دارم چند تا پست در مورد Json و Restful بزارم که حالت آموزشی داشته باشه.
@one_programmer

https://telegram.me/one_programmer
یکسری از برنامه نویس ها دوست دارن وقتی پروژه ایی انجام میدن با سیستم اختصاصی خودشون باشه، اکثرا هم میخان از صفر استارت بزنن. خیلی ها اینکارو انجام میدن cms یا فریمورک خودشون رو دارن از صفرم استارت زدن، نهایتش این بوده که بعضی جاها از یکسری کلاس های آماده استفاده کردن.
من میخام توصیه کنم اینکار رو نکنید، چرا ؟؟!!
دلیل زیاد داره اگه اخبار دنیای IT رو دنبال کنید، یکسری سایت های سازمانی و دولتی با این روش پیاده شدن، سیستم اختصاصی داشتن و... ، وقتی خبر هک شدنشون میاد خیلی دور از انتظار نیست.
سعی نکنید چرخ رو دوباره خودتون اختراع کنید، این ضرب المثلی هست که اینحور موقع ها میگن.
به جای اینکه وقتتون رو بزارید روی فریمورک خودتون از فریمورک های آماده استفاده کنید.
چون فریمورک های آماده هزاران نفر ازش استفاده میکنن تو Github یه تیم چند نفره داره برای پشتیبانی، از تجربه دیگران استفاده کنید تا اینکه خودتون تجربه کنید.
مثال زیاد میشه زد، اسم نمیبرم
یکی از توسعه دهندگان PHP که تو زمینه امنیت و رمز نگاری کار میکنه تو کنفرانس های متعدد بوده، تو زمینه امنیت و رمزنگاری روی چند تا فریمورک کار کرده مثل Laravel ,Yii2 و... آیا شمای برنامه نویس میتونید در حد ایشون امنیت فریمورک یا cms خودتون رو حفظ کنید؟؟!! جواب مطلقا نه هست
تو همه زمینه ها به همین شکل هست مثل سیستم کش که فریمورک ها انواع مختلفی رو پیاده سازی کردن، آپدیت های منظم، هیچ موقع نمیتونید تکی یا چند نفری روی فریمورکی کار کنید، و رقابت کنید با فریمورکی که به صورت جهانی و با برنامه نویسای خوب توسعه داده میشه، اگه باگی بخوره سریع گزارش داده میشه درست میشه.
یکی از شرکت های معروف تو زمینه وب فریمورک اختصاصی خودشون رو داشتن من با مدیر و کسی که این فریمورک رو نوشته بود دوست بودم، این فریمورک مشکلات مختلفی داشت ولی وقت نمیکردن حل کنن یا خیلی حل کردنش سخت بود و با بقیه قسمت ها تداخل داشت، یکسری امکانات رو نداشت، باید براش مینوشتن مثلا کش APC , در حالی که یکسری پروژه های سازمانی هم باهاش زده بودن !!
البته گفتم فریمورک خودتون رو نداشته باشید، اما اگه با شرکت های دولتی کار کنید یکسری شون جز شروط هست که باید فریمورک اختصاصی خودتون رو داشته باشید.
در آخر وقتی که می خواهید بزارید برای cms یا فریمورک خودتون نزارید اینکار رو نکنید، وقتتون رو بزارید فریمورک های آماده استفاده کنید و پکیج های مورد نیاز خودتون رو بنویسید که تو پروژه های مختلف این پیکیچ ها رو فقط با composer نصب کنید استفاده کنید.
@one_programmer

https://telegram.me/one_programmer
تو پروژه های بزرگ نقش دیتابیس خیلی به چشم میاد, تو این جور پروژه ها چشم باز میکنی میبینی حداقل 50 تا جدول داری در حالی که پروژه اونقدر ها هم بزرگ نیست فقط دو تا سایته با یه سرویسی که داره به یه برنامه اندروید سرویس میده.
اکثر جداول هم با هم ارتباط دارن, این موقع اگه دیتابیس طراحی اصولی نداشته باشه و ایندکس گذاری درستی صورت نگرفته باشه دیتابیس کند میشه, حالا اگه کدنویسی درستی هم صورت نگرفته باشه دیگه بدتر میشه.
برای طراحی دیتابیس پیشنهاد میکنم با Visual Paradigm ابتدا دیتابیس رو طراحی کنید کامل جداول, ایندکس ها و روابط , بعد طراحی این نرم افزار بهتون خروجی نوع Engin دیتابیستون رو بهتون میده مثل Mysql , Sql Server و.... , خروجی به صورت کد Sql هست که با اجرا کردن آن همه جداول کامل ایجاد میشن.
سعی کنید نوع فیلد هاتون رو درست انتخاب کنید اگه فیلدی دارید که مطمئن هستید تا 120 یا 255 بیشتر نمیرسه از نوع int نگیرید, از نوع tinyint بگیرید و از این موارد.
داخل جداول ستون هایی که بیشترین سرچ رو میزنید ایندکس گذاری کنید, سرعت واکشی داده های به طور وحشتناکی بالا میره, برای مثال کوئری که 1 دقیقه طول میکشید انجام بشه با ایندکس گذاری درست زیر 1 ثانیه میاد. در مورد ایندکس باید حواستون باشه که زیاده روی در ایندکس گذاری باعث کند شدن هم میشه.
پیشنهاد میکنم مقاله ایی که در آخر بیان میکنم رو در مورد ایندکس گذاری بخونید.
http://www.dotnettips.info/post/2336

مقوله بهینه سازی دیتابیس مقوله بزرگی هست, افرادی که تو این زمینه تخصوص دارن با یک مشاوره مبالغ زیادی رو دریافت میکنن.

@one_programmer
https://telegram.me/one_programmer
معماری میکروسرویس
برنامه های بزرگ سمت سرور که با تعداد خیلی زیاد از کاربر سرو کار دارند, داده های زیادی هم ردو بدل میکنن,
غیر از اینکه باید درگیر پاسخگویی به کاربر و فراهم کردن وب سرویس ها برای پلت‌فرم های مختلف باشند. این برنامه ها را باید بتوان به سادگی تغییر یا رشد داد.
یک معماری پیشنهادی برای این منظور معماری میکرو سرویس است. برای شناختن این معماری ابتدا نیاز است معماری Monolithic را بشناسید. این معماری, همه بخش ها از جمله پرداخت انلاین, سیستم مدیریت کاربران, Search , اعلان ها و... همگی در یک واحد منفرد جمع شده اند. برای مثال همه این بخش ها داخل یک پروژه و روی یک سرور در حال پاسخگویی هست.
مشکلاتی که این نوع معماری داره اینه که
- هنگامی که ترافیک سایت بالا بره نیازه که قسمت های مختلف روی سرور های دیگر توزیع شوند.
- همه قسمت های بر اساس یک تکنولوژی نوشته شده اند.
- تغییر یک قسمت باعث تغییر در قسمت های مختلف میشه.
- وابستگی قسمت های مختلف به هم برای مثال یک قسمت از کار افتاده باشد ممکن از قسمت های دیگر از کار بیافتد.
و اما معماری میکرو سرویس برای نجات ما از این مشکلات است, تجربه شخصی بنده نشون داده که این معماری اگر پروژه کمی بزرگ بشه بسیار کارآمد هست.
جایی که کار میکردم پروژه اینفدر بزرگ شده بود همه این مشکلات هم همراش بود, فردی که به عنوان مشاور اون زمان به ما ملحق شد این معماری رو معرفی کرد.
این معماری میگه که قسمت های مختلف باید از هم جدا بشه, برای مثال سرویس های مختلف مثل سیستم پرداخت, سرویس اعتبارسنجی کاربران , سرویس جستجو و... .
هر قسمت به صورت یک سرویس نوشته میشه, حال قسمت های مختلف برای استفاده از این سرویس ها با درخواست HTTP از آن استفاده میکنن.
برای مثال اگر هر سرویسی برای مثال سایت یا برنامه اندروید و... اگر نیاز به جستجو داشت سرویس جستجو رو صدا میزنه این سرویس نتیجه را برمیگرداند.
یا سیستم پرداخت رو مینویسیم که با انواع بانک کار کند حالا هر سیستمی که نیاز به پرداخت دارد این سرویس را صدا میزند.
یا سرویس جستجو رو الآن یا لوسین نوشتم فردا به راحتی میتوانیم عوض کنیم با elastic بنویس چون یک سرویس جداست و به بقیه سرویس ها کاری ندارد.
خوبی این معماری این هست که هر سرویس میتواند به صورت جداگانه توسعه داده شود و ربطی به قسمت های دیگر ندارد.
- سرویس ها میتوانند از تکنولوژی های مختلف استفاده کنند PHP, ASP , Ruby,...
- هر سرویس میتواند به صورت جداگانه توسعه داده شود
- مانیتور کردن و تغییر هر سرویس خیلی ساده هست.
- همه سرویس ها میتوانند از بقیه سرویس ها استفاده کنند.
- به راحتی میتوان سرویس اضافه کرد یا تغییر در سرویس داد.
و در آخر معماری میکرو سرویس یکسری سختی ها هم دارد
- از آنجا که ارتباط سرویس ها با HTTP هست کمی سربار دارد ولی با توجه به مزیت هایی که دارد ارزش این سربار را دارد (بنده از میکرو سرویس تو پروژه بزرگ استفاده کردم اونقدر ها سرباز نداشت تو سرور های داخلی)
- روند توسعه یک مقداری کند تر پیش میره
- باید رمز نگاری و امنیت داده ها بین سرویس ها حفظ بشه
- پایگاه داده
اگر قرار باشد که هر سرویس پایگاه داده خود را داشته باشد کار کمی سخت میشود برای مدیریت transaction و.. برای همین معمولا از یک دیتابیس مرکزی استفاده میشود.
@one_programmer

https://telegram.me/one_programmer
معماری میکرو سرویس
سرویس ها میتوانند با هم ارتباط داشته باشند.
@one_programmer

https://telegram.me/one_programmer
امروز میخام یه سری نکات و سایت جالب معرفی کنم. ما همیشه یه بحثی که تو شرکت داشتیم این بود که هنگامی که داریم یه وب سرویس مینویسیم, استاندارد ما برای نام گذاری, نحوه نشان دادن مقدار و نوع نوشته (uppercase, camelcase,pascalcase,..) کدوم این موارد درسته.
برای مثال با اندروید کار شرکت همیشه بحث داشتیم که خروجی فیلدی که از نوع ثابت و Enum هست چطوری نوشته بشه یا مقدارش چی باشه Int باشه یا string. اسم فیلد های چطوری باشه camelcase باشه یا pascalcase باشه.
میخام سایتی رو بهتون معرفی کنم که همه این مشکلات رو برطرف میکنه
گوگل یک راهنمای در این زمینه دارد.
https://google.github.io/styleguide/jsoncstyleguide.xml
کامل توضیح داده که برای مثال اسم فیلد ها camelcase باشد, یا مقادیر Enum به صورت رشته و uppercase باشه و خیلی موارد دیگه
توصیه میکنم کامل بخونید تا با استاندارد های نام گذاری و نحوه خروجی دادن به صورت json کامل آشنا بشید.

@one_programmer

http://telegram.me/one_programmer
امروز ۲۲ شهریور (۱۲ سپتامبر) مطابق با ۲۵۶ امین روز سال روز جهانی برنامه نویس نام دارد.
روز برنامه نویس رو به همه برنامه نویس های شریفی که با کیبورد جهان بهتری برای دیگران می‌سازند تبریک میگیم.
"Mohsen"

@one_programmer

http://telegram.me/one_programmer
This media is not supported in your browser
VIEW IN TELEGRAM
وقتی 1 هفته اس داری روی یه باگ کار میکنی و انگار نه انگار 😂

@one_programmer

http://telegram.me/one_programmer
This media is not supported in your browser
VIEW IN TELEGRAM
اگه گوگل یه آدم بود...
این ویدیو طنز بیش از 50 میلیون بار دانلود شده!
حتما ببینید
@one_programmer

http://telegram.me/one_programmer
This media is not supported in your browser
VIEW IN TELEGRAM
@one_programmer

http://telegram.me/one_programmer
چگونه سرعت دانلود کامپیوتر خود را افزایش دهیم 😂
بچه های تیم اجرایی روز آزادی نرم افزار
@one_programmer
ارائه جادی تو روز آزادی نرم افزار
@one_programmer
شما هم وقتی توی یه کد به مشکل میخورین وقتی حلش می کنید و کلی خوشحال میشین از پشت سیستم بلند میشید راه میرید و فکر میکنید خیلی خفنید؟؟
anonymous poll

آره – 119
👍👍👍👍👍👍👍 85%

نه – 21
👍 15%

👥 140 people voted so far.
This media is not supported in your browser
VIEW IN TELEGRAM
@one_programmer

وقتی دارم با کارآموز روی پروژه کار میکنم و به حرفم گوش نمیده😂😂😂