সফটওয়্যার ইঞ্জিনিয়ারিং যেমন শেখানো হয় পুরোপুরি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এবং বিশ্বের 'প্রাকৃতিক' অবজেক্ট-ওরিয়েন্টেড দৃষ্টিভঙ্গিতে মনোনিবেশ করা। একটি বিশদ পদ্ধতি রয়েছে যা বর্ণনা করে যে কীভাবে কোনও ডোমেন মডেলকে ক্লাস মডেলে রূপান্তর করতে পারে বিভিন্ন পদক্ষেপ এবং ব্যবহারের ক্ষেত্রে-চিত্র বা শ্রেণিকেন্দ্রের মতো অনেকগুলি (ইউএমএল) শিল্পকর্ম। অনেক প্রোগ্রামার এই পদ্ধতির অভ্যন্তরীণ করেছেন এবং স্ক্র্যাচ থেকে কোনও বস্তু-ভিত্তিক অ্যাপ্লিকেশন কীভাবে ডিজাইন করবেন সে সম্পর্কে একটি ভাল ধারণা রয়েছে।
নতুন হাইপ হ'ল ফাংশনাল প্রোগ্রামিং, যা অনেক বই এবং টিউটোরিয়ালে শেখানো হয়। তবে ফাংশনাল সফটওয়্যার ইঞ্জিনিয়ারিংয়ের কী হবে? লিস্প এবং ক্লোজার সম্পর্কে পড়ার সময় আমি দুটি আকর্ষণীয় বক্তব্য নিয়ে এসেছি:
কার্যকরী প্রোগ্রামগুলি প্রায়শই উপরের নীচে নীচে বিকাশ করা হয় ('লিস্পে', পল গ্রাহাম)
কার্যকরী প্রোগ্রামাররা মানচিত্র ব্যবহার করে যেখানে ওও-প্রোগ্রামাররা অবজেক্ট / ক্লাস ব্যবহার করে ('জাভা প্রোগ্রামারদের ক্লোজার', রিচ হিকলির আলাপ)।
সুতরাং একটি কার্যকরী অ্যাপ্লিকেশন, যেমন লিস্প বা ক্লোজারে পদ্ধতিগত (মডেল-ভিত্তিক?) ডিজাইনের পদ্ধতি কী? সাধারণ পদক্ষেপগুলি কী কী, আমি কোন শৈল্পিক জিনিসগুলি ব্যবহার করব, কীভাবে আমি সমস্যার স্থান থেকে সমাধানের জায়গাতে ম্যাপ করব?