ডিক্লারেটিভ প্রোগ্রামিং বনাম ইম্পেরেটিভ প্রোগ্রামিং


24

ইমপিটিভ প্রোগ্রামিং নিয়ে আমি খুব স্বাচ্ছন্দ্য বোধ করি। কম্পিউটারটি আমি কী করতে চাই তা অ্যালগরিদমিকভাবে প্রকাশ করতে আমার কখনই সমস্যা হয় না আমি একবার বুঝতে পেরেছিলাম যে আমি এটি করতে চাই কি। কিন্তু যখন এসকিউএল এর মতো ভাষার কথা আসে বা আমি প্রায়শই আটকে যাই কারণ আমার মাথাটি ইমপিওটিভ প্রোগ্রামিংয়ের পক্ষে খুব অভ্যস্ত।

উদাহরণস্বরূপ, ধরুন আপনার রিলেশনশিপস ব্যান্ড (ব্যান্ডনাম, ব্যান্ডকাউন্ট্রি), ভেন্যু (ভেন্যু নাম, ভেন্যুকাউন্ট্রি), নাটক (ব্যান্ডনাম, ভেন্যু নেম) রয়েছে এবং আমি একটি ক্যোয়ারী লিখতে চাই যা বলছে: সমস্ত ভেন্যু নাম যেমন প্রতিটি ব্যান্ডকন্ট্রির জন্য একটি ব্যান্ড থাকে যে দেশটি এই নামের জায়গায় খেলে।

উদাহরণ: আমি সমস্ত ভেন্যু নাম চাই যাতে সমস্ত দেশ থেকে ব্যান্ডগুলি (ব্যান্ডকাউন্ট্রি) খেলেছে। এছাড়াও, "সম্পর্ক" দ্বারা আমি একটি এসকিউএল টেবিলকে বুঝি।

আমার মনে আমি অবিলম্বে সমস্ত ব্যান্ডকন্ট্রিগুলিতে প্রতিটি ভেন্যু নাম পুনরাবৃত্তি করতে এবং প্রতিটি ব্যান্ডকন্ট্রি এর থেকে আসা ব্যান্ডের তালিকা পান them যদি তাদের কেউ ভেন্যু নামটিতে না খেলেন তবে পরের ভেন্যু নামটিতে যান El অন্যথায়, ব্যান্ডকন্ট্রিগুলির শেষে পুনরাবৃত্তি ভাল ভেন্যু নামগুলির সেটে ভেন্যু নাম যোগ করে "।

... তবে আপনি এসকিউএল-তে এর মতো কথা বলতে পারবেন না এবং আমি আসলে এটি কীভাবে তৈরি করতে হবে তা নিয়ে ভাবতে হবে, স্বজ্ঞাত ইমপ্রেশনাল সমাধানটি আমার মাথার পিছনে ক্রমাগত ঝাঁকুনির সাথে। অন্য কারও কি এই সমস্যা ছিল? আপনি কীভাবে এটিকে কাটিয়ে উঠলেন? আপনি কি একটি দৃষ্টান্তের শিফ্টটি বের করেছেন? ইমপ্লেরিটিভ ধারণাগুলি থেকে এসকিউএল ধারণাগুলিতে একটি মানচিত্র তৈরি করেছেন ইমপ্লিটিভ সমাধানগুলি ডিক্লারেটিভ বিষয়গুলিতে অনুবাদ করতে? একটি ভাল বই পড়ুন?

PS আমি উপরের ক্যোয়ারির কোনও সমাধান খুঁজছি না, আমি এটি সমাধান করেছি।


1
এটি একটি ভাল প্রশ্ন কারণ আপনি অনেকগুলি (নিজেকে সহ) এর দুর্বলতার পরিচয় দিচ্ছেন।
ডেভিড ওয়েজার

আপনার প্রশ্নের "সম্পর্ক" বলতে আপনার অর্থ কী তা বোঝাতে এটি কার্যকর হতে পারে। রিলেশনাল মডেলটিতে (এসকিউএলের পিছনে গণিত), "সম্পর্ক" একটি এসকিউএল টেবিলের সাথে প্রায় অনুরূপ। যখন সত্যই "সম্পর্ক" বলতে বোঝানো হয় তখন অনেক লোক "সম্পর্ক" বলবে।
জেসন বেকার

সেট তত্ত্ব এবং পৃথক গণিত শিখুন।

1
@ জেসি 21, আমি ব্যক্তিগতভাবে উভয়ের সাথেই বেশ পরিচিত, তবে এসকিউএল-তে অপ্রয়োজনীয় জিনিসগুলি এখনও মজাদার অনুভব করে। কোনও পরিচ্ছন্ন গণিত উদাহরণ অদ্ভুত বাস্তব-জগতের জিনিসগুলির সাথে মোকাবিলা করে না। অতিরিক্তভাবে, কেউ লিনকিউ ব্যবহার করতে পারে এবং এসকিউএল নিয়ে বিরক্ত হয় না। অবশেষে, প্রশ্নকারীকে: আপনি সময়ের সাথে এটি অভ্যস্ত হয়ে উঠবেন।
চাকরি

উত্তর:


12

Declaratively জিনিসগুলি পিছনে ধারণা আপনাকে তা নির্দিষ্ট করার অনুমিত হয় কি না কিভাবে

আমার কাছে মনে হচ্ছে আপনি সঠিক পথে আছেন। সমস্যাটি এমন নয় যে আপনি জিনিসগুলি ভুল পদ্ধতিতে ভাবছেন। এটি যে আপনি খুব দূরে যাচ্ছেন। আসুন আপনি যা করতে চাইছেন তা দেখুন:

উদাহরণস্বরূপ, ধরুন আপনার রিলেশনশিপস ব্যান্ড (ব্যান্ডনাম, ব্যান্ডকাউন্ট্রি), ভেন্যু (ভেন্যু নাম, ভেন্যুকাউন্ট্রি), নাটকগুলি (ব্যান্ডনাম, ভেন্যু নাম), এবং আমি একটি ক্যোয়ারী লিখতে চাই যেটি বলে: সমস্ত ভেন্যু নাম যেমন প্রতিটি ব্যান্ডকন্ট্রির জন্য একটি ব্যান্ড থাকে যে দেশটি এই নামের জায়গায় খেলে।

এখনও পর্যন্ত, এটি দুর্দান্ত। তবে তারপরে আপনি এটি করেন:

আমার মনে আমি অবিলম্বে সমস্ত ব্যান্ডকন্ট্রিগুলিতে প্রতিটি ভেন্যু নাম পুনরাবৃত্তি করতে এবং প্রতিটি ব্যান্ডকন্ট্রি এর থেকে আসা ব্যান্ডের তালিকা পান them যদি তাদের কেউ ভেন্যু নামটিতে না খেলেন তবে পরের ভেন্যু নামটিতে যান El অন্যথায়, ব্যান্ডকন্ট্রিগুলির শেষে পুনরাবৃত্তি ভাল ভেন্যু নামগুলির সেটে ভেন্যু নাম যোগ করে "।

সংক্ষেপে, আপনি অপ্রয়োজনীয় কাজ করছেন। আপনি যা চান তা জানেন , যা আপনার সত্যই প্রয়োজন। তবে তারপরে আপনি যান এবং কীভাবে এটি পাবেন তা নির্ধারণের চেষ্টা করুন ।

আমি যদি আপনি হতাম তবে আমি নিম্নলিখিত অভ্যাসটি পেতে চেষ্টা করতাম:

  1. আপনি কি চান সংজ্ঞা দিন ।
  2. কীভাবে এটি পাবেন তা নির্ধারণ থেকে সচেতনভাবে নিজেকে বিরত করুন ।
  3. এসকিউএল-এ আপনি কী চান তা উপস্থাপন করবেন কীভাবে তা নির্ধারণ করুন।

এটি আপনার পক্ষে কিছুটা সময় এবং প্রচেষ্টা লাগতে পারে তবে আপনি একবার সত্যিকারের ঘোষণামূলক প্রোগ্রামিংয়ের পরে, এটি খুব কার্যকর হয়ে যায়। প্রকৃতপক্ষে, আপনি নিজের কোডের বাকী অংশগুলিতে নিজেকে ঘোষিত প্রোগ্রামিং ব্যবহার করতে পারেন।

আপনি যদি কোনও বই সন্ধান করছেন, আমি এসকিউএল এবং রিলেশনাল থিওরির পরামর্শ দেব । এটি আপনাকে এসকিউএল ডাটাবেসের পিছনে তত্ত্বটি বুঝতে সহায়তা করে। শুধু মনে রাখবেন যে তারিখের সুপারিশগুলি লবণের এক দানা দিয়ে নেওয়া উচিত। সে খুব ভাল তথ্য দেয় তবে মাঝে মাঝে সে কিছুটা মতামত জানাতে পারে।


আমি বুঝতে পারি না যে কীভাবে কীভাবে পাব তা ভুল পদ্ধতি is আপনি কোন ধরণের ভাষা ব্যবহার করছেন তা বিবেচ্য নয় আপনার কী চান তা এটি কীভাবে বলতে হবে তা নির্ধারণ করতে হবে।
ডেভিডক 01

9

সেটগুলির ক্ষেত্রে বিবেচনা করুন, পুনরুক্তিকারী নয়; বর্গক্ষেত্র বিবৃতি পছন্দসই আউটপুট সেট (ওরফে টেবিল / সম্পর্ক) এর বৈশিষ্ট্যগুলি সংজ্ঞায়িত করে

সমস্ত ভেন্যু নাম যেমন প্রতিটি ব্যান্ডকন্ট্রির জন্য সে দেশের একটি ব্যান্ড থাকে যা সেই নামের জায়গায় খেলে

এর ফলাফল (যদি আমি আপনার উদ্দেশ্যগুলি সঠিকভাবে বুঝতে পারি!) হবে এমন জায়গাগুলির সেট হবে যাতে কমপক্ষে একটি ব্যান্ড থাকে that ভেন্যুতে plays ব্যান্ডকন্ট্রি উপর পুনরাবৃত্তি অপ্রয়োজনীয়, কারণ প্লেস সম্পর্কের ইতিমধ্যে আপনার যে তথ্যটি অনুসন্ধান করা হয়েছে সেগুলির তথ্য রয়েছে, আপনাকে কেবল নকলগুলি অপসারণ করতে হবে

সুতরাং এসকিউএল এ হবে:

select 
    distinct venueName
from PLAYS

সম্পাদনা: ঠিক আছে, তাই পছন্দসই সেটটি কিছুটা জটিল। ডাটাবেসটি সম্পর্কে জিজ্ঞাসা করা হচ্ছে প্রশ্নটি: সব দেশ থেকে কোন স্থানগুলি ব্যান্ড হোস্ট করেছে?

সুতরাং, আমরা লক্ষ্য হিসাবে পছন্দসই সেটের একটি উপাদানটির সদস্যপদ মানদণ্ডকে সংজ্ঞায়িত করি, তারপরে সেটটি জনপ্রিয় করার জন্য পিছনের দিকে কাজ করুন work ভেন্যু প্রতিটি দেশ থেকে কমপক্ষে একটি ব্যান্ডের জন্য প্লেস সারিতে থাকে তবে আউটপুট সেটটির সদস্য। আমরা এই তথ্যটি কীভাবে পাব?

একটি উপায় হ'ল প্রতিটি ভেন্যুর জন্য স্বতন্ত্র দেশ গণনা করা এবং এটি সমস্ত দেশের গণনার সাথে তুলনা করা। তবে আমাদের কোনও COUNTRY সম্পর্ক নেই। যদি আমরা এক মুহুর্তের জন্য দেওয়া মডেলটি সম্পর্কে ভাবি, তবে আমরা দেখতে পাব যে সমস্ত দেশের সেট সঠিক মানদণ্ড নয়; এটি হ'ল সমস্ত দেশের সংস্থার কমপক্ষে একটি ব্যান্ড। সুতরাং আমাদের কোনও দেশের টেবিলের প্রয়োজন নেই (যদিও একটি সাধারণ মডেলের জন্য আমাদের একটি হওয়া উচিত), এবং আমরা অনুষ্ঠানের দেশটির বিষয়ে চিন্তা করি না, আমরা কেবল যে দেশগুলিতে ব্যান্ড রয়েছে তাদের গণনা করতে পারি, যেমন (এমএস-এসকিউএল এ) )

declare @BandCountryCount int
select
    @BandCountryCount = COUNT(distinct bandCountry)
from BAND

আমরা প্রতিটি ভেন্যুর জন্য ব্যান্ড দেশগুলি গণনা করতে পারি

select
    P.venueName, COUNT(distinct B.bandCountry) as VenueBandCountryCount
from PLAYS P
    inner join BAND B on B.bandName = P.bandName

এবং আমরা একটি subquery ব্যবহার করে একসাথে টুকরা করতে পারেন

select
    venueName
from (
    select
        P.venueName, COUNT(distinct B.bandCountry) as VenueBandCountryCount
    from PLAYS P
        inner join BAND B on B.bandName = P.bandName
) X
where X.VenueBandCountryCount = @BandCountryCount

এখন, এটি সম্ভাব্য সর্বোত্তম কোয়েরি নয় (গ্রুপ এবং হ্যাভিং টেম্প ভেরিয়েবল এবং সাবকিয়ারের চেয়ে আরও 'মার্জিত' সমাধান হিসাবে বিবেচিত হতে পারে) তবে এটি আমরা যা করছি তারপরে এটি স্পষ্টতই স্পষ্টত তাই আমরা ওপি'র উদ্দেশ্যে এটি রেখে যাব ।

ওপির উদ্দেশ্য ছিল মানসিকতা কীভাবে অপরিহার্য থেকে ঘোষণার দিকে নিয়ে যাওয়া যায় তা শিখতে। সে লক্ষ্যে বর্ণিত অত্যাবশ্যকীয় সমাধানটি কী করছিল তা দেখুন:

প্রতিটি ভেন্যু নেম সমস্ত ব্যান্ডকাস্ট্রির উপরে পুনরাবৃত্তি করে এবং প্রতিটি ব্যান্ডকন্ট্রি এর থেকে আসা ব্যান্ডের তালিকা পান। যদি তাদের কেউ ভেন্যু নেমে না খেলেন তবে পরবর্তী ভেন্যু নামটিতে যান। অন্যথায়, ব্যান্ডকাউন্টরিস পুনরাবৃত্তির শেষে ভেন্যু নামটি ভাল ভেন্যু নামগুলির সেটে যুক্ত করুন

উপরোক্ত ক্ষেত্রে নির্ধারণের মানদণ্ড কী? আমি ভাবছি এটাই সেটা:

... যদি তাদের কেউই [কোনও নির্দিষ্ট দেশের ব্যান্ডের সেট] ভেন্যু নেমে খেলেন না ...

এটি একটি অযোগ্য মাপদণ্ড । অপরিহার্য চিন্তার প্রক্রিয়াটি পুরো বালতি দিয়ে শুরু হচ্ছে এবং মানদণ্ডের সাথে খাপ খায় না এমন জিনিসগুলি বাইরে ফেলে। আমরা ডেটা ফিল্টার করছি ।

এটি সাধারণ স্টাফের জন্য দুর্দান্ত, তবে এটি পছন্দসই ফলাফল সেট তৈরির ক্ষেত্রে ভাবতে সহায়তা করে; এর সাথে সম্পর্কিত যোগ্যতার মানদণ্ড কী এমন যে কোনও একটি তার পরিবর্তে বালতি পূরণ করতে দেয়?

  • অযোগ্য ঘোষণাকারী: যদি কোনও অনুষ্ঠানস্থলে বাজানো ব্যান্ডকাউন্ট্রি থেকে কোনও ব্যান্ড না থাকে, তবে স্থানটি অযোগ্য ঘোষণা করা হবে
  • (আংশিক) যোগ্যতা অর্জনকারী: যদি কোনও ব্যান্ডকাউন্ট্রি থেকে কমপক্ষে একটি ব্যান্ড কোনও ভেন্যুতে খেলেন, তবে স্থানটি ঠিকঠাক হতে পারে; বাকি ব্যান্ডকন্ট্রিগুলি পরীক্ষা করে দেখুন
  • (পূর্ণ) যোগ্যতা অর্জনকারী: প্রতিটি ব্যান্ডকাউন্ট্রি থেকে কমপক্ষে একটি ব্যান্ড যদি কোনও ভেন্যুতে খেলেন তবে ভেন্যুটি যোগ্য

চূড়ান্ত কোয়ালিফায়ার গণনা ব্যবহার করে সহজ করা যেতে পারে: একটি ব্যান্ডকন্ট্রি 'সন্তুষ্ট' যদি সেখান থেকে কমপক্ষে একটি ব্যান্ড কোনও ভেন্যুতে খেলেন; ভেন্যুর জন্য 'সন্তুষ্ট' ব্যান্ড দেশগুলির সংখ্যা ভেন্যু যোগ্য হওয়ার জন্য ব্যান্ড দেশগুলির সংখ্যার সমান হতে হবে।

এখন আমরা নেভিগেশন মাধ্যমে সম্পর্ক জুড়ে যুক্তি বলতে পারি:

  • ভেন্যু সম্পর্কের সাথে শুরু করুন [উত্তরের জন্য আমাদের এটির প্রয়োজন নেই, তবে এটি সম্পর্কযুক্ত নেভিগেশনের ধারণাগত সূচনার পয়েন্ট]
  • ভেন্যু নেমে প্লেগুলিতে যোগ দিন
  • ব্যান্ডকাউন্ট্রি পেতে ব্যান্ডনেমে ব্যান্ডে যোগ দিন
  • আমরা ব্যান্ডের নামটি যত্ন করি না; কেবল ভেন্যু নাম এবং ব্যান্ডকন্ট্রি নির্বাচন করুন
  • আমরা রিডান্ট্যান্ট ব্যান্ডকাস্ট্রিজের বিষয়ে চিন্তা করি না; DISTRICT বা GROUP BY ব্যবহার করে সদৃশগুলি মুছে ফেলুন
  • আমরা কেবলমাত্র স্বতন্ত্র ব্যান্ডকাউন্টের গণনা সম্পর্কেই যত্নশীল not
  • আমরা কেবলমাত্র এমন স্থানগুলি চাই যেখানে পৃথক ব্যান্ডকাউন্টের গণনাগুলি ব্যান্ডকাউন্টের মোট সংখ্যার সমান

যা উপরের সমাধানে ফিরে আসে (বা এর যুক্তিসঙ্গত পক্ষপাতিত্ব)

সংক্ষিপ্তসার

  • সেটতত্ত্ব
  • সম্পর্কিত নেভিগেশন পাথ
  • সমেত বনাম একচেটিয়া মানদণ্ড (যোগ্যতা বনাম অযোগ্য ঘোষণা)

এটি প্রকৃতপক্ষে "সমস্ত দেশগুলির ব্যান্ডগুলি (ব্যান্ডকাউন্ট্রি> = ভেন্যুকাউন্ট্রি) তাদের মধ্যে যে ভেন্যু খেলত" সেট করে।
এপসিলনভেক্টর

@ এপসিলনভেেক্টর: সম্পাদনাগুলি দেখুন
স্টিভেন এ। লো

4

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

(V>100)/V

এখানে ভি> ১০০ ভি'র মতো একই আকারের বুলিয়ান অ্যারেতে মূল্যায়ন করে, যার সাথে আমরা রাখতে চাইছে এমন মানগুলি চিহ্নিত করে। এটি পাকা APLer এর ক্ষেত্রে ঘটে না যে পুনরাবৃত্তি চলছে, আমরা কেবল ভেক্টর ভি-তে একটি মুখোশ প্রয়োগ করছি, একটি নতুন ভেক্টর ফিরিয়ে দিচ্ছি। অবশ্যই এটি একটি এসকিউএল যেখানে ক্লজ বা রিলেশনাল বীজগণিত সীমাবদ্ধ অপারেশন করছে তা ধারণামূলকভাবে।

আমি মনে করি না যে আপনি প্রচুর পরিমাণে না করে ডিক্লোরেশনাল প্রোগ্রামিংয়ের উপর একটি ভাল গ্রিপ পেতে পারেন এবং এসকিউএল সাধারণত খুব নির্দিষ্ট। আপনাকে প্রচুর সাধারণ উদ্দেশ্য কোড লিখতে হবে, লুপগুলি ছাড়াই কীভাবে করা যায় এবং যদি / তারপরে / অন্য কোনও কাঠামো এবং সমস্ত সরঞ্জাম যা আবশ্যক, পদ্ধতিগত এবং স্কেলার-স্টাইল প্রোগ্রামিংয়ে অংশ নেয় learning

এমন অন্যান্য কার্যকরী ভাষা থাকতে পারে যা এই চিন্তাভাবনার ক্ষেত্রেও সহায়তা করে তবে অ্যারে ভাষাগুলি এসকিউএল এর খুব কাছাকাছি থাকে।


"[আপনি] তেমন কিছু না করে ... একটি ভাল গ্রিপ পেতে পারবেন না" এর জন্য +1। a = a + 1রাতারাতি কেউই অত্যাবশ্যক প্রোগ্রামিং (এর স্পষ্টরূপে স্বতঃপ্রণোদিত স্বীকৃতিযুক্ত কনস্ট্রাক্ট সহ ) শিখেনি। অত্যাবশ্যক প্রোগ্রামিং শিখতে যেমন সময় লেগেছে ঠিক তেমন যুক্তি, ফাংশনাল, এবং যেমন যেমন ঘোষিত স্টাইলগুলি শিখতে সময় লাগে।
আমার সঠিক মতামতটি

1

প্রথমত, আপনি উভয় শিখতে হবে। আপনার পছন্দ থাকতে পারে তবে অন্য অঞ্চলে ভাল যেখানে কাজ করার সময় এটির বিরুদ্ধে লড়াই করবেন না। প্রচুর প্রোগ্রামার প্রাসঙ্গিক ডাটাবেসে কার্সার ব্যবহার করতে প্রলুব্ধ হয় যেহেতু তারা প্রতিটি রেকর্ডের মাধ্যমে পদক্ষেপে অভ্যস্ত, তবে ডেটাবেস সেটগুলিতে অনেক ভাল। আপনি "এইভাবে এটি কীভাবে করতে হয় তা আমি জানি এবং আমার সবচেয়ে নিয়ন্ত্রণ, বেলা, ব্লাহ, ব্লাহ" এর মানসিকতায় যেতে চাই না।


1

আপনি যেমন জরুরীভাবে চিন্তা করতে শিখেছিলেন তেমনভাবে আপনি ঘোষণামূলকভাবে চিন্তা করতে শিখেন: সহজ সমস্যাগুলি দিয়ে শুরু করে অনুশীলন করে আপনি "এটি পেয়েছেন" তেমন কাজ করে।

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

ঘোষিত স্টাইলগুলি একটি ভিন্ন পদ্ধতির সাথে কাজ করে যা আপনার আপাতত স্বজ্ঞাততার অভাব রয়েছে (যদি আপনি বছরের পর বছর ধরে আপনার গণিতের দক্ষতা খুব তীক্ষ্ণ রাখেন না - যা বেশিরভাগ লোকেরা করেন না)। আপনাকে কীভাবে ভাবতে হবে তা পুনরায় শিখতে হবে এবং এটি করার জন্য একমাত্র উপায়, এটি একবারে একটি সহজ পদক্ষেপ।

আপনার সত্যিকারের ধারণাটি শিখতে চাইলে এসকিউএলকে আপনার প্রথম ঘোষিত হিসাবে ঘোষণামূলক প্রোগ্রামিংয়ে বেছে নেওয়া ভুল হতে পারে। নিশ্চিত যে এটি যে দ্বিখণ্ড ক্যালকুলাসের ভিত্তিতে তৈরি হয়েছে ঠিক তেমনি ঘোষিতও রয়েছে, তবে দুর্ভাগ্যক্রমে রূপায়ণের ক্যালকুলাসের বিশুদ্ধতা বাস্তবায়নের বাস্তবতার দ্বারা খারাপভাবে আপস করা হয়েছে এবং ভাষাটি বাস্তবে কিছুটা গণ্ডগোলের জগতে পরিণত হয়েছে। আপনি পরিবর্তে আরও কার্যকরভাবে ( যেমন আপনি ব্যবহার করছেন) ঘোষিত ভাষাগুলি যেমন লিস্পস ( উদাহরণস্বরূপ স্কিম ), হাস্কেল এবং এমএল (বেশিরভাগ) ফাংশনাল প্রোগ্রামিংয়ের জন্য বা বিকল্প হিসাবে, প্রোলোগ এবং বুধের দিকে তাকাতে ইচ্ছা করতে পারেন (বেশিরভাগ) লজিক প্রোগ্রামিং।

এই অন্যান্য ভাষা শেখার ফলে আমার মতে, ঘোষণামূলক প্রোগ্রামিং কয়েকটি কারণে কীভাবে কাজ করে তা সম্পর্কে আরও ভাল অন্তর্দৃষ্টি দেবে:

  1. এগুলি "ক্র্যাডল টু কবর" প্রোগ্রামিংয়ের জন্য দরকারী - যেমন আপনি শুরু থেকে শেষ পর্যন্ত এই ভাষাগুলিতে একটি সম্পূর্ণ প্রোগ্রাম লিখতে পারেন। তারা একা দাঁড়িয়ে থাকা দরকারী, এসকিউএল এর বিপরীতে যা বেশিরভাগ লোকের পক্ষে একক ভাষা হিসাবে সত্যই নিরর্থক।

  2. তারা প্রত্যেকটি আপনাকে ঘোষণামূলক প্রোগ্রামিংয়ের জন্য আলাদা স্বতন্ত্র দেয় যা অবশেষে "এটি পাওয়ার" জন্য আপনাকে বিভিন্ন রাস্তা দিতে পারে।

  3. এগুলি প্রত্যেকে সাধারণভাবে প্রোগ্রামিং সম্পর্কে চিন্তাভাবনা করার জন্য আপনাকে আলাদা আলাদা তিরস্কার দেয়। সমস্যাগুলি এবং কোডিং সম্পর্কে যুক্তি দেওয়ার আপনার ক্ষমতা উন্নতি করবে এমনকি আপনি যদি এগুলি সরাসরি নিজেরাই ব্যবহার না করেন।

  4. এগুলি থেকে আপনি যে পাঠগুলি শিখেন তা আপনাকে আপনার এসকিউএলও সহায়তা করবে - বিশেষত যদি আপনি ডেটা সম্পর্কে চিন্তাভাবনার খাঁটি ফর্মের জন্য আপেক্ষিক ডাটাবেসের পিছনে টিপল ক্যালকুলাসটি ব্রাশ করেন।

আমি বিশেষত একটি কার্যকরী ভাষা ( ক্লোজার , লিস্পগুলির একটি হিসাবে সম্ভবত এখানে ভাল পছন্দ) এবং একটি যুক্তিযুক্ত ভাষা শেখার প্রস্তাব দিই (আমার বুধ ভাল লাগে তবে শিখতে প্রোলোগের কাছে অনেক বেশি দরকারী উপাদান রয়েছে) সর্বাধিক চিন্তা প্রক্রিয়া সম্প্রসারণের জন্য।


1

এসকিউএলের মতো ঘোষিত সেটিংয়ে জরুরীভাবে চিন্তা করা ভুল নয়। এটি কেবলমাত্র যেটি আপনি বর্ণনা করেছেন তার থেকে কিছু উচ্চ স্তরে অপরিহার্য চিন্তাভাবনা ঘটানো উচিত। যখনই এসকিউএল ব্যবহার করে এমন একটি ডাটাবেসকে জিজ্ঞাসা করা দরকার তখনই আমি নিজেকে সর্বদা মনে করি:

  • আমার প্রয়োজন টুকরা এখানে।
  • আমি এই ফ্যাশন তাদের একসাথে রাখতে যাচ্ছি।
  • আমি স্রেফ যা পেয়েছি তা নীচে রেখে ভবিষ্যদ্বাণী করে যা আমি সত্যিই সন্ধান করছি তা পেতে চাই।

উপরেরটি একটি উচ্চ স্তরের অপরিহার্য অ্যালগরিদম এবং এসকিউএল সেটিংসে এটি আমার পক্ষে বেশ ভালভাবে কাজ করে। আমি মনে করি এটি একটি শীর্ষ-ডাউন পদ্ধতির হিসাবে বিবেচিত এবং স্টিভেন এ। লো একটি দুর্দান্ত ভাল নীচের দিকের পদ্ধতির বর্ণনা দিয়েছেন।


1

আপনার প্রশ্নের মূল কীটি আপনি পরের থেকে শেষ অনুচ্ছেদে যা বলেছিলেন সেটিতেই রয়েছে: "আপনি এসকিউএল তে তেমন কথা বলতে পারবেন না।" প্রোগ্রামিং ভাষার পরিবর্তে এসকিউএলকে একটি বিদেশী ভাষা হিসাবে গ্রহণ করা এই পর্যায়ে আপনার পক্ষে আরও কার্যকর হতে পারে। আপনি যদি এইভাবে চিন্তা করেন তবে একটি এসকিউএল ক্যোয়ারী লেখা সত্যই আপনি "এসকিউএলিশ" -এ যা চান তা একটি ইংরেজি বিবৃতি অনুবাদ করে is কম্পিউটার এসকিউএলিশকে পুরোপুরি বোঝে এবং আপনি যা বলছেন ঠিক তেমনটাই করবে, সুতরাং যতক্ষণ আপনি সঠিকভাবে অনুবাদ করেন ততক্ষণ আপনাকে বাস্তবায়ন সম্পর্কে চিন্তা করার দরকার নেই।

এটি বলেছিল, বিদেশী ভাষা শেখার সর্বোত্তম উপায় কোনটি? আপনার স্পষ্টতই ব্যাকরণ এবং শব্দভান্ডার শিখতে হবে, যা আপনি আপনার এসকিউএল ডকুমেন্টেশন থেকে পেতে পারেন। সর্বাধিক গুরুত্বপূর্ণ বিষয় অনুশীলন। আপনার যতটা এসকিউএল পড়তে হবে এবং লিখতে হবে এবং অনুভব করবেন না যে আপনাকে প্রথমে সিনট্যাক্সটি ভালভাবে জানতে হবে; আপনি পাশাপাশি যেতে জিনিসগুলি সন্ধান করতে এবং করতে হবে। ইংরেজির চেয়ে এসকিউএল-তে আপনি কোন ডেটা চান তা বর্ণনা করা যখন সহজ হবে তখন আপনি জানতে পারবেন।


1

এসকিউএলকেও আমার মাথা মোড়ানো করতে আমার অনেক সময় লেগেছে। আমরা বিশ্ববিদ্যালয়ে এবং সেই সময়ে কিছু রিলেশনাল থিওরি করেছি, যা কেবল বিষয়গুলিকে জটিল করে তুলেছিল। শেষ পর্যন্ত, আমার শেখার প্রক্রিয়াটি ছিল অনেক পরীক্ষামূলক এবং ত্রুটিযুক্ত বিভিন্ন শিক্ষার উপকরণ এবং উদাহরণগুলির দ্বারা জানানো হয়েছিল যে পথে আমি দরকারী বলে মনে করি। মূলত, আপনি অবশেষে এটিতে অভ্যস্ত হয়ে যাবেন এবং ডেটা এবং ক্যোয়ারী সম্পর্কে চিন্তাভাবনার একটি নতুন উপায় যুক্ত করা আপনার মানসিক বিকাশের জন্য কিছুটা মূল্যবান হবে।

আমি খুঁজে পেয়েছি যে প্রতিটি ভাষার বৈশিষ্ট্য কীভাবে ব্যবহার করতে হয় এবং কীভাবে কোনও পরিচিত টেবিলে নির্দিষ্ট ফলাফল অর্জন করতে হয় তা (রেফারেন্সের জন্য সারণীর সংজ্ঞাগুলি) কীভাবে প্রদর্শন করতে পারে তা ধীরে ধীরে সহজ স্ক্রিপ্টগুলির সংগ্রহ তৈরি করে আমি আমার শিক্ষাকে ত্বরান্বিত করতে সক্ষম হয়েছি।

এই বছরের শুরুর দিকে আমি একটি অগোছালো ওরাকল ডাটাবেসে ডেটা মাইগ্রেশন প্রকল্পের সাথে জড়িত কিছু আনুষ্ঠানিক প্রশিক্ষণ করেছি, যেখানে আমার লাইব্রেরি থেকে ক্রমের ফলাফলগুলি ফিল্টার করতে ধীরে ধীরে আমার টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করা উচিত যতক্ষণ না আমি যা চেয়েছিলাম ঠিক ততক্ষণ তাদের রূপান্তর করতাম প্রয়োজনীয়, এবং আরও কিছু প্রশ্ন খুব জটিল এবং ডিবাগ করা কঠিন হয়ে পড়ে। আমি সন্দেহ করি যে আমি এখন সেগুলি পড়তে পারি, তবে আমি আশা করি যে আমার রেফারেন্স বিল্ডিং ব্লকগুলি ব্যবহার করে আমি আবার একই ধরণের সমাধানে পৌঁছে যেতে পারি।

ঘোষণামূলক এবং কার্যকরী জায়গাগুলি সম্পর্কে আপনার স্বজ্ঞাত সচেতনতা বৃদ্ধির অন্যান্য উপায়গুলি হ'ল সেট তত্ত্ব এবং প্রোগ্রামিং ভাষাগুলি নির্দিষ্ট দৃষ্টান্তের জন্য আরও উপযুক্ত learning আমি বর্তমানে কিছু হাস্কেল শেখার প্রক্রিয়ায় রয়েছি, উদাহরণস্বরূপ, আমার গাণিতিক দক্ষতা বজায় রাখতে এবং উন্নত করার জন্য।


0

আপনি যখন কোন সমস্যার মুখোমুখি হন আপনি সাধারণত সমাধান করবেন কীভাবে তা সমাধান করবেন। তবে আপনি যদি জানেন যে কম্পিউটার কীভাবে এটি আপনার জন্য সমাধান করে! তাহলে আপনি কীভাবে নির্মূল করবেন তা নিয়ে উদ্বেগ রয়েছে ।

আমি কীভাবে এটি হয় তা বলার চেষ্টা করি।

আপনি পূর্বেই পুনরাবৃত্ত প্রোগ্রামগুলির সাথে পরিচিত হতে পারেন, পুনরাবৃত্ত প্রোগ্রামগুলিতে আপনি সমস্যাটিকে কীভাবে সমাধান করা হয়েছে তা বলার পরিবর্তে সংজ্ঞায়িত করেন। আপনি সংজ্ঞায়িত বেস, এবং সংজ্ঞায়িত এন উপর ভিত্তি করে এন -1 । (উদাহরণস্বরূপ factorial(n) = n * factorial(n-1)) তবে কম্পিউটার এটি কীভাবে সমাধান করে তা আপনি ইতিমধ্যে জেনে থাকতে পারেন। এটি ফাংশন থেকে শুরু হয়ে ফাংশনটিকে পুনরাবৃত্তভাবে কল করে যতক্ষণ না এটি একটি বেস সংজ্ঞাতে পৌঁছায়, তারপরে বেস মানের ভিত্তিতে অন্যান্য সমস্ত ফাংশন মূল্যায়ন করুন।

এটি ডিক্লোরেশনাল প্রোগ্রামিংয়ে ঘটে। আপনি বিদ্যমান সংজ্ঞাগুলির উপর ভিত্তি করে সমস্ত কিছু সংজ্ঞায়িত করেন। এবং কম্পিউটার জানে যে কীভাবে আপনার জন্য মৌলিক ফাংশনগুলির উপর ভিত্তি করে উত্তরটি আনা যায়।

এসকিউএল-তে আপনি একে অপরের সাথে সংজ্ঞা সম্পর্কিত নাও হতে পারেন তবে আপনি একে অপরের সাথে অবজেক্টস বা তথ্য সম্পর্কিত, আপনি যেটি চান তা উল্লেখ করেছেন এবং আপনার প্রদত্ত সম্পর্কের উপর ভিত্তি করে কম্পিউটারটি কোনও কিছুর (বস্তু, তথ্য) অনুসন্ধান করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.