কোডিং সময়ের গতি বাড়ানোর জন্য সাধারণ প্রোগ্রামিং কৌশল


20

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

এটি প্রশ্ন বাড়ে, কোন আসল কাজে ব্যবহার করার জন্য কোন ধরণের কোডিং কৌশল রয়েছে?


26
আমি অনুমান করব যে কোডিং প্রতিযোগিতায় আপনি যে কৌশলগুলি ব্যবহার করেন সেগুলির সাথে আপনি প্রকৃত চাকরিতে যে কৌশলগুলি ব্যবহার করেন তার সাথে কিছু নাও থাকতে পারে।
ডগ টি।

1
আমি আসল চাকরিতে কৌশল জিজ্ঞাসা করছিলাম না, কোডিং প্রতিযোগিতায় আমি কৌশলগুলি চাইছিলাম।
মার্কতানি

1
@DougT। আমি সম্মত, কোডিং প্রতিযোগিতার কৌশলগুলি বিষয় নয়, তবে আমি এটিও মনে করি যে আপনি কোনও কাজের পরিবেশে উত্পাদনশীলতা সম্পর্কে কথা বলতে প্রসারিত করতে পারেন, এবং আপনি কীভাবে বানরের কোডে ব্যয় করা সময়কে সর্বোত্তমভাবে হ্রাস করবেন
জেমস

1
গতিশীল অ্যারেগুলি ইনটালাইজ করতে আপনি কেন মেমসেটগুলি ব্যবহার করবেন না?
জেমস

3
সি ++ ব্যবহার করবেন না। আপনার পক্ষে সর্বোচ্চ স্তরের ভাষা ব্যবহার করুন।
কেভিন

উত্তর:


52

ওয়ার্কিং কোডটি দ্রুত উত্পাদনের উপায় হ'ল ... ধীর করে দিন। খুব ছোট পদক্ষেপ নিন। প্রতিটি পদক্ষেপ কী তা আপনি জানেন তা নিশ্চিত করুন। নিশ্চিত হয়ে নিন যে প্রতিটি পদক্ষেপের পরে আপনার কোড কম্পাইল করে চলেছে।

সর্বোত্তম, টেস্ট-চালিত বিকাশ ব্যবহার করুন। একটি ব্যর্থ পরীক্ষা লিখুন। পরীক্ষার পাস করার জন্য পর্যাপ্ত কোড লিখুন। কোডটি পরিষ্কার করার জন্য রিফ্যাক্টর, এটি এখনও সমস্ত পরীক্ষায় উত্তীর্ণ হয় তা নিশ্চিত করে। পদ্ধতি পুনরাবৃত্তি করুন।

আপনি যদি এটি না করে থাকেন তবে কোডের একটি বড় স্তূপ লেখা খুব সহজ, যা কাজ করে না। তাহলে এটি কেন কাজ করে না তা নির্ণয় করতে আপনাকে খুব দীর্ঘ সময় লাগবে।


21
আপনি গুরুতর? প্রোগ্রামিং প্রতিযোগিতার জন্য টিডিডি?
কোডিজম

1
@ কোডিজম: সাধারণ সফ্টওয়্যার বিকাশে প্রযোজ্য কৌশলগুলি অন্তর্ভুক্ত করার জন্য প্রশ্নগুলি প্রসারিত করা হয়েছিল।
দিমা

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

3
টিডিডির জন্য -1। প্রকল্পটি দীর্ঘমেয়াদী হ'ল, সংক্ষিপ্ত হ্যাকাথন না হলে এটি বোঝা যায়।
TheLQ

1
@TheLQ কেবলমাত্র আপনি ডিবাগারটি ব্যবহার করে আপনার সমস্ত সময় ব্যয় করার অর্থ এই নয় যে টিডিডি একটি খারাপ পরামর্শ।
বাইসোর

29

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


+1 - আমি এর সাথে পুরোপুরি একমত এসটিএলে কীভাবে কোড লিখবেন তা জেনে রাখা এই ধরণের প্রতিযোগিতায় বিশাল is
জর্দান পারমার

23

আমি এসিএম প্রতিযোগিতায় নিয়মিত অংশগ্রহণ করি, আশা করি এর মধ্যে কয়েকটি টিপস আপনাকে সহায়তা করবে:

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

  • সমস্যাটির বিভাগটি চিহ্নিত করুন, যদি এটি গাণিতিক, গতিশীল প্রোগ্রামিং, গ্রাফ তত্ত্ব ইত্যাদি হয় নিজেকে জিজ্ঞাসা করুন: আপনি এই ধরণের সমস্যার সাথে কতটা পরিচিত? এটি করার পরে, আপনি যে আদেশের ভিত্তিতে সেগুলি সমাধান করবেন সে বিষয়ে আপনার সিদ্ধান্ত নেওয়া উচিত , যা পরবর্তী পয়েন্টটি হাতে নিয়ে যায় ...

  • আপনি টাইপ করার আগে সমস্যাটি পুরোপুরি বুঝতে চান, সঠিক সমস্যাটি সমাধান করতে চান , আমার প্রথম প্রতিযোগিতায় আমি ভেবেছিলাম যে আমি টাইপ না করলে আমার সময় নষ্ট করছি; পরে আমি আবিষ্কার করেছি যে এটি একটি ভুল ছিল।

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

  • আছে মজা


6
টাইপ করার আগে সমস্যাটি পুরোপুরি বোঝার জন্য +1। অন্যথায়, আপনি দলের সময় নষ্ট করছেন (এসিএম প্রতিযোগিতা 3 ব্যক্তি এক কম্পিউটার)
কোডিজম

চমৎকার উত্তর. :)
জারেড ফারিশ

13

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

একটি উদাহরণ হ'ল সর্বনিম্ন দুটি ints পেতে ম্যাক্রো ব্যবহার করা

শুধু একটি ফাংশন ব্যবহার করবেন? std::minআগে থেকেই আছে.

বা অ্যারে আরম্ভ করার জন্য মেমসেট ব্যবহার করে

std::array<T, N> ইতিমধ্যে এটির বিষয়বস্তু সূচনা করে।

কোন সত্যিকারের চাকরিতে কোন ধরণের কোডিং কৌশল ব্যবহারের জন্য বিদ্যমান?

প্রথম পদক্ষেপটি আপনি যে ভাষাটি ব্যবহার করছেন তা জানা।


আমি যে ভাষাটি ব্যবহার করছি তা জানার চেষ্টা করছি, এজন্যই আমি এই প্রশ্নটি জিজ্ঞাসা করেছি! এই সম্পর্কে ইনপুট জন্য ধন্যবাদ ।
মার্কতানি

7
উহু. আমি তখন আপনার প্রশ্নটি অবশ্যই ভুল বুঝেছি। আমি একটি বই সুপারিশ করবে । আমরা কেবলমাত্র পাঠযোগ্য মূল্যবান বইগুলি সি সি আবর্জনা পড়ানোর পরিবর্তে উপস্থাপন করি।
ডেডএমজি

10

ভাষা জানার পাশাপাশি আপনার সরঞ্জামগুলি, বিশেষত আপনার সম্পাদককেও জানুন। আমি পেশাগতভাবে 15 বছরেরও বেশি সময় ধরে কোডিং করছি, এবং আমি অন্যথায় দুর্দান্ত প্রোগ্রামারদের মন্থর হতে দেখেছি কারণ তারা কেবলমাত্র সম্পাদকের কমান্ডগুলি হ'ল কার্সার কী এবং crtl-x / c / v ..

আপনার সম্পাদক কি কোনও লাইন মুছতে একক কীস্ট্রোক সমর্থন করে? একটি লাইন পুনরায় যুক্ত করতে? ফাংশন / পদ্ধতিগুলির মধ্যে সরানো? ব্লক নির্বাচন / পেস্ট? বুকমার্ক? কথায় কথায় সরান? সম্পাদক কি স্বয়ং শ্রেণি / পদ্ধতি / ফাংশন উত্পন্ন করতে পারে? এটি কি সেই সময়ের সাথে আপনি তৈরি করতে পারেন এমন টেমপ্লেটগুলি সাপোর্ট করে? দ্রুত রিফ্যাক্টরিং? ম্যাক্রো রেকর্ডিং?

আপনার সম্পাদককে জানার ফলে বিকাশের সময়টি তাত্পর্যপূর্ণ হতে পারে।


1
আমেন। আমি কেবলমাত্র একটি নতুন লোকের সাথে কাজ করছি যারা খুব দ্রুত ... এবং ভিএম ব্যবহার করে। এটি তার পক্ষে কার্যকর কারণ তিনি কীভাবে এটি ব্যবহার করবেন তা শিখতে সময় নিয়েছেন।
gbjbaanb

এছাড়াও ... যদি আপনার সম্পাদক এখানে তালিকাভুক্ত প্রায় প্রতিটি বৈশিষ্ট্য সমর্থন না করে - একটি ভাল সম্পাদক খুঁজুন।
অভি বেকার্ট

গুগল ডক্সে সাক্ষাত্কার ... এই কারণে সবচেয়ে খারাপ অভিজ্ঞতা।
উমনিওব

6

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

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

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



4

ইতিমধ্যে অনেক উত্তর আছে, এখনও আমি আমার মতামত যোগ করতে চাই।

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

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


একটি তর্জনী দিয়ে
ডাউনভোটেড

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

2

সফটওয়্যার ডেভলপমেন্ট সেই ক্লাসিক ৮০-২০ কার্যক্রমগুলির মধ্যে একটি - যেমন যেখানে প্রথম ৮০% কাজের সময় লাগে ২০%, এবং শেষের ২০% কাজের সময় ৮০% সময় নেয়।

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

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

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


-2

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

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


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

9
ভিবি 6? সিরিয়াসলি? তুমি কি অতীত থেকে?
কোনামিমন

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

আমি স্পষ্টতার জন্য প্রশ্নটি সম্পাদনা করেছি।
মার্কতানি

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