تعریف گنو لینوکس GNU Linux

عبارت GNU چیست و چگونه به وجود آمد ؟ در این مطلب قصد داریم به شما نحوه پیدایش GNU را تشریح کنیم.

لینوکس یک سیستم عامل است و سیستم عامل به معنی این است که مجموعه ای از برنامه ها هستند که با سخت افزار کامپیوتر ارتباط برقرار می کنند و بعضا پیش زمینه اجرا نرم افزارهای دیگری می شوند. یک سیستم عامل شامل برنامه های بنیادی می باشد که برای اجرای دستورالعمل های کاربران و برقراری ارتباط با کاربران مورد نیاز هستند ، برای مثال برای خواندن و نوشتن اطلاعات بر روی هارد دیسک ، پرینتر و حتی Tape ، مدیریت حافظه و حتی اجرای سایر نرم افزارها این برنامه های بنیادی مورد نیاز هستند. مهمترین قسمت یک سیستم عامل هسته یا Kernel آن سیستم عامل است.

در یک سیستم GNU//Linux در واقع Linux سیستم عامل ما و در نقش هسته یا Kernel فعالیت می کند. اما باقی اجزای این سیستم شامل برنامه های متنوعی می باشد که اکثر آنها تحت لیسانس یا تابع قوانین GNU هستند که ما از این به بعد آن را با عنوان پروژه GNU می شناسیم . اما چرا ما همیشه با عنوان GNU//Linux این پروژه را نام می بریم ؟ دلیل این موضوع این است که سیستم عامل لینوکس بدون داشتن نرم افزارهایی که توسط پروژه GNU ایجاد شده اند تقریبا هیچ کار خاصی نمی تواند انجام دهد بنابراین ما همیشه Linux را در کنار پروژه GNU قرار می دهیم تا با همدیگر یک مجموعه کامل را تشکیل دهند.

فرض کنید سیستم عامل ویندوز را نصب کرده اید و هیچ نرم افزار جانبی بر روی آن نصب نشده است ، حتی مجموعه Notepad ، Paint ، Media Player و … را در این سیستم عامل ندارید ! این دقیقا شرایطی است که شما زمانیکه لینوکس را بصورت خام نصب می کنید برای شما به وجود می آید اما GNU یعنی اضافه شدن Office ، Photoshop ، Outlook و … به سیستم عامل خام … البته مثال را با لینوکس جلو ببریم بهتر است و فقط برای مثال ویندوز را گفتیم که تصویر بهتری از موضوع داشته باشید.

همین موضوع باعث شد سیستم عامل لینوکس با سایر سیستم عامل های موجود تفاوت های واضحی داشته باشد. اما نکته جالب در خصوص لینوکس که تصورش کمی سخت به نظر می رسید این بود ( و البته هست ) که لینوکس در مقایسه با سایر سیستم عامل های موجود در دنیا ، دارای مالک خاصی نبود و هیچ شرکت یا سازمان خاصی مالکیت آن را بر عهده نداشته و ندارد. بیشتر برنامه نویسی هایی که برای این سیستم عامل انجام می شود توسط برنامه نویس های داوطلب و علاقه مند انجام می شود.

پروژه GNU چیست و FSF به چه معناست؟

اما چیزی که ما امروزه به عنوان پروژه GNU می شناسیم از سال 1983 توسط شخصی به نام ریچارد استالمن با معرفی یک سیستم عامل رایگان به نام GNU شروع شد که یک سیستم عامل شبیه به Unix بود. بعدها چیزی که امروزه ما به عنوان GNU//Linux می شناسیم در سال 1984 معرفی شد و تقریبا یکسال بعد از معرفی GNU بود که این دو چیز با هم یکپارچه شدند. پروژه GNU در حقیقت پروژه ای است که در آن نرم افزارهای رایگان برای سیستم عامل های رایگانی مثل لینوکس طراحی و تولید می شود و بصورت کاملا رایگان برای استفاده عموم قرار می گیرند.اگر نرم افزاری توسط لیسانس یا با استفاده از نام پروژه GNU تولید شود به این معناست که شما می توانید سورس کدهای این نرم افزار را بصورت رایگان دریافت کنید ، تغییرات دلخواه خود را بر روی آن انجام دهید و یا حتی کدهای آن را بصورت دلخواه تغییر دهید.

در حال حاضر برنامه نویس ها ، شرکت ها و حتی ارگان های زیادی بر روی پروژه لینوکس کار می کنند اما در حال حاضر فقط یک محل است که بر روی پروژه GNU بصورت متمرکز کار می کند و ما آن را به عنوان Free Software Foundation یا FSF می شناسیم ، این بنیاد بیشتری ابزارهای موجود در لینوکسی که در حال حاضر استفاده می کنیم را تولید و پشتیبانی می کند ، فراموش نکنید که لینوکسی که استفاده می کنیم بدون FSF به مشکلات زیادی می خورد و به همین دلیل است که FSF باعث پیشرفت و گسترش لینوکس شده است و فلسفه لینوکس که سیستم عامل سورس باز در کنار نرم افزار سورس باز است با این بنیاد کامل می شود.

اولین هسته لینوکس در سال 1991 توسط یک فارق التحصیل دانشگاهی رشته کامپیوتر به نام لینوس توروالدز ایجاد شد و فقط یک هسته سیستم عامل بدون نرم افزار بود ، هدف اصلی لینوس توروالدز ارائه کردن یک سیستم عامل رایگان و قابل تغییر بود اما برای این سیستم عامل نرم افزار نیز لازم بود و در آن زمان نرم افزار رایگان چندان عمومیت نداشت و در همین موقع بود که او با ریچارد استالمن همکار شد ، این شروع پروژه GNU//Linux بود ، یعنی سیستم عامل رایگان در کنار نرم افزار رایگان قرار گرفت.

بنیاد نرم افزارهای رایگان یا همان Free Software Foundation در سال 1985 شروع به کار کرد. FSF به کاربران این اجازه را می داد که بتوانند نرم افزارهای کامپیوتری را بصورت رایگان استفاده کنند ، کپی کنند ، تغییر دهند و در نهایت توزیع کنند. FSF به شدت باعث ترویج داده شدن فرهنگ تولید و توسعه نرم افزارهای رایگان و آزاد متن که در اصطلاح Open Source گفته می شوند شد و امروزه شاهد این هستیم که بیشتر نرم افزارهایی که برای لینوکس نوشته می شوند از طریق این بنیاد و تحت پروژه GNU//Linux معرفی می شوند. برای کسب اطلاعات بیشتر در خصوص FSF و GNU می توانید به وب سایت های www.gnu.org و www.fsf.org مراجعه کنید.

واژه Free یا آزاد در Free Software یا نرم افزار آزاد در حقیقت به معنی اختیار است نه قیمت ، شاید اگر بخواهیم واژه آزاد متن را استفاده کنیم بهترین مثال برای درک آن سخنرانی آزاد است که شما اختیار دارید راجع به هر چیزی که دوست دارید صحبت کنید. Free در واژه Free Software در واقع به این معنی است که شما در اجرا کردن ، کپی کردن ، توزیع کردن ، تغییر دادن و توسعه دادن یک نرم افزار اختیار کامل دارید. آزادی نرم افزار به چهار نوع آزادی و اختیار در حوزه تولید نرم افزار اشاره می کند که به ترتیب زیر هستند :

  • آزادی شماره 0 : آزادی و اختیار کامل در اجرای نرم افزار با هر هدفی ( حتی اهداف مخرب )
  • آزادی شماره 1 : آزادی و اختیار کامل در خصوص مطالعه در خصوص نحوه اجرای یک نرم افزار و تغییر دادن آن بر اساس نیاز خود ، طبیعی است که برای داشتن آزادی شماره 1 در این بنیاد دسترسی به سورس کدهای نرم افزار یک پیش شرط است.
  • آزادی شماره 2 : آزادی و اختیار کامل برای توزیع کپی های نرم افزار برای دیگران
  • آزادی شماره 3 : آزادی و اختیار کامل برای توسعه نرم افزار و ارائه کردن نسخه تغییر یافته نرم افزار برای عموم ، طبیعی است برای این موضوع نیز داشتن دسترسی کامل به سورس کدهای نرم افزار یک پیش شرط است

نوشته تعریف گنو لینوکس GNU Linux اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

مدیریت خطا

یکی از منابع مهم پیچیدگی در سیستم های نرم افزاری، exception ها هستند. نوشتن کدی که با شرایط خاص سر و کار دارد، خیلی سخت تر از کدی است که یک کار ساده را در شرایط نرمال انجام می دهد. در این نوشته، این موضوع را بررسی می کنیم که exception ها چگونه بر پیچیدگی نرم افزار تاثیر می گذارند و چطور می توان آن ها را بهتر مدیریت کرد.

چرا exception ها به پیچیدگی می افزایند؟

ابتدا exception را تعریف کنیم. به شرایطِ غیرعادی، که جریانِ نرمالِ نرم افزار را مختل می کند exception گفته می شود. خیلی از زبان های برنامه نویسی، مکانیزمی دارند که به کد اجازه می دهد یک exception تولید کند تا توسط کدی که از آن استفاده می کند گرفته و مدیریت شود. ولی exception ها می توانند بدون این مکانیزم هم اتفاق بیفتند. برای مثال، در نظر بگیرید یک متد، زمانی که نتواند رفتار نرمال خودش را به درستی انجام دهد و دچار مشکل می شود، در خروجی خود یک مقدار مشخص را بر می گرداند (مثلا یک کد خطا)، که به صدازننده ی خود بگوید، کار درست انجام نشده است. به این شرایط هم exception می گوییم.

اگر با زبان هایی مثل #C یا Java کار کرده اید، احتمالا exception برای شما بخشی از syntax زبان است. در خواندن این نوشته، زبان را فراموش کنید و با مفهومِ exception، به صورتی که توضیح داده شد برخورد کنید.

چند مثال از دلایل اتفاق افتادن exception:

  • قطعه کدی که یک متد را صدا زده، ممکن است پارامترهای اشتباهی به آن پاس داده باشد.
  • متد ممکن است نتواند آن چه که پیاده سازی شده را انجام دهد. مثلا یک عملیات IO به دلیل پیدا نشدن فایل به مشکل می خورد یا یک منبع خارجی که متد می خواهد با آن کار کند، مثل دیتابیس، در دسترس نیست.
  • در سیستم های توزیع شده، packet های شبکه ممکن است گم شوند یا تاخیر داشته باشند یا ممکن است server در زمانِ مناسب پاسخ ندهد.
  • کد دچار bug شود یا با موقعیت هایی برخورد کند که برای رویارویی با آن ها آماده نیست.

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

وقتی یک exception اتفاق می افتد، برنامه نویس می تواند دو کار انجام دهد:

  1. به exception توجه نکند و کار را جلو ببرد. مثلا، اگر یک packet شبکه گم شد، آن را دوباره بفرستد. اگر دیتابیس در دسترس نیست، دیتای قدیمی تری که جای دیگری ذخیره شده را برگرداند (مثلا موقتا از cache بخواند، در حالی که می داند زمان انقضای آن گذشته است)

این روش مشکلاتی دارد. در مثالِ گم شدن packet، ممکن است که آن packet گم نشده بوده و تنها تاخیر داشته است. در این صورت، اگر از روشِ ارسالِ دوباره استفاده کرده باشیم، یک packet، دو بار به مقصد می رسد. در نتیجه، برای گیرنده ی packet، یک شرایط exception خیز فراهم کردیم و گیرنده باید آن را مدیریت کند. (برای مثال، چک کند که packet تکراری است یا نه، و در صورت تکراری بودن، تصمیم بگیرد که این شرایط را چطور مدیریت کند)

یا در مثالِ در دسترس نبودن دیتابیس، اگر دیتای قدیمی تر هم در دسترس نباشد چه؟ اگر همه ی کپی هایی که از دیتابیس داشتیم، از دسترس خارج شده بودند، چگونه exception را مدیریت کنیم؟

  1. روش دوم این است که هر جا exception اتفاق افتاد، عملیات را متوقف کند و exception را به سطح بالاتر انتقال دهد.

استفاده از این روش هم مشکلاتی دارد. ممکن است در آن نقطه که عملیات متوقف می شود، سیستم در یک وضعیت (state) نامناسب باشد. در این صورت، کدی که exception را مدیریت میکند، وظیفه ی برگرداندنِ وضعیت سیستم به یک وضعیت پایدار را هم دارد. مثلا شاید یک سری تغییرات که قبل از اتفاق افتادنِ exception اعمال شده بودند، باید rollback شوند.

همچنین، در زبان هایی که مکانیزم های مدیریت exception دارند (مانند C# و Java)، ممکن است خواندن کد سخت شود. قطعه کد زیر را در نظر بگیرید:

try   {
       ...
      }
catch (FileNotFoundException e) {
      // Do Something
}
catch (ClassNotFoundException e) {
       // Do Something
}
catch (EOFException e) {
       // Not a problem
}
catch (IOException e) {
       // Do Something
}
catch (ClassCastException e) {
       // Do Something
}

توجه کنید که تعداد خطوط، چقدر بیشتر از زمانی است که بخواهیم فقط برای عملیات نرمال کد بنویسیم. همچنین مشخص کردن این که هر exception دقیقا کجا رخ داده است، کار سختی است.

یک راه دیگر این است که برای هر قسمت از کد که امکانِ اتفاق افتادنِ خطا دارد، یک try جداگانه بنویسیم. در این صورت مشخص خواهد شد که exception دقیقا کجا رخ داده است. ولی هم خواندن کد سخت می شود و هم جریان اجرای کد مختل خواهد شد.

مساله ی دیگر این است که بسیاری مواقع، کدهایی برای مدیریت exception می نویسیم، ولی از کار کردن آن ها اطمینان حاصل نمی کنیم. مثلا خطاهای IO را نظر بگیرید. معمولا در محیط تست، این خطاها مشخص نمی شوند و کدی که exception مربوط به این بخش ها را مدیریت می کند هیچ وقت تست نمی شود.


یکی از عادت های بد برنامه نویس ها این است که، در هنگام مدیریت خطا، با تعریف exception های غیرضروری، اوضاع را بدتر می کنند. گویی آن ها معتقدند: “هرچقدر exception های بیشتری شناسایی شود، بهتر است”. به هر چیز کوچکی که مشکوک شوند، یکی exception تولید می کنند و این باعث می شود پیچیدگی سیستم بیشتر شود.

راه حل های بهتری هم وجود دارد. هر بار که اتفاق غیرنرمالی در سیستم می افتد، ناچار نیستیم حتما exception تولید کنیم. مثلا فرض کنید متدی داریم، و در بخشی از عملکرد آن، می خواهیم یک فایل را حذف کنیم. در این سناریو، شرایطِ نرمال این است که فایل وجود دارد، و نرم افزار به راحتی آن را حذف می کند. یکی از شرایط غیرنرمال، این است که فایل وجود نداشته باشد. برای مدیریت این شرایط غیرنرمال، دو راه حل می توانیم داشته باشیم:

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

2. به جای تولید exception، به بیزنس متد فکر کنیم. مثلا، شاید بیزنس به گونه ای باشد، که هدف نهایی، عدم وجود آن فایل روی دیسک است، بنابراین، اگر فایل وجود دارد، آن را حذف می کنیم و اگر وجود ندارد، چه بهتر! . با این تصمیم گیری، برنامه نویس، راه حل راحت را (که پرتاب کردن یک exception به سمت یک کد دیگر است) انتخاب نکرده، بلکه آگاهانه به این فکر کرده، که منطقِ آن قطعه از کد، چه پتانسیل هایی برای مدیریت این خطا دارد.

در نوشته ی مربوط به برنامه نویسی ماژولار اشاره شد که هر ماژول دو نوع واسط می تواند داشته باشد:

  • واسط رسمی: آنچه که در ظاهر آن ماژول مشخص است. مثلا signature یک متد
  • واسط غیر رسمی: آنچه که به دنیای بیرون از ماژول مربوط است، ولی در رفتار ماژول پنهان شده است.

یک exception، یک عنصر پیچیده از واسط ماژول است. نه فقط در خود آن ماژول تاثیر می گذارد، بلکه بر تمام کسانی که از آن استفاده می کنند موثر است و بر پیچیدگی آن ها می افزاید.

تولید یک exception ساده است و handle کردن آن سخت. بهترین راه برای کم کردن آسیب ناشی از exception ها، این است که تعداد قسمت هایی از کد که باید به exception رسیدگی کنند را کاهش دهیم.


در ادامه می خواهیم چهار روش را بررسی کنیم، که به ما کمک می کنند، نیاز به مدیریت خطا را در سیستم کاهش دهیم (در واقع، تعداد بخش هایی از سیستم، که باید به exception رسیدگی کنند را تا جای ممکن کم کنیم):

روش اول: حذف خطا

بهترین روش برای کم کردن پیچیدگی ناشی از exception ها، این است که اصلا exception ای نداشته باشیم. در واقع باید به جای این که در شرایط غیر نرمال، یک exception به بیرون پرتاب کنیم، به این فکر کنیم که چطور می شود که این خطا اصلا وجود نداشته باشد.

این روش را با یک مثال بررسی کنیم:

در سیستم عامل ویندوز، اگر یک فایل در حال استفاده باشد، امکان حذف آن وجود ندارد. حال اگر کاربر بخواهد یک فایلِ در حال استفاده را حذف کند، باید زمان زیادی را صرف پیدا کردن آن process که در حال استفاده از فایل است کند و حتی گاهی وقت ها کاربر ترجیح می دهد کل سیستم را reboot کند تا فایل آزاد شود. بنابراین یک مدیریت خطای اشتباه، کاربر را به دردسر می اندازد.

در سیستم عامل Unix، اگر کاربر بخواهد فایلی که در حال استفاده است را حذف کند، هیچ خطایی دریافت نمی کند و فایل هم در لحظه حذف نمی شود. در عوض، آن فایل برای حذف شدن علامتگذاری می شود و هیچ process دیگری نمی تواند آن را باز کند و تنها process هایی که از قبل آن را باز کرده اند می تواند write و read روی آن داشته باشند. به محض این که فایل بسته شد، سیستم عامل آن را حذف می کند.

رویکرد سیستم عامل Unix دو نوع خطا را حذف می کند:

1. آن process ای که می خواهد فایل را حذف کند، با exception مواجه نمی شود. عملیات حذف با موفقیت انجام می شود و فایل هم “در نهایت” حذف خواهد شد.

2. آن process که دارد از فایل استفاده می کند، با این خطا مواجه نمی شود که “فایل حذف شده است”، بلکه می تواند به کار خود ادامه دهد.

با این رویکرد، Unix توانسته، دو process را، از زحمتِ مدیریت exception در امان بدارد. شاید برای کسانی که با سیستم عامل windows بیشتر کار کرده اند، این روال عجیب باشد، ولی نکته ی اصلی در این مثال، این است که گاهی اگر به شرایط غیر نرمال، از نگاه دیگری بنگریم، روش های خوبی برای مدیریت آن پیدا می کنیم.

روش دوم: پوشاندن خطا

در این روش، شرایطی در کد که ممکن است به exception منتهی شوند، در ماژول های سطح پایین تر مدیریت می شوند، به گونه ای که کد سطح بالا، اصلا اطلاعی از این شرایط و exception های آن ندارد. این روش معمولا برای سیستم های توزیع شده مناسب است. برای مثال، پروتکل TCP، به جای این که زمانی که یک packet گم می شود، یک exception به سطح بالاتر پرتاب کند، خطا را می پوشاند و packet های گم شده را مجددا ارسال می کند. در واقع در این مثال، شرایطِ غیر نرمالی که در سطح پایین تر (یعنی شبکه) اتفاق افتاده، برای سطح بالاتر (مثلا نرم افزار) مزاحمتی ایجاد نمی کند.

روش سوم: تجمیع خطاها

ایده ی اصلی این روش این است که، تعداد زیادی exception را، فقط در یک قطعه از کد مدیریت کنیم. به جای این که تعداد زیادی رسیدگی کننده به exception داشته باشیم، تنها یک قطعه کد، آن ها را مدیریت کند.

برای مثال، فرض کنید تعدادی کلاس handler داریم که توسط یک کد سطح بالاتر استفاده می شوند. به جای این که exception ها را در کلاس های handler مدیریت کنیم، آن را به کد سطح بالاتر می سپاریم.

تفاوت این روش با روش پوشاندن خطا در این است که، در روش پوشاندن خطا، یک ماژول داریم که توسط چندین ماژول دیگر استفاده می شود، پس به جای انتشار exception به تمام آن ها، در خود آن ماژول، exception را می پوشانیم، ولی در روش تجمیع، چندین ماژول داریم که توسط یک ماژول استفاده می شود. به طور کلی دقت کنید هدف این است که تعداد جاهایی که exception را مدیریت می کنند به حداقل برسانیم.

روش چهارم: توقف اجرا

در بیشتر نرم افزارها، exception هایی وجود دارد که ارزش مدیریت کردن ندارد. یا به این دلیل که خیلی کم اتفاق می افتند و یا مدیریت آن ها خیلی سخت است. بهترین روش برای این نوع exception ها این است که اجرای نرم افزار متوقف شود و exception به بیرون پرتاب شود.

برای مثال، خطای out of memory را در نظر بگیرید. زمانی که حافظه فضا ندارد، نرم افزار چه کاری می تواند انجام دهد؟ شاید بتوان با راه های عجیب، به نحوی این exception را مدیریت کرد، ولی احتمالا آن قدر که پیچیدگی به سیستم اضافه می کند، فایده ندارد. بنابراین بهترین کار، توقف اجرای برنامه و ایجاد exception است.


خلاصه

مهم ترین مساله در مدیریت شرایط غیرنرمال، این است که تعداد جاهایی که exception باید مدیریت شود را کاهش دهیم. در بسیاری مواقع، منطقِ یک عملیات می تواند طوری تغییر کند، که رفتار نرمال، همه ی شرایط را پوشش دهد و نیازی به کشف و مدیریت شرایط استثنا نباشد.


منبع

A philosophy of software design

نوشته مدیریت خطا اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

جاوا اسکریپت بجای HTML با یک مثال ساده

نمایش دادن “Hello World” روی یک صفحه وب زیاد طول نمی‌کشه. کافیه یه فایل html. درست کنید و این محتویات رو بریزید توش:

<html>
    <body>
        <div>Hello World</div>
    </body>
</html>

حالا اون فایل رو با هر مرورگری که دوست دارید باز کنید و بوم! تبریک.

ولی اولین چالشتون یحتمل وقتی بوجود میاد که تصمیم می‌گیرید مثلاً وقتی روی همون متنِ “Hello World” ای که توی پاراگراف قبلی ساختیمش کلیک شد، متن عوض بشه و یه جمله جدید بهمون بده. مثلاً تغییر کنه به “You Clicked Me”.

خب برای اینکار لازمه که از یه زبان برنامه‌نویسی استفاده کنیم (HTML که مخففِ Hyper Text Markup Language هست، همونطور که از اسمش برمیاد، زبان نشانه گذاریه). و برای اینکار زبان جاوا اسکریپت رو داریم. مرورگر شما، کد HTML ای که نوشتید رو توسط یک موتور مخصوص (مثلاً اگر از chrome استفاده می‌کنید موتور V8) به شکل یک Object درمیاره و به جاوا اسکریپت تحویل میده. که اون Object رو بهش میگیم DOM (مخفف Document Object Model). اینطوری جاوا اسکریپت می‌تونه با کد HTML تون تعامل کنه؛ مثلاً‌ بهش node های جدیدی اضافه یا کم کنه. یا حتی محتوایات و ویژگی های node های فعلی رو عوض کنه. (توی جاوا اسکریپت به المان های HTML میگیم nodes و یا به طور کامل تر DOM nodes).

پس برای دسترسی به Hello World توی مثالمون و تغییر دادن متنش وقتی که رویداد کلیک اتفاق افتاد، کافیه که از جاوا اسکریپت و توابع از پیش تعریف شده ای که برای دستکاری DOM توی خودش داره استفاده کنیم. دسترسی به node ها با تعریف کردنِ ویژگیِ id واسشون خیلی ساده تر میشه:

<div id=&quotgreet&quot>Hello World</div>

بعد می‌تونیم توی خط بعدی از تگ برای ورود به دنیای جاوا اسکریپت، و برنامه نویسیِ تغییر جمله در پاسخ به رویداد کلیک، استفاده کنیم:


    let greetElement = document.getElementById(&quotgreet&quot);
    greetElement.addEventListener(&quotclick&quot, () => {
        return greetElement.textContent = &quotYou Clicked Me&quot
    });

پس نهایتاً نمای کلیِ فایلمون اینطوری میشه:

<html>
    <body>
        <div id=&quotgreet&quot>Hello World</div>
        
            let greetElement = document.getElementById(&quotgreet&quot);     
            greetElement.addEventListener(&quotclick&quot, () => {
                return greetElement.textContent = &quotYou Clicked Me&quot     
            }); 
        
    </body>
</html>

حتی می‌تونیم تگ div با id ی greet و مقدار اولیهٔ Hello World رو هم با جاوا اسکریپت تولید و روی صفحه نمایش بدیم:

<html>
     <body>
         
             let greetElement = document.createElement(&quotdiv&quot);
             greetElement.textContent = &quotHello World&quot
             document.body.append(greetElement);
             greetElement.addEventListener(&quotclick&quot, () => {
                 return greetElement.textContent = &quotYou Clicked Me&quot
             });
          
     </body>
</html>

بعد از ذخیره کردن، کافیه این فایل رو با هر مرورگری که می‌خواید باز کنید. روی صفحه Hello World خواهید دید که اگه روش کلیک کنید به You Clicked Me تغییر پیدا میکنه.

نوشته جاوا اسکریپت بجای HTML با یک مثال ساده اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

چطور یک دیباگ کننده‌ی حرفه‌ای بشیم؟

هیچکس نمیتونه بدون مشکل و ارور، یک کد و برنامه‌ی عالی بنویسه! اصلا پیدا کردن و حل کردن مشکلات و ارورها خودش یکی از بهترین راه‌های یادگیری برنامه نویسی محسوب میشه.

اما بیاید در مورد دیباگ حرف بزنیم، بذارید اول بگیم که دیباگ چیه و به چه کار میاد…

دیباگ چیه و چرا لازمه؟

دیباگ کردن یعنی شما بیایید تمام خطاها و باگ‌های برنامه و کد رو پیدا و اون‌ها رو رفع کنید، به همین سادگی!

اگه شما نتونید دیباگ کنید، گاهی حتی متوجه نمیشید مشکل از کجاست و چرا برنامه درست کار نمیکنه، اون وقته که کلی باید بی‌خوابی و سردرد بکشید تا شاید مشکل حل شه.

اگر بخواهید به صورت دستی دیباگ کنید، باید بخش‌هایی از کد رو جداگانه تست کنید، مثلا بعضی جاها دستوری بذارید و مقدار یک متغیر رو نمایش بدید، یا قدم به قدم ورودی و خروجی دستورات و توابع رو چک کنید.

اما در این بین ابزارهایی تحت عنوان دیباگر هستن که به شما کمک می‌کنند که خیلی سریعتر از حالت عادی، خطاها رو پیدا کنید.

به عنوان مثال مرورگر فایرفاکس و کروم، دیباگر دارن و با استفاده از اونها میتونید کدهای جاوا اسکریپت رو به راحتی دیباگ کنید.

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

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

خلاصه بگیم: هیچ کدی بدون ایراد و خطا نوشته نمیشه، اگه میخواهید مشکلات رو در کمترین زمان حل کنید، باید دیباگ کردن رو یاد بگیرید.

بهترین دیباگرها برای جاوا اسکریپت

  • ابزارهای مرورگرهای وب مثل Chrome Dev Tools
  • Postman
  • ESLint

بهترین دیباگرها برای پایتون

  • PDB
  • PyCharm
  • Pylint

بهترین دیباگرها برای C و C++

  • MSVC برای ویژوال استودیو
  • GDB

بهترین دیباگرها برای جاوا

JDP

NetBeans

Rookout

چندتا دیباگر همه فن حریف

  • دیباگر برای سرور: Lightrun
  • IDA Pro
  • CFF Explorer
  • API Monitor
  • WinHex
  • Visual Studio Debugger

تا حالا کدی رو دیباگ کردید؟ قسمت بعدی، نکات مهمی در مورد دیباگ کردن مینویسیم، همراه ما باشید…

5 نکته حرفه‌ای برای دیباگ کردن

تا حالا شده دقیقا موقع تحویل پروژه، به باگ بخورید و ندونید چیکار کنید؟

دیباگ اینجور مواقع به کمکتون میاد!

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

1- تغییرات تصادفی ایجاد نکنید!

اگه با خودتون گفتید “نمی‌دونم چی میشه و چی پیش میاد ولی فعلا اینو تغییر میدم امیدوارم کار کنه” یعنی دارید اشتباه بدی رو مرتکب میشید.

2- منبع خطا و ارور رو پیدا کنید.

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

3- محدوده کد رو کاهش بدید!

اگه تمام کد و برنامه یا یک بخش بزرگ رو تست کردید و ارور داده، حالا وقتش رسیده که کد رو به بخش‌های کوچیک تقسیم کنید و هربخش رو جداگانه تست کنید.

4- قبل از اینکه سراغ حل کردن و تعمیر مشکل برید، مشکل رو خوب بشناسید و درک کنید.

5- در آنِ واحد فقط یک تغییر ایجاد کنید!

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

این نکته‌ها رو میدونستید؟ تجربه‌های برنامه نویسی خودتون رو برای ما بنویسید…

نوشته چطور یک دیباگ کننده‌ی حرفه‌ای بشیم؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

۷ کانال یوتیوب که دوست داران جاوا اسکریپت باید دنبال کنند

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

همه اون هارو خودم دنبال میکنم. البته یوتیوبر های خیلی معروف که کانال هاشون پر از crash course هست رو فاکتور گرفتم. بیشتر کانال ها حول جاوااسکریپت میچرخه و به نظرم محتوا خوبی تولید میکنند و ارزش دنبال کردن دارند. بعد از یه معرفی مختصر چنتا از ویدیو های هر کانال که دیدم و شاید شما رو به محتوا اون کانال علاقه مند کنه رو معرفی کردم.

Ben Awad

یه جوون ۲۳ ساله که جدیدا تند تند استارتاپ میسازه!

استارتاپ قبلیش یعنی DogeHouse رو خیلی دنبال میکردم. یه برنامه شبیه به کلاب هاوس که اتفاقا اپن سورس هم بود ولی خب در نهایت شکست خورد چون همه شرکت های بزرگ یهو تصمیم گرفتن ویژگی های کلاب هاوس رو به برنامه هاشون اضافه کنند و دیگه توان رقابت باهاشون رو نداشت. هر هفته یه گزارش از روند پیشرفت استارتاپش آپلود میکرد که خیلی جالب بود. الان هم داره رو یه استارتاپ دیگه کار میکنه که البته اپن سورس نیست ولی گزارش های هفتگیش رو هنوز میگذاره.

آموزش های برنامه نویسی بن هم خیلی خیلی خوبه. یکم از سطح مبتدی فراتر میره و نسبت به آموزش های دیگه یوتیوب اطلاعات بیشتری داره‌.

ویدیو های پیشنهادی:

DistroTube

بخش زیادی از کرم شخصی سازی برنامه های لینوکسیم رو این آقا به جونم انداخته. بیشتر ویدیو هاش در مورد لینوکس، ابزار های لینوکسی و مثل vim و مدیر پنجره های مختلف و کانفیگ کردن اونها هست. موافق سرسخت آزادی نرم افزار.

اگر با ویم یا یه tiling window manager یا هر برنامه لینوکسی سر و کار دارید یا اینکه کلا لینوکس رو دوست دارید این کانال میتونه خیلی براتون جالب باشه.

ویدیو های پیشنهادی:

ری اکشن به ویندوز ۱۱ (باید ببینید)

راهنمای کامل استفاده از TWM
حتی یه پلی لیست فقط در مورد یه TWM داره!

Lee Robinson

ایشون توی شرکت vercel کار میکنه. همون شرکتی که پشت next.js هست در نتیجه بیشتر ویدیو هاش در مورد next.js هست و میتونه اطلاعات خوبی در اختیارتون قرار بده. بعضی وقتا هم استریم میکنه، حتی با سازندگان کتابخانه های معروف. در کل اگر با next.js سر و کار دارید کانال خوبیه.

ویدیو های پیشنهادی:

Hussein Nasser

بیشتر ویدیو های این کانال در مورد node.js و بک اند و دیتابیس ها هست. البته مباحث نسبتا پیشرفته تر. جدیدا یه سری ویدیو رو شروع کرده که امکانات کتابخونه خود node.js رو نشون میده که من خیلی دوست دارم. مثل http که هیچکس بهش توجه نمیکنه:)

SimonDev

میدونستید که با جاوا اسکریپت میشه بازی ساخت؟ من تا قبل از این کانال نمیدونستم. چیزی که این کانال رو برام جذاب کرده اینه که فرایند ساخت یه بازی ساده رو در حد ۱۵ دقیقه با کتابخانه ای به اسم three.js نشون میده. حالت آموزشی نداره که حوصلتون سر بره. من تصمیمی ندارم که گیم بسازم ولی دیدن ویدیو های این کانال و دیدن فرایند ساخته شدن یه بازی اونم با جاوااسکریپت خیلی برام جذابه.

بعضی وقتا هم در مورد Data strucures و اینکه چطور کد های جاوا اسکریپت رو سریع تر کنیم هم میگذاره که فکر کنم بیشتر برای گیم دولوپر ها مفید باشه ولی بازم جالبه.

چنتا از بازی هایی که ساخته:

PwnFunction

اگر دوست دارید با مسائل امنیتی دنیای وب بیشتر آشنا بشید این کانال میتونه براتون جذاب باشه. محتوای این کانال عمدتا توضیح حملات هکری مختلف به زبان ساده هست. ویدیو ها کوتاه و مختصر و مفید و سرگرم کننده هستند و دیدنشون خالی از لطف نیست.

Jason Lengstorf

فعالیت این کانال بیشتر توی twitch هست و با همه و در مورد هر موضوعی استریم میکنه. سازنده های کتابخانه های معروف، آدم هایی که توی یه زمینه خیلی خاص کار میکنند، ویدیو های آموزشی با کسایی که کارشون هست و…

ویدیو های پیشنهادی:

نوشته ۷ کانال یوتیوب که دوست داران جاوا اسکریپت باید دنبال کنند اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

developer options چیست؟

امکانات مخفی در گوشی های اندرویدی وجود دارد به نام developer options یا همان گزینه های توسعه دهنده که پیشنهاد می کنیم حتما فعالشان کنید. فرقی نمی کند بخواهید اشکال زدایی USB را فعال کنید، قفل بوت لودر خود را برای روت کردن گوشی اندرویدی تان باز کنید و یا سرعت اجرای تصاویر متحرک را در گوشی تان تغییر بدهید؛ به هر حال بخش developer options گوشی تان جاییست که می توانید از طریق آن این موارد و خیلی چیزهای دیگر را تنظیم کنید.

مهم نیست برای چه منظوری می خواهید ازdeveloper options استفاده کنید، در هر صورت قبل از هر کاری باید قفل این گزینه را باز کنید. راهنمای امروز ما اصول اولیه نحوه دسترسی به گزینه های توسعه دهنده یا همان developer options را به شما آموزش می دهد.

به منوی تنظیمات بروید و build number (شماره ساخت) را پیدا کنید. با چند بار ضربه زدن روی این قسمت می توانید developer options (گزینه های توسعه دهنده) را در گوشی یا تبلت های اندرویدی باز کنید. ولی یادتان باشد که بسته به شرکت سازنده تلفن همراه شما، محل دقیق build number (شماره ساخت) ممکن است متفاوت باشد.

دسترسی به این گزینه در گوشی ها:

  • به Settings (تنظیمات) و سپس به About Phone (درباره تلفن) بروید.
  • روی گزینه Software Info (اطلاعات نرم افزار) و سپس روی Build Number (شماره ساخت) ضربه بزنید.
  • 7 بار پشت سر هم روی Build Number ضربه بزنید تا گزینه های توسعه دهنده باز شوند. ممکن است از شما خواسته شود که رمز عبور گوشی تان را وارد کنید. هنگامی که گزینه های توسعه دهنده یا همان developer options فعال شدند، پیامی به شما نشان داده می شود که به شما اعلام می کند گوشی تان الان در حالت توسعه دهنده قرار گرفته است.
  • حالا دوباره به Settings (تنظیمات) برگردید. در این قسمت Developer options (گزینه های توسعه دهنده) برای شما نمایش داده می شود.
  • روی آن ضربه بزنید و اگر فعال نیست تیک آن را روشن کنید. حالا می توانید از این قسمت تنظیمات مختلفی را روی گوشی تان اعمال کنید.

معمولا در گوشی هایی که اندروید 10 دارند، منوی About Phone (درباره تلفن) در Settings (تنظیمات) > System (سیستم) > About Phone (درباره تلفن) قرار دارد. بقیه مراحل بالا یکسان است. وقتی کارتان با گزینه های توسعه دهنده تمام شد و دیگر نیازی به آنها نداشتید به راحتی می توانید آن را غیر فعال کنید. اولین قدم برای انجام این کار این است که به قسمت Settings بروید، روی Developer Options کلیک کرده و Off را بزنید. همین! به همین سادگی Developer Options دوباره غیر فعال می شود و دیگر در منوی تنظیمات نمایش داده نمی شود. برای فعالسازی مجدد آن هم فقط کافیست مراحل گفته شده در بالا را دوباره انجام بدهید.

شما می توانید سایر تنظیمات پیشرفته تر را هم با استفاده از Developer Options یا همان گزینه های توسعه دهنده روی گوشی تان اعمال کنید؛ اما یادتان باشد که حالت توسعه دهنده در وهله اول برای اشکال زدایی برنامه و دستکاری پاسخ ها و عملکرد سیستم طراحی شده است. گزینه های موجود در حالت توسعه دهنده معمولاً شامل اشکال زدایی، شبکه، ورودی، ارائه سریع سخت افزار، رسانه، نظارت و برنامه ها است. اینکه تنظیمات مورد نظرتان را چطور سفارشی کنید به خودتان بستگی دارد چون می توانید با استفاده از این گزینه ها و بر اساس ترجیحات خاص خودتان تنظیمات گوشی تان را دسته بندی کنید.

همچنین بخوانید: معماری های برنامه نویسی اندروید

نوشته developer options چیست؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

باز شدن مدرسه و دانشگاه مانع یادگیری برنامه نویسی میشه؟!

یه جمله که این روزا خیلی میشنوم اینه که :

مدرسه و دانشگاهم داره شروع میشه نمیتونم فعلا سراغ یادگیری برنامه نویسی برم!

خب همین اول بگم تمام کسانی که این حرفه یا هر تخصص دیگه ای رو یادگرفتن آدمهای بیکاری نبودن که ۲۴ ساعت وقت آزاد داشته باشن ( زمان خواب هم حساب کردم )

هرکسی که متخصص این حوزه شده یه سری دغدغه ها و گرفتاری هایی داشته که مجبور بوده برای گذران زندگی یا به اجبار دیگران ( عموما والدین ) اون کارها رو انجام بده، اما مانع این نشده که نتونه برنامه نویسی رو یاد بگیره.

اینکه درس خوندن و دانشگاه رفتن خیلی مهمه ( نظر شخصی من این نیست! ) قابل قبوله ولی انسان میتونه اولویت بندی کنه! هیچ انسانی تک بعدی نیست یعنی مثلا که بخواد ریاضی بخونه بعدش دیگه نتونه تلویزیون ببینه ! ذهن ما توانایی زیادی داره واسه تقسیم بندی کردن کارها فقط مهم اینه بتونیم اولویت بندیش کنیم.

دلیل اینکه ما احساس می کنیم نمیتونیم در کنار درس برنامه نویسی یادبگیریم اینه که :

توی مدرسه و دانشگاه به برنامه نویسی فکر میکنیم و زمان برنامه نویسی به تکالیف دانشگاه و مدرسمون!

خب همینجا معلوم شد مشکل اصلی چیه و چجوری میشه حلش کرد!

البته منم قبول دارم گفتنش آسونه و در عمل سخت! اما اگه بخوایم اینجوری به قضیه نگاه کنیم میبینیم که سه وعده غذا خوردن در روز هم سخته ( البته منظورم حاضری بخور ها نیست! )

تنها کاری که باید بکنیم در وحله اول اولویت بندیه !

دومین کار اینه که اون زمانی که توی محل تحصیل هستیم فقط ذهنمون اونجا باشه و بعدش تکالیفمون رو انجام بدیم، تموم که شد همونجا فکرش هم تموم بشه!

سومین مرحله اینه موقع برنامه نویسی یادگرفتن هم ذهنمون فقط متمرکز برنامه نویسی باشه نه درس و نه هیچ جای دیگه.

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

بازهم تاکید می کنم که از کم شروع کنید که یهو زده نشید! ( توقع هم نداشته باشین توی نیم ساعت اول زبان C رو بفهمین! )

توصیه بعدیم اینه که با زبان های ساده تر شروع کنین مثل پایتون، یا حتی Html ( اساتید گرانقدر منم میدونم html زبان برنامه نویسی نیست، پیشاپیش از تذکر شما کمال تشکر را دارم ).

خب خوندن این مطبی هم کافیه از همین الان بعد از مرتب کردن اتاقتون ( این جمله برای جلب رضایت والدین بود! ) شروع کنین به این مطلب فکر کنین، بعد بهش عمل کنین.

برنامه نویس باشید و ازش لذت ببرین 🙂

نوشته باز شدن مدرسه و دانشگاه مانع یادگیری برنامه نویسی میشه؟! اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

شغل برنامه نویسی ، ایا منبع درامد همیشگی ما باقی خواهد ماند ؟

از دست دادن شغل چیز خوبی نیست ، خصوصا زمانی که شغل آسان و در عین حال پردرامد باشد ! در این مقاله به اینده شغل برنامه نویسی خواهیم پرداخت

برنامه نویسی شغلی پردرامد و آسان

سیستم خود را روشن میکنید ، وارد محیط برنامه نویسی (IDE) میشوید و با کد نویسی درامدتان شروع میشود ، بدیهیست که هر برنامه نویسی ترس از دست دادن این شغل پردرامد در عین حال آسان را داشته باشد ، بلعکس مشاغل دیگر در برنامه نویسی دلایل زیادی در جهت منسوخ شدن شغلمان وجود ندارد بنده سعی خواهم کرد تا در ادامه مقاله به چندی از این دلایل بپردازم با من همراه باشید …

هوش مصنوعی و برنامه نویسی خودکار (Automatic programming‎)

انیشتین میگوید بشر بمب اتم را اختراع کرد اما هیچ موشی در جهان برای خود تله موش نمی سازد

این موضوع برای ما نیز صدق میکند ، کتابخانه های هوش مصنوعی و برنامه نویسی خودکاری را توسعه داده ایم که میتواند جایگزین خودمان شود!! البته ناشکریست که فقط از این زاویه به این تکنولوژی نگاه کنیم ، همچنین ما میتوانیم هوش مصنوعی را توسعه بدهیم که جای خودمان برای خودمان کار کند ، بگذریم بحث ما چیز دیگریست ، بله هوش مصنوعی میتواند جایگزین تمام مشاغل دنیا باشد از رانندگان تاکسی ، کارگران کارخانه ها ، حسابدارن ، حتی مدیران ، گرفته تا حتی برنامه نویسان ، البته متخصصان هوش مصنوعی نیز از این قضیه مستثنا نیستند ، هوش مصنوعی میتواند در حدی پیشرفت کند که از یک متخصص هوش مصنوعی نیز بهتر خود را توسعه دهد ! به هر حال هوش منصوعی میتواند معایب زیادی داشته باشد اما تا حدودی مزایای ان به معایبش میچربد البته این قضیه میتواند موقتی باشد !

نرم افزار های برنامه نویسی بدون دانش کد نویسی

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

قطع نیاز جهان از برنامه نویسی

حرف خنده داریست اگر کسی بگوید دیگر جهان به اپلیکیشن ها ، سایت ها و بسیاری موارد دیگر که توسط برنامه نویسان توسعه داده میشود نیاز ندارد ، جهان امروز کاملا با برنامه های توسعه داده شده توسط ما گره خورده است ! برنامه نویسی به جمع مشاغلی پیوسته که جهان به آن نیاز مبهمی دارد و بدون آن زندگی کردن سخت است ! پس میتوان با قاطعیت گفت که خطری از این جهت شغل برنامه نویسی را تهدید نمیکند !

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

احتراما ، حمیدرضا قهرمانی ، مجموعه برنامه نویسان

Copyright © 2021, all rights reserved for Hamidreza Ghahremani

نوشته شغل برنامه نویسی ، ایا منبع درامد همیشگی ما باقی خواهد ماند ؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

تجربه ۱۵ روزه من برای استخدام

چند لحظه صبر کن 🧑🏻‍💻👩🏻‍💻 خیلی مسخرست که بخاطر رد کردن یه پوزیشن شغلی هرچیزی که از دهنش در بیاد بهت بگه 🙄 ۱۵ روزی میشه که به شدت دنبال کار میگردم .

و تصميم گرفتم تجربیات این ۱۵ روز رو تمام کمال بدون هیچ تعصبی در خدمت همه شما دوستان عزيزم بزارم 🥲و یقین دارم که ممكنه خیلی جاهاش بدردتون بخوره .

چی شد که این تصمیمو گرفتم : من واسه کار از شیراز جمع کردمُ رفتم تهران و یه سری مسائل پیش اومد که حدود ۷ ۸ روز حتی غذا درست نمیخوردم .

اونقدر شوق داشتم واسه کار توی تهران که روز شنبه که حرکت کردم تازه ۷ ساعت بود که دندون عقلمو جراح کرده بودم و تموم درد و . . . اون رو تحمل کردم که به موقع برسم و شروع کنم اما اون شروعی نشد که توقع داشتم . بعد این مدت فهمیدم گاهی با بعضیا حتی پشت گوگل میت اونقد حس نزدیکی میکنی که دلت میخواد بغلشون کنی و بعضی از مصاحبه ها ممکنه اونقد احساسی شی که گریه کنی و چند سال زندیگت جلو چشمات بگذره .

یه سری مصاحبه ها هم اونقد جذاب و چالشی هستن شاید خیلی سوالا رو نتونی جواب بدی اما لذت میبری و کلی چیز یادمیگیری.

در عین حالت یه سری از مصاحبه ها یه جوري انرژیت رو میگیرن که انگار که چندین ساعت داشتی مصاحبه میکنی😮‍💨 البته که حتی ممکنه سوال سختی هم نپرسن و انرژیتو بگیرن.

چارچوب :

– احساسي که تو این مدت داشتم

– نکات مثبت یه شرکت و مصاحبه خوب

– نکات منفی یه شرکت و مصاحبه بد یا ضعیف

خب من از اونجایی شروع میکنم که بعد از ۷ ماه کار کردن روی مهارت های نرم و سختم تصميم گرفتم توی یه تیم یا شرکت مشغول بشم که علاوه بر تقویت مهارت های فنیم و ثبات یادگیریم و کسب درآمد بتونم با چند نفری توی استک مورد نظر آشنا بشم . (توسعه بک اند پایتون)

توجه : از اونجایی که من از لاراول و پی اچ پی بعد از کمک یکسری از دوستان مخصوصا Jalallinux عزيزم و همچنین دوستان تیم کامرسوت …. کوچ کردم به پایتون و فریموورک های اون به دلایلی که توی پست های بعد حتما بهش اشاره میکنم هیییچ کس رو نمیشناختم که کمکی ازش بگیرم و خودم دست به کار شدم که از طناب خودم بالا برم .

در ادامه ماجرا من قبل اینکه هرر رزومه ای رو بفرستم نیومدم خلاصه تمام جزوه های که نوشتم تو این مدت رو بخونم 😐

و این خییلی بد بود چون همه چیو میدونستم و هیچیو نمیدونستم 😂

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

نکته اول : سعی کنید برای هر پوزیشن شغلی نسبت به خودش رزومه بفرستین !؟ نیایین واسه یادگیری ماشین رزومه بک اند دولوپر پایتون یا برای مهندس نرم افزار رزومه کسی که یادگیری ماشین رو انجام میده بفرستین !!!

نکته دوم : دوتا رزومه داشته باشید . یکی برای خود و اون یکی برای دیگری 😂😂 ببخشید شوخی بیش نبود .

یک رزومه فارسی و یک رزومه انگلیسی . برای این موضوع دلیل هم دارم . نکته اینجاست که به هرجا نسبت به آگهی که گذاشته توجه کنید . یه جمله معروف هست که میگه Simple is better than complex 😇 در نتیجه درسته کلاس کاری یه رزومه انگلیسی بالاتره 😎 اماااا شما اول باید به کارفرما توجه کنید چون اون وقت نداره ذره ذره رزومه شمارو نگاه کنه و به سختی خیلی از چیزایی که نوشتید رو متوجه بشه تااااااااازه اگر انگلیسیش خوب باشه و آگهی فارسی باشه خب یعنی رزومه فارسی بیشتر مد نظرشه 🤨 پس بهتره انگلیسیه رو نگه داری واسه آگهی انگلیسی 😏

خلاصه که من چون حدود یک نیم دو سال پیش یه تجربه ای از ارسال انبوه رزومه داشتم . تصمیم گرفتم آگهی ها رو با جزئيات و در نظر گرفتن ارزشی که برای حقوق و توانایی های یک برنامه نویس نسبتا midlevel قائلن بررسی کنم . در نتیجه برای حدود ۱۳ تا ۱۸ تا تیم یا شرکت ارسال کردم .

نکته سوم : سعی کنید صبر داشته باشید شاید اولایل یکم طول بکشه جواب بدن ولی به خیلی بهتر که به سه تا شرکت یا تیم خوب رزومه بفرستین تا به چندینتا تیم یا شرکت بدون چارچوب !!!

و شروع داستان من دقيقا همون جایی بود که اولین شرکتی که رزومم رو ارسال کردم منو تایید کردن🧐 و بخاطر اون چندین تا از شرکت های خوب که قبول شدمُ رد کردم 😑

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

نکته اخلاقی : خاکی بودن خوبه . دوست بودن خوبه . صمیمی شدن خوبه . مث کف دست رو راست بودن خوبه ولی هر چیزی اداب خودشو داره. هیچوقت رو کسی با توجه به نوع صحبت کردنش تعریف هایی که از خودش یا شما حساب نکنین. این چیز خیلی مهمی بود که من بهش پی بردم چون خیلی وقت بود دچار چنین دامی نشده بودم !
و بلاخره گفتن کار ما از ۱ مهر شروع میشه ! سوال من اینجاست اگر کار شما از یکم مهرماه شروع میشه چرا یکی رو از یه شهر دیگه میکشیونین یه جا دیگه !

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

نکته چهارم :‌ به موقع باش و برای زمان ، علم ، مهارت طرف مقابلت ارزش قائل شو .

همون شب یه وویس با صدای بلند (داد و بیداد) به من دادن با مضمون اینکه چندین سال خاک برنامه نویسی این مملکت رو خوردن و همچنین گفتن من با ناز کردن هیچوقت به هیچجا نمیرسم و قسم خوردن که چندین نفر بهتر از من پشت دست دارن و این وویس در جواب پیام من بود که گفتم انشالله دوستیمون ادامه پیدا کنه .

نکته پنجم – اخلاقی :‌ یه روز توی یکی از لایو های کوشیار عزیمیان شنیدم یه جمله خیلی مهم گفت :

توی حوزه برنامه نویسی اگ روزی حس کردی از یکی بهتری و صدات رو توی بالا بردی اونجاست که دیگه هیچکس به حرفت گوش نمیده و ممکنه یه عده حتی با خنده ازت بگذرن و بگن چقد ادمه کوچیکیه . تو دنیای تکنولوژی امروز دیگه کسی حوصله و صبر سر صدا دیگری رو نداره و همیشه حتی اگ شما لیدر هستین باید سعی کنین صداتون پایین باشه . به محض بالا بردن صدا دیگه کسی بهتون گوش نمیده .

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

خلاصه اون روز ناراحت نشدم که چرا یه نفر اینجوری باهام برخورد کرده .

ناراحت بودم چون که من هیچ نتوورکی با این همه آدم خوب و با شخصیت و با علم جایگاه خوب نزدم همون کسایی که باهاشون مصاحبه کردم و یکسری ها واقعا ارزش کار کردن و وقت گذروندن باهاشون رو داشتن .

نکته ششم : توصیه میکنم بیشترین سعی رو کنین تو همون مصاحبه با طرف مقابلتون کانکت بشید .چون بعدا پشیمون میشید😂 یکی از ساده ترین دلایلم برای این کار اینه که شما بتونید بعد از مصاحبه هم جهت فهمیدن وضعیت قبولیتون اگر بهتون اعلام نشد سوال کنین😇🌹

این سری برای ۳۰ شرکت رزومه فرستادم و توی لیندین هم گذاشتن. خب اینجا یه اتفاقی افتاد …

یه سری جاها اواخر جذبشون بود که تعدادشون کم بود و خیلی جاها اوایل جذت در نتیجه شما میمونید تو آب نمک تا خبر بدن .
تقریبا بین سومین تا ششمین روز بود که دیگه ناامید شدم و حتی اون شرکتی که خیلی دوست داشتم باهاش کار کنم بهم زنگ نزد با وجودی که تاکید کرده بودم This position is mine 😂

نکته اساسی : خدمت کسایی که از اینکه پایتون رو به جای زبان برنامه نویسی دیگه انتخاب کردن شک دارن یا پشیمون هستن یا فکر میکنن کار براشون کمه نسبت به زبان هایی مثل php و laravel یا حتی js باید عرض کنم، من توی این چندروز وقتی کار پیدا نمیکردم و مصاحبه ای نداشتم خیلی ناامید بودم و همش فکر میکردم چرا لاراول رو ول کردم و اگر الان لاراول رو ادامه داده بودم الان با یه حقوق خوب توی یه شرکت خوب استخدام میشدم ؛ هر زبانی مزایایی خودشو داره من با توجه به برنامه ای که برای آینده کاری و تخصصم داشتم به پایتون سوئیچ کردم .

همیشه حتی زمانی که دارین ناامید میشین، اون دلیل اولیتون رو که چرا انتخاب کردین هیچوقت فراموش نکنین و مدام مرورش کنید و از این شاخه به اون شاخه نپرین.

خب این قسمتو تشکر میکنم از همه کسایی که این مدت کنارم بودن که مهم ترینشون () که باعث شدن من از مسیرم خارج نشم .

سعی کردم تو اون مدت دیگه تمرکزمو بزارم روی بیشتر خوندن و شروع کردن تمام جزووه هایی که نوشته بودم رو مرور کردم دقیقا همون جایی بود که نهمین روز بود شروع شد ۴ تا مصاحبه تقریبا میانگین روزی ۳ تا مصاحبه میدادم از اون روز

بعضیا تلفنی، گاهی با اسکایپ و بعضی ها گوگل میت و خودم بیشتر تمایلم به گوگل میت بود.

نکته : توجه داشته باشین که درسته اون ها میخوان شمارو انتخاب کنن ولی شما باید اشتیاق لازم رو برای کار توی اون مجموعه داشته باشید. یعنی چی یعنی اینکه بعضیا همون اول ممکنه از نظر شما یه سری مصاحبه ها رد بشه و نخواید اونجا کار کنین .

برای شخص من دقیقا همینطوری بود .

یادمه یه مصاحبه داشتم و مصاحبه کننده ۱۵-۱۰ دقیقه دیر اومدن و وقتی که از پشتیبان توضیح خواستم با این جمله رو برو شدم : اگر وقت نداری مشکلی نیست مصاحبه نکن میتونی بری !!! چه موجودات عجیبی پیدا میشه واقعا . . .

این هم خدمتتون عرض کنم یه عذر خواهی ساده هم نکردن 😄 هیچکدوم و چقد عجیبه !

شرکت های خوب به زمان بندی های شما اهمیت میدن و به موقع بودنتون گاهی باعث استخدامتون میشه اون مورد یعنی اینکه اونها میتونن روی شما حساب کنن

مصاحبه هایی که از نظرم پایانش بود :

+ مصاحبه هایی که ارزشی برای زمان شما قائل نباشن .

+ مصاحبه هایی که هیچ جو راحتی توشن نبود .

+ اونهایی که هیچ بار علمی نداشتن .

+ یا حتی اونهایی که سریع میرفتن سراغ سوال فنی پرسیدن و هیچ زمانی برای شناخت همدیگه نمیگذاشتن . خب آقای محترم شاید ما از لحاظ اخلاقی شخصیتی اصلا یه ماه ک خوبه یه ساعتم نتونیم همدیگرو تحمل کنیم! چ وضعشه واقعا

+ اگر دو نفر بخوان کنار هم پیشرفت کنن و با هم کار کنن باید ارزش افزوده برای یکدیگر داشته باشن . اینکه وقتی یه سوالی رو میپرسن و جوابشو نمیدونی و وقتی ازشون میپرسی میگن برو سرچ کن؛ همچین آدمایی توی کار تیمی شما نمیتونین چیز زیادی ازشون یادبگیرین.

+ یه سری جاها اینجوری شروع میکنن ما n میلیارد تومن سرمایه داریم یا ما فارغ تحصیل دانشگاه لواسان آبادیم 🤣 خب لعنتی تو اخلاق نداری یه لبخند نمیزنی😅 حالا فارغ تحصیل MIT باش یا نمیدونم هاروارد، کی دوست داره با آدم مغروری مثل تو کار کنه جذاب لعنتی 😎

+ فاز رفاقت رو ترجیح میدم کسی برنداره اما شما میتونین تو این مورد تغیر حاصل کنین (منظورم از فاز رفاقت همون نحوه صحبت اینکه ما تیم نیستیم و رفیقیم خب درست اما ساختار چی میشه نظم چی میشه من به این دومورد خیلی اهمیت میدم نظم و ساختار)

+ یه سری جاها هم اگ میگی نمیتونی باهاشون کار کنی حتی بهت نمیگن موفق باشی 🙂

حالا در عین حال یه سری جاها برات وقت میزارن

بهت یاد میدن

یه سری با شوخی و خنده خیلی سوالا هارو میپرسن و خب حتی حس نمیکنی زمان کی گذشته

ازت میپرسن چرا اصلا اومدی تو این مسیر

چی شد که به این نقطه رسیدی ، خلاصه که میخوان درباره زندگیت بدون و این خیلی خوبه

مصاحبه ها شکل هایی مختلفی دارن اما عموما چند بخش دارن شامل مصاحبه اولیه (بررسی صحبت رزومه با توانایی) ، مصاحبه فنی (بررسی توانایی های فنی – مهارت های سخت ) ، مصاحبه HR یه همون منابع انسانی (بررسی توانایی های نرم و مباحث شخصیتی و اخلاقی)

حالا چطور پیشرفت مصاحبه ها =>

دسته اول مصاحبه هایی که هم موارد اخلاقی و شخصیتی هم موارد فنی رو همون اول میپرسن و بهتون خبر میدن => این مورد از مصاحبه ها چون طولانی تر هست به بررسی بیشتری نیاز داره در نتیجه ممکنه دیر خبر بدن بهتون.

دسته دوم مصاحبه هایی که نظم ترتیبشون اینجوریه که ۱. مصاحبه اولیه ۲. مصاحبه فنی ۳.مصاحبه HR => که هرکدوم توی روز های مختلف انجام میشه دقیقا مثل اینکه شما هرمرحله رو رد میکنین و تشریف میبرید به مرحله بعد

حالا توصیه های من توی هر مورد اینه :

سعی کنید توی مورد اول که زمان خیلی کمی میبره سری خودتون معرفی کنین و شور اشتیاق خودتون رو نشون بدین🤩 => مصاحبه اولیه

توی مصاحبه فنی سعی کنید یه کم هم از خودتون مسیرتون بگین همون اول ولی ممکنه اجازه اینو بهتون ندن !! من که دوست داشتم خودمو معرفی کنم 😊 و همچنین سعی کنین از قبل به یه سری مسائل ریز مشرف باشین یعنی چی ! شما ممکنه خیلی چیزا رو بلد باشین و خونده باشین ولی چون ازش گذشته حتی ممکنه اسمشو یادتون بره و این جلوه خوبی نداره و باید سعی کنین یا کامل یا نسبتا خوب بدونین یا بگین نمیدونم سعی نکنین چیزی رو سر هم کنین. . .

مورد اخر مصاحبه HR (human resource) منابع انسانی :

این مصاحبه ممکنه خیلی کلی یا خیلی جزئی و جذاب .

کلی که چنتا سوال ساده بپرسن و ساده هم جواب بدی یا حتی یهو بگن از شخصیتت بگو‌ !! درسته شما باید از شخصیتت خودت خبر داشته باشی ولی به نظرم بهتره HR داستانتو بشنوه تا یه چیز ساخته شده که ممکنه بعضیاش فرضیاتت از خودت باشه . . .

و جزئی جذاب :

وارد خیلی مسائل میشین اخلاقی ، شخصیتی ، مالی ، احساسی و گاها ممکنه اشکتون در بیاد😂

سعی کنین اونقدی شناخت رو خودتون داشته باشین که نخواین سوال های اینچنینی رو رد کنین چون برای شرکت ها خیلی اهمیت داره

خب یه جایی گفتم که چرا کوچ کردم به پایتون ؟ از همین جا به همه دوستان عزیزی که قصد یادگیری پایتون و فریموورک های اون رو دارن یه نکته ای رو محکم عرض کنم : اگر جایی شنیدی یا گفتن یا حس کردی پایتون و جنگو یا بقیه فریموورک های اون و ابزار هاش چیز آسونین سخت در اشتباهی چون فوق العاده جزئیات بیشتر و موارد بیشتری برای دونستن دارن و حتی گاها از لحاظ سینتکسی اگر نویسنده نتونه کدی رو خوانا بنویسیه اونقدر پیچیده هست که قاطی میکنین .

حالا چرا کوچ کردم به چند دلیل :

– میخواستم یه تکنولوژی رو از پایه یادبگیرم (زمانی که رفتم سمت لاراول من فقط php رو میدونستم و بلدش نبودم اما بعدها بر حسب اتفاق یه فریموورک mvc نوشتم با php که باعث شد که با ۸۰ درصد موارد مهم کاملا اشنا بشم )

– یکی از مهمترین مواردم این بود که میخواستم با کانسپت مهندس نرم افزار کاملا اشنا بشم حالا این شامل مواردی چون : طراحی الگوریتم ، ساختمان داده ها ، بخشی از نظریه ماشین ، هوش مصنوعی و …. که میخواستم بهتر اشنا بشم و خوب یادشون بگیرم

– میخواستم بتونم بخش زیادی از نیاز های اتوماتیک سازی شخصی خودم (کار های روزانم یا …) رو بر طرف کنم

– مورد دیگ این بود که من به شخصه به این نتیجه رسیدم که توی پروژه هایی که نیاز به داده کاوی یا یادگیری ماشین هست ، نیاز هست که یک نفر بک-اند کار این روند رو انجام بده و کاملا به منطق اون و نحوه پیاده سازیش تا حدودی آشنا باشه به چند دلیل :

+ یکیش اینه که کد شما نیاز داره maintenance بالایی داشته باشه (قابلیت تعمیر و نگه داری)
+ دوم اینکه باید سیستم رو جوری طراحی کنید که کمترین دلیل برای تغیر و بیشترین راه برای توسعه داشته باشه

+ سوم اینکه مورد دوم باعث میشه که سیستم کاملا به هم پیوسته و مچ شده ای طراحی بشه

+‌ و دلیل تمام این موارد این هست که عموم دیتاساینس ها کد خوبی نمینویسن و میخوان نتیجه رو ازش بگیرن اما توی بک-اند مامیخوایم که کد نوشته شده قابلیت های بالارو داشته باشه نه فقط یکبار استفاده بشه .

نکته هفتم : فقط یک لحظه کافیه که مصاحبه کننده متوجه شه شما عاشق این موقیعتی که قراره فعالیت کنین هستین و همچنین عاشق اون تکنولوژی .

از من به شما نصیحت : سعی کنید توی یه تکنولوژي و فقط توی همووون یکی عمیق شین ولی از بقیه فقط با خبر باشین که کجا استفاده میشن .

با احترام 🌹،

اردتمند شما Mr.Rezoo 💎

نوشته تجربه ۱۵ روزه من برای استخدام اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

نکات برنامه‌نویسی:‌ بهترین زبان برنامه نویسی کدومه؟!

در این پست دنباله‌دار، قراره ۱۲ قانون یادگیری بهتر برنامه‌نویسی رو با هم مرور کنیم. با ما همراه باشید تا مورد سوم یا بهترین زبان برنامه نویسی رو بهتر بشناسیم.


جواب کوتاه: هیچ زبانی وجود نداره که همه جا بهترین گزینه باشه!

جواب بلند:

وقتی در مورد شروع برنامه نویسی حرف می‌زنیم، معمولا این بحث پیش میاد که کدوم زبان رو باید ابتدا یاد گرفت؟ بعضی‌ها میگن پایتون بهترین گزینه برای شروع برنامه نویسی است، برخی هم از C ،C++ یا جاوااسکریپت نام می‌برند.

خلاصه که هر کسی از ظن خود شد برنامه نویس، اما بیایید یه کم از بالا به قضیه نگاه کنیم.

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

اگه از یک نجار بپرسید ابزار مورد علاقه‌اش چیه شاید «ارّه» رو نام ببره و اگر همین سوال رو از یک قصاب بپرسید، احتمالا «ساطور» رو انتخاب می‌کنه. به همین منوال، اگر سوال مشابهی از یک وب دولوپر بپرسید بگه یادگیری جاوااسکریپت برای تازه کارها بسیار مهمه ولی یک محقق آمار به احتمال زیاد زبان برنامه نویسی R رو پیشنهاد می‌ده. در انتهای روز مهم ترین چیز اینه که شما قرار است با این ابزارها چه کار بکنید؟

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

بنابراین اول لازمه که یک زبان برنامه نویسی انتخاب کنید، و بعد مفاهیم رو خوب بفهمید. وقتی به این مرحله رسیدید، بقیه چیزها مربوط میشه به سینتکس زبان مورد استفاده. مثلا «در» و «Door» یک مفهوم رو می‌رسونن، ولی باید ببینید قراره در چه محیطی از این کلمه استفاده کنید، زبان فارسی یا انگلیسی. چرا که با این در اگر در بند در مانید، در مانید! ¯/_(ツ)_¯

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

منبع


در آخر اینکه اگه این مطلب رو دوست داشتید، ❤️ یادتون نره.

نوشته نکات برنامه‌نویسی:‌ بهترین زبان برنامه نویسی کدومه؟! اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی