সমাধানটির পক্ষে দক্ষ হওয়া কি গুরুত্বপূর্ণ?


9

আমি অনেক সমস্যার সমাধান করি, বেশিরভাগ টপ কোডডার থেকে। আমি অনেকের জন্য উত্তর পাব, তবে বেশিরভাগ সময় আমি একটি অদক্ষ সমাধান দিয়ে শেষ করি।

বাস্তব-বিশ্বের বাস্তবায়নে - সমস্যার সমাধানটি দক্ষ কিনা তা কি সত্যই কার্যকর হয়? তা হলে আমি কীভাবে এটি উন্নতি করতে পারি?


4
আপনি কি কোনও প্রতিযোগিতার দৃষ্টিকোণ বা একটি বাস্তব-বিশ্বের বাস্তবায়নের অবস্থান থেকে জিজ্ঞাসা করছেন?
rjzii

@RobZ: বাস্তব বিশ্বের বাস্তবায়নের ইন
অ্যান্ট এর

1
"রিয়েল-ওয়ার্ল্ড" অনেক জায়গা জুড়ে। এমবেডেড? সার্ভার অ্যাপ্লিকেশন? মোবাইল অ্যাপ্লিকেশন? একক ব্যবহারকারীর ব্যক্তিগত কম্পিউটার সফটওয়্যার? বৈজ্ঞানিক সিমুলেশন? উত্তরগুলি তাদের জন্য অগত্যা একই নয়।
ডেভিড থর্নলি

উত্তর:


34

সর্বোত্তম সমাধান হ'ল দক্ষতা বজায় রাখা এবং সম্পন্ন করা (ক্রমবর্ধমান গুরুত্বের ক্রমে) ।

Answer এই উত্তরটি থেকে আপনার সত্যিকারের একমাত্র জিনিসটি নেওয়া উচিত ^^^

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

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


3
হা. এবং একটি মারাত্মকভাবে অদক্ষ প্রোগ্রাম যা উভয়ই সঠিক এবং সম্পন্ন হয়েছে যা আপনাকে আপনার উন্নতির বিরুদ্ধে পরীক্ষা করার জন্য কিছু দেয়।
মাইক শেরিল 'ক্যাট রিক্যাল'

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

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

8

আমি মাইক সেলিনির সাথে একমত হব, আমি যে জিনিসটি যুক্ত করব তা হল।

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

আমি দক্ষতাটি "দক্ষ ব্যবহারকারী" হিসাবে দক্ষ অ্যালগরিদম হিসাবে না দেখে এসেছি।


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

ক্রিস, আপনি সঠিক হতে পারেন যে কোনও ব্যবহারকারী পাশাপাশি দুটি সিস্টেমের মধ্যে পার্থক্যটি লক্ষ্য করতে পারে, তবে একটি সিস্টেম কি একজন ব্যবহারকারীকে তার কাজের ক্ষেত্রে লক্ষণীয়ভাবে আরও দক্ষ করে তুলবে? আমার পর্যবেক্ষণ (আমি 25 বছরেরও বেশি সময় ধরে এটি করছি) হ'ল দুটি সিস্টেম ব্যবহারকারীকে একটি নির্দিষ্ট সময়ে একই পরিমাণ কাজ করতে সক্ষম করবে।
জয়দী

2

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

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

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

চূড়ান্ত সমাধানটি অধ্যাপকের দ্বারা সবচেয়ে দক্ষ হিসাবে বিচার করা হয়েছিল। দেখা যাচ্ছে যে সমস্যাটি আসলে সমস্যাটি সম্পূর্ণরূপে বোঝার জন্য ব্যায়াম ছিল এবং কেবল বাইরে বেরোনোর ​​এবং সর্বাধিক দক্ষ সমাধানের সন্ধান করার জন্য নয়।

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

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


2

এটি প্রতিযোগিতার কাঠামোর উপর নির্ভর করে, তবে সাধারণত, হ্যাঁ: পারফরম্যান্স বেশিরভাগ সময় তাদের ডকুমেন্টেশন অনুসারে বিবেচনা করে । কখনও কখনও, পরবর্তী লিঙ্কের মতো, আপনাকে শিকার করতে হবে, তবে উদ্ধৃত করতে হবে:

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

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

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

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


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

না, আমি সবেমাত্র আমাজনে পাওয়া প্রথমটি তালিকাভুক্ত করেছি এবং এটি দ্বিতীয় সংস্করণ কিনা তা পরীক্ষা করে বিরক্ত করিনি।
ড্যানিয়েল পিটম্যান

1

সমাধানটি কতটা দক্ষ হওয়া দরকার তা বিভিন্ন কারণের উপর নির্ভরশীল। আপনার ব্যবহারকারী কী চান তা জেনে রাখা সবচেয়ে বড় বিষয়। এখানে কয়েকটি উদাহরণ দেওয়া হল।

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

কীভাবে আপনার কোডটিকে আরও দক্ষ করবেন:

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

অপ্টিমাইজেশনের পুরো ক্ষেত্র রয়েছে, তবে উপরের দুটি টিপসের কমপক্ষে আপনাকে শুরু করা উচিত।


1

একটি প্রতিযোগিতার জন্য আপনার বুঝতে হবে বিচারকরা এবং তারা কী সম্পর্কে - যদি তারা দুর্দান্ত কোডার এবং আরও কিছু খুঁজছেন, তবে আপনি আরও কার্যকর কোডের জন্য কুডো পাবেন।

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

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

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