"ক্লিন কোড" অনুশীলন থেকে দূরে কোড থাকা অবস্থায় কীভাবে বিশাল ওপেন সোর্স লাইব্রেরিগুলি রক্ষণাবেক্ষণ করতে পারে?


80

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

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

সুতরাং আমার প্রশ্ন হ'ল: ক্লিন কোডের নীতিগুলি কি খুব সীমিত, এবং আমরা এগুলি ছাড়া অনেক লাইব্রেরিতে এগুলি করতে পারি? যদি তা না হয় তবে এই নীতিগুলির অনেকগুলি বিবেচনা না করে কীভাবে বিশাল গ্রন্থাগারগুলি রক্ষণাবেক্ষণ করা হচ্ছে?

আমি কোন সংক্ষিপ্ত ব্যাখ্যা প্রশংসা করব। যদি কোনও নবজাতকের কাছ থেকে প্রশ্নটি বোকা মনে হয় তবে আমি ক্ষমা চাই ize

সম্পাদনা

এই চেক উদাহরণ মধ্যে Butterknife গ্রন্থাগার - অ্যান্ড্রয়েড কমিউনিটি সবচেয়ে ভাল জানেন লাইব্রেরি করুন।


71
আপনি পক্ষপাতদুষ্ট নমুনায় ভুগছেন। আপনি বলেছেন যে আপনি "সুপরিচিত" লাইব্রেরির কোড পরীক্ষা করেছেন। ভাল, যে লাইব্রেরিগুলি তাদের নিজস্ব ওজনের নীচে ধসে পড়ে কারণ তারা সর্বোত্তম অনুশীলনগুলি অনুসরণ করে না তারা "সুপরিচিত" নয়, তারা অস্পষ্ট হয়ে যায়।
Jörg ডব্লু মিটাগ

3
আপনি যেমন লিনাক্স উত্স চেক করেছেন?
মার্টিন শ্র্রেডার

55
এক টুকরো সফ্টওয়্যারটির মানটির প্রাথমিক পরিমাপ কোডটি কতটা "পরিষ্কার" নয়, এটি কোনও নির্দিষ্ট কাজকে কতটা ভালভাবে সম্পাদন করে তা নয়। কিছু লোক কেবল কিছু লেখার খাতিরে সফ্টওয়্যার লিখতে পছন্দ করেন, তবে বেশিরভাগ মানুষের কাছে কোডটি কেবল একটি সমাপ্তির উপায়।
whatsisname

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

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

উত্তর:


84

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

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

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


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ইয়ানিস

158

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

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

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

ভাষাটিও একটি ফ্যাক্টর: ক্লিন কোড জাভা বা একটি অনুরূপ ভাষা ধরে নিয়েছে - আপনি সি বা লিস্প ব্যবহার করেন তবে প্রচুর পরামর্শ প্রযোজ্য না।

সংক্ষেপে, বইটি কোনও একক শ্রেণীর সফ্টওয়্যার সম্পর্কে একক ব্যক্তির মতামত। এটি সর্বত্র প্রযোজ্য হবে না।

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


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

16
সেই বইটি অনুসরণ করা অনেককেই "আবর্জনা কোড" বলে কঠোরভাবে উত্পাদন করে।
ফ্রাঙ্ক হিলিমান

16
@ ফ্র্যাঙ্কহিল্যান: আরও বেশি কিছু এই বইয়ের সুপারিশ অনুসরণ করে না।
ডক ব্রাউন

5
@ jpmc26 - আপনার লিঙ্কিত উত্তরটি এমন একটি ক্ষেত্রের সাথে সম্পর্কিত যার সাথে আমি ঘনিষ্ঠভাবে পরিচিত, বৈজ্ঞানিক প্রোগ্রামিং। আমি সম্প্রতি একটি ইচ্ছার তালিকা আইটেমটি পেয়েছি, যা জনসন স্পেস সেন্টারের বিভিন্ন সিমুলেশনে মাধ্যাকর্ষণ মডেলটিকে আপেক্ষিকভাবে সঠিকভাবে তৈরি করা হয়েছিল। মন্তব্য এবং ফাঁকা রেখাগুলি গণনা করা, আমি যে কোডটি লিখেছিলাম যে নিউটোনীয় মাধ্যাকর্ষণ সম্পর্কিত আপেক্ষিক কল্পনা গণনা করে তা 145 লম্বা লম্বা এবং এটি সমস্তই একটি ফাংশনে in সাধারণত আমি এটা দেখে ক্রিঞ্জ করব যে আমি নিজেই একটি ফাংশন লিখেছি যা ৪৫ লাইনের দীর্ঘ, 145 ছেড়ে দেওয়া যাক But তবে এই ক্ষেত্রে নয়। ...
ডেভিড হামেন

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

34

সারাংশ

জ্যাকবি যেমন লিখেছেন, সবাই রবার্ট সি মার্টিনের "ক্লিন কোড" এর সাথে একমত নয়।

আপনি যে ওপেন সোর্স প্রকল্পগুলি প্রত্যাশিত নীতিগুলি "লঙ্ঘন" করেছেন বলে মনে হয়েছে কেবল অন্য নীতিগুলিই সম্ভবত রয়েছে।

আমার দৃষ্টিকোণ

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

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

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

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

উদাহরণ

"একটি দীর্ঘ পদ্ধতি থেকে কয়েকটি ব্যক্তিগত পদ্ধতিতে বিভক্তকরণ কোড" অনুশীলনটি বিবেচনা করুন।

রবার্ট সি মার্টিন বলছেন যে এই শৈলী বিমূর্ততা এক স্তর প্রতিটি পদ্ধতি বিষয়বস্তু সীমিত জন্য করতে পারবেন - একটি সরলীকৃত উদাহরণ হিসাবে একটি সর্বজনীন পদ্ধতি সম্ভবত শুধুমাত্র মত ব্যক্তিগত পদ্ধতি কল গঠিত হবে verifyInput(...), loadDataFromHardDisk(...), transformDataToJson(...)এবং পরিশেষে sendJsonToClient(...), এবং এই পদ্ধতি হবে বাস্তবায়ন বিশদ।

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

পাঠটি হ'ল: এগুলি সকলেই সঠিক, কারণ তারা মতামত পাওয়ার অধিকারী।


13

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

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

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


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

7

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

এটি এমন সমস্ত প্রকল্পের মালিক / পরিচালকদের সমালোচনা নয় যাঁর প্রকল্পগুলির বিষয়ে আমি কথা বলছি, এটি কেবল সময়ের জন্য ব্যবহৃত বিষয়। এই ব্যক্তিদের তাদের প্রকৃত বেতনের চাকরির মতো তাদের সময়ের সাথে আরও ভাল জিনিস করতে হয়।

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

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

মালিকদের জিনিস পরিষ্কার করার সময় নেই এবং অন্য কারওই যত্ন নেই।

এবং কোড বড় হচ্ছে। এবং কুৎসিত।

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

এই মুহুর্তে এটি ঠিক নয় যে লোকেদের যত্ন নেই, কারণ তারা জিনিস ভাঙার ভয়ে ভয়ে যেহেতু তারা আর পরিষ্কার করার সাহস পান না।

কোড বেসগুলিকে "নিষ্ঠুর ও অস্বাভাবিক শাস্তি" হিসাবে বর্ণনা করার মতো লোক আমার কাছে রয়েছে।

আমার ব্যক্তিগত অভিজ্ঞতাগুলি তেমন খারাপ নয়, তবে কয়েকটি খুব অদ্ভুত জিনিস আমি দেখেছি।


23
আপনি যদি এই উত্তরের "উন্মুক্ত" এবং "উত্স" শব্দটি মুছে ফেলেন তবে এটি ঠিক ঠিক ঠিক থাকবে।
স্টিফেন এম ওয়েব

আমি বলব যে এটি ক্লোজড-সোর্স সফ্টওয়্যারটির জন্যও সমান সত্য।
মার্ক রোটভিল

3

আমার কাছে মনে হচ্ছে, কেউ জিজ্ঞাসা করছে যে এই জিনিসগুলি কীভাবে কাজ করে যদি কেউ তাদের করণীয় বলে মনে করে যা করে না। এবং যদি এটি কাজ করে তবে আমাদের কেন এই কাজগুলি করার কথা ভাবা হচ্ছে ?

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

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

সমাধান একটি সম্পূর্ণ নতুন সিস্টেম বলা উদ্ভাবিত ছিল LibreSSL , যা ছিল পরিষ্কার পর কোড ব্যবহার করা যাচ্ছে , এবং অবশ্যই প্রায় কেউ কিছু এটি ব্যবহার করে

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

তাহলে অন্য কেউ না থাকলে আপনার কেন ' সঠিক উপায়ে ' কিছু করা উচিত ?

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


1
সুও অনেক লিঙ্ক ... প্রথম নজরে আমি ভেবেছিলাম এই উত্তরটি হোভার অ্যাডভারটাইজিং সহ বা এটি কোনও উইকিপিডিয়া পৃষ্ঠা ছিল might
জনি হেনলি

2

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

  • আমি যখন কোনও গ্রন্থাগার, বা একটি গ্রন্থাগার থেকে আমদানি করি, তখন আমি সম্ভবত তার অভ্যন্তরীণ কাঠামোর বিশেষজ্ঞের পক্ষে যথেষ্ট পরিমাণে জানতে পারি না যে আমি যার কাজ করছি তার অনুলিপিটির সঠিক ক্ষুদ্র ভগ্নাংশটি আমার কী প্রয়োজন, যতক্ষণ না আমি অনুলিপি করছি স্ট্যাক এক্সচেঞ্জের উত্তর আমাকে করতে বলেছে। সুতরাং আমি টাইপ করা শুরু করি from A import(এটি পাইথনে থাকলে, বলুন) এবং দেখুন কী আসে। তবে এর অর্থ আমি তালিকাভুক্ত যা দেখতে পাচ্ছি তার জন্য লজিক্যাল কার্যগুলি প্রতিফলিত করতে হবে যা আমাকে ধার করা দরকার এবং কোডবেজে এটিই থাকতে হবে। এটি সংক্ষিপ্ত করে তোলে এমন অসংখ্য সহায়ক সহায়ক পদ্ধতি আমাকে কেবল বিভ্রান্ত করবে।
  • বেশিরভাগ লোকেরা কেবল অস্পষ্টভাবেই শুনেছেন এমন কিছু অ্যালগোরিদম ব্যবহার করার চেষ্টা করছেন এমন অতি অভিজ্ঞ প্রোগ্রামারটির জন্য গ্রন্থাগারগুলি রয়েছে। তাদের বাহ্যিক ডকুমেন্টেশন প্রয়োজন এবং এজন্য কোডটি স্পষ্টভাবে মিরর করা দরকার যা আমরা স্বল্প-পদ্ধতিতে এবং এক-জিনিস অনুসারীকে খুশি করার জন্য সমস্ত কিছু রিফ্যাক্টর করে রাখলে এটি করতে পারে না।
  • লোকেদের নেওয়া প্রতিটি লাইব্রেরি পদ্ধতি বিশ্বব্যাপী কোডটি ভেঙে ফেলতে পারে যদি তা নামিয়ে নেওয়া বা নামকরণ করা হয় তবে তা সর্বনাশা পরিণতিগুলি সহ। অবশ্যই, আমি আশা করি স্ক্লার্ন সংশোধন করবে ক্যালিনস্কি-হারাবাসস-এ টাইপো করবে , তবে এটি অন্য একটি বাম-প্যাডের ঘটনার কারণ হতে পারে । প্রকৃতপক্ষে, আমার অভিজ্ঞতার মধ্যে গ্রন্থাগারের বিবর্তনের ক্ষেত্রে সবচেয়ে বড় সমস্যাটি হ'ল তারা যখন কীভাবে সমস্ত কিছু কাঠামোগত করে তার কিছু নতুন কোড "নতুন উন্নতি" গ্রহণ করার জন্য তারা খুব চেষ্টা করে hard
  • ইন-হাউস, মন্তব্যগুলি মূলত সর্বোপরি একটি প্রয়োজনীয় প্রয়োজনীয় মন্দ, সমস্ত কারণে আমার পুনঃব্যবস্থা করা দরকার না (যদিও এই বিষয়গুলি কিছুটা অতিরঞ্জিত করে)। একটি ভাল মন্তব্য বলে যে কোডটি কেন কাজ করে, কীভাবে নয়। তবে গ্রন্থাগারগুলি জানেন যে তাদের পাঠকরা এমন দক্ষ প্রোগ্রামার যাঁরা কাগজের ব্যাগ থেকে বেরিয়ে যাওয়ার পথে লিনিয়ার-বীজগণিত লিখতে পারেন না। অন্য কথায়, প্রতিটি কিছুর পুনরায় মন্তব্য করা দরকার: কেন এটি কাজ করে! (ঠিক আছে, এটি অন্য একটি অতিরঞ্জিত।) সুতরাং যে কারণে আপনি স্বাক্ষর রেখা, 100-লাইন মন্তব্য ব্লক, কোডের 1 লাইন যা আক্ষরিকভাবে স্বাক্ষর রেখায় যেতে পারে (অবশ্যই ভাষা অনুমতি দেওয়া) see
  • ধরা যাক আপনি গিথুবকে কিছু আপডেট করেছেন এবং আপনার কোডটি স্বীকৃত হবে কিনা তা দেখার জন্য অপেক্ষা করুন। আপনার কোড পরিবর্তন কেন কাজ করে তা অবশ্যই স্পষ্ট হওয়া উচিত। আমি অভিজ্ঞতা থেকে জানি যে একটি কার্যকরী কমিটের অংশ হিসাবে ক্যাম্পসাইটকে ক্লিনার তৈরি করার জন্য রিফ্যাকচারিংয়ের অর্থ প্রায়শই অনেকগুলি লাইন-সঞ্চয়, পুনর্বিন্যাস এবং পুনর্নামকরণ করা হয় যা আপনার বেতনহীন পর্যালোচনাকারীর কাজকে আরও শক্ত করে তোলে এবং অন্যান্য পূর্বোক্ত সমস্যার কারণ হয়ে দাঁড়ায়।

আমি নিশ্চিত যে আমার চেয়ে অভিজ্ঞ ব্যক্তিরা অন্যান্য বিষয়গুলি উল্লেখ করতে পারেন।


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

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

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

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

এজন্য তাদের চাচা বব এর বইটি পড়া উচিত :)
এফসিএন

2

ইতিমধ্যে অনেক ভাল উত্তর আছে - আমি একটি মুক্ত উত্স রক্ষণাবেক্ষণের দৃষ্টিভঙ্গি দিতে চাই।

আমার দৃষ্টিকোণ

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

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

পঠনযোগ্য কোডে

যখন তুমি বললে:

আমি তাদের অনেকের মধ্যে কোডটি পরিষ্কার কোড লিখার উদ্দেশ্যে দেওয়া নীতিগুলি থেকে অনেক দূরে খুঁজে পেয়েছি - যেমন কোডের কয়েকশ লাইনের সমন্বিত পদ্ধতি containing

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

কিছু ওপেন সোর্স প্রকল্পগুলি খুব বেশি স্বাগত জানায় না

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

ব্যক্তিগতভাবে আমি সেখানে তার অবস্থানের সাথে একমত নই - তবে এটি লোকেরাও কিছু করে।


1

ওপেন সোর্স সফ্টওয়্যারটি অগত্যা এই নয় যে একাধিক লেখক জড়িত। যখন কোনও সফ্টওয়্যার (বা সফটওয়্যারটির ইউনিট) কোনও একক লেখক দ্বারা লেখা হয়, দীর্ঘ ফাংশন প্রায়শই দেখা যায়।

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

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

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

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

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