امروز در این مقاله قرار است در مورد مهارت های لازم برای برنامه نویسی صحبت کنیم، شما برای حرفه ای شدن در کارتان باید مهارت های روز دنیا را فرا بگیرید.
Docker and Kubernetes
من معتقدم که هر برنامهنویس، مهندس نرم افزار، دانشمند داده و حتی مدیر پروژه باید درباره کانتینرها و ابزارهایی مانند Docker و Kubernetes بداند.
اکنون ثابت شده است که پلتفرمهایی مثل Docker نه تنها به توسعهدهندگان کمک میکند تا برنامههای خود را در یک محیط واحد، تست کنند، بلکه فرایند توسعه را نیز سادهتر میکنند.
با کمک Docker میتوانید به سرعت، برنامه خود را با تمام dependency های آن توسعه دهید، همچنین امکان ایزولهسازی پردازش را هم برای شما فراهم میکند. به همین ترتیب، Kubernetes هم یک ارکستراتور است، آن را به سطح بعدی می برد و می تواند کانتینرها را برای شما مدیریت کند.
این به این معناست که دیگر نیازی به نگرانی در مورد مقیاس پذیری برنامه خود ندارید و Kubernetes یا K۸ میتواند این کار را برای شما به صورت خودکار انجام دهد. پس پیشنهاد میکنم داکر و کوبرنتیز را بیاموزید، این کار نه تنها در شغل فعلی شما بلکه بعدا هم به شما کمک خواهد کرد.
پلتفرمهای ابری (AWS ، GCP یا Azure)
جدای از کانتینرها، Cloud چیز دیگری است که من فکر میکنم هر توسعهدهنده نرمافزار و دانشمند داده، باید در سال ۲۰۲۰ یاد بگیرند. شرکتها درهرسایز و دامنهای اکنون برای صرفهجویی در هزینه و مقیاس پذیری بهتر محیطهای خود را به Cloud تغییر میدهند ، این بدان معنی است که دیر یا زود، شما باید با برنامههای بومی cloud کار کنید.
یادگیری پلتفرمهای Cloud، مانندPlatform (GCP)، Amazon Web Service (AWS) ،Google Cloud یا Microsoft Azure شما را یک قدم جلوتر از رقبای خود قرار میدهد. البته شما نیازی به یادگیری همهی آنها ندارید و یادگیری یکی نشان دهنده تسلط شما بر پلتفرم های ابری است و در آینده اگر نیاز به دیگر پلتفرم ها داشته باشید به راحتی می توانید آموزش ببینید.
برای شروع، پیشنهاد میکنم AWS را بیاموزید زیرا محبوبترین و بالغترین پلتفرم ابری است و تقاضای زیادی برای توسعهدهندگان و مدیرانسیستم با دانش AWS وجود دارد.
ساختار داده و الگوریتم
برای برنامه نویس شدن باید ساختار دادهها و الگوریتمها را به خوبی بدانید. هیچ راه فراری هم نیست. اینها یکی از مباحث مهم هر مصاحبه شغلی برنامه نویسی هستند و بدون آگاهی از ساختار دادههای اصلی مانند یک آرایه، linked list ،map ،set، نوشتن یک برنامه در دنیای واقعی امکان پذیر نیست.
به همین دلیل است که هر برنامهنویس باید در دوره علوم رایانه، تلاش جدی برای یادگیری ساختار داده و الگوریتم انجام دهد.
ابزار کنترل ورژن (Git)
از سورس کنترل برای ذخیره کد استفاده میشود؛ اگر میخواهید یک کدنویس یا توسعهدهنده نرمافزار شوید، باید با ابزارهای کنترل ورژن مانند Git و SVN آشنا شوید.
خوشبختانه گیت و گیتهاب بازار را بهبود بخشیدهاند و اکنون بیش از ۷۰٪ سازمانها از Git استفاده میکنند. از این رو یادگیری Git بهترین گزینه است و باید تلاش کنید تا آن را به خوبی یاد بگیرید. باید با مفاهیم کنترل ورژن پیشرفته مانند branching و merging و همچنین خود ابزار، راحت باشید؛ هم در خط فرمان و هم با استفاده از GUI. برای مبتدیان، GitHub Ultimate: Master Git و GitHub مکان مناسبی برای شروع است.
یک ویرایشگر متن (VIM)
بهعنوان یک برنامهنویس، یک روز هم نشده که من هنگام کار از ویرایشگر متن استفاده نکرده باشم. این یکی از ابزارهای ضروری حتی برای افرادی غیر از برنامهنویسان و هر کسی است که با کامپیوتر کار میکند است.
من اکثرا از NotePad در ویندوز و VIM در لینوکس استفاده کردهام ، اما امروزه شما از نظر ویرایشگرهای پیشرفته مانند Sublime، NotePad ++ ، VS Code گزینههای زیادی در دسترس دارید که عملکردی مانند IDE را ارائه میدهند.
IDEs
IDE های مدرن مانند Eclipse و ..... مهمترین ابزار برای هر برنامه نویسی است. برای برنامهنویسان C ،C ++ و C # انتخاب واضح است، ویژوال استودیو؛ برای توسعهدهندگان پایتون، Jupiter Notebook هر روز بهتر و بهتر میشود.
برای برنامهنویسان جاوا، سه IDE اصلی برای انتخاب وجود دارد، مانند Eclipse ،NetBeans، IntelliJ
بانک اطلاعاتی و SQL
SQL یک پایگاهداده کلاسیک است، بیش از ۳۰ سال است که وجود دارد، و فکر میکنم ۳۰ سال دیگر هم در این حوزه خواهد بود. با توجه به این که پایگاه داده همه جا هست، از یک برنامهنویس انتظار میرود که با مفاهیم اساسی بانک اطلاعاتی مانند عادی سازی و طراحی جدول به همراه SQL آشنا باشد.
بسیاری از بانکهای اطلاعاتی مانندOracle ، MySQL ، Microsoft SQL Server ، PostgreSQL و … وجود دارد؛ اما دانستن فقط یکی از آنها کافی است. نکته مهم این است که شما باید با بانک اطلاعاتی آشنا باشید. شما باید بدانید که چگونه دادهها را وارد کنید/ بهروز کنید/ حذف کنید و برای آن کوئری بنویسید.
آگاهی از مفاهیم پیشرفته مانند join کردن یک aggregate function، یک امتیاز بزرگ است و اگر میخواهید آن را یادبگیرید، The Complete SQL BootCamp مکان بسیار خوبی برای شروع است.
لینوکس
مانند SQL، یونیکس نیز تست زمان را تحمل کرده است. همچنین بیش از ۳۰ سال است که از آن میگذرد و امیدوارم تا سالهای آینده نیز همینطور پابرجا باشد. از آنجا که بیشتر اوقات، برنامهنویسان مجبورند با UNIX کار کنند، مانند سرورهای لینوکس، داشتن دانش خوب از خط فرمان linux، از آنها انتظار میرود.
لینوکس این امکان را به شما میدهد تا به طور موثر کار کنید. میتوانید مصرف CPU و مموری را چک کنید، بفهمید که درون سیستم چه میگذرد و کارهای بسیار زیاد و پیشرفتهای را انجام دهید.( خواهش میکنم ویندوز رو رها کنید و بیاید سمت لینوکس تا لذت واقعی رو تجربه کنید، اگه میخواهید در حوزهی برنامه نویسی پیشرفت کنید و حرفهای بشید، با ویندوز به هیچ جایی نمیرسید. از من گفتن بود! )
مبانی شبکه
دنیای امروز دنیای بههم پیوستهای است و هر کجا که بروید، شبکههای رایانهای را پیدا خواهیدکرد، از خانهای که در آن از WIFI استفاده میکنید گرفته تا مدرسه، دانشگاهها و دفاتر، از شبکه محلی (LAN) تا اینترنت استفاده میکنند.
بیشتر برنامههایی که شما خواهید نوشت نیز، مستقل نخواهند بود و شما باید برنامهای بنویسید تا مشتریان بتوانند از هرجای دنیا به برنامه شما دسترسی پیدا کنند.
نکته اصلی این است که شما باید اصول اساسی شبکه را درک کنید، برنامهای را توسعه بدهید و از برنامه خود پشتیبانی کنید.
یک زبان اسکریپتی یاد بگیرید
چرا باید یک زبان اسکریپتی یاد گرفت؟ آیا نمیتوان از همان زبان برنامه نویسی به عنوان زبان اسکریپتی استفاده کرد؟
خوب، بدون شک برخی از زبانها وجود دارد که مناسب برای هر دو کدنویسی OOP و اسکریپتی، مانند Python است؛ بههمین دلیل از شما خواستم حداقل آن را یاد بگیرید. اما اگر زبانی را نتوانید برای هر دو مورد استفاده کنید چه؟ اینجاست که اگر یک زبان اسکریپتی بلد باشید، کار شما راحت خواهد شد.