সি থেকে এমন নীতিগুলি কী শিখেছে যা উচ্চ স্তরের ভাষাগুলিতে শেখা যায় না? [বন্ধ]


11

আমি বিশ্বাস করি প্রোগ্রামিংয়ের পিছনে নীতিগুলি শিখতে সি একটি ভাল ভাষা। আপনি নিম্ন স্তরের ভাষাগুলিতে কী শিখতে দাঁড়ান যা রুবি যেমন উচ্চ স্তরের ভাষা থেকে দূরে থাকে?


2
আপনি যাহোক যাইহোক ম্যাজিক বা এর কিছু শিখতে পারেন। যেহেতু সি "ধাতবটির নিকটতম", আপনি ধাতুটি সম্পর্কে আরও শিখতে পারেন।
রবার্ট হার্ভে

1
আমি সি ++ এর মুখোমুখি না হওয়া পর্যন্ত রেফারেন্সের ধারণাটি পুরোপুরি কখনই বুঝতে পারি নি।
ব্যবহারকারী 6245072

6
সি আপনাকে শেখাবে যে স্ট্যাকের ওভারফ্লো আসলে কী। কঠিন পথে.
ডেভিড 25272

1
আমি আশা করি নতুন প্রোগ্রামারগুলি ভাল পুরানো পাস্কাল এবং কাঠামোগত প্রোগ্রামিং শিখতে শুরু করবে। আপনি নিজেকে যুক্তিযুক্ত এবং কাঠামোগত প্রকাশ করতে শিখেন।
বেন্ট করুন

2
কেবলমাত্র সি এবং সি ++ আপনাকে এমন কিছু শেখায় যে সংকলকটি আপনার নিকৃষ্টতম শত্রু।
কোডসইনচওস

উত্তর:


9

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

সি পার্থক্যটি উচ্চ স্তরের ভাষাগুলি গঠন করে যা মেশিন কোড সি থেকে পৃথক করে: মেশিনের কোডের সাথে সম্পর্ক।

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

সি তে, মেমরির সাথে আপনার প্রোগ্রামটির মিথস্ক্রিয়াটি সামনের দিকে অনুষ্ঠিত হয়। এটি আপনাকে কেবল স্তূপের ব্যবহার পরিচালনা করতে হবে তার চেয়েও বেশি এটি এতে স্ট্যাকের সাথে আপনার কোডের মিথস্ক্রিয়াকে অন্তর্ভুক্ত করে এবং কীভাবে আপনার কোডটির কেবল মেমরির অ্যাক্সেস আপনার কোডের আচরণ এবং কার্য সম্পাদনকে প্রভাবিত করে - এমনকি মেমরি অ্যাক্সেসের ক্রমও নয় not আপনার দৃষ্টি এড়ানোর অনুমতি দেওয়া যেতে পারে, কারণ ভুল সময়ে ভুল মেমরিটি কার্যকরভাবে কার্যকরভাবে পঙ্গু করতে পারে।

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

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


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

3
@ রবার্টহারভে আমার বক্তব্যটি এতক্ষণ যে কোনও ভাষার পক্ষে ন্যূনতম ন্যূনতম গণনার সামর্থ্য থাকে, ততক্ষণ তার "স্তর" অ্যালগরিদমের দৃষ্টিকোণ থেকে অপ্রাসঙ্গিক হয়ে ওঠে, যা এই প্রসঙ্গে কেবল বিষয়গুলিই গুরুত্বপূর্ণ।
গ্রেফ্যাড

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

2
<irony> জীববিজ্ঞান কেবল রসায়নের একটি বিশেষ কেস, যা কণা পদার্থবিজ্ঞানের একটি বিশেষ ক্ষেত্রে। কণা পদার্থবিজ্ঞান জানলে আপনি জীববিজ্ঞান থেকে শিখতে পারবেন না। ? রাইট </ বিদ্রূপ>
ফ্লোরিয়ান এফ

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

13

আমি জানি সি প্রোগ্রামিংয়ের পিছনে নীতিগুলি শিখার জন্য একটি ভাল ভাষা।

আমি একমত নই সি প্রোগ্রামিংয়ের পিছনে নীতিগুলি শিখতে অনেকগুলি বৈশিষ্ট্য অনুপস্থিত। বিমূর্ততা তৈরির জন্য সি এর বৈশিষ্ট্যগুলি ভয়ানক, এবং বিমূর্ততা প্রোগ্রামিংয়ের পিছনে অন্যতম মূল নীতি।

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

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


12
সি বিমূর্ততা তৈরি করতে ঠিক আছে। আপনি সিতে পদ্ধতি লিখতে পারেন এবং সিতে কাঠামোগত হিসাবে আপনি ডেটা প্যাকেজ করতে পারেন সি ব্যবহার করে সম্পূর্ণ অপারেটিং সিস্টেমগুলি তৈরি করা হয়েছে যা সি ভাল নয় তা প্রত্যেকের "আধুনিক" ধারণাটি সন্তুষ্ট করছে যা অবজেক্ট-অরিয়েন্টেশনটি দেখার জন্য বিবেচিত হয় মত।
রবার্ট হার্ভে

4
বেশ না। সিএম এএসএমের চেয়ে বেশ খানিকটা উঁচু স্তর। এটিতে ক্লাস ব্যবহার করার আশা কেবল করবেন না, যদিও এমন করার উপায় আছে , যদি আপনি খুব ঝোঁক হন।
রবার্ট হার্ভে

4
আপনার মন্তব্যে "একত্রিতকারী" এর জন্য "ব্রেনফাক" কে বিকল্প দিন এবং এটি এখনও সত্য হওয়া উচিত। তবে এর অর্থ এই নয় যে আমি খুব শীঘ্রই যে কোনও সময় ব্রেইনফাক ব্যবহার করব।
রবার্ট হার্ভে

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

5
@ রবার্ট, আমার যুক্তিটি হল সি একটি নিম্ন স্তরের ভাষা এবং এর মতো প্রোগ্রামিংয়ের নীতিগুলি বোঝার পক্ষে এটি খুব কমই সেরা ভাষা, যা আমরা এসেম্বলারের বিষয়েও বলতে পারি, এবং কেবলমাত্র সেগুলি নিম্ন স্তরের ভাষাগুলির অর্থ এই নয় doesn't তারা কোনওভাবে প্রোগ্রামিংয়ের "সত্য" নীতিগুলির নিকটবর্তী হয়। এই ভাষাগুলি হার্ডওয়্যার এবং অপারেটিং সিস্টেমগুলি কীভাবে কাজ করে তা বোঝার পরিবর্তে আরও ভাল and অন্যথায়, অনেকগুলি ভাষা চয়ন করতে হবে।
এরিক tদ

8

সি এবং (বিমূর্ত) মেশিন

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

সি উপরের নিয়মের ব্যতিক্রম নয়। এটি একটি বিমূর্ত মেশিনের ক্ষেত্রে বর্ণিত হয়েছে যা আপনার প্রকৃত হার্ডওয়্যার সম্পর্কে কোনও ধারণা নেই।

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

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

কিভাবে কি আপনি শিখতে? এবং কিভাবে কি আপনি শেখে?

ঠিক আছে, আসলে হার্ডওয়্যার সম্পর্কে শেখার সাথে সি ব্যতীত অন্যান্য জিনিস জড়িত তবে সি আজ প্রোগ্রামারদের কি অন্য কিছু শেখাতে পারে?

আমি মনে করি এটি নির্ভর করে।

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

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

আমি কিছুটা বিশ্বাস করতে চাইছি যে শেষ পর্যন্ত আপনার দুটি বিকল্পই প্রয়োগ করা উচিত, আমি যেভাবে বর্ণনা করেছি সেভাবে looseিলে .ালাভাবেই। তবে আমি মনে করি না এটি সত্যিই কোনও প্রযুক্তিগত বিষয়, আমি মনে করি এটি বেশিরভাগ শিক্ষামূলক। প্রতিটি ব্যক্তি উল্লেখযোগ্যভাবে বিভিন্ন উপায়ে শিখতে বলে মনে হচ্ছে।

একচেটিয়াভাবে সি

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

তবে, আপনার উত্তর নির্বিশেষে, অবশ্যই কয়েকটি জিনিস রয়েছে যা আপনি সি থেকে প্রায় একচেটিয়াভাবে শিখতে পারেন (এবং সম্ভবত অন্যান্য কয়েকটি ভাষাও)।

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

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

  • সি আপনাকে শিখিয়ে দিতে পারে যে প্রতিটি বস্তুর স্টোরেজ প্রয়োজনীয়তা, একটি মেমরি লেআউট, সীমাবদ্ধ ঠিকানা জায়গার মাধ্যমে মেমরিটি অ্যাক্সেস করা যায় এমন সত্য fact যদিও অন্যান্য ভাষাগুলি এই বিষয়গুলিতে আপনার মনোযোগের প্রয়োজন নেই, তবে কয়েকটি ক্ষেত্রে এমন কিছু ঘটনা রয়েছে যেখানে কিছু অর্জিত অন্তর্দৃষ্টি আপনাকে আরও জ্ঞাত সিদ্ধান্ত নিতে সহায়তা করতে পারে।

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

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

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


5

সি শেখার জন্য ভাল কারণ এটি কোনও নীতি শেখায় না । এটি আপনাকে শেখায়, কীভাবে জিনিসগুলি কাজ করে

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

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

আপনি যখন সি তে প্রোগ্রামিং শিখেন, আপনি কম্পিউটারের তৈরি অনেক স্ক্রু এবং বাদামের সংস্পর্শে আসেন। এটি আপনাকে নিজেই মেশিনের বোঝার বিকাশ করতে দেয়। উদাহরণস্বরূপ, এটি আপনাকে বুঝতে দেয় যে কেন এটির মতো দীর্ঘ স্ট্রিং তৈরি করা ভাল ধারণা নয়:

java.lang.String result = "";
for(int i = 0; i < components.size; i++) {
     result = result + components[i];
};

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


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

1
আপনার উত্তর অবশ্যই ঠিক আছে, তবে আপনি যদি for(int i = 0; i < strlen(s); i++)সিটিতে লিখেন তবে লুপটিতেও চতুর্ভুজ সংক্রান্ত জটিলতা থাকবে এবং এটি আপনার জাভা উদাহরণের মতোই অস্পষ্ট; ;)
ডক ব্রাউন

নিশ্চিত নয়, তবে জাভা সংকলককে এটি অপ্টিমাইজ করার জন্য আমি বিশ্বাস করব :-)
ব্রুনো শ্পিপার

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

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

2

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

  • ব্যতিক্রমগুলির অভাবে সম্পূর্ণ ত্রুটি পরিচালনা সহ প্রোগ্রামগুলি কীভাবে তৈরি করবেন

  • অবজেক্ট অরিয়েন্টেশনের জন্য কোনও ভাষা সমর্থন না করে কোনও প্রোগ্রামে কীভাবে কাঠামো তৈরি করা যায়

  • গতিশীল আকারের তালিকা, অভিধান বা একটি দরকারী স্ট্রিং বিমূর্তকরণের মতো ডেটা স্ট্রাকচারের অভাবে কীভাবে ডেটা মোকাবেলা করতে হয়

  • সংকলক বা রান টাইম এনভায়রনমেন্ট আপনাকে স্বয়ংক্রিয়ভাবে সতর্ক করে না এমন সময়ে কীভাবে অ্যারে ওভারফ্লোসের মতো সাধারণ ত্রুটিগুলি এড়ানো যায়

  • টেমপ্লেট বা জেনেরিকের ভাষা সমর্থন না করে জেনেরিক সমাধান কীভাবে তৈরি করা যায়

  • এবং আমি কী উল্লেখ করেছি যে আপনি অবশ্যই নিজের দ্বারা মেমরি পরিচালনা করতে শিখতে পারেন? ;-)

তদুপরি, সি শিখার মাধ্যমে আপনি শিখবেন যে সি ++, জাভা, সি #, অবজেক্টিভ সি এর সিনট্যাক্টিকাল সাধারণতা এসেছে।

2005 সালে, জোয়েল স্পলস্কি অন্য কোন উচ্চ স্তরের ভাষার আগে সি শেখার জন্য একটি প্রস্তাবনা লিখেছিলেন । তার যুক্তিগুলো হ'ল

  • "আপনি কখনও উচ্চ স্তরের ভাষাগুলিতে দক্ষ কোড তৈরি করতে পারবেন না।"

  • "আপনি কখনই সংকলক এবং অপারেটিং সিস্টেমগুলিতে কাজ করতে সক্ষম হবেন না, যা প্রায় সেরা প্রোগ্রামিং কাজ are"

  • "বড় আকারের প্রকল্পগুলির জন্য আর্কিটেকচার তৈরি করার জন্য আপনাকে কখনই বিশ্বাস করা যায় না"

  • "যদি আপনি ব্যাখ্যা করতে না পারেন কেন while(*s++ = *t++);একটি স্ট্রিং অনুলিপি করে, বা যদি এটি পৃথিবীর সবচেয়ে প্রাকৃতিক জিনিস না হয় তবে ভাল, আপনি কুসংস্কারের ভিত্তিতে প্রোগ্রামিং করছেন

অবশ্যই তিনি যা লিখেছেন তা অবশ্যই বিতর্কিত, তবে আইএমএইচও তাঁর প্রচুর যুক্তি আজও বৈধ।


1
সেই "উচ্চ স্তরের জিনিসগুলি যা আপনি মনে করেন সি সমর্থন করে না" শেখার আগে সি একটি খুব ভাল ভাষা শেখার কারণ এটি আপনাকে বুঝতে সাহায্য করে যে এই জিনিসগুলি আসলে কীভাবে কাজ করে (এবং সেগুলি কত দামি)।
ব্রেন্ডন

@ ব্রেন্ডন: আমি নিশ্চিত নই যে আপনার মন্তব্যের উদ্দেশ্যটি যদি আমার উত্তরটির কোনও চুক্তি, মতবিরোধ বা কেবল একটি দ্বিখাতকে প্রকাশ করে?
ডক ব্রাউন

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

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

1

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

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

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


1
সুতরাং, উচ্চতর স্তরের ভাষা যেগুলি করতে পারে না সি আপনাকে কী শিক্ষা দিতে পারে?
ফিলিপ কেন্ডাল

2
আমি মনে করি যে অন্তর্নিহিত উত্তরটি হ'ল: " কিছুই নয় , কমপক্ষে এমন কিছু নয় যা সাধারণত সমর্থকরা দাবী করে"। উত্তরটি আমি যেভাবেই বুঝতে পারি।
Jörg ডব্লু মিট্টাগ

-3

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

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