ক্রিয়ামূলক প্রোগ্রামিংয়ের চেয়ে কেন জরুরি প্রোগ্রামিংকে প্রাধান্য দেওয়া হয়? [বন্ধ]


13

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

এফপির বিরুদ্ধে তর্ক এবং পাল্টা যুক্তি

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

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

    • _উত্তর-যুক্তি: বেশিরভাগ ক্ষেত্রে যদিও আমি এটি নিয়ে সমস্যা নেই কারণ আমি মনে করি যে কার্যকরী শৈলীটি কীভাবে এটি পড়তে হবে এবং এটি যখন কার্যকরী শৃঙ্খলে কোনও ত্রুটি নিক্ষেপ করা হয় তখন এটি আরও তাত্ক্ষণিকভাবে চিহ্নিত করতে পারি more

আমার প্রশ্ন

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

আমি যেটা বুঝতে পারি না তা হ'ল অন্যকে এফপির যোগ্যতা সম্পর্কে বোঝানো কতটা কঠিন।

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

আমি যা বোঝার চেষ্টা করছি তা হ'ল কোন বিকাশকারীকে এফপি পছন্দ করতে পছন্দ করে না।

আমি এমন একজনের কাছ থেকে উত্তর দেখতে চাই যার সাথে এফপির সাথে ভাল অভিজ্ঞতা আছে তবে প্রয়োজনীয় স্টাইলের পক্ষে সিদ্ধান্ত নিয়েছে। ক্রিয়ামূলক ব্যবহারের পরিবর্তে অপরিহার্য সাথে থাকার সিদ্ধান্তকে কী তাড়িয়েছে?


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

আমি SelectedRowsলিঙ্কে আমাদের গ্রিডের পদ্ধতিটি লিখেছিলাম :

Public Property SelectedRows() As DataRow() Implements IDataSourceControl.SelectedRows
    Get
        Return Me.ugrBase.Selected.Rows.
            OfType(Of Infragistics.Win.UltraWinGrid.UltraGridRow)().
            Select(Function(ugr) ugr.ListObject).
            OfType(Of DataRowView)().
            Select(Function(drv) drv.Row).
            ToArray
    End Get

তবে কোডের এই স্টাইলটি আমাদের কিছু বিকাশকারীকে অস্বস্তিকর করে তোলে এবং তাই আমাদের নেতৃত্ব আরও পরিচিতদের কাছে এটি আবার লিখে দেয়:

Public Property SelectedRows() As DataRow() Implements IDataSourceControl.SelectedRows
    Get
        Dim plstRows As New List(Of DataRow)
        For Each bugrLoop As Infragistics.Win.UltraWinGrid.UltraGridRow In Me.ugrBase.Selected.Rows
            If bugrLoop.ListObject IsNot Nothing Then
                plstRows.Add(CType(bugrLoop.ListObject, DataRowView).Row)
            End If
        Next
        Return plstRows.ToArray()
    End Get

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

সমস্যাটি শেখার বক্ররেখাটি বিশেষত এমন লোকদের সাথে কাজ করার সময় যারা কেবলমাত্র অনেক ভাষার "যথেষ্ট" জানেন। যদি কোনও বিশেষ ভাষায় বিশেষীকরণ করা হয় তবে আমি নিশ্চিত এফপি আরও ভাল প্রথম প্রচেষ্টা হবে। তারপরে যদি অদক্ষতা (ইউনিট পরীক্ষার পারফরম্যান্স) থাকে তবে তাদের বাস্তবায়নের ক্ষেত্রে আরও একটি স্পষ্ট হতে পারে।
ভোলআরন

উত্তর:


11

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

(এটি এফপি উদাহরণের মূল সংস্করণ, কারণ লিঙ্কটির উত্তরটি আরও সামান্য পড়া সহজ করার জন্য আরও সম্প্রতি সম্পাদনা করা হয়েছে))

return this.Data.Products
    .Where(c => c.IsEnabled)
    .GroupBy(c => c.Category)
    .Select(c => new PricesPerCategory(category: c.Key, minimum: c.Min(d => d.Price), maximum: c.Max(d => d.Price)));

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

ফাংশনাল প্রোগ্রামিং এর নিজস্ব নির্দিষ্ট বৈশিষ্ট্যও রয়েছে যা প্রাথমিকদের হাতে ঝুঁকিপূর্ণ দেখা দিতে পারে । অলস মূল্যায়ন সেগুলির মধ্যে একটি এবং অলস মূল্যায়ন কেন একটি দুর্দান্ত বৈশিষ্ট্য, এবং বিরক্তি নয় কেন এটি বুঝতে শুরু হতে কয়েক মাস সময় লাগতে পারে।

এ কারণেই কেন অনেক শিক্ষানবিসরা পিএইচপি এবং হ্যাস্কেলের মতো ভাষা নয় এমন ভাষা দিয়ে প্রোগ্রামিং শুরু করে।


8
আমি এমন একটি বিশ্ববিদ্যালয়ে বিপরীত অভিজ্ঞতা পেয়েছি যেখানে স্ক্রিনটি ইন্ট্রো কোর্সের জন্য ব্যবহৃত হয়। যখন ছাত্র শিখতে জাভা বা C # সবচেয়ে অভিযোগ করেন যে স্কিম আরো পাঠযোগ্য হয়েছিল
ড্যানিয়েল Gratzer

2
এটি আমার বক্তব্য প্রমাণ করে। যে শিক্ষার্থীরা বছরের পর বছর ধরে অত্যাবশ্যক প্রোগ্রামিং এবং ওওপি শিখেছিল তারা আরও পাঠযোগ্য find যেসব লোকেরা এফপি দিয়ে শুরু করেছিলেন তারা অত্যাবশ্যক প্রোগ্রামিংয়ের তুলনায় এটি আরও পাঠযোগ্য find যে শিক্ষার্থীরা সমানভাবে ভাল এফপি এবং নন-এফপি অনুচ্ছেদে জানে তাদের সাথে কী ঘটে তা জানতে আগ্রহী হবে Would
আর্সেনী মরজেনকো

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

3
@ Kr0e: কোনও ভাষা বা দৃষ্টান্তের বিরুদ্ধে "অত্যধিক বিমূর্ত" যুক্তি আমার কাছে সবসময় অদ্ভুত লাগে। একই যুক্তি সমস্ত (বা বেশিরভাগ) ভাষার বিরুদ্ধে ব্যবহৃত হয়েছিল; আশা করি, বেশিরভাগ সফ্টওয়্যার আজ অ্যাসেমব্লারে লেখা নেই।
আর্সেনী মোরজেনকো

6
"কার্যকরী ভাষা ভাষাশুদ্ধিবাদীদের জন্য, অপরিহার্য ভাষাগুলি সেই লোকদের জন্য যারা সময় মতো চিন্তাভাবনা করতে চায়" ": আমার অভিজ্ঞতা অনুসারে এটি সত্য নয়। আমি কার্যকরী ভাষা ব্যবহার করে আরও দ্রুত কাজগুলি করতে পারি। অপরিহার্য শৈলীটি অনেক বেশি ভার্বোস এবং কম ঘোষণামূলক এবং যখন আমাকে একটি অপরিহার্য ভাষা ব্যবহার করতে হয় তবে জিনিসগুলি ঠিক হওয়ার আগে অবশ্যই আমার আরও পুনরাবৃত্তি প্রয়োজন।
জর্জিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.