টপ-ডাউনটি আপনার জানা জিনিসগুলি বর্ণনা করার বা আপনি ইতিমধ্যে নির্মিত জিনিসগুলিকে পুনর্নির্মাণের দুর্দান্ত উপায়।
টপ-ডাউন বৃহত্তম সমস্যাটি হ'ল প্রায়শই কেবল "শীর্ষ" থাকে না। সিস্টেমটি বিকাশকালে এবং ডোমেন অন্বেষণ করার সময় সিস্টেমটি কী করা উচিত সে সম্পর্কে আপনার মন পরিবর্তন করবেন change কীভাবে আপনার প্রারম্ভিক বিন্দু এমন কিছু হতে পারে যা আপনি জানেন না (যেমন আপনি সিস্টেমটি কী করতে চান)?
একটি "স্থানীয়" উপরে ডাউন একটি ভাল জিনিস ... কোডিংয়ের আগে কিছু চিন্তা করা স্পষ্টভাবে ভাল। তবে খুব বেশি চিন্তাভাবনা করা এবং পরিকল্পনা করা নয়, কারণ আপনি যা কল্পনা করছেন তা আসল দৃশ্য নয় (যদি আপনি ইতিমধ্যে সেখানে না থাকেন, অর্থাত আপনি যদি নির্মাণ না করে থাকেন তবে পুনর্নির্মাণ করছেন)। গ্লোবাল টপ-ডাউন যখন নতুন জিনিস তৈরি করা ঠিক বোকামি।
নীচের অংশটি (বিশ্বব্যাপী) হওয়া উচিত যদি না আপনি সমস্যাটির 100% না জানেন তবে আপনার কোডিং করার জন্য কেবলমাত্র সলিউশন সমাধান প্রয়োজন এবং সম্ভাব্য বিকল্প সমাধানগুলির সন্ধানের জন্য আপনার যত্ন নেই।
লিস্প অ্যাপ্রোচ হ'ল ডিস্টিলড ডাউন-আপ। আপনি কেবল নীচটি তৈরি করেন না তবে ইটগুলি যেমন প্রয়োজন তেমন আকার দিতে পারেন। কিছুই স্থির হয় না, স্বাধীনতা মোটামুটি। অবশ্যই স্বাধীনতা দায়িত্ব গ্রহণ করে এবং আপনি এই শক্তির অপব্যবহার করে ভয়ঙ্কর জিনিসগুলি তৈরি করতে পারেন।
তবে ভয়ঙ্কর কোড যে কোনও ভাষায় লেখা যেতে পারে। এমনকি যে ভাষাগুলি মনের খাঁচা আকার ধারণ করে, এমন প্রত্যাশার সাথে ডিজাইন করা হয়েছে যে এই ভাষাগুলি দিয়েও বানররা ভাল কর্মসূচি চালু করতে পারে এবং চালিয়ে যেতে পারে (এমন একটি ধারণা এতগুলি স্তরের যাতে এটি কেবলমাত্র এটি সম্পর্কে চিন্তাভাবনাও ব্যথা করে)।
আপনার উদাহরণটি একটি ওয়েব সার্ভার সম্পর্কে। এখন ২০১২ সালে এটি একটি সু-সংজ্ঞায়িত সমস্যা, আপনার অনুসরণ করার জন্য চশমা রয়েছে। একটি ওয়েব সার্ভার কেবল একটি বাস্তবায়ন সমস্যা। বিশেষত যদি আপনি কোনও ওয়েব সার্ভার লেখার লক্ষ্য রাখেন যা সেখানে উপস্থিত অন্যান্য গাজিলিয়নের ওয়েব সার্ভারের সাথে যথেষ্ট পরিমাণে সমান হয় তবে কিছু মিনিটই বাদে কিছুই সত্যই অস্পষ্ট নয়। এমনকি আরএসএ সম্পর্কে আপনার মন্তব্য এখনও একটি সুস্পষ্ট সংজ্ঞায়িত সমস্যা, আনুষ্ঠানিক স্পেসিফিকেশন সহ কথা বলছে।
একটি সুস্পষ্ট সংজ্ঞায়িত সমস্যা, ফর্মাল স্পেসিফিকেশন এবং ইতিমধ্যে জানা সমাধানগুলির সাথে কোডিং কেবল বিন্দুতে সংযোগ করা হচ্ছে। উপরে ডাউন এটি জন্য ঠিক আছে। এটি প্রজেক্ট ম্যানেজার স্বর্গ।
অনেক ক্ষেত্রে তবে বিন্দু সংযোগের জন্য কোনও প্রমাণিত সুপরিচিত পদ্ধতির ব্যবহার নেই। আসলে খুব প্রায়ই বিন্দু কি তা বলা শক্ত হয়।
ধরুন উদাহরণস্বরূপ, আপনাকে কোনও মুদ্রিত উপাদানের অংশগুলি কাটাতে একটি স্বয়ংক্রিয় কাটিয়া মেশিনকে নির্দেশ দিতে বলা হয়েছে যা তাত্ত্বিক পুনরাবৃত্তি লোগোর সাথে পুরোপুরি মানায় না। আপনাকে মেশিনের মাধ্যমে নেওয়া সামগ্রীর অংশ এবং ছবি দেওয়া হবে।
একটি প্রান্তিককরণ নিয়ম কি? তুমি ঠিক কর. প্যাটার্ন কী, কীভাবে এটি উপস্থাপন করবেন? তুমি ঠিক কর. অংশগুলি সারিবদ্ধ কিভাবে? তুমি ঠিক কর. অংশগুলি "বাঁকানো" হতে পারে? এটি নির্ভর করে, কিছু না এবং কিছু হ্যাঁ, তবে অবশ্যই খুব বেশি নয়। যদি উপাদানটি গ্রহণযোগ্যভাবে কাটাতে কোনও অংশের জন্য খুব বেশি বিকৃত হয় তবে কী করবেন? তুমি ঠিক কর. সমস্ত উপাদান রোল কি এক? অবশ্যই তা নয়, তবে আপনি প্রতিটি রোলের জন্য প্রান্তিককরণের নিয়মগুলি মানিয়ে নিতে ব্যবহারকারীকে ত্রুটি করতে পারবেন না ... এটি ব্যবহারিক হবে না। ক্যামেরা দেখছে কোন ছবি? উপাদান, এর অর্থ যাই হোক না কেন ... এটি রঙ হতে পারে, এটি কালো রঙের উপর কালো হতে পারে যেখানে কেবল হালকা প্রতিবিম্বটি প্যাটার্নটি সুস্পষ্ট করে তোলে। কোন প্যাটার্নটি সনাক্ত করার অর্থ কী ? তুমি ঠিক কর.
এখন এই সমস্যার সমাধানের সাধারণ কাঠামোটি ডিজাইনের চেষ্টা করুন এবং অর্থ এবং সময় হিসাবে একটি উদ্ধৃতি দিন। আমার বাজি হ'ল এমনকি আপনার সিস্টেমের আর্কিটেকচার ... (হ্যাঁ, আর্কিটেকচার) ভুল হবে। ব্যয় এবং সময় অনুমান এলোমেলো সংখ্যা হবে।
আমরা এটিকে বাস্তবায়ন করেছি এবং এখন এটি একটি কার্যনির্বাহী সিস্টেম, তবে সিস্টেমের আকৃতি সম্পর্কে আমাদের মনকে অনেক বার পরিবর্তন করেছে। আমরা পুরো উপ-সিস্টেমগুলি জুড়েছি যা এখন মেনু থেকেও পৌঁছানো যায় না। আমরা প্রোটোকলগুলিতে একাধিকবার মাস্টার / স্লেভের ভূমিকা পরিবর্তন করেছি। সম্ভবত এখন আমাদের আরও ভাল জ্ঞান রয়েছে যাতে এটি আরও ভালভাবে পুনঃনির্মাণের চেষ্টা করা যায়।
অন্যান্য সংস্থাগুলি অবশ্যই একই সমস্যা সমাধান করেছিল ... তবে আপনি যদি এই সংস্থাগুলির একটিতে না থাকেন তবে সম্ভবত আপনার শীর্ষ-ডাউন বিশদ প্রকল্পটি একটি রসিকতা হবে। আমরা এটি উপরে-নিচে ডিজাইন করতে পারি। আপনি পারবেন না কারণ আপনি আগে কখনও করেন নি did
আপনি সম্ভবত একই সমস্যা সমাধান করতে পারেন। কাজ যদিও নীচে আপ। আপনি যা জানেন তা দিয়ে শুরু করে, আপনি কী না শিখছেন এবং যুক্ত করছেন adding
নতুন জটিল সফ্টওয়্যার সিস্টেমগুলি বড় হয়েছে, ডিজাইন করা হয়নি। এখন থেকে কেউ স্ক্র্যাচ থেকে একটি বড় নতুন জটিল অসুস্থ-নির্দিষ্ট সফ্টওয়্যার সিস্টেম ডিজাইন করা শুরু করে (দ্রষ্টব্য যে একটি বৃহত জটিল সফ্টওয়্যার প্রকল্পের সাথে কেবল তিনটি সম্ভাবনা রয়েছে: ক] স্পেসিফিকেশনটি ম্লান, খ] স্পেসিফিকেশনটি ভুল এবং স্ববিরোধী বা সি] উভয়ই ... এবং প্রায়শই [সি] কেস হয়)।
এগুলি হ'ল হাজার হাজার হাজার ঘন্টা এককভাবে পাওয়ারপয়েন্ট স্লাইড এবং ইউএমএল ডায়াগ্রামে ফেলে দেওয়া সাধারণ বিশাল সংস্থাগুলি প্রকল্প। বিব্রতকর পরিমাণে সংস্থান পোড়ানোর পরে তারা সম্পূর্ণরূপে ব্যর্থ হয় ... বা কিছু খুব ব্যতিক্রমী ক্ষেত্রে তারা অবশেষে একটি অতিরিক্ত মূল্যের সফটওয়্যার সরবরাহ করে যা প্রাথমিক চশমাগুলির কেবলমাত্র একটি ক্ষুদ্র অংশ প্রয়োগ করে। এবং সেই সফ্টওয়্যারটি ব্যবহারকারীদের দ্বারা সর্বদা ঘৃণা করা হয় ... আপনি যে ধরণের সফ্টওয়্যার কিনবেন তা নয়, আপনি যে ধরণের সফ্টওয়্যার ব্যবহার করেন সে কারণেই আপনি বাধ্য হন।
এর অর্থ কি এই যে আমি মনে করি যে আপনি কেবল কোড নিয়ে ভাবা উচিত? অবশ্যই না. তবে আমার মতে নির্মাণটি নীচ থেকে শুরু করা উচিত (ইট, কংক্রিট কোড) এবং উপরে উঠা উচিত ... এবং আপনার মনোযোগ এবং বিশদটির প্রতি মনোযোগ একটি অর্থে "বিবর্ণ" হওয়া উচিত কারণ আপনার যা আছে তা থেকে আপনি আরও দূরে পাচ্ছেন। টপ-ডাউন প্রায়শই এমনভাবে উপস্থাপিত হয় যেন আপনি একই সিস্টেমে একই স্তরের বিশদ বিবরণ একবারে রেখে দিতে পারেন: যতক্ষণ না সবকিছু স্পষ্ট হয় ততক্ষণ প্রতিটি নোডকে বিভক্ত রাখুন ... বাস্তবতা মডিউলগুলিতে সাবস্ট্রিনগুলি সাব সাবটাইনগুলি থেকে "বড় হওয়া" হয়। নির্দিষ্ট সমস্যাটিতে যদি আপনার পূর্ববর্তী অভিজ্ঞতা না থাকে তবে আপনার সাবসিস্টেম, মডিউল বা লাইব্রেরির উপরের ডাউন ডিজাইনটি ভয়াবহ হবে। আপনি অন্য কোনও উপায়ে নয়, কোন কার্যগুলি রাখবেন তা জানার পরে আপনি একটি ভাল গ্রন্থাগার ডিজাইন করতে পারেন।
লিস্পের অনেকগুলি ধারণা আরও জনপ্রিয় হয়ে উঠছে (প্রথম শ্রেণির ফাংশন, ক্লোজার্স, ডিফল্ট হিসাবে গতিশীল টাইপিং, আবর্জনা সংগ্রহ, রূপক, ইন্টারেক্টিভ বিকাশ) তবে লিস্প আজও (আমি জানি যে ভাষাগুলির মধ্যে) কোডটি গঠন করা কতটা সহজ, তার মধ্যে এখনও অনন্য আপনার যা প্রয়োজন তার জন্য
উদাহরণস্বরূপ কীওয়ার্ড প্যারামিটারগুলি ইতিমধ্যে উপস্থিত রয়েছে, তবে তারা উপস্থিত না থাকলে এগুলি যুক্ত করা যেতে পারে। আমি এটি তৈরি করেছি (সংকলনের সময় কীওয়ার্ড যাচাইকরণ সহ) আমি খেলনা লিসপ সংকলকটির জন্য যা পরীক্ষা করে নিচ্ছি এবং এতে খুব বেশি কোড লাগে না।
সি ++ এর পরিবর্তে সর্বাধিক যা আপনি পেতে পারেন তা হ'ল সি ++ বিশেষজ্ঞরা আপনাকে বলছেন যে কীওয়ার্ড প্যারামিটারগুলি তেমন দরকারী নয় বা অবিশ্বাস্যরকম জটিল, ভাঙা, অর্ধযুক্ত ব্যাক টেম্পলেট বাস্তবায়ন যা সত্যই তেমন কার্যকর নয়। সি ++ ক্লাস কি প্রথম শ্রেণির অবজেক্ট? না এবং এটি সম্পর্কে আপনি কিছুই করতে পারবেন না। আপনি রানটাইম বা সংকলন সময়ে আত্মপরিচয় পেতে পারেন? না এবং এটি সম্পর্কে আপনি কিছুই করতে পারবেন না।
লিস্পের এই ভাষার নমনীয়তা হ'ল এটি নীচের অংশে বিল্ডিংয়ের জন্য দুর্দান্ত। আপনি কেবল সাব্রোটাইনই তৈরি করতে পারবেন না, তবে সিনট্যাক্স এবং ভাষার শব্দার্থকও তৈরি করতে পারেন। এবং এক অর্থে লিস্প নিজেই নীচে আপ।