সফ্টওয়্যার বিকাশকারীদের জন্য কম্পিউটেশনাল জটিলতার ধারণাটি কি গুরুত্বপূর্ণ? [বন্ধ]


11

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

সফ্টওয়্যার বিকাশকারীদের জন্য কম্পিউটেশনাল জটিলতার ধারণাটি কি গুরুত্বপূর্ণ? এবং এটি স্নাতক কোর্সে শেখানো উচিত?


1
একটি উদাহরণ ব্যবহার করে প্রশ্নের ব্যাখ্যা দেওয়ার জন্য: আমি যে স্নাতকদের নিয়ে এসেছি তারা কী বোঝাতে পারে তা জানে না O(n^2)
মুহাম্মদ আলকারৌরি

উত্তর:


12

বেশিরভাগ বিশ্ববিদ্যালয়ে, আমি ধরে নিই (আমি আশা করি!) যে সময় এবং স্মৃতি জটিলতা অবশ্যই তাদের কোর্সের অংশ।

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

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


8

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


6

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

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

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

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

সম্পাদনা:

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

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

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


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

1
@ মুহাম্মাদ আলকারৌরি আমি এই উত্তরটি সামান্য সম্বোধনের জন্য সম্পাদনা করেছি।
দিমিত্রি

4

হ্যাঁ

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

আপডেট: এটি গুরুত্বপূর্ণ কেন

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

মোদ্দা কথাটি হ'ল দুর্ঘটনাক্রমে এমন কিছু তৈরি করা সহজ যা প্রস্থের গতি কমিয়ে দেয়, বা কাজ শেষ হওয়ার আগে স্মৃতি থেকে সর্বদা চলে যাবে। যখন আরও মেমরিযুক্ত দ্রুত মেশিনগুলি ছোট ছোট ভুলগুলি প্রশমিত করতে পারে তবে তারা প্রায়শই জটিলতার সমস্যাগুলি প্রশমিত করতে পারে না।


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

যদি প্রোগ্রামটি 2 দিনের মধ্যে শেষ হয় তবে এর পরিবর্তে 2 বছর সময় লাগবে, আমি বলব যে কাজটি তাদের দেওয়া হয়েছে তা সম্পাদন করতে তারা ব্যর্থ হয়েছে।
ডায়েটবুদ্ধ

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

বা সম্ভবত এমন সিদ্ধান্ত গ্রহণের প্রক্রিয়া যা "জুনিয়র। সফ্টওয়্যার বিকাশকারী" বা "ইন্টার্ন" এর পরিবর্তে "সফ্টওয়্যার বিকাশকারী" হিসাবে প্রোগ্রামে অযোগ্য কাউকে নিয়োগের দিকে নিয়ে যায়।
ডায়েটবুদ্ধ

3

আমি দেখতে পেয়েছি যে এটি "গুরুত্বপূর্ণ বা না" এটি জিজ্ঞাসা করা অস্পষ্ট।

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

প্রোগ্রামারদের পক্ষে কি অত্যন্ত দক্ষ কোড বা উদ্ভাবনী অবকাঠামোগত অ্যালগরিদম লেখার আশা করা যায়? হ্যাঁ.

প্রচলিত ওয়েব অ্যাপ্লিকেশনগুলি বিকাশকারী প্রোগ্রামারদের পক্ষে কি এটি গুরুত্বপূর্ণ? তারা এগুলি পরিচালনা না করে বা ওপেন সোর্স ওয়ার্ল্ডে কার্যকর প্রয়োগ পেতে পারে ations

অ্যাপ্লিকেশনগুলির জন্য জিইআইআই তৈরি করা প্রোগ্রামারদের পক্ষে কি এটি গুরুত্বপূর্ণ? সম্ভবত না, কারণ সফল জিইউআই ফ্রেমওয়ার্কগুলি সমস্ত ছোট ছোট বিবরণ দূরে বিমূর্ত করে।

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

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

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


1
দ্বিতীয় অংশটি সম্ভবত কম অস্পষ্ট: এটি বিএসসি পর্যায়ে কম্পিউটারের শিক্ষার্থীদের শেখানো উচিত?
মুহাম্মদ আলকারৌরি

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