paint-brush
আপনার কোডের দুর্গন্ধযুক্ত অংশগুলি কীভাবে সন্ধান করবেন [পার্ট XLVI]দ্বারা@mcsee
635 পড়া
635 পড়া

আপনার কোডের দুর্গন্ধযুক্ত অংশগুলি কীভাবে সন্ধান করবেন [পার্ট XLVI]

দ্বারা Maximiliano Contieri10m2023/11/27
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

কাউবয় কোডাররা সর্বোত্তম অনুশীলন অনুসরণ করে না। তারা দলের পরামর্শ অনুসরণ করে না। কাউবয় কোডিংকে সাধারণত সফ্টওয়্যার ডেভেলপমেন্টের জন্য একটি অপেশাদার এবং ঝুঁকিপূর্ণ পদ্ধতি হিসাবে বিবেচনা করা হয় কারণ এটি এমন কোডের দিকে নিয়ে যেতে পারে যা বজায় রাখা কঠিন এবং ত্রুটির প্রবণতা।
featured image - আপনার কোডের দুর্গন্ধযুক্ত অংশগুলি কীভাবে সন্ধান করবেন [পার্ট XLVI]
Maximiliano Contieri HackerNoon profile picture

আপনার কোডটি গন্ধ পাচ্ছে কারণ সম্ভবত এমন অনেক উদাহরণ রয়েছে যেখানে এটি সম্পাদনা বা উন্নত করা যেতে পারে।


এই গন্ধগুলির বেশিরভাগই এমন কিছুর ইঙ্গিত যা ভুল হতে পারে। অতএব, সেগুলিকে নিজের প্রতি স্থির করার প্রয়োজন নেই... (যদিও আপনার এটির দিকে নজর দেওয়া উচিত।)

পূর্ববর্তী কোড গন্ধ

আপনি এখানে আগের সমস্ত কোড গন্ধ (Part I - XLV) খুঁজে পেতে পারেন।


চল অবিরত রাখি...


কোড গন্ধ 226 - মিশ্র অগ্রাধিকার

আরেকটি বিধ্বস্ত মহাকাশযান। আরেকটি সফটওয়্যার সমস্যা


TL; DR: সফ্টওয়্যার ডিজাইন এবং পরীক্ষা করুন। এটি হার্ডওয়্যারের তুলনায় সস্তা

সমস্যা

সমাধান

  1. সঠিক সিমুলেশন তৈরি করুন
  2. ত্রুটি-সহনশীল সফটওয়্যার তৈরি করুন

প্রসঙ্গ

লুনা-25 19 আগস্ট, 2023 তারিখে চাঁদের পৃষ্ঠে বিধ্বস্ত হয়।


ভারতের চন্দ্রযান-৩ সফট চাঁদের দক্ষিণ মেরুতে অবতরণ করার ৪ দিন আগে।


একটি ফরেনসিক বিশ্লেষণ প্রকাশ করেছে যে নির্দেশাবলী একটি বাস ভাগ করেছে এবং সঠিকভাবে অগ্রাধিকার দেওয়া হয়নি।


মহাকাশযানগুলির সফ্টওয়্যার ত্রুটিগুলির একটি দীর্ঘ ইতিহাস রয়েছে।

কোডের উদাহরণ

ভুল

 class TaskManager: def __init__(self): self.tasks = [] def add_task(self, task, priority): self.tasks.append((task, priority)) def execute_tasks(self): # No sorting for task, _ in self.tasks: task.execute() class Task: def __init__(self, name): self.name = name def execute(self): print(f"Executing task: {self.name}") task_manager = TaskManager() highPriorityTask = Task("Slow down") mediumPriorityTask = Task("Take Photos") reviveKlaatu = Task("Klaatu barada nikto") # unsorted task_manager.add_task(mediumPriorityTask, 2) task_manager.add_task(highPriorityTask, 1) task_manager.add_task(reviveKlaatu, 3) task_manager.execute_tasks()

ঠিক

 class TaskManager: def __init__(self): self.tasks = [] def add_task(self, task, priority): self.tasks.append((task, priority)) def execute_tasks(self): # Sort tasks by priority (high to low) self.tasks.sort(key=lambda x: x[1], reverse=True) for task, _ in self.tasks: task.execute() class Task: def __init__(self, name): self.name = name def execute(self): print(f"Executing task: {self.name}") task_manager = TaskManager() highPriorityTask = Task("Slow down") mediumPriorityTask = Task("Take Photos") reviveKlaatu = Task("Klaatu barada nikto") # unsorted task_manager.add_task(mediumPriorityTask, 2) task_manager.add_task(highPriorityTask, 1) task_manager.add_task(reviveKlaatu, 3) task_manager.execute_tasks()

সনাক্তকরণ

  • [x] ম্যানুয়াল

এটি একটি নকশা গন্ধ

ট্যাগ

  • নির্ভরযোগ্যতা

উপসংহার

সফ্টওয়্যার উপাদান তৈরি করুন এবং বাস্তব এবং বাস্তব অবস্থার অনুকরণ করুন

সম্পর্ক

কোড গন্ধ 198 - লুকানো অনুমান

অধিক তথ্য

দাবিত্যাগ

কোড গন্ধ আমার মতামত .


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


অ্যাডা লাভলেস

সফটওয়্যার ইঞ্জিনিয়ারিং মহান উক্তি


কোড গন্ধ 227 - কাউবয় কোডিং

হলিউড মুভিতে কাউবয় ছেড়ে দিন।


TL;DR: একটি দল প্রোগ্রামার হিসাবে কোড লিখুন

সমস্যা

  • পঠনযোগ্যতা
  • অবিশ্বস্ত কোড
  • মানুষ ব্যবস্থাপনা সমস্যা
  • সমন্বয়ের অভাব

সমাধান

  1. পেশাদার কোড লিখুন।


  2. ঘোষণামূলক নন-ক্রিপ্টিক নাম ব্যবহার করুন।

প্রসঙ্গ

কাউবয় কোডাররা সর্বোত্তম অনুশীলন অনুসরণ করে না।


তারা দলের পরামর্শ অনুসরণ করে না।


কাউবয় কোডিংকে সাধারণত সফ্টওয়্যার ডেভেলপমেন্টের জন্য একটি অপেশাদার এবং ঝুঁকিপূর্ণ পদ্ধতি হিসাবে বিবেচনা করা হয় কারণ এটি এমন কোডের দিকে নিয়ে যেতে পারে যা বজায় রাখা কঠিন এবং ত্রুটির প্রবণতা।


কাউবয় প্রোগ্রামাররা ভালো মানুষ; তবে, তারা একটি দলে কাজ করতে পারে না

কোডের উদাহরণ

ভুল

 # Very simple example # Compute the sum of two numbers without any structure or best practices. num1 = input("Enter the first number: ") num2 = input("Enter the second number: ") # WARNNING!!!! Don't remove the line below !!!!! # (Unpleasant comment) res = num1 + num2 # (No data type checking or error handling) print("The sum is: " + result) # (No validation or formatting) # (No good names, no functions, no error handling, no testing, # no version control, and no structure.)

ঠিক

 def add_numbers(): try: firstAddend = float(input("Enter the first number: ")) secondAddend = float(input("Enter the second number: ")) total = firstAddend + secondAddend return total except ValueError: print("Invalid input. Please enter valid numbers.") return None def main(): total = add_numbers() if total is not None: print("The sum is: {:.2f}".format(sum)) if __name__ == "__main__": main()

সনাক্তকরণ

  • [x] ম্যানুয়াল


আপনি এই কোডিং অনুশীলনগুলি প্রতিরোধ করতে এবং টিম বিল্ডিং প্রয়োগ করতে পরিবেশগত নিয়ম সেট করতে পারেন।

ব্যতিক্রম

  • খুব ছোট ব্যক্তিগত প্রকল্প

ট্যাগ

  • ঘোষণামূলক

উপসংহার

সফটওয়্যার ডেভেলপমেন্ট হল টিমওয়ার্ক।

সম্পর্ক

কোড গন্ধ 06 - খুব চতুর প্রোগ্রামার

কোড গন্ধ 02 - ধ্রুবক এবং ম্যাজিক সংখ্যা

কোড গন্ধ 105 - কমেডিয়ান পদ্ধতি

অধিক তথ্য

https://www.linkedin.com/pulse/software-development-cowboy-coding-hakan-atbaş/

ক্রেডিট

আনস্প্ল্যাশে টেলর ব্র্যান্ডনের ছবি


কম্পিউটারের বিপদ এই নয় যে তারা শেষ পর্যন্ত পুরুষদের মতো স্মার্ট হয়ে উঠবে, তবে আমরা ইতিমধ্যে তাদের সাথে দেখা করতে রাজি হব।

বার্নার্ড আভিশাই


কোড গন্ধ 228 - ফাইল প্রতি একাধিক ক্লাস

একের অধিক শ্রেণী বিশৃঙ্খল।


TL;DR: উদ্বেগের নীতি এবং ফাইল সংগঠনের বিচ্ছেদ অনুসরণ করুন

সমস্যা

  • কোড সংস্থা
  • কাপলিং
  • অটোলোডিং সমস্যা
  • ডিবাগিং
  • সংস্করণ নিয়ন্ত্রণ এবং একত্রীকরণ দ্বন্দ্ব

সমাধান

  1. ফাইল প্রতি একটি একক ক্লাস ঘোষণা


  2. নামের স্কোপিং ব্যবহার করুন

প্রসঙ্গ

যে ভাষাগুলিতে একটি ফাইল সিস্টেম ব্যবহার করে ক্লাস ঘোষণা করা হয়, সেখানে প্রতি ফাইলে একটি ক্লাস থাকাকে সাধারণত সর্বোত্তম অনুশীলন হিসাবে বিবেচনা করা হয়।


এই পদ্ধতিটি কোড সংগঠন এবং রক্ষণাবেক্ষণযোগ্যতা উন্নত করতে সাহায্য করে এবং সম্ভাব্য সমস্যাগুলি হ্রাস করে।


আপনি আপনার প্রকল্প কাঠামোর মধ্যে পৃথক ডিরেক্টরিতে নামস্থান সংগঠিত করতে পারেন।


এইভাবে, আপনি একটি একক ফাইলে একাধিক ক্লাস ঘোষণা করার সমস্যাগুলি এড়িয়ে গিয়ে একটি যৌক্তিক এবং দক্ষ কোডবেস বজায় রাখতে পারেন।

কোডের উদাহরণ

ভুল

 <? namespace MyNamespace; class Class1 { public function sayHello() { echo "Hello from Class1!\n"; } } class Class2 { public function sayHello() { echo "Hello from Class2!\n"; } }

ঠিক

 <? namespace MyNamespace; class Class1 { public function sayHello() { echo "Hello from Class1!\n"; } }
 <? namespace MyNamespace; class Class2 { public function sayHello() { echo "Hello from Class2!\n"; } }

সনাক্তকরণ

  • [x] স্বয়ংক্রিয়

অনেক মান এই নিয়ম প্রয়োগ করে

ট্যাগ

  • কাপলিং

উপসংহার

আপনার কোড সংগঠিত রাখুন, এবং পরিচিত মান অনুসরণ করুন.

সম্পর্ক

কোড গন্ধ 48 - মান ছাড়া কোড

অধিক তথ্য

ক্রেডিট

আনস্প্ল্যাশে মারজান ব্লানের ছবি


প্রয়োজনীয়তা বা ডিজাইন ছাড়াই, প্রোগ্রামিং হল একটি খালি টেক্সট ফাইলে বাগ যোগ করার শিল্প।


লুই স্রিগলি


কোড গন্ধ 229 - লাল টেপ

আপনি আপনার কোড overcomplicate.


TL;DR: দুর্ঘটনাজনিত জটিলতা এবং আমলাতন্ত্র এড়িয়ে চলুন

সমস্যা

  • দুর্ঘটনাজনিত জটিলতা
  • পঠনযোগ্যতা
  • বিজেকশন ফল্ট

সমাধান

  1. MAPPER ব্যবহার করে বাস্তব-বিশ্বের বস্তুতে দায়িত্ব বরাদ্দ করুন।

প্রসঙ্গ

একটি "লাল টেপ" কোডের গন্ধ অপ্রয়োজনীয় জটিলতা, আমলাতন্ত্র বা অত্যধিক কনফিগারেশনের সাথে সম্পর্কিত হতে পারে যা কোডবেসকে বোঝা বা বজায় রাখা কঠিন করে তোলে।

কোডের উদাহরণ

ভুল

 class VotingSystem: def __init__(self, config): self.config = config def validate_voter(self, voter_id): if self.config['voter_verification_enabled']: # Code to verify the voter's identity goes here def cast_vote(self, voter_id, candidate): if self.config['voting_enabled']: # Code to record the vote goes here def generate_vote_report(self): if self.config['generate_report']: # Code to generate a voting report goes here def audit_voting_system(self): if self.config['audit_enabled']: # Code to perform an audit of the voting system goes here # ... other voting-related methods ... # Usage config = { 'voter_verification_enabled': True, 'voting_enabled': False, 'generate_report': False, 'audit_enabled': True } voting_system = VotingSystem(config) # Voter validation, voting, report generation, # and auditing are handled based on the configuration.

ঠিক

 class VoterVerification: def verify_voter(self, voter_id): # Code to verify the voter's identity goes here class VotingMachine: def cast_vote(self, voter_id, candidate): # Code to record the vote goes here class VoteReporter: def generate_report(self): # Code to generate a voting report goes here class VotingAuditor: def audit_voting_system(self): # Code to perform an audit of the voting system goes here # Usage voter_verification = VoterVerification() voting_machine = VotingMachine() vote_reporter = VoteReporter() voting_auditor = VotingAuditor() # Voter verification, vote casting, report generation, # and auditing are handled separately.

সনাক্তকরণ

  • [x] আধা-স্বয়ংক্রিয়

কিছু সরঞ্জাম অনুমান করতে পারে যে আপনি অপ্রয়োজনীয় দায়িত্বের সাথে আপনার বস্তুগুলিকে ফুলিয়ে তুলছেন।

ট্যাগ

  • ব্লোটারস

উপসংহার

কোন বৈশিষ্ট্য সক্রিয় তা নির্ধারণ করতে বিকাশকারীদের জটিল কনফিগারেশন নেভিগেট করতে হবে বলে লাল টেপ কোডের গন্ধ স্পষ্ট।


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

সম্পর্ক

কোড গন্ধ 54 - অ্যাঙ্কর বোট

দাবিত্যাগ

কোড গন্ধ আমার মতামত .

ক্রেডিট

আনস্প্ল্যাশে ব্লোআপের ছবি


সফ্টওয়্যারের একটি ভুল: যদি এটি কাজ করে এবং আমরা কিছু পরিবর্তন না করি তবে এটি কাজ করতে থাকবে।

জেসিকা কের


কোড গন্ধ 230 - শ্রোডিঙ্গার কোড

আপনার কোড মৃত এবং জীবিত.


TL;DR: রেসের অবস্থার জন্য সাবধানে দেখুন

সমস্যা

সমাধান

  1. জাতি শর্ত এড়িয়ে চলুন


  2. গ্লোবাল ভেরিয়েবল এড়িয়ে চলুন


  3. সঠিক সিঙ্ক্রোনাইজেশন ব্যবহার করুন

প্রসঙ্গ

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


এটি ঘটতে পারে যখন কোডটিতে একটি রেসের অবস্থা থাকে, অথবা যখন কোডটি বিশ্বব্যাপী ভেরিয়েবলের অবস্থার উপর নির্ভর করে যা অন্যান্য থ্রেড বা প্রক্রিয়া দ্বারা পরিবর্তন করা যেতে পারে।

কোডের উদাহরণ

ভুল

 import threading cats_alive = 0 def thread_1(): cats_alive += 1 def thread_2(): cats_alive -= 1 if cats_alive > 0: feedThem() # The value of cats_alive is indeterminate, # so the code can be in either of the two states: # # 1. cats_alive > 0 and feedThem() is called. # 2. cats_alive <= 0 and feedThem() is not called.

ঠিক

 import threading lock = threading.Lock() cats_alive = 0 def thread_1(): with lock: cats_alive += 1 def thread_2(): with lock: cats_alive -= 1 if cats_alive > 0: feedThem() # With the lock, the two threads cannot access # the `cats_alive` variable at the same time. # This means that the value of `cats_alive` is always determined, # and the program will not exhibit Schrödinger code behavior.

সনাক্তকরণ

  • [x] ম্যানুয়াল

সমবর্তী কোডে কোড পর্যালোচনা করুন

ট্যাগ

  • সঙ্গতি
  • গ্লোবালস

উপসংহার

শ্রোডিঙ্গার কোড এড়াতে, রেসের অবস্থা এড়িয়ে চলুন এবং গ্লোবাল ভেরিয়েবলের অবস্থার উপর নির্ভর করে এড়িয়ে চলুন যা অন্যান্য থ্রেড বা প্রক্রিয়া দ্বারা পরিবর্তন করা যেতে পারে।


আপনি যদি আপনার কোডে একটি গ্লোবাল ভেরিয়েবল ব্যবহার করতে চান তবে নিশ্চিত করুন যে এটি সঠিকভাবে সিঙ্ক্রোনাইজ করা হয়েছে।

সম্পর্ক

কোড গন্ধ 198 - লুকানো অনুমান

কোড গন্ধ 32 - Singletons

কোড গন্ধ 60 - গ্লোবাল ক্লাস

ক্রেডিট

আনস্প্ল্যাশে ইয়ারলিন মাতুর ছবি


শেষ জিনিস আপনি যে কোন প্রোগ্রামার করতে চেয়েছিলেন অভ্যন্তরীণ অবস্থার সঙ্গে জগাখিচুড়ি

অ্যালান কে


পরের সপ্তাহে, আরও 5টি গন্ধ।