با توجه به این که سابقه ی آموزش اصول برنامه نویسی در کشورمان خیلی زیاد نیست، مسلما منابع آموزشی گسترده ای هم در این زمینه وجود ندارد اما به هر حال در سال های اخیر، تلاش های قابل تقدیری در وب فارسی در زمینه ی آموزش برنامه نویسی، طراحی سایت، اپ موبایل و سایر حوزه های وابسته صورت گرفته که در این آموزش قصد داریم برخی از معروف ترین سایت های آموزش برنامه نویسی فارسی زبان را معرفی کنیم.
سایت kamalan.com سایت کمالان که توسط مهندس حسام الدین کمالان تاسیس شده است را می توان به عنوان یکی از مراجع آموزش اپلیکیشن نویسی برای سیستم عامل محبوب اندروید در وب فارسی قلمداد کرد. دوره های آموزشی این سایت از مبتدی شروع شده و تا مباحث متوسطه و پیشرفته ی برنامه نویسی اندروید ادامه می یابند.
سایت uncocoder.com سایت خانه ی اندروید ایران توسط بهنام آقاجانی که یکی از اولین مدرس های توسعه ی اپلیکیشن برای سیستم عامل اندروید در ایران است مدیریت می شود. دوره های آموزشی این سایت ویدیویی بوده که علاقمندان به منظور استفاده از این دوره ها، می بایست در سایت ثبت نام کرده و شهریه پرداخت کنند.
سایت maktabkhooneh.org هدف مکتب خونه در دسترس قرار دادن آموزش هایی با کیفیت بالا برای همه ی فارسی زبانان است. مدیران این سایت اعتقاد دارند که هیچ کس نباید به خاطر هیچ چیز از لذت یاد گرفتن محروم شود. نباید سن و سال یا مکان و موقعیت و امکانات مالی، افراد را از یاد گرفتن و موفقیت باز دارد. تمام ویدئوهای آموزشی مکتب خونه رایگان در دسترس همه قرار دارد و همه افراد می توانند به صورت رایگان از محتوای آموزشی مکتب خونه استفاده کنند.
سایت quicklearn.ir اگر علاقه مند به برنامه نویسی اندروید هستید، سایت کوئیک لرن به شما یادگیری زبان برنامه نویسی Basic4Android را پیشنهاد می کند. سایت کویک لرن اولین سایتی بوده که این محیط برنامه نویسی را معرفی کرد و طی سال های گذشته، کمک به افراد بیشماری از طریق این محیط برنامه نویسی کرده تا بتوانند وارد حوزه ی برنامه نویس اندروید شده و شروع به کسب درآمد کنند. یادگیری بیسیک4اندروید نسبت به محیط های برنامه نویسی دیگر خیلی ساده تر بوده اما در عین حال سعی شده تا از قدرت برنامه نویسی شما چیزی کم نگردد. به گفته این سایت “خیلی از برنامه های منتشرشده در بازار با این زبان محبوب و توسط کاربران کویک لرن نوشته شده اند.”
سایت esfandune.ir سایت اسفندونه یکی از سایت های فعال در زمینه ی آموزش تکنولوژی های وب و موبایل است که از جمله آموزش های این سایت می توان به آموزش برنامه نویسی اندروید، زبان برنامه نویسی پی اچ پی، برنامه نویسی ویندوز فون، آموزش سی شارپ و … نام برد.
سایت sokanacademy.com اگر این آموزش را دنبال می کنید، پس با سکان آکادمی نیز آشنا هستید. سکان آکادمی فضایی برای یادگیری برنامه نویسی -از بچهها گرفته تا بزرگسالان، دانشجویان رشتههای مرتبط و غیر مرتبط با برنامه نویسی- ایجاد کرده که خدمات این سایت به صورت کاملا رایگان در اختیار علاقمندان قرار می گیرد. در این آکادمی آنلاین آموزش برنامه نویسی، علاوه بر آموزش های مرتبط با برنامه نویسی و طراحی سایت، خدمات مرتبط با برنامه نویسی نیز ارائه می گردد که از آن جمله می توان به سرویس جابز که فضایی برای کارفرمایان و فریلنسرهای حوزه ی فناوری است، تالار گفتگو، وبلاگ، دانشنامه ی زبان های برنامه نویسی (ویکی) و … اشاره کرد.
سایت faranesh.com فرانش -کائسنا سابق- از سال 1386 با هدف ترویج دانش متن باز، برای ایجاد فرصت یکسان یادگیری و به منظور گسترش سطح آگاهی و علم جامعه فارسی زبان آغاز به کار نمود و در این راه با همیاری و همکاری افراد علاقمند به حوزه ی آموزش به موفقیت هایی دست یافت. در این سایت کاربرانی که توانایی و دانش کاربردی در زمینه های مشخصی همچون برنامه نویسی دارند، در فرایند تولید همراهی شده و تیم تولید و تدوینی در کنار آن ها قرار گرفته تا بتوانند دانش خود را با دیگران به اشتراک بگذارند. صرف نظر از اهداف تجاری یا غیر تجاری تولیدکنندگان محتوا در فرانش، دغدغه های پلتفرم پرداخت، پلتفرم نمایش، هزینه پهنای باند، مارکتینگ، دریافت بازخورد و … برای تولید کنندگان برطرف شده تا بتوانند با تمرکز روی محتوا، ویدئوی آموزشی خود را تولید و منتشر کنند.
سایت mobtadi.com سایت مبتدی کار خود را در پاییز 92 با هدف آموزش زبان برنامه نویسی پی اچ پی از پایه و به صورت گام به گام آغاز نمود و با استقبال خوب کاربران سایت، آموزش زبان اچ تی ام ال را نیز به آن اضافه کرد. هدف این سایت، آموزش اصول کدنویسی تحت وب به افراد علاقمند به این حوزه است.
سایت 7learn.com این سایت توسط لقمان آوند -دانشجوی دکترای تخصصی نرم افزار از دانشگاه شیراز- در سال 1387 راه اندازی شد و به خاطر علاقه ی شخصی وی به دنیای وب، وبلاگ نویسی و مخصوصا طراحی وب و برنامه نویسی، ایشان فعالیتش را در این سایت شروع کرد. در این سایت آموزشی، فناوری های متنوعی از زبان های اچ تی ام ال و سی اس اس گرفته تا زبان های برنامه نویسی بک اند همچون پی اچ پی، سی شارپ و غیره تدریس می شوند.
سایت roocket.ir راکت در بهار 1394 راه اندازی شده با این باور که کاربران ایرانی لایق بهترین ها هستند و باید بهترین و بروزترین فیلم های آموزشی و مقالات در اختیار آن ها قرار بگیرد تا بتوانند به سرعت پیشرفت کنند و جزء بهترین ها در صنعت طراحی و برنامه نویسی وب شوند.
آیا برای مصاحبه شغلی زبان PHP آماده میشوید؟ احتمالا بهدنبال مقالههایی درباره سوالهای رایجی هستید که ممکن است از یک توسعهدهنده PHP در سال 2020 بپرسند. این کاملا طبیعی است. اما ممکن است بیشتر مقالههایی که در این زمینه میخوانید خیلی مفید نباشند، چرا؟ زیرا از آنچه بهنظر میرسد، پیچیدهتر است و مسائل بیشتر مربوط به توسعهدهندگان PHP است تا زبان PHP. بهترین شرکتهای توسعه نرمافزار این موضوع را میدانند و ما در این مقاله میخواهیم مواردی که در موفقیت شما دخیل هستند را مورد بررسی و گفتگو قرار دهیم.
متفاوتتر از آنچه که انتظار دارید
بیایید مسیر را با بیان مواردی که نمیخواهیم در این مقاله به آنها بپردازیم، شروع کنیم. شما در این مقاله، پاسخهای آماده به تعدادی سوال مصاحبه مربوط به زبان PHP را نمییابید. در حقیقت بیشتر مقالهها درمورد مصاحبههای کاری دقیقا به پرسشها و پاسخها میپردازند، اما دانستن زبان PHP بهتنهایی شما را به توسعهدهنده خوبی تبدیل میکند؟ فکر نمیکنم!
PHP یکی از زبانهای بسیار محبوب برای ساخت برنامههای وب است، اما برای ایجاد یک برنامه کارآمد، به مواردی بیشتر از تسلط به زبان PHP نیاز دارید. بهطور معمول میخواهید از نوعی سرور و دیتابیس نیز استفاده کنید. البته، پروژههایی وجود دارند که نیازی به مهارتهای اضافی ندارند، اما فکر میکنم عادلانه است که بگوییم انجام بسیاری از پروژهها در این روزها، نیاز به مهارتهای بیشتری دارند.
احتمالا همانطور که خودتان هم میدانید، یک توسعهدهنده PHP بهمقدار زیادی از مهارت در فناوریهای مختلف نیاز دارد. با دانستن این موضوعها، مصاحبهکنندگانی که در مقابل شما قرار میگیرند، موظف هستند درباره هرچیزی که به توسعه مربوط باشد، سوال کنند! درحالی که دنیای توسعه یافته امروز، بیشتر از قبل به تخصص نیاز دارد اما دانش عمومی قوی هنوز هم بسیار ارزشمند است و جزو مشخصههای خوب یک توسعهدهنده بهحساب میآید.
جزئیات مصاحبه شغلی تا حد زیادی به شرکتی بستگی دارد که میخواهید در آن مشغول به کار شوید. آشنایی با آنچه که آن شرکت انجام میدهد و فناوریهای مورد استفادهشان، بسیار ضروری است. بهبخش مهارتهایی که در پیشنهاد کاری نوشته شده، حتما دقت داشته باشید. دانستن مهارتهای ذکر شده در آنجا بسیار مفید خواهندبود. برخی از این موارد شاید بهنظر موارد مهمی بهنظر نرسند، اما درواقع میتوانند شما را از سایر افرادی که برای این شغل درخواست دادهاند، متمایز کنند.
بیاید بر روی مواردی که در بیشتر مصاحبههای شغلی زبان PHP به آنها پرداخته میشود، تمرکز کنیم:
زبان PHP
فریمورکها
مشکلهای رایج در توسعه
وب و REST API
دیتابیسها
مهندسی نرمافزاری
DevOps
مهارتهای فردی (soft skills)
ابزارهای جانبی
این تخصص کاری، بهقدری گسترده است که شما قادر نخواهید بود، در چند روز برای مصاحبه آماده شوید. اما مواردی مانند نگرش، نحوه صحبت کردن و اعتماد بهنفستان را میتوانید در آن زمان بهبود ببخشید. بااینوجود، دانستن آنچه که ممکن است در طی مصاحبه رخ دهد و یا باید انتظار چهمواردی را داشته باشید، به تقویت اعتماد بهنفستان کمک میکنند. بههمین دلیل قصد داریم درمورد همه جوانب ذکر شده در بالا از منظر کسی که مصاحبه شغلی PHP را انجام میدهد، صحبت کنیم. سوالهای مصاحبه در زبان PHP را نمیتوان حدس زد ولی برای نمونه چند مثال از آنها را بیان میکنیم تا با آنها آشنایی پیدا کنید.
زبان PHP
قطعا سوالهای مربوط به زبان PHP در مصاحبه شما وجود خواهند داشت و موارد عمدهای که شاید بیشتر در آن زمینهها از شما سوال شوند، بهصورت زیر است:
چه قابلیتهای تازهای در PHP 7.4 یا بهطور کلیتر PHP 7.x، اضاف شدهاند؟
تقاوتهای میان PHP 5.6 و PHP 7.x چیست؟ چگونه میتوان پروژه را از نسخه 5.6 به نسخه 7 زبان PHP انتقال داد؟ هنوز هم شرکتهای زیادی از PHP 5.x استفاده میکنند و این سوالها طبیعی هستند و نیاز است که این تفاوتها و نحوه کارکردشان را بدانید.
سوالهایی در زمینه شیگرایی (Object-Oriented Programming) زبان PHP.
محدودیتها و چالشهای رایجی که در توسعه به زبان PHP وجود دارد.
مدیریت وابستگیها در پروژههای PHP، به ویژه سوالهایی از Composer.
سوالهای مربوط به تمیز کردن کدهای PHP و مختصرکردن آنها برای اعضای تیم و مقیاسپذیرتر کردن کدها (بالابردن قابلیت خواندن کدها).
با توجه به تجربههایی که در این سالها کسب کردهایم، استخدام کنندگان معمولا در رابطه با مسائلی (issues) سوال میپرسند که هر روز با آنها سروکله میزنند. از آن گذشته، مواردی پرسیده میشوند که نیاز است در آنها مهارت داشته باشید تا بتوانید به شرکتی که میخواهید در آن استخدام شوید، کمک کنید. این چیزی است که آمادگی برای مصاحبه را چالش برانگیز میکند.
فریمورکها
فریمورکهای PHP بسیاری از مشکلهای مربوط به برنامهنویسی سمت سرور را حل میکنند و پایهای اساسی برای اکثر پروژهها هستند. همچنین این توانایی را دارند که در وقت صرفهجویی کنند و در رفع مشکلهایی که ممکن است در آینده با آنها روبرو شویم، ما را یاری کنند. بسیاری از فریمورکهای PHP، متنباز هستند. زمانی که فریمورکی را یاد بگیرید که کارفرمایان آیندهتان از آن استفاده میکنند، سازگاری با محیط کاریتان بسیار سادهتر خواهد بود. حتی برخی از شرکتها در فریمورک خاصی تخصص دارند و کل تیم خود را در راستای آن فریمورک پرورش میدهند. پرسش و پاسخهایی که ممکن است در مصاحبه شما وجود داشته باشند، به تخصص و چالشهایی که شرکت با آن روبرو شدهاست، بستگی دارد. اما برخی از متداولترین آنها عبارتند از:
چرخه زندگی یک درخواست، یعنی تمام مراحلی که برای رسیدگی به هر درخواست در یک فریمورک اتفاق میافتد،
روشهای اعتبارسنجی دادهها،
مسیریابی (routing)،
ORM (روشی که فریمورکها برای پشتیبانی از لایههای دیتاها استفاده میکنند)،
مدیریت وابستگیها،
caching،
دستورهای کنسول.
مشکلهای رایج در توسعه
یکی از متداولترین بخشهای مصاحبه شغلی ارائه مشکلهای رایج در توسعه با زبان PHP است و برای پیدا کردن توسعهدهندگانی با تجربه بیشتر استفاده میشود. این یک روش عالی برای دیدن نحوه برخورد توسعهدهنده با مشکلهای جدید و تواناییشان برای یافتن مهمترین جنبههای آن مشکل است. همچنین فرصتی برای دیدن چگونگی عملکرد افراد تحت فشار را در اختیار شما قرار میدهد، آیا آنها تسلیم میشوند یا سعی میکنند راهحلی را ارائه دهند؟
بهترین مورد در زمان آمادهسازی برای مصاحبهکاری، رسیدن به نگرش درست است. یک مصاحبهکاری، پایان جهان محسوب نمیشود. نیازی به عصبی شدن بیشازحد نیست. حتی اگر نتوانیم راهحلی برای آن موضوع پیدا کنیم، نگرش ما بهتنهایی میتواند باعث شود که ما واقعا خوب بهنظر برسیم. این یک عادت خوب است که سوال کنیم، بهخصوص از اینکه واقعا مشکل را درک کردهایم، اطمینان حاصل کنیم.
وب و REST API
برنامهنویسی سمت سرور فقط مربوط به زبان PHP نمیشود. اکثر برنامههای مدرن از طریق پروتکل HTTP و با به اشتراک گذاشتن یک API با دنیای خارج از خودشان ارتباط برقرار میکنند. بهگونهای که توسط بخش فرانتاند و برنامههای موبایلی و سایر برنامههای شخص ثالث، با سرویسهایمان یکپارچه میشوند. با توجه به تجربه، پروژه PHP ای نبوده که API مخصوص به خودش را لازم نداشته باشد. بهطور کلی، API مورد بسیار مهمی در توسعه سمت سرور با زبان PHP است، بنابراین در طی یک مصاحبه شغلی میتوانیم این مورد را انتظار داشته باشیم، سوالهای رایج موجود در این زمینه میتوانند به شکلهای زیر باشند:
چگونگی نحوه ارتباط با HTTP را توضیح دهید،
تفاوتهای میان HTTP 1.1 و HTTP 2 چیست؟
REST API چیست و چگونه کار میکند؟
CORS چیست و برای چه استفاده میشود؟
تایید اعتبار و دسترسی کاربران از طریق API.
دیتابیسها
بسیاری از سیستمهای مدیریت دیتابیس مانند MySQL، متنباز هستند. دیتابیس یکی از بخشهای اساسی هر برنامه است. در توسعه برنامههای مدرن، از چند دیتابیس در یک برنامه استفاده میشود. دیتابیسهای NoSQL بهطور فزایندهای با دیتابیسهای رابطهای در کنار یکدیگر مورد استفاده قرار میگیرند. دلیل این امر، افزایش ویژه عملکرد برنامهها است که با انتخاب ابزارهای مناسب، محقق میشود. در نتیجه سوالهایی در رابطه با موارد فوق برای مصاحبههای کاری به زبان PHP، متداول است:
دیتابیس NoSQL چیست؟ از چه دیتابیس NoSQL استفاده کردهاید؟ برای چه مواردی میتوان از آنها استفاده کرد؟
عملکرد و بهینهسازی دیتابیسها،
سوالهای مربوط به سیستمهای مدیریت استاندارد مانند دیتابیس MySQL
مهندسی نرمافزاری
این بخش از مصاحبه، جالبترین بخش آن محسوب میشود زیرا بهطور واقعی تواناییهای توسعهدهندگان را نشان میدهد. این دانشی است که برنامهنویسان خوب را از کسانی که هنوز راهی طولانی برای طی کردن دارند، متمایز میکند. موضوعهای رایجی که ممکن است درمورد آنها از شما سوال شوند، میتوانند شامل موارد زیر باشند:
تست برنامه، انواع تستها، موارد خاص، ابزارهایی برای تست برنامههایی که با PHP توسعه داده شدهاند،
بهترین شیوههای توسعه مانند SOLID،
الگوهای طراحی (design pattern)، چگونگی گروهبندی آنها، چه مشکلهایی با این الگوها رفع میشود و موارد اینچنینی …،
الگوهای معماری،
CI/CD.
DevOps
درنهایت بیشتر پروژهها منجر به تولید محصولی میشوند (حداقل ایده این است). توسعهدهندگان باید پیامدهای پیش رو را درک کنند. بیشتر برنامههای مدرن در سرویسهای ابری مانند لیارا کار میکنند و مقیاسپذیر هستند و نیاز است هر توسعهدهنده با چالشهای مقیاسپذیری رایج و راهحلهای آنها آشنا باشد.
فضای ذخیرهسازی فایلها و sessionهای مشترک،
پیکربندی برنامه برای محیطهای مختلف،
مشکلهای رایج در مقیاسپذیری برنامههای PHP،
virtualization و containerization،
روشهای استقرار برنامه.
مهارتهای فردی
مهارتهای فردی یکی از موضوعهایی است که توسعهدهندگان آن را کمارزش میدانند و معمولا این مورد را به حاشیه میرانند. این بسیار مهم است، زیرا معمولا ما بهتنهایی کار نمیکنیم و در تیمهایی متشکل از برنامهنویسان، تستکنندههای برنامه، مدیران پروژه و صاحبان محصول درحال انجام فعایت هستیم. توانایی همکاری با همه آنها موردی بسیار ضروری است. سوالهای رایج مربوط به مهارتهای توسعهدهندگان، عبارتند از:
روشهای حل اختلاف در یک تیم،
رویکردهای مقابله با مهلتهای غیر منطقی،
نحوه رویارویی با ناتوانیها برای تحویل پروژه به کمک روش sprint به صاحبان محصول،
نحوه استدلال کدها هنگام بررسیشان.
ابزارهای جانبی
جدا از دیتابیسها و موارد دیگری که قبلتر دربارهشان صحبت کردیم، ابزارهای بیشتری وجود دارند که برای ساخت برنامههای وب مورد استفاده قرار میگیرند. برای مثال، ارتباط بین میکروسرویسها ممکن است بر اساس Message brokerها (RabbitMQ یا Apache Kafka) باشد. این یک روش برای افزایش عملکرد و بهبود تجربه کاربری است. البته این امر باعث میشود برنامه ما بهدلیل Loose coupling برای توسعهدهندگان انعطافپذیرتر شود.
headless CMSها یکی دیگر از ابزارهایی هستند که در ساخت برنامههای مدرن از آنها استفاده میشود. همچنین باعث میشوند تا ویراستاران برنامه بهراحتی محتوا را در برنامههای SPA (Single Page Application) + API مدیریت کنند. همچنین ابزارهایی مانند Crowdin, PoEdit و BabelSheet که برای پشتیبانی از چندین زبان مورد استفاده قرار میگیرند، وجود دارند. قطعا ابزارهای بیشتری وجود دارند که میتوانید در توسعه برنامههای وبتان از آنها استفاده کنید. اما به نیازهای تجاری شما وابسته هستند.
اگر بخواهیم صادقانه بگوییم، نمیتوان سوالهای مربوط به این بخش را پیشبینی کرد زیرا تعداد زیادی ابزار وجود دارد. اما باید استفاده از این ابزار را تجربه کنید. اگر با هر ابزار دیگری که ارزش ذکر کردن داشته باشد، کار میکنید از ذکر آنها دریغ نکنید. بهخصوص اگر میتواند برای پروژه مورد نظر مفید باشد که چه بهتر.
فرایند توسعه
توسعه نرمافزار فقط مربوط به دانش فنی قوی نیست. بهگونه میتوان گفت که توسعه نرمافزار برای ارزشسازی در تجارت نیز بهمیان آمده است. زمانی که مستندات مورد نیاز برای انجام یک پروژه در کنار هم جمع میشوند و مستندسازی پروژه تمام میشود، نیاز است افراد تیم تواناییهایشان را با یکدیگر ادغام کنند و هر فرد، بخشی از پروژه را بهدست گیرد. بنابراین افرادی با دانش معقول برای انجام پروژه مورد نیاز هستند. ممکن است درباره تجربهکاریتان با روش Scrum سوالاتی پرسیده شود، برای مثال: Scrum چیست؟ جلسات خاص کاری با چه هدفی برگذار میشوند؟
Kanban یک روش دیگر است که در توسعه مدرن استفاده میشود، ممکن است در مصاحبه کاری شما، از این روش سوالاتی وجود داشته باشد. همانطور که قبلا اشاره کردیم، بیشتر موارد به نحوه کار شرکتی که میخواهید در آن استخدام شوید، بستگی دارند.
خلاصه یافتههای کلیدی موجود در این مقاله
سعی کردیم در این مقاله شما را با کلیت موضوعهایی که ممکن است با آنها روبرو شوید، آشنا کنیم و در این بخش بهطور مختصر به مهمترین نکاتی که درباره آنها صحبت شده، میپردازیم:
در مصاحبه شغلی مرتبط با زبان PHP، ممکن است سوالاتی درباره اکوسیستم کلی برنامه وجود داشته باشد و فقط به زبان PHP پرداخته نمیشود. بهگونهای میتوان گفت که باید بدانید که واقعا یک پروژه PHP چگونه به برنامه کارآمدی تبدیل میشود.
برای موفقیت در مصاحبهتان بهعنوان یک توسعهدهنده نرمافزار، نیاز است که دانش کلی از جنبههای مختلف توسعه یک برنامه به زبان PHP داشته باشید. حتی اگر شرکتها برای فریمورک یا مورد خاصی درخواست کار داده باشند، داشتن دانش کلی، راه شما را برای رسیدن به هدفتان آسانتر میکند.
شرکتها سوالاتی مربوط به زمینه کاریشان، تخصصهای مورد نیاز و محیطی که میخواهید در آن مشغول به کار شوید، میپرسند. این موارد طبیعی هستند، زیرا آنها سعی در پیدا کردن افرادی دارند که بهرهوری بیشتری برای شرکتشان داشته باشند. بههمین دلیل است که تحقیق درمورد شرکت و نوع فناوریهایی که ترجیحا از آنها استفاده میکنند، ضرروی است. این ممکن است شانس شما برای دستیابی به شغل مدنظرتان را بهبود ببخشد.
خوب است درباره آنچه که نمیدانید، صادق باشید. شرکتها درک میکنند که روند آموزش، سادهتر از ساختن شخصیت و نگرشهای درست فردی در کار است.
مهارتهای فردی، شما را به یک عضو کارآمد تیم، تبدیل میکند. در یک پروژه PHP، زمانی محصول به خوبی تحویل داده میشود که همکاری و ارتباطات افراد در فرایند ساخت آن محصول، عالی باشد.
امیدواریم که این مقاله، در جستجوی شغل بعدیتان مفید واقع شود.
دنیای امروزه به واسطه ی توسعه ی تکنولوژی و برنامه نویسی، پیشرفت های فراوانی داشته است و این پیشرفت ها به خوبی توانسته اند اثرات خوبی را در جوانب مختلف زندگی بشر بر جای بگذارند.
زبان برنامه نویسی یک زبان قرار دادی است که مجموعه ای از دستور العمل ها را در بردارد و انواع مختلفی از خروجی ها را تولید می کند. زبان های برنامه نویسی برای پیاده سازی الگوریتم ها استفاده می شوند.
تا کنون هزاران زبان برنامه نویسی برای کاربردهای مختلف ایجاد شده است و هر ساله بر تعداد آن ها افزوده می شود. اما تنها تعداد اندکی از آن ها کاربردهای گسترده و تقاضای بالا برای استخدام دارند در ادامه این پست با ایگرد همراه باشید تا با پرطرفدار ترین زبان های برنامه نویسی در سال 2021 آشنا شویم.
زبان برنامه نویسی چیست؟
زبان های برنامه نویسی ساختارهای زبانی دستور مداری در رایانه ها هستند که بهوسیله آنها می توان یک الگوریتم را به وسیله ساختارهای دستوری متفاوت برای اجرای رایانه توصیف کرد و با این روش امکان نوشتن برنامه جهت تولید نرم افزارهای جدید به وجود می آید. معمولاً هر زبان برنامه نویسی دارای یک محیط نرم افزاری برای وارد کردن متن برنامه، اجرا، کامپایلر و رفع اشکال آن هست.
یک زبان برنامه نویسی یک زبان مصنوعی انگلیسی است که برای بیان محاسباتی که توسط یک ماشین (مخصوصا رایانه) قابل انجام است، طراحی شده است. زبان های برنامه نویسی برای ایجاد برنامه هایی به کار می روند که رفتار یک ماشین را مشخص می کنند، الگوریتم دقیق را بیان میکنند، یا روشی برای ارتباط انسانند.
انواع زبان برنامه نویسی
زمانی که ما یک برنامه با زبان سطح بالا می نویسیم برای مثال C ،C++ ، java و … کامپیوتر درکی از برنامه ای که ما نوشتیم ندارد. زیرا کد ماشین یک کد صفر و یک می باشد و برای اینکه برنامه ما قابل فهم برای ماشین باشد نیاز به چیزی داریم که این برنامه سطح بالا را به کد ماشین تبدیل کند. اینجاست که می توانیم از مفسر و کامپایلراستفادهکنیم. به طور کلی زبان های برنامه نویسی به دو نوع اصلی زبان های مفسری (interpreter) و زبان های کامپایلری(compiler) تقسیم می شود.
کامپایلر چیست؟
مجموعه ای از برنامه یا برنامه های کامپیوتری هستند که زبان برنامه نویسی سطح بالا (زبان مبدا) را به زبانی سطح پایین (زبان مقصد) و قابل فهم برای سخت افزار تبدیل می کند. به عبارتی دیگر کد های ماشین به سادگی قابل فهم برای انسان نیستند و به همین دلیل انسان به زبان های سطح بالا که قابل فهم تر هستند، برنامه می نویسد و با استفاده از کامپایلرها آن را به زبان سطح پایین تبدیل می کند.
ساز و کار کلی کامپایلر
روند کلی کار کامپایلرها به این شکل است که برنامه سطح بالا را خوانده و یک شکل میانی از آن ایجاد می کند و سرانجام آن را به زبان دیگری مانند اسمبلی تبدیل می کند، سپس زبان اسمبل شده نیز به شکل میانی برنامه ایجاد و سرانجام به کد ماشین تبدیل می شود. کامپایلر این کد را در قالب Memory World که بر اساس قواعد زبان سطح بالا نوشته بود، برای سخت افزار ایجاد می کند.
مفسر چیست؟
مفسر یک برنامه کامپیوتری است که دستورهای نوشته شده در یک زبان برنامه نویسی سطح بالا را به شکل یک کد قابل فهم برای ماشین اجرا می کند.
بزرگتریم مزیتی که مفسر دارد این است که برنامه نوشته شده اصلی، وابسته به نوع سخت افزار نیست. یعنی برنامه ای که به زبان مفسر نوشته شود می تواند بر روی هر نوع سیستم عاملی اجرا شود.
تفاوت مفسر و کامپایلر
·چگونگی اجرا شدن: در زبان های کامپایلری ابتدا یک بار به صورت کامل ترجمه می گردند. سپس برنامه برای اجرا از روی فایل کامپایل شده اجرا می گردد. اما در زبان های مفسری کدها به صورت خط به خط تفسیر تفسیر و اجرا می شوند. سپس هر دفعه که بخواهیم برنامه را دوباره اجرا کنیم به همین صورت کد تفسیر اجرا می شود.
·وابسته بودن یا نبودن به سیستم عامل: یکی دیگر از تفاوت های این زبان ها این می باشد که زبان مفسری برای اجرا نیاز به یک نرم افزار مفسر یا همان interpreter دارد. اما زبان کامپایلری تنها یک بار کامپایل شده و کد های قابل اجرا در سیستم را ایجاد می کند. از آن پس بر روی هر سیستمی بدون نیاز به کامپایلر قابل اجرا می باشد. اما همین نکته این تفاوت را ایجاد می کند که زبان کامپایلر وابسته به سیستم عامل است، یعنی در صورتی اجرا خواهد شد که در آن سیستم عامل کامپایل شده باشد و در سیستم عامل های دیگر اجرا نخواهد شد. اما زبان مفسر در هر سیستم عاملی که نرم افزار مفسر آن وجود داشته باشد اجرا و تفسیر می گردد. در واقع زبان مفسر وابسته به سیستم عامل نیست.
·سرعت و میزان استفاده از حافظه و پردازنده: زبان های interpreter کدها را به صورت خط به خط تفسیر و اجرا می کنند، این کار باعث می شود تا مقدار بیشتری از CPU و RAM کامپیوتر اشغال شود و مشخص است که سرعت پایین تری نیز خواهند داشت. اما کامپایل شدن یک باره ی زبان ها کامپایلر این است که در اجراهای متعدد سبک تر بوده و سرعت بهتری خواهند داشت.
·خطایابی: همین مزیت به صورت یک جا کامپایل شدن زبان های کامپایلر در بخش خطایابی و رفع مشکل، نقص به حساب می آید. زیرا در زبان های مفسر هنگامی که برنامه خط به خط اجرا می شود، در هر بخشی از برنامه که مشکلی وجود داشته باشد، قابل پیدا کردن و رفع می باشد. اما در زبان های compiler برای رفع یک مشکل در کدها می بایست سرویس خود برنامه را مجدد بازیابی کرده، سپس خطا را پیدا و تصحیح کرد که این کار بسیار دشوارتر از کار با زبان های مفسری است.
معرفی زبان های مفسری و کامپایلری
از معروف ترین زبان های مفسری می توانیم به زبان های PHP، Perl، MATLAB، BASIC، Ruby، Python، Java Script اشاره کنیم.
همچنین معروف ترین زبان های کامپایلری می توان به زبان های Pascal، C#، C++، Java و … اشاره نمود.
بهترین زبان های برنامه نویسی سال 2021
·/strong>جاوا اسکریپت برای هشتمین سال متوالی محبوب ترین زبان برنامه نویسی بین توسعه دهندگان دنیا شناخته شده است. JavaScript که به اختصار JS نیز نامیده می شود، یکی از محبوب ترین زبان های برنامه نویسی است. جاوا اسکریپت زبانی سطح بالا، داینامیک، شیگرا و تفسیری است که از شیوههای مختلف برنامه نویسی پشتیبانی میکند. از این زبان میتوان برای برنامه نویسی سمت سرور (Server Side)، اپلیکیشنهای موبایل، بازی و اپلیکیشنهای دسکتاپ استفاده کرد. بنابراین میتوان اینگونه برداشت کرد که زبان برنامه نویسی جاوا اسکریپت، یک زبان جامع و کامل است.
· Swift: سوئیفت یک زبان برنامه نویسی است که توسط شرکت اپل ارائه شده و برای توسعه iOS، macOS، watchOS و tvOS استفاده می شود. سوئیفت برای توسعه سیستم عامل های ارائه شده توسط اپل به کار میرود. یکی از پرکاربردترین سیستم های در حال توسعه با این زبان IOS هست که بر روی iPhone های اپل در حال کار هستند. زبان برنامه نویسی سوئیفت در سال 2014 در کنفرانس جهانی توسعه دهندگان اپل موسوم به WWDC معرفی شد. در همان سال با یک بروز رسانی به نسخه 1.2 ارتقا پیدا کرد و در سال 2015 باز در کنفرانس WWDC به نسخه 2 بروز شد.در همان سال 2015 در نسخه 2.2 متن باز (Open Source) شد. باز در سال 2015 تحت لیسانس آپاچی ۲٫۰ در ۳دسامبر ۲۰۱۵ برای پلتفرمهای اپل و لینوکس عرضه شد.
· Scala: زبان برنامه نویسی Scala یک زبان برنامه نویسی با هدف کلی است که از برنامه نویسی کاربردی و یک نوع سیستم ایستا و قوی پشتیبانی می کند. بسیاری از تصمیمات طراحی Scala به صورت مختصر طراحی شده اند. کد منبع Scala به کد رمز گذاری جاوا وارد شده، به طوری که کد اجرایی حاصل در یک ماشین مجازی جاوا اجرا می شود. اسکالا قابلیت همکاری با زبان برنامه نویسی جاوا را فراهم می کند، به گونه ای که ممکن است کتابخانه هایی که به هر زبان نوشته شده اند به طور مستقیم به کد Scala یا Java مراجعه کنند.
· Go: زبان برنامه نویسی ساخته و توسعه داده شده توسط شرکت گوگل است. مترجم این زبان از گنو، لینوکس، مک او اس، ویندوز و انواع سیستم عامل های بی اس دی مانند FreeBSD پشتیبانی می کند. زبان گو به مرور به یکی از زبان های برنامه نویسی محبوب مبدل شده است.
· Python: زبان برنامه نویسی پایتون زبانی با یادگیری آسان محسوب میشود و از همین رو بسیاری از برنامه نویسهای تازهکار آن را به عنوان اولین زبان برنامه نویسی خود برمیگزینند، زیرا پایتون به عنوان یک زبان همهمنظوره ساخته و توسعه داده شده و محدود به توسعه نوع خاصی از نرم افزارها نیست. به بیان دیگر، می توان از آن برای هر کاری، از تحلیل داده گرفته تا ساخت بازی های کامپیوتری استفاده کرد.
یک گره جدول ، موجودی موجود در یک طرح گراف را نشان می دهد. هر بار که یک گره جدول ایجاد می شود ، همراه با ستون های تعریف شده توسط کاربر ، یک ستون ضمنی $node_id ایجاد می شود ، که به طور یونیک به یک مپ می شود. مقادیر $node_id به طور خودکار تولید می شوند و ترکیبی از object_id آن گره جدول و مقدار bigint تولید شده در داخل هستند. با این حال ، وقتی ستون $node_id انتخاب می شود ، یک مقدار محاسبه شده به شکل یک رشته JSON نمایش داده می شود. همچنین ، $node_id یک ستون کاذب است که به یک نام داخلی با رشته hex مپ می شود. وقتی $node_id را از جدول انتخاب کنید ، نام ستون به صورت $node_id_<hex_string> ظاهر می شود. بهتر است از نام ستون کاذب در کوئری ها برای رسیدن به $node_id داخلی و باید از استفاده از نام داخلی با رشته hex خودداری شود.
به کاربران توصیه می شود که در هنگام ایجاد جدول node ، constraint یا ایندکس یونیک به فرد را در ستون $node_id ایجاد کنند ، اما اگر یکی ایجاد نشود ، یک ایندکس nonclustered پیش فرض به طور خودکار ایجاد می شود. با این حال ، هر index در یک ستون کاذب گراف در ستون های داخلی زیر ایجاد می شود. یعنی ایندکسی که در ستون $node_id ایجاد شده است ، در ستون داخلیgragh_id_<hexstring> ظاهر می شود.
Edge Table (یال جدول)
یک یال جدول نشان دهنده یک رابطه در یک گراف است. یال ها همیشه دو گره (نود) را به هم متصل می کنند. یک جدول edge کاربران را قادر می سازد روابط many to many را در گراف مدلسازی کنند. یک یال جدول ممکن است هیچ attribute مشخص شده توسط کاربر را در خود نداشته باشد. هر بار که یال جدول ایجاد می شود ، همراه با attribute های تعریف شده توسط کاربر ، سه ستون ضمنی در یال جدول ایجاد می شود:
$edge_id : شناسه یونیک یک یال است . این ستون از ترکیب object_id جدول و یک مقدار bigint داخلی است. با این حال ، وقتی ستون $edge_id انتخاب می شود ، مقدار محاسبه شده ای به شکل رشته JSON نمایش داده می شود.
$form_id : node_id شناسه جدول نود که ارتباط از آن شروع شده را ذخیره می کند
$to_id: node_id شناسه جدول نود که ارتباط از تا آنجا ادامه دارد را ذخیره می کند
نود هایی که در یک یال آمده می تواند داده هایی که توسط داده های درج شده در ستون $from_id و $to_id اداره می شود را به هم متصل کند. در اولین نسخه ، امکان تعریف constraint برای یال جدول ها جهت محدود ارتباط با چند نوع نود وجود ندارد. یعنی یک یال می تواند هر دو گره(نود)ی را در گراف به هم وصل کند ، صرف نظر از نوع آن.
بسیاری از اوقات، فروش مستقیم از طریق نصب اپلیکشن منطقی به نظر نمی رسد. اما این بدان معنا نیست که اپلیکیشن های موبایل نمی توانند ارزش و خدمتی به کاربران خود ارائه دهند.
پرداخت درون برنامه ای، اشتراک و تبلیغات درون برنامه ای تنها راه کسب درآمد از اپلیکیشن ها نیست. بلکه بسته به نوع کسب و کار شما، مشتریانتان و برند شما، استراتژی های مختلفی وجود دارد که ارزش پیگیری را دارند.
اگر قصد کسب درآمد از اپلیکیشن موبایل خود را بدون مختل کردن تجربه کاربری دارید، ترکیبی از ۶ استراتژی زیر می تواند اثر بخش باشد:
پرداخت درون برنامه ای
این استراتژی اپلیکیشن شما را به یک کانال فروش تبدیل می کند. داشتن یک کانال فروش به تنهایی منجر به خرید توسط مشتری نمی شود. بلکه این کانال زمانی کاربر را به خرید هدایت می کند که بی عیب و نقص، راحت و لذت بخش تر از سایر کانال های فروش شما باشد.
پرداخت درون برنامه ای می تواند شامل فروش محصولات و خدمات یا باز شدن های فیچر های خاص اپلیکیشن های موبایل باشد.
اشتراک
بسته به نوع اپلیکیشن، اشتراک یک روش خوب برای ایجاد یک جریان درآمدی مداوم و قابل اعتماد است.
نکته کلیدی برای موفقیت روش اشتراکی، به روز و تازه نگه داشتن محتوا است. اگر محتوا به طور مداوم آپدیت نشود، مشتریان حاضر به پرداخت نخواهند شد. کوتاه کردن چرخه به روز رسانی، ارزش بیشتری برای مشتریان شما ایجاد کرده و آن ها را به بازدید از اپلیکیشن و سپری کردن زمان بیشتر در اپلیکیشن تشویق می کند.
تبلیغات درون برنامه ای
اگر پرداخت درون برنامه ای یا اشتراکی منجر به کسب درآمد قابل قبولی نشوند، تبلیغات جایگزین بسیار خوبی برای این روش هاست. مهمترین نکته در تبلیغات درون برنامه ای این است که توجه داشته باشید که این تبلیغات منجر به خراب شدن تجربه کاربر نسبت به اپلیکیشن نشود. اگر اطلاعات مشتریان خود را جمع آوری کنید، می توانید به آن ها تبلیغات بسیار هدفمند نشان دهید. نشان دادن تبلیغات غیر مرتبط به مشتریان ریسک از دست دادن آن ها را بالا می برد.
اسپانسری یا حمایت مالی
اگر در تبلیغات درون برنامه ای موفقیتی کسب نکردید و به دنبال یک استراتژی جدید هستید، با تبلیغ کنندگان برای حمایت مالی از اپلیکیشن خود مشارکت کنید. در این مدل، تبلیغ کنندگان به ازای انجام کارهای تعیین شده در اپلیکیشن شما، به کاربران پاداش می دهند. درآمد حاصل از پاداش های خرید، بین شما و تبلیغ کننده به اشتراک گذاشته می شود. این روش یک مرحله بالاتر از شخصی سازی تبلیغات بوده و باعث افزایش درگیری کاربر با اپلیکیشن و درآمد از طریق ارائه ارزش واقعی به مشتریان می باشد.
برچسب سفید
نوشتن اپلیکیشن های بزرگ کار سخت و زمان بری است. از این رو بسیاری از توسعه دهندگان، اپلیکیشن های سفید می نویسند و کد آن را به کسب و کار ها می فروشند تا آن ها نام تجاری و جزئیات خود را به آن اضافه کنند.
کسب درآمد از اطلاعات
با فروش مستقیم و غیر مستقیم اطلاعات کاربران اپلیکیشن نیز می توانید به کسب درآمد بپردازید. همچنین این اطلاعات می توانند در جهت اجرای کمپین های تبلیغاتی هدفمند استفاده شوند.
استراتژی های کسب درآمد از طریق اپلیکیشن های موبایل برای هر اپلیکیشن یکسان نبوده و از یک اپ به اپ دیگر متفاوت است. هر استراتژی ممکن است برای بعضی از انواع اپلیکیشن ها مناسب باشد. اما موضوعی که بدیهی است این است که برای کسب درآمد از طریق اپلیکیشن بهتر است از ترکیبی از روش های فوق استفاده شود.
فرادرس بی شک یکی از بهترین و بزرگترین وبسایت های آموزشی ایرانه. تقریبا آموزش هرچیزی رو که بخواید میتونید در این وبسایت پیدا کنید. فرادرس از بهترین مدرس ها برای آموزش هاش استفاده می کنه و با این که شاید در هر هفته چند آموزش منتشر می کنه، تولید آموزش در اون یک پروسه بسیار طولانیه. اول باید کارشناسان فرادرس شما را تایید کنن، بعد از سرفصل های آموزش شما خوششان بیادو تاییدش کنن، بعد شما ضبط را شروع کنید و به پایانش برسانیدش، بعد اونا ویدئو ها را از اول تا آخر تماشا و ویرایش کنن و بالاخره بعد از چند ماه آموزش منتشر شه. حالا تصورش را بکنید که این وبسایت و شرکتش میتونه چقدر بزرگ باشه و چه مدیرانی داره. بنیان گذاران این وبسایت بزرگ آقایان کلامی هریس و آقای اسماعیل آتشپز گرگی هستن. یکی از ایرادات بزرگ این وبسایت بروز نشدن آموزش هایشه که هر آموزش شاید هر 5 سال یک بار بروز شه، البته بروز هم که نه… یک آموزش جایگزین برایش میاد.
البته این را هم بگم که یکی از ویژگی های وبسایت فرادرس، ارزانی آموزش هاشه.
دکتر اسماعیل آتشپز گرگری (راست) و دکتر سیدمصطفی کلامی هریس (چپ) – بنیانگذاران فرادرس
تاپلرن هم یکی از وبسایت های بسیار خوب و عالی است که میتونید از اون استفاده بکنید. بنیان گذار این وبسایت جناب آقای ایمان مدائنی هست که خودم به شخصه عاشق آموزش هایش هستم. برعکس فرادرس آموزش های تاپلرن مدام بروز میشه. تاپلرن آموزش های رایگان با کیفیت و زیادی داره، ولی متاسفانه آموزش های غیر رایگان این وبسایت قیمت بالایی داره.
این وبسایت یکی از معروف ترین و معتبر ترین وبسایت های آموزش برنامه نویسی در جهانه که آموزش هاش به صورت متنی ارائه شده. برای استفاده از این وبسایت باید انگلیسی تون خوب باشه. چون بخش فارسی این وبسایت از مترجم گوگل استفاده می کنه که در یک کلام بگم پنچره.
بستگی به خودتون داره که کدوم رو انتخاب می کنید. ولی پیشنهاد من هر سه تاشونه. هیچ وقت نباید به یک منبع آموزشی اکتفا کرد و باید از همه منابع نهایت استفاده رو ببریم.
لطفا اگر از منبع آموزشی دیگری را میشناسید که از آن استفاده می کنید در بخش کامنت ها بنویسید.
یکی از مضوعاتی که همیشه روی آن تاکید دارم این هست که مهندس کامپیوتر با برنامه نویس فرق می کنددر این جا قصد دارم یک مثال عینی از این موضوع با شما دوستان مرور کنم
قبل از خواندن این مطلب بد نیست یکبار این مطلب را هم بخوانید
چندی پیش من برای موضوعی مجبور شدم یک نرم افزاری از ابتدا طراحی کنم.ما دو نیاز اصلی داشتیم
تبادل اطلاعات بر روی سوکت
پشتیبانی از موبایل و ویندوز
زبان های برنامه نویسی ابزار کار یک مهندس کامپیوتر هستند مثل خیلی از ابزارهای دیگر یک مهندس خوب باید ابزار خوبی هم برای کارش انتخاب کند
بعد از بحث و توافق سر نیازمندی ها و ساختار کلی سیستم ابتدا نیاز بود نیازمندی اول حل کنیم و به توافقی سر نحوه اجرای سوکت برسیم برای این کار من زبان برنامه نویسی پایتون انتخاب کردم چرا؟
مجموعه ای بی نظیر از کتابخانه ها را دارد
به دلیل بزرگی جامعه اش احتمالا یکی سوالات من را جواب داده است
درگیر پیچیدگی های زبان برنامه نویسی نخواهم شد
با استفاده از پایتون یک نرم افزار سرور ساده مشابه نیازمندی مان داخل پروژه ساختم همراه با یک کلاینت مشابه نیازمدی مان. بعد شروع به تبادل اطلاعات کردم تا با چالش های Socket programming آشنا بشم بعد از این که به این نتیجه رسیدم که هیچ یک از نیازمندی ها بی پاسخ نمانده است. حالا نیاز است به بحث پیاده سازی اصلی برسیم برای این که چهار ابزار داشتیم
Java
Golang
++C
Rust
ابتدای کار ++C به دلایل زیر کنار گذاشتیم
با دیدن چند بچمارک به این نتیجه رسیده بودیم که Rust ابزار بهتری هست
در مقایسه با Rust برنامه نویسی ست تری دارد
علاقه مند به یادگیری Rust بودیم
پس فقط سه ابزار ماند
Rust
شبیه ++C و سازه دست موزیلا، با هدف پروفورمنس و فرار از باگ هایی مثل Null Pointer و یک زبان شی گرا
Java/Kotlin
که احتمالا نیازی به معرفی ندارد ( کاتلین در عملکرد با جاوا تفاوتی ندارد)
Golang
که هدفش سادگی، پرتابل بودن است اما شی گرا نیست ( البته برای ما هم مهم نیست)
به همین دلیل دنبال مقایسه مختلفی گشتم و از قضا به یکباره این مقاله دیدم که دقیقا همین سه تا ابزار با همه مقایسه کرده بود!!
(TWL)TopWebLearning | کانال برنامهنویسی و تکنولوژی آموزش برتر وب
با سلام امروز میخوام یک کانال برنامهنویسی و تکنولوژی رو بهتون معرفی کنم که در تمام حوزه های تکنولوژی مطلب هایی مفیدی رو در خودش داره و روز به روز در حال آپدیت شدن هست و با دنبال کردن این کانال از تکنولوژی روز عقب نخواهید موند…
این کانال در حوزه های :
برنامهنویسی / تکنولوژی / کامپیوتر / طراحی / موبایل
برگشتیم مجدد با یک پنجشنبه عصر جذاب دیگه، البته چون پنجشنبه عصر تازه تاسیس شده، مطالبمونو فعلا همه روزهای هفته ممکنه منتشر کنیم.
خب عزیزان دلم، در مقاله قبلی راجع به مسیر وب کار شدن توضیحی دادیم، که گفتیم چقدر تمرین و صبر در این مبحث میان رشتهای لازم است. خواستم در این مقاله توضیح بدم که مسیر واقعا چیه و یک سری مطالبی رو هم خدمتتون توضیح بدم.
قبل از شروع این مطلب دوست دارم چند دقیقه به هیچ چیزی فکر نکنید و در خلوت کاملا فکر کنید، این مقاله سعی میکنه بدترین حالت رو در نظر بگیره، همینطور که توی ذات یک برنامه نویس، درنظر گرفتن بدترین حالته، اما خب شاید توی ایران شلترین حالت بتونه جوابگوی نیازها باشه ولی به هر حال، من طبق اصول رفتار میکنم و برام مهم نیست زیرآبی بازیا.
قبل از اینکه وارد وب بشید سوالاتی دارم که باید تو ذهنتون حلش کنید. هرکسی توی هر رشتهای فکر میکنه خیلی کار ارزشمندی داره و خب این شاید باعث بشه در حق دیگر کارها اجحاف بشه. یک مطلبی رو یکی از ناله کنان لینکدین منتشر کرده بود که نوشته بود:
دکتری بر خلاف مهندسی نیاز به خلاقیت و درک بالا و اینجور حرفا داره، دلیل جالبی هم داشت، اینکه دکتری هر روز مطالبش بروز میشه و نیاز به توانایی بالا و اینجور مسائل داره.
خواستم جواب خوبی بدم، ولی به قول مولانا: چون تو با بَد ، بَدکُنی ، پس فرق چیست. اینجا میگم که بروزتر از علم کامپیوتر و الکترونیک نیست. شایدم باشه اما من ندیدم. از این جهت میگم که فناوری اطلاعات از زمانی که به سمت کامپیوتر رفته، دنیای کامپیوتر خیلی سعی کرده که با نیازمندیها وفق پیدا کنه حتی همون دکتری. خلاصه که این مطلب برام جالب بود. برسیم به اون چندتا سوال:
شما از وب چی میخواید؟ پول!
فکر میکنید کار کم دردسریه؟
برید خارج براتون کار ریخته؟
میتونید فریلنسر کار کنید؟
توی شرکتها قربون صدقتون میشن؟
از وب چی میدونید؟
چقدر بررسی کردید که وب خوبه؟
شما بپرسید تا من جوابشو توی کامنتها بگم خدمتتون
به طور کلی درآمد در حوزه کامپیوتر خوبه، اما نسبت به چی؟ بله شاید نسبت به هرکاری که شما ازش بدتون بیاد، مثلا: رانندگی، مکانیکی، رفت و روب و …، اما قطع به یقین از نظر خیلی از افراد دیگه که این کارهای نامبرده رو دوست دارن، با مخالفت مواجه بشید. البته دوست دارم همیشه به کسانی که به خاطر وضعیت جامعه از سر اجبار به یک کاری رو آوردن رو نجاتشون بدم به همین خاطر سعی کردم همیشه در حد یک ربع نهایتا یک شخص رو ارشاد کنم و بهش پیشنهاد بدم، هر کسی رو که حس کرد توی این چهارچوب قرار گرفته رو یک ربع باهاش صحبت کنه. به اصل استمرار خیلی اعتقاد دارم. همینطور که توضیح دادم، درآمد یک مفهوم نسبیه فقط مختص کامپیوتر نیست. یک دلیل دیگه که باعث شده شما به سمت کامپیوتر بیاید، رسانهایه که توسط کامپیوتریا درست شده و خب همیشه ظاهرداری میکنن. البته اینم بگما اگر شخص کامپیوتری رو بهش پول ندید میذاره میره البته حواستون به سفتهها هم باشه، خب به دلیل سختی کاری هم که داره، معمولا توانایی کار کردن در روز بیشتر از ۱۰ یا ۱۲ ساعت رو دیگه نداره، صرفا باید بره خودشو بسازه برای روز بعد و همین مساله باعث شده که شادترین قشر کاری در دنیا شناخته بشن. این چیزی که میگم عرفه کاره و الا برای پیشرفت خیلی بیشتر باید تلاش کرد.
بر اساس اصل استمرار که شاید یک مفهومی باشه که خودم برای خودم ساختم یا شایدم واقعا وجود داشته باشه، اگر روزی یک ساعت برای کار مورد علاقتون وقت بذارید در سال میشه ۳۶۵ ساعت و همین مقدار از کسی که هیچ وقتی نمیذاره جلوترید منتها نه از کسی که توی این حوره فعالیت قوی داره خب بدهم نیست، حداقل توی این مدت با چالشهای کار آشنا میشید و شایدم دلتونو زد و به خاطرهها سپرده شد، حداقل میتونید بگید که من یک سال فعالیت در اون عرصه داشتم.
پلتفرمهای درآمدی از نظر فناوری اطلاعات و از نظر مباحث بازاری، به دو صورت قابل انجام هست:
شراکت در استارتاپها که برای کمتر کسی اتفاق میفته چون هر استارتاپ باید پول، علم و تیم بازاریابی قوی توش وجود داشته باشه.
کارمندی کار کنید که خیلیا اینکارو میکنن، همچنین درآمد خوبی داره، آرامش خاطر خوبی هم داره اما آرامش خاطر کارمندی کامپیوتری به خیلی چیزای دیگه بستگی داره.
اگر مبحث فناوری اطلاعات رو کنار بذاریم، میتونید فریلنس کار کنید، اما باور بفرمایید راه سختی در پیش دارید و در حد سه چهار ماه اگر میخواید توش سرمایه گذاری کنید، اینکارو نکنید. همون اصل استمرار رو پیش بگیرید. اصلا هر کاری دوست دارید بکنید.
از لحاظ دردسر باید بگم که به هزار و یک نفر باید پاسخگو باشید، به طوری که تیم بازاریابی هر روز مورد جدیدی رو گزارش میکنه، تیم تست هر روز باگ جدیدی و هیئت مدیره هر روز غر جدید. کافیه بخواید سیستم رو آپدیت بفرمایید یا خدایی نکرده، اطلاعاتی رو حذف کنید و نتونید بازیابی کنید، پروژه رو به کسی لو بدید یا پروژه مشابه شما بیاد بالا، خود ایرادات و باگهای برنامتون هم به کنار، همه ایناها مسئولیت سنگینی به دوش شما میندازه پس دوستان شل کار، این ذهنیت رو از خودتون دور بفرمایید. هیچ شرکتی در هیچ زمانی، قربون صدقه کارمنداش نمیشه یا بهتره بگم بی هدف. قشنگیه کار اینجاست که معمولا مدیریت شما همون رئیس حمال شماست.
برای خارج کار کردن هم بهتون بگم که، باید توی همین داخل ابتدا یک گلی به کله مبارک بگیرید و رزومه جمع کنید، کارهای کوچک و بزرگ ولی آنلاین میتونه به رزومه شما کمک کنه، البته خارج نرفتم نمیتونم چیز زیادی بگم ولی من خودم توی ذهنم هست که ریموت کار کنم، اینطوری خیلی بیشتر حال میکنم. شایدم دارم اشتباه میکنم.
این وب دو بخش داره front-end و back-end من فقط مورد دوم رو توضیح میدم، دخل و تصرفی ندارم توی فرانت.
خیلی خوشحال میشم توی اون تایمی که دارید برای تمرین توی وب میذارید، یکمی تئوری بخونید، به خدا جای دوری نمیرهها. اینقدر سریع نخواید کد بنویسید، به خدا توی کله پوکمون اگه تحلیل نکنیم چی میخوایم، کد چی میخوایم بزنیم؟ هجده چرخ کمه برای این مدل آدمای از خود راضی. راجع به http, dns, domain, host و browser چه چیزی میدونید که اینقدر مغرورتون کرده؟ برنامه نویسی چقدر بلدید؟
چقدر میتونید یک الگوریتم رو بهینه سازی کنید؟ آیا واقعا میتونید بین پلتفرمها برای ارتباطی پیدا کنید که به حل مسئلتون کمک کنه؟ راجع به بهینه سازی دیتابیس و سیستمعامل چطور؟ رابط خط فرمان یا CLI؟ چندتا معماری نرم افزار بلدید که بتونید زیر ساخت اپلیکیشن رو بچینید؟ اینها مهم نیست، چندتا روش بلدید که نرم افزارتون رو تست بگیرید؟ چقدر راجع به CI/CD میدونید؟ وب سرور چیه اصلا؟ این وب که میخواید کار کنید، با چی کار میکنه؟
بیخیال این مطالب بشیم. باید بفهمید که لیوان دستتون خالیه و باید دنبال پر کردنش باشید. مطالب بالا زیر یک سال فراگیری نمیشه یا بهتره بگم کمتر از دو سه جا کار کردن.
مباحث بالا شما رو آماده میکنه تا با محیط وب آشنا بشید. همچنین برای یادگیری برنامه نویسی باید بگم توی حوزه نرم افزار، کمه کم پنج سال زمان صرف یادگیری کردیم و تجربه. برای مباحث حوزه دیتابیس و دیگر مسائل باید علاوه بر مطالعه حتما کارآموزی هم انجام بدید. کارآموزی شما رو کاملا با مفاهیم آشنا میکنه همچنین میتونه کمکی باشه برای پیشرفت و آینده نگری شما.
قوی شدن شما، به کار خیلی زیادی از جانب شما وابسته است، من فقط نزد کسانی کار کردم که مسیر کاریشون خیلی پر از موانع بوده، موانع که نه، تجربیات زیاد. خودتونو توی گود کار بندازید، ببنید که رشدتون چند برابر میشه، سطحی نگاه کردن به قضایا کار انسانهای ضعیفه.
دیگه نمیدونم چی بگم، انشاءالله تا دلخوری بعد از جانب سطحی نگران، شما عزیزان دلم رو به خدای بزرگ میسپارم.
اگه بخوام در چند کلمه بگم؛ من همیشه دنبال کارآموزی تو شرکتهای مختلف بودم. اصلا مسائل مالی برام مهم نبود و فقط دوست داشتم یاد بگیرم که چجوری تو دنیای واقعی، اون بیرون، کار کنم. کار در دنیای واقعی و با شرایط واقعی کاملا متفاوت با پروژههای تمرینی هست و با چالشهایی آشنا میشیم که فقط در دنیای واقعی وجود دارن.
رفتار ما با کارفرما، رفتارمون با همکار و مدیرعامل از جمله چالشهایی هستن که در کارآموزی تجربه میکنیم.
دوران دانشگاه ۱ واحد کارآموزی داشتم ولی اصلا شرایط جوری نبود که بتونم تو حوزهای که خودم دوست دارم یاد بگیرم و فقط گذروندمش. شاید یکی از بزرگترین مشکلات دانشگاههای ما همین باشه که دوره کارآموزی خیلی سرسری گرفته میشه و به اندازه کافی بهش توجه نشده.
تا مدت زیادی کارم شده بود گشتن بین آگهیهای استخدام تا یه کارآموزی مناسب پیدا کنم و در این بین نکاتی رو یاد گرفتم که بد نیست شما هم بدونین:
۱. به هر آگهی ای اعتماد نکنین، خیلیا حتی نمیدونن چه نیرویی لازم دارن و فقط وقت و هزینه شما به هدر میره.
۲. بدونین که چه شرایطی براتون مناسبه و با چه میزان حقوقی میتونین کارآموزی رو شروع کنین.
۳. کارآموزی به معنی تنبلی نیست، باید خودتونو برای تلاش مداوم آماده کنین.
۴. آشنایی با محیط کار و همینطور همکاران برای هرکسی تجربه متفاوتی هست. سعی کنین شرایط رو بسنجین و اگه نتونستین با محیط کنار بیاین خودتونو اذیت نکنین و به فکر جای دیگه ای باشین.
۵. کاراموزی به معنای کار بدون حقوق نیست و اصلا خواستههای غیرمنطقی رو قبول نکنین.
با توجه به این موارد میتونین راحت تر برای شروع دوره کارآموزی تصمیم بگیرین پس حتما این نکات رو به یاد داشته باشین.