<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های سعید قلی زاده</title><link>https://virgool.ir/feed/@gholizadeh.saeed</link><description>علاقه مند به یادگیری و آموزش. دارای تجربه کاری در زمینه تحلیل. طراحی و پیاده سازی نرم افزارهای سازمانی با استفاده از جاوا و php</description><language>fa</language><pubDate>2026-11-10 20:38:22</pubDate><image><url>https://files.virgool.ir/upload/users/662253/avatar/BI9Stm.jpeg</url><title>سعید قلی زاده</title><link>https://virgool.ir/@gholizadeh.saeed</link></image><item><title>مسیر مطالعه و مصاحبه برنامه نویسی</title><link>https://virgool.ir/CodeLovers/مسیر-مطالعه-و-مصاحبه-برنامه-نویسی-luxd0bddl5i2</link><description>سلام، در این مقاله به صورت مختصر راجع به ترسیم مسیر مطالعه شخصی زبانهای برنامه نویسی نکاتی را بیان خواهیم کرد.همچنین نکاتی نیز وجود دارد برای کسانی که میخواهند مصاحبه کنند و یا مصاحبه شوند.شاید به نظرتان این دو مورد زیاد با هم ارتباطی نداشته باشند اما سعی کردم از نقطه نگاهی این مقاله را بنویسم که برای هر سه مورد مناسب باشد.نکته حائز اهمیت این است که موارد مطرح شده تجربه شخصی است و از استاندارد یا روش خاصی به طور آگاهانه طبعیت نمی کند. البته که استانداردهای زیادی وجود دارد که باید برای رسیدن به روشی صحیح برای سازمان آن ها را مطالعه کرد و در کنار آن از تجارب دیگران بهره برد تا روشی بومی و مناسب با توجه به شرایط سازمان بکار گرفته شود.نکته دوم این مقاله در خصوص شغل های راهبر توسعه یا توسعه دهنده است. در این لینک بخشی از شغل های فنی مرتبط با نرم افزار توضیح داده شده که البته برای برخی از شغل های دیگر نیز میتوان این مقاله را تعمیم داد اما تمرکز این مقاله برای توسعه دهندگان است.اصولا برای قرار گیری در یک تیم فنی سه موضوع مطرح می گردد:تیپ شخصیتی تیم و امکان تعامل و تعادل بین افراد با توجه به نوع تیم و هدف آنمهارت های نرم با توجه به موقعیت شغلی مانند مدیر توسعه، راهبر، توسعه دهنده. مهارت های نرم افزاریتیپ شخصیتی:برخی شرکت ها از آزمون های مرتبط با تشخیص تیپ شخصیتی استفاده می کنند اما قسمت خنده دار این تست این است که این تست در مرحله ای دریافت می شود که تیم و موقعیت شغلی شما در فرایند مصاحبه مشخص شده. این تست روشی برای درک این نیست که شما برای شرکت مناسب هستید یا خیر و اصلا درست و غلط ندارد بلکه برای تعادل افراد تیم استفاده می شود البته تعادل لزوما به معنای حد وسط نگه داشتن هم نیست گاهی با توجه به هدف یک تیم مثل تیم تحلیل یا تیم توسعه لازم باشد سمت و سوی تیم بیشتر سمت یک تیپ شخصیتی مشخص باشد. پس اگر سازمانی تنها در یک فرایند منابع انسانی این تست را از شما می گیرد در حالی که شما انتخاب شده اید و از قبل جای شما مشخص است زیاد توجهی به آن نداشته باشید. اما اگر در مراحل اولیه است نگاهی مثبت به آن داشته باشید چرا که اگر فکری پشت آن باشد مسلما در خصوص هدایت تیم به سمت چالش کمتر با توجه به اهداف آن است و از آن استقبال کنید. البته برخی سازمان ها این تست ها را دارند.در یکی از استارت آپ ها بنده به عنوان لید تیم فنی و در سالی که نیروی کار به صورت بحرانی نبوده و امکان انتخاب وجود داشت. برای اینکه بتوانم تیمی مناسب داشته باشم و از آنجایی که تیم منابع انسانی استقبالی از این مورد نداشت با یک سوال ساده سعی میکردم به صورت کلی طیف شخصیتی فرد را حدس بزنم مثلا &#34;اگر به گذشته برویم و شما بخواهید بین دو شغل کشاورز و شکارچی یکی را انتخاب کنید انتخاب شما کدام بود؟&#34; برای برخی در یک مصاحبه فنی این سوال تمسخر آمیز و بی ربط بود اما در طول مصاحبه و با سوالات بیشتر می توانستم شناخت بیشتری از سمت و سوی شخصیتی شخص پیدا کنم. این موضوع با توجه به شرایط و امکانات می تواند تحت تاثیر قرار گرفته و حتی کلا از فرایند مصاحبه حذف شود.مهارت های نرم:شاید شنیده باشید برخی سازمان ها ممکن است سعی کنند شما را عصبانی کنند. بنده اصلا موافق بدقولی و بدرفتاری در مصاحبه نیستم و این روش را برای دریافت بخشی از مهارت های نرم افراد نمی پذیرم و اگر کسی بخواهد با بی احترامی به چنین چیزی برسد قطعا فارغ از هر نتیجه ای جواب بنده منفی خواهد بود.اما در طول مصاحبه سوالاتی می تواند در این خصوص باشد مثلا مسئله ای مطرح شود که در خصوص رهبری یک تیم باشد و بخواهند پاسخ و راه حل شما را در این موضوع بدانند مثلا بفهمند شما در خصوص مراجعه افراد تیم به شما در خصوص موضوعی خاص چه رفتاری خواهید داشت.اگر خواهان موقعیتی مانند مدیر توسعه یا راهبر توسعه هستید حتما باید چنین مهارتی سنجیده شود تا هم خودتان موفق باشید و هم تیم کمترین چالش را تجربه کرده و به سمت تعالی و آرامش خود حرکت کندمهارت های نرم افزاری:هدف اصلی این مقاله برای کسانی که میخواهند برای خود سیر مطالعاتی تنظیم کنند یا برای مصاحبه فنی آماده شوند همین بخش است برای اینکه فارغ از هر زبانی که در آن مشغول هستید این مقاله بتواند به شما کمک کند سعی کردم یک دسته بندی کلی در مسیر شغلی توسعه نرم افزار را در ذهن ترسیم کنم، در این صورت می توان بهتر تصمیم گرفت.برای بررسی تیپ شخصیتی اعضای یک تیم. یا بررسی نقاط قوت یک ورزشکار یکی از نمودارهایی که مورد استفاده قرار میگیری نمودار تار عنکبوت است.با یک نگاه ساده به این نمودار می توانید کلیت و میل یک شخص پیرامون موضوعات مختلف را سنجید و با توجه به هدف با آنچه مورد انتظار است مقایسه کنیدشکل زیر یک دسته بندی پیشنهادی در خصوص شغل توسعه است که من در مصاحبه ها از آن استفاده می کنم و با توجه به موقعیت شغلی. سطح مهارت فرد آنچه از نتیجه مصاحبه انتظار دارم را از قبل ترسیم کرده و بعد از مصاحبه فرد نیز نتیجه را روی شکل مورد انتظارم ترسیم می کنم. و با توجه به همپوشانی دو مورد تصمیم نهایی را می گیرمهمچنین برای مطالعات شخصی نیز تقریبا چند بار این روش را پیش گرفتم مثلا در خصوص یک موقعیت شغلی که در آینده انتظار رسیدن به آن را داشتم آیتم های مورد انتظار را در چنین نموداری ترسیم کرده و حداقل لازم را ترسیم کرده و سعی کردم به سمت همپوشانی بیشتر نمودار پیش بروم.شما می توانید با توجه به نیاز خود نمودار را تغییر دهید. فریم ورک مورد انتظار خود را قرار دهید یا اگر اصلا برای شما مهم نیست آن را حذف کنید و یا به صورت کلی نگه دارید مثلا در نظر بگیرید اگر در هر فریم ورکی به این رتبه رسید برای ما کافی است.توضیح شاخه های پیشنهادی:زبان برنامه نویسی، ابزارهای اصلی:یکی از مهمترین بخش ها برای سنجش افراد در خصوص موقعیت شغلی توسعه نرم افزار میزان مهارت فرد در زبان برنامه نویسی فارغ از فریم ورک و کتابخانه است. گاهی افراد بسیار سریع کار با فریم ورک ها را شروع کرده و از خود زبان غافل می مانند و با ادامه این روند در مسیر توسعه شخصی نیز به مرور اهمیت این موضوع را فراموش می کنند و این ضرر به خود شخص و سازمان خواهد بود نقاط ضعف خود را در این شاخه بپوشانید و در آن عمیق تر شوید. معمولا در مصاحبه های مرتبط با جاوا در خصوص ساختمان داده ها در جاوا سوالاتی پرسیده می شود و هدف این دست سوالات همین موضوع است. حتی اگر فقط در حال توسعه یک کسب و کار بدون چالش هستید انتظارتان را از این بخش کم کنید اما آن را حذف نکنید. یکی از آیتم های نشان دهنده میزان تلاشگری فرد است. یکی از نشانه های باز بودن ذهن نرم افزاری شخص است و از هر جهت می تواند حائز اهمیت باشد.فریم ورک، کتابخانه ها:امروزه در بسیاری از سازمان ها برای توسعه از ابزارهای خاصی استفاده می شود و انتظار می رود افرادی که جذب می شوند با آنها حداقل آشنایی داشته باشند یا به آنها مسلط باشند. در طول زمان و پیدایش فریم ورک ها و کتابخانه های فراوان برای زبان های مختلف چالش های بسیاری در پذیرفتن و بکار گرفتن آن ها به وجود آمده.در یک توضیح کلی این هم یک موضوع مدیریتی است و هم فنی. گاهی افراد برای فرار از مطالعه ابزار جدید یا از دست دادن دانش پایه ای که دارند در اثر عادت به این ابزارها و استفاده نکردن از دانش شخصی یا علاقه به ابزار خاصی شروع سنگ اندازی و اصرار به یک ابزار خاص می کنند. و بالعکس ممکن است برای طمع فراگیری هر چیز جدید سازمان مجبور به مهاجرت های پی در پی شود.در هر صورت روند حرکت سازمان ها به سمت استفاده از این ابزارها برای کاهش هزینه توسعه و ارتقا و شکل گیری دستخط یکسان برای انتقال آسانتر و جذب سریع تر نیروی کار است و باید به این سمت حرکت کرده و آن را پذیرفت. شی گرایی. اصول و الگوهای طراحیاز دیگر موارد چالشی که در طول توسعه زبان های برنامه نویسی بسیار مورد توجه قرار گرفته استانداردهای مختلف فارغ از زبان برنامه نویسی است که افراد مختلف در طول سال ها تجربه مدیریت شرکت های نرم افزار به آن رسیده و با نشر آن سعی در ارتقاء و رساندن این تجارب در سطوح آموزشی بوده اند تا افراد جدیدی که جذب می شوند نیز این تجربه ها را با خود داشته باشند.سعی کنید از این تجربیات در کار غافل نشوید و در جای مناسب از آن استفاده کنید و در سوالات مصاحبه افراد را بسنجید و در جهت کاهش بدهی فنی و ارتقاء سطح نرم افزاری جامعه آن را فراگیرید و فرا دهید و اهمیت آن را درک کنید.همچنین مسائل مربوط به مهندسی نرم افزار نیز در این بخش قابل بررسی است.قدرت تحلیل و حل مسئلهاگر در حال توسعه شخصی هستید این مورد فقط با تمرین قابل کسب است. کسب و کارها و پروژه های متخلف را تصور کنید و سعی در تحلیل آن کنید. سعی کنید موجودیت ها و روابط آن را به خوبی درک کنید و با کسی که تجربه بهتری دارد مطرح کنید تا ایرادات طراحی خود را درک کنید و به مرور قدرت تحلیل و حل مسئله خود را تقویت کنید. در شرکت مسائل مختلف را جست جو و راه حل های ارائه شده را به معلومات خود اضافه کنید و حدقل ذهنی (اگر راه حل شما برای افراد بالادست مهم نیست) سعی در ارائه راه حل بهتری دهید.اگر در حال استخدام هستید سعی کنید سوالی در خور (نه مشکلات خودتان - مشکلاتی که راه حل آن را دارید) در فرایند مصاحبه بپرسید و افراد را در این حوزه بسنجید.کار با داده ها و پایگاه دادههرچند امروزه استفاده از orm ها کار را بسیار راحت کرده اما کافی نیست. بسیار پیش میاید که در نقاط حساس باید دست به کار شوید و دستور بهینه تری را آماده کنید و اگر به استفاده مستقیم از پایگاه داده عادت کرده اید تجربه استفاده از orm برای شما بسیار خوب خواهد بود با آن کنار بیاییدمعماری نرم افزاراین مهارت از جهت موقعیت شغلی کمی خاص شده و لزومی ندارد در موقعیت شغلی توسعه رتبه زیادی کسب شود. اما برای راهبر توسعه و یا مدیر توسعه نیاز است تجارب مرتبط و موفقی داشته باشیدکسب تجربه در این حوزه نیاز به زمان و تلاش زیاد دارد. از مستند سازی گرفته تا  شناخت، پیش بینی و تصمیم گیری در این حوزه.نیاز به شناخت ابزارها و روشهای مختلف، شناخت ظرفیت و بهترین مقعیت مناسب برای استفاده از آن ها را دارید که در طول زمان و کسب تجربه در پروژه های مختلف همراه مطالعه مستمر بدست خواهد آمد.امنیتتمامی کسانی که در حوزه توسعه نرم افزار مشغول هستند لازم است حداقل بخش هایی عمومی و کلی در خصوص امنیت را بدانند. حملات اصلی و مرسوم و روش های پیشگیری و اینکه آیا ابزاری که استفاده می کنند تا چه از و از چه حملاتی جلوگیری لازم را به عمل آورده و یا اینکه چطور بتوانند بفهمند ابزاری که استفاده می کنند آیا دارای گزارش آسیب پذیری است یا خیر و در چه نسخه ای برطرف شده و کدام نسخه برای استفاده مناسب تر است.</description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Mon, 28 Mar 2022 15:03:50 +0430</pubDate></item><item><title>معرفی 8 کتاب جاوا برای مطالعه</title><link>https://virgool.ir/@gholizadeh.saeed/معرفی-8-کتاب-جاوا-برای-مطالعه-rvys6vtgpji8</link><description>سلام. امروز قصد دارم 8 کتاب از نویسنده های معروفی رو معرفی کنم که ارزش خوندن رو دارن:یک: Java 8 Lambdas by Richard Warburtonدرباره نویسنده: ریچارد واربرتون یک کارشناس مجرب در حل مشکلات فنی پیچیده است و دارای مدرک دکترا در رشته علوم کامپیوتر از دانشگاه وارویک است. به تازگی در کار تجزیه و تحلیل داده ها در high-performance computing مشغول بوده است. او رهبر جامعه جاوا در لندن است و پروژه Adopt-a-JSR را برای Lambda و date and time در جاوا 8 و رویداد Openjdk Hackdays را سازماندهی کرده است. ریچارد همچنین سخنران معروف کنفرانس است و در کنفرانس های JavaOne ، DevoxxUK و JAX London سخنرانی کرده است.دو: Java in a Nutshell by David Flanagan and Benjamin J. Evansدرباره نویسندگان:بنیامین جی. ایوانز بنیانگذار jClarity ، سازمان دهنده گروه کاربران جاوا در لندن و عضو کمیته اجرایی JCP است. برنده افتخاری Java Champion و JavaOne RockStar. او اغلب سخنرانی های عمومی در زمینه جاوا، برنامه نویسی همزمانی و موضوعات مرتبط ارائه می دهد. دیوید فلانگان نیز یک مهندس ارشد نرم افزار در Mozilla است. سه: Java Performance: The Definitive Guide by Scott Oaksدرباره نویسنده: اسکات اوکس یک معمار در اوراکل است که بر عملکرد نرم افزار middleware اوراکل تمرکز دارد. قبل از پیوستن به اوراکل ، وی سالها در Sun Microsystem کار کرد و در بسیاری از زمینه های فنی از جمله هسته SunOS ، برنامه نویسی شبکه، Windows (RPC) و OPEN LOOK دستاوردهایی کسب کرده است. در سال 1996 ، اسکات evangelist جاوا Sun شد و در سال 2001 به تیم عملکرد Sun پیوست. از آن زمان او بر بهبود عملکرد جاوا تمرکز کرده است. علاوه بر این ، اسکات چندین کتاب در انتشارات O&#39;Reilly منتشر کرده است.چهار: Think Java by Allen B. Downeyدرباره نویسندگان: آلن داونی استاد علوم کامپیوتر در کالج Olin است. او در کالج Wellesley، کالج Colby و دانشگاه برکلی تدریس کرده است؛ دارای مدرک دکتری علوم کامپیوتر از دانشگاه برکلی و لیسانس و فوق لیسانس از موسسه فناوری ماساچوست است. کریس میفیلد نیز استادیار علوم کامپیوتر در دانشگاه جیمز مدیسون است. او به آموزش کامپیوتر و پیشرفت شغلی اختصاص دارد. او دارای دکترای علوم کامپیوتر از دانشگاه پردو و کارشناسی علوم کامپیوتر و آلمانی از دانشگاه یوتا است.پنج: Modern Java Recipes by Ken Kousenدرباره نویسنده: کن کوسن مشاور و مدرس آموزشی مستقل، رئیس شرکت فناوری اطلاعات کوسن Spring, Hibernate, Groovy, Grails و سایر زبان ها و چارچوب ها را مطالعه کرده است؛ برنده جوایز JavaOne RockStar 2013 and 2016  فارغ التحصیل از MIT و دارای مدرک دکتری از دانشگاه پرینستون است.شش: Mastering Concurrency Programming with Java 9 by Javier Fernández Gonzálezدرباره نویسنده: خاویر فرناندز گونزالس معمار نرم افزار ، با بیش از ده سال تجربه در تحقیق و توسعه جاوا ، دارای تجربه در J2EE، چارچوب Struts و استفاده از جاوا برای توسعه برنامه های پردازش داده در مقیاس بزرگ است. هفت: Modern Java in Action by Raoul-Gabriel Urma, Mario Fusco, Alan Mycroftرائول-گابریل اورما، دکترای علوم کامپیوتر، دانشگاه کمبریج ، مهندس نرم افزار، مدیر عامل فعلی کمبریج اسپارک. در شرکت های بزرگی مانند Google ، eBay ، Oracle و Goldman Sachs کار کرد و در بسیاری از پروژه های کارآفرینی شرکت کرده است. فعال در جامعه فنی ، اغلب مقاله های فنی می نویسید ، و بارها برای سخنرانی فنی در کنفرانس های بین المللی دعوت شده است. ماریو فوسکو (ماریو فوسکو) ، مهندس نرم افزار ارشد Red Hat ، مسئول توسعه اصلی JBoss rule engine Drools. وی با تجربه ای غنی در توسعه جاوا ، توسعه پروژه های سطح سازمانی را در شرکت های رسانه ای ، بخش های مالی و سایر صنایع رهبری کرده است. آلن مایکرافت علاقه زیادی به functional programming و DSL دارد و یک کتابخانه منبع باز با نام lambdaj ایجاد کرده است. استاد محاسبات در آزمایشگاه کامپیوتر دانشگاه کمبریج ، عضو کالج رابینسون ، دانشگاه کمبریج ، بنیانگذار انجمن اروپایی زبان ها و سیستم های برنامه نویسی ، بنیانگذار و مدیر بنیاد Raspberry Pi او حدود 100 مقاله تحقیقی منتشر کرده و بیش از 20 پایان نامه دکتری را زیر نظر داشته است. تحقیقات وی بر روی زبان های برنامه نویسی و معناشناسی، بهینه سازی و پیاده سازی آنها متمرکز است. او با صنعت ارتباطات نزدیکی دارد ، زیرا در تعطیلات دانشگاهی در آزمایشگاه های AT&amp;T و Intel کار کرده است و Codemist را تأسیس کرده است، که کامپایلر اصلی ARM C که Norcroft است را طراحی کرده است.هشت: Introduction to JVM Languages by Vincent van der Leunوینسنت وندر لیون مهندس Full stack، متخصص پایگاه داده اوراکل. او برنامه نویسی را در سن 8 سالگی آغاز کرد ، با چندین زبان و سیستم عامل آشنا است و وبلاگ JVM Fanboy را مدیریت می کند. در حال حاضر در CloudSuite ، شرکتی که به راه حل های تجارت الکترونیک مدرن اختصاص داده شده است ، کار می کند.البته کتب بسیار دیگه ای هم هست که حتما ارزش خوندن دارند و البته اگر کسی تجربه ای خوب از هر کتاب دیگه ای داره می تونه در کامنت اسم اون رو بنویسه</description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Mon, 08 Nov 2021 19:43:32 +0330</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت آخر</title><link>https://virgool.ir/CodeLovers/من-می-خواهم-برنامه-نویس-شوم-قسمت-آخر-hojgbqvq0zz9</link><description>سلام، تا قسمت نهم راجع به شغل برنامه نویسی و چالش ها، اصطلاحات و مشاغل آن صحبت کردیم. در کنار هم چند زبان را بررسی کردیم تا با توجه به هدفمان یکی از این زبان ها را انتخاب کنیم، برخی درس های مهندسی کامپیوتر را بررسی کردیم و دلایل وجود آنها و اینکه چه کمکی به ما می کنند و شامل چه محتوایی هستند. همچنین دو کد بسیار ساده را اجرا کردیم تا ترسی از شروع کار نداشته باشیم و همه اینها مقدمات لازم را برای شما فراهم کرده است که بتوانید شروع خوب و محکمی داشته باشید و بتوانید آینده ای روشن را از مسیرتان متصور شوید.من مناسب این کار هستم؟عکس این مقاله مربوط به لئوگرند است. یک بی خانمان که به جای کمک نقدی حضور رایگان در یک کلاس برنامه نویسی را قبول کرد و یک لپ تاپ دست دوم ارزان هدیه گرفت و با توسعه یک برنامه موبایل زندگی جدید را شروع کرد.اگر کامپیوتر یا لپ تاپی دارید که روشن می شود و اینترنت (اکنون در حال خواندن این مقاله هستید) از لحاظ فنی هیچ مانعی برای پیشرفت شما وجود ندارد مگر مسائل شخصی که باید آنقدر انگیزه داشته باشید که بتواند آن مسائل را نیز مدیریت کند. دنیای فناوری اطلاعات دریای عمیقی است. با قدم گذاشتن در این دنیا هر روز بیشتر متوجه آن خواهید شد. وقتی از برنامه های ساده شروع می کنید. مشاغل مختلف را تجربه میکند. ابزارهای متنوع و بزرگ و کوچک. چالش های بزرگ و کوچک و مسیری که شرکت های بزرگ در رسیدن به اهدافشان طی کرده اند و به رایگان در اختیار شما گذاشته اند و شما باید آن ها را پشت سر گذاشته و به مسائلی که اکنون در گیر آن هستند فکر کنید و خود را به آنها برسانید.ملاک سوال فوق خود شما هستید. اگر انگیزه دارید و صبر پس می توانید. اما اگر علاقه ای ندارید خیر. به دنبال علاقه خود بروید (البته خود من قبل از شروع فکر میکردم علاقه ای ندارم پس بد نیست امتحان کنید)واقعیت های بیشتردر این دریای بزرگ که وارد شوید با ابزارهایی روبه رو می شوید که برخی با تسلط بر آن ها شاید ده ها سال است با آن برای خود شغلی دست و پا کرده اند (فقط یک از ابزارها در این دریای بی کران) با زبان هایی که از رده خارج شده اما هنوز در حال استفاده در سازمان های بزرگ است و شاید تا ده ها سال دیگر نتوان پروژه آن را جایگزین کرد. اما گاهی نیز مجبورید ابزاری که شرکتی بزرگ مانند گوگل پشت آن است و با سختی دوره آن را گذرانده اید به دلیل عدم استقبال جهانی کنار بگذارید و فراموشش کنید.گاهی ابزاری را یاد میگیرید و تب ابزاری دیگر در بازار تشکیل می شود و شرکت های بسیاری را می بینید که در آگهی های استخدام دنبال آن هستند. پشتوانه این تصمیم گاهی علاقه فردی برای تجربه آن است و مطالعه چهار مقاله مقایسه مثلا سرعت یک تکنولوژی نسبت به دیگری و گاهی نیز افرادی را می بینید که حاضر به یادگیری و چالش های تکنولوژی های جدید نیستند و به حاشیه امن خود چسبیده و با همه چیز مخالفت می کنند در حالی که المان های بیشتری باید لحاظ شود و عاقلانه تر تصمیم گرفت.خلاصه فراز و نشیب دارید. هم فنی و هم غیر فنی. ممکن است برنامه ای بنویسید و در محیط عملیاتی به مشکل رو به رو شوید. شب عید برای همه شب عید نیست. تصور کنید مشکلی در تراکنش های یک بانک پیش بیاید که مشکل نرم افزاری یا مشکل معماری باشد. نمی توان آن را رها کرد که من مرخصی هستم پس به من ربطی ندارد. البته همیشه هم اینطور نیست. من سال هایی کار جدی و تا دیر وقت داشتم و سال هایی کار روتین و برنامه های معمول. گاهی مشتریانی دارید که کاملا نسبت به آنچه از شما می خواهند آگاه هستند و همه چیز طبق روال پیش می رود و گاهی مشتریانی دارید که خود نیز نمی دانند چه می خواهند. اگر جلو تر از مشتریان حرکت نکنید نرم افزارتان میشود پر از وصله پینه و ... و اگر فاصله تان از مشتری بیش از حد زیاد شود شاید کار ساده ای که با یک برنامه کوچک می توانست جمع شود یک پروژه ناتمام شود و نارضایتی هر دو طرف در حالی که ذی حق هستند. شما ادعا دارید که بهترین سیستم را در حال توسعه دارید و او ادعا می کند که زمان و هزینه زیادی برای یک کار ساده از او گرفته اید.همکاران چگونه اندبا هر گروهی ممکن است رو به رو شوید. پر حرف و مدعی که پشتوانه کلامشان مقاله است و افراد پربار و سر به زیری که پشتوانه کلامشان تجربه است. شاید بهترینشان میان این دو گروه باشد. افرادی که دنبال حاشیه هستند و افرادی که دنبال تجربه و علم هستند. افرادی که دنبال سمت شغلی هستند و افرادی که دنبال یادگیری و پیشرفت هستند.شرکت ها چگونه اندبا شرکت های مختلفی برخورد خواهید داشت. دولتی، خصولتی، خصوصی، خارجی، استارت آپ ها و ... برخی برای پرداخت حقوق کمتر تا می توانند شما و تجربه شما را ناچیز می شمارند. برخی ممکن است بسیار خوش برخورد باشند اما نیاز باشد شما سخت کوشی بیشتری به خرج دهید. برخی پروژه های وهمی دارند و برخی پروژه هایی که اکنون در محیط های عملیاتی است و بسیار حساس. برخی با یک فوتبال دستی تصور گوگل دارند و برخی با ترفندهایی حقوق کم می دهند و همان حقوق را در پوست پاداش و ... با منت به شما می دهند و مدعی هستند اگر دریافتی خود را در سال حساب کرده و تقسیم بر دوازده کنید این حقوق شماست !!!در کل پیشنهاد می کنم حقوق خود را بدانید. شرکت باید برای شما بیمه رد کند حتی در دوره آزمایشی. بیشتر از سه ماه دوره آزمایشی منطقی نیست و اگر بعد از آن قراردادی کمتر از یک سال ببندند این رفتار جالب نیست و بهتر است در نظر بگیرید و در محاسبات خود قرار دهید. شرکت های دولتی که فعلا هیچ.شرکت های خصوصی و خارجی (غیر از استارت آپ) تجربیات خوبی خواهید داشت و دیسیپلین و استانداردهای کاری را خواهید دید. معمولا همه چیز مکتوب است و هر چیز روال مشخصی دارد. سلسله مراتب رعایت شده و همه چیز مشخص است که محاسن و معایب خود را دارد.شرکت های خصولتی تلاش می کنند مانند شرکت های خصوصی باشند (سعی می کنند !) البته ممکن است یک روز بیاید شرکت ببینید 12 نفر در سطوح مدیریتی استعفا داده و 12 نفر جدید آمده اند و همه چیز از صفر شروع می شود (البته اگر با آن 12 نفر بر نخورده و شما هم جا به جا نشوید).در استارت آپ ها دنبال این چیزها نباشید شما یک جنگجوی چریکی هستید و برای هر چیز باید راهی پیدا کنید و اینجا جایی است که پر از چالش و هیجان است. اما محاسن و معایب خود را دارد.اگر می خواهید تبدیل به یک مرده متحرک شوید در آزمون استخدامی شرکت کنید و وارد یک شرکت دولتی شوید اما اگر روحیه ای غیر از این دارید با توجه به روحیه خود انتخاب کنید.حقوق شمامی توانید در اداره کار قوانین را بخوانید اما ساعات کاری باید 44 ساعت در هفته باشد (برخی شرکت ها نیم ساعت زمان ناهار را هم به آن اضافه می کنند که البته احمقانه است اما به هر حال ممکن است باشد) پیشنهاد نمیکنم به هیچ وجه بیشتر از آن را بپذیرید. بیش از آن باید اضافه کاری باشد. برخی شرکت ها اضافه کار اجباری دارند و برخی سقف اضافه کار (در محاسبات خود و با توجه به شرایط خود بررسی کنید و با دقت تصمیم بگیرید)برخی شرکت ها نیز اضافه کار ندارند (باید رنج حقوقی بیشتری داشته باشند و حتما در کنار حقوق کارانه نیز داشته باشند چون به هر حال شما گاهی مجبور خواهید بود که ساعتی بیشتر کار کنید) در این مورد هم دقت کنید اگر به دلیل فورس پروژه بیشتر از حد از شما کار بخواهند با سیستم این شرکت همخوانی ندارد و باید پلن جبرانی در قراردادتان باشد)گاهی شرکت ها سفته می خواهند (باشه در قرار داد بیاورند شما هم تقدیم کنید ... / اگر روی سفته ننوشتید جهت ضمانت حتما و حتما فقط اسم شرکت را بنویسید و به نام شخص سفته ندهید) اگر شرکت نا عادلانه سفته را به اجرا گذارد می توانید به جرم خیانت در امانت از او شکایت کنید. البته باید حتما مشکلی پیش آماده باشد و از شما شکایت کرده باشد و دادگاه اجازه اجرای سفته را بدهد که در این صورت نمی توانید چون دادگاه رای به شرکت داده و خدای نکرده شما مشکلی برای آن ها به وجود آورده اید.خیلی خلاصه شما در ماه حدود 2 روز (کمی بیشتر) مرخصی دارید و اگر تا آخر سال از آن استفاده کنید تنها 15 روز آن به سال بعد منتقل خواهد شد (البته در سنوات لحاظ خواهد شد)حتما بعد از خروج از هر شرکتی باید سنوات شما محاسبه و پرداخت شود (بین یک ماه تا شش ماه بعد از خروج باید پرداخت شود - اگر نشد باید متناسب با شعبه ای که بیمه شما رد شده به اداره کار رفته و از شرکت شکایت کنید)وظایف محوله باید با شرح شغل و حقوق شما همخوانی داشته باشد گاهی از شما کارهایی می خواهند که برای آن استخدام نشده اید (نمی گویم نه بگویید گاهی لازم است افراد هم را درک کنند و در نبود یک همکار یا در یک شرایط خاص کاری انجام دهید اما شرکت باید سریعا به فکر رفع مشکل باشد اگر خوشش آمد و عادت کرد این سوء استفاده است.)حقوق شرکتباید در ساعات کاری مشغول وظایفی باشید که شرکت به شما محول کرده و یا در حال آموزش مواردی باشید که نیاز شرکت است نه علاقه خودتاندر ساعاتی که وظایفی به عهده شما نیست حتما گزارش دهید و بیکار نباشید. باور کنید خودتان بیشترین ضرر را میبینید (اگر وظیفه ای نداشتید و گزارش هم دادید معمولا مشکلی نیست به مطالعات شخصی بپردازید)همواره خود کار خود را پیش ببرید و منتظر نباشید به شما بگویند چکار کنید. و همیشه مدیرتان را در جریان پیشرفت کار قرار دهید و گزارش هفته ای بدهید (حتی اگر از شما نخواهد)گاهی برخی مسائل را با استفاده از ایمیل سازمانی پیش ببرید و نه کلامی تا مدارکی وجود داشته باشد. مثلا اگر دو بار مسئله ای را از همکارتان خواستید و منتظر کار او بودید تا خوراک کار شما فراهم شود و توجه نکرد حتما ایمیلی بزنید به او تا مدرکی داشته باشید که این مطلب را پیگیری کرده اید (حتی اگر ناراحت شود به هر حال مشکلی پیش بیاید و کتمان کند مشکل از شماست و شما ناراحت خواهید شد) احترام همکاران را داشته باشید نه با آنها بیش از حد صمیمی شوید و نه بی محلی کنید. رابطه ای خوب و منطقی داشته باشید و پشت هیچ یک بدگویی نکنید و در هیچ جلسه بدگویی شرکت نکنید. (در یک شرکتی مشغول به کار شده بودم که در سه ماه آزمایشی بچه ها از هم بدگویی می کردند. مدیر از بچه ها و بچه ها از مدیر خلاصه مسموم ترین فضایی بود که به عمرم دیده بودم و بعد از دوره آزمایشی از شرکت بیرون آمدم - شرکت خیلی بزرگی هم بود اما ارزش کار کردن نداشت - مسلما پشت سر من هم بدگویی می کردند.)اگر به هر دلیلی تصمیم گرفتید کار خود را ترک کنید از یک ماه قبل اطلاع دهید و تمامی موارد را به درستی و کامل تحویل دهید و حتی تا یک هفته یا یک ماه بعد هم پذیرای تلفن دوستان جایگزینتان باشید حتی اگر شرکت حرفه ای برخورد نکرد شما حرفه ای باشید و شان کاری خود را حفظ کنید. تصمیمات شما به شرکت منفعت رسانده و متضرر می کنند. با دقت و با وجدان تصمیم گیری کنید. در انتخاب هایتان همه چیز را لحاظ کنید نه فقط توان و علاقه شخصی یا حداقل صادقانه بگویید این کار را می توان کرد که به نفع شماست اما توان من یا علاقه شخصی من این است که شرکت در جریان هزینه ای که می کند باشد.اگر کمک کنید مدیر شما پیشرفت کند در حقیقت خودتان پیشرفت کرده اید، سال های درازی در پیش است و تنها نوک بینی خود را نبینید. تمرکزتان بر روی کارتان باشد و همیشه بهترین کار ممکن را انجام دهید. اگر شرکت تلاش شما را ندید. خدا خواهد دید و ثمره آن را در آینده خواهید دید. شرکت هایی بوده اند که این مشکل را با آن ها داشته و نهایت آن را ترک کرده ام  اما اکنون آن شرکت وجود ندارد و بنده به تجربیاتم اضافه شده و افرادی نیز بنده به را به جهت کیفیت کاری که در آنجا انجام داده ام می شناسند.در مصاحبه چه کنمدر ابتدا که کارآموز هستید دقت کنید حتما شرکت برنامه ای برای میدان دادن به شما داشته باشد (کسی به شما آموزش نخواهد داد اما حتما کسی وجود داشته باشد که سوالات خود را بپرسید) ممکن است در کارآموزی حقوقی نداشته باشیددر دوره جونیور بودن نیز دقت کنید روحیه افراد شرکت چگونه است (درست است که کسی وظیفه ندارد به سوالات شما پاسخ دهد) گاهی همکاران با روی گشاده به شما کمک خواهند کرد و برخی خصیصانه رفتار می کنند (هرگز اینطور نباشید و نگران نباشید شخصی جای شما را خواهد گرفت - روزی شما را خدا می دهد)قبل از مصاحبه مطالعه کنید و سوالات آزمون های استخدامی مرتبط با رشته خود را مطالعه کنید. صبور باشید و استرس نداشته باشید. با همه چیز رو به رو میشوید اما با توجه به روحیات خود همه چیز را بررسی کنید و با دقت تصمیم بگیرید. البته اگر فرد خبره ای مقابل شما باشد شما را به چالش کشیده و توان شما را خواهد سنجید.البته نگران نباشید که همه چیز را باید جواب دهید فرد مصاحبه کننده باید در زوایای مختلف از شما سوال کند و مرزهای توانایی شما را درک کند پس تا جایی پیش می رود که ممکن است به بخشی از سوالات جواب نمی دانم دهید (بهتر از جواب غلط دادن است)ممکن است است نتیجه را به شما نگویند (اگر برایتان مهم است تماس بگیرید و پیگیر شوید) اگر شرکت معمولی است یک هفته زمان دهید و اگر خبری نشد به دنبال جای دیگری باشید و اگر شرکت مهمی نیست اصلا رزومه نفرستید (وقت خود و بنده خداها را نگیرید)اگر رزومه فرستادید تلفن را جواب دهید و در جلسه مصاحبه حاضر شوید و اگر راضی نبودید و تماس گرفتن تلفن را پاسخ داده و بگویی با جای دیگری در حال صحبت هستید.خلاصه در این مصاحبه ها هم همه جور تجربه ای خواهید داشت چه در نقش مصاحبه شونده و چه در نقش مصاحبه کننده.کلام آخربسیار خرسندم که بعد از چند سال از این تصمیم بالاخره فرصتی پیش آمد که این سری مقالات (10 قسمت + تعامل نرم افزار و سخت افزار) را بنویسم. بسیار ممنون از اینکه در این سری همراه بودید و مطالعه کردید و با نظرات مثبت خود دلگرمی بوده اید. اگر این دوره را مفید دانستید به دوستان دیگرتان نیز معرفی کنید و کمک آنها باشید.امیدوارم این دوره کمک شما بوده باشد و راه شما را هموار کرده باشد. صبور باشید و دوره آموزشی را تکمیل کنید و به دنبال آموزش های بیشتر باشید.اگر به دنبال یادگیری جاوا یا php بصورت خودخوان هستید البته این کانال تلگرامی نیز هست که می توانید دنبال کنید.یادان نرورد شما نیاز به تمرین دارید. تمرین کنید تمرین کنید و تمرین کنید.یا حق</description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Mon, 10 May 2021 10:51:35 +0430</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت نهم</title><link>https://virgool.ir/CodeLovers/من-می-خواهم-برنامه-نویس-شوم-قسمت-نهم-wqbiyvf5y2kc</link><description>در قسمت هشتم با اصطلاحات کافی و لازم برای شروع این سفر آشنا شده اید. اما عمده مشکلی که بعد از شروع برنامه نویسی پیش می آید این است که کارآموزان با مثال های آموزشی و کدهای پیش پا افتاده دوره های آموزش رو به رو شده و برخی صبرشان لبریز می شود.عده ای دوست دارند در همان ابتدا از مثال های واقعی در دنیای واقعی شروع کنند و عده ای نیز که لزوم این مورد را درک می کنند نگران این هستند که در دنیای واقعی چه خواهند کرد. در این مقاله سعی می کنیم به این دو مسئله پاسخ دهیم. چرا در دوره های آموزشی نمی توان سمت واقعیت رفتهدف دوره های آموزشی معمولا آموزش ابزار دست شما است برای خلق هر چه بتوان تصور کرد. مثلا در آموزش استفاده از یک اره برقی مثالی از ساخت کمد یا تخت نمی زنند یک تخته چوب است که باید آن را درست ببرید. لبه ها خراب نشود. از خط خارج نشوید. به کسی آسیب نزنید و استاندارد طرز ایستادن و ... (همین اره خیلی موارد دارد) را رعایت کنید. بله معمولا صرف یادگرفتن ابزار به شما کمک نمی کند که بتوانید چیزهای بزرگی خلق کنید و این دلیل وجود کارآموزی است. اما اگر همین ابزار را با تمرکز کافی و به درستی فرا نگیرید در کارآموزی هم چندان موفق نخواهید شد. به اصطلاح خشت اول چون نهد معمار کج، تا ثریا می رود دیوار کج پس اولین وظیفه شما تمرکز بر آنچه است که در حال آموزش آن هستید. هر سرنخی یافتید آن را بررسی کنید و با دقت تمرینات را دنبال کنید و سعی کنید آن ها را با آموزه های جدیدتان بهبود ببخشید.بعد از ده سال هنوز وقتی یک برنامه را می نویسیم بخش هایی از آن را بارها می شود که اصلاح کنم. (زمانی که چیز جدیدی به ذهنم می رسد یا فکر می کنم که این قسمت می تواند تمیز تر باشد - تا زمانی که به کسب و کار و زمانبندی ارائه محصول آسیبی نزد وسواس نیست) هرچند می توان آن را رها کرد. چون کار می کند.یک مسئولیت اجتماعی برنامه نویس بهبود هرچه بهتر سیستمی است که در حال توسعه آن است. در آینده اگر task (وظیفه) به شما دادند و در حین کار متوجه شدید می توان در حین انجام آن، کلاسی که در حال تغییر آن هستید را می توان بهتر کرد این کار را با رعایت اصول (دقت کنید مشکل در جای دیگری ایجاد نکند) انجام دهید.بنابراین در دوره های آموزشی سعی در ساده سازی حالت تا حد ممکن آن را دارند و از واقعیت دور می شوند.برای درک بهتر مثالی می زنیم. فرض کنید یک سیستم مدیریت Asset (هرچه در یک اداره یا سازمان وجود دارد - از کامپیوتر ها و پرینتر ها بگیرید تا میز و صندلی و موبایل های امانی و دوربین و اتومبیل) در دوره آموزشی می شود دو موجودیت در نظر گرفت و کار را آموزش داد مثلا user و asset اما در واقعیت این asset ها دارای گروه هستند که خود خصوصیاتی دارد مثلا اینکه آیا این گروه نیاز به بررسی و بازنگری دارد (چک دوره ای) خوب پس هر گروه asset ممکن است چندین چک دوره ای داشته باشد. حال این چک دوره ای یک موجودیت مجازی است (قابل لمس نیست و یک مفهوم است) اما خصوصیاتی دارد (نام آن چیست؟ چند وقت یک بار؟ چند روز قبل دوره اطلاع رسانی شود؟)حال فرض کنید بگویند پرینتر با هر 10000 پرینت باید چک شود فارغ از اینکه شش ماه یک بار هم باید چک شود. پس مفهوم جدیدی دارید به نام کارکرد که برای هر asset باید ثبت شود و دارای تعداد. تاریخ و ... است و باید به موجودیت چک دوره ای هم خصوصیتی اضافه شود که کارکرد را هم لحاظ کند (چه نوع کاری و چه تعداد) که در محاسبات لحاظ شود. حال به شما می گویند کارهای سیستم را نمی توانند همه انجام دهند. پس باید گروه کاربری داشته باشید که هر گروه کاربری به یک سری از ماژول ها در سیستم دسترسی دارند (دو مفهوم جدید اضافه شد) بعد به شما میگویند Asset های it را فقط کارمندان it ببینند و asset های اداری را منابع انسانی پس کاربران علاوه بر گروه کاربری (سطح 1 و سطح 2 و ...) یک گروه سازمانی هم دارند. گروه سازمانی معمولا ساختار درختی دارد یعنی یکی مدیر دیگری است و او نیز مدیری دارد که وقتی یک کارمندی یک موردی را ثبت می کند تمام مدیران بالا دست او نیز باید به آن دسترسی داشته باشند حال می گویند باید همین چک دوره ای را با توجه به نوع آن ثبت کرد مثلا تعمیری است یا تامینی (خرید کارتریج) بعد اطلاعات تعمیر یا تامین را وارد کرد (بسته به هر نوع یک موجودیت به سیستم اضافه می شود چرا که هر کدام خصوصیات خاص خود را دارند) فرض کنید بگویند هر فاکتوری برای ما داده اند نیز باید در آن تعمیر یا تامین ثبت شود هم اطلاعات آن هم اسکن فاکتور اصلی (دو موجودیت فاکتور و فایل فاکتور به سیستم اضافه شد) اگر من بخواهم ادامه دهم می توانم یک ساعت تمام قابلیت به این سیستم اضافه کنم. که در دوره های آموزشی جای این بحث ها نیست. این مثال و موارد مشابه را اصطلاحا business یک برنامه می گویند. تمرین کنیدآنچه الان تمرین کردیم را تحلیل یک کسب و کار می گویند. تحلیل کسب و کار یک شغل در کنار برنامه نویسی است و معمولا شامل استخراج نیازمندی ها و بررسی ارتباطات موجودیت های سیستم با نگاه واقع گرایانه و همچنین در نظر گرفتن آینده سیستم است (ممکن است قابلیت های جدیدی در آینده اضافه شود که سیستم باید امکان گسترش را داشته باشد نه اینکه آن را از ابتدا نوشت - البته تا حد امکان)اگر علاقه دارید برای تمرین به دور و بر خود نگاه کنید و سعی کنید یک سیستم را تحلیل کنید. مثلا صندوق خانگی. مثلا مدیریت آپارتمان. رستوران. یک مرکز تعمیرات. سعی کنید با تحلیل خود را با دوستان دیگرتان به اشتراک بگذارید و بحث کنید (هیچ وقت متعصبانه به تحلیل خود نچسبید - قبول کنید ممکن است حتی پدرتان که یک کارمند یا راننده تاکسی است چیزی به ذهنش برسد و بهتر از شما به یک مسئله نگاه کند که پشتوانه آن تجربه اجتماعی است)در این شغل یا این مهارت که برنامه نویس نیز باید آن را داشته باشد لازم است همه چیز را کنار بگذارید. ابزار دستتان و قابلیت های آن و در حال توسعه هر سیستمی هستید خود را جای کاربر آن قرار دهید. باید در ذهنتان نقش بازی کنید و کاملا در نقش خود فرو روید. سپس نقشتان را عوض کنید و جای مدیریت این سیستم قرار بگیرید و همینطور تمامی زوایای آن را بررسی کنید.همچنین برنامه های دیگر را ببینید و الگو بگیرید و اگر توانستید تحلیل بهتری ارائه دهید. برای شروع زمانی که با پایگاه های داده آشنا شدید می توانید برای شروع از Data Model یا مدل پایگاه داده شروع کنید که تقریبا (نه دقیقا هر جدول معادل یکی از موجودیت ها شماست) و با مشخص شدن جداول و ارتباط آنها یک شمای کلی از کسب و کار را دارید.از بین مهمترین مستندات نرم افزار می توان به مستند توسعه نرم افزار SDP، مستند RFP یا درخواست پروپوزال، مستند معماری نرم افزار، مدل داده Data Model، مستند سناریو و مستند Sequence diagram اشاره کرد که برای آشنایی بیشتر با آنان باید درس مهندسی نرم افزار رشته کامپیوتر را مطالعه کنید و با آن ها آشنا باشید. (در هر یک از شغل های زیر باشید باید این مستندات را بدانید)مشاغل مرتبطتعاریفی که در زیر آمده آیه نیست و احتمالا هر کسی تعاریف دیگری داشته باشد. موارد زیر صرفا برای آشنایی بهتر شما با فضای کاری و ترسیم آینده شغلیتان است.تحلیل گر:امروز هر کدام از مهارتهایی که در گذشته یک برنامه نویس انجام میداد یک شغل جدا است. مثلا تحلیل گر نیازمندی های سیستم و قابلیت های آن را فارغ از آنکه کدام موجودیت است و کدام یک خصوصیت در یک موجودیت صرفا استخراج می کند و باید دید کاملی نسبت به کسب و کاری که در حال توسعه برنامه در آن است پیدا کند (انگار چند سال است که کار او مربوط به آن کسب و کار است)طراحطراح سیستم وظیفه دارد موجودیت ها را از این نیازمندی ها استخراج کند و ارتباطات را مشخص کند و حتی کلاس های شما را تعیین کند و ممکن است بگوید چه کلاسی چه توابعی خواهد داشتمعمار سیستمبرنامه نویس هایی هستند که معمار نرم افزار هستند و می گویند برای توسعه برنامه مرتبط با این کسب و کار از چه ابزارها (زبان، کتابخانه ها، فریم ورک و ...) استفاده شود و از چه معماری استفاده شود معماری نرم افزار شامل روش هایی است که ارتباطات کلاس ها را با نگاه کلی تر و فارغ از موجودیت ها بیان می کند مثلا می گوید برای هر موجودیت باید یک سه کلاس نوشته شود که هر کدام وظیفه مشخصی در خصوص آن موجودیت انجام می دهد (مثلا برای asset یک کلاس AssetService برای توسعه توابع معمول که در ذهن دارید و یک کلاس AssetRepository برای دریافت و ارسال اطلاعات asset بین پایگاه داده و کلاس assetService و یک کلاس Asset که صرفا اطلاعات یک Asset را شامل می شود و ...)برنامه نویسبرنامه نویس با توجه به معماری توافق شده و با در نظر گرفتن طراحی شروع به توسعه می کند و حتی ممکن است توابعی بنویسد که مقداری از پیش تعیین شده به توابع اصلی بفرستد و انتظار خروجی از پیش تعیین شده ای داشته باشد (به این توابع unit test ) می گویند و برای این است که هر موقع تابع تغییر کرد همچنان مطمئن شوید که کار خود را درست انجام می دهد و تست را اصطلاحات پاس می کند یا خیر. البته ممکن است نیاز باشد تست های بیشتری به یک تابع اختصاص دادبرنامه نویس تستبرنامه نویس هایی هستند که علاوه بر unit test تست های بیشتری انجام می دهند مثلا توابعی می نویسند که یک فرایند را به طور کامل تست کند مثلا یک کارکرد زیاد برای asset ثبت شود و انتظار داشته باشند سیستم وضعیت asset را نیازمند به چک دوره ای نشان دهد. که به این تست ها Integration test معمولا می گویند.کارشناس تستافرادی نیز در سازمان وجود دارند که تست های بیشتری انجام می دهند مثلا سیستم شما را باز می کنند و سعی میکنند کاری کنند که سیستم خطا دهد ببیند سیستم از کار می افتد یا به کار خود ادامه می دهد و همه خطا ها را پوشش داده و برای آن راه حلی دارد که Functional test می گویند و بررسی می کنند با نیازمندی های اعلام شده می خواند یا خیر که User Acceptance Testing می گویندمدیر فنی CTO و راهبر توسعه نرم افزارمعمولا در یک پروژه چندین برنامه نویس و برنامه نویس تست وجود دارند و همچنین کارآموزانی چون شما که به تازگی وارد تیم می شوید معمولا ساختار در پروژه های بزرگ به این صورت است که تیم های کوچک تشکیل شده و یک نفر در آن تیم به عنوان راهبر انتخاب می شود که در صورت لزوم به دیگر اعضا کمک کند و برخی تصمیمات در تیم با مشورت با اوست و همچنین راهبران توسعه نیز با شخص دیگری که همه تیم های فنی از جمله تیم های تست را مدیریت می کند در ارتباط هستند که او را مدیر فنی می گویند.کارشناس پشتیبانی نرم افزارافرادی آشنا با سیستم های نرم افزاری آشنایی دارند و به خوبی حرف مشتری را فهمیده می دانند مشکل می تواند از کدام بخش باشد و با توجه به اطلاعات خود یا کاربر را راهنمایی می کنند که به درستی از نرم افزار استفاده کنند یا گزارش باگ ثبت می کنند که ایراد مورد نظر اصلاح شود.صاحب محصول product ownerمعمولا بین کارشناسان تست. پشتیبانی. مدیران فنی و تحلیل گران و طراحان و مشتری هستند تا محصول دقیقا آن چیزی باشد که باید و ارتباطات این بخش ها را تسهیل می کند و یک پل ارتباطی امن و امین بین این واحد ها است. این موقعیت شغلی نیازمند تجربه بسیاری است و بعضا افرادی در این موقعیت هستند که تمامی این موقعیت ها را تا حدی تجربه کرده باشند و بتوانند به زبان همه این واحد ها آشنا باشند و حرف آن ها را بفهمند و مشکلات آنان را درک کنند و در کل کار راحتی نیست و اگر به اشتباه به شخص بی تجربه ای سپرده شود که بسیار دیده می شود این واحد ها هستند که برای او تعیین میکنند کدام واحد چه کند به جای اینکه او تصمیم گیرنده باشد. با دیکتاتوری هم محصول زمین خواهد خورداسکرام مستر scrum masterدر سازمان های بزرگ بخشی از کار صاحب محصول را شخص دیگری به عهده می گیرد و رابط بین مدیر فنی و برنامه نویسان با صاحب محصول می شود که وظیفه مدیریت وظایف تیم فنی و اولویت بندی آن ها و زبان بندی آنها را دارد این شخص با شیوه های مدیریت توسعه نرم افزار مانند شیوه چابک Agile آشناست و استانداردهای آن را به خوبی می داندمدیر محصول product managerمدیران محصول معمولا فرصتی برای آینده محصول نخواهند داشت و باید شخصی مدیریت توسعه هرچه بهتر محصول را در دست بگیرد و به صاحب محصول کمک کند.کلام آخرسعی کنید با دقت آموزش خود را دنبال کنید و برای کارآموزی سخت نگیرید (من در شروع این سفر بعد از یادگیری زبان در یک استارتاپ (شرکت نوپا) کارآموز بودم و تقریبا حقوقی نمیگرفتم) بعد از آن در شرکت بزرگ تری به عنوان برنامه نویس تازه کار Junior مشغول به کار شدم. تا حدی می توانم بگویم قبل از آن را حتی آموزش به حساب نمی آورم و بعد از استخدام به عنوان Junior یادگیری را آغاز کرده ام. هیچ کس و هیچ دوره آموزشی شما را یک شبکه و سه ماهه برنامه نویس نمی کند (گول افراد سودجو که می خواهند شما را برنامه نویسانی با دانش ضعیف و ادعای واهی کنند و از شما پول بگیرند نخورید) برای آموزش ابزار باید حداقل شش ماه زمان بگذارید و شش ماه دوره کار آموزی بگذرانید منمیخواهمبرنامهنویسشوم-قسمتآخرراجعبهشغلبرنامهنویسی،شرکتها،مصاحبهوهمکاران،بادوستانیکهوارداینحوزهکاریشدهاندصحبتکوتاهیداریمvirgool.io </description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Wed, 05 May 2021 09:55:23 +0430</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت هشتم</title><link>https://virgool.ir/CodeLovers/من-می-خواهم-برنامه-نویس-شوم-قسمت-هشتم-rvnomghvjuwe</link><description>سلام، پس از نوشتن اولین برنامه در قسمت هفتم، در این قسمت آموزشی کمی بیشتر متغیر ها را در عمل خواهیم دید و با تعریف و استفاده از آنها در عمل آشنا می شوید. این قسمت آخرین قسمت فنی است و تا این قسمت سعی داشته ایم تا با قدرت و درک بهتر سری آموزشی را که انتخاب کرده اید دنبال کنید و کمتر اصطلاح مهمی باشد که نشنیده باشید و مسائل جدید برایتان مشکل مهمی نباشد (هر چیز جدید را در گوگل جستجو کنید توضیحات کاملی وجود خواهد داشت) چند مورد را مطالعه کنید تا ساده ترین توضیح را پیدا کنید. با توجه به اینکه با خیلی اصطلاحات آشنا شده اید نباید توضیحات برای شما سخت باشد.دیگر نگران نحوه تعریف کلاس یا توابع و جزئیات آن نباشید. هر سری آموزشی را دنبال کنید حتی اگر در ابتدا هم راجع به آن توضیحی ارائه نشود به مرور توضیحات راجع به آن کامل تر خواهد شد و حتما جزئیات آن را خواهند گفت، فقط کافی است آموزش را رها نکنید و صبور باشید. چرا که ابتدا باید مباحث ساده تری را آموزش ببینید تا درک بهتری نسبت به مسائلی که دلایلی در پیش زمینه دارند پیدا کنید.برویم سراغ اولین مبحث یعنی متغیرها استفاده از متغیرها امری بسیار عادی در زندگی روزمره است. فرض کنید قرار است آشپزی کنید. از ابتدا همه مقادیر را نمی توانید درون ظرف اصلی بریزید. (حداقل همیشه اینطور نیست) گاهی لازم است مواد را در ظروف جدا نگه داشته و در زمان مناسب به ظرف اصلی اضافه کنید و ... تمام ظروفی که در آشپزی استفاده می کنید متغیرهای شما هستند. این مطلب یک مرور است چون قبلا به آن اشاره شده، در زبان های برنامه نویسی متغیرها به شکل زیر دسته بندی می شوند (البته سعی بر خلاصه سازی و توضیح نکات مهم است نه کامل - تعداد متغیرها بیشتر است) کاراکتر (Char): یک متغیر تک حرفی (می تواند یک عدد تک رقمی یا یک علامت هم باشد) رشته (string) : متغیرهایی از نوع حروف و کلمات یا ترکیب حروف و اعداد. یک حرف یا یک جمله یا حتی اعداد بصورتی که نگاه محاسباتی به آن نداشته باشید مثلا نام پلاک که می تواند ۱۴ باشد. همواره متغیر رشته بین دو علامت تک کوتیشن ‘ و یا دابل کوتیشن “ قرار خواهد گرفت. (در برخی زبان ها از &#39; برای کاراکتر ها و از &#34; برای رشته ها استفاده می شود - در برخی زبان ها مانند php هردو قابل استفاده است)عدد صحیح (integer) یا (int) : اعداد مثبت و منفی و بدون اعشار را شامل می شوندعدد اعشاری (float) و (double) : اعداد مثبت و منفی بصورت اعشاری البته double برای اعداد بسیار بزرگ است.منطقی (boolean): این متغیر همواره یکی از دو مقدار درست (true) یا غلط (false) و به عبارت دیگر 0 یا 1 را می تواند داشته باشدآرایه (array): در صورتی که متغیر های فوق رو یک جعبه کوچک در نظر بگیریم، آرایه در حقیقت صندوقی است که می توان جعبه ها را در‌ آن قرار داد. آرایه متغیری است که خود شامل متغیرهای دیگر است. محتوای آرایه می تواند بصورت یک دست از یک نوع مثلا اعداد صحیح باشد یا ترکیبی از رشته و عدد و ...مرور فوق برای درک بهتر مثال پیش رو است. حال در زبان های مختلف چهار متغیر تعریف می کنیم، برای سه متغیر ابتدا مقدار دهی میکنیم و برای دیگری مقداری را از کاربر خواهیم گرفت. یکی از این متغیر ها در حقیقت متعلق به کلاس است (attribute برای کلاس تعریف خواهیم کرد) و نحوه استفاده از آن را خواهیم گفت. در صورتی که قسمت قبل را دیده باشید با لینک های زیر آشنایی دارید.C#:          https://ideone.com/jePAcS&#xA;C++:        https://ideone.com/n5OI9E&#xA;Java:       https://ideone.com/1tY6Bl&#xA;PHP:        https://ideone.com/GIToic &#xA;Swift:       https://ideone.com/8V3Kgv&#xA;Python3: https://ideone.com/CItDpgچون در این زبان ها مشترکاتی وجود دارند سعی می کنیم کاری که در حال انجام آن هستیم را توضیح دهیم و در این بین تفاوت زبان ها را نیز بیان کنیم. در صورتی که در حال یادگیری یکی از زبان ها هستید می توانید از قسمت های بی ارتباط با آن زبان صرف نظر کنید. چراکه نیازی نیست ذهن خود را درگیر روش دیگر زبانهایی کنید که قرار نیست با آن کار کنید. از آنجایی که هدف ما در این سری آموزشی، آموزش برنامه نویسی است این روش را انتخاب کرده ایم. بلاک کد مربوط به کلاس و تابع اصلی را در جلسه قبل توضیح دادیم اما جهت اطمینان باری دیگر خاطر نشان میکنم برخی از زبان های فوق دارای یک تابع اصلی است که هنگام اجرای برنامه آن تابع اجرا می شود و در برخی همه خطوط (خطوطی که در بلاک کد مشخصی نیست) اجرا می شود ( که کد های مربوط به ساخت یک شی از نوع کلاس و فراخوانی یکی از توابع آن و ... است)، اما خطوط مربوط به توابع و کلاس ها تا فراخوانی نشوند اجرا نمی شوند (این در همه زبان ها مشترک است)در زبان هایی که ذاتا شی گرا هستند شما نمی توانید مانند php یا python کدی را بدون قرار دادن در بلوک کد بنویسید. و حتما یک کلاس و تابع اصلی وجود دارند. حال قوانینی وجود دارند که در نام گذاری متغیر ها و کلاس و توابع باید رعایت کنید اصطلاحا (naming convention) برخی ضروری است و در صورت عدم رعایت با خطا مواجه خواهید شد و برخی قرار دادی است و برای تمیز و خوانا بودن کد های شما مثلا نام متغیر، کلاس و توابع می تواند شامل حروف بزرگ و کوچک و اعداد انگلیسی یعنی از a تا z و A تا Z و 0 تا 9 و همچنین کاراکتر _ (آندرلاین) را میتوانید در تعریف اسم متغیر استفاده کنید. اما هیچگاه نمی تواند با اعداد شروع شود و این مورد یک ضرورت است.بخشی از مثال های فوق برای شما آشنا و بخشی جدید است. مثلا بعد از تعریف کلاس در اولین خط بعد از آن اولین متغیری است که تعریف کردیم و فقط از حروف کوچک استفاده شده و نام آن را name گذاشته ایم (اگر در حال یادگیری زبان php هستید در این زبان نام گذاری تمامی متغیرها با علامت $ شروع می شوند (یک ضرورت است) و ربطی به نام آن متغیر ندارد) توضیحات مربوط به متغیر name:کلاس ها دارای رفتار و خصوصیت هستند. می توانید خصوصیات را متغیر و رفتار را توابع کلاس در نظر بگیرید پس یکی از مکان های تعریف متغیر داخل کلاس است. مانند متغیر name توجه داشته باشید توابع برای مصرف خودشان می توانند داخل خود متغیر تعریف کنند اما این متغیرها لزوما مربوط به کلاسی که تابع در آن است نمی شود. اما متغیرهایی که داخل کلاس تعریف می شوند در همه جای کلاس و تمام توابع آن قابل استفاده هستند و کمی عمومی تر محسوب می شوند. نکته دیگر که فقط مختص متغیر نیست و توابع کلاس را نیز شامل می شود کلمه public استفاده شده قبل از تعریف متغیر یا تابع است. کلاس ها چون با یکدیگر در ارتباط هستند باید مشخص شود کدام خصوصیت یا رفتار توسط کلاس های دیگر قابل دسترس هستند یا خیر در آموزش تکمیلی شی گرایی انواع دیگر را آموزش خواهید دید، اما چون باید مشخص شود متغیر باید از چه نوعی باشد ما حالت public که مربوط به دسترسی آزاد است را انتخاب کرده ایم. (اگر در حال آموزش زبان C++ هستید توجه داشته باشید یک public: برای تعیین نوع هر آنچه بعد آن تعریف می شود، متغیر یا تابع کفایت میکند و نیازی نیست در تعریف همه تکرار شود.) مورد public و دیگر انواع آن فقط مربوط به متغیر و توابع کلاس است و داخل توابع یا برنامه هایی مانند php داخل فایل های برنامه استفاده از آن معنایی ندارد.در برخی زبان ها هنگام تعریف متغیر حتما باید مشخص کنید محتوای درون این متغیرها قرار است از چه نوعی باشند که قبلا توضیح داده شد. مثلا در اینجا مشخصا name از نوع حروف یا به عبارتی دیگر، رشته (string) خواهد بود و نمی تواند عددی یا صحیح/غلط باشد. توجه داشته باشید در زبان swift بعد از تخصیص نام با استفاده از کاراکتر &#34; : &#34; نوع مشخص می شود ولی در زبان های دیگر قبل از تخصیص نام، همچنین در زبان swift هنگام تعریف متغیر از کلمه کلیدی var استفاده می شود که به یک ضرورت در این زبان است. نکته اخر در مورد متغیر name مقدار دهی اولیه است. در برخی زبان ها شما می توانید متغیر را بدون مقدار اولیه تعریف کنید که به صورت پیش فرض مقدار null که تعریفی برای پوچ است برای آن در نظر گرفته می شود. در زبان swift برای اینکه مشخص کنید متغیر مقدار نال را نیز می تواند داشته باشد کافی است بعد از تعیین نوع مقدار متغیر از کاراکتر “ ! ” استفاده نمایید و در زبان پایتون باید مقدار نال که در این زبان None شناخته می شود به آن تخصیص دهید. ساختار تعریف متغیر را در زبانی که قصد آموزش آن دارید به خاطر بسپارید، همانطور که مشاهده میکنید با یکدیگر تفاوت هایی دارند.چرا متغیر name را داخل کلاس تعریف کردیم؟در برنامه فوق بعد در تابع اصلی زبان که برنامه را اجرا میکند و یا خطوط بعد از بلوک کد کلاس و بعد از فراخوانی کلاس یک خط اضافه شده و بار دیگر متغیر نام را در صفحه نمایش چاپ می کنیم.زمانی که یک شی از یک کلاس تعریف می شود تا زمانی که برنامه تمام نشده حالت نهایی شی و خصوصیات آن حفظ می شود و قابل استفاده و تغییر است. این یک مثال بود برای اینکه بعد از تعریف شی از خصوصیات آن نیز استفاده کنید (اینجا فقط چاپ می کنیم - به آن خواهیم رسید. ادامه دهیم ...)توابع در کلاس هااکنون شما با خصوصیات در کلاس آشنا شدید که میتواند همان متغیرهای آن باشد، مثلا یک رباط ساده و نه مانند انسان با دو بازو را در نظر بگیرید.من سه خصوصیت این رباط را برای کنترل آن در نظر میگیرم (بازوی راست، بازوی چپ و حالت) این سه، متغیر هستند که حالت می تواند عددی یا رشته باشد یعنی ما می توانیم بصورت قرار تعدادی کد را معادل یک حالت در نظر بگیریم و یا اسم حالت را بدون در نظر گرفتن کد برای آن مستقیما در متغیر حالت قرار دهیمبازوی راست و بازوی چپ متغیرهایی هستند برای نگاه داشتن یک شی که بازو نام دارد. و خود آن شی می تواند ده ها متغیر و تابع داشته باشد.یعنی خصوصیات شما می تواند با دیگر خصوصیات ارتباط داشته باشند. در کدهای بالا مشاهده می کنید در تابع اصلی یا انتهای خطوط برنامه پس از ساخت کلاس اصلی آن را داخل متغیری به نام firstObject یا first_object قرار میدهیم و حال این متغیر، یک شی از کلاس ما خواهد بود که به توابع و خصوصیات آن دسترسی داریم.فرض کنید ما حالت را از کاربر توسط صفحه کلید دریافت می کنیم و میگوییم بازوی رباط چه کند.به کاربر لیستی از کارهایی که میتوانیم انجام دهیم نشان می دهیم، کاربر یک عدد را از منو انتخاب می کند، مثلا گزینه 5 و آن را داخل متغیر حالت ذخیره میکنیم.توابع یک کلاس رفتارها و کارهایی است که شی آن کلاس می تواند داشته باشد یا انجام دهد. مثلا در مثلا فوق می توانید یک تابع را در نظر بگیرید برای انجام عکس العمل انتخاب منودر این تابع متغیر حالت بررسی می شود و کارهایی را انجام میدهد. مثلا خود بازو ها را حرکت می دهد یا تابعی که حرکت بازو را انجام می دهد صدا میزند.توضیحات مربوط به تابع firstMethodخطوط جدید دیگر در این مثال تعریف متغیرهای محلی داخل تابع است (این متغیرها بیرون از تابع اعتباری ندارند و از بین خواهند رفت چون داخل تابع تعریف شده اند - کاری نداریم که در برخی زبان ها داخل تابع نیز می توانید متغیرهایی تعریف کنید که بیرون از تابع نیز در دسترس باشد اما شیوه خاص خود آن زبان را دارد)یک اصطلاح دیگر که اکنون می توان آن را توضیح داد (Syntax یا دستور زبان) در یک زبان برنامه نویسی است. به شیوه یک زبان در تعریف متغیر ها. توابع. کلاس ها و عملیات ریاضی و فراخوانی توابع و تعریف اشیا و کلا هر چه دستور مختص آن زبان است سینتکس آن زبان گویند و اگر دستور زبان را رعایت نکنید اصطلاحا به Syntax Error برخورد خواهید کرد.کلمه Error یا خطا به صورت کلی وقتی است که قاعده ای رعایت نشود و کامپایلر یا مفسر بخواهد به شما اطلاع دهد. که با توضیحات کمی برنامه شما اجرا نخواهد شد و اصطلاحا برنامه دارای Error است.در طول آموزش خود با انواع آن رو به رو خواهید شد که تا همین مقدار برای ابتدا کافی است.ساختار تعریف تابع را در زبان محبوب خود حفظ کنید (ترتیب کلماتی که توضیح می دهیم قابل جابجایی نیست). کلمه public که در برخی زبان ها هنگام تعریف تابع مشاهده میکنید دقیقا در تعریف متغیر توضیح داده شد و همان است.کلمه void در برخی زبانها در ابتدا یا بعد از public آمده است که می تواند بجای آن string یا int یا دیگر انواع باشد که نشان دهنده این است که خروجی تابع از چه نوعی است. چون توابع ما مقداری را بر نمیگرداند (در دوره های آموزشی انتخابی توضیحات آن را خواهید شنید) مقدار void که به معنای آن است که خروجی ندارد نوشته شدهمعمولا در هر زبانی یک کلمه کلیدی برای تعریف تابع وجود دارد. مشاهده می کنید در زبان پایتون از def و در سویفت از func و جاوا، C++ و C# فاقد آن کلمه است.بعد از آن اسم تابع نوشته می شود که به دلخواه شما است اما قوانین که برای نام گذاری متغیر گفته شد اینجا نیز صادق است (در ادامه قوانین دیگری نیز اشاره خواهد شد).دو پرانتز باز و بسته که فقط در زبان پایتون مقداری درون آن قرار دارد مشخص کننده ورودی های تابع هستند که می تواند هیچ یا هرچند متغیر دلخواه باشد که با ویلگول “,” از هم جدا میشوند.در زبان پایتون برای دسترسی به کلاس خود آن را بصورت متغیر به توابع میدهیم که متغیر رزرو شده ی self است. البته اگر در زبانهای دیگر این را مشاهده نمیکنید بدین معنی نیست که آنها بهتر عمل کرده اند و چرا داخل توابع پایتون باید همچین کاری کرد بماند.در مورد تابع اصلی که در برخی زبان ها کلمه static را نیز در تعریف آن می بینید در آموزش کامل تر شی گرایی آموزش خواهید دید. اکنون آن چه خود در تعریف تابع استفاده کرده ایم توضیح داده شد.تابع firstMethod در حقیقت جنبه آموزشی دارد و کلا کلاس تعریف شده در دنیای واقعی معنایی ندارد با فرض اینکه این تابع یک رفتار مورد نیاز برای کلاس ما هست حال به کدهای داخل آن نگاهی می اندازیم.تعریف متغیر بصورت کامل توضیح داده شده و تنها در نظر بگیرید آنچه راجع با کلمه کلیدی public کمی توضیح داده شد راجع به کلاس است و در مورد متغیرهای غیر کلاس صادق نیست و استفاده نمی شود اما قوانین نام گذاری، مقدار دهی و تعیین نوع آن با توجه به زبانی که در حال یادگیری آن هستید دقیقا یکسان است.در خطوط ابتدایی این متد می بینید تعریف دو متغیر از نوع int است که مقدار دهی اولیه نشده اند و سپس تعریف متغیر c در خط بعد همراه با مقدار دهی اولیه.نکته نه چندان مهم اینکه در زبان هایی مانند C# ، C++ و Java می توان در یک خط با استفاده از “,” چند متغیر را تعریف کرد. در زبان php و python با مساوی قراردادن همه آنها امکان پذیر است و در غیر این صورت باید در خطوط جداگانه تعریف شوند.در سه خط بعد از آن متغیر های ابتدایی که بدون مقدار بودند مقدار دهی شده (دقیقا مانند سودوکد است - خیلی ساده) و متغیر c مقدار جدیدی به خود میگیرد (مقدار قبلی دیگر نیست و نابود می شود) که جمع دو عدد است.قبلا با عملگر = آشنا شده اید این عملگر مقدار سمت راست را در مقدار سمت چپ جای می دهد. با این تفسیر مقدار سمت چپ همیشه تنها می تواند یک متغیر باشد و مقدار سمت راست یک متغیر از هر نوعی یا یک محاسبه و برای عملگرهای جمع و ضرب و تقسیم یا حتی اتصال دو یا چند رشته.هر چه که سمت راست قرار میگیرد باید منطقی باشد. مثلا حاصل تقسیم عدد بر صفر باعث خطا می شود و نمی تواند در متغیر سمت چپ جای گیرد (البته برنامه اجرا خواهد شد اما در حین اجرا زمانی که به خط مربوط به تقسیم بر صفر برسد خطا داده و متوقف خواهد شد - چون این خطا دستوری نیست و دستور زبان که تقسیم یک عدد است درست است و مقادیری که در حین اجرا گرفته غلط است)همچنین در زبان هایی که نوع متغیر مشخص شده نمیتوان نوع دیگری را در آن قرار داد، مثلا نمیتوان مقداری عددی به name وارد کرد مگر آنکه ابتدا عدد را به رشته تبدیل کنیداما در زبان php برنامه بصورت خودکار تبدیل (Cast) را انجام می دهد. مثلا اگر رشته را درون متغیر عددی جای دهید آن متغیر به نوع رشته تغییر حالت خواهد داد و برنامه خطا نمی دهد.متغیرهایی با نام های a, b و c تولید شده و مقادیری داخل آنها جای داده ایم شما می توانید عملگرهای ضرب (*)، تقسیم (/)، جمع (+)، تفریق (-)، مود(%) را به برای متغیرهای عددی استفاده کنیدعملگر مود حاصل باقیمانه تقسیم عدد سمت چپ عملگر به عدد سمت راست عملگر را به عنوان حاصل بازمیگرداند.در بین عملگرهای فوق اولویت ابتدا با ضرب، تقسیم، مود و سپس با جمع و تفریق است مگر آنکه از پرانتز استفاده کنید که اولیت آن از همه بالاتر است.خط بعدی برای شما آشنا است. چاپ یک رشته (که رشته مورد نظر میگوید نام خود را وارد کنید) اما خط یا خطوط بعدی که در زبانهای مختلف برای شما جدید است (تک تک توضیح می دهیم) گرفتن یک متغیر از کاربر است (مثلا نام او) قبلا راجع به اصطلاح input/output اشاره شده. خوب گرفتن متغیر ورودی یعنی input و هر زبان دستور خود را دارد (اصطلاحات اینگونه input که مستقیما با استفاده از کی برد از کاربر گرفته می شود را standard input می گویند - نکته اینکه همانطور که قبلا اشاره شد چون این سایت کامپایلر آنلاین است و با شما در تعامل مستقیم نیست از قبل از اجرای برنامه باید ورودی هایی که برنامه می خواهد را در باکس مربوط به input قرار دهید که بنده کلمه saeed را قرار داده ام و هنگام اجرا زمانی که برنامه به این خط می رسد منتظر دریافت ورودی خواهد ماند و این سایت به برنامه خواهد داد).تابع گرفتن مقدار در زبان های مختلف عملکرد متفاوتی دارد و مسلما در کتابخانه های متفاوتی است. در زبان C# در شاخه IO که مخفف ورودی و خروجی است (input/output) قرار دارد، در زبان C++ در iostream در زبان جاوا در scanner و دیگر زبانهای آورده شده نیازی به اشاره به کتابخانه مربوطه نیست.در زبان جاوا باید از کلاس Scanner یک شی ایجاد کنید از نوع Scanner که نام آن متغیر را input گذاشته ایم، سپس تابع گرفتن متغیر از standard input را در آن صدا میزنیم و مقدار دریافت شده را در متغیر نام قرار می دهیم، در بقیه زبان ها تابع دریافت ورودی از کاربر را مستقیما صدا زده می زنیم بدون نیاز به ساختن شی شبیه اسکنر در جاوا.توجه داشته باشید اینکه چه زبانی چطور عمل میکند جای نگرانی ندارد، زمانی که شما نیاز به استفاده از تابعی مشخص دارید، به مستندات آن تابع در راهنمای زبان رجوع خواهید کرد و توسعه دهندگان زبان نحوه استفاده از آن تابع را با مثال به شما آموزش داده اند. تمام زبان ها دارای یک سایت رسمی هستند که مستندات زبان در آن ها هست. پس کافی است زبان را به مرور با دیدن این مثال ها بشناسید و بدانید قرار است چطور عمل کند.نحوه استفاده از متغیرهای کلاس نیز در زبان های مختلف متفاوت است، زمانی که شما یک شی از یک کلاس می سازید برای دسترسی به توابع و متغیرهای آن شی تنها از نقطه استفاده می شود مانند firstObject.name که دسترسی به متغیر نام است به جز زبان php که از طریق علامت (&lt;-) این دسترسی ممکن است $first_object-&gt;nameاما داخل کلاس دیگر زبانها نیز فرق هایی دارند. در زبان های C# و جاوا و سویفت در داخل کلاس تنها کافی است نام متغیر را بنویسید.اما در زبان C++ در صورتی که داخل کلاس هستید اولا باید از کلمه کلیدی this که اشاره به خود کلاس دارد استفاده کنید و علامت (&lt;-) برای دسترسی و در خارج کلاس وقتی از متغیری که حاوی شی کلاس است استفاده میکنید برای دسترسی از (.) استفاده کنید.در زبان php همه متغیرها از جمله this با علامت $ شروع می شوند و چه در داخل کلاس و چه در خارج کلاس برای دسترسی به مقادیر از علامت (&lt;-) استفاده خواهد شد.و اما در زبان پایتون در داخل و خارج کلاس از نقطه برای دسترسی به توابع و متغیرها استفاده می شود و همانطور که از پیش گفته ایم خود کلاس را با متغیر رزرو شده self به تابع داده ایم بنابراین برای دسترسی به مقدار name یا مقدار دهی مجدد آن بدین شکل به آن دست پیدا می کنیم self.nameنکته دیگر مربوط به برنامه های فوق چاپ مقادیر و جمع دو رشته استدر همه زبان های فوق به جز php با علامت جمع عمل اتصال دو رشته به هم را نیز می توانید انجام دهید اما در php اینکار با نقطه انجام میشود مثلا “hello”.”world” دو کلمه hello و world در میان “ که هر دو رشته هستند با استفاده از نقطه به هم متصل شده که به این عمل concatenate میگویند و حاصل عمل فوق hellowrold است چون فاصله در هیچ یکی از کلمات نیست در حاصل کانکت نیز نخواهد بود.در زبان C++ و تابع Cout هرچه بعد از علامت &gt;&gt; وجود دارد در خروجی نمایش داده می شود. و می توان به جای علمگر جمع برای چاپ مقادیر مختلف بین آن ها از این علامت نیز استفاده کرددر برخی از زبان ها برای اتصال یک مقدار عددی به رشته باید عدد نیز به رشته تبدیل شود همانطور که در برنامه ها مشاهده میکنید در C# از تابع ToString و در پایتون از تابع str به شکلی که مشاهده می کنید می توانید استفاده کنید.در زبان swift می توانید میان رشته متغیرهای خود را از هر نوعی چاپ کنید فقط کافی است آنها را داخل جفت پرانتزی همراه بک اسلش به این شکل ()\ قرار دهید. البته در خصوص name همانطور که مشاهده میکنید به این شکل (!name)\ یعنی یک علامت ! نیز دارد که برای متغیرهایی که مقدار null می تواند داشته باشد در این زبان قرار دادن آن در انتها ضروری است - البته علامت ! خارج از پرانتز عینا چاپ خواهد شد و ربطی به این موضوع ندارد.آخرین نکته راجع به انداختن اشاره گر به خط بعد هنگام چاپ است. در زبان C# می بینید رشته بعد از چاپ با Environment.NewLine جمع شده که معادل یک enter یا رفتن به خط بعد در کنسول است. در C++ از endl استفاده شده و در جاوا چند تابع چاپ داریم که تابع println بعد از چاپ مقدار داخل به صورت پیش فرض اشاره گر را خود به خط بعدی خواهد برد. تابع print در سویفت و پایتون نیز به صورت پیش فرض اینکار را انجام میدهند و در php از PHP_EOL  استفاده شده. البته روش مشترک دیگری نیز وجود دارد در آینده خود با آنها آشنا خواهید شد و در اینجا نیازی به اشاره به آن نیست.با توجه به توضیحاتی که داده شد خواندن کد باید برای شما آسان شده باشد. اگر همچنان نیست باید دوباره و با دقت توضیحات را مطالعه کنید و سعی کنید کد مورد نظر را بخوانید و متوجه شوید یا راجع به نکته خاصی که دارید جستجو کنید.در آخر دو مورد فنی دیگر را توضیح خواهیم داد و دو جلسه آتی یکی راجع به تحلیل نرم افزار و دیگر شغل ها خواهد بود و دیگری راجع به نقشه راه و این سری آموزشی در قسمت ده به پایان خواهد رسید.قواعد نام گذاریبهتر است قبل از اشاره به قواعد به شیوه های نام گذاری نگاهی بیاندازید که پیشنهاد می کنم به مقاله زیر رجوع کنید https://virgool.io/@arianshahalami/%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D9%86%DA%AF%D8%A7%D8%B1%D8%B4-%D9%87%D8%A7%DB%8C-%D9%86%D8%A7%D9%85%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C-reqfhzzqqcjo سپس مقاله زیر را برای شیوه نامگذاری پیشنهاد میکنم (البته موارد مربوط به متغیر، boolean، تابع و کلاس رو پیشنهاد میکنم در نظر بگیرید الباقی مختص زبان جاوااسکریپت است - بله این قواعد ممکن است در هر زبان کمی متفاوت باشد) https://virgool.io/@mansourihosein/httpsvirgooliomansourihoseinjavascript-naming-conventions-m0m7mx1d2oy2 آشنایی  دو اصطلاح SDK و Frameworkدر جلسات قبل با library آشنا شده اید. و معمولا برای مجموعه ای است که توسط خود زبان ارائه می شود. هرچند نمی توان گفت هر کتابخانه دستورات خود زبان است مثلا در جاوا اسکریپت کتابخانه JQuery در دل جاوا اسکریپت نیست و می توانید آن را دانلود کرده و در کنار فایل های پروژه قرار دهید و از آن استفاده کنید. اما فریم ورک نیز مجموعه ای از دستورات و توابع و ... است و فرق عمده آن با کتابخانه این است که برای هدف مشخصی این دستورات در کنار هم قرار گرفته اند.اصولا فریم ورک ها مجموعه کدهایی هستند که بخش بندی دارند. هر بخش را یک ماژول می نامیم. و معمولا دارای یک ماژول اصلی است (Core) برای استفاده از ماژول های آن فریم ورک نیاز است از هسته آن استفاده کنید. مثلا برای قابلیت کپچا در یک سایت اگر از یک فریم ورک برای توسعه استفاده کنید حتما ماژول کپچا را در خود دارد و نیاز نیست خودتان از کدهایی برای ساخت تصویر استفاده کنید یا کدهایی بنویسید برای فراخوانی کپچا توسعه داده شده توسط شرکت گوگل.علاوه مفهوم ماژول با مفهوم Api هم برخورد خواهید کرد. امروزه معمولا به اختصار معمولا برای مجموعه دستوراتی که تحت وب در دسترس است می گویند البته بدانید بهتر است بگوییم web api اما خود مفهوم api معمولا کلی تر است. مثلا به همین ماژول هایی که فریم ورک ارائه داده است نیز api می گویند.در مجموع کتابخانه را یک تعریف کلی بدانید (اما معمولا مجموعه دستوراتی که توسط زبان ارائه شده - نه لزوما) و فریم ورک را شامل کلاسها و توابع از پیش تعریف شده (مثلا یک نفر آن سر دنیا از قبل کدی نوشته و در اختیار شما قرار می دهد تا شما دوباره آن را ننویسید و فقط استفاده کنید - او یک برنامه نویس مثل شماست اما مهارت های بیشتری دارد) معمولا برای توسعه برنامه های حرفه ای و غیر آموزشی بعد از گذراندن دوره های مختص به خود آن زبان و آشنایی با زبان با فریم ورک های توسعه داده شده در آن زبان آشنا خواهید شد و یکی از آن ها را بکار خواهید گرفت - از آنجا که این فریم ورک ها خود دارای منطق و کار بسیاری هستند - مثلا ده نفر در طول یک سال آن را نوشته اند و چندین سال به روز رسانی کرده اند، شامل بخش ها و قابلیت های بسیاری است که باید برای درک آن ها نیز مانند خود زبان به مستندات و آموزش های آن فریم ورک رجوع کنید)و اما آخرین مطلب فنی ما SDK است که مخفف  Software Development Kit شامل ابزار و API  های مورد نیاز برای توسعه یک برنامه خاص مانند برنامه موبایل یا ارتباط به پرینتر و ... است. خوب همه این ها یکسری کتابخانه هستند که بنا به نحوه استفاده و هدف فراهم شدن آن یک نام به آن اختصاص داده اند. لینک زیر هم می تونه کمک بهتری برای درک این موضوع کنه. https://virgool.io/@shin/%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-sdk-ksok4y3bkaws اصطلاحات بسیار زیاد دیگری وجود دارد که ما سعی کردیم با بیان بسیار ساده عمده اصطلاحات که در مقدمه راه سنگ راه پای شما هستند را بشکنیم و شما را وارد این دریا کنیم. اکنون خود می توانید شنا کنید و هر جا نیاز است با جستجو بدست آورید.البته دوره آموزشی را که انتخاب کرده اید به مرور و با صبر و حوصله پیش ببرید و تمام کدهای نمونه و تمرینات آن را انجام دهید. به مرور با باقی اصطلاحات و ... نیز آشنا خواهید شد. سفر خوبی را برای شما آرزومندم و امیدوارم کارهای بزرگی از شما به جا بماند.در قسمت بعد کمی بیشتر راجع به تحلیل کسب و کار خواهیم گفت و در قسمت نهایی نقشه راه بهتری برایتان مشخص خواهیم کرد. https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D9%86%D9%87%D9%85-wqbiyvf5y2kc </description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Tue, 04 May 2021 23:38:56 +0430</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت هفتم</title><link>https://virgool.ir/CodeLovers/من-میخواهم-برنامه-نویس-شوم-قسمت-هفتم-o7zzlikl2nmu</link><description>سلام، تا قسمت ششم شما آمادگی لازم را برای اجرای اولین برنامه پیدا کرده اید. در قسمت هفتم از این سری آموزشی شما قرار است برای زبان برنامه نویسی محبوب که انتخاب کرده اید، با استفاده از یک کامپایلر آنلاین اولین خط برنامه اجرایی خود را بنویسید. البته که بعد از فراگیری مباحث مشترک و انتخاب بهتر زبان مورد علاقه خود قرار است با توجه به سیستم عاملی که با آن کار میکنید یا زبانی که قرار است با آن کار کنید نرم‌افزارهای متفاوتی را استفاده کنید. اما برای تکمیل اصطلاحات پایه و کمک به شروع شما در دو جلسه به اصل مطلب می پردازیم و از یک کامپایلر آنلاین که برای کارهای آموزشی کوچک مانند این مقاله تهیه شده و میتوان کدهای کوچک را در زبان های مختلف اجرا کرد استفاده می کنیم تا برای شما مثالی بیاوریم.در سایت های متعددی بصورت پراکنده نحوه اجرای اولین خط برنامه به زبان java یا php یا دیگر زبان های اشاره شده را آموزش داده اند اما برای انسجام مطلب برای هرکدام از زبان ها و با توجه به سیستم عامل های مختلف مقالاتی برای نصب نرم افزارهای مورد نیاز و اجرای اولین خط برنامه وجود دارد (همچنین آموزش هر زبانی را که شروع کنید از ابتدایی ترین دروس آماده سازی محیط است که در هر سیستم عاملی نصب نرم افزارهای مورد نیاز را به شما خواهند آموخت).در سری آموزشی پیش رو سعی داریم اجرای اولین برنامه ساده که چاپ کلمه «سلام دنیا» است را در زبان های C++, C#, Java, Python, PHP و swift به شما آموزش دهیم و توضیحات لازم راجع به هر خط آن را نیز اضافه کنیم. برای شروع سایت های زیادی وجود داشت که بنده سایت ideone.com را انتخاب کردم به دلیل اینکه زبان هایی که برای شروع نیاز داشتم را پشتیبانی می کرد. و دوما کاربری ساده و راحتی دارد. هنگام ورود به سایت یک باکس متنی برای ورود کدهای شما وجود دارد. همچنین چند دکمه در قسمت پایین آناولین دکمه برای انتخاب زبان. دومین دکمه برای باز کردن باکس ورودی است (اگر برنامه شما ورودی داشت این دکمه را زده و ورودی هایی که قرار است برنامه شما بگیرد هر کدام را در یک خط می نویسیم - در قسمت بعد مثالی خواهیم زد که برنامه ورودی بگیرد) البته در حالت معمول برنامه در حین اجرا از شما ورودی خواهد گرفت و منتظر شما خواهد ماند ولی چون این کامپایلر آنلاین است تمام ورودی ها را در ابتدا از شما گرفته و زمان اجرا به برنامه شما می دهد).چون پس از کلید run یا اجرا برنامه شما در این سایت ذخیره می شود دکمه کره زمین و عینک برای خصوصی بودن و عمومی بودن کد شما قرار داده شده.C#:          https://ideone.com/3Zgxtf&#xA;C++:        https://ideone.com/aQlhXM&#xA;Java:       https://ideone.com/ZC664s&#xA;php:         https://ideone.com/Yz0bf9&#xA;swift:       https://ideone.com/ccs7Zz&#xA;Python3: https://ideone.com/FxIQ4Fدر مقابل هر زبان لینک کد اولیه مربوطه وجود دارد که میتوانید بر روی آن کلیک کنید.در صورتی که دو قسمت قبل را مطالعه نکرده اید و یا فراموش کرده اید حتما یک بار دیگر مطالعه کنید. در قسمت های قبل راجع به کلاس، شی و تابع توضیحاتی داده شده است. و اکنون در لینک های فوق شما نحوه تعریف کلاس، ساخت شی و فراخوانی یک تابع از شی آن کلاس را بصورت عملی مشاهده می کنید. توضیحات مربوط به مثال های بالا را خواهید خواند اما بصورت کلی تفاوت هایی بین این زبان ها وجود دارد. مثلا در تمام مثال ها بجز swift  و python استفاده از سِمی‌کالن ( ; ) اجباری می باشد. در تمامی آن ها بجز پایتون (توضیح داده خواهد شد) استفاده از کروشه {} برای مشخص کردن محدوده دستورات یک کلاس یا یک تابع و ... اجباری می باشد که بسته به زبانی که دوست دارید با آن کار کنید به روش و ساختار آن عادت خواهید کرد. توضیح خط using System در سی شارپ و include در سی پلاس پلاس:زبان های برنامه نویسی شامل کتابخانه های مختلفی (library) هستند که شما از توابع موجود در آن ها استفاده می کنید (البته ذهنتان سمت کتابخانه عمومی نرود. اینجا از کتاب رمان و فلسفه خبری نیست. مجموعه ای از دستورات است که در قالب اسامی دسته بندی شده اند و شما با فراخوانی نام آن مجموعه به دستورات زیر مجموعه آن دسترسی پیدا میکنید)مثلا چاپ یک کلمه در خروجی، در سی شارپ دستور یا تابع WriteLine است که قرار است یک مقدار را بگیرد و عینا چاپ کند. مثلا در اینجا از کتابخانه System استفاده شده، و شما در داخل برنامه مشاهده می کنید نوشته شده Console.WriteLine یعنی تابع WriteLine از کلاس Console فراخوانی شده است که این کلاس در کتابخانه System قرار دارد. در برخی زبان ها وقتی از دستورات یک کلاس از پیش نوشته شده (مانند console در سی شارپ) استفاده می کنید ابتدا باید مشخص کنید که کلاس های استفاده شده در کد مربوط به کدام کتابخانه ها است و باید کجا به دنبال آن بگردد. شاید خودتان بخواهید کلاسی همنام console ایجاد کنید و دستور WriteLine آن کار دیگری انجام دهد. پس به جای system آدرس مجموعه خود را خواهید داد که از هدف این مقاله خارج است.پس طبق قرارداد باید بگوییم از کتابخانه System قرار است استفاده کنم. یا در سی پلاس پلاس از تابع Cout استفاده شده که تابعی است در کتابخانه iostream (کتابخانه مجموعه ای از کلاس ها است حتی اگر یک کلاس باشد)نگران این نباشید که کدام کتابخانه شامل چه کلاس ها و توابعی است شما هرچند قرار نیست آن ها حفظ کنید اما اکثرا چون روتین هستند به مرور در استفاده در خاطر شما خواهند ماند و یا در صورتی که به دنبال دستور خاصی در زبانی که با آن کد میزنید هستید حتما توضیحات کامل راجع به آن دستور وجود دارد از جمله اینکه در کدام کتابخانه است. همچنین شما قرار است در نرم افزارهایی تحت عنوان محیط های توسعه کد (IDE) معادل کلمه Integrated Development Environment کد بزنید. ساده ترین آن ها نرم افزارهایی مانند notepad++ است (البته نوتپد ide نیست) که صرفا جهت خوانا تر شدن کد بسته به زبانی که کد آن را می نویسید کلمات کلیدی مانند کلمه Class را برای شما با رنگ دیگری نشان می دهد و پیچیده ترین آنها مانند Visual Studio  و IntelijIdea و Netbeans و Eclipse و ... می تواند زمانی که نام دستور را وارد می کنید کتابخانه مربوط به آن را بصورت خودکار در ابتدای فایل برای شما وارد کند. توضیح خط دوم مربوط به using namespace std در سی پلاس پلاسکلمه namespace را احتمالا در زبان های دیگر نیز مشاهده کنید. و برای ساده تر شدن نوشتن کدهای شماست. زبان برنامه نویسی با توسعه روز افزون سعی میکند کدهای شما را ساده تر. اجرای آن را سریع تر و دستورات بیشتر و در نتیجه امکانات بیشتری به شما دهد. مثلا در مثال قبل اگر چندین کتابخانه دیگر را وارد کنید نیاز نیست بگویید Console مربوط به کدام است. همین که کتابخانه آن بین دیگر کتابخانه ها وارد شده باشد کامپایلر خود مسیر آن را بین آن ها پیدا خواهد کرد.در زبانهایی که namespace وجود دارد به زبان ساده شما بیان می کنید توابعی که در این فایل استفاده شده است می تواند در کلاسی که نام آن را اینجا می نویسم وجود داشته باشد. مثلا تابع Cout در کلاس استاندارد با نام (std) قرار دارد. اگر در سی شارپ وجود داشت مثلا بجای Console.WriteLine فقط کافی بود بنویسید  WriteLine اما باید namespace مربوط که Console است را استفاده میکردین. شما حتی می توانید تابع Cout خودتان را با هر هدفی بنویسید و از کلاسی که توسعه داده اید بجای std استفاده کنید. اما اکنون این خط را هم به عنوان قرارداد در سی پلاس پلاس بپذیرید برای استفاده از مجموعه دستورات مربوط به iostream باید بگویید فضای نام شما std است و برنامه را شروع به نوشتن کنید.توضیحات تعریف کلاس:در قسمت آموزش شی گرایی با کلاس ها آشنا شده اید. در اکثر زبان های برنامه نویسی برای تعریف کلاس از کلمه کلیدی class استفاده می شود و نامی که بعد از آن نوشته میشود اسم کلاس شما خواهد بود که در اینجا به جز جاوا که اسم آن را Main گذاشته ایم بقیه Virgool است، نام گذاری انجام شده برای این است که بدانید هر نامی می تواند باشد. همانطور که قبلا گفته شد بهتر است نامی متناسب با کاری باشد که کلاس شما قرار است انجام دهد. می تواند MyFirstClass باشد یا هر چیز دیگری. البته اگر نام کلاس جاوا را اکنون تغییر دهید برنامه شما با خطا مواجه می شود که به دلیل دستورات پیش فرض کامپایل و اجرای برنامه شما در سایتی است که معرفی شده که اکنون برای ساده نگاه داشتن مطلب به آن اشاره نمی کنیم. به استثنای پایتون تمام آنچه داخل کروشه {} یا (curly braces) بعد از نام کلاس نوشته می شود متعلق به آن کلاس است. در یک فایل ممکن است شما چندین کلاس تعریف کنید  (البته معمولا هر کلاس در یک فایل منحصر به فرد نوشته می شود). و همانطور که قبلا اشاره شد اجزای کلاس شامل متغیر ها و توابع هستند و معمولا هیچ دستوری مستقیما داخل کلاس نمی توان نوشت و باید دستورات در توابع قرار گیرند.هرچه داخل کروشه باشد را یک بلوک کد (program blocks)‌ می گوییم. کلاس دارای یک بلوک کد است که خود دارای چند بلوک کد می شود (مثلا توابع کلاس) همچنین در زبان هایی مانند جاوا یک کلاس می تواند بلوک کد هایی خارج از توابع و مربوط به خود کلاس هم داشته باشد که فعلا کاری با آن نداریم اشاره شد تا کسانی که با آن برخورد کردند در گوشه ذهن داشته باشند. هر کروشه باز باید یک کروشه بسته معادل آن داشته باشد. در برنامه های فوق اولین کروشه باز متعلق به کلاس و آخرین کروشه بسته هم برای بستن آن کلاس است. ساختار سلسله مراتبی را تصور کنید که باید رعایت شود و مجموعه یک کروشه باز + کد +‌ کروشه بسته که یک بلوک کد است. در زبان پایتون این سلسله مراتب و بلوک های کد با ایجاد فاصله (while white space) رعایت می شوند، اگر در حال مطالعه پایتون هستید نگاهی دقیق تر به آن بیاندازید. خط def func با یک فاصله دقیقا بعد از تعریف کلاس آن و تمام کد های متعلق به آن را زیرمجموعه کلاس قرار داده است. و خط بعد دستور print با یک فاصله بیشتر آن را متعلق به تابع کرده است. توضیح تعریف تابع:همانطور که پیش تر توضیح دادیم توابع مجموعه ای از فرامین هستند که با فراخوانی نام تابع دستورات آن اجرا می شوند. همانطور که گفته شد بلوک کد اینجا هم باید رعایت شود. تعریف تابع در زبان های مختلف متفاوت است. در زبان های پایتون، سویفت و پی اچ پی مانند تعریف کلاس نیاز به یک کلمه کلیدی است. در پی اچ پی function، در سویفت func و در پایتون def اما در زبان های جاوا و سی پلاس پلاس نیازی نیست. تصویر زیر وجود حقیقی ندارد و هیچ برنامه این چنین نیست اما اگر بخواهیم کلمات کلیدی که در تعریف تابع استفاده میشوند را استفاده کنیم چون ترتیب موارد در همه تقریبا یکسان است می توان اینطور تصور کرد. اما توجه داشته باشید آنچه نوشته شده ترکیبی از همه زبان های فوق است و فقط برای دید کلی شما نسبت به اینکه تعریف تابع چه شکلی دارد آورده شده. هر کدام از زبان های فوق را که انتخاب کرده اید فعلا بصورت قراردادی بین خودمان قرار است برای آموزش نوشتن برنامه های ساده دستوراتی را داخل تابع اصلی بنویسیم و بلوک کدی که دیده اید دستکاری چندانی ندارد. پس اینکه در زبان انتخابی شما چه حالت هایی از تعریف تابع وجود دارد یا اینکه هر کدام از اینها چه معنایی دارند و چه تفاوتی ایجاد میکنند را نادیده بگیرید. به مرور همه آنها را با توجه به زبانی که با آن کار می کنید خواهید آموخت. چون مثلا modifier ها در زبان C# و زبان php متفاوت است و مربوط به سطوح بالاتری هستند که اکنون نیازی به دانستن آن نیست. تابع را همانطور که تعریف شده اند قبول می کنیم (نحوه تعریف در هر زبان را به آموزش آن زبان واگذار کرده و فقط با نام تابع کار داریم) و داخل آن را بررسی می کنیم. همه این توابع شامل یک خط کد هستند که با استفاده از دستور چاپ مربوط به آن زبان یک مقدار رشته ای (حروف و کلمات - String) را در خروجی نمایش می دهد. برای نوشتن در خروجی این دستور را در زبانی که قرار است کار کنید حفظ کنید و فرمت آن را آن طور که هست رعایت کنید. همانطور که در برنامه ها مشاهده میکنید در C# و جاوا با اتمام کلاس برنامه نیز تمام می شود. تنظیمات مربوط به کامپایل به صورت پیش فرض طوری تنظیم شده اند که تابع اصلی داخل کلاس اصلی برنامه را فراخوانی می کنند. در C++ تابعی با نام main باید وجود داشته باشد بصورت پیش فرض تابع main باید خارج از کلاس نوشته شود و این تابع فراخوانی خواهد شد. برای بقیه زبان های این مقاله باید یک شی از کلاسی که ساخته ایم ایجاد کنیم و تابع مورد نظرمان را خودمان صدا کنیم. چون در C++ تابعی با نام main باید وجود داشته باشد دستور ایجاد شی و فراخوانی تابع را داخل آن می نویسیم در دیگر زبان ها آنچه خارج از بلوک کد باشد حتما اجرا خواهد شد. فقط کافی است بعد از نوشتن بلوک کد شی را ایجاد کنیم و تابع را صدا بزنیم. ایجاد شی دقیقا مانند تعریف متغیر است که جلسه بعد راجع به آن خواهید آموخت. جلسه بعد شما بیشتر با متغیرها و انواع آن آشنا می شوید. نحوه دسترسی به اجزای کلاس مانند توابع آن توضیح داده خواهد شد و بیشتر با دستورات زبان مورد علاقه خود که همچنان مشترک هستند آشنا خواهید شد همچنین تعاریف فریم ورک و sdk را اشاره خواهیم کرد و الباقی اصطلاحات و آموزش ها را به دوره آموزشی که انتخاب کرده اید واگذار می کنیم و امیدواریم این آموزش ها سوالات ابتدایی که معمولا توضیحات آن در دوره ها جا می ماند کمک خوبی باشد. https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D8%B4%D8%AA%D9%85-rvnomghvjuwe </description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Sun, 02 May 2021 09:52:01 +0430</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت ششم</title><link>https://virgool.ir/CodeLovers/من-می-خواهم-برنامه-نویس-شوم-قسمت-ششم-h7wgykm5mm1g</link><description>سلام به همه دوستان، قسمت پنجم شما را با سودو کد آشنا کرد. این قسمت  شما را با پایه‌ای ترین و مهمترین مفهوم زبان های برنامه نویسی امروز یعنی شی گرایی آشنا خواهد کرد همچنین با مفاهیم تابع، نیز آشنا می‌شوید نهایتا با بررسی مختصری، راجع به مراحل طراحی یک برنامه آشنا می شویم. پس از پشت سر گذاشتن آموزش های لازم در صورتی که به عنوان نیروی تازه کار قرار باشد در جایی کار کنید از شما در مصاحبه راجع به اصول شی گرایی صحبت خواهد شد. و این بحث مهم است و در ادامه با چیستی آن آشنا خواهید شد. پس از ابتدا بهتر است به شیوه ای استاندارد آموزش خود را دنبال کنید و حتی اولین خط برنامه خود را نیز که در مقاله بعدی خواهیم آموخت به شیوه شی گرایی بنویسید.شما با هر زبانی که برنامه بنویسید نیاز به مفهوم شی گرایی خواهید داشت و در کار حرفه ای از شما انتظار می‌رود که با رعایت استاندارد ها، برنامه نویسی کنید. البته روشهای دیگری همچون طراحی عامل گرا هم وجود دارد که برای طراحی برنامه های بسیار خاص است. فرض کنید کارفرما از شما می خواهد فرایند کاغذی تحویل یک رسید به مشتری را به کامپیوتر متصدی منتقل کنید تا فرم را در یک برنامه پر کند و آن را چاپ کند و تحویل مشتری دهد. این برنامه نیز هم می تواند تحت وب نوشته شود و هم تحت هر نوع سیستم عاملی اما برگردیم سراغ شی گرایی، برای آنکه نگاهی شی گرایی به یک برنامه داشته باشیم هرچه در این برنامه وجود حقیقی و فرضی دارد مثل کاربری که قرار است فرم را پر کند و یا یک دسته بندی صرفا ذهنی (مثلا نحوه تسویه و ...) را یک موجودیت در نظر می گیریم.در این مثال در ساده ترین حالت موجودیت های اولیه ما: کاربر سیستم، فرم و مشتری هستند. حال می پرسید پس مثال دسته بندی چه شد؟ برای تعیین موجودیت ها باید دید آیا آن ها صرفا یک نام (مثلا اسم دسته) یا عدد هستند یا دارای خصوصیت های دیگری نیز هستند. آیا فقط در یک قسمت از برنامه استفاده خواهند شد یا برنامه دارای بخش های دیگری خواهد بود که از همین خصوصیت در آن بخش ها نیز استفاده خواهد شد؟ مثلا به صورت محال فرض کنید از مشتری فقط و فقط نام او مورد نیاز ماست. از آنجا که در این صورت نام مشتری را در فرم قرار خواهیم داد می‌تواند موجودیت نباشد بلکه تنها یکی از خصوصیت های فرمی باشد که قرار است پر شود. اما چون مشتری حاوی اطلاعات ارزشمندی است که بعدها از آنها استفاده های دیگری برای افزایش کارایی سیستم خواهیم داد باید در نظر داشته باشید علاوه بر اینها می تواند حاوی اطلاعات دیگری نیز باشد که صحیح نیست همه آن ها را متعلق به فرم ببینیم (البته هرکاری ممکن است).  تشخیص مرز خصوصیت و موجودیت دانستن یک مفهوم به عهده شماست. اما نکاتی وجود دارد:در صورتی که مفهوم مورد نظر شما بیش از یک خصوصیت دارد (مثلا نام، نام خانوادگی، کد ملی، سن و ...) بهتر است موجودیت جدا برای آن در نظر گرفتدر صورتی که این مفهوم قرار است در جای دیگری استفاده شود و یا چند بار تکرار شود بهتر است موجودیت در نظر گرفته شود زمانی که شما یک موجودیت دارید که با موجودیت دیگری ارتباط دارد (مثل مشتری و فرم) موجودیت مشتری در محلی جدا ذخیره می شود و تنها عددی به نمایندگی از آن موجودیت در محل ذخیره سازی فرم قرار می‌گیرد که آن را id می نامیم. حال مثلا برای اصلاح نام مشتری نیاز نیست همه فرم هایی که نام مشتری در آن است را اصلاح کنید. با اصلاح نام مشتری در محل خود همه چیز درست خواهد شد چون id که به نمایندگی در فرم ها وجود دارد تغییر نکرده و به همان موجودیت قبلی که اصلاح شده اشاره می‌کند.در مورد خصوصیت «نحوه تسویه» در فرم فرض کنید به شما بگویند این سیستم قرار است ارتقاء پیدا کند و شما در آینده به این ویژگی در جاهای دیگر سیستم نیز نیاز خواهید داشت، پس بهتر است از هم اکنون آن را موجودیت جدا در نظر بگیرید. هم نمی‌توان و هم می توان گفت اینگونه تفکر یعنی شی گرایی. چون این مفهوم در پیاده سازی نمودهای دیگری نیز دارد که با آن آشنا خواهید شد اما شروع شی گرایی همین طرز تفکر در مورد حتی ساده ترین برنامه‌ها است. مثلا در برنامه جمع دو عدد، کل برنامه را می‌توانید یک موجودیت در نظر بگیرید و آن را شی اصلی بنامید یا برنامه یا ماشین حساب، فرقی نمی‌کند. فرض کنید برنامه‌ای می نویسید برای روشن و خاموش کردن تنها یک لامپ led کوچک. باز هم میتوان کل برنامه را یک موجودیت (مثلا با نام فلاشر) در نظر گرفت. از این پس فرض کنید لفظ «کلاس - class» همان موجودیت است. یعنی می‌گوییم برنامه فلاشر می تواند یک کلاس باشد. یا کل برنامه در یک کلاس نوشته شود یا برنامه تحویل فرم دارای چندین کلاس است که با هم ارتباط دارند. شی چیست؟فرض کنید شما برنامه روشن کردن یک لامپ کوچک را نوشته اید بدین صورت فرض کنید که شما فقط آدرس فیزیکی محل لامپ را به آن میدهید و شروع به روشن و خاموش کردن آن لامپ می کند. حال به شما می گویند برنامه دیگری بنویسید که چندین لامپ را روشن کند. یک روش این است که برنامه را چند بار اجرا کنید و روش صحیح تر این است که برنامه را ارتقا دهید. حال برنامه شما پخته تر شده. صرفا یک فلاشر نیست. فلاشری است که چندین لامپ را روشن و خاموش می کند. پس الان علاوه بر موجودیت فلاشر (کلاس اصلی) موجودیت لامپ (یا کلید به صورت کلی تر فارغ از اینکه چه چیزی به آن وصل است) نیز دارید. پس برنامه اصلی باید چندین مصداق از کلاس کلید را بسازد. به هر مصداق یک شی گفته می شود. برنامه شما یک بار اجرا شده در نتیجه یک شی از آن درست می شود و به ازای هر کلیدی از کلاس کلید استفاده می کند (هر کدام متفاوت است چون خاصیت آدرس متفاوتی دارند) پس چندین شی از کلاس کلید ساخته می شود. شما یک بار کلاس فلاشر و کلاس کلید را می نویسید اما بنا به استفاده ممکن است چندین شی از آنها ساخته و مقادیر داخل آن متفاوت باشد. یا یک بار ساخته شود و چندین بار استفاده شود.به طور ساده فرض کنید یک فرم طراحی کرده اید. هر موقع نیاز آن داشتید می توانید یک کپی بگیرید و مقادیر متفاوتی را با خودکار در آن بنویسید. فرم شما یک کلاس و هر پرینت از آن یک شی است.توابع و خصوصیات کلاسدر قسمت قبل متغیر توضیح داده شده شد. هنگام توضیح موجودیت، برخی مفاهیم را خصوصیت نامیدیم. یک کلاس دارای یکسری خصوصیات است. این خصوصیات مقادیری را در خود جای می دهند، مثلا نام که رشته «سعید» در آن موقتا ذخیره می شود. خصوصیات یک کلاس در حقیقت متغیر های آن هستند. پس کلاس شما می تواند یکسری متغیر داشته باشد. به این متغیر ها attribute های یک کلاس نیز میگویند. کلاس «مشتری» می تواند متغیر های زیادی داشته باشد اما کلاس «فلاشر» اگر همچنان فرض کنیم قرار است با آدرس فیزیکی لامپ کار کند تنها همان متغیر را نیاز دارد. یک کلاس می تواند یک یا چند مجموعه دستورالعمل داشته باشد مثلا دستورات مربوط به ذخیره، دستورات مربوط به بررسی صحیح بودن یک فیلد از فرم یا دستورات مربوط فراخوانی یک فرم جدید. هر کدام از این مجموعه دستورات که حتی می تواند یک خط و یک دستور مجزا باشد را تابع (function) یا متد (method) مینامیم. البته در زبان های مختلف ممکن است برای این دو لفظ تفاوت هایی قائل باشند اما در کل مفاهیم یکسانی هستند.در کلاس فلاشر یک تابع می تواند وجود داشته باشد برای روشن کردن لامپ و یک تابع دیگر نیز برای شروع زمان و متوقف کردن آن.  با ساخت یک شی فلاشر جز آنکه در حافظه فضایی به آن اختصاص داده می شود و یا به اصطلاح در فضای رم بارگزاری می شود اتفاق دیگری نمی افتد در حقیقت با اجرای توابع موجود در کلاس دستورات داخل آن برنامه اجرا می شود و به عبارت دیگر برنامه شما اجرا می شود. پس از ساخت شی از کلاس می توان تابع زمان آن را فرخوانی (invoke) کرد و آن نیز می تواند تابع روشن و خاموش شدن را فراخوانی کند و ... . در قسمت های بعد و همچنین با دنبال کردن منابع آموزشی که برای زبان مورد علاقه خود تهیه کرده و در حال مطالعه آن هستید مثال هایی را در دنیای واقعی خواهید دید. این مقاله برای آماده کردن ذهن شما و پاسخ برخی سوالات از پیش بود که در هنگام رسیدن به این موضوع توفقی نداشته باشید.می دانم منتظر نوشتن اولین خط برنامه اجرایی هستید. در قسمت بعد اولین خط اجرایی را با شش مورد از زبانهای یاد شده در قسمت بعد خواهیم نوشت (جاوا، سی پلاس پلاس، پی اچ پی، سی شارپ، پایتون و سوئیفت). https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D9%81%D8%AA%D9%85-o7zzlikl2nmu </description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Sat, 01 May 2021 12:15:42 +0430</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت پنجم</title><link>https://virgool.ir/CodeLovers/من-می-خواهم-برنامه-نویس-شوم-قسمت-پنجم-rthcol8ut0sq</link><description>سلام، در قسمت چهارم از این سری آموزشی امیدوارم با جستجو و پرسش از دیگر دوستانتان زبان مورد علاقه خود برای شروع این ماجراجویی تازه را انتخاب کرده و در خصوص نحوه شروع یادگیری (خودخوان، شرکت در بوت کمپ، شرکت در کلاس آموزشی، دوره های آنلاین) انتخاب کرده اید. اما همزمان با اینکه جلسه اول را شروع کنید. اینجا سعی میکنیم به صورت موازی نهایتا تا چهار جلسه دیگر برخی اصطلاحات را تکمیل کنیم. برخی محتوای آموزشی ممکن است به دلیل ملکه شدن اصطلاحات در ذهنشان فراموش کنند باید این اصطلاحات را به شما شرح دهند.در این قسمت آموزشی شما با مفاهیم الگوریتم و فلوچارت آشنا خواهید شد. اما به زبان ساده. این مفهوم نیز مانند همه مفاهیمی که تا کنون معرفی شدند تعاریف بسیاری دارد. اما خلاصه همه این تعاریف «به مراحل اجرای دستورالعمل های خواست شما» الگوریتم می گویند و به نمایش تصویری این مراحل با استفاده از اشکال مربع و دایره و ... فلوچارت می گویند. این را بدانید در ابتدای راه تا رسیدن به لبه تکنولوژی مسیر شما هموار است و بر خلاف تصورتان بیشتر زمان را درگیر یادگیری برنامه نویسی نیستید. بلکه درگیر یادگیری ابزارهای آن هستید. زبان برنامه نویسی و آنچه استفاده میکنید ابزار کار شما هستند. تفکر حل مسئله شما و تبدیل یک ایده به یک برنامه (که خود ابزار است برای دیگران) توسعه نرم افزار است. یعنی شما با انتخاب ابزار هم باید استفاده از آن را یاد بگیرید هم به مرور زمان توانمندی حل مسئله پیدا کنید. اما نگران نباشید. شما از مسائل کوچوک شروع خواهید کرد. زمانی می رسد که بخواهید این ابزار (برنامه خود) را نه برای مردم عادی بلکه برای تولید ابزار دیگری بنویسید. مثلا بروید و یک زبان برنامه نویسی را ارتقاء دهید (این هم نمونه یک حالت خیلی پیچیده است و صدها مثال ساده و پیچیده دیگر وجود دارد که فعلا بگذاریم کنار) اما هرچه مسائل به مرور زمان پیچیده تر شود، شما ممکن است درگیر ارائه راه حل های مختلف (الگوریتم های مختلف) برای حل آن باشید.خوب قرار است چه چیز را یادبگیریم؟ در یک برنامه ساده مانند گرفتن اطلاعات یک فرم و نمایش آن ها یا ذخیره یک فرم جدید و بسیار مورد روتین که در برنامه های کاربردی امروز استفاده می شود مراحل کار برای شما که از توابع ارائه شده توسط زبانی که با آن برنامه نویسی میکنید استفاده می کنید ساده و مشخص هستند و نیاز به تفکر آنچنانی راجع به روش کار هم ندارید (صرفا رعایت ترتیب و دیدن تمام مراحل است). اما فرض کنید روزی قرار است برنامه ای بنویسید که از بین میلیون ها فایل قرار است فایل های شبیه به هم را استخراج کند. در آن زمان حتما به دانش و همه تجربیات دیگران در خصوص روش کار نیاز خواهید داشت تا برنامه شما این کار را در بهینه ترین حالت ممکن انجام دهد. قرار نیست کاربر یک سال منتظر نتیجه برنامه شما باشد. موارد بسیاری برای بحث در طراحی الگوریتم وجود دارد که زمانی که شما با کلیت آن بیشتر آشنا شوید می توانید آن ها را مطالعه کنید. ما سعی می کنیم ذهن شما را با کلیت موضوع آشنا کنیم. در تصویر بالا از شما می خواهم به حالت های مختلفی که از شهر A به شهر C می توان رفت فکر کنید. شکل فوق اصطلاحا یک گراف است (شکلی متشکل از نقاط و خطوط که مسیر یا چند وضعیت و ارتباط آن ها را معمولا نشان می دهد)زمانی که بحث در مورد روش است ممکن است هر تصمیمی بگیرید و البته تصمیمات به این وضوح قابل رویت نیست این گراف می تواند صدها نود (نقطه) و یال (خطوط اتصال) داشته باشد. می تواند هزینه پیمایش رفت و برگشت روی یک یال متفاوت باشد (جاده ای دوطرفه را تصور کنید که فقط یک طرف آن آسفالت شده باشد و مسیر برگشت خاکی است) حال تصور کنید شهر D دارای ارتفاع باشد یعنی هزینه B به D بالا باشد. حال اگر این گراف بزرگتر باشد و همه این اطلاعات را به شما بدهند در هر لحظه از شما خواهند خواست کم هزینه ترین مسیر را پیدا کنید (سرعت انجام اینکار خیلی مهم است چرا که شما منابع cpu و ram بی نهایتی ندارید و اگر این درخواستها افزایش پیدا کند مثلا در هر ثانیه هزاران درخواست برای محاسبه به برنامه شما بفرستند آیا برنامه شما پاسخگو خواهد بود؟)آنچه گفته شد مربوط به برنامه های خاص است و نه لزوما بزرگ، فعلا آنچه ما با آن برخورد می کنیم نیازی به محاسبات ساده یا پیچیده ریاضی ندارند. توابعی در طراحی الگورتیم برای محاسبه زمان اجرای برنامه وجود دارد که می توانید با مقایسه نتیجه آن ها حساب کنید که کدام روش بهینه ترین روش نوشتن یک برنامه خواهد بود. و بر آن اساس الگوریتم مورد نیاز را طراحی کنید. دروس طراحی الگوریتم و ریاضیات گسسته و آمار و احتمالات در رشته کامپیوتر و IT بصورت تخصصی به این موضوع می پردازندبرگردیم به آموزش ساده خودمان، فرض کنید می خواهید برنامه ای بنویسید که یک لامپ LED را هر ۵ ثانیه یک بار روشن کند (فرض ما بر این است که همچنان به آدرس لامپ احتیاج داریم). پس مراحل کار به این صورت است: شروعگرفتن آدرس کلید لامپروشن کردن کلیدنیم ثانیه توقفخاموش کردن کلیدپنچ ثانیه توقفرفتن به مرحله سهپایاندر یک الگوریتم باید ترتیب اجرای مراحل کار مشخص باشد و باید دارای جزئیات باشد. آنچه گفته شد یک مثال برای درک موضوع است و راجع به توقف و روشن کردن لامپ و گرفتن آدرس لزوما به این شکل نیست. برنامه فوق همیشه اجرا خواهد شد و به قسمت پایان نخواهد رفت چون هر بار در مرحله ۷ به مرحله ۳ باز خواهد گشت این عمل را یک حلقه (loop) می نامند. همچنین آدرس کلید را شما یک بار میگیرید و در داخل حلقه استفاده میکنید خوب برنامه ها هر آنچه که از آن استفاده میکنند باید تحت یک نام ذخیره کنند تا از آن استفاده کنند مثلا فرض کنید نام keyAddress را برای این کار در نظر میگیریم، اصطلاحا به این نام متغیر می گویند.هرچند آموزش متغیر ارتباطی با این مقاله ندارد اما در یک نگاه اجمالی و به طور کلی به شکل زیر می توان آنها را تعریف کرد (البته در هر زبان این موارد دارای ملاحظاتی است که در طول آموزش آن ها یاد خواهید گرفت)متغیر مانند ظرفی است که مقادیری را در خود نگاه می دارد. این مقادیر می توانند حتی شامل متغیرهای دیگر (سختار تو در تو که خود نیز دارای اجزا است) باشد در مثال فوق فرض کنید آدرس کلید متشکل از ترکیبی از حروف و اعداد مثلا A103984F4 که البته طریقه استفاده از آن را کاری نداریم. به هر مقداری که دارای حروف باشد (صرفا حروف یا ترکیبی از حروف و اعداد) یا دارای علائم خاص مانند &amp; یا هر کاراکتر دیگری اصطلاحا متغیر از نوع رشته (string) می گویند. مثال فوق از 9 حرف/عدد تشکیل شده به تک تک اینها یک کاراکتر میگوییم یعنی رشته از کاراکتر (character یا char) تشکیل شدهمتغیرهایی که مقادیری فقط از اعداد صحیح در خود نگاه می دارند مانند (124-) را متغیر عددی میگوییم که بسته به میزان بزرگی و کوچکی عدد یک نام خاص دارند (short, integer / int, long, big integer و ...) نام هایی است که با همه آنها آشنا خواهید شد. متغیرهایی که مقادیری اعشاری را در خود نگاه می دارند نیز float و Double می نامند نوع دیگری از متغیر نیز وجود دارد که همیشه یکی از دو مقدار true یا false را در خود نگاه می دارد (صحیح یا غلط) همچنین معادل آن می تواند 1 یا 0 باشد، در حقیقت این متغیر مانند یک سویچ فیزیکی است که تنها دو حالت دارد که بعدها استفاده آن را یاد خواهید گرفت. این متغیر ها را از نوع Boolean مینامندو در نهایت به صورت کلی متغیر هایی هم هستند که متغیر های دیگری را در خود ذخیره می کنند که باید در آینده و پس از قسمت بعدی (آموزش شی گرایی) راجع به آن ها صحبت کرد.به آموزش اصلی برگردیم:برنامه جمع دو عدد را تصور کنید: شروعگرفتن عدد a (گرفتن عدد تحت نام متغیری به نام a)گرفتن عدد bچاپ a + bپایانالگوریتم فوق می تواند یک مرحله اضافه هم داشته باشد. مثلا مقدار a+b را در متغیری به نام مثلا sum ذخیره کنیم و در مرحله چاپ بجای a + b مقدار ذخیره شده در متغیر sum را چاپ کنیم. start;&#xA;get a;&#xA;get b;&#xA;sum = a + b;&#xA;print sum;&#xA;end;اصطلاحا چیزی که در بالا میبینید سودوکد میگویند یعنی بصورت کلی و فارغ از دستورات مختص زبانی که با آن برنامه می نویسید (صرفا استفاده از الفاظ انگلیسی معنا دار که گویای مراحل است)  بتوان یک الگوریتم را نمایش داد. نکته: به علامت = دقت کنید که برای انتقال یک مقدار به یک متغیر است. در بکار بردن علامت مساوی همیشه مقدار سمت راست در متغیر سمت چپ مساوی قرار می گیرد (همواره رسم الخط انگلیسی را در نظر بگیرید). گاهی لازم است شما با توجه به شرایط موجود کاری انجام دهید. مثلا می خواهیم یک عدد بگیریم و اطلاع دهیم عدد زوج است یا فرد. (اعدادی زوج هستند که بر 2 بخش پذیر باشند) در نتیجه باید وقتی بر 2 تقسیم می شوند حتما باقیمانده عدد 0 باشد. نکته: شما با عملگر های جمع (+)، تفریق (-)، ضرب(*) و تقسیم(/) آشنایی دارید (در تمام زبان ها از علامت های داخل پرانتز برای آنها استفاده می شود). عملگر دیگری به اسم mod که علامت آن (٪) است وجود دارد که مقدار باقیمانده تقسیم دو عدد را مشخص می کند.start;&#xA;get a;&#xA;c = a mod 2;&#xA;if (c == 0)&#xA;        print &#34;even&#34;&#xA;else&#xA;        print &#34;odd&#34;&#xA;end;شروعگرفتن عدد aذخیره باقیمانده تقسیم a بر عدد 2 در متغیر cاگر مقدار متغیر c برابر با 0 بودچاپ کن &#34;زوج&#34;در غیر این صورتچاپ کن &#34;فرد&#34;پایاندر تمام زبان های برنامه نویسی برای بررسی یک شرط از کلمه if استفاده می کنند. و در سودوکد هم همینطور مینویسند. مثلا if(a==true) یعنی اگر a مقدار true را داشت. البته توجه داشته باشید چون در زبان های برنامه نویسی عملگر= برای انتقال یک مقدار به یک متغیر است در دستورات شرطی عملگر == کار مقایسه را انجام میدهد بدین صورت که اگر هر دو طرف عملگر مقدار یکسانی را داشته باشند اصطلاحا وارد شرط خواهد شد و دستورات زیر مجموعه آن را اجرا می کند و در غیر این صورت از آن دستورات می گذرد (اگر برنامه دارای else یا «در غیر این صورت» باشد فقط یکی از کد های خود شرط یا در غیر اینصورت اجرا میشود). که در مثال فوق دستور چاپ زوج، دستور زیر مجموعه شرط به شمار می رود. و چاپ فرد، دستور زیر مجموعه else به شمار می رود.دستورات شرطی می توانند شامل else (در غیر این صورت) نباشند که در این صورت اگر شرط بر قرار باشد دستور زیر مجموعه آن اجرا و اگر بر قرار نباشد از دستو زیر مجموعه آن صرف نظر کرده و باقی دستورات را اجرا می کند. در هنگام آموزش زبان انتخابی خود با انواع این دستورات و دیگر دستورات در آن زبان با قوانین نوشتار آن زبان آشنا خواهید شد. با حالت های دیگر ممکن آشنا شده و آن ها را به کار خواهید گرفت.اکنون شما آماده هستید که برای انگیزه بیشتر اولین برنامه را بنویسید. پس آموزش زبان برنامه نویسی انتخابی را هرچه سریع تر شروع کنید (البته ما باز هم برای کمک به بیان اصطلاحات بیشتر در قسمت بعد شی گرایی را آموزش داده و در قسمت بعد از آن یک روش خیلی ساده برای اجرای اولین برنامه را در چند زبان مختلف برای آشنایی شما نشان می دهیم.فلوچارت چیست؟ همانطور که گفته شد نمایش تصویری یک الگوریتم است اما نکاتی دارد:از شکل بیضی برای شروع و پایان استفاده می شوداز شکل متوازی الاضلاع برای ورودی و خروجی برنامهاز شکل مربع برای نمایش محاسباتاز شکل لوزی برای نمایش شرط هاهمین.  https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%B4%D8%B4%D9%85-h7wgykm5mm1g </description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Wed, 28 Apr 2021 00:59:14 +0430</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت چهارم</title><link>https://virgool.ir/CodeLovers/من-می-خواهم-برنامه-نویس-شوم-قسمت-چهارم-yyupjvnn7adw</link><description>سلام، تا قسمت سوم از این سری آموزشی با خیلی اصطلاحات آشنا شدین و در فضای لازم برای انتخاب یک زبان برای شروع ماجراجویی تازه در زندگی قرار گرفته اید.در این قسمت در کنار شما هستم تا بتوانید انتخاب خوبی با توجه به علایق خود داشته باشید.بعد از انتخاب زبان محبوب خود، باید دست به کار شوید و از طریق بوت کمپ ها یا منابع آموزشی رایگان و غیر رایگان اینترنتی مانند سایت های آموزشی و یا دانلود ویدئو یا کتاب آموزشی در خصوص زبان انتخابی شروع کنید. بعد از این مقاله لحظه ای درنگ جایز نیست. اگر زبان انگلیسی شما خوب است از سایت های دانلود و سایت git.ir می توانید انواع ویدئو آموزشی به زبان انگلیسی را دریافت کنید. کتب انگلیسی هم هست که البته پیشنهاد میکنم با ویدئو شروع کنید. چرا که کتب مطالب را به تفصیل بیان می کنند که خوبی آن این است که اصولی و درست یادمیگیرید و بالاخره بهتر است به آن رجوع کنید ولی بدی آن این است که اگر در ابتدای راه باشید شاید حوصله شما را سر ببرد تا بخواهید یک کار کوچک انجام دهید. در خصوص منابع فارسی هم الان دیگر سایت های زیادی هستند که با یک جستجوی ساده آن ها پیدا خواهید کرد.در خصوص این سری آموزشی نهایتا با دو یا سه مقاله بیشتر جهت اشاره به برخی اصطلاحات دیگر که احتمالا در ابتدای راه با آنها برخورد خواهید کرد در خدمت شما خواهم بود، اما بعد از این مقالات، تنها با خواندن مقالات برنامه نویس نخواهید شدمتاسفانه برخلاف استمرار و تاکید بر نوشتن حتی ساده ترین کدها برخی گمان می کنند این مطلب ساده بود، تنها کافیست آن را بخوانم، این حقیقت را از زبان همه برنامه نویس ها به شما می گویم تا زمانی که کد نویسی را شروع نکنید و تا زمانی که تمرین نکنید حتی ساده ترین برنامه ها که در ابتدا با آن برخورد می کنید مانند جمع زدن دو عدد، فکر بلند پروازانه نوشتن بزرگترین و کاملترین نرم افزار اتوماسیون اداری بومی کشور یا کار در شرکتی مانند گوگل تحت عنوان برنامه نویس را از سرتان بیرون کنید. بله شما در سخت ترین مرحله از شروع زبان برنامه نویسی هستید. نوشتن کدهایی که شاید بنظر هیچ کارایی نخواهند داشت و دوست دارید هرچه سریع تر از این مرحله عبور کنید. گذر از این مرحله که بعدها به آن می خندید کار افراد مثبت اندیشی مانند شماست. کسانی که ثابت قدم هستند و همیشه در هر کاری بهترین هستند. بعد از آشنایی با زبان ها، زبان مورد علاقه خود را انتخاب کنید، یادگیری آن زبان را شروع کنید، نرم افزارهای مورد نیاز را نصب کنید و از پرسیدن نترسید... قصدمان این است که معرفی اجمالی از زبان های برنامه نویسی مختلف داشته باشیم تا بتوانید زبان مورد علاقه خود را انتخاب کنید. توضیحاتی شامل میزان سختی یادگیری، دستمزد احتمالی و توضیحاتی مختصر راجع به خود زبان. در دنیای کامپیوتر بیش از ۶۰۰ زبان برنامه نویسی مختلف بوجود آمده است که ما در اینجا به لیستی شامل ۱۰ زبان محبوب و پر استفاده در سال های اخیر اکتفا خواهیم کرد. انتخاب بین ۱۰ زبان هم مشکل است. البته شاید شما دوست داشته باشید به سه زبان مسلط شوید که حتما می توانید اما بهتر است تا زمانی که در یکی از آنها مهارت کافی را بدست نیاورده اید وارد زبان دیگری نشوید و در تصمیم خود مصمم باشید (مگر برای انتخاب خود نیاز داشته باشید امتحان کنید). مقالات متعددی را قبل از شروع به نوشتن این مقاله مطالعه کردم تا بتوانم بهترین شروع را بجای نوشتن نام زبان و تعاریفی در مقابل آن داشته باشم. دو سوال اساسی که در شروع آموزش در ذهن همه افراد است راجع به اینکه من توسعه دهنده چه نوع برنامه ای باشم بهتر است؟ کدام زبان برای آن کار از همه بهتر است؟ اعتراف می کنم این دو سوال بسیار سخت است و پاسخ مستقیمی ندارد و به عوامل بسیاری بستگی دارد. اما به طور خلاصه سعی می کنم پاسخی اجمالی در خصوص بازار ایران به شما بدهم البته نیاز به پرسش از افراد بیشتری نیز دارید، به علاوه اینکه حتما راجع به زبان ها توضیحات اجمالی را مطالعه کنید. در ایران توسعه برنامه های تحت دسکتاپ طرفداران زیادی ندارد بازار محدود و عدم حمایت از حق کپی و عدم وجود فرهنگ آن به دلیل عادت استفاده از برنامه های کپی با کیفیت اروپایی از عوامل آن است. همچنین توسعه و شخصی سازی سیستم عامل برای استفاده در سخت افزارهای خاص نیز همینطور. سیستم های امبد تنها در مصارف نظامی استقبال شده و به صورت محدود در برخی تولید کنندگان محصولات اینترنت اشیاء (معمولا تکنولوژی سخت افزار و نرم افزار هر دو وارد می شود).اما بصورت کلی می توان از زبانی که برای توسعه برنامه های تحت وب است برای توسعه برنامه تحت سیستم عامل هم استفاده کرد. به غیر از زبان های استثنایی. هرچند صرف اینکه بتوان با یک زبان برنامه تحت وب نوشت تنها عامل انتخاب آن زبان نخواهد بود. هزینه تامین نیرو برای نگهداری و توسعه آن. میزان پاسخگویی با توجه به حجم درخواست ها نیز موثر است و ابزارهایی که برای توسعه در آن زبان وجود دارد.علت انتشار قسمت سوم همین انگیزه موجود در ایران برای برنامه های تحت وب و برنامه های موبایل (اندروید و ای او اس) است که طرفداران بیشتری دارد (برنامه های موبایل نیز اکثرا به تنهایی روی موبایل کار نمیکند و باید به سروری برای ارسال و دریافت اطلاعات با توجه به هدف برنامه وصل شود). در نتیجه شما در این رده موقعیت شغلی بیشتری خواهید داشت و البته رقیبان بیشتری هم همچنین که بسته به کیفیت کار و سطح دانش در شرکت های خصوصی و بسته به میزان رابطه شما با یکی از مدیران در برخی شرکت های دولتی کار مناسب را پیدا خواهید کرد (البته شرکت های دولتی گذری برای رسیدن به سمت مدیریت بدون تلاش است و تا آن زمان حقوق مناسبی نخواهید داشت) و اما در دنیا توسعه دهندگان C و ++C بیشترین حقوق را دارند و البته کار آنها بسیار سخت تر و نیاز به دانش و تجربه بیشتری دارند، بعد از آن شاید به جرأت بتوان زبان جاوا را قرار داد سپس زبان های PHP, Python, Ruby و بعد از آن #C و جاوااسکریپت و Objective-C و باقی زبان های پر طرفدار، دسته بندی ارائه شده دقیق نیست بلکه تنها زبان های بسیار پر طرفدار را از جهت میزان سختی یادگیری و بیشترین درآمد ترتیب کرده است. بهتر است از خود بپرسیم قرار از چه کاری انجام دهیم. با کمک مقاله ای در سایت Udemy و کمی تغییرات سعی می کنیم موضوع را روشن بیان کنیم.من میخواهم توسعه دهنده سایت باشم، و اپلیکیشن های تحت وب بنویسمشما به یادگیری زبان SQL که برای کار بر روی پایگاه داده است (محل ذخیره اطلاعات برنامه شما) نیاز خواهید داشت. بعلاوه زبان JavaScript که توضیح داده خواهد شد. و حداقل با یکی از زبان های Java, python, ruby, php و یا #C می توانید بصورت پروژه ای یا تحت عنوان برنامه نویس در شرکت های مختلف کار کنید. می توانید به توسعه نرم افزارهای تحت وب نظیر برنامه های سازمانی (مثلا حضور و غیاب) و ... یا توسعه وب سایت ها مشغول شوید. در این حیطه کاری البته دو دسته کلی نیز وجود دارد: Back-end Developer: به توسعه دهندگانی گویند که مهارت و تجربه کافی در زمینه توسعه برنامه اصلی دارند و با زبان های اشاره شده فوق کار می کنند. و Front-end Developer: به کسانی گویند که دانش بسیار خوب از وب، فعلا تنها زبان JavaScript و هم Html, Css این افراد وظیفه پیاده سازی طراحی ظاهری صورت گرفته توسط طراحان (به صورت معدود افرادی نیز هستند که گرافیک نیز میدانند و کار طراحی را نیز خود انجام می دهند - که توصیه نمی شود). معمولا رابطه خوب و صمیمانه ای بین این گروه و طراحان رابط کاربری باید وجود داشته باشد. یک بحث سخیف بین برخی گروه ها بک اند. فرانت اند. طراحان رابط کاربری و طراحان گرافیک ممکن است به وجود بیاید که یک گروه حس برتری نسبت به گروه دیگر پیدا کند. مانند این است که دست شما به پای شما بگوید من می توانم این بدن را راه ببرم پس وجود تو بی دلیل است و من به تو برتری دارم. در کل اگر مدیریت بخشی با شماست و حتی پذیرفتن سلیقه دیگران برای شما سخت است بهتر است اجازه دهید هر کسی کار خود را انجام دهد. اگر احساس می کنید بهتر از آن ها هستید شما نیاز به متخصص ندارید. یا خودتان انجام دهید یا برای این کار در آگهی استخدام شرکت عنوان شغلی را از طراح و گرافیست یا طراح رابط کاربری یا مدیر محصول و ... به کارگر ساده تغییر دهید.من می خواهم توسعه دهنده بازی های کامپیوتری باشمبازی های کامپیوتری شامل بازی های کوچک تحت وب، برنامه های موبایل و بازی های تحت دسکتاپ هستند لذا زبان هایی که با آن ها می توان کار کرد شامل: C, C++, Java, Objective-C, JavaScript, Html5 و #C است. در زمان گذشته از ActionScript  هم استفاده می شد که اکنون منسوخ شده است. البته ما به همین بخش که مربوط به برنامه نویسی است بسنده می کنیم.بازی های رایانه ای فضای بسیار گسترده ای دارد. با توجه به نوع بازی. معماری آن و مدل درآمدی و ... شغل های متفاوت و متنوعی دارد.من می خواهم توسعه دهنده برنامه های موبایل باشمهمانطور که در ابتدا گفته شد باید یا با زبان Java یا Kotlin و یا Objective-C کار کنید البته زبان جدید Swift نیز برای توسعه برنامه برای اپل به این جمع ملحق شده.همچنین با استفاده از زبان JavaScript می توان برنامه های بسیار ساده ای نیز نوشت و به طریقی برای هر دو سیستم عامل از این برنامه خروجی گرفت اصطلاحا برنامه های نوشته شده با جاوااسکریپت را هیبریدی می نامند از تکنولوژی های این روش می توان از cordova نام برد.یک روش دیگر نچندان مرسوم نیز وجود دارد که با استفاده از زبان #C کد خود را می نویسید و این کد به زبان Java و یا Objective-C تبدیل می شود (با استفاده از xamarin) و سپس می توان خروجی لازم برنامه ها را گرفت که این روش فقط برای کسانی توصیه می شود که توسعه دهندگانی هستند که این زبان ها را می دانند و نرم افزارهای ساده ای نیاز دارندشما تنها با داشتن روش اول می توانید ادعا کنید که توسعه دهنده برنامه های موبایل هستید. نوشتن برنامه با روش اول را اصطلاحا نوشتن برنامه های Native می گویند. من می خواهم توسعه دهنده نرم افزار باشمدر حالت کلی برنامه های تحت دسکتاپ را خیلی ساده نرم افزار می نامیم. برای توسعه نرم افزار حتما به زبان SQL نیاز خواهید داشت. و می توانید حداقل یکی از زبان های C, C++, C#, Java و یا Python را برای این کار انتخاب کنید. حال به سراغ توضیح مختصر راجع به زبان هایی می رویم که در این مقاله به آن ها اشاره شده است زبان C:به شخصه اولین زبانی که برای یادگیری برنامه نویسی انتخاب کردم C بود و مثل همه زبان ها اولین کاری که در شروع آموزش با آن برخورد خواهید کرد چاپ جمله «سلام دنیا!» یا جمع دو عدد است. به جرأت می توان گفت برای شروع یادگیری برنامه نویسی، زبان C می تواند بسیار مفید باشد. این زبان قابلیت کار با سخت افزار را نیز دارد و زبان پایه ای است که زبان های مدرن دیگر از جمله C++, Java, C#, JavaScript, و Perl از آن بوجود آمده اند. این زبان در سال ۱۹۷۲ (۱۳۵۰ شمسی) متولد شده است. زبان ++C:با وجود اینکه زبان C از لحاظ کارایی بسیار عالی است اما احساس نیاز به وجود شی گرایی برای کارهای بزرگتر زبان ++C را پایه گذاری کرد. این زبان در سال ۱۹۸۳ (۱۳۶۱ شمسی) بوجود آمد. زبان سی پلاس پلاس یک زبان بسیار عالی برای خلق برنامه های بسیار عالی است از جمله نرم افزارهایی که با این زبان توسعه داده شده می توان به Google Chrome, Mozilla Firefox, Winamp و همچنین سری Adobe مانند فوتوشاپ اشاره کرد. همچنین بسیاری از بازی های تحت دسکتاپ و سیستم عامل ویندوز با استفاده از زبان ++C نوشته شده اند. یادگیری این زبان سخت است و زمان و صبر بیشتری نسبت به زبان های دیگر نیاز دارد اما به همان نسبت کارهای بزرگتری می توان با آن انجام داد و از نظر موقعیت شغلی نیز میانگین بیشترین حقوق را نسبت به زبان های دیگر دارد. زبان Java و Kotlin:زبان جاوا در شرکت سان مایکروسیستم و در سال ۱۹۹۰ بوجود آمد و در حقیقت اولین زبانی است که ذاتا شی گراست. و با شعار «یک بار بنویس، همه جا اجرا کن (WORA)» به وجود آمد. فقط کافی است یک بار برنامه نوشته شده با جاوا را اجرا کنید و فارغ از نوع سیستم عامل و سخت افزار در صورتی که jvm یا ماشین مجازی جاوا در سیستمی نصب باشد کد کامپایل شده شما بدون مشکل اجرا خواهد شد. البته تمام زبان ها در گذر زمان با ارائه پکیج ها یا نرم افزارهای مختلف سعی در رفع این مشکل کرده اند و به نوعی موفق هم بوده اند. اما حضور jvm در جاوا به آن برتری داده است. کد یک بار بیشتر نیاز به کامپایل ندارد و علاوه بر آن فرقی نمی کند که سیستم عاملی که کد در آن اجرا می شود ۳۲ بیت خواهد بود یا ۶۴ بیت و ... و بهینگی از نظر کارایی باعث شده تا جاوا برای نوشتن نرم افزارهای بسیار بزرگ بیشترین استفاده را داشته باشد. بعد از خرید شرکت سان توسط اوراکل و پس از مدتی مجددا شاهد درخشش جاوا بوده ایم و قابلیت هایی که در نسخه ۸ ارائه شده گویای پیشرفت آن است. هر چند در فاصله خرید جاوا توسط شرکت اوراکل و انتشار نسخه های 7 و 8 در طول 8 سال باعث شکل گیری زبان هایی مانند اسکالا و کاتلین برای ارائه زبانی قوی تر و بهتر شد و اکنون زبان کاتلین مورد استقبال قرار گرفته و گوگل آن را زبان اصلی برای توسعه اندروید معرفی کرده (قبل از این کار جاوا به عنوان زبان اصلی شناخته می شد.)زبان کاتلین نیز از JVM استفاده می کند.زبان جاوا برای نوشتن هر نوع نرم افزاری که توضیح داده شد مناسب است از بازی گرفته تا نرم افزارهای تحت وب. از ماشین لباسشویی گرفته تا شاتل فضایی. زبان #C:این زبان در سال ۲۰۰۰ توسط مایکروسافت ارائه شد و از نظر دستوری بسیار شبیه جاوا است و اگر در زبان جاوا مهارت دارید به سادگی می توانید این زبان را نیز فرا بگیرید. شعار سی شارپ این بود که زبان به نیرومندی سی پلاس پلاس و قابلیت های جاوا را تجربه خواهید کرد. با این زبان می توان برنامه های تحت وب، برنامه های تحت سیستم عامل ویندوز و برنامه های تحت سیستم عامل موبایل ویندوز فون توسعه داد.زبان Objective C: این زبان توسط اپل ارائه شده. این زبان نیز مانند سی پلاس پلاس به منظور ایجاد قابلیت شی گرایی در زبان قدرتمند C و در همان سال ارائه شده. گرچه این زبان به منظور توسعه نرم افزارهای مناسب برای سیستم عامل های مخصوص شرکت اپل توسعه داده شد. با قابلیت های این زبان می توانید نرم افزارهای تحت سیستم عامل های کامپیوتر و گوشی های شرکت اپل توسعه دهید. البته اگر به دنبال توسعه نرم افزارهای تحت این سیستم عامل ها هستید صبر کنید زبان دیگری نیز وجود دارد. &lt;h4&gt;زبان PHPیکی از پر استفاده ترین زبان های برنامه نویسی برای توسعه نرم افزارهای تحت وب، کد شما سمت سرور قرار می گیرد و خروجی به صورت HTML به مرورگر کلاینت باز می گردد. از آنجا که این زبان متن باز است و استفاده و توسعه آن برای همه آزاد است هم شاهد نرم افزارهای مختلف رایگان و البته تجاری بسیار و هم ماژول های بسیاری برای آن هستید. کمپانی Zend که در توسعه php نقش مهمی دارد جهت افزایش بهینگی php تلاش بسیاری کرده، facebook نیز یک ماشین مجازی برای php نوشته است (که البته کارایی آن ۱۰۰ درصد نیست) همچنین در php ورژن ۷ شاهد افزایش فوق العاده سرعت پردازش و توان پاسخ به درخواست های بیشتر هستیم. و در نسخه 8 قابلیت های دیگری نیز به آن اضافه شده که کار با آن را لذت بخش تر می کند.یادگیری این زبان نسبت به جاوا و خانواده سی راحت تر است. همچنین اسکریپت های رایگان بسیاری برای مقاصد مختلف در این زبان وجود دارد مانند جوملا، وردپرس، دروپال و ... که می توانید از آن ها استفاده کنید. زبان Python:یادگیری این زبان از php نیز راحت تر است اما کارایی بسیار بالایی دارد. این زبان در گذشته زیاد مورد استقبال قرار نگرفته بود اما بهتر است بدانید زبان سازمانی شرکت گوگل پایتون است و همچنین نرم افزار محبوب اینستاگرام نیز با این زبان توسعه داده شده. مانند php برای python نیز فریم ورک هایی برای توسعه نرم افزارهای تحت وب بوجود آمده.زبان پایتون یک زبان دانشگاهی و قوی است که برای بسیار کارها مانند پردازش تصویر و هوش مصنوعی و یادگیری ماشین نمی توان با آن رقابت کرد. هرچه راجع به این زبان مطالعه کنید بیشتر شیفته آن خواهید شد.زبان Ruby:مانند زبان پایتون ساده است اما تمرکز آن برنامه های تحت وب بوده است. نام این زبان همواره در کنار فریم ورک مخصوص توسعه برنامه های تحت وب آن یعنی Ruby on rails برده می شود. و پرژه های زیادی با این فریم ورک خواهید یافت.زبان Swift:این زبان به تازگی در سال ۲۰۱۴ توسط اپل ارائه شده و سعی در استفاده از بهترین قابلیت های C و Objective-C در کنار سادگی داشته است. یادگیری آن ساده و برای توسعه نرم افزارهای تحت سیستم عامل های شرکت اپل استفاده می شود.زبان SQL: این زبان زبان توسعه نرم افزار نیست. بلکه زبان Query (یا اصطلاحا پرس و جو - برای ثبت داده یا جست جوی یک داده) است. این زبان برای ایجاد و مدیریت پایگاه های داده است و از دستورات بسیار ساده ایجاد یک جدول و ثبت یک داده یا فراخوانی آن و دستورات بسیار پیچیده برای تهیه یک گزارش از یک پایگاه داده بسیار بزرگ با داده بسیار زیاد را شامل می شود. بسته به نوع نرم افزاری که در حال توسعه آن هستید ممکن است نیاز به دانش کسی پیدا کنید که چندین سال در زمینه پایگاه های داده تجربه دارد. در هر صورت بسیار کم پیش میاید که شما را فقط برای دانشتان در زمینه SQL بخواهند و این زبان به تنهایی کارایی ندارد مگر در موارد خاص. پایگاه داده های بزرگ با حجم تراکنش بسیار بالا.زبان جاوااسکریپت:این زبان به دلیل کاهش لود بالا بر روی سرور برای برخی کارهای قابل انجام در سمت کلاینت مورد توجه قرار گرفت، ابتدا این زبان سمت کلاینت بشمار می رفت و تنها برنامه ها یا دستورات تقریبا ساده ای را شامل می شد که همراه کد html در مرورگر کلاینت اجرا میشد. مثلا نمایش یک ساعت یا خاصیت جابه جایی باکس ها با استفاده از ماوس در مرورگر، نمایش یک گالری عکس و ... اما اکنون برنامه های تحت وب در قسمت بک اند نیز به کمک پروژه node.js با این زبان برنامه های سمت سرور هم توسعه داده می شود. همچنین فریم ورک هایی نیز به این منظور توسعه داده شده علاوه بر این این زبان در جاهای دیگری مانند پایگاه داده های جدید مانند MongoDB نیز قابل مشاهده است.  https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D9%BE%D9%86%D8%AC%D9%85-rthcol8ut0sq موفق باشید.</description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Sun, 18 Apr 2021 23:36:03 +0430</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت سوم</title><link>https://virgool.ir/CodeLovers/من-می-خواهم-برنامه-نویس-شوم-قسمت-سوم-i45ylczatumf</link><description>سلام به همه دوستان، در قسمت سوم مطمئن هستم بحث ما مهیج تر از قبل خواهد بود، در قسمت دوم علاوه بر آشنایی با اصطاحات کلی انواع برنامه ها رو مشخص کردیم و روش کار و بصورت کلی خروجی یک برنامه غیر تحت شبکه/وب رو توضیح دادیم. برای اینکه بتونیم برنامه های کلاینت سروری و تحت وب (بصورت کلی تحت شبکه) رو توضیح بدیم باید یه مقدار شبکه یاد بگیریم، در نهایت بررسی می کنیم وقتی ما آدرس یک سایت رو تو آدرس بار مرورگر وارد می کنیم چه اتفاقاتی اون پشت میافته و چندین درخواست در کسری از ثانیه داده میشه و عموما سایت ها چطور کار می کنن. مانند قسمت دوم در هر قسمتی اصطلاحاتی جدید به دانش شما اضافه خواهد شد.شبکه چیست؟زمانی که چند وسیله الکترونیکی بمنظور هدفی بهم وصل میشوند(به هر شکلی) تشکیل یک شبکه می دهند. عموما شبکه شامل تجهیزاتی که امکان پردازش دارند مانند گجت های هوشمند (موبایل و تبلت و ...) و کامپیوتر و همچنین وسایلی که این امکان را فراهم می کنند و نهایتا وسایلی مانند پرینتر که خدماتی را ارائه می دهند است و این شبکه ها را شبکه های کامپیوتری می گویند. خوب حال فرض کنید دو لپ تاپ به هم وصل شده اند (به وسیله کابل شبکه یا بیسیم). تا زمانی که این دو دستگاه نتوانند با هم ارتباط برقرار کنند شبکه شما کامل نشده است. گذشته از اینکه برای ارتباط این دو چه تنظیماتی را باید انجام دهیم. در اینجا مفاهیم پایه ای گفته می شود. با دانستن این مفاهیم نهایتا با یک جست و جوی ساده و انجام تنظیمات حتی در صورتی که این کار را انجام نداده اید می توانید در چند دقیقه یک شبکه با دو یا چند لپ تاپ تنظیم کنید. یک مثال دیگر در مورد شبکه: در اکثر خانه ها مودم های بیسیم وجود دارد که کامپیوتر و موبایل شما برای اتصال به شبکه بزرگتر اینترنت به آن وصل هستند. بنابراین شما یک شبکه متشکل از مودم، موبایل و کامپیوتر شخصی خود و هر وسیله دیگر متصل به آن تشکیل داده اید. و در نتیجه بصورت زیرساختی امکان ارتباط موبایل و کامپیوتر شخصی شما در این شبکه وجود دارد. اینجا در این مقاله همه چیز ساده می شوند بنابراین با خلاصه کردن برخی مفاهیم دوست داریم پایه ای ترین مفاهیم را منتقل کنیم. در کتب درسی و علمی از انواع شبکه و تاریخچه آن صحبت می شود و همچنین موارد سخت افزاری و نرم افزاری. مطلب جالب، لایه های شبکه:همانطور که گفته شد شبکه از تجهیزات محاسباتی و دیگر سخت افزارها تشکیل شده، تجیزاتی مثل سیم یا کابل شبکه و محل اتصال آن ها را لایه فیزیکی شبکه می گوییم البته این لایه ها صرفا نام گذاری نیست و شامل استاندارد های تعریف شده است که باید در تولیدات مختص هر لایه رعایت شوند. این الکترودها که صفر و یک ها و داده های ما هستند در این کابل ها گذر می کنند و از ارسال کننده ای به دریافت کننده ای میرسند، چطور مسیر خود را پیدا می کنند؟ چطور ارسال می شوند؟ چطور دوباره به هم متصل می شوند و تشکیل یک عکس یا متن را می دهند؟ اگر برق قطع شود چه؟ اگر دو کامپیوتر همزمان از یک کابل استفاده کنند چه می شود؟ این ها همه سوالاتی است که از ابتدای شکل گیری شبکه مطرح بوده و باعث پیشرفت آن شده است. برای برخی از این سوالات تچهیزاتی ساخته شده و برخی راه حل نرم افزاری ابداع شده است. نهایتا آنچه اکنون بصورت کلی انجام می شود یک داده برای انتقال باید مراحلی را طی کند که هر بخش آن بصورت قرار دادی در لایه ای از شبکه است که استانداردی برای آن در نظر گرفته شده. علت این استاندارد و نگاه لایه ای به شبکه این است که اگر قرار است مودمی که در خانه دارید عوض شود مجبور نباشید کابل و درگاه کامپیوتر خود را تعویض کنید چون این دو در دو لایه مجزا دیده شده اند و همچنان طبق استاندارد قبلی با هم ارتباط دارند آنچه عوض شده درون مودم شماست.کامپیوتر ها یا تجهیزات چگونه یکدیگر را در شبکه های کوچک و بزرگ پیدا می کنند؟برای ردیابی نیاز به آدرس است و چه نوع آدرس دهی بهتر از عدد؟ (البته به دلیل افزایش تجهیزات امروزه از ترکیب اعداد و حروف استفاده می شود که توضیح داده خواهد شد) اما اوایل و تا سالها تنها از چهار عدد بین ۰ تا ۲۵۵ که با نقطه از هم جدا می شوند استفاده شده است عددی مثل ۲۲۵.۳۴۰.۵۶.۳۵ به این آدرس IP می گویند و لایه مربوط به آن را Network یا لایه ی شبکه می نامند. از جمله تجهیزاتی که در این لایه هستند می توان به سویچ ها اشاره کرد، سوییچ وسیله ای است که ارتباط چند کامپیوتر در شبکه را ممکن می سازد. وظیفه مهم دیگر این دستگاه حفظ کردن IP این کامپیوتر ها در جدول خود است. نگران نباشید به مودم وای فای هم میرسیم. و همچنین برای مدتی کوتاه فرض کنید شما بجای آدرس یک سایت یا اسم یک کامپیوتر، آی پی آن را میدانید....در صورتی که اتصال با کابل های شبکه برقرار باشد سوییچ می داند کدام کابل مربوط به کدام IP است و چون کامپیوترها مستقیما به سوییچ وصل خواهند بود پیام های خود را باید از طریق آن عبور دهند. و سوییچ بسته ارسالی را به کابل صحیح آن منتقل خواهد کرد. IP هم میتواند در یک شبکه بصورت دستی تنظیم شود و هم میتواند تخصیص آن طبق الگوی مشخص شده ای به صورت اتوماتیک بر عهده یکی از تجهیزات شبکه باشد (نه هر دستگاهی البته). مثلا یکی از کامپیوتر ها. کامپیوتر زمانی که روشن می شود پیامی را بدون گیرنده مشخص ارسال میکند و خود را معرفی می کند. که به این کار broadcast می گویند (برای IP گیرنده بصورت قراردادی از 255.255.255.255 استفاده می کند) و فرض کنید کار تخصیص IP را کامپیوتری (یا یک وسیله الکترونیکی دیگری) در شبکه انجام می دهد. سوییچ وظیفه دارد پیام فوق را به دستگاهی که این کار را انجام دهد برساند و آن دستگاه نیز در پاسخ IP دستگاه درخواست دهنده را به وی ابلاغ می کند که طبعا تمام ارتباطات از طریق سوییچ است. برادکست فقط برای گرفتن IP نیست. زمانی که یک پیام برادکست می شود تمام کامپیوتر ها و تجهیزاتی که در شبکه هستند آن را دریافت خواهند کرد. و با توجه به بسته دریافتی یا آن را رد می کنند و یا پاسخ می دهند (مثلا اگر بسته مربوط به درخواست گرفتن IP باشد مسلما یک وسیله در شبکه باید این کار را انجام دهد و وجود بیشتر باعث اختلال در شبکه است و به این دلیل این گونه تنظیمات در شبکه های مهم مانند ادارات از دسترسی کاربران عادی خارج است). نکته دیگر اینکه ip میتواند بصورت دستی نیز تنظیم شود که در این صورت اولا برادکست اتفاق نمی افتد. دوما کامپیوتر همواره ip ثابتی خواهد داشت (معمولا در ادارات به این شیوه است) و نهایتا برای تنظیم دستی از یک بازه ip استفاده می شود از فلان ip تا فلان ip که با مقادیری که توسط برادکست تخصیص داده می شود تداخلی نداشته باشد و تنظیمات آن در کامپیوتر یا تجهیزاتی که وظیفه اختصاص ip را دارند انجام می شود)حال فرض کنید لپ تاپ شما با کابل به سوکتی که در دیوار تعبیه شده وصل شده که با سیم کشی انجام شده نهایتا به سوییچی در اتاق سرور متصل شده. و در اولین ارتباط IP را دریافت کرده (و یا از قبل به صورت دستی روی آن تظیم شده) و به شبکه دسترسی دارد. حال می خواهیم به کامپیوتر های داخل شبکه و خارج شبکه درخواست یا پیامی بفرستیم. در صورتی که درخواست برای کامپیوترهای داخل شبکه باشد پیام توسط سوییچ به آن کامپیوتر هدایت می شود اما زمانی که پیام برای کامپیوتری خارج از شبکه باشد سوییچ آن را به دستگاه دیگری می فرستد. دستگاه دیگری به نام روتر router در شبکه ها وجود دارد که از نظر ظاهری شبیه سوییچ ها هستند اما وظیفه دیگری دارند. روتر ها شبکه ها را از یکدیگر جدا می کننددر تصویر زیر نمای شماتیک تفاوت یک سوئیچ و روتر را نشان می دهدحال چطور سوییچ تشخیص می دهد که IP برای شبکه ای است که در آن قرار دارد یا نه؟آی پی ها الگوی مشخصی دارند. و اینترنت متشکل از مجموعه ای از شبکه ها هست که در هر کدام الگوی مناسب آن بکار رفته. مثلا اینطور فرض کنید در ایران مجموعه استان ها یک شبکه است. حال هر نود این شبکه یعنی هر نقطه یا استان خود یک شبکه است که شهرها را به هم وصل کرده و هر نقطه یا نود از این شهر جاییست که اتصالات منطقه ها را شامل می شود و هر منطقه اتصالات خانه ها و نهایتا شما در داخل خانه خود یک شبکه دارید که موبایل و دستگاه های شما به آن وصل شده اند. و درگاه خروج از این شبکه و ورود به شبکه بالاتر روتر شماست که همان مودم شما است. و همه این شبکه ها توسط روتر به هم وصل هستند.در حقیقت مودم شما هم نقش سوییچ را ایفا می کند و هم روتر. چون هم تجهیزات داخل شبکه را به هم ارتباط می دهد و هم درخواست های خارج از شبکه مثلا دسترسی به سایت گوگل را هدایت می کند. علاوه بر این مودم شما قابلیت تخصیص آی پی به دستگاه های شما را نیز دارد. با پیشرفت روز به روز با یک وسیله کوچک به تمامی این استاندادها دسترسی دارید و این وسیله در دو لایه شبکه در حال خدمت رسانی به شماست.اما برای فهم کارکرد دقیق شبکه فرض کنید بین روتر شما و لپ تاپ شما یک سوییچ هم قرار دارد مانند ادارات. ابتدا فرض کنید شما با استفاده از آدرس ip می خواهید با گوگل صحبت کنید. در ادامه نحوه کار مرورگر شما را نیز خواهیم گفت.بسته (داده ارسالی / packet) چطور مسیر خود را می پیماید (روتر چگونه کار میکند) ؟علاوه بر آدرس IP، هر وسیله ای که قابلیت اتصال به شبکه دارد یک آدرس فیزیکی نیز دارد که منحصر به فرد است و در کارخانه بر روی دستگاه قرار میگیرد. مسیر یابی با استفاده از IP و آدرس فیزیکی صورت می گیرد. بدین صورت که شما می خواهید به یک آدرس آی پی دسترسی پیدا کنید. به صورت استاندارد بسته داده ارسالی شما حاوی اطلاعاتی از جمله آی پی و آدرس فیزیکی فرستنده (دستگاه شما) و آی پی که می خواهید به آن دسترسی داشته باشید (داخل یا خارج شبکه) و آدرس فیزیکی اولین گیرنده (در اینجا فرض کردیم سوییچی وجود دارد) است. زمانی که بسته به سوییچ می رسد چون IP مربوط به بازه IP شبکه خود نیست آن را به روتر می فرستد، بنابراین آی پی های بسته شما همچنان حفظ می شوند ولی این بار آدرس فیزیکی فرستنده سوییچ و آدرس فیزیکی گیرنده روتر شما است (بسته تغییر می کند). وقتی درخواست به روتر می رسد. این دستگاه نیز جدولی دارد که در آن مشخص شده چه الگویی از ip باید به کدام روتر ارسال شود. بر اساس الگوی آی پی شما روتر ها یکدیگر را با تعویض آدرس فیزی می پیمایند تا نهایتا به شبکه ای وارد شود که آی پی درخواستی شما برای همان شبکه باشد مثلا سرورهای گوگل. و توسط سوییچی که در آن شبکه قرار دارد درخواست شما به دستگاه مورد نظر خواهد رسید. سوییچ و یا در خانه که سوییچ وجود ندارد دستگاه ها چطور روتر را می شناسند؟چون در خانه مودم شما نقش روتر را دارد این آی پی هنگام ابلاغ آی پی دستگاه شما به وسیله مودم با عنوان Default gateway برای دستگاه شما ارسال می شود و در ادارات نیز آی پی روتر از قبل مشخص است و بر روی دستگاه به صورت دستی تنظیم می شود، و در نتیجه دستگاه های شما در شبکه داخلی یا سوییچ ها در شبکه اداری می دانند آدرس روتر کدام است.آدرس سایت چطور به IP تبدیل می شود؟حفظ کردن آدرس IP کار راحتی نیست، آدرس ها برای همین به وجود آمده اند. بطور خلاصه وقتی شما به آدرس آی پی سایت گوگل برای باز کردن سایت آن نیاز دارید. بنابراین مرورگر شما وقتی از او آدرسی را میخواهید ابتدا از طرف دستگاه شما درخواستی ارسال می شود که من آی پی این سایت را می خواهم که به این درخواست ARP گفته می شود. عموما بعد از ارسال این درخواست و گرفتن پاسخ از روترهایی که شبکه های بزرگ را به هم متصل کرده اند کامپیوتر شما تا مدتی این آدرس را در خود ذخیره میکند و دفعه بعد زمانی که شما آدرس سایت گوگل را وارد می کنید از آی پی که دفعه قبل گرفته است به عنوان آی پی مقصد برای فرستادن بسته ها استفاده می کند. برنامه های کلاینت سروری چگونه کار می کنند؟قبل از اینکه بخواهیم مفهوم برنامه های تحت وب را توضیح دهیم. بهتر است برنامه های کلاینت سروری را توضیح دهیم:سوکت و پورت چیست؟به مجموع آدرس آی پی شما همراه یک عدد دیگر در انتهای آن سوکت گفته می شود. مثلا 192.168.1.100:80عدد 80 در انتهای آدرس آی پی را پورت می گویند. وقتی در شبکه درخواستی برای یک آدرس IP ارسال می کنید در کامپیوتر مقصد یک نرم افزار در حال گوش کردن به شبکه و درخواست های مربوط به خود است. ممکن است در آن کامپیوتر چندین برنامه در حال گوش کردن باشند و بخواهند پاسخ بدهند از کجا معلوم است درخواست شما مربوط به کدام برنامه است. در اینجا مفهوم پورت مطرح می شود. پورت را عددی فرض که درخواست هایی که به یک کامپیوتر میروند را تقسیم بندی کرده و از هم جدا می کند. پس وقتی برنامه کلاینت سروری می نویسید یکی از پورت های که برنامه دیگری از آن استفاده نمیکند انتخاب می کنید و در برنامه سمت سرور برای دریافت درخواست ها از آن استفاده خواهید کرد. و برنامه کلاینت هم باید درخواست را به همان سوکت (آی پی سرور و پورتی که انتخاب کرده اید) بفرستد. و منتظر پاسخ بماند و آن را بگیرد.سایت ها کجا قرار دارند؟ درخواست ما برای دیدن سایت به کجا می رود و چه می شود؟فرض کنید شما کدی را نوشته اید از نوع برنامه های تحت وب و می خواهید بدانید هر کدام چطور عمل می کند. سایت ها بر روی کامپوترهایی معمولا با منابع بیشتر از آنچه لپ تاپ شما دارد قرار می گیرند و یا گاهی مشابه.  البته معمولا بسیار بیشتر است و با نرم افزارهایی تصور کنید داخل یک سیستم عامل چندین سیستم عامل به صورت مجازی اجرا میکنند و اینها تشکیل یک شبکه مجازی می دهند (یعنی منابع تقسیم می شود و مثلا به هر سیستم عامل 4 گیگ رم و 2 هسته cpu و 100 گیگ فضای هارد می رسد و تمامی عملیات مروبط به تجهیزات فیزیکی مانند سوئیچ و روتر به صورت مجازی توسط سیستم عامل اصلی انجام می شود) و آنچه گفته شد توضیح ساده شده ای است مطمئنا برای اینکار از ویندوز استفاده نمی کنند و سیستم عامل خاصی برای اینکار وجود دارد. نکته دیگر اینکه شاید نخواهید یک سرور (مجازی یا فیزیکی) تنها به یک سایت اختصاص دهید (مثلا سه سایت بر روی یک سرور مجازی (VPS) اجرا کنید (چون بازدید کمی دارند). قبل از هرچیز باید بدانید مرورگر شما چطور متن دریافتی نهایی را بدین شکل منظم به شما نمایش می دهد. به صورت قراردادی مرورگرها فقط صفحات متنی ساده و صفحاتی که با زبان HTML نوشته شوند را می فهمند. HTML را زبان می گویند اما این زبان مانند برنامه نویسی نیست بلکه زبانی برای جانمایی و نشانه گذاری است. در صورتی که علاقه به توسعه سایت دارید باید HTML را قبل از هر چیز آموزش ببینید (البته بسیار ساده است و شاید بیش از یک ماه از شما زمان نگیرد) بعد از اجرای برنامه شما که یک سایت است، خروجی باید به شکلی باشد که مرورگر می فهمد چون معمولا مرورگر است که قرار است از برنامه شما خروجی درخواست کند (موارد دیگر را بعدا توضیح می دهیم). راجع به HTML مقالات فیلم و آموزش های بسیار متعددی با جست و جو بدست خواهد آمد. بنابراین نیازی نیست ما  همان مطالب را تکرار کنیم و ما سعی در مشخص کردن مسیر شما داریمخوب در مرورگر خودتان که زبان HTML می فهمد یک آدرس را وارد می کنید و کامپیوتر شما آی پی را دارد یا خواهد گرفت. این درخواست به کامپیوتر مقصد می رسد. چون تمام درخواست های مربوط با باز کردن یک سایت روی دو پورت پیش فرض هستند و نیاز نیست شما آن را مشخص کنید اگر وارد کنید هم اتفاقی نمی افتد و سایت باز می شود. برای سایت های معمولی عدد پورت برابر ۸۰ است و سایت هایی مانند ایمیل که همه چیز رمزنگاری میشود معمولا ۴۴۳ برای مثلا اگر آدرس http://virgool.io:80 را باز کنید سایت مانند قبل باز می شود. اگر ابتدای سایت https باشد به جای http پورت  ۴۴۳ خواهد بود (معمولا سایت هایی که این پورت را پشتیبانی میکنند تمامی درخواست ها را از پورت 80 هم به 443 ریدایرکت (redirect) می کنند. یعنی به مرورگر شما می گویند پورت 80 را بی خیال درخواست کاربر را بفرست به پورت 443 (آدرس جدید) تا کاربر امن باشد.)خوب برگردیم به مطلب، این درخواست به کامپیوتر مقصد می رسد و یک برنامه بر روی کامپیوتر مقصد که دارای آن آدرس آی پی است در حال گوش کردن به پورت ۸۰ یا ۴۴۳ است. در آن کامپیوتر بر روی چند فولدر چند سایت قرار دارد چون شما درخواست ویرگول را داده اید آن برنامه فولدر مربوط به ویرگول را باز می کند و برنامه کامپایل شده را اجرا یا اگر مفسری است آن را خط به خط تفسیر می کند و پاسخ آن را باز می گرداند. حال اگر پاسخ متنی با استاندار HTML باشد مرورگر آن را نمایش می دهد اگر متنی ساده باشد مرور گر آن را نیز در یک صفحه سفید نمایش خواهد داد اگر پیغام خطای استاندارد باشد مرور گر صفحه پیش فرض خود برای آن صفحه را نمایش خواهد داد.برنامه ای که روی کامپیوتر سرور (یا مقصد) سایت (برنامه تحت وب شما) را اجرا می کند چیست؟این برنامه بسته به زبانی که سایت را با آن نوشته اید متفاوت است مثلا Apache httpd برای زبان php یا Apache Tomcat برای زبان Java و ... این وظیفه را بر عهده دارند و بسیار نرم افزارهای دیگر که هرکدام مزایا و معایبی دارند و باید بدانید همزمان دو برنامه نمی تواند به یک پورت گوش کند اما هر برنامه ای می تواند بر روی آن درخواست بفرستد. یعنی در سرور شما نمی توانید هم سایتی به زبان جاوا و هم php را کنار هم با یک پورت استفاده کنید مگر از پورت های جداگانه ای استفاده کنید و برنامه ای که پورت 80 را گوش می دهد باید اصطلاحا درخواست شما را به آن پورت ها (و برنامه هایی که آن پورت ها را گوش می کنند) پراکسی کندنکاتی راجع به برنامه های کلاینت سروری شما باید علاوه بر برنامه ای که مانند تحت وب در سرور قرار می دهید برنامه کلاینت را نیز توسعه دهید و بر روی آن نصب کنید چون دیگر کلاینت مرورگر نیستبعد از هر بروز رسانی لازم است هردو برنامه سرور و کلاینت را بروز کنید (در مورد موبایل به خاطر سرویس خود گوگل یا اپل برای فرستادن بروزرسانی ها مشکلی نیست) اما تصور کنید در یک شرکت یک برنامه مدیریتی نوشته اید و بر روی ۵۰ کامپوتر نصب است (همه را باید دوباره نصب کنید)نیازی به HTML نیست. چون هم سرور و هم کلاینت را شما نوشته اید شما هستید که مشخص می کنید چه چیز ارسال و چه چیز دریافت شود (اما بهتر است از یک استاندارد استفاده شود)درخواست ها می تواند روی پورتی غیر از ۸۰ باشند بدون اینکه کلاینت متوجه شودنکته آخر اینکه زمان زیادی است که برنامه های کلاینت سروری شکل دیگری بخود گرفته اکنون نمونه آن برنامه های موبایلی است که برای کارکرد حتما باید به اینترنت متصل باشد یا بازیهای رایانه ای تحت شبکه. حال شما با شغل برنامه نویسی آشنا شده اید، کمی از اصطلاحات آن را می دانید و انواع برنامه ها را می شناسید و می خواهید برنامه ای تحت شبکه، تحت وب، تحت دسکتاپ توسعه دهید. و زمان آن رسیده تا زبان مورد نظر خود را انتخاب کنید در قسمت بعد به معرفی زبان های معروف و مرسوم می پردازیم تا بعد از آشنایی کلی بتوانید در انتخاب آن مشورت بگیرید و آموزش یکی از آن ها را شروع کنید علاوه بر این با آموزش های بیشتری در خدمت شما خواهیم بود تا صرف نظر از زبانی که یاد میگیرد پیمودن این مسیر ساده تر شود. https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85-yyupjvnn7adw </description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Sat, 17 Apr 2021 14:40:10 +0430</pubDate></item><item><title>نحوه تعامل سخت افزار و نرم افزار</title><link>https://virgool.ir/CodeLovers/نحوه-تعامل-سخت-افزار-و-نرم-افزار-fnnhdqywkycm</link><description>سلام, با این مقاله قصد داریم نگاهی به طرز کار سخت افزار و نرم افزار در کنار هم بیاندازیم. اگر مطلب «من می خواهم برنامه نویس شوم - قسمت دوم» را مطالعه کرده باشین در انتهای مطلب راجع به سطوح زبان های برنامه نویسی صحبت کردیم و مسیرهای مختلفی را در این رشته تعیین کردیم، ادامه سری آموزشی (من می خواهم برنامه نویس شوم) مسیر برنامه نویسان سطح بالا را روشن تر خواهد کرد و در این مقاله سعی داریم دید روشنی از برخی دروس رشته کامپیوتر و آی تی و علت مطالعه آن ها برای ورودی های جدید این رشته بدهیم. این مقاله در حقیقت نگاهی سطحی و اجمالی به چند درس از رشته علوم کامپیوتر و فناوری اطلاعات می باشد: معماری کامپیوترمدارهای منطقیسیستم عاملزبان ماشین و برنامه سازی سیستماصول ذخیره سازی دادهدر قسمت دوم «من می خواهم برنامه نویس شوم» مفهوم مفسر و کامپایلر ها توضیح داده شد. دستورات شما پس از کامپایل یا تفسیر در حقیقت به کدهایی از زبان ماشین که صفر و یک هستند تبدیل می شود و سخت افزار می تواند آن را اجرا کندچرا صفر و یک (باینری یا دودویی)؟به دلیل ساده بودن پیاده سازی مدار با دو حالت، در حقیقت «صفر و یک دو سطح ولتاژ» است. اگر کامپیوتری داشته باشیم که بخواهد با اعداد صفر تا نه کار کند این کار هزینه بالایی خواهد داشت چون به طراحی مدارهایی به ۱۰ سطح ولتاژ نیاز است. بصورت قراردادی دو سطح بالا و پایین می توانند ۰ و ۵ ولت (یا ولتاژ های دیگری) باشند. زمانیکه ولتاژ ضعیف است یعنی بین ۰ تا نیم ولت می توان «صفر» و زمانی که قوی است مانند ۵ آن را «یک» درنظر گرفت و این ولتاژ همین مقدار است. (حالت شارژ یا حالت قطع)البته اکنون به تکنولوژی محاسبات کوانتومی و کامپیوترهای کوانتومی نیز دست پیدا شده که در اختیار مراکز تحقیقاتی مانند گوگل. آمازون. آی بی ام و ... است و مبحث دیگری است و از هدف این مقاله خارج است.چگونه متن، عدد، صدا و تصویر و ویدئو به صفر و یک تبدیل می شود؟اعداد و متوندر مورد اعداد برای اینکه بتوان مفهوم  و ارزش آن ها را همچنان حفظ کرد باید آن ها را به مبنای ۲ ببریم (به مبنا ها در ریاضی رجوع شود) و همه چیز از همین ایده شروع می شود با همین ایده ساده یعنی مبنای دو و استفاده از دو سطح ولتاژ برای تنها اعضای این مجموعه یعنی (صفر و یک) تحولات عظیمی شکل گرفته مثلا عدد ۱۳ در مبنای دو به این شکل است: ۱۱۰۱ همه متون از کاراکتر تشکیل می شوند و به ازای هر کاراکتر می توان یک عدد نسبت داد و در حقیقت بجای کاراکترها کد آن ها را به مبنای ۲ برده و استفاده می کنیم برای این کار ابتدا به تمامی اعداد و حروف و کلید های کیبورد یک عدد نسبت می دهند. از جمله این کدگذاری ها ASCII و Unicode هستند. مثلا در کاراکتر ست ASCII معادل علامت ! عدد 33 و معادل عدد 0 عدد 48 و معادل A عدد 65 و معادل a عدد 96 است که تمامی این ها را میتوان به مبنای دو برد. در این کاراکتر ست هر کاراکتر معادل 8 عدد باینری میشود، کد 0 معادل 00000000 و نهایتا کد 127 معادل 1111111 پس هر کاراکتر معادل 8 بیت که آن را یک بایت نام گذاری کردند. (در نرم افزاری مانند notepad ویندوز می توان بعد از تایپ متن آن را با کاراکتر ست دلخواه ذخیره کرد. اگر متن حاوی کاراکتر فارسی باشد و بخواهید آن را با کاراکتر ست ascii ذخیره کنید اخطار دریافت خواهید کرد که نمیتوان متن را با این کاراکتر ست ذخیره کرد چرا که این کد گذاری فقط شامل کاراکترهای انگلیسی است. و خواهید دید اگر متن انگلیسی را به دو صورت کاراکترست Ascii و UTF-8 ذخیره کنید حجم فایل ascii کمتر خواهد بود - علت را در ادامه خواهید دید)کاراکتر ست Unicode کمی کد گذاری متفاوتی دارد. در این کاراکتر ست باقی زبان ها مثل فارسی و عربی و چینی هم می توانند کد بگیرند و نیاز بود که تعداد کد بیشتری داده شود. در این کاراکتر ست هر کد معادل 16 بیت یا حتی ممکن است 32 بیت باشد. بنابراین همان متن در کاراکترست UTF-8 منطقا حجم بیشتری را اشغال خواهد کرد.تصاویردر ذخیره سازی تصاویر رنگ ها را کد گذاری می کنیم. تصاویر در دنیای کامپیوتر بصورت دیجیتال ذخیره و نمایش داده می شوند یعنی هر تصویر از تعدادی خانه رنگی تشکیل شده که این خانه ها را پیکسل می گوییم بنابراین وقتی می گوییم این دوربین ۱۲ مگاپیکسل است یعنی یک عکس آن شامل ۱۲۲۸۸ خانه رنگی است و همانطور که می دانید هرچه این خانه ها بیشتر باشد کیفیت بیشتری خواهید داشت. در طراحی دیجیتال برای بیان کیفیت از رزولوشن استفاده می کنند که بیان گر تعداد پیکسل در یک اینچ مربع است. مثلاً می‌گویند 300 dpi.بنابراین هرچه رزولوشن بیشتر یعنی خانه های بیشتر برای همان عکس و عکس بزرگ تر و با کیفیت تر. برای دیدن پیکسل ها کافی است تا آنجا که می توانید بر روی یک تصویر در کامپیوتر زوم کنید (مثلا در نرم افزاری مانند فوتوشاپ آنگاه خانه های رنگی تشکیل دهنده عکس را خواهید دید) در نتیجه برای تبدیل تصویر به صفر و یک اجرای تشکیل دهنده آن یعنی این خانه های رنگی را به صفر و یک تبدیل می کنیم. هر خانه یک رنگ بیشتر ندارد و طیف رنگی با در کنار هم قرار گرفتن این ها قابل مشاهده است و چون تعداد آن ها زیاد است چشم قابل به تشخیص مرز آن نیست برای تبدیل کردن رنگ ها به باینری مانند کاراکتر ها آن ها را کد گذاری می کنیم (تمام رنگ ها از ترکیب سه رنگ پایه قرمز، آبی، سبز ساخته می شود) و هر رنگ پایه را با یک عدد بین ۰ تا ۲۵۵ مشخص کنیم. یعنی کد هر پیکسل شامل سه عدد (هر کدام بین 0 تا 255) است که هر سه به مبنای دو تبدیل می شوند.ویدئوویدئو نیز از فریم تشکیل شده اند (وقتی می گوییم این ویدئو ۲۴ فریم/ثانیه است یعنی در هر ثانیه از این فیلم ۲۴ عکس استفاده شده) بسته به اندازه عکس های تشکیل دهنده و کیفیت آنها کیفیت فیلم و اندازه طول و عرض فیلم ها با هم متفاوت است مثلا در فیلم با کیفیت 720p تصاویری با عرض ۷۲۰ پیکسل در طول ۱۲۸۰ (معمولا برای کیفیت تنها عرض را بیان میکنند و معمولا نسبت عرض به طول برابر ۹ به ۱۶ است، البته میتواند هر نسبتی داشته باشد) که ضرب این دو عدد در هم تعداد خانه های رنگی یا پیکسل هر فریم فیلم را مشخص می کند و اگر فیلم ۲۴ فریم باشد، با ضرب حاصل آن با ۲۴ می توانید بفهمید در یک ثانیه از این فیلم چند پیکسل داده وجود دارد. البته برای فیلم باید صدا را نیز لحاظ کردصداصدا نیز از فرکانس و دامنه تشکیل شده (فرکانس همان لحن یا زیر و بم بودن است و دامنه کم و زیاد بودن) که باز هم این دو به عدد تبدیل می شوند برای پخش صدا در هر لحظه از آن، این دو عدد به بلندگو داده می شود. میکروفون یک پرده مرتعش دارد که فرکانس صدا را میگیرد و تعداد ارتعاشی که ایجاد می شود بلندی و کمی صدا را مشخص می کند، بلندگو نیز مشابه آن.خوب چطور میشود با باینری کار کرد چطور با صفر و یک سیستم عامل نوشته شده؟دوست دارید بدانید از کجا شروع شده و سیستم عامل به عنوان برنامه ای که مدیریت سخت افزار را بعهده دارد چطور به صفر و یک تبدیل می شود و خود با صفر و یک کار می کند. در حقیت با یک سیر تکاملی روبه رو هستیم و طبعا پیچیده اما ابتدا این طور نبوده و تک تک قطعات کامپیوتر رشد فوق العاده ای داشته اند از کیبورد و ماوس گرفته تا تک تک قطعات بکاررفته در برد اصلی و مانتیور و ... به زودی به شما میگوییم ماده سیلیکون (همان ماده ای که در مغز مداد استفاده شده) چه تحول عظیمی را ایجاد کرده. به زودی به شما میگوییم ماده سیلیکون (همان ماده ای که در مغز مداد استفاده شده) چه تحول عظیمی را ایجاد کرده . همه چیز از زبان ماشین شروع می شود و به آن بر می گردد.دستورات پیچیده از دستورات ساده تشکیل میشوند مثلا ضرب همان جمع اعداد است. قطعات سخت افزاری در خود عملیات منطقی را انجام میدهند اگر در ریاضیات جبر منطقی را خوانده باشید با عملیات های And و Or آشنایی دارید. مثلا قطعه ای که دو ولتاژ ورودی میگیرد و بگونه ای طراحی شده که ولتاژ خروجی معادل همان عملیات and می تواند باشد. حال اگر شما بتوانید بصورت سخت افزاری مداری درست کنید که یک سری عملیات پیچیده تر را جهت ارسال داده به یک مدار دیگر (مثلا این دیتا (پالسی از ولتاژ های 0 و 5) را ببر به این قسمت از مدار) و گرفتن خروجی از آن (خروجی را از این قسمت بگیر و ...) طراحی کنید با استفاده از مجموعه ای از مدارها و استفاده از جبر بولی می توانید هر مسئله ای را به مجموعه ای از دستورات پایه مثل همین and و or تبدیل کنید و به مدار که شامل همین عملیات است بدهید و از خروجی مجددا در مدار دیگری استفاده کنید. این عملیات کمی پیچیده تر بدین صورت است: انتقال، جمع، تفریق، تقسیم و ضرب، شما مجموعه ای از دستورات را با همین توابع که مدارهای آنها در CPU قرار دارد، در دست دارید و مثلا می توانید دیتایی را داخل رم که مجموعه ای از خازن ها هست ذخیره کنید و یا دوباره آن را بگیرید. به صورت بسیار ساده می‌توان گفت پردازنده‌های متفاوت، دستورالعمل‌های متفاوتی دارند که در قیمت و سرعت و ... آنها تاثیرگذار است، اما تمامی پردازنده‌ها (بدون توجه به تفاوت‌هایشان) دارای چهار مجموعه دستورالعمل زیر می‌باشند: کپی کردن بیت‌هاچهار عمل اصلی ریاضی (محاسبات ریاضی: جمع، ضرب، تفریق و تقسیم)بیت منطقی (NOT, AND, OR, XOR)پرش (شامل پرشهای مشروط) که به منظور پرش از یک آدرس حافظه اصلی (RAM) به آدرس دیگری از حافظه کاربرد دارددر اینجا زبان اسمبلی زبان سطح پایینی هست که این دستورات را با آن می نویسید و اسمبلری که بسته به پردازنده شما شرکت سازنده در اختیارتان گذاشته کد شما را یک یا دومرحله ساده تر کرده و به صفر و یک تبدیل میکند. (می توانید با کمی جست و جو اطلاعت زیادی در مورد آنها بدست آورید) اولین سیستم عامل با استفاده از زبان اسمبلی نوشته شده و سیستم عامل های کنونی از زبان اسمبلی و سی و سی پلاس پلاس. در اینجا دیگر وارد جزئیات قطعات سخت افزاری بکار رفته در کامپیوتر مانند ثبات ها و ... نمی شویم. در صورتی که به این بحث علاقه دارید باید درس معماری کامپیوتر، مدارهای منطقی و زبان ماشین رجوع کنید و از ابتدا آن ها را مطالعه کنید اما اکنون شما می دانید که با چه چیزهایی روبه رو خواهید شد و از ابتدا دیدی کلی راجع به موضوع مورد مطالعه دارید. در مورد cpu بهتر است این موارد را نیز بدانید:فرکانس CPU (ساعت CPU، یا Clock Speed) که با 4 رقم اول آن مشخص می شود، مثلا 3330، و به این معنی است که این پردازنده محاسبات را با چه سرعتی انجام می دهد. مثلا CPU با مشخصات 2.70GHz up to 4.00 GHz می تواند 2.70 تا 4 میلیارد محاسبه را در هر ثانیه انجام می دهد.تعداد هسته یا Core CPU: کامپیوتر در هر لحظه در حال انجام میلیونها محاسبه در هر ثانیه است، وقتی شما برنامه ای را اجرا می کنید (مثلا اکسل)، CPU، کسری از ثانیه را برای پردازش محاسبات مربوط به این برنامه اختصاص می دهد و باقی زمان را به انجام سایر محاسبات می پردازد. بنابراین اگر CPU یک هسته داشته باشد زمان اجرا باید بین برنامه ها تقسیم شود اما با ۸ هسته این سرعت عملا ۸ برابر شده است.با کشف سیلیکون توانستند ترانزیستورهای نانومتری بسازند و تعداد آن را به 6500 عدد در یک پردازنده و امروزه به 100 ها میلیون و در بهترین CPU های امروزی به بیش از 2 میلیارد عدد افزایش دهند.کامپیوتر را روشن می کنیدحال کامپیوتر را روشن می کنید، بصورت سخت افزاری CPU بطور خودکار در شروع کار کامپیوتر به سراغ اولین دستور BIOS (اولین نرم افزاری که در برد اصلی ذخیره شده) می رود. وظایف BIOS بدین شرح است: تست قطعات بر اساس تنظیم کاربر (در کامپیوتر ها با زدن دکمه del در ابتدای شروع کار کامپیوتر به تنظیمات BIOS می روید) کپی کردن برخی اطلاعات از جمله جداول گلایف (تصویر نمونه پایین را مشاهده کنید) و برخی توابع لازم برای کار یک سیستم عامل (توابع وقفه برای کنترل پردازش ها و نوبت دهی) جست و جوی حافظه جانبی برای یافتن سیستم عامل و در صورتی که آن را نیافت دادن پیغام لازمبه بارگذاری سیستم عامل از حافظه جانبی(Hard Disk) به حافظه اصلی (RAM) عمل بوت می گویند. پس از بوت شدن سیستم عامل قسمتی از آن بطور دائم در حافظه می ماند که هسته سیستم عامل است و به آن Kernel هم می گویند و بقیه قسمت ها در حافظه جانبی می ماند و در صورت لزوم فراخوانی می شوند. سیستم عامل مدیریت همه پردازش ها برای همه برنامه ها، اجرای برنامه ها و مدیریت حافظه جانبی و حافظه اصلی و ورودی و خروجی ها را به عهده دارد. اینکه چطور این کار را انجام می دهد هم بحث طولانی است و علاقه مندان می توانند کتاب مفاهیم و مبانی سیستم عامل را مطالعه کنند که تمامی استراتژی ها و حتی کد دستورات سیستم عامل هم در آن نوشته شده (چطور وقفه ایجاد میکند و ...) وقتی شما یک کاراکتر را روی کیبورد فشار می دهید سیستم عامل می داند چه کدی فشرده شده، سیستم عامل می داند باید نتیجه آن را به کدام برنامه ای بدهد که وضعیت آن مثلا در حال استفاده توسط کاربر است، می داند که از جدول گلایف چه نقشی را استخراج کند و آن را بررسی می کند و تغییرات لازم را به صفحه نمایش می فرستد.جدول گلایف، نقشه بیتی جهت مشخص شدن شکل کاراکترموفق باشید.</description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Wed, 14 Apr 2021 21:01:16 +0430</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت دوم</title><link>https://virgool.ir/CodeLovers/من-می-خواهم-برنامه-نویس-شوم-قسمت-دوم-mm4v25aturdq</link><description>سلام، در قسمت اول راجع به شغل برنامه نویسی توضیحاتی ارائه و نکاتی در شروع کار یادآوری شد. در ادامه لازم است با برخی اصطلاحات آشنا شویم تا بتوانیم مطالبی که در آینده بررسی و مطالعه میکنیم را به درستی درک کنیم.در دوران دانشگاه دوستی داشتم که احساس خوبی نسبت به رشته ای که انتخاب کرده بود نداشت: - محمد جان مشکل شما چیه؟ - من نمی فهمم این همه اصطلاحات برا چیه، اصلا اونقدر زیاده که نمی فهمم شما دارید راجع به چی حرف می زنید تو یه جمله ۲۰ کلمه ای ۱۰ تا اصطلاح استفاده می کنید. اصلا با اسم رشته هم مشکل دارم خودش اصطلاحه، آی تی!! خوب بگید فناوری اطلاعات! بله درسته، وارد پله دوم که می شوید کمی عجیبه، وقتی وارد این سرزمین میشوید اگه دقت کنید شاید بگویید مردم دارن به یک زبون دیگه صحبت می کنن، مثلا کلمه platform به معنای سکو شاید تو ایستگاه قطار استفاده میشه ولی اینجا ... واقعا فرق میکنه!قبول دارم اینجای کار کمی سخته ولی نیاز نیست یک فرهنگ لغت تهیه کنید، چندبار که گوشتون به این اصطلاحات برخورد کنه بر اثر تکرار دیگه براتون عادی میشه، فقط باید تو این محیط زندگی کنید تا این اتفاق بیافته، ما هم تو این مقاله سعی میکنیم به شما کمک می کنیم آرام آرام قدم بردارید، به مرور با تمام آنها آشنا می شوید و خودتان در توضیح یک ایده از نقطه نظر فنی بسیاری از آن ها را استفاده خواهید کرد (چاره ای نیست). علت این است که در اکثر مواقع بصورت تصوری و ذهنی با اصطلاحات آشنا می شوید، یعنی یک اصطلاح در ذهن شما دارای یک توضیح است که به مرور کامل شده و درک شما از آن کامل تر شده و این اصطلاح وجه اشتراک یک ذهنیت مشترک بین شما و شنونده است و نمیتوان از اصطلاح معادل دیگری استفاده کرد. با ساده ترین آن ها شروع می کنیم. (البته شاید کسانی که دانشجوی رشته آی تی یا کامپیوتر هستند براشون خیلی ساده باشه)برنامه نویسی چیست؟مشخصا نوشتن یک برنامه. اینجا کتاب درسی نیست که من تعریفی که یک استاد دانشگاه ارائه داده را بیاورم و از شما بپرسم، با یک مثال ساده شروع می کنیم. فرض کنید شما یک برنامه نویس موبایل هستید و می خواهید یک برنامه بنویسید که بقیه آن را نصب (install) کنند. مراحل کار بدین صورت است که باید بدانید این برنامه دقیقا قرار است چه کاری انجام دهد (اصطلاحا تحلیل و نیاز سنجی کنید)، چه ظاهری داشته باشد (اصطلاحا طراحی ظاهر - User Interface یا UI) مثلا چه رنگ هایی در آن استفاده شود و دکمه ها چه رنگ و شکلی داشته باشند، مراحل کارها در آن (فرایند های آن) به چه ترتیبی است؟ (مثلا کارهایی که در هنگام ورود به نرم افزار باید انجام شود یا اینکه مثلا دکمه ها کجا باشند و چه نوشته هایی داشته باشند) که آن را اصطلاحا تجربه کاربری (User Experience یا UX) سپس آن را بنویسید (programming) و نهایتا مطمئن شوید درست کار میکند (تست کنید) و برنامه را در دسترس دیگران یا کارفرما قرار دهید (منتشر کنید یا deploy) و ممکن است بعد از مدتی ایرادی در آن پیدا کنید (Bug) و آن را برطرف کنید (Bug fix) و مجددا نسخه دیگری (release) را منتشر کنید که آن ایراد را نداشته باشد به این کار به روزرسانی (update) می گویند. برای تولید نرم افزار اصطلاح توسعه نرم افزار (Develop) را نیز به کار می برند که معمولا برای به مجموعه تحلیل، طراحی، برنامه نویسی و تست آن را توسعه نرم افزار می گویند البته بعضا نیز توسعه را نام دیگری برای برنامه نویسی می دانند و آن را شامل مراحل دیگری نمی دانند.طی کردن همه این مراحل لزوما کار یک نفر نیست. حتی نوشتن یک برنامه هم خیلی وقت ها کار یک نفر نیست. مگر در برنامه های کوچوک، اکثرا در مرحله نیاز سنجی و یا آنالیز چندین نفر حضور دارند اگر شما یک برنامه نویس هستید که قرار است یک برنامه حسابداری بنویسید بدون حضور یک حسابدار چطور می خواهید حدس بزنید که این برنامه قرار است چه کاری انجام دهد حتی شاید تحلیل هم وظیفه شما نباشد یعنی تحلیلگر با حساب دار برنامه را تحلیل می کنند و در قالب یک مستند فنی اطلاعات را به برنامه نویس می دهند. خبر خوب اینکه شما الان می دانید برنامه چیست و چندین اصلاح دیگر رو هم میدانید. اما برنامه چیست؟ همان نرم افزار است که برنامه کامپیوتر میگوییم؟ یا اپلیکیشن موبایل که برنامه موبایل میگوییم؟ ویندوز؟ بله همه این ها برنامه هستند...انواع برنامهخوب اگه همه این ها برنامه هستند فرق ویندوز و اپلیکیشن و ... چیست؟اپلیکیشنبه دلیل کاربردهای مختلف، برنامه ها نام های مختلفی می گیرند (نوعی دسته بندی)، مثلا اپلیکیشن را برنامه کاربردی هم می گویند. اصولا به برنامه ای این نام را نسبت می دهند که قرار باشد یک کاربر بطور مستقیم با آن کار کند، مانند اکثر برنامه های موبایل (نه همه آن ها) و برخی برنامه های ویندوزی (منظورم برنامه هایی است که برای ویندوز است).سیستم عاملباز یک مثال ساده: فرض کنید لباس شویی شما برنامه ای در خود دارد که به هر طریقی (مهم نیست) می تواند شیر آب سرد و گرم را باز و بسته کند و تسمه لباس شویی را بچرخاند و همچنین میتواند بفهمد شما چه دکمه ای را روی لباس شویی فشار داده اید. به شما می گویند ما چندین نوع لباس شویی داریم که با هم فرق دارند اما چیزی که بین همه آن ها مشترک است شیر آب سرد و گرم و تسمه است پس این برنامه در همه آن ها قرار است نصب شود، باید با فشار دادن یک دکمه لباس شویی شروع به کار کند. یکی از لباس شویی ها را به شما نشان می دهند که ۱۰ حالت شست و شو دارد (ده دکمه برای شست و شو) و از شما می خواهند برنامه ای بنویسید که با فشار دادن هر دکمه مقدار از پیش تعیین شده آب وارد و تسمه بچرخد.کاربر به طور مستقیم با دکمه ها (input) و یک صفحه که دکمه ای که انتخاب کرده را نشان می دهد (output) با برنامه یا نرم افزاری که شما قرار است بنویسید در ارتباط است. اصطلاحا کاربر از طریق (input/output یا به اختصار IO یا I/O) با برنامه شما کار میکند (بخشی از سخت افزار) و این ارتباط را کدام برنامه ایجاد کرده؟ کدام برنامه ارتباط برنامه شما را با شیر آب سرد و گرم و تسمه ایجاد خواهد کرد؟ بله، معمولا برنامه دیگری نیاز است تا نرم افزار شما باید به واسطه آن برنامه کار خود را انجام دهد. چرا که قرار نیست همه برنامه نویسان هم صحبت با سخت افزار را بلد باشند هم برنامه های کاربردی عمومی بنویسند. قرار نیست یک برنامه همه کارها را به تنهایی انجام دهد. این موارد یک قرار داد است. به مرور زمان و با افزایش تجربه و توسعه برنامهای مختلف به این نتیجه رسیده اند که بهتر است بخش های مختلفی وجود داشته باشد و هر کدام کار مشخصی انجام دهد. برنامه ای که ارتباط بین IO و برنامه شما را ایجاد میکند و یا حتی ارتباط برنامه شما با دیگر اجزای سخت افزاری را معمولا سیستم عامل می گویند. ویندوز یک سیستم عامل است. اندروید هم یک سیستم عامل دیگر که برای موبایل های هوشمند (اصولا کامپوتر و موبایل شما فرق چندانی در معماری با هم ندارند یعنی می توانید بر روی گوشی ویندوز نصب کنید به جای اندروید اما کارکردن با آن در گوشی اصلا راحت نیست)، سیستم عامل های دیگری نیز وجود دارند مانند مکینتاش (بر روی کامپیوتر و لپ تاپ های اپل)، آی او اس (بر روی گوشی های اپل)، لینوکس، یونیکس و ... بر روی این سیستم عامل ها (محیط یا platform نیز می گویند) انواع نرم افزار ها و اپلیکیشن ها نصب می شوند و شما از آنها استفاده می کنید.سیستم عامل شامل برنامه های متعددی است که در کنار هم کار می کنند و به هم وابسته هستند. و ارتباط همه اینها معمولا توسط یک برنامه اصلی که هسته سیستم عامل نام میگیرد برقرار می شود. مثلا هسته سیستم عامل برنامه ای را اجرا می کند و آن برنامه نیز برنامه دیگری را اجرا می کند و یا با روش های استانداردی که به مرور زمان و با پیشرفت روز به روز حاصل شده اطلاعات در اختیار یکدیگر قرار می دهند.برنامه های دسکتاپی و کلاینت سرورییک نوع دسته بندی دیگه هم هست. خیلی از نرم افزارها که شما هر روز با اونها سر و کار دارید (اپلیکیشن ها) ممکن است روی کامپیوتر (با هر سیستم عاملی) نصب شوند و آماده به کار مثل ساعت ویندوز که از قبل روی اون نصب شده اصطلاحا به این اپلیکیشن ها تحت دسکتاپ (منظور برنامه هایی برای نمایش و دسترسی به آنها از محیط دسکتاپ سیستم عامل استفاده می کنند) میگن و بعضی به تنهایی کار نمیکنن و حتما لازمه که با یه کامپیوتر دیگه ارتباط داشته باشن مثلا تو یه اداره یه برنامه باز می کنید و اطلاعاتی رو روی اون وارد میکنید اما اگر کامپیوتر شما اصطلاحا به شبکه وصل نباشه (به مجموعه از چند کامپیوتر که به هم وصل هستند «شبکه» میگیم) دستورات یا تغییرات ذخیره نمیشه و به این دسته برنامه های تحت شبکه میگوییم، عموما نرم افزار های تحت شبکه دو بخش دارند و در حقیقت دو برنامه باید نوشته بشه اما این دو برنامه باهم کار می کنند که برنامه ای که روی کامپیوتر شماست رو برنامه کاربر یا کلاینت و برنامه دیگری که همه اطاعات برای اون فرستاده میشه و تو یک کامپیوتر دیگه هست رو برنامه سرور میگویند. البته کامپوتر سرور هم فرقی با کامپیوتر شما نداره و احتمالا سیستم عامل متفاوتی داشته باشه. بنابراین به برنامه های تحت شبکه برنامه های کلاینت سروری هم می گن. برنامه های تحت وبمورد دیگه برنامه هایی هستند که با استفاده از مرورگر وب اونها رو باز می کنید، این برنامه ها دقیقا مانند کلاینت سروری عمل می کنند با این تفاوت که فقط برنامه سرور نوشته میشه (البته به نوعی - چون برنامه سرور هم که نوشته میشه در این حالت با کمک برنامه های دیگه ای کار خواهد کرد که بهشون اپلیکیشن سرور میگن) و کلاینت همون مرورگر وب هست و اصلا نوشته نمیشه (بروزر مانند فایرفاکس، کروم و ...) - در حقیقت اون چیزی هم که تو مرورگر میبینید در همون قسمت سرور نوشته میشه و به مرورگر شما ارسال میشه برای نمایش به کاربر و از قابلیت های اون استفاده می کنید که اصطلاحا این برنامه ها رو تحت وب میگوییم. تمامی وب سایت ها برنامه های تحت وب به حساب میان.برنامه های embedded نکته نهایی راجع به مثال برنامه لباسشویی: اینگونه نرم افزارها و سیستم ها که برای کاری خاص طراحی می شوند و ارتباط تنگاتنگی با سیستم عامل خاص خود دارند (معمولا هسته لینوکس - یا بدون سیستم عامل به این معنی که ارتباطات لازم با سخت افزار را هم به جهت خواص بودن، خود مدیریت می کند) را embedded system می نامند حال می خواهد لباس شویی باشد یا بسیار بزرگتر و پیچیده تر مانند یک فضاپیما.سامانه های نهفته یا امبدد سیستم اغلب در کاربرد های مصرفی، آشپزی، صنعتی،  خودروسازی، پزشکی، تجاری و نظامی مورد استفاده قرار می گیرند.زبان برنامه نویسی چیست؟خوب بریم سراغ اینکه چطور خطوطی که ما تایپ می کنیم تبدیل به یک فایل میشه که قراره نصب شه (در خصوص برنامه های تحت وب در قسمت سوم توضیحات بیشتری ارائه میشود) و اصلا این خطوط چی هستند؟زبان های مختلفی برای نوشتن نرم افزار ها وجود دارند. درسته که برای نوشتن برنامه ها از زبان انگلیسی استفاده میشه (استاندارد است) اما همین نوشته ها یک سری مجموعه دستور است  که باید برای کامپیوتر ترجمه بشه (البته هرچیزی نمی توان نوشت و قوانین خاص خودش رو داره که باید یادگرفت - برنامه نویس اینها رو یادمیگیره و برای تولید نرم افزار بکار میگیره). کار ترجمه رو هم یکسری برنامه انجام میدن که هر کدوم یکسری مجموعه دستور برای خودشون تعریف کردن (همون قوانین که اشاره شد) و هرکدوم از این مترجم ها برای این ساخته شدن که برنامه های خاصی باهاشون نوشته بشه (در بخش سطوح زبان بیشتر متوجه خواهید شد). به مجموعه ای از این قوانین یا دستور ها میگن زبان های برنامه نویسی. و به مترجمشون میگن مفسر یا کامپایلر اون زبان (فرق مفسر و کامپایلر رو اشاره خواهیم کرد). یعنی قبل نوشتن یک برنامه با توجه به اینکه این برنامه قراره کجا نصب شه و اجرا شه و چه قابلیت هایی داشته باشه باید یک زبان (شامل یک مجموعه دستور و قوانین) رو برای نوشتن انتخاب کنیم و دستورات اون زبان رو یادبگیریم و بعد از نوشتن برنامه اون رو به مفسر یا کامپایلر همان زبان بدیم تا خروجی را برای ما بسازه. نکته ی دیگر قابل توجه برای شما سطوحی است که نرم افزا شما در آن کار می کنند. برخی مستقیم با سخت افزار ارتباط دارند و برخی فقط با دیگر نرم افزارها، در ضمن برای نوشتن نرم افزاری که با سخت افزار ارتباط دارد و نرم افزاری که فقط با دیگر نرم افزارها مرتبط است لزوما از یک زبان برنامه نویسی استفاده نشده. ممکن است یک سری برنامه که پیام هایی با قالب (فرمت) مشخصی را به هم میدهند نوشته شوند و با هم کارکنند. شما قرار است یک یا دو زبان را یاد بگیرید و در یک سطح شروع به توسعه نرم افزار کنید پس دانستن این موضوعات شاید لزومی نداشته باشد اما برای اینکه علاقه خود را پیدا کنید لازم است بصورت کلی بدانید. سطوح زبانزبان های برنامه نویسی سه سطح مختلف دارند و انچه شما بیشتر به عنوان زبان برنامه نویسی می شنوید مثلا php زبان های سطح بالا هستند که توسط انسان قابل فهم هستند اما سخت افزار مسلما مانند ما نمی داند جمله شرطی چیست؟ (اگر این اتفاق افتاد این کار را بکن) زبان های سطح پایین زبان هایی هستند که مستقیما با سخت افزار کار میکنند و سطح میانی بین این دو است و توسط انسان قابل درک تر است نه به اندازه زبان سطح بالا. مثلا سیستم عامل را با زبان های سطح پایین می نویسیند و برنامه هایی مانند مفسر یا کامپایلر یک زبان سطح بالا را با زبان سطح میانی یا سطح پایین.نکته: برنامه شما برای محیط خاصی نوشته خواهد شد. بله شما نمی توانید نرم افزارهایی که برای سیستم عامل ویندوز نوشته شده به همان شکل در لینوکس استفاده کنید و بالعکس. البته برنامه هایی هم وجود دارند که در محیط های مختلف قابل اجرا هستند اما فقط در صورتی که برای اجرای آن نیاز به برنامه دیگری باشد که برای آن محیط نوشته شده اند (اصطلاحا ماشین مجازی یا virtual machine یا vm) مثلا زبان جاوا دارای ماشین مجازی به نام JVM است که برای اجرای برنامه شما که با جاوا نوشته شده حتما JVM مختص آن سیستم عامل که قرار است برنامه شما در آن اجرا شود نصب شود که به واسطه آن برنامه شما اجرا شود. اما شما نگران اجرای برنامه خود در سیستم عامل دیگری نیستید. تنها کافیست روی آن JVM مختص آن نصب شود و نیاز به بازنویسی کل برنامه برای آن سیستم عامل نیست.در خصوص وظایف مفسر یا مترجم نکته دیگر اینکه در مورد زبان های سطح بالا و میانی مرسوم که برنامه ها را با آن ها تولید میکنند باید بعد از نوشتن برنامه، معمولا به یک فایل اجرایی واحد (یا چندین فایل که اجرای برنامه از یکی از این فایل ها انجام گرفته و آن فایل از دیگر فایل ها استفاده می کند) تبدیل شوند که بسته به سیستم عاملی که قرار است این برنامه در آن اجرا شود و زبانی که برنامه را با آن مینویسید متفاوت و خروجی برنامه نیز فایل/فایل هایی متفاوت است (مختص آن سیستم عامل). تفاوت مفسر و کامپایلراکنون شما با کامپایلر (برنامه ای که دستورات شما را خروجی گرفته و یکبار یک یا چند فایل میسازد که آماده اجرا است) و مفسر (برنامه ای که هربار قبل از هر اجرا، دستورات شما را خروجی گرفته و اجرا می کند) اشنا شدید. هر یک از زبان های برنامه نویسی دارای کامپایلر و یا مفسر است مثلا زبان php مفسر دارد و زبان جاوا کامپایلر که این روش آن زبان است و هر زبانی ممکن است یکی از این دو روش را برای اجرا داشته باشد. اصولا بهره وری زبان های دارای کامپایلر بیشتر است و برای کارهای سنگین تری از آن ها استفاده می شود. همچنین قابلیت اجرا در محیط های بیشتری را دارند.علاوه بر دستورات شما معمولا برنامه ها حاوی عکس ها و ... برای نمایش ظاهر (ماتریال های دیگری) نیز هستند که مثلا در نرم افزارهایی که برای ویندوز توسعه داده شده می بینید خروجی اجرایی شما مجددا همراه این فایل ها به یک فایل فشرده تبدیل شده و شما آن را اصطلاحا نصب می کنید (از حالت فشرده خارج شده و محلی برای قرار گیری فایل اجرایی نهایی شما بهمراه دیگر فایل های لازم برای نمایش و ... تعیین می گردد + تنظیماتی که برای اجرا به سیستم عامل اعلام می گردد) و از آن پس ان را اجرا می کنید فایل اجرایی همان دستورات شما را در خود دارد بعلاوه تمام آنچه لازم است با سیستم عامل ارتباط برقرار کند که در هنگام کامپایل/تفسیر در فایل مورد نظر قرار می گیرد. اینکه یک برنامه چطور ترجمه یا کامپایل می شود مبحث پیچیده ایست که پیش نیاز زیادی دارد و در دانشگاه ها با نام اصول طراحی کامپایلر تدریس می شود (بله آن هم خود یک برنامه است که برنامه شما را ترجمه می کند. توسعه چنین برنامه ای کار بسیار سخت تری است و نیاز به مطالعه و علم زیاد و ما این بحث را اینجا رها میکنیم) بیشتر بدانیداکنون شما اطلاعات خوب و جامعی راجع به انواع نرم افزار دارید. چرا بیشتر راجع به همه اینها مطالعه نکنید؟! دست شما کاملا باز است تا بیشتر بدونید و از دونستن لذت ببرید. (اگه قبلا از دوستتون که اپل داشته می پرسیدید ویندوزش چیه دیگه این کار رو نکنید، سیستم عامل ... ;) نظر شما راجع به یک مقاله کلا راجع به اینکه کامپیوتر چطور کار میکنه چیه؟ چطور این تکنولوژی به اینجا رسیده؟ اگه براتون مهمه (مقاله نحوه تعامل سخت افزار و نرم افزار را مطالعه کنید) و اگه نه ادامه بدین.قبل از شروع به معرفی زبان های برنامه نویسی (قسمت چهارم) در قسمت سوم کمی شبکه خواهید آموخت و خواهید دانست زمانی که شما آدرس یک سایت را وارد می کنید چه اتفاقاتی پشت پرده میافتد و کامپیوتر ها چطور یک دیگر را پیدا می کنند و اپلیکیشن های تحت وب که وب سایت ها نیز جزو همان دسته هستند چطور کار می کنند. برای آن ها که دوست دارند برنامه های تحت دسکتاپ توسعه دهند شاید از الان بتونن با آموزش یه زبان مثل پایتون یا  هر زبان دیگه ای شروع کنن ولی ما حرف های بیشتری برای گفتن داریم. https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%B3%D9%88%D9%85-i45ylczatumf </description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Tue, 13 Apr 2021 16:22:52 +0430</pubDate></item><item><title>من می خواهم برنامه نویس شوم - قسمت اول</title><link>https://virgool.ir/CodeLovers/من-می-خواهم-برنامه-نویس-شوم-قسمت-اول-wfmno2yymp8v</link><description>سلام، باعث افتخار است که شما تصمیم گرفته اید برنامه نویس شوید و قصد دارید در کنار دیگر دوستانتان در این عرصه فعالیت کنید و شاید با ایده هایی که در ذهن دارید، بتوانید به کسب و کارهای موجود کمک کنید و یا  صاحب کسب و کار جدیدی شوید و با تولیداتان به دیگران کمک کنید. در این سری آموزشی قصد داریم ذهن شما را با شغل برنامه نویسی و فضای آن آشنا کنیم. با تجربه ای که در دوران دانشگاه داشتم حتی دانشجویان کامپیوتر و فناوری اطلاعات هم برای شروع برنامه نویسی چالش ها و درگیری ذهنی زیادی داشتند از جمله خود من در شروع این کار. حتی برخی از این پرسشها شبیه به بحث های فلسفی هستند تا پرسش های فنی. در این قسمت با شغل برنامه نویسی بیشتر آشنا و سپس نکاتی را یادآور خواهیم شد.آشنایی با شغل برنامه نویسیدر ابتدا لازم است به سوالاتی در ذهن شما پاسخ داده شود و سپس به نکاتی مهم اشاره خواهیم کرد: حقوق برنامه نویس چقدر است؟سوال بسیار خوبی که همه ابتدا از من پرسیده اند و من هیچ وقت جواب قاطعی برای آن نخواهم داشت. اما اکثر دوستان منظورشان در یک زندگی کارمندی است زیرا کسانی همچون شما که بدنبال پیاده سازی ایده های عالی در ذهنتان هستید هیچ مبلغ مشخصی را به عنوان درآمد در نظر نمی گیرید. اما حقوق برنامه نویسان در سال گذشته ۹۹ در تهران بر اساس اطلاعات به دست آمده از گزارش حقوق و دستمزد وب‌سایت ایران سلری،  میانگین حقوق برنامه نویس در ایران ۶,۰۰۰,۰۰۰ تومان است. حقوق این افراد از  ۲,۰۰۰,۰۰۰ تومان (کمترین - که بنده باور نمیکنم) تا ۱۲,۰۰۰,۰۰۰ تومان (بالاترین - طبق گفته سایت) متغیر است. البته بسته به حوزه کاری شرکت و وسعت پروژه، مدرک دانشگاهی، سوابق کاری و حوزه تخصصی و سمت شغلی این عدد متفاوت و حتی تا ۲۰,۰۰۰,۰۰۰ تومان هم وجود دارد. مبلغ ذکر شده بصورت میانگین شاید حدود 50 درصد جامعه را شامل شود عدد تقریبا صحیحی است البته شروع فکر می کنم حداقل از سه میلیون تومان باشد و همانطور که اشاره شد مبالغ بالاتری هم وجود دارند که شرایط آن بیان شد. در کشور آمریکا بیشترین درآمد را فعالان و برنامه نویسان حوزه فناوری اطلاعات داشته اند با میانگین حدود ۱۰۰۰۰ دلار در ماه و طبق خبر شماره 864557 در سایت روزنامه دنیای اقتصاد توجه شما را به مقایسه اقتصاد ایران و آمریکا جلب می کنم (مربوط به سال 93) مقایسه اقتصاد ایران و آمریکا در سال 93 - روزنامه دنیای اقتصادهمانطور که مشاهده می کنید در صورتی که به یک تجارت بین المللی دسترسی و امکان اتصال به بانک های بین المللی را داشته باشید در حوزه نرم افزار می توانید درآمد فوق العاده ای داشته باشیدبرخی افراد هم هستند که شیفته برنامه نویسی هستند و به درآمد مکفی بسنده میکنند اما با علاقه و پشت کاری که دارند کارهای بسیار بزرگی انجام می دهند. جایگاه شغلی برنامه نویسمن به تولید بسیار علاقه دارم و برنامه نویسی برای من مانند تولید اثری است که برای آن زحمت می کشید، بسیاری از مواقع که محل کار خود را عوض کرده ام نه به دلیل حقوق یا سختی کار بلکه به دلیل برخورد راحت مدیران با تصمیم یک شبه کنار گذاشتن یک برنامه بوده که شش ماه یا بیشتر برای آن زحمت کشیده ایم. از نظر بسیاری از آن ها شما پول گرفته اید و کار خود را انجام داده اید. تصور کنید به هنرمند مجسمه سازی پول بدهید تا برای شما مجسمه ای بسازد و در مقابل چشم او آن را بشکنید که بسیار ناراحت کننده است. بیشترین لذت برنامه نویسی را در شرکتی داشته ام که از محصول تولید شده استفاده کرده اند و دقیقا همین حس را در نوشتن این مقاله دارم. گاهی اشتباه در پیاده سازی یک خواسته پیش می آید که طبیعی است اما نمی توان کل محصول که حاصل خواست خود کارفرما و تلاش شما است را زیر سوال برد. برنامه نویسی سخت است؟هم بله هم خیر، اگر به کار خود علاقه داشته باشید سختی قابل تحمل است و عادی اما اگر مجبور به کاری هستید که به آن علاقه ندارید طبیعی است که با مواجهه با مشکلات کار فرسایشی خواهد بود و شما را خسته خواهد کرد. مشکلاتی که پیش روی آن هستید: مشکلات برنامه نویسی، خطاها و مطالب جدید که با آنها آشنا نیستید: این قسمت برای بعضی افراد سخت و برای بعضی چالش و تنوع است و بستگی به روحیه شما دارد و اینکه تنها دوست شما گوگل است یا اینکه اشخاصی را برای تبادل نظر در کنار خود دارید یا خیرمشکل تغییر مدیریت در حین اجرای کار: این مورد در شرکت های دولتی امری بسیار طبیعی و حتمی است. شما عموما در طول یک سال با دو مدیر مختلف کار خواهید کرد. در این شرکت ها فقط فعالیت شما شرط است و اطاعت از دستورات، برنامه جایگاه زیاد مهمی ندارد و نهایتا از شرکت دیگری خریداری خواهد شد و شما به بخش دیگر یا به پروژه دیگری منتقل خواهید شد. در بعضی شرکت ها چاره کار خروج از شرکت است و در مواردی که پروژه واقعا مهم است و مدیر بعدی باید آن را ادامه دهد باید سعی کنید توانمندی خود را در اصول و فنون مذاکره بالا ببرید چون مدیر جدید حتما تغییراتی را سفارش خواهد دادمشکل در تغییر خواسته کارفرما ها حین اجرای پروژه: این مورد کمی با مورد فوق هم پوشانی دارد که با شیوه های جدید مدیریتی قابل حل است که در دوره های آتی آموزشی که در حوزه مدیریت است به آن اشاره خواهد شد.مشکلات زیرساختی: گاهی تجهیزات که در اختیار شما است و یا امکاناتی که برای اجرای پروژه به آن نیاز دارید کاملا در دسترس شما نخواهد بود و شرکت حاضر به پرداخت هزینه برای آن ها نیست یا اگر کار خود را انجام می دهید، خودتان توان پرداخت هزینه های آن را ندارید (باید به بدنبال راه حل های ارزانتر باشید و نگران نباشید زمانی که پروژه شما به درآمد زایی رسید از درآمد حاصله برای پیشرفت آن هزینه کنید)نبود صنف: متاسفانه حتی دلالان پیچ و مهره هم صنف دارند اما برنامه نویسان صنف درستی ندارند. مشکلات مربوط به قوانین کار که همه درگیر آن هستند و میزان افزایش حقوق که باید خود به فکر آن باشید و تا توجه به تورم غیر قابل توصیف و غیر منطقی موجود خود باید برای مدیریت آن چاره ای بیاندیشید.حال می خواهیم شروع کنیم:قدم اول- انگیزه داشته باشیدداشتن انگیزه در شروع هر کاری لازم است، خیاطی، نجاری، برنامه نویسی یا هر تولید موفق دیگری. آنچه موجب ادامه کار و استمرار در یادگیری و پیشرفت شما هست را پیدا کنید. برای شروع یک کار یا باید پشت کار آن را داشته باشید یا علاقه. تا زمانی که نتوانید آمپول یا قرصی اختراع کنید که علم را بخورید و یا به خور تزریق کنید یا آنقدر به توانمندی مغز خود پی نبرید که بتوانید در یک شب یک دانش را به طور کامل فرا گیرید هیچ چاره ی دیگری به جز مطالعه مستمر و تمرین ندارید. لطفا این را بپذیرید و دنبال میانبر نباشید. ما هم در اینجا با راهنمایی های لازم تجربه خود را در اختیار شما می گذاریم تا مسیر را سریع تر بپیمایید. اما اگر اطراف شما انسان های تنبلی وجود دارند پیشنهاد تولید کپسول انتقال دانش را به آنها بدهید، آنها حتما راهی برای آن پیدا خواهد کرد. ممکن است تنبل بودن آن ها ربطی به ذکاوتشان نداشته باشد. قدم دوم- از کار خود لذت ببریدذهن خود را درگیر بحث های بیهوده نکنید. مخصوصا در میان دانشجویان کامپیوتر و فناوری اطلاعات بسیار پیش میاید که دانشجویان زبان های مختلف برنامه نویسی به بحث و جدل راجع به توانمندی های زبانی میپردازند که در سطح توانمندی آینده کاری آنها حتی از یک دهم آن توانمندی های آن زبان هم استفاده نخواهند کرد. از الان نگران آینده پروژه در حال اجرا یا پروژه ای که قرار است چندین سال بعد اجرا کنید نباشید. اگر لازم شد از زبان دیگری استفاده خواهید کرد، بهتر است یک برنامه نویس حرفه ای باشید تا php کار یا asp کار یا جاوا کار و ... تمامی زبان های برنامه نویسی موجود، حاصل سال ها زحمت و تلاش بی وقفه افرادی باهوش و قابل اعتماد است و با تمامی این زبان ها پروژه های عظیمی انجام شده و همواره در حال بهبود هستند. پس نگران زبانی که میخواهید با آن کار کنید نباشید و از کار خود لذت ببرید. مطمئن باشید اگر زبانی ارزش لازم در جامعه فعلی را نداشت مانند زبان های دیگری که بعد از مدتی ترد شدند، باقی نمی ماند.البته این بحث ها ممنوع نیست اما اثر گذاری بی منطق آن ها در مسیر کاری شما ممنوع است.قدم سوم- شروع کنیدسعی کنید با ابزار کارتان (کامپیوتر) رابطه صمیمانه ای برقرار کنید، ((تایپ ده انگشتی)) را تمرین کنید (فارسی و انگلیسی) و با برنامه های مختلف کار کنید و به سایت های مختلف سر بزنید. به دنیای حرفه ای گام بردارید و وقت کمتری در شبکه های اجتماعی (به صورت بی هدف) بگذرانید و لذت خواندن یک مقاله مهیج در رابطه با آنچه علاقه دارید را در دنیای وسیع اینترنت از دست ندهید. وقتی پای مطالعات آزاد در میان باشد حتی فیزیک و شیمی و ریاضی هم جذاب هستند چون شما هستید که انتخاب می کنید چه چیز را دوست دارم بخوانم من در دوره ای که شروع به آموزش برنامه نویسی کردم کتاب های بیشتری نسبت به آنچه در دانشگاه مجبور به خواندن آن ها بودم خوانده ام. زبان انگلیسی! اینجا محل توقف شما نیست! اگر به کلمه زبان انگلیسی حساسیت دارید باید توجه داشته باشید که مرزهای دانش در زمین فناوری اطلاعات فعلا به دست اساتید و دانشجویان دانشگاه هایی چون MIT و کارکنان شرکت هایی چون IBM در حال گسترش است و این دانشگاه ها و شرکت ها از زبان انگلیسی برای درمیان گذاشتن تجربه خود استفاده می کنند. پس به آن نیاز دارید اگر قصد دارید بهترین باشید. نگران نباشید! متون استفاده شده برای توضیحات فنی در حوزه فناوری اطلاعات متون ادبی نیستند و بسیار ساده و قابل فهم هستند. برنامه ای برای ارتقای زبان انگلیسی خود داشته باشید حتی اگر در مسیر رفت آمد دانشگاه یا محل کار فعلی خود هستید یا یک ربع بیشتر وقت ندارید. سریع استفاده کنید.صحبت نهاییاین مقاله صرفا جهت آشنایی شما با فضای شغلی برنامه نویسی بود و امیدوارم مفید بوده باشه. برای شروع علاوه بر افزایش مهارت مستمر در زبان انگلیسی و تایپ (که به مرور زمان انجام می شود و بصورت یک مرحله پیش نیاز نیست) نیاز است با برخی اصطلاحات آشنا شوید و روش های کار برخی ابزارهای پیش رو را بدانید و یک زبان و محیط توسعه را انتخاب کنید که سعی میکنم در مقالات بعدی و به مرور مطالب را آماده و منتشر کنم.همچنین از پیش کسوتان در این عرصه دعوت میکنم در قسمت نظرات در چهارچوب مطلب این مقاله (یعنی شغل برنامه نویسی) اگر نظری دارند که به کار دوستانی می آید که خواهان ورود به این دنیا هستند بیان کنند. https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-mm4v25aturdq </description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Mon, 12 Apr 2021 12:37:01 +0430</pubDate></item><item><title>کدام لینوکس دسکتاپ مناسب من است؟</title><link>https://virgool.ir/CodeLovers/کدام-لینوکس-دسکتاپ-مناسب-من-است-axbkbmr8dyiq</link><description>بسیار پیش می آید که دوستان راجع به بهترین نسخه دسکتاپ لینوکس سوال می کنند و حتی کسانی که سابقه کار با لینوکس را دارند گاهی دوست دارند توزیع های دیگر و محیط دیگر لینوکس را نیز تجربه کنند. در این مطلب کوتاه به صورت خلاصه دو مورد مهم برای تصمیم گیری لینوکس توضیح داده شده. لذا اگر راجع به لینوکس اطلاعی ندارید ابتدا راجع به چیستی آن جست و جو کنید و سپس برای تصمیم گیری در خصوص نسخه مورد نیاز خود به این مطلب رجوع کنید.برای اینکه بدونید آخرش چی میشه در انتهای مقاله با توجه به توضیحات ارائه شده نهایتا انتخاب بین لینوکس Manjaro, Ubuntu, Fedora و openSuse پیشنهاد شده است.تصمیم اول: بین توزیع Arch و Debian و RHEL/SUSE یکی را انتخاب کنیدمنظور از Distribution یا به اختصار Distro (توزیع)، شاخه های اختصاصی است که با توجه به متن باز بودن لینوکس به وجود آمده اند. چرا که یک سازمان یا یک فرد مشخص کار توسعهٔ لینوکس را بر عهده نداشته است و توزیع های مختلفی توسط افراد و سازمان های مختلف بر پایه لینوکس به وجود آمده اند. که البته با توجه به اختصار مطلب به همین مقدار توضیح بسنده کرده و به محبوب ترین توزیع ها که انتخاب بین آن ها بهتر است اشاره میکنیم:توزیع Arch: هدف آرچ لینوکس ارائه یک نسخه سبک و ساده از لینوکس است و تیم توسعه روی  سبکی و صحت کدها تایید دارد به گونه‌ای که در استفاده اولیه فاقد افزونه‌ها  و پیچیدگی‌ها است و یک نسخه ساده در اختیار شما می‌گذارد. آرچ لینوکس سادگی را با نداشتن اضافات یا تغییرات غیر ضروری تعریف می‌کند.  برنامه ها را به محض انتشار توسط توسعه‌دهنده، با تغییراتی جزئی مربوط به این  توزیع ارائه می دهد. از پچ‌های رد شده توسط توسعه دهنده های نخست (upstream) اجتناب به عمل خواهد آمد. این توزیع برای معماری‌های x86-64 طراحی شده است.مدیریت نصب بسته های نرم افزاری این توزیع با pacman استتوزیع Debian:این توزیع دست کاربران را بسیار باز گذاشته است و تقریبا اکثر کاربرانی که قصد دستکاری در سورس یک توزیع لینوکس و ارائه یک نسخه جدید را دارند  ترجیح می دهند از Debian استفاده کنند. از نکات بارز مثبت در خصوص این توزیع می توان به با  ثبات بودن ، کنترل کیفیت عالی ، وجود بیش از 50 هزار بسته نرم افزاری ،  پشتیبانی از معماری تعداد پردازنده های بیشتر به نسبت سایر توزیع های لینوکس اشاره کرد. این توزیع برای معماری‌های x86-64 و Arm و Misp و ... طراحی شده است.مدیریت نصب بسته های نرم افزاری این توزیع با apt استتوزیع RHEL/SUSE:علت اینکه این دو توزیع را کنار هم آورده ام یکی از این جهت است که می توان از مدیریت نصب بسته های نرم افزاری ردهت یا rpm در هر دو توزیع استفاده کرد (البته در rhel از yum و در suse از zypper  هم استفاده می شود)علت دوم اینکه هردو این دو نسخه بیشتر به جهت تجاری بودن و enterprise بودن معروف هستند و علت آورده شدن در تصمیم شما می تواند این باشد که شاید بخواهید با این لینوکس ها نیز به صورت روزمره کار کنید و کارکردن و نصب برنامه ها در این دو نسخه برای شما امری عادی باشد. و بیش از این نیاز به مطالعه در طیف وسیعی از مطالب موجود در اینترنت دارد که هدف این مقاله آوردن چندباره آن ها نیست.تصمیم دوم: بین محیط های Gnome و KDE و XFCE یکی را انتخاب کنیدتمامی توزیع های فوق می توانند یکی از محیط های فوق را برای رابط کاربری خود بکار بگیرند. بنابراین تصمیم مهم دوم در خصوص لینوکس دسکتاپ محیط کاربری می باشد. در خصوص محیط نیز مانند توزیع محیط های بسیار مختلفی وجود دارد که برخی نیز بر پایه یکی از این سه محیط بنا شده اند و این مقاله فقط به بیان سه مورد از محبوب ترین موارد بسنده می کند.محیط Gnomeبه احتمال زیاد GNOME محبوب ترین محیط دسکتاپ در میان کاربران به شمار می  آید. از ویژگی های این محیط می توان به متن باز، رایگان و ساده بودن اشاره  کرد. با این وجود این محیط یکی از قدرتمندترین محیط های دسکتاپ لینوکس است.  کار با این محیط بسیار ساده است و همین دلیل باعث می شود کاربران مبتدی  بتوانند با آن کار کنندمحیط KDE به عنوان یک محیط قدرتمند با توانایی شخصی سازی بالا  شناخته می شود. استفاده از این محیط به شما این قابلیت را می دهد که دسترسی  و کنترل کاملی روی تمام بخش های محیط دسکتاپ داشته باشید. آخرین نسخه از این دسکتاپ KDE Plasma نامیده می شود چرا که نام KDE دیگر صرفا برای محیط دسکتاپ نیست و شامل چندین نرم افزار از جمله پخش موسیقی و ... استفاده می شود.محیط XFCEیکی از سبک ترین محیط های دسکتاپ لینوکسی XFCE است که برای دو گروه از  کاربران مناسب است: اول کاربرانی که از سیستم‌های قدیمی با سخت‌افزار ضعیف  استفاده می‌کنند و دوم برای کاربرانی که سرعت برایشان از اهمیت بسزایی  برخوردار است. اگرچه این محیط خیلی سبک است، اما در عین حال شما این امکان  را دارید تا شخصی سازی های بسیاری را نیز روی آن بدون فدا شدن سرعت اعمال  کنید.تصمیم آخر: نسخه دلخواه را دانلود کنیداگر توزیع arch را انتخاب کرده اید پیشنهاد من امتحان کردن لینوکس مانجارو است که برای هر سه محیط امکان دانلود آن را دارید.اگر توزیع Debian را انتخاب کرده اید محبوب تر از ubuntu پیشنهادی وجود ندارد. در سایت خود ابونتو برای محیط های مختلف امکان دانلود Xubuntu برای محیط Xfce و kubuntu برای محیط kde و نسخه پیشفرض که همان ubuntu است را دارید که از محیط gnome بهره می برد. همچنین موارد دیگری نیز هست که می توانید آن ها را امتحان کنیداگر توزیع RHEL را انتخاب کرده اید نسخه fedora مناسب ترین نسخه به حساب می آید (البته بعد از پایان عمر centos محبوب بنده به شخصه بی صبرانه منتظر rocky هستم و حتما آن را امتحان خواهم کرد)همچنین برای توزیع suse نیز طبعا opensuse تنها گزینه شماست که در دونسخه برای توسعه دهندگان نرم افزار و sysadmin ها پیشنهاد شده است.</description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Tue, 16 Mar 2021 13:38:34 +0330</pubDate></item><item><title>مدیریت هویت و دسترسی Identity and Access Management (IAM)</title><link>https://virgool.ir/CodeLovers/مدیریت-هویت-و-دسترسی-identity-and-access-management-iam-reyzq3xbkga0</link><description>با هر معماری در حال توسعه نرم افزار هستید شاید بد نباشد یکی از بدیهی ترین ماژول های نرم افزار خود را چه در سطح enterprise مانند بانک ها و چه small business مجددا و هربار طراحی و پیاده سازی نکنید. در این مقاله استفاده از IAM برای مدیریت هویت و دسترسی کاربران توضیح داده شده. انشالله مورد استفاده توسعه دهندگان قرار بگیره تا هم در ضمینه توسعه و هم امنیت کاربران گام موثری برداشته شه.مدیریت هویت و دسترسی (IAM) مربوط به تعریف و مدیریت نقش ها و امتیازات دسترسی کاربران و شرایطی است که در آن این امتیازات به کاربران اعطا می شود (یا از آنها سلب می شود). این کاربران ممکن است مشتری باشند  یا کارمند. هدف اصلی سیستم های IAM یک هویت دیجیتال برای هر فرد است. پس از ایجاد هویت دیجیتال، باید در سراسر نرم افزار برای هر کاربر، حفظ، اصلاح و نظارت شود.بنابراین سیستم های IAM ابزارها و فن آوری هایی را برای تغییر نقش کاربر ، ردیابی فعالیتهای کاربر ، ایجاد گزارش در مورد آن فعالیتها و اجرای سیاستها به طور مداوم در اختیار مدیران قرار می دهند. این سیستم ها به گونه ای طراحی شده اند که وسیله ای برای مدیریت دسترسی کاربر در کل شرکت و اطمینان از انطباق با سیاست های شرکت ها می دهند.ابزارهای IAM امنیت API با IAM: امکان استفاده از IAM در تجارت B2B، ادغام با cloud و معماری microservices وجود دارد. همچنین از راه حل های امنیتی مانند (SSO) برای ورود به سیستم بین برنامه های تلفن همراه یا دسترسی مدیریت شده توسط کاربر استفاده می شود. این امر به تیم های امنیتی امکان مدیریت مجوز دستگاه های IOT و داده های قابل شناسایی شخصی را می دهد.تجزیه و تحلیل هویت (IA) به تیم های امنیتی امکان می دهد تا رفتارهای مخاطره آمیز کاربر را با استفاده از قوانین ، یادگیری ماشین و الگوریتم های آماری دیگر شناسایی و متوقف کنند. هویت به عنوان سرویس (IDaaS) شامل راه حل های &#34;نرم افزار به عنوان سرویس&#34; (SaaS) است. ارائه SSO از یک پورتال به برنامه های وب و برنامه های تلفن همراه از این قبیل امکانات است.راه حل های احراز هویت مبتنی بر ریسک (RBA): شرکت می تواند برای کاربران پرخطر ورد دو عاملی (2FA) را درخواست کند و به کاربران کم خطر اجازه دهد تا با یک فاکتور احراز هویت کنند. سیستم های IAM باید به اندازه کافی انعطاف پذیر و مقاوم باشند تا بتوانند پیچیدگی های محاسباتی و کسب و کاری امروز را در خود جای دهند. چرا که در گذشته با راه اندازی شبکه های اختصاصی در شرکت ها حصار امنیتی برای نرم افزارها وجود داشت اما امروز دیگر آن حصار وجود ندارد.چرا به IAM نیاز دارم؟مدیریت هویت و دسترسی بخشی مهم در برنامه امنیتی هر سازمانی است، زیرا در دنیای دیجیتالی امروز امنیت و بهره وری با سازمانها در ارتباط ناگسستنی است. Credential کاربری که به خطر افتاده، اغلب به عنوان یک نقطه ورود به شبکه سازمان و دارایی های اطلاعاتی آن عمل می کند. شرکت ها از مدیریت هویت برای محافظت از دارایی های اطلاعاتی خود در برابر تهدیدات فزاینده باج افزارها، هک، فیشینگ و سایر حملات استفاده می کنند. هزینه های خسارت باج افزارهای جهانی فقط در سال 2018 بیش از 5 میلیارد دلار بوده است که 15 درصد بیشتر از 2016 است. در بسیاری از سازمان ها ، کاربران گاهی اوقات امتیازات دسترسی بیش از حد لازم را دارند. یک سیستم قوی IAM می تواند با اطمینان از کاربرد مداوم قوانین و خط مشی های دسترسی کاربر در سراسر سازمان ، یک لایه مهم محافظتی ایجاد کند.  هویت و سیستم های مدیریت دسترسی می توانند بهره وری کسب و کار را افزایش دهند. قابلیت های مدیریت مرکزی سیستم ها می تواند از پیچیدگی و هزینه حفاظت از اعتبار کاربر و دسترسی کاربر و توسعه آن در هر نرم افزار بکاهد. در عین حال ، سیستم های مدیریت هویت، کاربران را قادر می سازد تا در محیط های مختلف ، خواه از خانه یا دفتر سازمان کار کنند.چه امکانات دقیقی توسط IAM ارائه می شود؟مدیریت دسترسی: مدیریت دسترسی به فرآیندها و فناوری های مورد استفاده برای کنترل و نظارت بر دسترسی به نرم افزار (یا شبکه) اطلاق می شود. ویژگی های مدیریت دسترسی ، مانند احراز هویت، مجوز، حسابرسی امنیتی، جزئی از برترین سیستم های مدیریت شناسه برای سیستم های داخلی و مبتنی بر Cloud هستند.پشتیبانی از مایکروسافت AD: مایکروسافت ActiveDirectory را برای شبکه های دامنه ویندوز توسعه داد. اگرچه اختصاصا  AD در سیستم عامل Windows Server گنجانده شده است اما در سازمان ها به طور گسترده ای استفاده می شود.احراز هویت بیومتریک: یک فرایند امنیتی برای احراز هویت کاربران است که به ویژگی های منحصر به فرد کاربر متکی است. فن آوری های احراز هویت بیومتریک شامل سنسورهای اثر انگشت ، اسکن عنبیه و شبکیه و تشخیص چهره است.پشتیبانی از LDAP: سامانه LDAP مشابه راه حل مایکروسافت اما بصورت منبع باز استمدیریت چرخه حیات هویت: این اصطلاح به کل فرایندها و فن آوری های تهیه هویت دیجیتالی، حفظ و به روزرسانی آن اشاره دارد. مدیریت چرخه حیات هویت شامل همگام سازی هویت ، تهیه و از کار انداختن، مدیریت مداوم ویژگی ها ، اعتبارنامه ها و ... کاربر است.احراز هویت چند عاملی (MFA): MFA زمانی است که برای احراز هویت در یک شبکه یا سیستم بیش از یک فاکتور مانند نام کاربری و رمز عبور مورد نیاز است. حداقل یک مرحله اضافی نیز مانند دریافت کد ارسالی از طریق پیام کوتاه به تلفن هوشمند ، قرار دادن کارت هوشمند یا USB ، یا تأیید نیاز به احراز هویت بیومتریک ، مانند اسکن اثر انگشت ، مورد نیاز است.          احراز هویت مبتنی بر ریسک (RBA): احراز هویت مبتنی بر ریسک نیازهای احراز هویت را به صورت پویا بر اساس وضعیت کاربر در لحظه تلاش برای احراز هویت تنظیم می کند. به عنوان مثال ، هنگامی که کاربران سعی می کنند از یک مکان جغرافیایی یا آدرس IP که قبلاً با آنها مرتبط نبوده ، احراز هویت کنند ، این کاربران ممکن است با احراز هویت دو عاملی روبرو شوند.سیستم Single sign-on (SSO): نوعی کنترل دسترسی برای چندین سیستم مرتبط اما جداگانه است. با استفاده از یک نام کاربری و رمز عبور ، کاربر می تواند بدون استفاده از Credential های مختلف به یک یا چند سیستم دسترسی پیدا کند.     تجزیه و تحلیل رفتار کاربر (UBA): فناوری های UBA الگوهای رفتار کاربر را بررسی می کنند و به طور خودکار الگوریتم ها و تجزیه و تحلیل ها را برای تشخیص ناهنجاری های مهم که ممکن است تهدیدهای امنیتی بالقوه را نشان دهند ، اعمال می کنند.ارائه دهندگان سیستم IAM شرکت های کوچک و بزرگی همچون Okta و OneLogin تا IBM ، Microsoft و Oracle را می توانید در لیست ارائه دهندگان این سرویس ببینید. برخی امکان SelfHost شدن دارند و برخی خیر. برخی کاملا رایگان و برخی در قبال ارائه پشتیبانی یا امکانات بیشتر دارای نسخه پولی هستند و برخی نیز کاملا پولی. در زیر لیستی از ارائه دهندگان برجسته قرار دارد اما تعداد ارائه دهندگان این سرویس بیش از لیست زیر است و این لیست تنها جهت آشنایی منتشر می شود:KeyCloakAtos (Evidan)CA TechnologiesCentrifyCovisintForgeRockIBM Security Identity and Access AssuranceI-Spring InnovationsMicro FocusMicrosoft Azure Active DirectoryOktaOneLoginOptimal idMOracle Identity Cloud ServicePingSecureAuth...</description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Sat, 13 Mar 2021 16:00:09 +0330</pubDate></item><item><title>سرنوشت Netflix در Spring Cloud و آینده آن</title><link>https://virgool.ir/CodeLovers/سرنوشت-netflix-در-spring-cloud-و-آینده-آن-nun7uxqzwozm</link><description>سلام. بعد از مقایسه سه مورد از Service Discovery های معروفی که در اسپرینگ کلود قابل استفاده است تصمیم گرفتم پست خاصی راجع به جایگزین Netflix به صورت کلی داشته باشم.بی شک از زمانی که اسپرینگ کلود به صورت گسترده مورد استفاده قرار گرفت با نام بردن از آن ذهن ها سریعا به سمت کتابخانه های Netflix و راهکارهای آن از جمله Zuul, archaius, Eureka و Ribbon سوق پیدا می کرد. اما به تازگی در توضیحات آخرین انتشار Spring Cloud به وضوح آمده است که سه کتابخانه مهم شامل Zuul و Ribbon و Hystrix از کتابخانه Netflix حذف شده اند. هرچند در مستندات می توانید آن ها را پیدا کنید اما ظاهرا Spring Cloud تغییر مسیر داده که البته می توان از آن استقبال کرد. البته این تغییر پیش تر و در سال 2019 اعلام شده بود و اعلام شده بود که این کتابخانه ها به حالت maintenance خواهند رفت به این معنی که دیگر ویژگی به این کتابخانه ها اضافه نخواهد شد. اما همچنان کاربران زیادی به جهت پشتیبانی نسخه های بعدی از آن ها از جمله نسخه Hoxton از این کتابخانه ها همچنان این نسخه ها را برای توسعه انتخاب کرده اند. البته نا گفته نماند که با توجه به ارتقاء دشوار پروژه های در این سطح از یک نسخه به نسخه های بالاتر نمی توان این انتخاب را اشتباه دانست. همانطور که می دانید هر نسخه SpringCloud با نسخه مشخصی از Spring Boot سازگار است و ارتقاء نسخه ها کار ساده ای نخواهد بود.همچنین از همان سال 2019 توسعه پایدار Ribbon و Hystrix از طرف Netflix بسیار کند شد و همچنین پروژه Atlas جایگزین پروژه Hystrix شد. اما با وجود اینکه پروژه zuul 2 توسط Netflix به صورت منبع باز منتشر شد مشخص نیست چرا Spring تصمیم گرفت آن را نیز کنار گزارد. البته همچنان خبری راجع به Eureka وجود ندارد (شاید هم بنده اطلاعی نداشته باشم) اما به هرحال با توجه به اضافه شدن Consul و توسعه کند Eureka فکر میکنم جایگزین مناسب تری به وجود آمده و مقاله قبل مقایسه با دیگر ServiceDiscovery ها به همین علت انجام شد. البته در آن مقاله راجع به Alibaba Nacos و Kubernetes صحبتی نشد که به دلیل تمرکز بر کنسول که گزینه جالبی به نظر میرسید بود. نکته ای که باید به آن اشاره میشد این است که در واقع Kubernetes بر اساس etcd ساخته شده است و پشتیبانی از etcd نیز توسط Spring Cloud در حال توسعه است.مدیریت تنظیماتبا حذف archaius از کتابخانه نتفلیکس در صورتی که از ServiceDiscovery غیر از کنسول استفاده می کنید مثلا Eureka می توانید از Spring Cloud Config به عنوان یک جایگزین با امکان پشتیبانی از Git, JDBC, Vault و یا فایل های ساده استفاده کنید. البته همانطور که اشاره شد کنسول را میتوان به عنوان کانفیگ سرور استفاده کرد. اما لازم است spring-cloud-starter-consul-config را به pom.xml خود اضافه نمایید.سرور Gatewayجانشین Spring Cloud Netflix Zuul پروژه  Cloud Spring Gateway است که عمری پنج ساله دارد و مورد استقبال قرار گرفته است. مانند Zuul 2 این api نیز از Netty به عنوان servlet container استفاده می کند و از routes, predicates و فیلتر پشتیبانی می کند. و با پشتیبانی مدیریت کانفیگ کنسول از تنظیمات آن قدرت مانور بیشتری نیز خواهید داشت. در زیر نمونه ای از این تنظیمات را مشاهده می کنیدspring:&#xA;   cloud:&#xA;      gateway:&#xA;         discovery:&#xA;            locator:&#xA;                enabled: true&#xA;        routes:&#xA;           - id: caller-service&#xA;             uri: lb://caller-service&#xA;             predicates:&#xA;                - Path=/caller/**&#xA;            filters:&#xA;               - RewritePath=/caller/(?.*), /$\{path}گزینه جذاب دیگری که در کنار Cloud Spring Gateway در دسترس است KrakenD است که حدود چهار سال عمر دارد و با توجه به اینکه با زبان Go توسعه داده شده دارای سرعت قابل توجهی است که با توجه به ماهیت Gateway نباید از کنار آن ساده گذشت هرچند این ابزار برایمان زیاد آشنا به نظر نرسد اما قابلیت کارکرد آن از طریق DNS با کنسول در صورت استفاده می تواند تاثیر گذار باشد.اما باید این مورد را لحاظ کرد که krakend از route های پیشرفته پشتیبانی نمی کند مثلا اگر route شبیه به /department/id داشته باشید نمی توان route دیگری مانند /department/id/employee داشت و باید از root تغییر کنند تا به تناقض برخورد نکنید.ابزار LoadBalancerدر نهایت به یک ابزار مفید میرسیم که موافق و مخالفانی دارد و هرکدام استدلال خود را دارند. در نگاه به روز و جدیدتری شاهد توسعه spring cloud bus و توسعه روزافزون reactive هستیم و توصیه شده کمتر از فراخوانی به صورت rest بین سرویس های موجود در یک معماری مایکروسرویس استفاده شود. اما اگر بخواهیم با فرض اینکه این فراخوانی ها لازم است انجام شود و سرویس مورد نظر از نظر بار ممکن است چندین instance داشته باشد لازم است به فواید استفاده از Client side load balancing اشاره شودبه هر حال اگر از یک لود بالانس اصلی استفاده نمایید بر اثر fail شدن آن ارتباط سرویس ها قطع خواهد شد و این ریسک را می توان کاهش داد.نکته مهم دیگر شامل: کاهش درخواست های اضافه در شبکه مربوط به لود بالانسر. کاهش ریسک ناشی از لزوم restart کردن لودبالانسر و کاهش هزینه دپلوی و کاهش پهنای باند اشغالی است.در حال حاضر Spring Cloud Load Balancer جایگزین Ribbon شده است که با استفاده از انوتیشن LoadBalanced برسر بین RestTemplate یا WebClient خاصیت Client side load balancing را برای آن فعال کرد. البته هنوز ribbon به عنوان لودبالانسر پیش فرض spring انتخاب شده که اگر قصد دارید از Spring Cloud Load Balancer استفاده شود باید آن را غیر فعال کنید. با این روش به صورت خودکار سرویس با استفاده از service discovery لیست سرویس ها گرفته و به صورت راندرابین درخواست ارسال می کند که می توان آن را شخصی سازی نمود. </description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Mon, 01 Mar 2021 15:28:48 +0330</pubDate></item><item><title>تفاوت Consul, ZooKeeper, Eureka</title><link>https://virgool.ir/CodeLovers/تفاوت-consul-zookeeper-eureka-zm4mjh5cbkfz</link><description>با انتشار نسخه Ilford می توانید برای ایجاد ServiceDiscovery در Spring Cloud از هر یک از مجموعه های فوق استفاده نمایید. هرچند به تازگی در توضیحات آخرین انتشار آمده است که مجموعه Netflix حذف شده اما هنوز این مورد در مستندات فنی بجا مانده.در این پست تصمیم گرفتم تفاوت هر سه را بیان کنم تا بتوان انتخاب درستی داشت.ابزار Eurekaابزار Eureka معماری کلاینت / سرور است و دارای مجموعه ای از سرورهای Eureka در هر مرکز داده (Zone)‌ است. معمولاً مشتریان Eureka از SDK تعبیه شده برای Register و ServiceDiscovery استفاده می کنند. برای دیگر Client ها، از یک ماشین جانبی مانند Ribbon برای ServiceDiscovery از طریق Eureka استفاده می شود.ابزار Eureka در مشاهده تداوم سرویس کمی ضعیف عمل کرده. وقتی یک Client در یک سرور register می شود ، آن سرور سعی در تکثیر Client در سرورهای دیگر دارد اما هیچ تضمینی ارائه نمی دهد. ثبت نام سرویس ها دارای یک Time-To-Live (TTL) کوتاه است که نیاز به heartbeat داشتن client با سرورها را دارد. و در صورت قطع باعث می شوند تا از بین بروند و از رجیستری خارج شوند. درخواست های Discovery می تواند به هر سرویسی هدایت شود ، که به دلیل روش تکثیر در دیگر سرورها می تواند داده های منقضی یا مفقود شده را ارائه دهد. البته این مدل ساده امکان مدیریت cluster آسان و مقیاس پذیری بالا را فراهم می کند.ابزار ZooKeeperابزار ZooKeeper دارای node های سرور است که برای کار به یک حد نصاب node نیاز دارد (معمولاً اکثریت ساده). که برای ساخت سیستم های پیچیده توزیع شده استفاده می شود. این ابزار فضای ذخیره Key / Value را فراهم می کند: عملیات خواندن کاملاً مداوم و در دسترس بودن در برابر پارتیشن بندی شبکه گاهی فدا می شود.  مفاهیم ارائه شده توسط ZooKeeper برای ساخت سیستم های ServiceDiscovery جذاب است، اما تأکید بر اینکه این ویژگی ها باید ساخته شوند مهم است. ZooKeeper فقط یک فضای ابتدایی K / V را فراهم می کند و به توسعه دهندگان برنامه نیاز دارد که سیستم خود را برای ServiceDiscovery ارائه کنند.ابزار ZooKeeper با استفاده از ephemeral nodes سیستمی پیچیده تر از سیستم ضربان قلب ارائه می دهد و پیچیدگی سمت client بیشتری دارد. همه client ها باید ارتباطات فعال خود را با سرورهای ZooKeeper برقرار کرده و این ارتباط را حفظ کنند. و علاوه بر این نگهداشت این ابزار نیاز به دانش فنی بالاتری نسبت به Eureka و Consul دارد و فرایند رفع اشکال کمی پیچیده تر است.ابزار Consulکنسول مجموعه ای از ویژگی های مورد نیاز برای پشتیبانی از معماری سرویس گرا را فراهم می کند. شامل ServiceDiscovery، سیستم Health check بهتر، قفل کردن، Key / Value، امکان چند مرکز داده ، سیستم event و ACL است. هم کنسول و ابزارهای اکوسیستم آن مانند consul-template و envconsul سعی می کنند تغییرات برنامه را به حداقل برسانند و از نیاز به ادغام با SDK  را جلوگیری کنند. کنسول به مجموعه ای از سرورها در مرکز داده همراه با یک agent در هر client نیاز دارد، استفاده از agent به اکثر برنامه ها اجازه می دهد تا از کنسول مطلع نباشند ، ثبت سرویس را از طریق تنظیمات و Discovery از طریق DNS یا ماشین های جانبی مانند Ribbon یا دیگر loadbalancer ها انجام می دهند.سرورها با استفاده از پروتکل Raft وضعیت را تکرار می کنند. کنسول از مجموعه ای از health checkها شامل TCP ، HTTP ، اسکریپت های سازگار با Nagios / Sensu یا TTL مانند Eureka پشتیبانی می کند. clientها برخلاف heartbeat متمرکز که مقیاس پذیری را دچار چالش می کند، در یک health check توزیع شده شرکت می کنند. به طوری که دیگر client ها نیز در این فرایند دخیل هستند. درخواست های Discovery به رهبر منتخب کنسول منتقل می شود. کنسول  می تواند به عنوان سرویس قفل کننده برای انتخابات رهبر و هماهنگی cluster مورد استفاده قرار گیرد. Eureka سیستم مشابهی را ارائه نمی دهد و معمولاً به ZooKeeper برای اینچنین سرویس هایی نیاز دارد.نتیجه گیریدر صورتی که از نسخه های spring cloud پایین تر از 2.4 استفاده می کنید می توانید با استفاده از ابزارهای ارائه شده Netflix سیستمی پایدار را مدیریت نمایید اما اگر از نسخه 2.4 یا بالاتر برای پروژه های جدید استفاده خواهید کرد پیشنهاد می شود کنسول را به جهت هزینه نگهداشت پایین تر و پشتیبانی spring cloud از آن استفاده نمایید.</description><category>سعید قلی زاده</category><author>سعید قلی زاده</author><pubDate>Sun, 21 Feb 2021 13:25:13 +0330</pubDate></item></channel></rss>