سلام. من روزبهم، دانشجوی ارشد مهندسی کامپیوتر گرایش نرمافزار. به سنم نمیخوره که چنین مطلبی بنویسم و عنوان این مطلب هم برای خودم عجیبه ولی یکسری توصیه دارم براتون که میتونه کمککننده باشه. شاید هم نباشه و بهم خواهید گفت و هممون یاد خواهیم گرفت.
بر خلاف مطلبهای دیگه که توی ویرگول مینویسم از ابتدا، این مطلبها ظرف چند ماه، توی یه کانال تلگرامی نوشته شده با آدرس زیر. اگر دوست داشتی اونجا هم میتونی منو دنبال کنی.
https://t.me/terminal_stuff
اما برسیم به توصیهها:
حتما سعی کنید برای برنامهنویسی جای نشستنتون مناسب و راحت باشه.
به چند تا دلیل:
شمایی که میگی نه من از هفته دیگه درست میشینم پشت میز، با شما هم هستم.
سعی کنید لپتاپ (بدون لوازم جانبی) سیستم اصلیتون برای کار نباشه. برای اینکه حالت پشت لپتاپ نشستن برای سلامت خوب نیست. در واقع معمولا اینطوریه که دستاتون به هم نزدیکه. همچنین مانیتورش نزدیک سطح میزه و گردنتون هم اذیت میشه. حالا اگه بذارید روی پاتون که دیگه مشکلاتش زیاد گفته شده. صفحه نمایش کوچک هم میتونه برای چشماتون خوب نباشه.
برای بهبود وضعیت:
https://ergonomictoolbox.com/ergonomics/5-reasons-why-laptops-are-bad-for-your/
برای editorتون ارزش قائل باشید و بهش مسلط باشید.
چرا:
چطوری:
قسمت آخر (برای اینکه تو این مطلب از vim هم اسمی آورده باشم)
ابزارتون آگاهانه انتخاب کنید. قرار نیست چون همه از ابزارهای Jetbrains یا VS code استفاده میکنن شما هم استفاده کنید. البته که احتمالا کیفیت خوبی هم داره ولی تنها انتخاب نیست. حتی اگه از اونا استفاده میکنید میتونید شخصیسازی کنید.
ادیتورهای دیگهای هم هستن که میتونید تا انتها شخصیسازیشون کنید و قابلیتهای مورد نیاز رو به شکل مورد نیازتون بهشون اضافه کنید. Vim و neovim و emacs نمونههای مهم هستن. شخصیسازی به شما کمک میکنه به بهرهوری بیشتری برسید. البته که باید دقت کنید خود شخصیسازی هم ازتون وقت میگیره.
کلیدواژهی lsp هم مدنظر داشته باشید. به کمک این استاندارد (که ٰVS Code استانداردش کرد) ابزارهای auto complete مختلف (در واقع language server) تحت این پروتکل با ادیتور صحبت میکنن و میتونید از موتور اتوکامپلیتی که برای ادیتور شما نیست هم به راحتی استفاده کنید. چون همگی از یک پروتکل واحد پشتیبانی میکنن.
سعی کنید علمتون رو ترویج کنید. با فقط برای خودتون نگه داشتن یه مزایایی به دست میاد ولی ترویجش هم مزایایی داره.
+ برای بقیه مفید باشید: خودتون چقدر از Stackoverflow استفاده کردید؟ چقدر فیلم های جادی رو دیدید؟ (به طول مثال) همین چنل رو چرا دنبال میکنید؟
+ برای آینده شغلیتون مفید باشید: اگر به دیگران چیزی یاد بدید، برای خودتون برند شخصی ساختید. یه جور نمونه کار میشه. براتون موقعیتهای شغلی (نه فقط معلمی) هم میاره به زودی.
+ برای مشکلات بعدیتون مفید باشید: شاید به نظر بیاد احتمالش کمه ولی برای من که کم پیش نیومده که به یکی از مطالب قبلیم سر بزنم و مرور کنم. ما فراموشکاریم و اتفاقا چیزایی که یه زمانی خودتون نوشتیم بهترین چیز برای یادآوری اون موضوعه. چون به زبون خودمونه. به چشم جزوه نوشتن بهش نگاه کنید.
اما چه کارهایی میتونی بکنیم؟ اینا نظرات منه، قطعا میشه بهتر و کامل ترش کرد. استقبال میکنم.
نمونه چیزایی که مناسب نیست:
در کل به نظرم بهترین جا همون خانواده stack exchange ئه، هرچند که یه مقدار شروعش ترسناکه چون وقتشون و کیفیت کار براشون مهمه پس مهربون نیستن.
به عنوان نکته آخر هم سعی کنید تو کمک به دیگران، همچنان برای وقت خودتون ارزش قائل باشید و کار تکراری نکنید. اگر جواب سوالی جایی هست، شما دوباره جواب ندید. اگر با سرچ میتونه به مطالب قابل قبولی برسه شما دوباره وقت نگذارید.
یه عبارتی به کار میبرن به اسم «ماهیچهی خلاقیت»، تعبیرش هم اینه که هرچی بیشتر از خلاقیتتون استفاده کنید مثل یه ماهیچه قویتر میشه. برای برنامهنویسی هم به این ماهیچه نیاز داریم که بتونیم مسائل رو حل کنیم. البته منظورم این نیست که باید خودمون ایده بزنیم که یه درخت باینری رو برعکس کنیم، برای همین کارهای روتین هم نیاز به ایده داریم.
حالا چطوری ایده بزنیم و تمرین خلاقیت کنیم؟
مثلا دارن دوربین زیر نمایشگر میسازن، فکر کنید که چطوری چنین چیزی ممکنه؟ یا چرا ممکن نیست؟
مثلا صفجه نمایش لمسی میسازن، بهش فکر کنید چطوری ساخته شده؟ بعد برید سرچ کنید که واقعا چطوری ساخته شده.
یا مثلا یه برنامه هست که مصرف جوهر پرینتر رو کم میکنه، اول فکر کنید چطوری کار میکنه بعد برید سرچ کنید.
مثلا موتور هواپیما ایده کارکردش چطوریه؟ آیا میشه تو ماشین لباسشویی هم استفاده بشه؟ تو ابمیوه گیری چی؟ اگه بخواد بشه چطوری میشه؟ اگه قطعا نمیشه چرا قطعا نمیشه؟
این دو تا مطلب هم جالب بودن. مثلا ایدهی ۶ کلاه رو مطرح کرده بود یکیش.
این قبوله که عمدهی کار برنامهنویسها پشت کامپیوتره اما یه قسمت مهمش هم اینه که بدونیم پشت کامپیوتر چیکار باید بکنیم. و معمولا این دونستنه از تعامل با آدمهای دیگه به دست میاد. حالا چه مدیر پروژه یا کارفرما یا مشتری یا ...
باید سعی کنیم مهارتهای نرممون رو هم تقویت کنیم. مثلا یه موردش که خیلی به من کمک میکنه اینه که بعد از یه بحث، جمعبندی خودم از صحبت رو به طرف میگم ببینم موافقه یا نه. خیلی اوقات موافق نیست و آدم تعجب میکنه!
یه سری از این موارد توی کتاب «کدنویس تمیز» هست.
پیگیر best practice ها باشید ولی آگاهانه بشکنیدشون.
بهروشها یا همون best practice ها کارهایی هستند که خوبه انجام بدیم و احتمالا اگه انجام ندیم داریم اشتباه میکنیم. پس میتونن به یه برنامه نویس تازه کار کمک کنن تا اصطلاحا idiomatic کد بزنه.
مثال ساده ش میتونه این باشه که اگه یه دستور یه بار قراره اجرا بشه لازم نیست ببریمش توی یه do while که شرطش falseئه.
اما آگاهانه شکستن به این معنیه که اگه یه مدت با این کار کردید و خبره شدید اگرچه «کلا اون رو اجرا میکنید» اما اگه جایی دقیقا میدونید دارید چیکار میکنید اشکالی هم نداره شکستنش. مثلا همین مثال بالا یه کاربرد معتبر داره و استفاده هم میشه.
یا مثلا گوتو رو تاکید دارن استفاده نکنیم اما برنامهنویس های خیلی خفن سی (مثلا کد sudo یا kernel یا ...) رو مینویسن از گوتو استفاده میکنن. اما اونا حواسشون هست و بهجا دارن اون قاعده رو میشکنن.
میشه گفت اگه یه پترن عجیب ببینیم دو حالت داره. یا طرف خیلی حرفهایه و میدونه داره چیکار میکنه یا خیلی تازه کاره و نمیدونه داره چیکار میکنه.
لازمهی نوشتن کد خوب اینه که کد خوب دیده و خونده باشید. الان هم توی دورهای هستیم که میلیونها خط کد آزاد توی گیتهاب هست و خودنشون میتونه خیلی مفید باشه براتون. مثل یه نویسنده که کتاب خوب زیاد میخونه.
برای شروع هم میتونید پروژههای متوسط یا حتی کوچک رو با یه زبون مورد علاقهتون پیدا کنید و برید سراغشون. کارهای مختلفی میشه کرد مثلا کامپایل کردن سورس کد و دیدن نحوه کامپایل. یا پیدا کردن main برنامه و دنبال کردن نحوه صدا کردن باقی توابع. یا مثلا یه کارکرد خاص برنامه که به نظرتون نسبتا ساده و جالبه رو بگردید و پیدا کنید که چطوری پیاده سازی شده. مثلا توی پروژهی تلگرام دسکتاپ (که البته پروژه بزرگیه و برای شروع مناسب نیست)، قابلیت فولدرها چطوری پیاده سازی شدن.
دانش نامرتبط با موضوع اصلیتون داشته باشید. حتی اگر اقیانوسی به عمق یک سانت شوید. البته نمیگم هیچ موضوعی رو عمیق بلد نباشید. بلکه اینجا فرض میکنم تو یه موضوع خبره هستید. حالا برای ادامهی راه توصیه میکنم: