তরুণ মনের কি পয়েন্টার ধারণাটি শিখতে হবে?


89

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

লোকে বলে যে সি হল মৌলিক ভাষা এবং পয়েন্টার হ'ল ধারণাটি যা সিটিকে শক্তিশালী এবং অসামান্য করে তোলে এবং সিটিকে আরও আধুনিক ভাষার সাথে প্রতিযোগিতায় পরিণত করে। তাহলে কেন তারা আরও আধুনিক ভাষায় পয়েন্টারগুলি মুছে ফেলল?

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

আপনি কি মনে করেন?

আপডেট হয়েছে :

আমি গুগলে যে মন্তব্যগুলি পড়েছি তা হ'ল:

  1. পূর্ববর্তী কম্পিউটারগুলি খুব ধীর এবং অনুকূলিত ছিল না।

  2. পয়েন্টারগুলি ব্যবহার করে সরাসরি কোনও ঠিকানা অ্যাক্সেস করা সম্ভব হয় এবং এটি ফাংশন কলগুলিতে এর অনুলিপি তৈরির পরিবর্তে সময় সাশ্রয় করে।

  3. পয়েন্টার ব্যবহার করে সুরক্ষা উল্লেখযোগ্যভাবে খারাপ, এবং সে কারণেই জাভা এবং সি # এগুলিকে অন্তর্ভুক্ত করেনি।

এগুলি এবং আমি আরও কিছু খুঁজে পেয়েছি। আমার এখনও কিছু মূল্যবান উত্তর দরকার। যে প্রশংসিত হবে।


52
জাভা পয়েন্টার নেই? এটা সত্যি না. জাভাতে প্রতিটি বস্তুর রেফারেন্স মূলত একটি পয়েন্টার।
কোয়ান্ট_দেব

20
কোয়ান্ট_দেব বলতে যা বোঝায় তা হল জাভা পয়েন্টারগুলিতে পূর্ণ যা স্বচ্ছভাবে ব্যবহৃত হয়, যখন প্রোগ্রামাররা সেগুলি স্পষ্টভাবে ব্যবহার করতে পারে না।
সাকিস্ক


11
"সি মাস্টার ডেনিস রিচি কেন সি-তে পয়েন্টার চালু করলেন?" পয়েন্টারগুলি সি-তে প্রবর্তিত হয়নি , তারা সরাসরি সমাবেশ অনুশীলন থেকে নামটি অন্তর্ভুক্ত করেছিল।
ডিএমকেকে

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

উত্তর:


128

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

"VB.Net বা জাভাতে সম্পন্ন অগ্রণী জিনিসগুলি সি তে সম্ভব নয়" এই কথাটি বলে খুব কম সীমাবদ্ধ দৃষ্টিভঙ্গি দেখায়: কমপক্ষে :-)

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

এখন, অবশ্যই এটি একটি সম্পূর্ণ ভিন্ন প্রশ্ন যে কোনও সমাধান কোনও নির্দিষ্ট ভাষায় সম্ভব কিনা। কোনও বুদ্ধিমান বিকাশকারী সমাবেশে কোনও ওয়েব অ্যাপ লিখতে শুরু করবেন না :-) তবে এটি মনে রাখতে হবে যে এই উচ্চ স্তরের ভাষাগুলির বেশিরভাগ বা সমস্তগুলি বিশাল পরিমাণ রানটাইম এবং শ্রেণিকালীন লাইব্রেরি কোডের উপরে নির্মিত, এর একটি বিশাল অংশ যা নিম্ন স্তরের ভাষায় প্রয়োগ করা হয়, সাধারণত সিতে in

সুতরাং প্রশ্ন পেতে,

আপনি কি মনে করেন তরুণদের কাছে নির্দেশকের উপর জ্ঞান গুরুত্বপূর্ণ [...]?

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

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

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


5
এটি একটি ভাল উত্তর তবে সত্যই এই প্রশ্নের উত্তর দেয় না: "তরুণদের কী পয়েন্টার ধারণাটি শিখতে হবে?"
ফ্যালকন

11
+1 ভাল উত্তর। আমি যদিও টিউরিং সম্পূর্ণতার যুক্তিটি ফেলে দেব - ব্যবহারিক প্রোগ্রামিংয়ের জন্য, এটি একটি লাল রঙের হেরিং, যেমনটি আপনি পরেও নোট করেছেন। এটি গণনাযোগ্যতা তত্ত্ব, অর্থাৎ সম্পূর্ণরূপে ট্যুর করার অর্থ শুধুমাত্র সম্ভাব্য প্রোগ্রামগুলির (অনেক ভাষার জন্য, অসীম) জায়গার মধ্যে একটি প্রোগ্রাম রয়েছে যা একই অ্যালগরিদমকে বাস্তবায়িত করে, এটি বাস্তবে সম্ভব না এমনকি মানবিকভাবেও সম্ভব কিনা not শেষ পর্যন্ত এটির সমস্ত মেশিন কোডটি কেবল ইঙ্গিত করে বোকা রোপণ না করে বিন্দুটি ঠিক প্রমাণিত করে "হরহর! আমি এক ভাষায় সব কিছু করতে পারি!" বীজ.

5
"এবং একজন কারিগর যা তার সরঞ্জামগুলি কীভাবে কাজ করে তা খুব সীমাবদ্ধ হিসাবে বুঝতে পারে না
দ্রুত_ এখন

6
এছাড়াও, পয়েন্টারগুলির মেকানিক্সগুলি না বুঝার (এবং এক্সটেনশন রেফারেন্সের সাহায্যে) এর ফলে আপনি অগভীর / গভীর ডেটাস্ট্রাক্ট কপির ধারণাগুলি বুঝতে পারছেন না, যা গুরুতর হার্ড-টু-ট্র্যাক বাগের কারণ হতে পারে। এমনকি "আধুনিক" উচ্চ-স্তরের ভাষায়।
মাবরিক

1
সি ইউনিক্সের জন্য পোর্টেবল অ্যাসেমব্লার হিসাবে নকশাকৃত , ধাতবটির কাছাকাছি।

39

আমার মনে হয় আপনার আলাদা হওয়া দরকার।

জাভা এবং অন্যান্য উচ্চ স্তরের ভাষাগুলি পয়েন্টারগুলি সরায় নি। তারা যা করেছিল তা হ'ল সরল পয়েন্টার গাণিতিক অপসারণ করা।

আসলে, জাভা এখনও একটি সুরক্ষিত এবং সীমাবদ্ধ পয়েন্টার গাণিতিক: অ্যারে অ্যাক্সেসের অনুমতি দেয়। সাধারণ পুরানো সি-তে অ্যারে অ্যাক্সেস ডিফেরেন্সিং ছাড়া কিছুই নয়। এটি আলাদা স্বরলিপি, একটি সিনট্যাকটিক চিনি, আপনি যদি করেন তবে আপনি কী করছেন তা স্পষ্টভাবে যোগাযোগ করতে।
এখনও, array[index]সমতুল্য *(array+index)। এর কারণ হিসাবে এটিও সমান index[array]যদিও আমি মনে করি কিছু সি সংকলক আপনাকে একটি সতর্কতা দিতে পারে, যদি আপনি এটি করেন।
একটি করোলারি হিসাবে, pointer[0]সমান *pointer। এটি কেবলমাত্র কারণ "অ্যারের দিকে নির্দেশক" হ'ল অ্যারের প্রথম প্রবেশের ঠিকানা এবং পরবর্তী উপাদানগুলির ঠিকানাগুলি সূচক যুক্ত করে গণনা করা হয়।

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

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

এর অসুবিধাটি হ'ল এটি কেবল কম শক্তিশালী। সি তে মেমরি নিরাপদ প্রোগ্রামিং করা সম্ভব হয় জাভাতে গতি এবং অনিরাপদ প্রোগ্রামিংয়ের সম্ভাবনাগুলি থেকে উপকৃত হওয়া অসম্ভব।

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

আইএমএইচও, আমাদের কাজের প্রত্যেকেরই এটি বুঝতে সক্ষম হওয়া উচিত, বা তারা কেবলমাত্র ভুল ক্ষেত্রে রয়েছে।


13
+1 জাভা এবং সি # এর এখনও পয়েন্টার রয়েছে, এবং অবশ্যই নালপয়েন্টারএক্সেপশন
জে কে।

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

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

2
আসলে, back2dosপ্রথমবার ঠিক ছিল, যেহেতু (array + index)ইতিমধ্যে বস্তুর আকার (সি তে) বিবেচনা করা হয়।
ম্যাথু ফ্ল্যাশেন

4
@ সাইবারস্কুল, উত্তরটি সিনট্যাকটিকের সমতুল্য দিচ্ছিল array[index], এবং এটি *(array+index)। আপনি যদি এটি দেখতে চান যে সংকলকটি অভ্যন্তরীণভাবে কীভাবে কাজ করে, আপনি স্পষ্টভাবে বাইট সম্পর্কে কথা বলতে পারেন বা সমাবেশটি দিতে পারেন।
ম্যাথু ফ্ল্যাশেন

24

জ্ঞানের সাধারণ কম্পিউটার প্রোগ্রামিং বডিটিতে পয়েন্টারগুলির ধারণাটি গুরুত্বপূর্ণ। ধারণাটি উপলব্ধি করা কোনও ভাষার প্রোগ্রামার বা প্রোগ্রামারদের পক্ষে ভাল, যদিও ভাষাটি সরাসরি সমর্থন করে না।

পয়েন্টারগুলির ডেটা স্ট্রাকচার (লিঙ্কযুক্ত তালিকাগুলি) এবং ডেটাবেস ডিজাইন (বিদেশী কী) তে তাদের ব্যবহার রয়েছে।

ভিবি এবং সি # এর মতো ভাষা পদ্ধতিগুলিতে "রেফারেন্স" দিয়ে ডেটা পাস করতে পারে, যা এক ধরণের পয়েন্টার হিসাবে ভাবা যেতে পারে।

অ্যালগরিদমের দক্ষতার জন্য মেমোরিতে কোথায় ডেটা বরাদ্দ করা হয়েছে তা বোঝা (স্ট্যাক বনাম হিপ) এখনও গুরুত্বপূর্ণ।

আমার মতে বেসিকগুলি সঠিকভাবে শেখা গুরুত্বপূর্ণ।


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

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

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

@ বিলিওনিয়েল পয়েন্টারগুলি প্রায় অর্ধেক কোর্স ছিল, সত্যই, আমি এখনও কোনও প্রোগ্রামার হিসাবে (স্মার্ট) পয়েন্টারগুলির ব্যবহারিক ব্যবহার খুঁজে পাইনি, তবে আমি মেনে নিয়েছি যে আমি যে কোনও কাজই করেছি না কেন মেমরির উপরে সরাসরি নিয়ন্ত্রণের প্রয়োজন ছিল না। অবশ্যই কোর্সটি খারাপভাবে পড়ানো হতে পারে এমন সম্ভাবনা অবশ্যই আছে, এটি আমার প্রিয় ছিল না।
বেন ব্রোকা

1
@ সিরট্যাপট্যাপ: ব্যবহারিক ব্যবহার: এসটিএলে প্রতিটি সংগ্রহ এবং অ্যালগরিদম। std::sort, std::partition, std::find, ইত্যাদি তারা পয়েন্টার সাথে কাজ, এবং তারা যে বস্তু মত পয়েন্টার (iterators) আইন সঙ্গে কাজ করে। এবং তারা যে কোনও সাধারণ সংগ্রহের উপর কাজ করে; লিঙ্কযুক্ত তালিকাগুলি, গতিশীল অ্যারে, dequeগুলি, গাছ বা অন্য কোনও ধরণের ব্যবহারকারীর সংজ্ঞায়িত সংগ্রহ। আপনি পয়েন্টার ছাড়াই এ জাতীয় বিমূর্ততা পারেন না।
বিলি ওনিল

19

হ্যাঁ, হ্যাঁ, হ্যাঁ, হ্যাঁ এবং হ্যাঁ !!!

আপনি যদি বেসিকগুলি জানেন না তবে আপনি আপনার পথে আসা সত্যিই কঠিন, অদ্ভুত, কঠিন এবং জটিল সমস্যাগুলি সমাধান করতে পারবেন না।

এবং আপনি যদি বেসিকগুলি সত্যিই ভালভাবে বুঝতে পারেন তবে আপনি কাজের বাজারে আরও বেশি বিপণনযোগ্য।


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

আপনি যতটা সম্ভব জানেন


তবে মূল বিষয়গুলি কী? সমাবেশ, বাইনারি কোড?
সাইবেরিয়ানগুই

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

4
@ ইডশা: না, আরও মৌলিক, অনেক প্রোগ্রামার আজকাল জানেন না যে ট্রানজিস্টর এবং লজিক গেটগুলি গু 'ওলে' চিপগুলিতে কীভাবে কাজ করে এবং তাদের অবশ্যই জানা উচিত ছিল যে ইলেক্ট্রনগুলি কীভাবে চলাচল করে এবং মিনিয়েচারের উপর কোয়ান্টাম অনিশ্চয়তার প্রভাব; আমি কোয়া্যাকস, লিপটন এবং বাইসনে শুরুও করি নি! এবং হিক্কস বাইসনের কণা!
মিথ্যা রায়ান

2
বুনিয়াদি .... জিনিসগুলি কীভাবে সংরক্ষণ করা হয় সেগুলির মতো জিনিস। বাইট, একটি শব্দ, কীভাবে স্বাক্ষরিত এবং স্বাক্ষরবিহীন কাজের মধ্যে পার্থক্য। পয়েন্টার কীভাবে কাজ করে। একটি চরিত্র কি। কীভাবে জিনিসগুলি ASCII এ কোড করা হয় (এবং এই দিনগুলি, ইউনিকোড)। কেবল সহজ স্ট্রাকচারগুলি ব্যবহার করে কীভাবে কোনও লিঙ্কযুক্ত তালিকা মেমরিতে তৈরি করা যায়। স্ট্রিংগুলি সত্যিই কীভাবে কাজ করে। এই ছোট জিনিস থেকে বড় জিনিস বৃদ্ধি।
দ্রুত_ এখন

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

18

হ্যাঁ, বোঝাপড়া গুরুত্বপূর্ণ।

কয়েক মাস আগে আমি সি # তে প্রোগ্রামিং করছিলাম এবং আমি একটি তালিকার একটি অনুলিপি তৈরি করতে চেয়েছিলাম। অবশ্যই আমি যা করেছি তা ছিল NewList = OldList;এবং পরে সংশোধন করা শুরু করেছিল NewList। যখন আমি উভয় তালিকাগুলি মুদ্রণ করার চেষ্টা করেছি, তখন সেগুলি উভয়ই একই NewListছিল , যেহেতু কেবল OldListঅনুলিপি ছিল না এবং অনুলিপি ছিল না, তাই আমি আসলে OldListসমস্ত বরাবরই পরিবর্তন করছিলাম । এইটিকে বের করে আনতে আমার খুব বেশি সময় লাগেনি, তবে আমার কিছু সহপাঠী তাড়াতাড়ি ছিল না এবং কেন এটি হচ্ছে তা ব্যাখ্যা করতে হয়েছিল।

উদাহরণ:

List<int> a = new List<int>();
a.Add(2);
a.Add(9);
a.Add(8);
a.Add(1);
List<int> b = new List<int>();
b = a; //Does not make a copy, b is just a synonym!
b.Sort();
for (int i = 0; i < a.Count; i++)
{
    Console.WriteLine("a: " + a[i] + " b: " + b[i]);
}

এবং অবশ্যই, ফলাফলটি এরকম:

a: 1 b: 1
a: 2 b: 2
a: 8 b: 8
a: 9 b: 9

এগুলি কীভাবে ব্যবহার করবেন তা জানা গুরুত্বপূর্ণ নয়, তবুও তাদের বোঝা অত্যন্ত গুরুত্বপূর্ণ!


2
পরিবর্তে কেন সেগুলি ব্যবহার করবেন এবং কখন তাদের ব্যবহার করবেন তা সবচেয়ে গুরুত্বপূর্ণ :)
নিকো

5
" NewListকেবলমাত্র একটি পয়েন্টার ছিল OldList" - হুবহু হতে, উভয়ই NewListএবং OldListকেবলমাত্র পয়েন্টার ছিল, একই Listঅবজেক্টের উল্লেখ করে ।
পিয়েটার তারেক

এটি বুঝতেও গুরুত্বপূর্ণ যে আপনি যে নতুন তালিকার জন্য তৈরি bকরেছেন সেটির আর কোনও উল্লেখ নেই এবং এটি এখন আবর্জনা।
টিএমএন

14

ধারণাটি পয়েন্টার করুন! = গাণিতিককে পয়েন্টার করুন! = সিনট্যাক্সের নির্দেশক

প্রথম বিষয়গুলি সর্বদা, যদি আপনার গভীর / অগভীর অনুলিপি বোঝার প্রয়োজন হয় (এবং আপনি করেন), রেফারেন্স দিয়ে পাস করুন / মান অনুসারে পাস করুন ইত্যাদি। অন্য দুটি বিষয় কেবল তখনই আপনার ভাষার দ্বি যাত্রা আপনাকে ব্যবহার করতে দেয়।


1
আজকাল আপনাকে কেবলমাত্র রেফারেন্সের প্রাথমিক ধারণাটি জানতে হবে, পয়েন্টার সিনট্যাক্স / গণিত নয়। আমি দিনের মধ্যে সি ফিরে পয়েন্টার (গাণিতিক এবং সিনট্যাক্স সহ) শিখেছি। আমি এখন যে ভাষাগুলিতে প্রোগ্রাম করি সেগুলি সি-স্টাইল পয়েন্টারগুলির সাথে মোকাবিলা করে না যা আপনাকে অনিরাপদ জিনিসগুলি করতে দেয়। ধারণা করা যায় কেন পাইথন মধ্যে a=[1,2]; b=a; a.append(3)উভয় যে aএবং bউভয় করতে যাচ্ছি রেফারেন্স একই বস্তুর [1,2,3]মত সি কাপড় জেনে iএকটি অ্যারের তম উপাদান দ্বারা সমর্থিত হতে পারে arr[i]বা i[arr]উভয় হয় *(arr+i)। আমি পছন্দ করি যখন ভাষাটি i[arr]ব্যবহার না করা হয়।
ডাঃ জিম্বোব

" অন্য দুটি বিষয় তখনই আপনার ভাষায় দ্বি ভ্রমণ আপনাকে সেগুলি ব্যবহার করতে দেয় " "- এই বাক্যটি তার নিজের স্ব-ধ্বংসকারীকে বহন করছে। ভাষা du যাত্রা সংজ্ঞা অনুসারে খুব সম্ভবত কাল ব্যবহৃত একই ভাষা হতে পারে। এবং আগামীকাল আপনি পয়েন্টার-সক্ষম ভাষা ব্যবহার করতে পারেন। শেষের সারি? একবারে এবং চিরকালের জন্য এখন এটি আরও ভালভাবে ধরে। এটি এত কঠিন নয়, তবে এটি মূল্যবান।
JensG

14

সি মাস্টার ডেনিস রিচি কেন সি তে পয়েন্টার চালু করলেন?

কারণ পয়েন্টারগুলি একটি অত্যন্ত শক্তিশালী প্রক্রিয়া যা বিভিন্ন উপায়ে ব্যবহার করা যেতে পারে।

এবং অন্যান্য প্রোগ্রামিং ভাষাগুলি যেমন ভিবি.এনইটি বা জাভা বা সি # তাদের এড়িয়ে গেল কেন?

কারণ পয়েন্টারগুলি একটি অত্যন্ত বিপজ্জনক প্রক্রিয়া যা বিভিন্ন উপায়ে ব্যবহার করা যেতে পারে।

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

পয়েন্টারগুলি কীসের জন্য ব্যবহৃত হয় তা এখানে একটি অসম্পূর্ণ তালিকা:

  • গতিশীল বরাদ্দ ( new T)
  • পুনরাবৃত্ত তথ্য স্ট্রাকচার ( struct T { T* next; /* ... */ };)
  • অ্যারেতে পুনরুক্তি ( for (T* p = &a[0]; p != &a[0] + n; ++p) { ... })
  • বস্তুগুলিতে শেয়ার অ্যাক্সেস ( T* new_pointer = existing_pointer;)
  • সাব টাইপ পলিমারফিজম ( T* pointer_to_base = pointer_to_derived;)
  • রেফারেন্স দ্বারা উত্তরাধিকার কল ( mutate(&object);)
  • alচ্ছিক প্রকারের ( if (p) { /* ... */ })

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


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

12

কেন? আপনি ফর্ম ডিজাইনার এবং কোড জেনারেটর সহ একটি বিশাল সিস্টেম লিখতে পারেন। তা কি যথেষ্ট নয়? (বিদ্রূপ)

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

এটি অবশ্যই আমি দেখতে চাই না।

হ্যাঁ, তাদের অবশ্যই আছে!


2
ভালো মেজাজ! +1 এবং সম্পূর্ণ সম্মত agree
হেলটনবাইকার

7

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

সি ++ এবং জাভাতে নিম্নলিখিতটি বিবেচনা করুন এবং আমার ধারণা এটি সি # তে খুব আলাদা নয়:
aClass *x = new aClass();
aClass x = new aClass();
পয়েন্টার এবং রেফারেন্সের মধ্যে খুব বেশি পার্থক্য নেই ঠিক, তাই না?
পয়েন্টার গাণিতিকগুলি প্রয়োজনীয় না হলে এবং উচ্চ স্তরের মডেলগুলির সাথে প্রোগ্রামিং করা এড়ানো উচিত, সুতরাং সেখানে খুব বেশি সমস্যা নেই।


6

পেশাদার প্রোগ্রামার পয়েন্টার মাস্টার উচিত।

যে সমস্ত লোকেরা প্রোগ্রামিং জানতে চায় তাদের অবশ্যই এর উপস্থিতি এবং এর প্রভাবগুলি সম্পর্কে শিখতে হবে, তবে অগত্যা সেগুলি ব্যবহার করা উচিত নয়।

যে সমস্ত লোকেরা ব্যক্তিগত সমস্যাগুলি প্রোগ্রামিংয়ের মাধ্যমে সমাধান করতে চান (আমার মতো, যারা প্রচুর পাইথন স্ক্রিপ্ট ব্যবহার করেন) তারা এগুলি একেবারেই উপেক্ষা করতে পারেন।

ঠিক আছে, এটা আমার মতামত ...; ও)


3

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


3

আপত্তিজনকভাবে হ্যাঁ ! যাঁরা প্রোগ্রাম করেন তাদের প্রত্যেককে পয়েন্টার এবং ইন্ডিরিয়েশন বুঝতে হবে।

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

বুঝুন কিভাবে পয়েন্টার কাজ মৌলিক কিভাবে কম্পিউটারের আসলে কাজ বোঝার। পয়েন্টারগুলি উল্লেখগুলির চেয়ে আরও নমনীয় এবং শক্তিশালী are

উদাহরণস্বরূপ, সূচকের শূন্যে অ্যারে শুরু করার কারণটি হ'ল অ্যারেগুলি পয়েন্টার গাণিতিকের জন্য সংক্ষিপ্ততর। পয়েন্টার কীভাবে কাজ করে সে সম্পর্কে না শিখতে, অনেক শুরুর প্রগ্রেমার যথেষ্ট অ্যারে পান না।

int a, foo[10];
foo[2] = a;

পয়েন্টার গাণিতিকের লাইন 2 হবে:

*(foo + sizeof(int) * 2) = a;

পয়েন্টার না বুঝে, কেউ মেমরি পরিচালনা, স্ট্যাক, হিপ বা এমনকি অ্যারে বুঝতে পারে না! অতিরিক্তভাবে, কীভাবে ফাংশন এবং অবজেক্টগুলি পাস হয় তা বোঝার জন্য একজনকে পয়েন্টারগুলি এবং ডেরেফারেন্সিং বুঝতে হবে।

টিএল: ডিআর : কম্পিউটারগুলি বোঝার জন্য পয়েন্টার বোঝা মূলত কাজ করে


2

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

পয়েন্টারগুলির সাথে ম্যানুয়ালি व्यवहार করা ত্রুটি-প্রবণ হতে পারে (মেমরি ফাঁস এবং শোষক কোডের দিকে পরিচালিত করে) এবং সঠিক পেতে সময় সাপেক্ষ। সুতরাং জাভা এবং সি # ইত্যাদি সমস্ত এখন আপনার ভার্চুয়াল মেশিনগুলির (ভিএম) এর মাধ্যমে আপনার স্মৃতি এবং আপনার পয়েন্টার পরিচালনা করে। এটি কাঁচা সি / সি ++ ব্যবহার করার চেয়ে কম দক্ষ, যদিও ভিএমগুলি ক্রমাগত উন্নতি করে চলেছে।

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

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


0

এটি উদ্দেশ্যমূলক সত্য:

কিছু ভাষা সরাসরি মেমরি অ্যাক্সেস (পয়েন্টার) সমর্থন করে, কিছু না। প্রতিটি মামলার ভাল কারণ রয়েছে।

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

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

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

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

  5. জ্ঞান হিসাবে। আমি মনে করি এটি প্রশংসনীয় যে প্রোগ্রামাররা জানেন যে তারা যে পরিবেশে পরিবেশিত সেগুলি পরিবেশিত হয়। ক্ষুদ্রতম বিবরণে অগত্যা নয়, তবে বড় ছবি।

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

  1. আমি এটি যেভাবে দেখছি, যদি আপনাকে যা যা করতে বলা হয় তা যদি জাভা বা সি # তে কোনও অ্যাপ্লিকেশন তৈরি করে বা সে জাতীয় কিছু করে তোলে, তবে আপনার সঠিক নকশা এবং বাস্তবায়ন কৌশলগুলিতে ফোকাস করা দরকার। টেস্টেবল কোড, ক্লিন কোড, নমনীয় কোড। সেই জন্য.

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

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

নিম্ন স্তরের জ্ঞান একটি বোনাস। এটি ডিবাগিং এবং মাঝে মাঝে কিছুটা আরও ভাল সমাধান তৈরি করার পক্ষে ভাল good এটি পেশাদারভাবে আপনাকে একটি আকর্ষণীয় ব্যক্তি করে তোলে। এটি আপনার কর্মক্ষেত্রে আপনাকে কিছুটা সম্মান দেয়।

তবে আজকের বিশ্বে এর কোনও পবিত্র প্রয়োজন নেই।


-1

উচ্চ স্তরের ওও ভাষাগুলির বেশিরভাগ ব্যবহারিক কাজের জন্য রেফারেন্সগুলি বোঝার জন্য যথেষ্ট, আপনি কীভাবে এই ভাষাগুলি পয়েন্টারগুলির ক্ষেত্রে রেফারেন্সগুলি প্রয়োগ করে তা সত্যই বুঝতে হবে না।

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

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

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


-1

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

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

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


কিছু ডেটা সেন্টার সি ধারণার চেয়ে আজকের মোবাইল অ্যাপ্লিকেশনে আরও মেমরি উপলব্ধ memory অনেকগুলি মোবাইল অ্যাপ্লিকেশন জাভাতে লেখা হয়, বা সরাসরি এইচটিএমএল + জাভাস্ক্রিপ্টে লেখা হয়, সমস্ত পয়েন্টার ছাড়াই (অবশ্যই রেফারেন্স থাকে)। খুব বিশেষীকৃত প্রোগ্রামারগুলির মধ্যে কেবলমাত্র একটি ক্ষুদ্র ভগ্নাংশ অন্তর্নিহিত ওএস স্তরগুলি দেখতে পাবে।
জর্জেন স্ট্রোবেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.