আপনার তৈরি প্রোগ্রামটি কীভাবে কাজ করে তা না জেনে বেঁচে থাকার কি ঠিক আছে?


16

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


তারা ব্যক্তিদের সমস্যা সমাধান করে না, তারা সম্পর্কিত ক্ষেত্রগুলির সাধারণ সমস্যার সমাধান মাত্র।
অবিমরণ কুগাথাসন

সুতরাং কীভাবে সম্পর্কিত অঞ্চলে সাধারণ সমস্যাগুলি সমাধান করতে হয় এবং "কেবলমাত্র *** ব্যবহার করুন (আপনার প্রিয় পছন্দটি এখানে ব্যবহার করুন)" কীভাবে বলা উচিত তা ঠিক কীভাবে তারা বাস্তবে এটি করেছিল তা না পেয়েই তা ঠিক করে দেবে?
কাবুম্বাস

1
আপনি কি কখনও স্কেলযোগ্য প্রোগ্রাম প্রোগ্রাম করেছেন? সত্য, কোনও লাইব্রেরি সময় 100% সময় নিখুঁত হয় না, এবং বাগগুলি আবদ্ধ হয়। এখন যদি সেই বাগটি আপনি ব্যবহার করছেন এমন বহিরাগত লাইব্রেরিগুলির মধ্যে একটিতে বাস করে এবং 2 বছর বিকাশের চক্রটি আপনি সমস্যার মধ্যে চলে যেতে শুরু করেন এবং আপনি কী জানেন? আপনি যে লাইব্রেরি ব্যবহার করছেন তার মধ্যে এটি একটি! স্পষ্ট করে বলার জন্য: না তাড়াতাড়ি ফিক্স হিসাবে লাইব্রেরিগুলি ব্যবহার করার কোনও ধারণা নেই (অন্তত এন্টারপ্রাইজ-স্তরের সফ্টওয়্যার ইত্যাদির জন্য নয়) কারণ আপনার লাইনটি আরও কিছুটা সীমাবদ্ধ হয়ে যায়।
জেরলুক

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

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

উত্তর:


22

কীভাবে সমস্যাগুলি নিজে সমাধান করবেন এবং এর পরিবর্তে লাইব্রেরি ব্যবহার করবেন তা কী ঠিক নয়?

সাধারণভাবে, না, তা নয়।

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

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

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


13

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


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

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

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

12

হ্যাঁ - এবং আমরা সবাই এটি করি!

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

  1. প্রথমত, একটি উদ্দেশ্য সি পদ্ধতি malloc () ব্যবহার করে একটি পিক্সেল বাফার বরাদ্দ করে এবং এটি তার উদ্দেশ্য সি অবজেক্টে সংযুক্ত করে।
  2. পরে, কিছু ঘটে এবং একটি সি রুটিন উদ্দেশ্য উদ্দেশ্য অবজেক্টটিতে একটি বার্তা প্রেরণ করে এবং পিক্সেল বাফারটি পুনরুদ্ধার করে।
  3. সি রুটিন jpeglib ব্যবহার করে পিক্সেল বাফার সামগ্রীগুলি সংকুচিত করে এবং এটি টিসিপি / আইপি সংযোগের মাধ্যমে প্রেরণ করে।

সেখানে খুব ভয়ঙ্কর কিছু চলছে! এখানে কয়েকটি জিনিস দেওয়া হল:

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

কীভাবে এই সমস্ত জিনিস বাস্তবায়িত হয় তার সমস্ত বিবরণ আপনি বুঝতে পারবেন? আমি নিশ্চিত না! আমি সন্দেহ করি গ্রহে এমন অনেক লোক আছেন যারা করেন - সম্ভবত এমনকি কেউই নেই। সুতরাং আমি শুধু এটি সম্পর্কে চিন্তা করবেন না।

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


1
আমি যদি নিয়মিতভাবে ব্যবহার করি এমন সমস্ত কোডটি বুঝতে হয় তবে জেপিইজি, জ্যামিতিক তথ্য উপস্থাপনা সহ <i> দ্য নুরবস বুক </ i>, পিডিএফ এবং ইউ 3 ডি ফর্ম্যাটগুলির জটিলতা সহ ডেটা সংক্ষেপণ বুঝতে হবে এবং অনেক বেশি. আমি সব কিছুর উপর রেফারেন্স পেয়েছি, কিন্তু আমি এই সব ডাউন প্যাট কখনই করব না।
ডেভিড থর্নলি

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

5

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

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

এছাড়াও আমরা সাধারণত যেভাবেই জটিল অংশগুলি বিমূর্ত করে সমস্যাগুলি সমাধান করি, তবে কেন এটি ঠিক নেই?


5

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


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

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

5

সত্যিই আপনার উপর নির্ভর করে

আপনি যে সরঞ্জামগুলির সাথে কাজ করছেন সেটিকে আপনি যেভাবে বুঝতে পারবেন সেগুলি আরও ভালভাবে সেগুলি নিতে পারেন।

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

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


5

আপনার ক্ষেত্র এবং প্রক্রিয়ার অংশটি জানা আপনার পক্ষে গুরুত্বপূর্ণ।

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

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

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


2

আমার অভিজ্ঞতার ভিত্তিতে: যেহেতু আপনি গ্রন্থাগার-নির্ভরতা দূর করতে পারবেন না, সমস্যাটি সমাধান করার জন্য আপনার এবং আপনার দলের উচিত যথেষ্ট জানা উচিত।

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

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

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

এই সম্ভাবনাটি মোকাবিলা করার জন্য, আমি মনে করি এর সমাধান রয়েছে: কারণ বেশিরভাগ প্রোগ্রামার সহজেই একটি লাইব্রেরির "পৃষ্ঠতল" কাজটি ধরতে পারেন, এবং কেবলমাত্র আমাদের মাঝে মাঝে খুব প্রয়োজন এমন একজন ব্যক্তির প্রয়োজন হয় যে এটি করতে দলকে বিভক্ত করে দিন। এমন একটি দলকে অন্তর্ভুক্ত করার চেষ্টা করা হচ্ছে যা প্রত্যেকে প্রায় ১,২০ টি দরকারী গ্রন্থাগার / সরঞ্জাম / "দক্ষতা সেট" জড়িত যা এতে জড়িত : যার মধ্যে jQuery সম্পর্কে ভাল অভিজ্ঞতা রয়েছে, একজনের ডাটাবেসে বিশেষজ্ঞ রয়েছে, ... এটি ঝুঁকি হ্রাস করতে অনেক সাহায্য করবে।


2

আর একটি দৃষ্টিভঙ্গি হ'ল সুরক্ষা। আপনি যখন এমন একটি লাইব্রেরি ব্যবহার করেন যার মধ্যে সঠিক অভ্যন্তরীণ কাজগুলি আপনি জানেন না, তখন আপনি ঠিক কী ঘটছে সে সম্পর্কে অনুমানগুলি তৈরি করেন। প্রতিটি ব্যর্থ অনুমান একটি দূষিত আক্রমণকারী জন্য আক্রমণ ভেক্টর খুলতে পারে।

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

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

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


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

1

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

প্রোগ্রামিংয়ের অন্যতম কঠিন বিষয় হ'ল নিজের দ্বারা সমস্ত সমস্যা সমাধানের লোভকে কাটিয়ে উঠা।


1

এটি ঠিক আছে তবে এটি বিপজ্জনক। সাধারণ অনুশীলন হিসাবে, তার বিকাশ কী হয়েছে তার কাজ করা উচিত।


1

ধরণ...

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

মোদ্দা কথাটি হ'ল গুচ্ছ ছোট বিবরণ দিয়ে ঝাঁকুনি না ফেলে কেবল আপনার অভিশাপ ধারণাটি ইতিমধ্যে বাস্তবায়ন করে।

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

তবে আপনার কাছে প্রচুর ফ্রি সময় না থাকলে সমস্ত কিছু বের করার চেষ্টা করবেন না ... এটি এদিকে দেখুন। প্রোগ্রামিং ল্যাঙ্গুয়েজের কারণ হ'ল এসেম্বলি কোড করা থেকে আমাদের ieldাল, অ্যাসেম্বলি কোডের কারণ হ'ল আমাদের 1 এবং 0 এর কাজ থেকে রক্ষা করা। আমি মনে করি না এর পিছনের প্রক্রিয়াটির প্রতিটি সূক্ষ্ম বিবরণ আপনার জানা দরকার, তবে কেবল এটির সাধারণ কথাটি জানেন। কোনও আবর্জনা সংগ্রাহকের মতো, আমি জানি এটি আমার পয়েন্টার / মেমোরির সাথে কাজ করে, আমি কীভাবে জাদুকরভাবে ঝরঝরে অ্যালগরিদম ব্যবহার করি তা যত্ন করি না, আমি কেবল জানি এটি কাজ করে (আমার যা প্রয়োজন তার জন্য) এবং এটি অন্য কোনও কাজ করে না। এটি এর শঙ্কু কিন্তু meh হতে পারে। অবশ্যই আপনি যেখানেই এর সাথে ডিল করতে হবে সেই ক্ষেত্রেই না। তারপরে আপনি এই প্রশ্নটি জিজ্ঞাসা করবেন না কারণ এটি আপনার কাজের অংশ part

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