چرا می خواهید برنامه نویس شوید؟
شاید این مهمترین سوال باشد که هر فردی که قصد تبدیل شدن به یک برنامه نویس یا توسعه دهنده را دارد باید از خودش بپرسد. افراد ممکن است اهداف متفاوتی داشته باشند؛ فردی ممکن است ایده ای در ذهن داشته باشد و بخواهد آن را پیاده سازی کند، ممکن است فردی دیگر به صورت تفننی بخواهد آن را یاد بگیرد و یا افرادی هستند که می خواهند به عنوان شغل اصلی و منبع درآمد به آن نگاه کنند.
پس در ابتدای مسیر دقیقا مشخص کنید که هدف اصلی شما از یادگیری و تبدیل شدن به برنامه نویس و یا توسعه دهنده چیست. طبق همین هدفِ شما میزان زمان و تلاشی که باید انجام دهید تا به آن هدف برسید مشخص می شود. من در این مقاله سعی می کنم راه کاری را ارائه دهم تا انتخاب مسیر برای تبدیل شدن به یک برنامه نویس در سطحی مقبول را برای شما آسانتر کنم.
مخاطب شما چه کسانی هستند؟
بعد از مشخص شدن هدف شما از تبدیل شده به برنامه نویس مخاطبی که برای آنها برنامه درست می کنید نیز باید معلوم شود. بررسی اینکه مخاطب شما از چه نوع ابزاری استفاده می کند بسیار مهم است. سرویسی که می خواهید به مخاطب برسد از چه طریقی امکان پذیر است. آیا همه مخاطبین شما به اینترنت دسترسی دارند؟ آیا از موبایل استفاده می کنند؟ آیا سرویس شما در همه مکان ها و موقعیت ها باید در دسترس باشد؟
سوالات زیادی باید جواب داده شود تا دقیقا مخاطب هدف مشخص شود. ممکن است برای هدفی که شما دارید نیاز نباشد برنامه دسکتاپ درست شود. ممکن است ارائه سرویس شما تنها با ساخت وب سایتی ممکن باشد. مخاطبین شما در چه رنج سنی هستند. آیا مربوط به یک کشور و ملیتن؟ یا نه جهانی و از اقوام و فرهنگ های مختلف هستند. سلیقه مخاطب چیزی هست که یک برنامه نویس باید همیشه در نظر بگیرد.
به صورت تیمی کار می کنید یا فردی؟
در بخش ها بعد همین مقاله پلتفرم های مختلف، تکنولوژی های متنوع و زبان های برنامه نویسی حال حاضر دنیا را نام می بریم. می بینید که تعداد آن ها بسیا زیاد است و برای یک فرد تقریبا غیرممکن است همه آن ها را یاد بگیرد. و به الفرض که همه ی آنها را یا بگیرد در زمان پروژه و ساخت برنامه مورد نظر زمان بسیاری طول می کشد تا آن را پیاده سازی کند.
ممکن است فردی بگوید می خواهم به صورت تنها پروژه بگیرم و یا ایده ی خود را به تنهایی به سرانجام برسانم. این امر ممکن است در صورتی که پروژه بزرگ نباشد و برنامه نویس از نقشه راهی استفاده کند که در آخر این مقاله به آن اشاره می کنیم.
در کار تیمی کارها بین افراد تیم تقسیم می شود. هر فرد موظف به تکمیل بخشی از کار است. به طور مثال فردی که وظیفه پیاده سازی پایگاه داده را دارد درگیر دیگر مسائل کار نمی شود. بلکه در زمینه کاری خود بیشتر تمرکز می کند و آن را بسیار بهینه تر و کارآمدتر ارائه می دهد. همزمان دیگر اعضای تیم با تخصص خودشان بخش های دیگر کار را تکمیل می کنند و این باعث می شود زمان توسعه و پیاده سازی ایده و به انجام رساندن کار کوتاه تر شود.
برای چه نوع پلتفورمی می خواهید برنامه بنویسید؟
دنیا تکنولوژی دنیای عظیمی است که طی سالیان اخیر شرکت ها و سازمان های مختلفی آن را توسعه داده اند. در ابتدا فقط کامپیوترهای رومیزی یا به اصطلاح دسکتاپ وجود داشت. سه نوع پلتفورم یا سیستم عامل برای دسکتاپ وجود دارد:
- سیستم های رومیزی با سیستم عامل لینوکس (Linux) و دیگر نسخه های مبتنی بر آن مانند ابونتو و فدورا و …
- سیستم های رومیزی با سیستم عامل مک (MAC) مربوط به شرکت اپل
- سیستم های رومیزی با سیستم عامل ویندوز (Windows) مربوط به شرکت مایکروسافت
وقتی در مود سیتم عامل (Operating System) صحبت می کنیم منظور امکانی هست که این شرکت ها فراهم کردند تا بتوان به صورت بهینه از منابع سخت افزاری سیستم مانند واحد پردازنده مرکزی (CPU)، حافظه موقت (RAM)، کارت گرافیک، کارت شبکه، حافظه اصلی (Hard Disk) و دیگر امکانات سخت افزاری کامپیوتر رومیزی یا لپ تاپ و یا حتی گوشی های موبایل استفاده کرد.
همچنین سیستم عامل ها این امکان را می دهند که دیگر برنامه ها بر روی آن نصب شوند و سرویس های جانبی دیگری را ارائه دهند. به همین خاطر این امکان فراهم شده است که توسعه دهندگان و برنامه نویسان برنامه ها خود را بسازند و در این سیستم عامل ها نصب و به دست مشتریان برسانند.
دنیای موبایل
در دنیای موبایل هم به همین صورت چند شرکت مطرح سیستم عامل ها و پلتفرم ها مخصوص به خود را توسعه داده اند. مهمترین آنها به شرح زیر است:
- سیستم عامل آی او آس (IOS) شرکت اپل
- سیستم عامل اندروید (Android) شرکت گوگل
- سیتسم عامل ویندوز فون (Windows Phone) شرکت مایکروسافت
چه در دسکتاپ و چه در موبایل و تبلت هرکدام از این سیستم عامل ها کارایی و ویژگی های منحصربه فرد خود را دارند، گرچه ممکن است در بسیار از موارد شبیه هم باشند. بحث اینکه کدام بهتر است بحثی بیهوده است چرا که هرکدام بازار مخصوص به خود را دارند و برای برنامه نویس مهم این است که تشخیص دهد که مخاطب و یا بازار هدف او کدام است و بیشتر از کدام یک استفاده می کند.
هرکدام از این سیستم عامل ها به زبان مخصوص به خودی نوشته شده اند و لازمه نوشتن برنامه برای آنها یادگیری زبان توسعه آن است. بسیاری از آنها برپایه زبان های C و ++C هستند اگرچه از زبان های پیشرفته تری هم استفاده شده است مثل:
- #C – برای ساخت اپلکیشن های مبنتی بر ویندوز و ویندوز فون
- Java – برای ساخت اپلیکیش های اندروید و لینوکس و برنامه نویسی سمت سرور
- JavaScript – برای ساخت صفحات وب و اپلیکیشن های موبایل و دسکتاپ
- Python – برای ساخت برنامه های لینوکس و برنام نویسی سمت سرور و ..
- Ruby – برنامه نویسی سمت سرور
- Swift – ساخت اپلیکیشن ها برا مک و آی او اس
- و لیستی بسیار زیاد از زبان های برنامه نویسی…
وب سایت و مرورگرها
جدای از اینها تمامی سیستم عامل ها از مروگر (Browser) پشتیبانی می کنند که ما را یه قدم جلوتر می برد و باعث می شود که توسعه دهندگان با ساخت وب سایت ها بدون درگیر شدن با نوع سیستم عامل سرویس های مبنی بر اینترنت را برای کاربران فراهم کنند. اگر به طور ساده و خلاصه نحوه کار وب سایت را شرح دهیم به اینگونه خواهد بود:
- هدف اصلی طراحی سایت ارائه سرویسی برپایه اینترنت می باشد. به این صورت که هر فردی در هرکجای دنیا تنها با داشتن اینترنت و یکی از پلتفرم های نامبرده به آن وب سایت دسترسی داشته باشد و از آن بهره بگیرد.
- اطلاعات و داده ها در مکانی به اسم دیتا سنتر و داخل یکسری سرور دخیره می شوند.( سرورها چیز عجیبی نیستند، همان کامپیوترها مورد استفاده کاربارن عادی است با این تفاوت کمی قویتر و در مکانی امن و به دور از دسترس عموم می باشد و می توان از راه دور به آن وصل شد و تنظمیات را اعمال کرد ).
- افرادی که می خواهند به وب سایت متصل شوند یکی از مرورگرهای خود را باز می کنند. ( مشهورترین مرورگرها: موزیلا فایرفاکس (Mozilla Firefox) – گوگل کروم (Google Chrome) – سافاری (Safari) و چند مورد دیگر که زیاد مورد استفاده قرار نمی گیرند.).
- کاربر نام سایت را وارد می کند و مرورگر درخواست اطلاعات مربوط به آن وب سایت در از سرورهایی مربوطه می کند و سرور اطلاعات را به مرورگر می دهد و سپس به کاربر نمایش داده می شود.
اگر بخواهیم برنامه نویسی و توسعه سایت را به بخش های کوچکتری تقسیم کنیم به طوری که هر فرد وظیفه توسعه ی قسمتی از آن را داشته باشد به این شکل عمل می کنیم:
- توسعه سمت سرور (Back-end Development)
- توسعه سمت کلاینت (Front-end Development)
Back-end چیست و برنامه نویس بک اند کیست؟
تمامی منطق یک وب سایت در قسمت بک اند پیاده سازی می شود. کدهایی که کاربران هرگز نمی بینند و تنها اثرات آن را داخل مرورگر یا برنامه های دیگر مشاهده می کنند. توانایی یک بک اند عالی زمانی معلوم می شود که وب سایت در آمار ترافیک بالا با مشکلی روبرو نشود و زیر فشارهای حملات سایبری مقاوم باشد و دچار اختلال نشود.
بک اند با بخش سمت کلاینت یا همان فرانت اند ارتباط مستقیم دارد و اطلاعات بین آنها رد و بدل می شود. برنامه نویسان بک اند باید به زبان های سمت سرور مسلط باشند. بسنه به نوع کار و پروژه از زبان های مختلفی استفاده می شود و همچنین پایگاه داده های مختلفی برای ذخیره داده ها و انجام عملیات روی داده ها وجود دارد.
برنامه نویس بک اند باید مهارت های زیر را داشته باشد:
- آشنایی با حداقل یک زبان برنامه نوسی سمت سرور مثل java – python – nodejs – php و …
- کار با حداقل یک پایگاه داده مثل Mysql – MariaDB – MongoDB – Posgresql و …
- کتابخانه ها و فریمورک های سمت سرور مثل Laravel – yii و …
- آشنایی با حل مسئله و الگوریتم ها و الگوهای طراحی
Front-end چیست و برنامه نویس فرانت اند کیست؟
هر آنچه قابل مشاهده است در یک وب سایت یا یک نرم افزار مربوط به فرانت اند است. آنچه کاربر می بیند و با آن تعامل دارد. برنام نویس فرانت اند کدها را می گیرد و به صورت جذاب و قابل تعامل برای کاربر در می آورد. در بسیاری از شرکت ها خود این قسمت را هم به چنیدین قسمت دیگر تقسیم کرده اند که شامل طراحی رابط کاربری (UI Designer) – طراحی تجربه کاربری (UX Designer) و گرافیک و …
برنامه نویس فرانت اند باید مهارت های زیر را داشته باشد:
- مسلط به HTML برای ایجاد ساختار صفحات وب و اپ
- مسلط به CSS برای فرم دهی و شکل دهی به صفحات وب و اپ
- مسلط به زبان برنامه نویسی جاوا اسکریپت (JavaScript) برای پویا نمایی صفحاتی که با دو زبان بالا نوشته شده اند.
- کار با کتابخانه ها و فریمورک های سمت کلاینت مثل انگولار، ری اکت، ویو و …
- اصول طراحی وب و واکنش پذیری صفحات و اصول تجربه کاربری
- سلیقه و خلاقیت بسیار بالا
چطور برنامه نویس همه فن حریف باشم؟
حال که با پلتفرم های مختلف و زبان های برنامه نویسی تا حدی آشنا شدید و متوجه شدید که تعداد تکنولوژی و زبان های برنامه نویسی کم نیستند و شما قادر نخواهید بود همه آن ها را یاد بگیرید ما به شما پیشنهاد می کنیم که مسیر زیر را دنبال کنید و به آنچه می خواهید برسید.
همان طور که در مقاله اشاره شد جهت ساخت صفحات وب حتما حتما باید سه زبان HTML – CSS – JAVASCRIPT و یک زبان سمت سرور و یک نوع پایگاه داده بلد باشید. برای ساخت اپلیکیش موبایل و دسکتاپ در صورت متصل شدن به اینترنت باز به یک زبان سمت سرور و و یک نوع پایگاه داده احتیاج دارید.
به لطف فریمورک های فرانت اند مثل انگولار و ری اکت این امکان فراهم شده است که با استفاده از دانش قبلی که همان HTML – CSS – JAVASCRIPT است شما هم صفحات وب را طراحی کنید، هم اپلیکیشن های موبایل درست کنید و هم نرم افزارهای دسکتاپ بسازید. در واقع شما با یک تیر 3 نشان را می زنید. شاید بپرسید سمت سرور چی؟ خب جاوا اسکریپت زبانی بسیار توانمند است و اگرچه تاکنون تنها در مرورگر اجرا میشده اما Nodejs این قابلیت را فراهم کرده است که در همه جا اجرا شود.
مسیر پیشنهادی ما:
- یادگیری زبان HTML
- یادگیری CSS
- یادگیری JavaScript
- یادگیری یکی از فریمورک های جاوا اسکریپت مثل انگولار و ری اکت که ما در شرکت وب کار بنا به دلایلی از انگولار استفاده می کنیم
- یادگیری Nodejs برای برنامه نویسی سمت سرور (یادگیری آن برای کسانی که جاوا اسکریپت بلدن بسیار راحت است).
- یادگیری یک پایگاه داده مثل Mysql و MongoDB و یا Postgresql که بستگی به نوع پروژه دارد.
- یادگیری یک فریمورک جاوا اسکریپتی برای موبایل مثل آیونیک (Ionic) و ری اکت نیتیو (React Native) برای ساخت اپ اندروید و آی او اس و ویندوز فون
- یادگیری فریمورک جاوا اسکریپتیی الکترون برای ساخت نرم افزاهای دسکتاپ هم برای ویندوز هم مک و هم لینوکس
سعی کردم این مقاله را بسیار کوتاه بنویسم گرچه یه کم طولانی هم شد. اما هدف اصلیم این بود کسانی که می خواهند برنامه نویسی شروع کنند یا قبلا شروع کردند اما سردرگم هستند یه مسیر روشن هدفمند داشته باشند تا بهتر به اهدافشون برسند.
البته مسیرهای زیادی وجود دارد و شاید این نقشه راه جوابگوی همه ی آنها نباشد. اما با بررسی شرکت های بزرگ دنیا و تکنولوژی های موجود این بهترین راه و سریعترین راه برای رسیدن به بسیاری از اهداف شما در برنامه نویسی است.
خوشحال می شویم که نظرات خود را با ما در میان بگدارید.