বিব্রতকরভাবে আমি বেশ কয়েক দশক আগে একটি দলের পরিবেশে "সাধারণ" গ্রন্থাগারটি চালু করি। আমি কয়েক মাসের মধ্যে খুব শিথিল-সমন্বিত দল গঠনে কী ঘটতে পারে তার ডায়নামিক্স আমি সত্যিই বুঝতে পারি নি।
আমি যখন এটি পরিচয় করিয়ে দিয়েছিলাম আমি ভেবেছিলাম যে আমি এটি পরিষ্কার করে দিয়েছি এবং নথিভুক্তও করেছি যে এটি আমাদের পক্ষে সকলেই একমত হ'ল আমরা প্রতিদিনের ভিত্তিতে দরকারী মনে করি যে এটি একটি ন্যূনতম গ্রন্থাগার হতে পারে এবং লাইব্রেরিটি ছাড়া অন্য কোনও কিছুর উপর নির্ভর করা উচিত নয় স্ট্যান্ডার্ড লাইব্রেরি যাতে নতুন প্রকল্পে যতটা সম্ভব মোতায়েন করা সহজ। তখন আমার চিন্তাভাবনাটি ছিল যে জিনিসগুলির জন্য স্ট্যান্ডার্ড লাইব্রেরিতে এটি আমাদের নিজস্ব সামান্য বর্ধন ছিল যা আমাদের নির্দিষ্ট ডোমেইনে আমরা প্রতিদিনের ভিত্তিতে দরকারী বলে মনে করি।
এবং এটি যথেষ্ট ভাল শুরু হয়েছে। আমরা common/math*
রুটিনগুলির একটি গণিত গ্রন্থাগার ( ) দিয়ে শুরু করি যা আমরা সকলেই প্রতিদিনের ভিত্তিতে ব্যবহার করি, যেহেতু আমরা কম্পিউটার গ্রাফিকগুলিতে কাজ করতাম যা প্রায়শই রৈখিক বীজগণিতকালে ভারী হত। এবং যেহেতু আমরা প্রায়শই সি কোডের সাথে ইন্টারপোপ করছিলাম, আমরা এর মতো কিছু দরকারী ইউটিলিটি ফাংশনে সম্মত হয়েছি find_index
,std::find
সি ++ তে, কোনও পুনরুক্তির পরিবর্তে একটি ক্রমের সন্ধান পাওয়া উপাদানগুলিতে একটি সূচক ফেরত পাঠাত যা আমাদের সি কার্যকারিতা কীভাবে অনুকরণ করেছিল - এই ধরণের জিনিসগুলি - কিছুটা সারগ্রাহী তবে সংক্ষিপ্তবাদী এবং সবার কাছে পরিচিত এবং ব্যবহারিক থাকার জন্য যথেষ্ট ব্যবহৃত , এবং তাত্ক্ষণিক পরিচিতি একটি অত্যন্ত গুরুত্বপূর্ণ মানদণ্ড হিসাবে যেহেতু আমি "সাধারণ" বা "স্ট্যান্ডার্ড" এমন কোনও কিছু করার চেষ্টা করতে দেখছি যেহেতু যদি এটি সত্যই "সাধারণ" হয় তবে এর প্রশস্ততার ফলস্বরূপ এটি সম্পর্কে সেই পরিচিত গুণটি থাকা উচিত গ্রহণ এবং প্রতিদিনের ব্যবহার
তবে সময়ের সাথে সাথে লাইব্রেরির নকশাগুলির উদ্দেশ্যগুলি আমার আঙ্গুলগুলি থেকে পিছলে গেল কারণ লোকেরা ব্যক্তিগতভাবে ব্যবহৃত জিনিসগুলি যুক্ত করতে শুরু করেছিল যে তারা কেবলমাত্র অন্য কারও কাজে লাগবে বলে মনে করেছিল, কেবল অন্য কেউ এটি ব্যবহার করছে না। এবং পরে কেউ সাধারণ GL- সম্পর্কিত রুটিনগুলির জন্য ওপেনগোলের উপর নির্ভরশীল ফাংশনগুলি যুক্ত করা শুরু করে। এরপরে আমরা কিউটিটি গ্রহণ করেছি এবং লোকেরা কোডটি যুক্ত করা শুরু করেছিল যা Qt এর উপর নির্ভরশীল, সুতরাং ইতিমধ্যে সাধারণ লাইব্রেরি দুটি বাহ্যিক গ্রন্থাগারের উপর নির্ভরশীল ছিল। এক পর্যায়ে কেউ সাধারণ শ্যাডার রুটিন যুক্ত করেছে যা আমাদের অ্যাপ্লিকেশন-নির্দিষ্ট শেডার লাইব্রেরির উপর নির্ভরশীল ছিল এবং সেই সময়ে আপনি কিউটি, ওজিএল এবং আমাদের অ্যাপ্লিকেশন-নির্দিষ্ট শেডার লাইব্রেরি এবং লিখন না নিয়েও এটি একটি নতুন প্রকল্পে স্থাপন করতে পারেন না আপনার প্রকল্পের জন্য একটি তুচ্ছ বিল্ড স্ক্রিপ্ট। সুতরাং এটি এই সারগ্রাহী, আন্তঃনির্ভরশীল জগাখিচায় পরিণত হয়েছে।
তবে এই লাইব্রেরিতে কী কী হওয়া উচিত এবং কী করা উচিত নয় তা নিয়েও আমি এই বিষয়টি নিয়ে বিতর্ক করে খুঁজে পেয়েছি যে "সাধারণ" হিসাবে বিবেচনা করা খুব সহজেই খুব সাবজেক্টিভ ধারণায় রূপান্তরিত হতে পারে যদি আপনি খুব সাধারণ লাইনের নিয়মটি সেট করেন না যে "সাধারণ" কি প্রতিদিনের ভিত্তিতে প্রত্যেকে কী কী কাজে লাগে। মানদণ্ডগুলির যে কোনও শিথিলতা এবং এটি প্রত্যেকেরই প্রতিদিনের ভিত্তিতে এমন কিছুগুলির থেকে কার্যকর হয়ে যায় যা কোনও একক বিকাশকারী অন্যের পক্ষে উপকারী হওয়ার সম্ভাবনা খুঁজে পেতে পারে এবং এটি সেই সময়ে লাইব্রেরিটি একটি সারগ্রাহী জগাখিচায় অবতীর্ণ হয় ।
তবে তদুপরি আপনি যখন পৌঁছাতে পারেন, কিছু বিকাশকারী প্রোগ্রামিংয়ের ভাষা পছন্দ করেন না এমন সাধারণ কারণে জিনিস যুক্ত করা শুরু করতে পারে। তারা লুপ বা কোনও ফাংশন কলটির বাক্য গঠনগুলি পছন্দ করতে পারে না, যেখানে লাইব্রেরি এমন ভাষার সাথে পূর্ণ হতে শুরু করে যা কেবল ভাষার মৌলিক বাক্য গঠনকে লড়াই করে, সরল কোডের কয়েকটি লাইনকে প্রতিস্থাপন করে যা সত্যই নয় বিদেশী কোডের একক সংক্ষিপ্ত লাইনে কোনও যুক্তিকে নকল করে কেবল এমন বিকাশকারীকে পরিচিত যারা এই জাতীয় শর্টহ্যান্ড প্রবর্তন করেছিলেন। তাহলে এই জাতীয় বিকাশকারী শর্টহ্যান্ড ব্যবহার করে কার্যকর করা সাধারণ লাইব্রেরিতে আরও কার্যকারিতা যুক্ত করা শুরু করতে পারে, এই পর্যায়ে সাধারণ গ্রন্থাগারের উল্লেখযোগ্য অংশগুলি এই বহিরাগত শর্টহ্যান্ডগুলির সাথে অন্তর্নির্মিত হয়ে ওঠে যা এটি বিকাশকারীকে সুন্দর এবং স্বজ্ঞাত বলে মনে হতে পারে যারা এটি পরিচয় করিয়ে দিয়েছিল তবে এটি কুৎসিত এবং বিদেশী এবং সকলের পক্ষে বোঝা শক্ত। এবং এই মুহুর্তে আমি মনে করি আপনি জানেন যে সত্যই "সাধারণ" তৈরির কোনও আশা নষ্ট হয়ে গেছে, যেহেতু "সাধারণ" এবং "অপরিচিত" পোলার বিপরীত ধারণা।
সুতরাং সেখানে কৃমির সমস্ত ধরণের ক্যান রয়েছে, কমপক্ষে একটি lyিলে .ালা সমন্বিত দলের পরিবেশে, উচ্চাকাঙ্খার সাথে একটি গ্রন্থাগার যেমন বিস্তৃত এবং কেবল "সাধারণ ব্যবহৃত জিনিস" হিসাবে সাধারণীকরণ রয়েছে। যদিও অন্তর্নিহিত সমস্যাটি অন্য সমস্তগুলির উপরে coordinationিলে coordinationালা সমন্বয় হতে পারে, কমপক্ষে একাধিক গ্রন্থাগারগুলি গণিতের রুটিন এবং অন্য কিছু সরবরাহের উদ্দেশ্যে যেমন একটি লাইব্রেরির মতো আরও একক উদ্দেশ্যে পরিবেশন করার উদ্দেশ্যে তৈরি করেছিল, সম্ভবত এর ক্ষেত্রে এটি উল্লেখযোগ্যভাবে হ্রাস পাবে না "সাধারণ" গ্রন্থাগার হিসাবে বিশুদ্ধতা এবং নির্ভরতা ডিজাইন করুন। অতএব আমি পূর্বসূরী হিসাবে মনে করি যে গ্রন্থাগারগুলির পক্ষে আরও পরিষ্কার করার নকশাকালীন উদ্দেশ্য রয়েছে সেগুলি ভুল করা ভাল better আমি কয়েক বছর ধরে এটিও খুঁজে পেয়েছি যে উদ্দেশ্যগতভাবে সংকীর্ণ এবং প্রযোজ্যতার ক্ষেত্রে সংকীর্ণ মূলত ভিন্ন ধারণা।
এছাড়াও আমি স্বীকার করি যে নন্দনতত্ত্ব সম্পর্কে আমি কমপক্ষে কিছুটা অবৈজ্ঞানিক এবং যত্নও বোধ করি, তবে আমি যেভাবে একটি লাইব্রেরির মানের (এবং "এমনকি" সৌন্দর্য ") সম্পর্কে আমার ধারণা উপলব্ধি করতে পারি তার তুলনায় দুর্বলতম লিঙ্কটি দ্বারা আরও বিচার করা হয় এটি সবচেয়ে শক্তিশালী, একইভাবে আপনি যদি আমাকে বিশ্বের সবচেয়ে ক্ষুধার্ত খাবার উপস্থাপন করেন তবে, একই প্লেটে, সেখানে এমন কিছু পচে যা যা সত্যিই খারাপ গন্ধ পায়, আমি পুরো প্লেটটি প্রত্যাখ্যান করতে চাই। এবং যদি আপনি সে বিষয়ে আমার মতো হন এবং এমন কিছু তৈরি করেন যা "সাধারণ" নামক কিছু হিসাবে সমস্ত প্রকারের সংযোজনকে আমন্ত্রণ জানায় তবে আপনি নিজেকে সেই সাদৃশ্য প্লেটের দিকে কিছুটা ঘোরানো অবস্থায় দেখতে পাচ্ছেন। ঠিক তেমনিভাবে আমিও মনে করি যদি কোনও গ্রন্থাগারটি সংগঠিত করা হয় এবং নামকরণ করা হয় এবং এমনভাবে নথিভুক্ত করা হয় যা এটি না করে ' টি সময়ের সাথে আরও বেশি সংখ্যক সংযোজনকে আমন্ত্রণ জানান। এবং এটি এমনকি আপনার ব্যক্তিগত সৃষ্টির ক্ষেত্রেও প্রযোজ্য হতে পারে, যেহেতু আমি অবশ্যই এখানে এবং সেখানে কিছু পচা জিনিস তৈরি করেছি এবং এটি বৃহত্তম প্লেটে যুক্ত না করা হলে এটি "কলঙ্কিত" অনেক কম। জিনিসগুলিকে ছোট, খুব একক গ্রন্থাগারে আলাদা করে দেওয়ার পাশাপাশি আরও ভাল ডিকোপল কোডের প্রবণতা রয়েছে, কেবলমাত্র নিছক গুণ দ্বারা যদি সমস্ত কিছু সংযোগ শুরু করা খুব কম সুবিধাজনক হয়ে ওঠে।
কোড অনুলিপি বছরের পর বছর ধরে আমার মধ্যে হামাগুড়ি দেওয়া হয়েছে তবে আমার মনে হচ্ছে এইবার চেষ্টা করা উচিত।
আমি আপনার ক্ষেত্রে যা বলতে পারি তা হ'ল কোড অনুলিপিতে এটি নেওয়া সহজ। আমি দুর্বল-পরীক্ষিত, ত্রুটি-প্রবণ কোডের চারপাশে বা এই ধরণের কোনও কিছুর বড় স্নিপেটগুলি অনুলিপি এবং আটকানোর জন্য বলছি না, বা ভবিষ্যতে পরিবর্তনগুলির প্রয়োজনীয়তার শালীন সম্ভাবনা রয়েছে এমন বিপুল পরিমাণে অ-তুচ্ছ কোডের নকল করছি।
তবে বিশেষত যদি আপনি একটি "সাধারণ" গ্রন্থাগার তৈরি করার মানসিকতা থেকে থাকেন, যার জন্য আমি ধরে নিচ্ছি যে আপনার ইচ্ছাটি ব্যাপকভাবে প্রয়োগযোগ্য, অত্যন্ত পুনঃব্যবহারযোগ্য এবং সম্ভবত আদর্শভাবে এমন কোনও কিছু তৈরি করা যা আপনি আজ থেকে দশকের দশকে করেন ঠিক তেমন দরকারী , তারপরে কখনও কখনও আপনার এমনকি প্রয়োজন হতে পারে বা এই অধরা গুণটি অর্জনের জন্য কিছু সদৃশও পেতে পারে। কারণ সদৃশটি সম্ভবত একটি ডিকোপলিং প্রক্রিয়া হিসাবে কাজ করবে। এটি এমন হয় যে আপনি যদি কোনও এমপি 3 প্লেয়ার থেকে কোনও ভিডিও প্লেয়ার আলাদা করতে চান তবে আপনাকে অন্তত ব্যাটারি এবং হার্ড ড্রাইভের মতো কিছু জিনিস সদৃশ করতে হবে। তারা এই জিনিসগুলি ভাগ করতে পারে না অন্যথায় তারা অবিচ্ছিন্নভাবে মিলিত হয় এবং একে অপরের থেকে স্বতন্ত্রভাবে ব্যবহার করা যায় না এবং সেই মুহুর্তে লোকেরা ডিভাইসে আগ্রহী নাও হতে পারে যদি তারা যা করতে চায় সমস্ত এমপি 3 খেলছে। তবে আপনি এই দুটি ডিভাইসকে আলাদা করে দেওয়ার কিছু সময় পরে আপনি দেখতে পাবেন যে এমপি 3 প্লেয়ারটি ভিডিও প্লেয়ারের চেয়ে আলাদা ব্যাটারি ডিজাইন বা ছোট হার্ড ড্রাইভ থেকে উপকৃত হতে পারে, এই মুহুর্তে আপনি আর কোনও সদৃশ নেই; এই আন্তঃনির্ভর ডিভাইসটিকে দুটি পৃথক, স্বতন্ত্র ডিভাইসগুলিতে বিভক্ত করার জন্য ডুপ্লিকেশন হিসাবে প্রথমে কী শুরু হয়েছিল তা পরবর্তীতে নকশা এবং বাস্তবায়নগুলি অর্জন করতে পারে যা একেবারেই অপ্রয়োজনীয় নয়।
লাইব্রেরি ব্যবহার করে এমন ব্যক্তির দৃষ্টিকোণ থেকে জিনিসগুলি বিবেচনা করা মূল্যবান। আপনি কি আসলে ব্যবহার করতে চানকোড ডুপ্লিকেশন ন্যূনতম একটি লাইব্রেরি? সম্ভাবনাগুলি হ'ল আপনি যাবেন না কারণ এটি যা স্বাভাবিকভাবে অন্যান্য লাইব্রেরির উপর নির্ভর করে। এবং এই অন্যান্য লাইব্রেরিগুলি তাদের কোডটি নকল করা এড়াতে অন্যান্য গ্রন্থাগারগুলির উপর নির্ভর করতে পারে এবং ঠিক ততক্ষণ আপনার অডিও ফাইল লোড করা ও প্লে করার মতো কিছু প্রাথমিক কার্যকারিতা পেতে 50 টি বিভিন্ন লাইব্রেরি আমদানি / সংযোগের প্রয়োজন হতে পারে এবং এটি খুব স্বার্থহীন হয়ে যায় । এদিকে যদি এই জাতীয় অডিও লাইব্রেরি ইচ্ছাকৃতভাবে কিছু জিনিস এখানে এবং সেখানে তার স্বাধীনতা অর্জনের জন্য নকল করা বেছে নিয়েছে তবে নতুন প্রকল্পগুলিতে এটি ব্যবহার করা এত সহজ হয়ে যায় এবং সম্ভাবনা রয়েছে যে এটি জয়ের পর থেকে প্রায়শই আপডেট করা হবে না। ' এর নির্ভরশীল বাহ্যিক লাইব্রেরিগুলির পরিবর্তনের জন্য একটির পরিবর্তনের দরকার নেই যা অডিও লাইব্রেরির প্রয়োজনের চেয়ে অনেক বেশি সাধারণ উদ্দেশ্য পূরণ করার চেষ্টা করতে পারে।
তাই কখনও কখনও কোনও পাঠাগারকে ডিকুয়াল করে স্বাধীন করার জন্য ইচ্ছাকৃতভাবে কিছুটা সদৃশভাবে (সচেতনভাবে, কখনও অলসতার বাইরে নয় - বেছে নেওয়া ভাল) কারণ সেই স্বাধীনতার মাধ্যমে, এটি ব্যবহারিক প্রয়োগের বিস্তৃত পরিসীমা অর্জন করে এবং এমনকি স্থিতিশীলতা (আর কোনও অভিজাত কাপলিং নেই)। যদি আপনি সর্বাধিক পুনরায় ব্যবহারযোগ্য লাইব্রেরি ডিজাইন করতে চান যা আপনাকে এক প্রকল্প থেকে পরের এবং বছরের পর বছর ধরে চলতে পারে তবে তার ব্যাপ্তিটি সর্বনিম্নে সংকীর্ণ করার শীর্ষে, আমি আসলে এখানে কিছুটা সদৃশ করার কথা বিবেচনা করার পরামর্শ দেব। এবং প্রাকৃতিকভাবে ইউনিট পরীক্ষা লিখুন এবং নিশ্চিত করুন যে এটি কী করছে তা সত্যই নিখুঁতভাবে পরীক্ষা করা হয়েছে এবং নির্ভরযোগ্য। এটি কেবলমাত্র গ্রন্থাগারগুলির জন্য যা আপনি সত্যিকার অর্থে এমন এক পর্যায়ে সময় নিতে চান যা একক প্রকল্পের বাইরে চলে যায়।