Thursday, July 2, 2015

Software Design Pattern সম্পর্কে জ্ঞান থাকা জরুরী

ভালো প্রোগ্রামার হতে হলে Software Design Pattern সম্পর্কে অন্তত বেসিক জ্ঞান থাকলেও থাকা জরুরী ।
শুধু কিছু if … else conditional statement দিয়ে লাইনের পর লাইন কোড লিখতে পারার মানে এই নয় যে … আপনি ভাল প্রোগ্রামার … ভাল প্রোগামার হতে হলে কোড কোয়ালিটি মেইনটেইন করাও অনেক গুরুত্বপূর্ণ বিষয় … ভাল ডিজাইন প্যাটার্নে করা প্রোগ্রামিং কোডের কোয়ালিটিই আলাদা …
.
Wikipedia এর মতে “In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design”
.
ভাল Design Pattern-এর অন্যতম বৈশিষ্ট্য, এটি হবে language independent … অর্থাৎ আপনি কোন Pattern Design করলেন তবে আপনি PHP প্রোগ্রামার হন, বা C++ বা C# বা Java যে ল্যাঙ্গুয়েজেই কোড লিখেন না কেন … কিছু ক্ষেত্র বাদে আপনার ডিজাইন করা প্যাটার্ন সবার সাথেই ইমপ্লিমেন্ট করা যাবে …
.
সহজ ভাষায়, Software Design Pattern হল আপনার প্রোগ্রামিং এর সমস্যার reusable অংশ গুলো চিহ্নিত করে ছোট ছোট ব্লকে ভাগ করে নেয়া, যখন যেটা প্রয়োজন তখন সেটা ব্যবহার করা …
.
আপনি প্রতিদিন ঘুমান, রান্না-বান্না করেন, খাওয়া-দাওয়া করেন আর টয়লেট করেন … এটা আপনার প্রতিদিনের reusable কাজ ...
.
এখন আপনি যদি আপনার বাড়িকে সুবিশাল একটা হল রুম বানিয়ে সেখানেই থাকা শুরু করেন, মানে এক রুমেই রান্না-বান্না করেন, এক রুমেই ঘুমান, খাওয়া-দাওয়াও সেই রুমেই ... আবার টয়লেটও সেখানেই করেন … তাহলে কোন সমস্যা নেই ...
.
অথবা যদি বাড়িটা ছোট ছোট ব্লকে ভাগ করে নেন ... মানে এক ব্লক আপনার কিচেন, এক ব্লক আপনার বেড রুম … অন্য একটা ব্লকে ডাইনিং ... আর একটা ব্লক বাথরুম বা টয়লেট … তাহলে সেটা ভাল হবে না প্রথমটা? …
.
আমি যদি আপনাকে নির্দেশ দেই, যাও ভাত রান্না কর … তবে বড় হল রুমের ক্ষেত্রে কি হবে ? … আপনি পুরো রুম জুড়ে আতিপাতি করে খুঁজবেন চুলা কই, রান্নার হাড়িটা বা কই, চাল কোথায় রাখা আছে? … চামচ রাখা কোথায়? ... পানি কই পাব ইত্যাদি ইত্যাদি …
.
আর যদি দ্বিতীয় ক্ষেত্রে একই নির্দেশ দেই … তবে আপনি সোজা রান্না ঘরে চলে যাবেন … কারণ আপনি জানেন ভাত রান্নার প্রয়োজনীয় সব উপকরণ আপনি সেখানেই সাজানো-গোছানো পাবেন …
.
ভাত হয়তো দুই ক্ষেত্রেই রান্না হবে … কিনতু পারফরমেন্স কোন ক্ষেত্রে ফাস্ট এন্ড বেস্ট হবে সেটাতো বুঝাই যাচ্ছে, তাই না ? … এটাই হল Pattern Design এর মহাত্ম … একটা বাড়ির কোথায় কি হবে তা যেমন নির্ধারণ করেন একজন Building Architect … ঠিক তেমনি Pattern Design হল Software Architect দের হাতিয়ার …
.
আবার বড় হলের ক্ষেত্রে যদি এমন হয় আপনার গোসল করার শাওয়ার লিক করেছে … তবে দেখা যাবে পানি পুরো হলে ছড়িয়ে পড়েছে … আপনাকে শাওয়ার মেরামত করলেই শুধু হবে না সেই সাথে পুরো রুমে ছড়িয়ে পড়া পানি ড্রেনেজও করা লাগবে ... আর দ্বিতীয় ক্ষেত্রে আপনাকে শুধু বাথরুমে গিয়ে শাওয়ার মেইন্টেইন করাই এনাফ … কারণ পানি ড্রেনেজের সিস্টেম সেখানে আগে থেকেই করা আছে …
.
ঠিক সেই রকম Software Pattern Design এর ক্ষেত্রে কোন কোড ব্লকে সমস্যা বা Bug দেখা দিলে শুধু সেই ব্লকে Fix করলেই কাজ শেষ … পুরো সিস্টেম নিয়ে ভাবতে হবে না ...
.
এভাবেই Software Pattern Design আপনার জটিল কাজ গুলোকে সহজ করে দেয় ... সেই সাথে encapsulation ও ভাল SDP এর বৈশিষ্ট্য … আমি আপনাকে নির্দেশ দেব যাও ভাত রান্না কর … আপনি রান্না ঘরে গিয়ে রান্না করে নিয়ে আসবেন … আপনি কিভাবে রান্না করে আনলেন সেটা আমার ভাবনার বিষয় নয় … কারণ আমি আগেই ভাত রান্নার সব উপকরণ রান্না ঘরে সিস্টেম করে সাজিয়ে রেখেছি … এখন আমি শুধু নির্দেশ দেব আর আপনি কাজ করবেন ... এটাই encapsulation grin emoticon ...
.
1994 সালে Erich, Richard, Ralph ও John মিলে একটি বই লিখেন যার নাম ছিল ... Design Patterns - Elements of Reusable Object-Oriented Software … এই চারজনকে একসাথে বলা হয় Gang of Four বা সংক্ষেপে GoF … GoF pattern এর শ্রেণী ভাগ গুলো হল … Creational, Structural ও Behavioral … রয়েছে বিভিন্ন রকমের SPD যেমনঃ Facade, Bridge, Adapter ইত্যাদি ...
.
থীমফরেস্টে Kriesi এর থীমগুলো খুব বেশি সেল হয় তাই না … অথবা Total, Impreza, Brroklyn, Kleo থীম গুলোর সেল অনেক বেশি … এক একটার ইনকাম কোটি টাকারও উপরে তাই না ? … শুধুই কি ডিজাইন আর মার্কেটিংই সব ? … না আসলে এদের কোড কোয়ালিটিও এ প্লাস গ্রেড …
.
WPExplorer থীমগুলো দেখেন ডিজাইনের দিক দিয়ে খুবই সাদামাটা … কিনতু সেল ভলিউমও কি সাদামাটা ? … WPExplorer এর AJ এর যে ওয়ার্ল্ড ক্লাস কোড কোয়ালিটি কিনতু একজন অথর হিসেবে তার সাফল্যের অনেক বড় কারণ … AJ এর থীম গুলোর পারফরম্যান্সই আলাদা … এজন্যই সিরিয়াস বায়াররা যাদের ওয়েব ডেভেলপিং জ্ঞান খুব ভাল ... থীম কেনার ক্ষেত্রে এদের গুরুত্ব দেয় বেশি ...
.
তাই আপনি যদি ভাল আইটেম ডেভেলপ করতে চান, WP Plugin Developer বা Theme Developer হোন বা হোন Android বা iOS Apps Developer … আপনার প্রোগ্রামিং জ্ঞানকে নেক্সট লেভেলে নিয়ে যেতে ডিজাইন প্যাটার্ন নিয়ে পড়াশোনা করুন … দেখবেন আপনার কাজ গুলো কত সোজা হয়ে যাচ্ছে … সেই সাথে বেড়ে যাচ্ছে কোড কোয়ালিটি ও সফটওয়্যার পারফরমেন্স …
.
ডিজাইন প্যাটার্ন নিয়ে যাদের কোন পড়াশোনা নেই … PHP এর বেসিক লেভেল পার হয়ে Advanced লেভেলে আছেন … থীমফরেস্টে আরও ভাল করতে চান তারা চাইলে ঢু মেরে আসতে পারেন নিচের লিঙ্কে …
.
TutsPlus এর এই টিউটোরিয়ালে PHP তে ব্যবহৃত ৭ ধরণের Design Pattern নিয়ে খুবই সুন্দর ভাবে আলোচনা করা হয়েছে … আপনার প্রোগ্রামিং জ্ঞানকে আরও ধারাল করুন … নিয়ে যান নেক্সট লেভেলে ... http://goo.gl/pqTC5T

*Written by- Din Muhammad Sumon

No comments:

Post a Comment