یادگیری برنامهنویسی، مفاهیم و فعالیتهای تولید نرم افزار
در پستهای قبلی(درجا نزن، وارد دنیای برنامه نویسی شو!، برنامه نویسی، کمی بیشتر، کمالگرایی یا مشکل آفرینی؟ در برنامه نویسی)، بنده سعی کردم ضمن آشنایی بیشتر با مفهوم برنامهنویسی در مورد چالشهای یادگیری اون صحبت کنم، در اون پستها تلاش کردم به صورت انگیزشی و واقعگرایانه کسانی که نسبت به آموزش برنامه نویسی علاقمند هستند رو برای اینکار بیشتر ترغیب کرده و راهکارهایی برای رهایی از سختهای مسیر یادگیری ارائه دهم. در این پست و پستهای بعد از این سعی خواهم کرد بدور از دغدغههای مطرح و بدون اصل قرار دادن یک زبان خاص، مفاهیم ابتدایی و مقدماتی مقوله برنامهسازی رو توضیح بدم. امیدوارم بتوانم مسیر مفیدی برای مبتدیان نشان دهم.
تعریف برنامه نویسی
در اصل برنامه نویسی، مجموعهای از فعالیتهایی است که به تولید یک نرمافزار میانجامد، و نرمافزار خود مجموعهای از دستورات نوشتاری (که اصطلاحاً به آنها کد میگوییم) است که با ترتیبی مشخص اجرا میشوند تا درنهایت کار[های] خاصی را انجام دهد. در یک تعریف دیگر، تبدیل فرمول حل یک مسئله به فرایندی که کامپیوتر قابل اجرای آن باشد را برنامه نویسی میگوییم.
مجموعه فعالیتهای تولید نرمافزار
در تعریف فوق، متوجه این موضوع میشویم که تولید نرمافزار مشمول مجموعهای از فعالیتها و مفاهیم است که انجام و سرهم بندی همه آنها درنهایت منجر به تولید نرمافزار میشود، در اینجا با این مفاهیم کمی آشنا میشویم.
1- فعالیت مهندسی نرمافزار، قبل از اینکه شروع به نوشتن یک برنامه کنیم، ابتدا مسئله مربوطه را تجزیه و تحلیل کرده، نیازمندیهای آن را شناخته و سپس تیم توسعه را تشکیل داده، نحوه مدیریت تیم و چگونگی برنامه ریزی روند توسعه رو تعیین میکنیم و بعد از آن شروع به نوشتن برنامه مد نظر میکنیم، به مجموعه همه این فعالیتها “مهندسی نرمافزار” میگوییم که نسبت به اندازه پروژه ممکن است زمان و فعالیتهای بیشتری لازم داشته باشد، اما در مورد برنامههای بسیارکوچک و تمرینی(آموزشی) تقریباً همه فعالیتهای فوق بصورت ذهنی و سریع صورت میگیرد.
2- فعالیت معماری نرمافزار، نرمافزارهای بزرگ و متوسط معمولاً از چندین بخش تشکیل شده و هر بخش هدف یا اهدافی از نرمافزار را تأمین میکنند، معماری نرمافزار تعیین میکند برنامه به چند جزء تقسیم شده و این بخشها چگونه باهم در ارتباط باشند، معماری نرمافزار در واقع ساختار اصلی برنامه را تعیین میکند و حتی تا حدودی تعیین کننده تکنیکها و تکنولوژیهای بکار رفته در تولید نرمافزار نیز میباشد. معماری نرمافزار و مهندسی نرمافزار دو مفهوم کلیدی در تولید برنامههای بزرگ (تجاری و صنعتی) میباشند. گاهی ممکن است معماری زیر مجموعه مهندسی تعریف شود و گاهی بالعکس، با این حال پرداختن دقیقتر به این مفاهیم خارج از حوصله این نوشتار میباشد، اما توصیه میکنم پس از یادگیری مقدمات برنامهنویسی حتماً این مفاهیم رو مورد مطالعه قرار دهید.
3- مفهوم الگوریتم و فعالیت الگوریتم نویسی، برای نیل به هر هدفی چندین عمل پشت سر هم انجام میگیرد که اصطلاحا به آنها گامهای انجام یک کار میگوییم، برای حل یک مسئله نیز مجموعهای از عملیات انجام میشود، اگر این عملیات را به ترتیب و پشت سرهم بنویسیم بصورتی که بتوانیم مراحل حل یک مسئله را به صورت کاملاً روشن و بدون ابهام توضیح دهیم به آن الگوریتم گفته میشود. درواقع الگوریتم مجموعهای از دستورالعملهاست که به ترتیب خاصی اجرا میشوند تا مسئلهای را حل کنند. میتوانیم برای همه اتفاقات و کارهای روزمرهای که انجام میدهیم الگوریتمی را تصور کرده یا بنویسیم، در برنامهنویسی اصلیترین مهارتی که باید کسب کرد، توانایی حل مسئله میباشد و تمرین مداوم الگوریتم نویسی میتواند کمک بزرگی برای تقویت این مهارت باشد.
4- فعالیت کدنویسی، پس از انجام امورات مهندسی نرمافزار، و تعیین معماری نرمافزار گروه برنامهنویسی شروع به نوشتن دستورالعملهایی در کامپیوتر میکنند که این دستورالعملها طی فرایندی تبدیل به 0-1(کدهای قابل فهم کامپیوتر) میشوند تا نرمافزار نهایی تولید گردد. نوشتن الگوریتم در اصل یک گام قبلتر از کدنویسی میباشد، اما در عمل برنامهنویسان حرفهای معمولاً فقط برای مسائل سخت اقدام به نوشتن الگوریتم برروی کاغذ میکنند، و برای مسائل راحتتر یا تکراری الگوریتم را سریع و در ذهن خود تداعی میکنند. درواقع برای برنامهنویس شدن هم باید آنقدری تمرین کرد که بتوان خیلی سریع برای بسیاری از مسائل یک الگوریتمی تصور کرد.
5– مفاهیم زبان برنامه نویسی، کامپایلر و مفسر، همانطور که در بخش قبل توضیح داده شد، برنامهها درواقع دستورالعملهایی هستند که در کامپیوتر نوشته میشوند و در نهایت تبدیل به زبان قابل فهم کامپیوتر میشوند، حال سوال این است که، این دستورالعملها چی هستند؟ چه کسی آنها را تعیین کرده و توسط چه چیزی تبدیل به کدهای قابل فهم کامپیوتر(0-1) میشوند؟ زبان برنامهنویسی، درواقع یک ابزار نرمافزاریای است که مجموعهای از دستورالعملهای استاندارد شده را در اختیار شما قرار میدهد که بتوانید با نوشتن آنها به ترتیب خاص، یک نرمافزاری رو تولید کنید. این دستورالعملها معمولاً بسیار نزدیک به زبان محاورهای ما(انگلیسی) میباشد، که توسط کامپایلر یا مفسر به زبان قابل فهم کامپیوتر(0-1) تبدیل میشود. پس با تعاریف ارائه شده، کامپایلر یا مفسر، ابزاری هستند که کدهای نوشته شده با یک زبان برنامه نویسی را تبدیل به کدهای صفر و یک قابل فهم برای کامپیوتر میکنند، فرق بین کامپایلر و مفسر در این است که مفسر دستورات را خط به خط تبدیل کرده و اجرا میکند، حال آنکه کامپایلر ابتدا همه کدهای نوشته شده را یکجا تبدیل کرده و سپس برنامه را اجرا میکند.
6– فعالیت تست نرمافزار، بعد از اینکه برنامه نوشته شد، باید بتواند در زمان بهرهبرداری امور مربوطه رو به درستی و با صرف هزینهای قابل قبول انجام دهد، برای برآورده شدن این هدف، باید از همان ابتدای نوشتن برنامه، بخشهای مختلف نوشته شده مورد آزمون قرار گیرند تا اشکالات احتمالی رفع گردند، تست نرمافزار سطوح، روشها و مراحل مختلفی دارد.
7- نصب، بعد از اینکه نرمافزار تولید و آماده بهرهبرداری شد باید بتواند روی کامپیوتر مقصد اجرا شود و همچنین کاربر بتواند از آن استفاده کند، لذا نصب را میتوان شامل تهیه یک ابزاری/هایی برای نصب نرم افزار روی کامپیوتر مقصد، آموزش کاربران نرم افزار و تدوین یک برنامه برای پشتیبانی و رفع مشکلات احتمالی است که ممکن است در آینده رخ دهد.
برنامه آموزشی مقدماتی
از آنجایی که برنامهنویسی درواقع حل یک مسئله و توانایی تبدیل فرایند حل مسئله به یک نرمافزار میباشد، پس مهمترین مهارتهایی که برای برنامه نوشتن نیاز است، یادگیری روشهای مختلف حل مسئله و تبدیل آن راهحلها به صورت قابل فهم کامپیوتر میباشد. یادگیری الگوریتم نویسی و تمرین و ممارست در آن میتواند قدرت حل مسائل شما و مهارت شما را در تبدیل حل مسئله به شکل قابل فهم کامپیوتر، افزایش میدهد، شما باید نحوه جریان اطلاعات در کامپیوتر، کدبندی دادهها و مفاهیم ابتدایی ریاضی ازجمله مبناهای عددی را یاد گرفته و صاحب مهارت کافی باشید. با مطالعه کتابهای مربوط به مبانی کامپیوتر شما با مفاهیم اولیه کامپیوتر و مبناهای عددی آشنا خواهید شد، برای یادگیری الگوریتمنویسی هم کتابهای مختلفی در بازار موجود است که میتوانید تهیه کنید، کتابهای بیشماری نیز وجود دارد که میتوانید از روی آنها زبانهای مختلف برنامه نویسی را یاد بگیرید.
اهداف آینده
اگر فرصت باشد و خدا قوتی دهد، در پستهای بعدی سعی خواهم کرد مفاهیم ابتدایی کدنویسی و الگوریتم نویسی رو توضیح دهم، تا خوانندگان بتوانند بدون وابستگی به یک زبان برنامه نویسی خاص بامفاهیم کلی آشنا شده و توانایی حل مسائل ابتدایی را بدست آورند، هرکسی بعد از آموزش مفاهیم اولیه و کسب مهارت در حل مسئله، میتواند در زمینه مورد علاقه خود شروع به فعالیت کرده، مفاهیم مربوطه را یادگرفته و اقدام به تولید نرمافزار در زمینه مورد نظر خود کند.