কার্যকরী ভাষা শেখা কি আরও ভাল ওওপি প্রোগ্রামার তৈরি করে? [বন্ধ]


28

একটি জাভা / সি # / সি ++ প্রোগ্রামার হিসাবে আমি কার্যকরী ভাষা সম্পর্কে প্রচুর কথা শুনি, তবে কখনও সেগুলি শেখার প্রয়োজন খুঁজে পাইনি। আমি আরও শুনেছি যে উচ্চতর স্তরের চিন্তাভাবনা কার্যকরী ভাষাগুলিতে প্রবর্তন আপনাকে আরও ভাল ওওপি / পদ্ধতিগত ভাষা প্রোগ্রামার করে তোলে।

কেউ কি এটি নিশ্চিত করতে পারবেন? কীভাবে এটি আপনার প্রোগ্রামিং দক্ষতা উন্নত করে?

কম পরিশীলিত ভাষায় দক্ষতার উন্নতি করার লক্ষ্য নিয়ে ভাষা শেখার জন্য একটি ভাল পছন্দ কী?


3
আপনি যদি সি # তে কোডিং করছেন, আপনি ইতিমধ্যে একটি জানেন। লিনকুই বেশ কার্যকরী জিনিস।
এসকে-যুক্তি

আমি মনে করি রিয়েল লাইফ অবজেক্টগুলিকে মডেলিংয়ের জন্য ওওপি আরও ভাল।
তুলাইনস কর্ডোভা

1
@ user61852 বেশিরভাগ ওও ডিজাইনের ধরণগুলি "রিয়েল লাইফ" অবজেক্ট সম্পর্কে কোনও কিছুই মডেল করে না, তবে বাস্তবে অত্যন্ত বিমূর্ত ধারণাটি দেয়।
আন্দ্রেস এফ।

একটি জাভা / সি # (+ সি ++) প্রোগ্রামারের চেয়ে বেশি হন। একটি বিশাল-বড় সুইস আর্মি ছুরির মধ্যে একটি পার্থক্য রয়েছে যা খুব কম-না-এমন একটি ছোটখাট প্যাম্পলেট দিয়ে থাকে যে কেন আপনি 40 এর মধ্যে ব্লেড এক্স বেছে নিতে চান এবং একটি ব্লেড আপনি যে কোনও কিছুর নিকটে অভিশাপ তৈরি করতে পারবেন কারণ এটি উভয়ই তীক্ষ্ণ এবং বাঁক উভয়ই just ঠিক এরকম যে আপনি এটি অনেক চিন্তাভাবনা না করে বিভিন্ন পরিস্থিতিতে পরিস্থিতিতে কাটার শক্তি প্রয়োগ করতে পারেন। (অবশ্যই হ্যান্ডলে বোতল-ওপেনার সহ)
এরিক রেপেন

উত্তর:


32

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

কার্যকরী প্রোগ্রামিং শিখার পরে, আমি কোন ধারণাগুলি নিয়ে কাজ করি সে সম্পর্কে অনেক বেশি সচেতন আমি সাধারণত "অবজেক্ট" হিসাবে বিবেচিত হয় (সাধারণত যেখানে রূপান্তরটি বোঝায়) এবং যেগুলি প্রাকৃতিকভাবে অপরিবর্তনীয় "মান" হিসাবে বিবেচিত হয় (আমার মনে হয় একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে , এফপি যখন বোধগম্য হয় তখন ওও কীভাবে বোধগম্য হয় সে সম্পর্কে স্পর্শ করা, তবে এটি কেবল আমার অভিমত)।

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

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

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

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

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


@ আইডান: সি ++ 0x এ রিআর্ট ল্যাম্বডাস, যে কোনও হারে নতুন সি ++ সংকলকগুলি ইতিমধ্যে তাদের অন্তর্ভুক্ত করেছে।
ম্যাথিউ এম।

1
"বস্তুটি" পরিবর্তনীয় স্থিতি রাখে "হিসাবে" অবজেক্ট "খুব সাধারণ, তবে মান অবজেক্ট প্যাটার্নটি বহু বছর ধরে রয়েছে।
ফ্রাঙ্ক শিয়েরার

@ ম্যাথিউ, ধন্যবাদ, আমি তা প্রতিবিম্বিত করার জন্য পাঠ্যটি আপডেট করেছি।
আইডান কুলি

@ ফ্র্যাঙ্ক: পয়েন্টারটির জন্য ধন্যবাদ। আমি এটিকে উত্তরে অন্তর্ভুক্ত করিনি, তবে অবজেক্টগুলিতে মান তৈরি করতে আমার প্রধান আপত্তিটি বি / ডব্লু অবজেক্ট ইন্টারফেস (যা বস্তুর মালিকানাধীন) এবং ক্রিয়াকলাপগুলির সাথে করতে হবে (যেখানে বস্তুর মধ্যে সম্পর্ক বেশি নিজেরাই বস্তুর চেয়ে প্রাথমিক) primary 1 + 2গাণিতিক সমতুল্য 2 + 1, তবে এর 1.+(2)চেয়ে ভিন্নভাবে প্রয়োগ করা হয় 2.+(1)। অবজেক্ট ইন্টারফেস ব্যবহার না করে অপারেশন ব্যবহার করে প্রাকৃতিকভাবে বোঝা যায় এমন অনেকগুলি এসডব্লু সমস্যা রয়েছে।
আইডন কুলি

1
@ আইদান আপনি কি উইলিয়াম কুকের "ডেটা অ্যাস্ট্রাকশন বোঝার বিষয়ে পুনর্বিবেচনা করেছেন" পড়েছেন? এটি বস্তু এবং এডিটি-র মধ্যে পার্থক্য বোঝায় যা আপনি ইঙ্গিত করছেন।
ফ্র্যাঙ্ক শায়ারার

32

আমি আপনাকে বলব না যে এটি আপনাকে আরও উন্নত ওওপি প্রোগ্রামার করার গ্যারান্টিযুক্ত, তবে এটি আপনাকে নতুনভাবে ভাবনার সাথে পরিচয় করিয়ে দেবে, এবং এটি আপনাকে কেবল ওওপির ক্ষেত্রে নয়, সাধারণভাবে সমস্যা সমাধানে আরও ভাল করে তুলতে পারে ।


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

12

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


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

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

1
প্রোলোগ কোনও কার্যকরী ভাষা নয়। এটি একটি যুক্তিযুক্ত ভাষা। আপনি যদি কোনও প্রোলোগের মতো যুক্তিযুক্ত ভাষা চান যা কার্যকরী প্রোগ্রামিংকেও সমন্বিত করে, তবে মন, আপনি বুধের গ্র্যান্ডকে দখল করতে পারেন । সতর্কতা: আপনি যদি প্রোলোগ ইতিমধ্যে জানেন তবে এটি আপনার মস্তিষ্ককে কিছুটা ক্ষতি করবে।
আমার সঠিক মতামতটি

@ জাস্ট আমার সঠিক মতামত: হ্যাঁ, আমি মনে করি আপনি ঠিক বলেছেন u অনুমানমূলক ভাষা সম্পর্কে আমার আরও শিখতে হবে!
মাইকেল কে

1
@ মোজ: হ্যাঁ, জাভাতে ল্যাম্বডাস থাকতে চাই। নামবিহীন Threadবস্তু হ'ল ... আনাড়ি।
মাইকেল কে

9

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

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

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

এখন আমি প্রতি দুই বছরে কমপক্ষে একটি নতুন প্রোগ্রামিং দৃষ্টান্ত শিখার লক্ষ্য অর্জন করেছি (এমনকি এটি এওপি-র মতো একটি ছোটখাট এক্সটেনশন দৃষ্টান্ত) এবং প্রতিটি প্রতিরূপের মধ্যে কমপক্ষে দুটি নতুন ভাষা (যতটা সম্ভব খাঁটি, আরও একটি সংকর / ব্যবহারিক) )। প্রত্যেকে আমাকে যে কোনও ভাষায় আমার সমস্ত প্রোগ্রামিংয়ে প্রয়োগ করার জন্য নতুন বৌদ্ধিক সরঞ্জাম দিয়েছে, সুতরাং সেগুলি শেখার সময়টি আমার মতে, এমনকি সামান্য অপচয়ও হয়নি।


3

আমি এটি আগে বলেছি এবং আমি এটি আবার বলব, কার্যকরী ভাষা শেখার ফলে আমার সি # উন্নত হয়েছে। এটি আমাকে ল্যাম্বডাস বুঝতে সহায়তা করেছে (এবং তাদের ভালবাসতে আমাকে সহায়তা করেছিল)। এটিও আমাকে উপলব্ধি করতে পেরেছিল যে অ্যাসিঙ্ক্রোনাস অপারেশনগুলির সাথে কাজ করার সময় আমি কার্যকরী প্রোগ্রামিং (এফ #) কতটা পছন্দ করি!


3

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

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

কম পরিশীলিত ভাষায় দক্ষতার উন্নতি করার লক্ষ্য নিয়ে ভাষা শেখার জন্য একটি ভাল পছন্দ কী?

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

কীভাবে এটি আপনার প্রোগ্রামিং দক্ষতা উন্নত করে?

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

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