গেমসে কাজের জন্য সি ++ কাজের অভিজ্ঞতা অর্জনের সর্বোত্তম উপায় (সি # থেকে আসছে) [বন্ধ]


19

আমি একটি সফ্টওয়্যার বিকাশকারী, কয়েকটি অন্যান্য ভাষার পাশাপাশি সি # (5 বছরের অভিজ্ঞতা) দিয়ে অভিজ্ঞ।

আমার "স্বপ্নের কাজ" ভিডিও গেমসে বিকাশকারী হিসাবে কাজ করছে।

বেশিরভাগ চাকরিতে সি ++ এর জ্ঞান প্রয়োজন, যা আমার বর্তমানে নেই (কিছু বেসিক বাদে)।

আমি চারপাশে দেখেছি এবং বেশিরভাগ বড় গেম সংস্থাগুলি সি ++ এর সাথে পূর্ববর্তী অভিজ্ঞতার 3-5 বছর বরাবর কিছু প্রয়োজন।

আমার প্রশ্ন হ'ল সি # থেকে আগত এই প্রয়োজনীয় অভিজ্ঞতার স্তরে নিজেকে পৌঁছানোর জন্য একটি ভাল রুট কী হবে?

আমি এটি করার কিছু সম্ভাব্য উপায় সম্পর্কে ভেবেছি:

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


1
ধন্যবাদ আমি এটি পরীক্ষা করে দেখব। যদিও আমি নিশ্চিত নই যে প্রোগ্রামিংয়ের আমি কোনও শিক্ষানবিশ না হওয়ায় এটি হুবহু একই প্রশ্ন।
SpaceOwl

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

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

উত্তর:


29

গেম ডেভেলপার হিসাবে, সি # লোকের ভাড়া নেওয়া আমার প্রধান উদ্বেগ হ'ল নিম্ন-স্তরের জ্ঞানের অভাব হবে।

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

যদি আমি আপনাকে সাক্ষাত্কার দিচ্ছিলাম তবে আমি আপনার জীবনবৃত্তান্তের সি ++ সম্পর্কে কম চিন্তা করব এবং আপনি আমার সি / সি ++ / নিম্ন-স্তরের সাক্ষাত্কার প্রশ্নের উত্তর দিতে পারবেন কিনা সে সম্পর্কে আরও নজর রাখব। আপনার কিছু সমস্যা হতে পারে এমন স্ট্যান্ডার্ড সাক্ষাত্কারের প্রশ্নগুলিতে আমি ছুরিকাঘাত করব (সতর্কতা: আমি কোনও সি # বিশেষজ্ঞ নই):

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

1
পুনরায় পোস্ট করুন: vtable পয়েন্টারগুলি মেমোরিতে রয়েছে তা জানার উপযোগিতাটি আমি ইতিমধ্যে জানি কারণ আমি এর আগে জড়িত একটি বাগে চলে এসেছিলাম । তবে ২ য় প্রশ্নটি কীভাবে কার্যকর? "মেমরির কোনও মান পড়ার মতো অ্যাসেম্বলি স্তরের ক্রিয়াকলাপগুলি" কীভাবে একজনকে সক্ষম সি ++ প্রোগ্রামার করে?
bobobobo

ওয়াই ইউআই ইন্টার্ন স্পটটির জন্য আমার ব্লিজার্ড সাক্ষাত্কারটি পয়েন্ট 1, 2, 3 (একটি কম ডিগ্রী পর্যন্ত), 5 এবং 7 এ স্পর্শ করেছে তিনি ডিবাগিং / পরীক্ষার বিষয়েও প্রশ্ন জিজ্ঞাসা করেছিলেন (পয়েন্ট 8 এর সমান) আমার মনে হয় এই উত্তরটি ঠিক স্পটটিতে রয়েছে এমনকি উচ্চ স্তরের গেম ডেভলপমেন্ট সংস্থাগুলির ক্ষেত্রেও সাধারণ ক্ষেত্রে।
ডিন নাইট

2
@ ডিয়ানকাইটে আমি সন্দেহ করি না। তবে আমি এখনও জানতে চাইছি যে ওপি এই ধরণের প্রশ্নটি কাউকে একটি ভাল সি ++ প্রোগ্রামার করে তোলে (মূল প্রশ্নটি কীভাবে আরও ভাল সি ++ প্রোগ্রামার হওয়া যায় সে সম্পর্কে) কেবলমাত্র কাউকে সাক্ষাত্কার দেওয়াতে সহায়তা করার বিপরীতে।
bobobobo

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

1

যা বললেন এরিক। আমি "নতুন" এড়াতে যোগ করব যেখানে এটি খুব নিকটবর্তী নয়। এটি সি # তে খুব সাধারণ তবে এটি সি ++ 11 এ খারাপ অভ্যাস হিসাবে বিবেচিত এবং স্ট্যাক বরাদ্দের চেয়ে ধীর এবং আরও বিপজ্জনক কারণ আপনাকে এটিকে ম্যানুয়ালি হ্রাস করতে হবে।

আমি পুরানো বইগুলির সাথেও যত্নবান হব, তারা পুরানো অনুশীলনগুলি শেখায়। আমি ব্যক্তিগতভাবে নির্ভরযোগ্য ফোরাম / ওয়েবসাইট, স্ট্যাকওভারফ্লো / আইসোক্প্প পছন্দ করি।


ধন্যবাদ। আমি অধ্যয়নের জন্য ভাষা নির্দিষ্টকরণের চেয়ে আরও বিস্তৃত, আরও সাধারণ পরামর্শ / সুপারিশের সন্ধান করছিলাম।
SpaceOwl

"এড়ানো new" আসলেই বুদ্ধিমানের প্রস্তাবনা নয়। আপনি newপয়েন্টার আছে যখন ব্যবহার । যদি class Derived : Base, তবে একটি Base var = Derived();অবৈধ, তবে Base *var = new Derived();আইনী। সুতরাং সঠিকভাবে কাজ করার জন্য পলিমারফিজম পেতে আপনার পয়েন্টার প্রয়োজন।
bobobobo

হ্যাঁ, তবে আপনি বহুবিজ্ঞান সম্পন্ন করতে এবং নগ্ন পয়েন্টারটি এড়াতে std :: অনন্য_পিটার ব্যবহার করতে পারেন (যদিও আপনার কাছে এখনও ইউনিক_সেপ্ট্র কনস্ট্রাক্টরে নতুন কীওয়ার্ড থাকবে)
এরিক বি

আমি দুঃখিত, আমি উপরের মন্তব্যে একটি ভুল করেছি। Base var = Derived() কাজ করবে , কিন্তু এটা হবে টুকরা করা আপনাকে এবং, অজান্তে, তথ্য হারিয়ে var। কাটা সমস্যা সমাধানের জন্য, আপনি পয়েন্টার ব্যবহার করতে পারেন।
bobobobo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.