هفت سوالی که توسعه دهندگان جدید هنگام یادگیری کدنویسی می‌پرسند.

اگر در زمینه کدنویسی نسبتاً تازه کار هستید، مطمئناً سؤالاتی دارید.چگونه باید شروع کنید، ابتدا چه چیزی را باید یاد بگیرید، واقعاً "توسعه front-end" به چه معناست؟در این مقاله سعی شده است به هفت سوال اصلی که ممکن است برای هر برنامه‌نویس جدید پیش بیاید به اشتراک گذاشته و همچنین تلاش شده تا حد امکان جواب کاملی به پرسش ها داده شود.ابتدا چه زبان برنامه نویسی را یاد بگیرم؟به نظر من واقعاً مهم نیست! مطمئناً زبان هایی وجود دارند که انتخاب آنها برای مبتدیان آسان تر است، مانند Python، Ruby یا JavaScript. اما بیشتر زبان های برنامه نویسی دارای چیزهای مشترک زیادی هستند و مفاهیم اصلی معمولاً تقریباً مشابه هستند.در بیشتر موارد، Syntax زبان ها بسیار بیشتر از مفاهیم زیربنایی برنامه نویسی متفاوت است.سینتکس (Syntax) یا نحو به معنای شیوه قرار گرفتن صحیح کلمات در کنار یکدیگر برای ایجاد جملاتی استاندارد در یک زبان برنامه نویسی است. به عبارت ساده تر، دستور زبانی که به وسیله آن جملاتی را می سازند، سینتکس نام دارد.هنگامی که اصول هر زبان برنامه نویسی را بدانید، انتخاب زبان دیگر بسیار آسان تر می شود. همچنین این احتمال وجود دارد که زبانی که ابتدا یاد می‌گیرید، زبان اصلی نباشد و در نهایت در شغل یا کار خود از آن استفاده کنید.به عنوان مثال، من با پایتون شروع کردم، با جاوا اسکریپت و PHP سر و کار داشتم، اما اکنون از جاوا برای کارم استفاده می‌کنم.البته، احتمالاً نمی‌خواهید با یادگیری زبان مبهم و دشواری که معمولاً استفاده نمی شود، شروع کنید.مهم‌ترین بخش این نیست که ابتدا چه زبانی را یاد می‌گیرید، بلکه این است که در واقع شروع می‌کنید و به مرور زمان مهارت‌های خود را بهبود می‌بخشید. به طور خلاصه، به جای تسلط بر نحو (Syntax) یک زبان خاص، بر مفاهیم ضروری کدنویسی تمرکز کنید.چگونه زبان های برنامه نویسی را دسته بندی کنیم؟اگر چه بیشتر زبان‌ های برنامه‌نویسی اشتراک‌ های زیادی دارند، اما راه های زیادی برای دسته بندی زبان‌ های مختلف وجود دارد.این دسته بندی ها زبان هایی با یک ویژگی یا صفت خاص برای گروه بندی آنها استفاده می شوند. اگر چه ممکن است دو یا چند زبان با یک ویژگی مشترک نسبت به سایر زبان های گروه خود بسیار متفاوت باشند.در اینجا 5 مورد از مفیدترین دسته بندی های زبان برنامه نویسی برای برنامه نویسان جدید آورده شده است:زبان های برنامه نویسی کامپایل شده (Compiled programming languages)زبان های برنامه نویسی مفسری (Interpreted programming languages)زبان های برنامه نویسی با تایپ ایستا (Statically-typed programming languages)زبان های برنامه نویسی با تایپ پویا (Dynamically-typed programming languages)زبان های برنامه نویسی شی گرا (Object-oriented programming languages)در زیر، شرح کوتاهی از هر یک از این دسته ها به همراه فهرست کوتاهی از زبان ها در هر یک ارائه شده است.زبان های برنامه نویسی کامپایل شده (Compiled programming languages)یک زبان کامپایل شده زبانی است که از یک کامپایلر برای تبدیل source code به شکلی که کامپیوتر آن را بفهمد (machine code) استفاده می کند.کد منبع (source code): کدی که خودتان می‌نویسید.کد ماشین (machine code): کد قابل فهم برای ماشینمعمولاً خروجی کامپایلر در یک یا چند فایل به نام executables (فایل های اجرایی) ذخیره می شود. فایل های اجرایی را می توان برای فروش و توزیع در قالب های استاندارد بسته بندی کرد که دانلود، نصب و اجرای برنامه را برای کاربران آسان می کند.یکی از ویژگی های مهم فرآیند کامپایل این است که source code قبل از اجرای برنامه توسط کاربر نهایی، کامپایل می شود. به عبارت دیگر، کامپایل کد معمولاً جدا از اجرای برنامه () انجام می شود.کاربر نهایی (end user): شخصی که قصد استفاده از برنامه را داردزبان های کامپایل شده محبوب:CC++JavaRustGoزبان های برنامه نویسی مفسری (Interpreted programming languages)مفسر یک برنامه رایانه ای است که کدهای نوشته شده به زبان‌های سطح بالا را به زبان اسمبلی یا زبان سطح پایین قابل فهم برای ماشین تبدیل می‌کند. مفسر کدهای برنامه را خط به خط می‌خواند و اجرا می‌کند. هنگامی‌ که خط قبلی در حال اجراست مفسر به تفسیر خط بعدی می‌پردازد تا به نوبت خطوط بعدی را اجرا کند.تفاوت اصلی بین کامپایل و تفسیر این است که فرآیند تفسیر اختلاف زیادی بین تبدیل و اجرای کد ندارد، هر دوی این مراحل در زمان اجرای برنامه اتفاق می‌افتند. در حالی که کامپایل، قبل (گاهی خیلی زودتر) از اجرای برنامه انجام می شود.زبان های مفسری رایج:PythonJavaScriptRubyزبان های برنامه نویسی با تایپ ایستا (Statically-typed programming languages)تایپ استاتیک به این معنی است که نوع داده متغیرها در یک زبان برنامه نویسی در زمان کامپایل شدن برنامه شناخته شده و ایجاد می شود. علاوه بر این، نوع داده یک متغیر مجاز به تغییر در طول کامپایل یا اجرای برنامه نیست.در برنامه‌نویسی، یک متغیر (به انگلیسی: Variable) یک مکان در حافظه است که دارای یک نام نمادین با عنوان شناسه (به انگلیسی: Identifier) می‌باشد و می‌تواند حاوی اطلاعات یا یک مقدار معلوم یا مجهول که به آن مقدار یا ارزش (به انگلیسی: Value) گفته می‌شود باشد. به زبان دیگر، متغیر در برنامه‌نویسی به فضایی که برای ذخیره داده‌ها کنار گذاشته شده‌است می‌گویند. به عنوان مثال، هر بار که متغیری را در یک زبان تایپ ایستا ایجاد می کنید، باید به صراحت نوع داده آن متغیر را مشخص کنید. این نوع داده می تواند یک عدد صحیح، رشته، بولی (یک مقدار منطقی) و غیره باشد. به این عمل "تعریف متغیر" می گویند. هنگامی که نوع داده یک متغیر را تعریف می کنید، تنها می تواند آن نوع داده را در طول اجرای برنامه در خود نگه دارد.زبان‌های رایج با تایپ استاتیک:CC++Javaزبان های برنامه نویسی با تایپ پویا (Dynamically-typed programming languages)زبان برنامه نویسی با تایپ پویا به این معنی است که نوع داده متغیر در طول اجرای برنامه ایجاد می‌شود که با عنوان runtime (زمان اجرا ) نیز شناخته می شود.در این نوع برنامه نویسی نوع داده متغیرها به صراحت در source code ذکر نشده اند و در زمان اجرای برنامه به راحتی می توان هر نوع داده ای را به متغیرها اختصاص داد.به عنوان مثال اگر در ابتدا متغیر a یک رشته متنی را در خود ذخیره کرده باشد این امکان وجود دارد که در ادامه برنامه یک نوع عددی و یا نوع دیگری را به آن اختصاص داد.زبان‌های محبوب با تایپ پویا:PythonJavaScriptRubyزبان های برنامه نویسی شی گرا (Object-oriented programming languages)برنامه نویسی شی گرا (OOP) یک الگوی کد نویسی است که به برنامه نویسان اجازه می دهد تا "اشیاء" را ایجاد کرده و با آنها کار کنند. یک شی (Object)، نمایش یا مدلی از چیزی است که برنامه نویس باید آن را از طریق کد توصیف کند.تقریباً هر چیزی را می توان به عنوان یک "Object" در کد مدل کرد. اشیاء اغلب نشان دهنده چیزهای واقعی هستند، مانند محصولات برای فروش در یک فروشگاه یا مشتریانی که آن محصولات را می خرند.اما اشیا همچنین می‌توانند چیزهای دیجیتالی مانند فرم‌های وب، و حتی موارد انتزاعی‌تر مانند نقاط انتهایی URL، سوکت‌های شبکه و غیره را نشان دهند.برنامه نویسی شی گرا معمولاً در یک زبان با استفاده از کلاس ها پیاده سازی می شود. شما می توانید یک کلاس را به عنوان یک الگو (یا مدل) برای نوع شی که ایجاد می شود در نظر بگیرید.یک کلاس شامل مجموعه ای از ویژگی ها (خواص یا خصوصیات) است که هر شی از کلاس را تعریف می کند. کلاس ها همچنین شامل مجموعه ای از متدها (توابع) هستند که امکان انجام عملیات بر روی اشیاء خاص کلاس را فراهم می کند.به عنوان مثال، یک کلاس "محصول" ممکن است ویژگی های زیر را داشته باشد:شناسه محصول (شناسه منحصر به فرد برای هر محصول)نام محصول (نام توصیفی برای هر محصول)نوع محصولقیمت محصولتخفیف محصولدر ادامه مثال ما، می‌توانید از کلاس «محصول» ما برای ایجاد چندین شی از نوع «محصول» استفاده کنید. هر محصول مجموعه ای از مقادیر مشخصه خود را دارد، مانند شناسه، نام، نوع، قیمت و تخفیف.تفاوت بین توسعه front-end، back-end و full-stack چیست؟به‌عنوان یک توسعه‌دهنده جدید، احتمالاً فرصت‌های شغلی در حوزه فناوری اطلاعات را مرور کرده‌اید و اصطلاحات «front-end»، «back-end» و «full-stack» را مکرر شنیده اید.مفهوم front-end به بخش هایی از برنامه اشاره دارد که کاربران (که به عنوان "کلاینت ها" نیز شناخته می‌شوند) به طور مستقیم با آن تعامل دارند. برای یک برنامه وب، front-end مجموعه ای از صفحات وب است که در مرورگر کاربر نمایش داده می شود. برای یک برنامه تلفن همراه، front-end مجموعه ای از صفحه نمایش است که کاربر در دستگاه تلفن همراه خود با آنها تعامل دارد.وظایف توسعه مربوط به front-end شامل طراحی تجربه کاربر (UX)، ایجاد رابط کاربری(UI)، ادغام و استفاده از کتابخانه های سمت مشتری است.به عنوان یک توسعه دهنده front-end، شما این وظایف را عمدتاً با استفاده از HTML برای تعریف ساختار صفحات وب، CSS برای اضافه کردن سبک (Style) و جاوا اسکریپت برای افزودن تعامل انجام خواهید داد.قسمت back-end به بخش هایی از برنامه اشاره دارد که در پشت صحنه اجرا می شوند و مستقیماً به کاربر (مشتری) ارائه نمی شوند.بک اند، مغز یک سایت است که وظیفه کنترل منطق را بر عهده دارد. کدهایی که در بخش بک اند نوشته می‌شوند، به طور مستقیم با سیستم در ارتباط نیستند، بلکه از طریق سرور به مرورگر کاربرها ارسال می‌شوند؛ به همین دلیل است که به بک اند، برنامه نویسی سمت سرور یا Server Side نیز گفته می‌شود.کد بک‌اند ورودی کاربر را تأیید می‌کند، منطق تجاری را اعمال می‌کند، با ذخیره‌سازی داده‌ها مانند پایگاه‌داده تعامل می‌کند، و پاسخی را ایجاد می‌کند که به کلاینت front-end ارسال می‌شود.برنامه نویسی full-stack شامل هر دو قسمت back-end و front-end می شود.اصطلاح "full-stack" از اصطلاح "Stack" می آید که شکل کوتاه شده "software stack" است. پشته نرم افزار مجموعه ای از ابزارها، چارچوب ها، زبان های برنامه نویسی و سیستم عامل هایی است که برای پشتیبانی از یک برنامه کاربردی استفاده می شود.چند پشته نرم افزار محبوب چیست؟اکنون که می دانیم پشته نرم افزار چیست، به طور خلاصه به برخی از گزینه های محبوب برای انتخاب شما می پردازیم.پشته نرم افزاری LAMP Stack (Linux, Apache, MySQL, PHP)پشته LAMP از سیستم عامل لینوکس به عنوان پایه خود استفاده می کند. علاوه بر این، شما از یک وب سرور آپاچی برای رسیدگی به درخواست های وب و هدایت آنها به یک منبع کد PHP استفاده می کنید. داده ها در پایگاه داده MySQL ذخیره می شوند که یک پلت فرم پایگاه داده رابطه ای رایگان و منبع باز (FOSS) است.این پشته برای وب‌سایت‌های ارائه‌دهنده محتوای نسبتاً استاندارد مانند وبلاگ‌ها عالی است.ممکن است متوجه شوید که من به صراحت به هیچ ابزار front-end به عنوان بخشی از این پشته اشاره نکردم بنابراین این بدان معنی است که LAMP یک پشته back-end است.پشته نرم افزاری MEAN Stack (MongoDB, Express.js, Angular.js, Node.js)پشته MEAN پشته مدرن تری است که از پلتفرم پایگاه داده بدون ساختار MongoDB برای ذخیره داده ها استفاده می کند. شما از Express.js به عنوان چارچوب وب back-end و از Angular.js برای قسمت front-end استفاده می‌کنید. در نهایت، شما از Node.js برای اجرای جاوا اسکریپت در قسمت back-end استفاده می کنید.یکی از مزایای اصلی پشته MEAN این است که همه مؤلفه ها به گونه ای طراحی شده اند که به صورت بومی با استفاده از زبان برنامه نویسی جاوا اسکریپت، از طریق JSON کار کنند.توجه داشته باشید که اجزای این پشته هم به سمت قسمت front-end و هم به سمت back-end تنظیم می‌شوند، بنابراین MEAN را می توان پشته full stack در نظر گرفت.پشته نرم افزاری MERN Stack (MongoDB, Express.js, React.js, Node.js)همانطور که احتمالاً می بینید، پشته MERN بسیار شبیه به پشته MEAN است به جز اینکه از کتابخانه React.js به عنوان قسمت جلویی به جای Angular.js استفاده می کند.این پشته برای توسعه دهندگانی که React را به دلیل سبک منعطف و بصری ایجاد رابط های کاربری دوست دارند، مناسب است.فریمورک های قابل توجهمن می‌خواستم یک لحظه کوتاه به دو فریم‌ورک محبوب (نه پشته) اشاره کنم که می‌توانید آنها را با اجزای خاصی از پشته‌های ذکر شده در بالا ترکیب یا تعویض کنید.فریمورک Spring Boot: یک فریم ورک جاوا است (از لحاظ فنی یک مورد خاص از Framework گسترده تر Spring) که برای توسعه کد جاوای back-end برای برنامه های کاربردی وب و برنامه های تلفن همراه عالی است. اگر در زمینه کدنویسی جاوا تازه کار هستید، به شدت توصیه می کنم آن را بررسی کنید.فریمورک Django: جنگو یک چارچوب پایتون است که به طور خاص برای استفاده با زبان برنامه نویسی پایتون ساخته شده است. اگر ساختن برنامه های وب در پایتون را ترجیح می دهید، مطمئناً ارزش بررسی آن را دارد.چگونه برنامه نویسان بدون حضور در یک اتاق بر روی یک کد با یکدیگر همکاری می کنند؟کلید موفقیت در کار تیمی یادگیری استفاده از سیستم کنترل نسخه (VCS: Version Control System) است. VCS ابزاری است که تغییرات کد را که چندین توسعه‌دهنده در طول زمان ایجاد می‌کنند ردیابی می‌کند و توسعه‌دهندگان را قادر می‌سازد تا به طور مؤثر بر روی فایل‌های یکسانی کار کنند.سیستم‌های کنترل نسخه مخزنی (Repository) ایجاد می‌کنند که داده‌های لازم برای بازیابی هر نسخه از کد را همانطور که در مقاطع زمانی خاص وجود داشته‌اند، ذخیره می‌کند. این کنترل نسخه نامیده می شود.برخی از خصوصیات سیستم‌های کنترل نسخه:تغییرات ایجاد شده در کد را ردیابی می‌کندبه برنامه نویسان اجازه می‌دهد تا به راحتی تغییرات خود را با دیگران به اشتراک بگذارند و به تغییرات ایجاد شده توسط دیگران دسترسی داشته باشندراه‌های ساده‌ای را برای ادغام تغییرات کد ایجاد شده توسط چندین برنامه‌نویس یا تیم ارائه می‌دهدیک نسخه پشتیبان کامل از کد پروژه در طول زمان و روشی برای بازیابی کارآمد هر نسخه قبلی کد ارائه می‌کند. به توسعه دهندگان اجازه می‌دهد تا به راحتی تضادهای کد ایجاد شده در همان خطوط فایل‌های مشابه را مدیریت کنندابزارهای مختلف دیگری را برای بهبود همکاری و کارایی تیم ارائه می‌دهدسیستم های کنترل نسخه زیادی وجود دارد، اما تقریباً به طور قطع نام یکی را شنیده اید: GitHub.در واقع، GitHub خود یک سیستم کنترل نسخه نیست. GitHub شرکتی است که میزبانی آنلاین پروژه ها را با استفاده از کنترل نسخه ارائه می دهد. GitHub نام خود را از سیستم کنترل نسخه خاصی که استفاده می کند گرفته شده است: Git.اولین نسخه Git در سال 2005 ایجاد شد و تا حد زیادی به شناخته شده ترین و محبوب ترین سیستم کنترل نسخه روی کره زمین تبدیل شده است. Git امروزه توسط اکثریت قریب به اتفاق تیم های توسعه استفاده می‌شود و اگر برنامه نویسی حرفه ای دارید، ابزاری ضروری برای یادگیری است.آیا مهم است که از چه سیستم عاملی استفاده کنم؟وقتی نوبت به یادگیری کدنویسی برای اولین بار می‌رسد، من به این سوال مانند اولین سوال در این لیست پاسخ می‌دهم. من فکر می کنم آنچه که بسیار مهمتر از سیستم عاملی است که دارید، این است که هر چه زودتر با آنچه دارید شروع به یادگیری کنید.با در نظر گرفتن این واقعیت که دلایل ذهنی زیادی وجود دارد که مردم سیستم عامل خود را ترجیح می دهند، به نظر من سیستم عاملی که دسترسی به ترمینال خط فرمان با کیفیت را فراهم می کند می تواند برای جمع کردن این بحث بسیار مفید باشد.به همین دلیل، ترجیح من استفاده از سیستم‌عامل‌های شبه یونیکس مانند لینوکس یا MacOS در صورت امکان برای کارهای توسعه است. من بیشتر در MacOS توسعه می‌دهم.از چه ویرایشگر متن یا IDE استفاده کنم؟ویرایشگرهای متن و IDE (محیط های توسعه یکپارچه) در طول سال ها به طور گسترده تکامل یافته اند و توسعه دهندگان به دلایل زیادی موارد دلخواه را انتخاب می کنند.یک دلیل می تواند این باشد که یک ویرایشگر یا IDE خاص به طور خاص برای یک زبان برنامه نویسی یا چارچوب خاص ایجاد شده است. یکی دیگر از این موارد می تواند این باشد که شرکت شما از یک ویرایشگر خاص استفاده می کند، به طوری که شما یاد گرفتید و با آن گیر کرده اید.اگر اساساً با زبان های تفسیر شده و تایپ پویا شده مانند پایتون، جاوا اسکریپت، روبی یا PHP کار می کنید، توصیه می کنم با یک ویرایشگر مبتنی بر رابط کاربری گرافیکی مانند Sublime Text یا Visual Studio Code شروع کنید. اینها دو تا از محبوب‌ترین ویرایشگرهای متن هستند و ویژگی‌ها و سفارشی‌سازی‌های زیادی را برای آسان‌تر کردن زندگی شما به عنوان یک توسعه‌دهنده ارائه می‌کنند.اگر با جاوا کار می‌کنید، Eclipse یا IntelliJ IDEA را پیشنهاد می‌کنم که ویژگی‌های زیادی را ارائه می‌کنند که به طور خاص برای کار در اکوسیستم جاوا ساخته شده‌اند.در نهایت، صرف نظر از اینکه کدام ویرایشگر را برای کار اصلی توسعه دهنده خود انتخاب می کنید، توصیه می‌کنم کمی از Vim یاد بگیرید. Vim یک ویرایشگر متن است که قرار است مستقیماً در ترمینال خط فرمان شما استفاده شود.