বৈজ্ঞানিক কোড লেখার সময় পরিষ্কার প্রোগ্রামিং


169

আমি সত্যিই বড় প্রকল্প লিখি না। আমি একটি বিশাল ডাটাবেস বজায় রাখছি না বা লক্ষ লক্ষ কোডের লেনদেন করছি।

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

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

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

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

কোডের ছোট ছোট টুকরো লেখার জন্য কি ইউনিট টেস্টিং প্রয়োজনীয়? ওওপি সম্পর্কে কীভাবে? বড় আকারের প্রকল্পগুলিতে কাজ করার বিপরীতে "বৈজ্ঞানিক প্রোগ্রামিং" করার সময় কোন ধরণের পন্থা ভাল, ক্লিন কোড দ্রুত লেখার জন্য ভাল?

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

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

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


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

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


হালনাগাদ

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

আমি পাইলেটও ইনস্টল করেছি এবং আমার সমস্ত কোডে চালিয়েছি। প্রাথমিকভাবে একটি ফাইল নেতিবাচক স্কোর পেয়েছে; কীভাবে সম্ভব হয়েছিল তাও আমি নিশ্চিত নই। আমার মূল ফাইলটি ~ 1.83 / 10 এর স্কোর থেকে শুরু হয়েছিল এবং এখন 9.1 / 10 ডলারে। কোডের সমস্ত এখন মানদণ্ডে মোটামুটি ভাল। আমি নিজের চোখ দিয়ে ভেরিয়েবলের নামগুলি আপডেট করে যা চালিয়ে গিয়েছিলাম ... উহম ... অস্থির, এবং চুল্লিটির বিভাগগুলি সন্ধান করছি।

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

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

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

সুতরাং ... আমি অনুমান করি এগুলিই বলার জন্য: আপনাকে ধন্যবাদ




8
আপনি যদি সক্রিয়ভাবে আপনার কোডটি উন্নত করতে চান তবে আপনি কোড পর্যালোচনাতে কিছু পোস্ট করার বিষয়টি বিবেচনা করতে পারেন । সেখানকার সম্প্রদায় আনন্দের সাথে আপনাকে এতে সহায়তা করবে।
हॉফমেলে

7
যখন আপনি "সংস্করণ নিয়ন্ত্রণ ব্যবহার বাদ দিয়ে এবং প্রতিটি নতুন পুনরাবৃত্তির জন্য একটি নতুন ফাইল তৈরি করে এবং কোথাও" দ্বারা "এবং" আপনি কী বোঝাতে চান "বা" এটি কোনও পাঠ্য ফাইলে রেকর্ডিং করে "বা" কারণ যদি আপনি সংস্করণ নিয়ন্ত্রণ ব্যবহার করেন তবে সংস্করণ অনুলিপি করা যাবে না।
মুল বক্তব্যটি

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

উত্তর:


163

এটি বিজ্ঞানীদের কাছে একটি খুব সাধারণ সমস্যা। আমি এটি অনেক কিছু দেখেছি এবং এটি সর্বদা সত্যই ঘটেছিল যে প্রোগ্রামিং হ'ল এমন একটি জিনিস যা আপনি নিজের কাজটি করার সরঞ্জাম হিসাবে বেছে নিয়েছেন।

সুতরাং আপনার স্ক্রিপ্টগুলি একটি জগাখিচুড়ি। আমি সাধারণ জ্ঞানের বিরুদ্ধে যাব এবং বলব যে, আপনি একা প্রোগ্রামিং করছেন ধরে নিয়ে, এটি এত খারাপ নয়! আপনি আবার কখনও যা লেখেন তার সর্বাধিক স্পর্শ করতে যাচ্ছেন না, সুতরাং "মান" তৈরি করার পরিবর্তে বেশিরভাগ সময় ব্যয় করা (আপনার স্ক্রিপ্টের ফলাফল) আপনাকে খুব বেশি কিছু করতে যাচ্ছে না।

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

আপনার মূল সমস্যাটি পঠনযোগ্যতা হতে চলেছে, সুতরাং উন্নতির জন্য কয়েকটি টিপস এখানে রইল:

পরিবর্তনশীল নাম:

বিজ্ঞানীরা সংক্ষিপ্ত স্বরলিপি ব্যবহার করতে পছন্দ করেন। সমস্ত গাণিতিক সমীকরণ সাধারণত ভেরিয়েবল হিসাবে একক অক্ষর ব্যবহার করে এবং আপনার কোডে প্রচুর এবং খুব ছোট সংখ্যক ভেরিয়েবল দেখে আমি অবাক হব না। এটি পাঠযোগ্যতার অনেক ক্ষতি করে hur আপনি যখন আপনার কোডটিতে ফিরে যাবেন তখন আপনি সেই y, i এবং x2 কী প্রতিনিধিত্ব করেন তা মনে রাখবেন না এবং আপনি এটি বের করার চেষ্টা করতে অনেক সময় ব্যয় করবেন। পরিবর্তে আপনার ভেরিয়েবলের নাম দেওয়ার চেষ্টা করুন এমন নাম ব্যবহার করে যা সেগুলি হুবহু প্রতিনিধিত্ব করে।

আপনার কোডগুলিকে ফাংশনে বিভক্ত করুন:

এখন আপনি আপনার সমস্ত ভেরিয়েবলের নাম পরিবর্তন করেছেন, আপনার সমীকরণগুলি ভয়ঙ্কর দেখায় এবং একাধিক লাইন দীর্ঘ।

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

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

কেকের সাথে আইসিং, যদি আপনার আরও প্রোগ্রামে those ফাংশনগুলির প্রয়োজন হয় তবে আপনি কেবল তাদের জন্য একটি লাইব্রেরি তৈরি করতে পারেন এবং আপনার এগুলি সর্বদা উপলভ্য হবে।

গ্লোবাল ভেরিয়েবল:

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

যদি আপনার ফাংশনগুলিকে একাধিক মান ফেরত বা সংশোধন করতে হয়, হয় সেই মানগুলি দিয়ে একটি শ্রেণি তৈরি করুন এবং সেগুলি প্যারামিটার হিসাবে নামিয়ে দিন বা ফাংশনটিকে একাধিক মান (নামযুক্ত টিপলস সহ) ফিরিয়ে দিন এবং কলার কোডে সেই মানগুলি নির্ধারণ করুন।

ভর্সন নিয্ন্ত্র্ন

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

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


56
দুর্দান্ত পরামর্শ। তবে আমি "এটি এত খারাপ নয়" মন্তব্যে উজ্জীবিত করতে পারি না। এটা খুব খারাপ। ডেটা বিশ্লেষণে প্রজননযোগ্যতা এবং বিশ্লেষণে ঘন ঘন ত্রুটির উত্স হিসাবে নিম্নমানের বৈজ্ঞানিক স্ক্রিপ্টগুলি একটি বড় সমস্যা। ভাল কোড রচনা মূল্যবান যাতে কেবল আপনি এটি পরে বুঝতে পারেন তা নয় তবে যাতে আপনি প্রথম স্থানে ত্রুটিগুলি এড়াতে পারেন।
জ্যাক এইডলি

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

11
@ সিএইচওও সমস্যাটি যখন সেই ভেরিয়েবলগুলিকে সূত্রে প্লাগ করা হয় না (সুতরাং "ফাংশনের অভ্যন্তরে তাদের নাম পরিবর্তন করুন" পরামর্শ), তবে যখন তারা এর বাইরে পড়ে এবং চালিত হয় এবং যখন তারা অন্যান্য ভেরিয়েবলগুলির সাথে লাইন থেকে বিবাদ শুরু করে তখন (উদাহরণস্বরূপ, আমি তিনটি "x" ভেরিয়েবলের প্রয়োজনের লোকদের তাদের x1, ​​x2, x3 নাম
দিয়েছি দেখেছি

4
"আমি সাধারণ জ্ঞানের বিরুদ্ধে যাব ..." না তুমি নও। আপনি প্রচলিত মতবাদের বিরুদ্ধে যাচ্ছেন, যা নিজেই সাধারণ জ্ঞানের বিরুদ্ধে। ;) এটি পুরোপুরি নিখুঁত পরামর্শ।
jpmc26

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

141

পদার্থবিদ এখানে। সেখানে.

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

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

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

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

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

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

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


32
Clean ক্লিন কোড লেখা ঠিক একইরকম [স্পষ্ট নিবন্ধ লেখার মতো] »আমি পুরোপুরি সমর্থন করি যে, ভাল কথা!
21

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

31
যদিও ক্লিন কোড লেখার ক্ষেত্রে থ্রোওয়ে কোড লেখার চেয়ে অনেক বেশি সময় লাগে, তবে আরও গুরুত্বপূর্ণটি হ'ল ক্লোন কোড পড়ার চেয়ে থ্রোওয়ে কোড পড়তে অনেক বেশি সময় লাগে।
user949300

3
@UEFI না, এটি এমন বেশিরভাগ পেশাদার প্রোগ্রামাররা বুঝতে পারেন না। বা যত্ন নেই।
jpmc26

2
100% সম্মত হন। পরিসংখ্যানবিদ প্রোগ্রামার পরিণত, তাই আমি কর্মক্ষেত্রে মোটামুটি পরিমাণ 'বৈজ্ঞানিক' প্রোগ্রামিং করি। যখন আপনাকে 1, 4 বা 12 মাস পরে সেই কোডটিতে ফিরে যেতে হবে তখন অর্থবহ মন্তব্যগুলির সাথে সাফ কোডটি একটি জীবনকালীন। কোডটি পড়া আপনাকে কোডটি কী করছে তা জানায়। মন্তব্যগুলি পড়া আপনাকে কোডটি করার কথা বলেছে।
রেলসডগ

82

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

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

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

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


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

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

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

12
@ এন্টপি এটি সম্ভব যে কেবলমাত্র এতটা কোড নেই যা অর্থপূর্ণভাবে সংজ্ঞায়িত টেস্টযোগ্য ইউনিটগুলিতে রিফেক্টর করা যেতে পারে। অনেকগুলি বৈজ্ঞানিক কোড মূলত একসাথে লাইব্রেরির একগুচ্ছ ট্যাপ করা। এই লাইব্রেরিগুলি ইতিমধ্যে ভালভাবে পরীক্ষিত এবং পরিষ্কারভাবে কাঠামোগত হবে, যার অর্থ লেখককে কেবল "আঠালো" লিখতে হবে, এবং আমার অভিজ্ঞতায়, আঠালো নয় এমন আঠালো জন্য ইউনিট পরীক্ষা লিখতে অসম্ভবের কাছাকাছি।
জেমস_পিক

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

29

(সংস্করণ নিয়ন্ত্রণ ব্যবহার এবং প্রতিটি নতুন পুনরাবৃত্তির জন্য একটি নতুন ফাইল তৈরি করা এবং কোথাও একটি পাঠ্য ফাইলে এগুলি সমস্ত রেকর্ড করা, যা সম্ভবত পরিস্থিতিকে নাটকীয়ভাবে সহায়তা করবে)

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

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

কোডের ছোট ছোট টুকরো লেখার জন্য কি ইউনিট টেস্টিং প্রয়োজনীয়? ওওপি সম্পর্কে কীভাবে? বড় আকারের প্রকল্পগুলিতে কাজ করার বিপরীতে "বৈজ্ঞানিক প্রোগ্রামিং" করার সময় কোন ধরণের পন্থা ভাল, ক্লিন কোড দ্রুত লেখার জন্য ভাল?

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

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


4
প্রতিশ্রুতিবদ্ধ বার্তার জন্য +1; এগুলি এমন মন্তব্যের মতো যা পুরানো হতে পারে না কারণ তারা যখন প্রযোজ্য ছিল তখন কোডের সংস্করণে আবদ্ধ। আপনার পুরানো কোডটি বোঝার জন্য, পুরানো মন্তব্যগুলি পড়ার চেয়ে প্রকল্পের ইতিহাস (যদি পরিবর্তনগুলি যুক্তিসঙ্গত গ্রানুলারিতে প্রতিশ্রুতিবদ্ধ হয়) সন্ধান করা সহজ।
সিলি ফ্রিক

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

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

21

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

আপনি যদি বৈজ্ঞানিক গণনা সম্পাদনের জন্য স্ক্রিপ্টগুলি লিখছেন তবে আপনার সম্ভবত লিখিত সমীকরণ বা অ্যালগরিদমগুলির সাথে আপনার লিখিত কাগজ রয়েছে। আপনি যদি নিজেরাই সন্ধান করেছেন এমন নতুন ধারণা ব্যবহার করছেন, আপনি আশা করি এগুলি আপনার নিজের কাগজে প্রকাশ করবেন। এই ক্ষেত্রে, নিয়মটি হ'ল: আপনি চান আপনার কোডটি যতটা সম্ভব প্রকাশিত সমীকরণের মতো পড়া উচিত। সফ্টওয়্যার ইঞ্জিনিয়ারিং.এস.ই.-এর একটি উত্তর এখানে 200 টিরও বেশি upvotes এই পদ্ধতির পক্ষে এবং এটি দেখতে কেমন দেখাচ্ছে তা ব্যাখ্যা করে: সংক্ষিপ্ত পরিবর্তনশীল নামের জন্য কি কোনও অজুহাত রয়েছে?

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

ContactGeometry.cpp:

// t = (-b +/- sqrt(b^2-4ac)) / 2a
// Discriminant must be nonnegative for real surfaces
// but could be slightly negative due to numerical noise.
Real sqrtd = std::sqrt(std::max(B*B - 4*A*C, Real(0)));
Vec2 t = Vec2(sqrtd - B, -sqrtd - B) / (2*A);

ContactGeometry_Sphere.cpp:

// Solve the scalar Jacobi equation
//
//        j''(s) + K(s)*j(s) = 0 ,                                     (1)
//
// where K is the Gaussian curvature and (.)' := d(.)/ds denotes differentiation
// with respect to the arc length s. Then, j is the directional sensitivity and
// we obtain the corresponding variational vector field by multiplying b*j. For
// a sphere, K = R^(-2) and the solution of equation (1) becomes
//
//        j  = R * sin(1/R * s)                                        (2)
//          j' =     cos(1/R * s) ,                                      (3)
//
// where equation (2) is the standard solution of a non-damped oscillator. Its
// period is 2*pi*R and its amplitude is R.

// Forward directional sensitivity from P to Q
Vec2 jPQ(R*sin(k * s), cos(k * s));
geod.addDirectionalSensitivityPtoQ(jPQ);

// Backwards directional sensitivity from Q to P
Vec2 jQP(R*sin(k * (L-s)), cos(k * (L-s)));
geod.addDirectionalSensitivityQtoP(jQP);

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

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

1
@DavidHammen এছাড়া হল UTF-8 উৎস ফাইলের মধ্যে এবং পরিবর্তনশীল নামের জন্য সহজ নিয়ম জন্য পাইথন সমর্থন করাকে সহজ ঘোষণা করে তোলে λবা φকুশ্রী পরিবর্তে lambda_বা phy...
ম্যাথিয়াস Ettinger

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

17

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

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

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

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

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

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

তাদের সুপারিশ করা অনুশীলনের একটি উচ্চ-স্তরের রূপরেখা:

  1. কম্পিউটার নয়, মানুষের জন্য প্রোগ্রাম লিখুন
  2. কম্পিউটারকে কাজটি করতে দিন
  3. বর্ধিত পরিবর্তন করুন Make
  4. নিজেকে (বা অন্যদের) পুনরাবৃত্তি করবেন না
  5. ভুলের জন্য পরিকল্পনা করুন
  6. সফ্টওয়্যারটি সঠিকভাবে কাজ করার পরেই অনুকূলিত করুন
  7. নথি নকশা এবং উদ্দেশ্য, যান্ত্রিক নয়
  8. সহযোগিতা করা

এই পয়েন্টগুলির প্রতিটি সম্পর্কে কাগজটি যথেষ্ট বিশদে যায়।


16

কোডটি লেখার কি সত্যিকার অর্থে বোঝা যায় যে বলা হয় যে ওওপি যখন কিছু স্ট্যান্ডার্ড স্টাফ করা যেত, লেখার পক্ষে আরও দ্রুত হত, এবং প্রোগ্রামের সংক্ষিপ্ততার কারণে পাঠ্যতার একই স্তরের হত?

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

সাধারণ উত্তর:
"এটি নির্ভর করে।" আপনি যদি প্রোগ্রামিং ধারণা বা দৃষ্টান্তগুলি কখন ব্যবহার করবেন তা জানার জন্য যদি লড়াই করে চলেছেন তবে এখানে কয়েকটি বিষয় চিন্তা করতে হবে:

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

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

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

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

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

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

আমি আশা করি এটি সাহায্য করবে!


পার্শ্ব দ্রষ্টব্য: আমি জানি আপনি উদাহরণ হিসাবে স্রেফ OOP ব্যবহার করেছেন। আমি চাইনি আপনি কী ভাববেন যে আমি কীভাবে ওওপি ব্যবহার করে রাইটিং কোডটি পরিচালনা করব on উদাহরণটি দিয়ে চালিয়ে উত্তর লেখা সহজ ছিল।


আমি মনে করি যে # 3 সবচেয়ে গুরুত্বপূর্ণ সমস্যা - একজন অভিজ্ঞ প্রোগ্রামার ওপিকে তাদের প্রয়োজনীয় ধারণাগুলি (# 1), স্ক্রিপ্টগুলি কীভাবে আরও ভালভাবে সংগঠিত করবেন এবং সংস্করণ নিয়ন্ত্রণ (# 2) কীভাবে ব্যবহার করবেন তা বলতে পারবেন।
ডক ব্রাউন

16

আমি ইউনিক্স নীতিটি ধরে রাখার পরামর্শ দেব: এটিকে সরল রাখ, বোকা! (চুম্বন)

অথবা, অন্য কোনও উপায় রাখুন: একবারে একটি কাজ করুন এবং ভালভাবে করুন।

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

কোড লাইনগুলির ক্ষেত্রে, আমার তাত্ত্বিকটি হ'ল 10 লাইনগুলি একটি ভাল ফাংশন এবং 20 এর বাইরে যে কোনও কিছু সম্ভবত বকাঝকা। অন্যান্য ব্যক্তির অন্যান্য হিউরিস্টিকস রয়েছে। গুরুত্বপূর্ণ অংশটি হ'ল দৈর্ঘ্যটিকে এমন কিছুতে নামিয়ে রাখা যা আপনি বাস্তবে তাত্ক্ষণিকভাবে বুঝতে পারবেন।

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

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

উপাখ্যান
আমি একবার কয়েক মাসের রিফ্যাক্টরিং কোড ব্যয় করেছি যার প্রতিটিতে প্রায় 500 টি লাইন রয়েছে। আমার কাজ শেষ হওয়ার পরে, মোট কোডটি প্রায় এক হাজার লাইন সংক্ষিপ্ত ছিল; কোডের লাইনগুলির ক্ষেত্রে আমি নেতিবাচক আউটপুট তৈরি করেছি। আমি সংস্থাটির ণী ( http://www.geekherocomic.com/2008/10/09/programmers-salary-policy/index.html )। তবুও, আমি দৃ firm়ভাবে বিশ্বাস করি যে এটি আমার এখন পর্যন্ত সবচেয়ে মূল্যবান কাজ ...

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

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

KISS এবং DRY নীতিগুলি আপনাকে অনেক দীর্ঘ যেতে পারে। আপনাকে অবিলম্বে ওওপি ইত্যাদি দিয়ে শুরু করার দরকার নেই, প্রায়শই আপনি কেবলমাত্র এই দুটি প্রয়োগ করে দুর্দান্ত সরলিকরণ অর্জন করতে পারেন। তবে এটি ওওপি এবং অন্যান্য দৃষ্টান্তগুলি সম্পর্কে জানতে দীর্ঘমেয়াদে ক্ষতিপূরণ দেয় কারণ তারা আপনাকে অতিরিক্ত সরঞ্জাম দেয় যা আপনি আপনার প্রোগ্রামের কোডটিকে আরও স্পষ্ট করতে ব্যবহার করতে পারেন।

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


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

@ জাকেজ আহ, পুরোপুরি ভুলে গেছেন। আমাকে স্মরণ করার জন্য ধন্যবাদ. আমি আমার উত্তর আপডেট করেছি এই :-) অন্তর্ভুক্ত করা
cmaster

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

11

আমি অন্যদের সাথে একমত যে সংস্করণ নিয়ন্ত্রণ আপনার এখনই অনেক সমস্যার সমাধান করবে। বিশেষ করে:

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

আমি বলব এটিকে ওভারটাইঙ্ক করবেন না: কেবল গিট ব্যবহার করুন। সাধারণ কমান্ডগুলিতে আটকে থাকুন (উদাহরণস্বরূপ কেবল একটি একক masterশাখা), সম্ভবত একটি জিইউআই ব্যবহার করুন এবং আপনার ভাল হওয়া উচিত। বোনাস হিসাবে আপনি বিনামূল্যে প্রকাশনা এবং ব্যাকআপের জন্য গিটল্যাব, গিথাব ইত্যাদি ব্যবহার করতে পারেন;)

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

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

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

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

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

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

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

#!/usr/bin/env bash
set -e
make all
./analyse < ./dataset > output.csv

পরিবর্তে আমরা এটির পরিবর্তে একটি নিক্স "ডেরিভিয়েশন" এ আবার লিখতে পারি (যেমন run.nix):

with import <nixpkgs> {};
runCommand "output.csv" {} ''
  cp -a ${./.} src
  cd src
  make all
  ./analyse < ./dataset > $out
''

''...''স্টাফের মধ্যে বাশ কোড, আমাদের আগের মতোই ${...}, অন্য স্ট্রিংয়ের বিষয়বস্তুতে "স্প্লাইস" করতে ব্যবহৃত হতে পারে (এই ক্ষেত্রে ./., যা ডিরেক্টরিটি অন্তর্ভুক্ত করে তার পথে প্রসারিত হবে run.nix)। with import ...লাইন তুষার এর আমদানি মান গ্রন্থাগার , যা প্রদান করে runCommandব্যাশ কোড চালানোর জন্য। আমরা আমাদের পরীক্ষাগুলি ব্যবহার করে চালাতে পারি nix-build run.nix, যা এর মতো কোনও পথ দেবে /nix/store/1wv437qdjg6j171gjanj5fvg5kxc828p-output.csv

তাহলে এটি আমাদের কী কিনে? নিক্স স্বয়ংক্রিয়ভাবে একটি "পরিষ্কার" পরিবেশ স্থাপন করবে, যার কেবলমাত্র আমরা স্পষ্টভাবে জিজ্ঞাসা করেছি এমন জিনিসগুলিতে অ্যাক্সেস রয়েছে। বিশেষত এর মতো ভেরিয়েবলগুলিতে $HOMEবা আমরা ইনস্টল করা সিস্টেমের যে কোনও সফ্টওয়্যার এর অ্যাক্সেস নেই । এটি ফলাফলটি আমাদের বর্তমান মেশিনের বিবরণগুলির মতো, যেমন ~/.configআমরা ইনস্টল করেছি এমন প্রোগ্রামগুলির সামগ্রী বা সংস্করণগুলির বিশদ থেকে আলাদা করে তোলে ; এ কেএ স্টাফ যা অন্য মানুষকে আমাদের ফলাফলগুলি প্রতিরূপ করতে বাধা দেয়! এই কারণেই আমি এটি যুক্ত করেছিcpকমান্ড, যেহেতু প্রকল্পটি ডিফল্টরূপে অ্যাক্সেসযোগ্য হবে না। এটি বিরক্তিকর বলে মনে হতে পারে যে সিস্টেমের সফটওয়্যারটি নিক্স স্ক্রিপ্টের জন্য উপলব্ধ নেই, তবে এটি অন্যভাবেও চলেছে: স্ক্রিপ্টে এটি ব্যবহারের জন্য আমাদের আমাদের সিস্টেমে (নিক্স ব্যতীত) কিছু ইনস্টল করার দরকার নেই; আমরা কেবল এটির জন্য জিজ্ঞাসা করেছি এবং নিক্স চলে যাবে এবং প্রয়োজনীয় যা কিছু সংগ্রহ করবে / সংকলন করবে (বেশিরভাগ জিনিস বাইনারি হিসাবে ডাউনলোড করা হবে; মানক পাঠাগারটিও বিশাল!)। উদাহরণস্বরূপ, আমরা যদি সেই ভাষার কয়েকটি নির্দিষ্ট সংস্করণের জন্য কিছু পাইথন এবং হাস্কেল প্যাকেজ চাই, তবে আরও কিছু জাঙ্ক (কেন না?):

with import <nixpkgs> {};
runCommand "output.csv"
  {
    buildInputs = [
      gcc49 libjson zlib
      haskell.packages.ghc802.pandoc
      (python34.withPackages (pyPkgs: [
        pyPkgs.beautifulsoup4 pyPkgs.numpy pyPkgs.scipy
        pyPkgs.tensorflowWithoutCuda
      ]))
    ];
  }
  ''
    cp -a ${./.} src
    cd src
    make all
    ./analyse < ./dataset > $out
  ''

একইভাবে nix-build run.nixএটি চালানো হবে, আমরা প্রথমে যা চেয়েছিলাম তা আনা (এবং পরে আমরা এটি চাইলে এটি সমস্ত ক্যাশে করছি)। আউটপুট (যেকোনও ফাইল / ডিরেক্টরি বলা হয় $out) নিক্স দ্বারা সংরক্ষণ করা হবে, এটি সেই পথটিকেই ছড়িয়ে দেয়। এটি আমরা যে সমস্ত ইনপুট চেয়েছি তার ক্রিপ্টোগ্রাফিক হ্যাশ দ্বারা চিহ্নিত করা হয়েছে (স্ক্রিপ্ট সামগ্রী, অন্যান্য প্যাকেজ, নাম, সংকলক পতাকা ইত্যাদি); এই অন্যান্য প্যাকেজগুলি তাদের ইনপুটগুলির হ্যাশগুলি দ্বারা চিহ্নিত করা হয়েছে , এবং এর মতো আমাদের কাছে সমস্ত কিছুর জন্য প্রদেশের একটি সম্পূর্ণ শৃঙ্খলা রয়েছে, সরাসরি জিসিসির সংস্করণে ফিরে এসেছে যে জিসিসির সংস্করণটি বাশকে সংকলন করেছিল, ইত্যাদি!

আশা করি আমি এটি দেখিয়েছি যে এটি আমাদেরকে বৈজ্ঞানিক কোডের জন্য প্রচুর পরিমাণে কিনে দেয় এবং এর সাথে শুরু করার পক্ষে যুক্তিযুক্ত সহজ। এটি বিজ্ঞানীদের দ্বারাও খুব গুরুত্ব সহকারে নেওয়া শুরু হয়েছে, যেমন (শীর্ষ গুগল হিট) https://dl.acm.org/citation.cfm?id=2830172 তাই চাষ করার মূল্যবান দক্ষতা হতে পারে (ঠিক প্রোগ্রামিংয়ের মতো)


2
খুব দরকারী দরকারী উত্তর - আমি অন্যান্য উত্তরগুলি সত্যই পছন্দ করি, তবে দৃser়তাগুলি খুব কার্যকর প্রথম পদক্ষেপ বলে মনে হয়।
হিদার

9

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

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


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

যে কেউ আরও পড়তে চায়, তাদের পক্ষে এটি সাক্ষর প্রোগ্রামিং নামেও পরিচিত।
llrs

6

শীর্ষের উত্তরগুলি ইতিমধ্যে ভাল, তবে আমি আপনার কয়েকটি প্রশ্নের উত্তর সরাসরি দিতে চেয়েছি।

কোডের ছোট ছোট টুকরো লেখার জন্য কি ইউনিট টেস্টিং প্রয়োজনীয়?

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

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

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

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

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

বিশেষত জটিল গাণিতিক ক্রিয়াকলাপগুলির জন্য, ইউনিট পরীক্ষাগুলি আশীর্বাদ হতে পারে। আপনি কয়েকটি উদাহরণ গণনা করেন, এবং তারপরে আপনি ইউনিট পরীক্ষাগুলি লিখেন যা আপনার গণনা করা আউটপুট এবং আপনার প্রকৃত আউটপুট (একই ইনপুট পরামিতির উপর ভিত্তি করে) তুলনা করে।

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

ওওপি সম্পর্কে কীভাবে?

ওওপি হ'ল স্বতন্ত্র সত্তা সম্পর্কে চিন্তাভাবনার একটি উপায়, উদাহরণস্বরূপ:

যখন কোনও একটি Customerক্রয় করতে চায় Product, তখন সে এটি Vendorপাওয়ার জন্য কথা বলে OrderAccountantইচ্ছার তারপর দিতে Vendor

কোনও কার্যকরী প্রোগ্রামার জিনিসগুলির বিষয়ে কীভাবে চিন্তা করে তার সাথে এটি তুলনা করুন:

যখন কোনও গ্রাহক চায় purchaseProduct(), সে talktoVendor()তার sendOrder()কাছে এটি করবে। হিসাবরক্ষক তখন হবে payVendor()

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

প্রায়শই না, গাণিতিক এবং বৈজ্ঞানিক গণনা স্বতন্ত্র ক্রিয়াকলাপ যা অন্তর্নিহিত ভাগ করা যুক্তি / সূত্রের উপর নির্ভর করে না। তার কারণ হিসাবে, ফাংশনাল প্রোগ্রামিং প্রায়শই ওওপি-র চেয়ে বেশি ব্যবহৃত হয়।

বড় আকারের প্রকল্পগুলিতে কাজ করার বিপরীতে "বৈজ্ঞানিক প্রোগ্রামিং" করার সময় কোন ধরণের পন্থা ভাল, ক্লিন কোড দ্রুত লেখার জন্য ভাল?

আপনার প্রশ্নের ইঙ্গিত দেয় যে "ভাল, ক্লিন কোড" এর সংজ্ঞাটি আপনি বৈজ্ঞানিক প্রোগ্রামিং করছেন বা বৃহত্তর (আমি মনে করি আপনি এন্টারপ্রাইজ বলতে চাইছেন) প্রকল্পগুলিতে কাজ করছেন কিনা তা পরিবর্তিত হয়।

ভাল কোডের সংজ্ঞা পরিবর্তন হয় না। জটিলতা এড়াতে প্রয়োজন (যা পরিষ্কার কোড লেখা দ্বারা সম্পন্ন করা যেতে পারে), কিন্তু, পরিবর্তন নেই।

একই যুক্তি এখানে ফিরে আসে।

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

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

আপনি এখানে যে পার্থক্যটি করছেন তা আমি পেয়েছি তবে আপনি যখন বিদ্যমান কোডটির দিকে ফিরে তাকাবেন , আপনি গণিত এবং প্রোগ্রামিং উভয়ের দিকেই তাকান। যদি হয় কনট্রিভড বা জটিল হয় তবে আপনি এটি পড়ার জন্য সংগ্রাম করবেন।

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

ওওপি নীতিগুলি বাদ দিয়ে, আমি কয়েকটি ডেটা মান রাখার জন্য ক্লাস লেখার মূল কারণ হ'ল এটি পদ্ধতির পরামিতিগুলি এবং ফেরতের মানগুলি ঘোষণাকে সহজ করে । উদাহরণস্বরূপ, যদি আমার কাছে অনেকগুলি পদ্ধতি থাকে যা কোনও অবস্থান ব্যবহার করে (ল্যাট / লম্বা জোড়া), তবে আমি দ্রুত টাইপ করতে করতে ক্লান্ত হয়ে float latitude, float longitudeযাব এবং আরও লিখতে পছন্দ করব Location loc

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

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

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

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

(এগুলিও সাধারণভাবে বিবেচনা করুন যেখানে প্রোগ্রামের গতি দ্রুত শেষের দিকে অগ্রাধিকার দেওয়া হয় - আপনি যখন সিমুলেশনের 25,000,000+ সময় ধাপে চালাচ্ছেন, আপনি চাইবেন যে এটি হওয়া উচিত))

একটি শ্রেণি সর্বদা তার ক্ষেত্রের যোগফলের মতো বড়। Locationআবার দুটি উদাহরণ সহ , যা দুটি floatমান সমন্বিত, এটি Locationগ্রহণ করা এখানে গুরুত্বপূর্ণ যে এখানে একটি একক বস্তু দুটি পৃথক floatমানের যত বেশি স্মৃতি গ্রহণ করবে তা গুরুত্বপূর্ণ ।

এই অর্থে, আপনি ওওপি ব্যবহার করছেন কিনা তা বিবেচ্য নয়। স্মৃতি পায়ের ছাপ একই।

পারফরম্যান্স নিজেও পার হওয়া বড় বাধা নয়। যেমন গ্লোবাল পদ্ধতি বা ক্লাসের পদ্ধতি ব্যবহারের মধ্যে পার্থক্যটি রানটাইম কর্মক্ষেত্রের সাথে কোনও সম্পর্কযুক্ত নয়, তবে বাইটকোডের সংকলন-সময় প্রজন্মের সাথে সবকিছু করার রয়েছে।

এটি এইভাবে ভাবুন: আমি আমার কেকের রেসিপিটি ইংরেজী বা স্প্যানিশ ভাষায় লিখছি কিনা তা এই পরিবর্তনটি পরিবর্তন করে না যে কেক বেক করতে 30 মিনিট সময় লাগবে (= রানটাইম পারফরম্যান্স)। রেসিপিটির ভাষাগুলির একমাত্র জিনিসটি পরিবর্তিত হয় তা হল রান্নাঘর কীভাবে উপাদানগুলিতে মিশ্রিত হয় (= বাইটোকোড সংকলন করে)।

পাইথনের জন্য বিশেষভাবে কোডটি কল করার আগে আপনার স্পষ্টভাবে কোড-সংকলন করতে হবে না। তবে, আপনি যখন প্রাক-সংকলন করবেন না, কোডটি কার্যকর করার চেষ্টা করার সময় সংকলনটি ঘটবে। আমি যখন "রানটাইম" বলি, তখন আমি নিজেই মৃত্যুদণ্ড বোঝায়, সংকলন নয় যা মৃত্যুদন্ড কার্যকর করতে পারে।


6

পরিষ্কার বৈজ্ঞানিক কোডের সুবিধা

  • ... প্রোগ্রামিং বইগুলির দিকে তাকালে তারা প্রায়শই বড় প্রকল্পগুলিতে সম্বোধিত হয় বলে মনে হয়।

  • ... কোডটি লিখতে কি বোঝা যায় না যে বলা হয় যে ওওপি যখন কিছু স্ট্যান্ডার্ড স্টাফ করা যেতে পারত, লেখার পক্ষে আরও দ্রুততর হতে পারত এবং প্রোগ্রামের সংক্ষিপ্ততার কারণে পাঠ্যতার একই স্তরের হত?

ভবিষ্যতের কোডারের দৃষ্টিকোণ থেকে আপনার কোড বিবেচনা করা সহায়ক হতে পারে।

  • কেন তারা এই ফাইলটি খুললেন?
  • তারা কি খুঁজছে?

আমার অভিজ্ঞতা থেকে,

পরিষ্কার কোড আপনার ফলাফল যাচাই করা সহজ করে তুলতে হবে

  • ব্যবহারকারীদের আপনার প্রোগ্রামটি চালানোর জন্য তাদের ঠিক কী করা দরকার তা জানা সহজ করে নিন Make
  • আপনি আপনার প্রোগ্রামটি বিভক্ত করতে চাইতে পারেন যাতে পৃথক পৃথক অ্যালগরিদম পৃথকভাবে বেঞ্চমার্ক করা যায়।

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

ক্লিন কোড ভবিষ্যতের কোডারগুলির উদাহরণ কোড হিসাবে পরিবেশন করতে পারে

পরিষ্কার মন্তব্য (بشمول ফাংশনগুলি কীভাবে ডাকতে হবে সেগুলি সহ) এবং ভালভাবে পৃথক ফাংশনগুলি আপনার কাজের বাইরে কিছু কার্যকর করার জন্য কারও পক্ষে কেবল (বা ভবিষ্যত আপনি) শুরু করার জন্য কতক্ষণ সময় নেয় তার মধ্যে একটি বিশাল পার্থক্য করতে পারে।

এ ছাড়াও, আপনার অ্যালগরিদমের জন্য একটি আসল "এপিআই" তৈরি করা আপনাকে আরও প্রস্তুত করতে পারে যদি আপনি অন্য কারও ব্যবহারের জন্য আপনার স্ক্রিপ্টগুলিকে একটি আসল লাইব্রেরিতে পরিণত করার সিদ্ধান্ত নেন।

প্রস্তাবনা

মন্তব্যগুলি ব্যবহার করে গাণিতিক সূত্রগুলি "উদ্ধৃত" করুন।

  • গাণিতিক সূত্রগুলিতে "উদ্ধৃতি" দেওয়ার জন্য মন্তব্যগুলি যুক্ত করুন, বিশেষত যদি আপনি অপ্টিমাইজেশান (ট্রিগ পরিচয়, টেলর সিরিজ ইত্যাদি) ব্যবহার করেন।
  • আপনি যদি বইটি থেকে সূত্রটি পেয়ে থাকেন তবে একটি মন্তব্য যুক্ত করুন John Smith Method from Some Book 1st Ed. Section 1.2.3 Pg 180, যদি আপনি কোনও ওয়েবসাইটে বা কোনও কাগজে সূত্রটি খুঁজে পেয়ে থাকেন তবে সেটিকেও উদ্ধৃত করুন।
  • আমি "লিঙ্ক কেবল" মন্তব্যগুলি এড়িয়ে চলার পরামর্শ দিচ্ছি, লোকেরা গুগল করার অনুমতি দেওয়ার জন্য আপনি যে কোনও জায়গায় নাম দ্বারা পদ্ধতিটি উল্লেখ করেছেন তা নিশ্চিত করে নিন, আমি পুরানো অভ্যন্তরীণ পৃষ্ঠাগুলিতে পুনর্নির্দেশিত কিছু "লিঙ্ক কেবল" মন্তব্যগুলিতে চলে এসেছি এবং তারা খুব হতাশ হতে পারে ।
  • আপনি যদি এখনও ইউনিকোড / এএসসিআইআই-তে পড়তে সহজ হন তবে আপনি আপনার মন্তব্যে সূত্রটি টাইপ করার চেষ্টা করতে পারেন তবে এটি খুব বিশ্রী হতে পারে (কোড মন্তব্যগুলি ল্যাটেক্স নয়)।

বুদ্ধি করে মন্তব্য ব্যবহার করুন

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

বর্ণনামূলক পরিবর্তনশীল নাম ব্যবহার করুন

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

আপনার প্রোগ্রামটি ভাল এবং জ্ঞাত খারাপ ডেটার বিরুদ্ধে চালানোর জন্য কোড লিখুন।

কোডের ছোট ছোট টুকরো লেখার জন্য কি ইউনিট টেস্টিং প্রয়োজনীয়?

আমি মনে করি ইউনিট টেস্টিং সহায়ক হতে পারে, আমি মনে করি বৈজ্ঞানিক কোডের জন্য ইউনিট পরীক্ষার সেরা ফর্মটি এমন পরীক্ষার একটি সিরিজ যা পরিচিত খারাপ এবং ভাল ডেটাতে চলে run

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

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

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

ক্রস বৈধকরণের মতো কিছু ব্যবহার করার বিষয়ে বিবেচনা করুন , আরও তথ্যের জন্য বৈধতাযুক্ত এই পোস্টটি দেখুন।

সংস্করণ নিয়ন্ত্রণ ব্যবহার করুন

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

সুবিধাদি:

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

কোড অনুলিপি / পেস্ট করার সময় সাবধানতা অবলম্বন করুন

আমার কোডের স্টাইলটি বিশৃঙ্খলাযুক্ত এবং কিছু করার বিকল্প উপায় বা কপি করা কোডের লাইনগুলি সহ অপ্রচলিত মন্তব্যে পূর্ণ।

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

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



6

ব্যবসায়ের সরঞ্জামগুলি সাধারণত প্রয়োজন সমাধানের জন্য উদ্ভাবিত হয়। আপনার যদি প্রয়োজন হয় তবে সরঞ্জামটি ব্যবহার করুন, যদি না হয় তবে আপনার সম্ভবত সম্ভবত এটি করতে হবে না।

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

তাহলে আপনার কী উপকার হবে?

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

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

5

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

"এটি প্রোগ্রামিংয়ের মাধ্যমে পরীক্ষা করা বা গবেষণা করা গণিত বা বিজ্ঞানের বিষয়ে আরও বেশি" "

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

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

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


5

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

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

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

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

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


এটিতে আরও অনেকগুলি উপায়ে নেওয়া উচিত। +1
হিদার

2
তবে, স্বর্গের জন্য, নিশ্চিত হয়ে নিন যে কীভাবে আপনার পছন্দসই স্টাইলটিতে লাইনটারটি কনফিগার করতে হয়, তা না হলে এটি আপনাকে গোলমাল করে দেবে mad
DrMcCleod

4

আপনার তালিকাভুক্ত সমস্ত কিছুই রূপক সরঞ্জাম বাক্সের একটি সরঞ্জাম। জীবনের যে কোনও কিছুর মতো বিভিন্ন সরঞ্জাম বিভিন্ন কাজের জন্য উপযুক্ত।

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

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

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

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


4

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

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

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


4

এই ধরণের প্রোগ্রামের জন্য কোন গুণাবলী গুরুত্বপূর্ণ?

এটি বজায় রাখা বা বিবর্তন করা সহজ কিনা তা বিবেচ্য নয়, কারণ সম্ভাবনাগুলি হ'ল তা ঘটবে না।

এটি সম্ভবত কতটা দক্ষ তা বিবেচ্য নয়।

এটির দুর্দান্ত ব্যবহারকারীর ইন্টারফেস রয়েছে কিনা বা এটি দূষিত আক্রমণকারীদের বিরুদ্ধে সুরক্ষিত কিনা তা সম্ভবত ব্যাপার নয়।

এটি পঠনযোগ্য তা এটির ব্যাপার হতে পারে: যে কেউ আপনার কোডটি পড়ছেন তা সহজেই তাদেরকে বোঝাতে পারেন যে এটি যা দাবি করে তা করে।

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

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

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


4

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

উদাহরণস্বরূপ, যদি আপনি আপনার ক্ষেত্র (ECEF, NED, Lat / Lon, WGS84 ইত্যাদি) মধ্যে তুল্যমুল্য রূপান্তরের অনেক সঙ্গে মোকাবেলা করতে হবে পারে, তাই মত একটি ফাংশন convert_ecef_to_ned()নামক একটি নতুন প্রকল্প ঢোকা উচিত CoordinateTransformations। প্রকল্পটি সংস্করণ নিয়ন্ত্রণে রাখুন এবং এটি আপনার বিভাগের সার্ভারগুলিতে হোস্ট করুন যাতে অন্যান্য লোকেরা এটি ব্যবহার করতে পারে (এবং আশাকরি উন্নতি করতে পারে)। তারপরে কয়েক বছর পরে আপনার প্রকল্পগুলির সাথে একটি নির্দিষ্ট সমস্যা / গবেষণা ডোমেনের জন্য নির্দিষ্ট কোড সম্বলিত গ্রন্থাগারগুলির একটি শক্তিশালী সংগ্রহ করা উচিত।

আরও কিছু সাধারণ পরামর্শ:

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

অন্য লোকদের এটির উন্নতি করতে দেবেন না। সম্ভাবনা হ'ল তারা কোডটির উদ্দেশ্য বুঝতে পারছেন না এবং তারা কেবল জিনিসগুলিকে গণ্ডগোল করে দেবে।
ম্যাথ্রেডলার

@ ম্যাথ্রেডলার ওয়েল যদি তারা সাধারণ ইউটিলিটি লাইব্রেরি হয় তবে অন্যদের পক্ষে ঝামেলা করা কিছুটা কঠিন হবে, এটাই ধারণা।
jigglypuff

সাধারণ উদ্দেশ্য গ্রন্থাগারগুলিতে বিশৃঙ্খলা করা কেন কঠিন? আপনি কী করছেন সে সম্পর্কে আপনার যদি ধারণা না থাকে বা আপনি যদি সত্যিই খুব চেষ্টা করেন তবে তা এতটা শক্ত নয়।
ম্যাথ্রেডলার

@ ম্যাথ্রেডলার কারণ সাধারণত সমন্বিত রূপান্তর বা ইউনিট রূপান্তরগুলি করার একমাত্র উপায় আছে one
jigglypuff

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

3

নিম্নলিখিত আমার মতামত এবং খুব আমার নিজস্ব নির্দিষ্ট পথ দ্বারা প্রভাবিত।

কোডিং প্রায়শই আপনার কীভাবে কাজ করা উচিত সে সম্পর্কে গোপনীয় দৃষ্টিভঙ্গিকে উত্সাহিত করে। কৌশল এবং সরঞ্জামগুলির পরিবর্তে, আমি মনে করি যে কোনও উপযুক্ত কৌশলের সিদ্ধান্ত নেওয়ার জন্য আপনার संचयी মান এবং ব্যয়ের দিকে নজর দেওয়া দরকার।

ভাল, পঠনযোগ্য, ডিবাগযোগ্য, সলিড কোড লিখতে অনেক সময় এবং প্রচেষ্টা লাগে। অনেক ক্ষেত্রে সীমিত পরিকল্পনার দিগন্ত দিলে এটি করা (বিশ্লেষণ পক্ষাঘাত) সার্থক নয়।

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

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

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

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


3

যদিও আমি মনে করি যে ইউনিট পরীক্ষাগুলির তাদের যোগ্যতা রয়েছে তবুও তারা বৈজ্ঞানিক বিকাশের জন্য সন্দেহজনক মূল্যের হয় - এগুলি প্রায়শই খুব বেশি মূল্য দেয় না।

তবে আমি সত্যিই বৈজ্ঞানিক কোডের জন্য সংহতকরণ পরীক্ষা পছন্দ করি:

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

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

আমি প্রায়শই এই কৌশলটি ব্যবহার করছি, এবং প্রায়শই একটি প্রাসঙ্গিকভাবে পাঠযোগ্য মূল ফাংশন দিয়ে শেষ করি তবে উপ-ফাংশনগুলি প্রায়শই বেশ দীর্ঘ এবং কুরুচিপূর্ণ হয়, তবে দৃ I় আই / ও সীমার কারণে পরিবর্তন ও পুনরায় ব্যবস্থা করা যায়।


2

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

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


2

লেখার কোড সহ - সাধারণভাবে লেখার মতো - প্রধান প্রশ্নটি হ'ল:

আপনার কোন পাঠকের মনে আছে? বা আপনার কোড কে গ্রাস করে?

আনুষ্ঠানিক কোডিংয়ের দিকনির্দেশগুলির মতো বিষয়গুলি যখন আপনি আপনার একমাত্র শ্রোতা হন তখন কোনও অর্থ হয় না।

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

সুতরাং একটি "ভাল স্টাইল" একটি হতে পারে, যা আপনাকে সবচেয়ে বেশি সহায়তা করে। স্টাইলটি কী দেখতে হবে তা একটি উত্তর আমি দিতে পারি না।

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

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

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