درس اول برنامه نویس شدن: programming logic

تبدیل شدن از کسی که هیچوقت دست به کد نبوده، به یک برنامه نویس حرفه‌ای، و احتمالا با درآمدِ خوب، می‌تواند هیجان انگیز باشد؛ اما چرا خیلی‌ها را می‌بینیم که در این مسیر، مایوس می‌شوند؟برنامه نویسِ خودآموز –self taught- بودن، موضوعی است خیلی‌ها به آن فکر می‌کنند. اینکه خودمان برنامه نویسی یاد بگیریم در نگاه اول به نظر ساده میاد. خیلی از برنامه نویس های موفق، تحصیلات مرتبط با این زمینه ندارند و خودشان یاد گرفته‌اند چطور کدنویسی کنند.افراد با ورود به فرآیند یادگیری برنامه نویسی؛ در این راه، خطاهای متعددی مرتکب می‌شوند؛ اما در این نوشته می خواهیم روی یک خطای خیلی مهم تمرکز کنیم.یک خطای اساسی که اگر واقعا آن را درک کنید و مراقبش باشید، بخش بزرگی از مشکلات تان در جاده برنامه نویس موفق بودن، حل خواهد شد. اما اگر این مشکل را به حال خود رها کنید، شاید سال‌ها در حال جان کندن برای برنامه نویس ماندن و برنامه نویسی کردن خواهید بود.بحث، سرِ یک فناوری، فریمورک، الگوی برنامه نویسی، ترفند مارکتینگ، قهوه خوردن یا ساعت خواب و بیداری نیست?این موضوعی ست که خودم بعنوان یک برنامه نویسِ خودآموز، سالها درگیرش بوده ام؛ بارها در بین دوستانم شاهد آن بوده، هر روز بین صحبت‌های بیشتر کسانی که سوال می‌پرسند و مشاوره برنامه نویسی می‌خواهند می‌بینم.این مانع برای بیشتر افراد در فرایند برنامه نویسی؛ مخصوصا خودآموزها، وجود دارد. سعی کنید قبل از اینکه برنامه‎نویسی کنید یا کاری در این رشته بگیرید، این نکته را کاملا درک کنید.درس مهم شروع یادگیری برنامه نویسی: منطق برنامه نویسی1. مهمترین و بزرگترین اشتباه تقریبا تمام افرادی که می‌خواهند وارد دنیای برنامه نویسی شوند، این است:آنها فکر می‌کنند دانشِ فرد درباره نحوِ یک زبان برنامه نویسی (syntax) امکانات (features) و قوانین (rules) آن زبان برنامه نویسی، تنها چیزی است که باعث شده او بتواند در این رشته کار بگیرد و دستمزد خوبی داشته باشد?از پرتکرارترین سوالاتی که معمولا دوستانم برای شروع برنامه‌نویسی می‌پرسند چیزهایی مثل این است:بهترین زبان برنامه نویسی کدومه (با نگاه درآمدی)؟چند روز (یا هفته) زبان پایتون رو خوندم. حالا باید چیکار کنم؟دوره دات نت رو کامل دیدم، حالا چطور کار پیدا کنم؟کتابی که معرفی کردی خوندم، ولی گیج هستم، نمیدونم چطوری یک اپلیکیشن بسازم.یا فرض کنیم شخص یادگیری برنامه نویسی به زبان PHP را تازه شروع کرده:کدوم بخش ها و فانکشن های php مهمتره تا زودتر کار بگیرم؟و این ها نشان دهنده ی این بزرگترین پیش فرض اشتباه درباره مهمترین کاری است که برای شروع برنامه نویسی باید انجام داد.آیا ما باید سینتکس –نحو- یک زبانِ برنامه نویسی را بدانیم؟ بلهآیا باید امکانات، فریمورک ها و جزئیات زبان برنامه نویسی مان را خوب بشناسیم؟ البته که بلهبعنوان یک برنامه نویس، قطعا به دانستن سینتکس و امکانات زبان خود نیاز داریم، اما قرار نیست دیکشنری یا داکیومنتِ متحرک زبان پایتون، یا جاوا اسکریپت باشیم.بخش مهمترِ کار این است که دانش و آگاهی مان از این زبان را بصورت یک ابزار در اختیار بگیریم، تا خروجیِ مورد انتظار را خلق کنیم.و خروجی مورد انتظار در بیشتر مواقع چیزی ست مثل، ساختن یک اپلیکیشن وب یا موبایل، یک بازی، تغییر و توسعه یک پروژه از قبل طراحی شده، پیدا کردن و رفع باگ‌های پروژه و..رسیدن به این سطح، تنها با خواندن داکیومنت های یک زبان و دانش شما درباره خودِ زبان برنامه نویسی به دست نمی‌آید؛ باید بدانید چطور با کدهایی که می‌نویسید، برنامه‌هایی بسازید که کار خاصی را انجام بدهند.مثلا، فرض کنید من دستمزد خیلی خوبی به شما میدهم تا یک برنامه to do list برایم بنویسید.نتیجه مورد انتظار من این است که اپلیکیشنی داشته باشم که امکان ثبت نام و لاگین داشته، فهرست جدید بسازم، فهرست کارهایم را تغییر بدهم، و همه چیز برای استفاده های بعدی ذخیره شود.اگر شما مدتی روی html , css , php مطالعه کردید، ویدیو دیده اید، مطلب و داکیومنت خوانده اید، و همه چیز را درباره این زبان‌ها -ی نشانه‌گذاری و برنامه‌نویسی- می‌دانید؛ این دانش، تضمین کننده این نیست که بدانید چگونه همه چیز را باید کنار هم به کار بگیرید، تا این اپلیکیشن را برایم بسازید.شما باید به این توانایی برسید که الگوریتم هایی بسازید و کدهایی بنویسید که ماشین –معمولا کامپیوتر- آن را درک، و نتیجه مورد انتظار را ارائه کند?2. منطق برنامه نویسی یعنی چه؟منطقِ برنامه نویسی (programming logic) ، یعنی اینکه بدانید چطور زبان برنامه نویسی (و ابزارهای آن) را استفاده کنید تا قوانینی برای ماشین بسازید تا با دنبال کردن آنها، به نتیجه‌ی مورد انتظار برسد.همانطور که برای یک مکانیک، دانستن اسم و مشخصات یک ابزار یا قطعه یدکی، اصل داستان نیست. مهم‌تر این است که بعنوان یک مکانیک خودرو، بدانید این ابزار یا قطعه چه کار میکند، چطور با بقیه قطعات و بخش ها هماهنگ می‌شود، و چطور باید آن را تعویض، تعمیر و استفاده کنید تا در نهایت خودروی زیر دست تان به خوبی کار کند.فرض کنید در محله خود در حال قدم زدن هستید. شما این منطقه را خیلی خوب می‌شناسید. یک غریبه جلو آمده و آدرس یک فروشگاه خاص را از شما می‌پرسد. شما دقیقا می‌دانید این فروشگاه کجاست. فورا در ذهن تان آدرس را پیدا میکند: نبش خیابان چهارم.شما وقتی این را گفتید انتظار دارید که شخص تشکر کرده و به سمت مقصد حرکت کند. اما ایشان غریبه است و می‌خواهد که بگویید خیابان چهارم دقیقا کجاست و چطور باید به آنجا برود؟حالا شما مجبور هستید داخل ذهن خود، یک نقشه از محله و خیابان‌های اطراف بسازید، و مسیر رسیدن از اینجا تا نبش چهارم را ببینید، تا بتوانید به آن غریبه توضیحش دهید.مثلا می‌گویید: مستقیم برو، اولین فرعی بپیچ به راست و بعد توی اولین میدان بپیچ به چپ و بعد از 2 تا تقاطع میرسی به تقاطع خیابان چهارم?حال آن شخص می‌تواند با داشتنِ این دستورات، که به وی میگوید چطور از اینجا به فروشگاه برسد، حرکت کرده و به هدف برسد.این پروسه که ممکن است فقط چند میلی ثانیه از ذهن شما زمان بگیرد، در واقع خیلی فوق العاده است. ما با زبان انسانی به یک شخص دیگر یاد می‌دهیم چطور به یک مقصد برسد.2.1. اما این چطور به کامپیوتر و برنامه‌نویسی ربط دارد؟در واقع زمانی که برنامه نویسی می‌کنیم، به کامپیوترها یک لیست از چیزها و کارهایی می‌دهیم که آن‎ها را دنبال کنند و آنها دقیقا دستورات را دنبال خواهند کرد.چیزی که باید درباره کامپیوترها یادمان بماند، و شاید شما خود اگر قبلا کمی کدنویسی کردید، متوجه این نکته شده باشید، این است که کامپیوترها گاهی خنگ هستند.کامپیوترها هر چیزی که به آنها گفته شده انجام می‌دهند؛ حتی اگر باگ یا خطایی ایجاد شود، اپلیکیشن، یا حتی کل سیستم یا سرور قفل (کرش) کند.حتی ممکن است یک اشتباه، باعث از دست رفتن داده‌های حساس یا شاید سوختن سخت افزار های گران‌قیمتِ سرور شود! ?اینجا جایی ست که کار جدی می‌شود، و جایی ست که بعنو ان کدنویس وارد سطح بالاتری از برنامه نویسی می‌شوید.3. برای شروع برنامه نویسی، چه باید کرد؟ابتدا مبانی برنامه نویسی، و همراه با آن سینتکس، داکیومنت‌ها و قوانین یک زبان برنامه نویسی را تقریبا خوب بخوانید؛ بعد شروع کنید به ترکیب ابزارها و دانش و کسب تجربه با ساختن اپلیکیشن‌های کوچک؛ و بعد به مرور پروژه های پیچیده تر?منطق و مبانی برنامه نویسی، چیزی است که فارغ از زبان برنامه نویسیِ خاص، باید روی آن تمرکز کنید. یعنی اینکه هنگام مواجهه با هر مساله و نیاز، بدانید چطور کدهایی بسازید.خیلی از تازه کارها و دانشجویان برنامه نویسی، در ابتدای کار، وقتی به مشکلی برمی‌خورند، مثلا وقتی بازی ای که طراحی کرده اند به مشکل میخورد، به جای بررسی منطق برنامه نویسی‌شان، و بررسی الگوریتم ها و کدهایشان، بیشتر فکر می‌کنند چیزهایی هست که در آن زبانِ خاص نمی‌دانند؛ در حالی‌که تقریبا در بیشتر مواقع، به اندازه کافی دانش فنی دارند، فقط روی موضوع درستی تمرکز نکرده اند.تا می توانید روی منطق، مبانی برنامه نویسی، ساختمان داده ها و الگوریتم مطالعه و تمرکز کنید.4. چطور می توانم منطق برنامه نویسی‌ام را بهبود بدهم؟چگونه می‌توانم برای ماشین ها، دستوراتی بهتر بنویسم که دنبالش کنند؟ راه بهتر شدن در این مسیر، این است: چیزی بسازید و بعد دوباره چیزی دیگر بسازید.در ابتدا اپلیکیشن‌هایی خیلی ساده بسازید? برای خودتان پروژه های خیلی کوچک تعریف کنید. پروژه هایی که انقدر کوچک و ساده باشند که فقط یک روز یا چند روز زمان برای انجامشان لازم باشد?به مرور که پیشرفت کردید، شروع کنید به پروژه هایی کمی بزرگتر. در این مسیر همزمان با درک بهتر سینتکس و ابزارهای زبان برنامه نویسی، می‌بینید که الگوریتم ها و منطق بهتری برای خروجی مورد انتظار ارائه می‌کنید.4.1 ویدیو و کتاب مرتبطمی‌توانید از توصیه‌های ارائه شده در این ویدیو هم برای بهبود مهارتهای منطق برنامه نویسی تان کمک بگیرید. (بابت لهجه هندی استاد، پوزش می‌خوام?)مرور کتاب ها و جزوه های مبانی برنامه نویسی می توانید مفید باشد. در این موضوع، نگاهی به این کتاب هم خالی از لطف نخواهد بود:کتاب programming logic and design برای منطق برنامه نویسیپس همزمان با مطالعه تئوری، یادگیری ابزارها و سینتکس زبان برنامه نویسی تان، روی ساختن پروژه‌های تمرینی (با آنچه که می‌دانید) وقت بگذارید و مدام برای حل مساله های بیشتر، و بعد، حل بهترِ همان مساله ها، و کسب تجربه تلاش کنید.این یکی از مهمترین و سخت ترین کارهای شما بعنوان دانشجوی برنامه‌نویسی خواهد بود.این مقاله را هم بخوانید: بهترین زبان برای شروع برنامه نویسی کدام است؟