به اعماق نگاه کردن

هر چه در جزییات عمیق تر شویم چیزی نمی بینیم جز نقطه های سادهسلام امیدوارم که حالتون خوب باشه،امروز میخوایم در مورد مسیر یاد گیری برنامه نویسی و اهمیت یادگیری مبانی پایه صحبت کنیم.اولین تجربه برنامه نویسی من مربوط به دوران دبیرستان میشه، زمانی که برای اولین بار با ویژال بیسیک اشنا شدم. یه زبان خیلی قدیمی که فک نکنم همین الانشم چیز زیادی ازش به خاطرم باشه. تا مدت های طولانی تنها شکل برنامه نویسی که برای من قابل تصور بود برنامه نویسی نرم افزار های ویندوزی بود. یعنی یک برنامه ای که یک رابط کاربری ویندوزی داشته باشه و بتونه که کارهای خاصی رو انجام بده. یادم میاد که اولین برنامه ای که قصد نوشتنش رو داشتم برنامه ای بود که بتونه به مدرسه کمک کنه که ساعت های درسی رو مرتب کنه(اما هیچ وقت کاملش نکردم /: ) و مدت تقریبا طولانی توی این مسیر سرگردون بودم تا این که با برنامه نویسی و همزمان با فریم ورک لاراول اشنا شدم . بنظرم دیگه قرار بود که برنامه نویس وب بشم و بعد از یه مدت کلی ازش پول درارم. ولی برنامه نویسی وب هم تا مدت طولانی یک برزخ برای من بود و از یک جا به بعد متوجه شدم که مناسب من نیست. این اتفاقات باعث شد که تقریبا تا یک مدت طولانی از برنامه نویسی دور باشم. و سراغ کامپیوتر نرم. این قضیه ادامه دار بود تا اینکه بعد کنکور وارد دانشگاه شدم. ترم اول دانشگاه درسی به اسم مبانی برنامه نویسی کامپیوتر داشتیم.این درس برای خیلی ها که داخل رشته های مهندسی مشغول به تحصیل هستند اولین تجربه اشنایی با برنامه نویسی هست. و تقریبا درس سختیه. عموما داخل این درس زبان c تدریس میشه. تنها چیزی که در مورد این درس میتونم بگم اینه که از همون ابتدا مسیر اشتباهی شروع میکنه به جای اینکه به سوالات اصلی بچه ها در مورد برنامه نویسی جواب بده. سوال هایی را جواب میده که اصلا برای اونها سوال نبوده به اون ها نشون میده که چطور از خط فرمان یک متغیر دریافت کنند. ولی به اون ها نمیگه که اصلا چه نیازی به استفاده از خط فرمان هست. به اونها نشون میده که چیزی به اسم اشاره گر( pointer) وجود داره که به قسمتی از حافظه اشاره میکنه. ولی به اونها نمیگه که این حافظه چیه، از کجا میاد،و اصلا چه نیازی یه این کارها هست. برای نسلی که بازی هایی مثل کالاف دیوتی و... و با فوتوشاپ کارکرده ،اون کارها احمقانه به نظر میرسید ولی این روال معمول نظام اموشی ما هست که جواب سوالاتی رو به ما میگه که اصلا برامون سوال نبوده. منم از این قضیه دل زدگی جدا نبودم به نظرم زبان C تاریخ مصرف گذشته بود. امکان شی گرایی نداشت. ارایه هایی داشت که امکان تغیر سایز نداشتن . کارکردن با کنسول برام بی معنی بود. دوران کرونا زمان بسیار خوبی برای من بود که بتونم یک زبان جدید شروع کنم. و من پایتون انتخاب کردم. بنظرم پایتون انتخاب درستی بود، پایتون زبان ساده و سر راستی هست. کاربرد عمومی داره برای اکثر کاربرد های معقول شما میتونید که یک کتابخونه برای اون پیدا کنید و بسیار سطح بالا که به شما کمک میکنه که هر اون چه رو که فکر میکنید پیاده کنید.و این زمان زمانی بود که تصور من از برنامه نویسی هم تغیر کرد ،من به این نتیجه رسیدم که شما برای اینکه برنامه نویس باشید نیاز ندارید که حتما اپ اندرویدی بنویسید یا سایت بسازید و یا نرم افزار ویندوزی بسازید. برنامه نویسی یک ابزاره ، که بستگی به هر شغل و موقعیت میتونه برای شما مفید باشه.برنامه نویس بودن به شما کمک میکنه که فکر منظم ومنطقی تری داشته باشید، تصمیماتون کمتر باگ بخوره :)برای مثال در زمینه تخصصی من مهندسی برق، در ساخت مدارات مخابراتی وتحلیل های اون کاربرد های زیادی داره. در زمینه مهندسی پزشکی شبکه های عصبی در تحلیل سیگنال های مغزی به ما کمک میکنند.در کاربرد های علمی برنامه نویسی نعمت بزرگی برای شماست که با اون سیگنال ها رو تحلیل دسته بندی و از اون ها نتایجی رو استنتاج میکنیم.ولی مبحثی که میخواستم امروز بیشتر در مورد اون صحبت کنم فواید عمیق تر شدن هست. ماجرا از یکی از واحد های درسی دانشگاه به اسم طراحی مدارات منطقی شروع شد. این درس از مفهوم گیت های منطقی شروع میشه و تا انتها با استفاده از قوانین جبر بول مدارات ساخته میشه که کاربرد های خاصی رو انجام بدن. مثلا جمع کردن و شمردن و ذخیره کردن. اگر که بخوام در مورد حس این درس صحبت کنم . اینه که حس جالبیه ادم احساس میکنه که کاپوت یک کامپیوتر بالا زده و داره ریز جزییات برسی میکنه. و ادم حس میکنه که پرده از خیلی جزییات برداشته میشه.و همین باعث شد که به فلسفه وجود زبان C پی ببرم و اون بیشتر درک کنم. و متوجه بشم که دلیل سادگی اون نزدیک بودن بسیار زیاد به سخت افزاره و این که از کنار هم قرار دادن این ابزار های کوچیک شما امکان خلق کردن چیز های بزرگی رو دارید(مثلا لینوکس :)). مفهوم صحبتم این نیست که شما هم به زبان C سوییچ کنید، نه ! منظورم اینه که شما در هر زمینه و رشته ای که مشغول فعالیت هستید سعی کنید، مدتی یک بار هم که شده به فلسفه و مفاهیم ریشه ای اون کار هم نگاهی بندازید. تاریخچه اون کار بدونید . بدونید که دلیل استفاده از فلان سینتکس خاص یا فلان کتاب حونه خاص در کدتون چیه. اگر قصد داشتید که با استفاده از زبان یا ابزار یا ... کدتون پیاده سازی کنید . باید چقدر متفاوت فکر میکردید. خب امیدوارم که برای شما مفید بوده باشه.