আমি কীভাবে সবসময় এড়াতে পারি যদি আমি স্ক্র্যাচ থেকে আমার প্রোগ্রামটি পুরোপুরি পুনর্নির্মাণ করি তবে আমি এটি আরও ভাল করতে পারি? [বন্ধ]


91

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

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


87
এটির স্বাভাবিক, প্রোগ্রামটি আরও
ইওয়ান



43
প্রোগ্রামিং এ স্বাগতম। আপনি যদি পুরানো কোডটি না দেখে এবং "উরগ" মনে করেন তবে আপনার উদ্বেগ শুরু করা উচিত কারণ এর অর্থ আপনি শেখা বন্ধ করেছেন।
কল্টর

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

উত্তর:


4

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

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

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

আপনি যদি কোনও দলের অংশ হন তবে নকশা প্রক্রিয়াটির জন্য একটি পর্যালোচনা প্রক্রিয়া করা অত্যন্ত গুরুত্বপূর্ণ। কেউ আপনার কোড পর্যালোচনা করুন যাতে আপনি কীভাবে আপনার নকশাটি উন্নত করতে পারেন তা শিখতে পারেন।


100

এটি একটি খুব সাধারণ অভিজ্ঞতা

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

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

"মুখে মুখে ঘি না দেওয়া পর্যন্ত প্রত্যেকেরই পরিকল্পনা রয়েছে।"

এটা সম্পর্কে কি করতে হবে

কিছুটা ডিগ্রি পর্যন্ত আপনাকে মেনে নিতে শিখতে হবে যে আপনার কোডটি কখনই নিখুঁত হবে না। একটি জিনিস যা আমাকে তাতে সহায়তা করেছিল তা হ'ল "যদি আমি একমাস আগে আমার লেখা কোডটি ঘৃণা করি তবে এর অর্থ আমি শিখেছি এবং আরও ভাল প্রোগ্রামার হয়েছি"।

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


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

10
@ ডেভিড আরনো উপস্থিত পরীক্ষাগুলি দিয়ে রিফ্যাক্টরিংয়ের মূল বিষয় কী? এটি একটি সিস্টেম আপগ্রেড করার আগে এবং ব্যাকআপ করার মতো ... 0 মজাদার।
ডিউরিস

3
@ ডিউরিস, :) সত্য, আপনি যদি চ্যালেঞ্জ পছন্দ করেন, তবে পরীক্ষা লিখবেন না
ডেভিড আরনো

6
@ ডিউরিস এটি প্যারাসুট পরা বিমানের বাইরে ঝাঁপ দেওয়ার মতো!
জলিজোকার

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

46

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

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


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

রিফ্যাক্টরিং সম্পর্কে আমার মতে সেরা সূচনা পয়েন্ট: রিফ্যাক্টরিং নতুন বৈশিষ্ট্য সম্পর্কে
ওয়াইল্ডকার্ড

9

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

এমনকি সেই আনন্দের ক্ষেত্রেও আপনি এমন নতুন ভাষার বৈশিষ্ট্য শিখতে পারেন যা আরও ভাল নকশা তৈরি করতে সহায়তা করবে।

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

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

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

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

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


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

3

আমি কীভাবে সবসময় এড়াতে পারি যদি আমি স্ক্র্যাচ থেকে আমার প্রোগ্রামটি পুরোপুরি পুনর্নির্মাণ করি তবে আমি এটি আরও ভাল করতে পারি?

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

তবে অবাক হবেন না, যদি এন বছর পরে আপনি এই কোডটিতে ফিরে আসেন, এবং "কী গোলমাল" মনে করেন।


3
অথবা, আপনি আপনার বসকে প্রোটোটাইপটি দেখান, তিনি বলেছিলেন 'ব্রিলিয়ান্ট, এটি করব'll' আপনাকে অন্য প্রকল্পে নিয়ে যায় এবং আপনার প্রোটোটাইপ উত্পাদন হয়ে যায়।
রায়ানফায়েস্কটল্যান্ড

2
এই পরামর্শটি এত সাধারণ যে এটি সম্পর্কে একটি কথা আছে। "ফেলে দিতে একটি তৈরি করুন"। এবং সেই পরামর্শটি এতই অপব্যবহার করা হয়েছে যে এ সম্পর্কে একটি প্রবাদ আছে: "আপনি যদি কেউ ফেলে দেওয়ার জন্য তৈরি করেন তবে আপনি সম্ভবত দু'জন ফেলে দেবেন।"
এরিক লিপার্ট

2
@ এরিকলিপার্ট আমার অভিজ্ঞতা বিপরীত দিক থেকে ভয়াবহ হয়েছে - আমরা যদি একটি ফেলে দেওয়ার জন্য তৈরি করি তবে এটি অনিবার্যভাবে গ্রাহকের কাছে প্রেরণ হয়ে যায়।
জন

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

); @EricLippert ঠিক কারণ গুই গত সংগ্রহ করতে, এবং না একটি প্রোটোটাইপ ব্যবস্থার GUI নির্মাণ করা হয়
BЈовић

3

এই মন্ত্রটি মনে রাখবেন:

নিখুঁত হ'ল ভালদের শত্রু

নিখুঁত সমাধান সবসময় নয় আদর্শ সমাধান। আদর্শ সমাধান এক যা স্থিতি "যথেষ্ট ভাল" কাজ অন্তত পরিমাণ সঙ্গে অর্জন করা হয়।

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

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

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


3

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

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

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

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

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

আমি মনে করি আমরা সবাই একমত হতে পারি numpyযা সফল বৈজ্ঞানিক কম্পিউটিং সফটওয়্যার। তাদের ইন্টারফেসগুলি ছোট, দুর্দান্ত ব্যবহারযোগ্য এবং সবকিছু এক সাথে দুর্দান্তভাবে খেলছে plays নোট করুন যে numpyএর রেফারেন্স গাইডটি স্পষ্টভাবে TDD এর জন্য সুপারিশ করেছে: https://docs.scipy.org/doc/numpy-1.15.1/references/testing.html । আমি অতীতে এসএআর (সিনথেটিক অ্যাপ্রিয়েচার রাডার) ইমেজিং সফ্টওয়্যারটির জন্য টিডিডি ব্যবহার করেছি: এবং আমি এটিও দৃ can়ভাবে বলতে পারি যে এটি সেই নির্দিষ্ট ডোমেনের জন্য অত্যন্ত কার্যকরভাবে কাজ করে।

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

আমি কীভাবে সবসময় এড়াতে পারি যদি আমি স্ক্র্যাচ থেকে আমার প্রোগ্রামটি পুরোপুরি পুনর্নির্মাণ করি তবে আমি এটি আরও ভাল করতে পারি?

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

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

আছে HTH।


2

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

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

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


1

এখানে অন্যান্য দুর্দান্ত উত্তরের সাথে যুক্ত করতে, একটি জিনিস যা আপনাকে সহায়ক বলে মনে হচ্ছে তা হল আপনি কোথায় যেতে চান তা জেনে

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

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

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


1

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

যেহেতু সফ্টওয়্যার বিকাশ সত্যই 90 এর দশকে মূলধারার হয়ে গেছে, এটি প্রায় 30 বছর বয়সী। আমরা শিখেছি যে এটি সামাজিক বিজ্ঞানের মতো কোনও ইঞ্জিনিয়ারিং শৃঙ্খলা নয়, এবং আমরা কেবল শুরু করেছি।

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

কারও কোনও ফিক্স নেই। এমনকি বিশেষজ্ঞরা এখনও স্ট্রগুলিতে আঁকড়ে ধরে আছেন।

স্বাগতম, এবং সতর্ক করা হবে, এটি একাকী জায়গা; তবে একেবারে চটুল।


1

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

আপনার অভিজ্ঞতাটিও দীর্ঘদিন ধরে আমার ছিল, তবে সম্প্রতি (গত কয়েক বছর), আমি আরও কোড তৈরি করেছি যা আমার মনে হয় না যে আমার সবকিছু ফেলে দেওয়া দরকার। এখানে আমি মোটামুটি যা করেছি:

  1. কোডের কোনও নির্দিষ্ট ব্লক কী অনুমান করছে তা সম্পর্কে পরিষ্কার হন। ত্রুটিগুলি পূরণ না করা হলে তারা নিক্ষেপ করুন। বাকি সফ্টওয়্যারটি কী করছে সে সম্পর্কে বিশদ নির্ভর না করে এটিকে বিচ্ছিন্নভাবে ভাবেন in (বাকি সফ্টওয়্যারটি আপনি কী অনুমানগুলি প্রয়োগ করেন এবং কী ক্ষেত্রে আপনি সমর্থন করেন সেগুলি প্রভাবিত করে তবে কোনও অনুমান লঙ্ঘন করা হলে আপনি কোনও ত্রুটি ছুঁড়েছিলেন কিনা তা প্রভাবিত করে না))
  2. নিম্নলিখিত নিয়ম এবং নিদর্শন এবং অনুশীলনগুলি বিশ্বাস করা বন্ধ করুন ভাল কোড তৈরি করবে। সুস্পষ্ট এবং সহজবোধ্য নয় এমন মানসিকতা এবং অনুশীলনগুলি ফেলে দিন Th এই এক বিশাল ছিল। ওও এবং টিডিডি সাধারণত এমনভাবে শেখানো হয় যা ব্যবহারিক বিবেচনার ভিত্তিতে নয়, কোড লেখার সময় আপনার বিমূর্ত নীতিগুলির একটি সেট হিসাবে অনুসরণ করা উচিত। তবে এটি আসলে ভাল কোড বিকাশের জন্য সম্পূর্ণ অপ্রয়োজনীয়। আপনি যদি ওও বা টিডিডি একেবারেই ব্যবহার করেন তবে এটি আপনার বুঝতে সমস্যাগুলির সমাধান হিসাবে ব্যবহার করা উচিত । অন্য কথায়, এগুলি কেবল তখনই ব্যবহার করা উচিত যখন আপনি কোনও সমস্যার দিকে তাকান এবং মনে করেন, "ঠিক আছে, এটি পুরোপুরি উপলব্ধি করে এবং একটি ভাল সমাধান হিসাবে অত্যন্ত সুস্পষ্ট" " পূর্বের না.
  3. যখন আমি কোড লিখছি, দুটি প্রশ্নের উপর ফোকাস করুন:
    • আমি কীভাবে বৈশিষ্ট্য এবং গ্রন্থাগারগুলি ব্যবহার করার জন্য ডিজাইন করা হয়েছিল সেগুলি ব্যবহার করছি ? এর মধ্যে এটি যে ধরণের সমস্যা সমাধানের উদ্দেশ্যে করা হয়েছিল বা কমপক্ষে খুব অনুরূপ সমস্যাগুলির জন্য এটি ব্যবহার অন্তর্ভুক্ত।
    • এটা কি সহজ ? আমার সহকর্মীরা এবং আমি পরে যুক্তিটি সহজেই অনুসরণ করতে সক্ষম হব? কোড থেকে তাত্ক্ষণিকভাবে স্পষ্ট নয় এমন কিছু জিনিস রয়েছে?

আমার কোডটি এখন আরও "প্রক্রিয়াজাতীয়", যার অর্থ এটি কী ডেটা স্ট্রাকচার ব্যবহার করে তার পরিবর্তে এটি কী পদক্ষেপ নেয় তা দ্বারা সংগঠিত mean আমি ভাষাগুলিতে এমন জিনিসগুলি ব্যবহার করি যেখানে ফ্লাইয়ে স্ট্যান্ডেলোন ফাংশন প্রতিস্থাপন করা যায় না (সি # এবং জাভা ফ্লাইতে ফাংশনগুলি প্রতিস্থাপন করতে পারে না, পাইথন পারে) can আমার এখন আরও বেশি ইউটিলিটি ফাংশন তৈরি করার প্রবণতা রয়েছে , যা কিছু বিরক্তিকর বয়লারপ্লেটকে বাইরে সরিয়ে দেয় যাতে আমি আসলে আমার কোডটির যুক্তি পড়তে পারি। (উদাহরণস্বরূপ, যখন আমাকে তালিকার সমস্ত আইটেমের সংমিশ্রণটি প্রক্রিয়া করার প্রয়োজন হয়েছিল, তখন আমি সূচকটি একটি এক্সটেনশন পদ্ধতিতে রেখেছিলাম যা ফিরে আসে)Tuples যাতে মূল ফাংশনটি সেইগুলি প্রয়োগের বিবরণ দিয়ে বিশৃঙ্খলা না ঘটে)) আমি এখন ফাংশনগুলিতে পরামিতি হিসাবে আরও অনেক কিছুই পাস করি, পরিবর্তে কোনও ফাংশন আনার জন্য অন্য কোনও বস্তুর কাছে পৌঁছানো। (কলার পরিবর্তে এটি এনে দেয় বা তৈরি করে এবং এটি পাস করে)) আমি এখন আরও মন্তব্য রেখে যা এমন বিষয়গুলি ব্যাখ্যা করে যা স্পষ্ট নয় কোডগুলি দেখানো থেকে, যা কোনও পদ্ধতির যুক্তিকে অনুসরণ করা সহজ করে তোলে। আমি কেবলমাত্র সীমাবদ্ধ ক্ষেত্রে পরীক্ষাগুলি লিখি যেখানে আমি সদ্য তৈরি করা কিছুটির যুক্তি সম্পর্কে উদ্বিগ্ন এবং আমি বিদ্রূপগুলি ব্যবহার এড়িয়ে চলি। (আমি যুক্তির বিচ্ছিন্ন টুকরোগুলিতে আরও ইনপুট / আউটপুট টেস্টিং করি)) ফলাফলটি এমন কোড যা নিখুঁত নয় , তবে আসলে এটি ঠিক আছে বলে মনে হয়এমনকি 2 বা 3 বছর পরেও। এটি এমন কোড যা পরিবর্তন করতে মোটামুটি ভাল সাড়া দেয়; ছোট সিস্টেমগুলি পুরো সিস্টেমটি বিচ্ছিন্ন না হয়ে জুড়ে বা সরিয়ে বা পরিবর্তিত হতে পারে can

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


0

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

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

আমার কাছে কাজ এবং ব্যক্তিগত উভয়ই প্রচুর প্রকল্প রয়েছে যা কোনও বন্দর / পুনর্লিখন থেকে উপকৃত হবে। আমার অন্যান্য কাজও করতে হবে।


0

এটি শেখার সম্পূর্ণ স্বাভাবিক অংশ। আপনি যেতে যেতে ভুল বুঝতে পারেন।

এইভাবে আপনি আরও ভাল হন এবং এটি এমন কিছু নয় যা আপনার এড়ানো উচিত।


0

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

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

অবশেষে, আপনার প্রবৃত্তিটি "ভাবতে" এই সিস্টেমটিকে আরও ভাল করে আবার লিখতে পারলাম "এই পদ্ধতির ক্রুচুয়ালি এমন কিছু জটিলতার পরিচায়ক হতে পারে যা অবিলম্বে দৃশ্যমান নয়।"

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