কোড 2019 এর আগমন এবং আমি কীভাবে পরিচিতিকে ভালবাসি

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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