নিম্ন স্তরের প্রোগ্রামিং - এতে আমার কী আছে? [বন্ধ]


32

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

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

আমার অবস্থান

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

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

ভাল ব্যবহারযোগ্যতা অর্জনের জন্য, আমি বিশ্বাস করি যে নিম্নলিখিত জিনিসগুলি व्यवहार्य

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

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

আমার প্রশ্ন

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

আমার উপসংহার

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


6
@ দ্য এলকিউ: আমার প্রশ্ন এটি কেন ব্যবহার করছে তা নয়, তবে আমি এর থেকে কী শিখতে পারি
back2dos


উত্তর:


9

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

এটিকে হাইকাস বা লিমেরিক্স হিসাবে ভাবেন, যেখানে বিধিনিষেধগুলি এটিকে আকর্ষণীয় করে তুলেছে।

আজকে যা অসম্ভব বলে মনে হচ্ছে তার মধ্যে কী কী সম্ভব তার একটি ধারণা দিতে, এখানে এখন পর্যন্ত অন্যতম সেরা হ্যাক। 1 কেবি র‌্যামে দাবা! http://users.ox.ac.uk/~uzdm0006/scans/1kchess/


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

ডাউনভোটার, দয়া করে কেন বলবেন?

29

আমি সম্প্রতি এই চিন্তা ছিল। আমি বর্তমানে নিজেকে সি # বিকাশকারী হিসাবে বিবেচনা করব - যা আমার ক্যারিয়ারের জন্য পুরোপুরি ঠিক।

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

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

পুরানো ভাষা ব্যবহার করে, আমি মনে করি আপনি নিজেকে বেশ কিছু করতে বাধ্য করেছেন। সি # তে আমি এর মতো কিছু করতে পারি myArray.SortBy(x=>x.Name)। আমি সি তে কোনওভাবেই সক্ষম হব না আমি গ্রহণ করছি যে ভাষাটি আমার পক্ষে সবচেয়ে ভাল বাছাই করবে। যদি আমি এটি সি তে করি, আমি আমার বিশ্ববিদ্যালয় মডিউলগুলির দিনগুলিতে ফিরে যেতে এবং আমার বিভিন্ন ধরণের এবং সংশোধন অ্যালগরিদমগুলিকে সংশোধন করতে সক্ষম হব।

সুতরাং, আমি মনে করি নিম্ন স্তরের ভাষাগুলি আপনাকে বিস্মৃত বিট বিটগুলির কোনওটি সংশোধন করতে সহায়তা করবে যা সমস্ত বিমূর্ত হয়ে গেছে। ক্যারিয়ারের অগ্রগতির চেয়ে ব্যক্তিগত চ্যালেঞ্জের বেশি।


15
হার্ডওয়ারে হাঁসফাঁস করার প্রেমের জন্য এবং কী টুইচগুলি দেখার জন্য +1 - সত্যিকারের গিরি
গ্যারি রোয়ে

2
আপনি চাইলে আপনি সি # তে বাছাই ফাংশনটি নিজে লিখতে পারেন। আপনি চাইলে সিতে বাছাই করার জন্য লাইব্রেরির ফাংশনটিও ব্যবহার করতে পারেন: gnu.org/s/libc/manual/html_node/Array-Sort-Function.html। আমি এমনকি পুরানো ভাষাগুলি ব্যবহার করে বলব, আপনাকে নিজেরাই কম জিনিস করতে হবে। কারণ বেশিরভাগ সমস্যা ইতিমধ্যে সমাধান করা হয়েছে। এটি কোনওভাবেই চাকাটিকে পুনরায় স্থাপন করতে বাধা দেয় না:
ব্যাক 2 ডস

15

আমার পরামর্শটি বুদ্ধিদীপ্ত কৌতূহল হিসাবে সি নিয়ে ঘুরে বেড়াতে। ভারী সময় বিনিয়োগ করবেন না কারণ এটি উপযুক্ত নয়।

প্রস্তাবিত লক্ষ্য:

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

8

আপনি যদি মেশিনটি কীভাবে কাজ করে তা বুঝতে চান , এবং কেবল ভার্চুয়াল মেশিনই নয় যার উপর আপনার উচ্চ স্তরের ভাষা নির্ভর করে, তবে এসেম্বলি আপনাকে এটি শিখিয়ে দেবে

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

এটি আপনার ভিত্তি উন্নত করবে, তবে এটি সম্ভবত আপনার ওয়েব অ্যাপ্লিকেশনগুলিকে উন্নত করবে না


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

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

1
@ জর্জি: আকর্ষণীয়। এবং এই সিপিইউগুলির মধ্যে কতটি সক্রিয় বাণিজ্যিক ব্যবহারে রয়েছে, তুলনা করুন, ইনটেল x86 বা 6502?
স্টিভেন এ লো।

1
@ জার্গ, আপনি এই সিপিইউ কোথায় পাবেন?

1
@ থোর: গতি এখানে প্রশ্ন নয়, শিক্ষা।
স্টিভেন এ লো।

8

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


2
প্রতিটি ভাষা আপনার চিন্তাভাবনা কীভাবে পরিবর্তিত হয় তার ধারণার জন্য +1।
শান

7

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


1
গিক মজাদার জন্য +1। যদিও আমি অবশ্যই বলতে পারি, আমি খুব গীক না। এবং আমি হার্ডওয়্যারকে ঘৃণা করি :)
back2dos

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

ডেভিড: আমি গড় রুটি এবং মাখন ওয়েব অ্যাপ্লিকেশনগুলির জন্য সম্পূর্ণ সম্মত agg অন্যান্য ডোমেনে, পার্থক্যটি খুব প্রাসঙ্গিক হতে পারে।
ব্যবহারকারী 281377

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

2
যথেষ্ট মেমরি দেওয়া জাভা সি এর চেয়ে দ্রুত বা দ্রুত

5

কৌতুহলের জন্য হুররে!

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

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

তারপরের সর্বোত্তম জিনিস: একটি সিপিইউ সিমুলেটারের খেলনা (এমুলেটর? আমি এই শর্তগুলি মিশ্রিত করি) - এগুলি Z80, 6502, 8086 ... সমস্ত পুরানো 8 বিটারের জন্য বিদ্যমান। এটি কোনও অ্যাপ্লিকেশন প্রোগ্রামারের পক্ষে সর্বাধিক শিক্ষামূলক এবং মজাদার হতে পারে যারা সোল্ডারিং আয়রনের কোন প্রান্তটি ধরে রাখতে হবে তা জানেন না (যদিও কেউ তা শিখেন যে খুব দ্রুত :) ভিডিও মেমরিতে কীভাবে পাঠ্য লেখা হয়, কীভাবে সমাবেশের কোড কৌশলগুলি পারফরম্যান্সে সহায়তা করে। .. এই স্তরে এক্সপ্লোর করার জন্য প্রচুর মজাদার জিনিস রয়েছে।

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


+1 কারণ এটিই ছিল একমাত্র উত্তর যা পয়েন্টারগুলিকে উল্লেখ করেছিল। আমি ভেবেছিলাম যে এটি # 1 হবে এবং গৃহীত উত্তর হবে।
এরিক

4

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

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


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

ট্রানজিস্টর এবং লজিক চিপস থেকে নিজস্ব সিপিইউ তৈরি করে যে কোনও এইরকম আন্ডার-হুড রহস্য এড়াতে পারে: ডি (আমার প্রিয় প্রযুক্তিগত কল্পনাগুলির মধ্যে একটি!) যাইহোক একটি দুর্দান্ত উত্তরের জন্য +1।
DarenW

ন্যায্য বিন্দু! যদিও আমি যখন সর্বশেষে এসেম্বলারের হাইপারথ্রেডিং ব্যবহার করতাম তখন সম্ভবত সাধারণত সিপিইউর পরিবর্তে দ্রুত সেলাইয়ের উল্লেখ করা হত ...
ড্যান ও

2

নিম্ন স্তরের প্রোগ্রামিং শেখার / অনুশীলনের কোনও ভাল কারণ আছে কি? প্রসঙ্গের উপর নির্ভর করে আমার কাছে বিভিন্ন উত্তর রয়েছে।

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

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

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

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


1

আমি বলব আপনার ডোমেনে খুব বেশি কারণ নেই, তবে যদি আপনি উচ্চ পারফরম্যান্সের কম্পিউটিং (যেমন গেমিং, বিজ্ঞান ইত্যাদি) করেন তবে এটি ন্যায়সঙ্গত হবে।


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

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

1

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

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

1) নোংরা স্মৃতি কৌশল। সি বোঝার সেরা উপায় যে প্রোগ্রামারদের উন্মাদনায় কোনও নীচে নেই :)

2) গোটগুলি আসলে ত্রুটিগুলি রোলব্যাক করতে ব্যবহৃত হয় (এবং দরকারী)

3) মেমরি বরাদ্দ কীভাবে কার্যকরী হয় (কীভাবে স্তূপ এবং স্ট্যাকের মধ্যে পার্থক্য?) আরও ভালভাবে শিখুন।

সুতরাং মূলত আমার থিসিসটি হ'ল: যদি আপনি ইতিমধ্যে বিশ্ববিদ্যালয় শেষ করেছেন এবং এখনও সি না প্রয়োজন, এটি শেখার চেয়ে নয় :)


2
নিম্ন স্তরে জিনিসগুলি কীভাবে কাজ করে তা জানার জন্য সি জেনে রাখা আপনার যখন ফুটো বিমূর্ততা থাকে তখন জিনিস কেন ভুল হয় তা বুঝতে সহায়তা করতে পারে।
মাইকেল শ

1

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

নিম্ন স্তরের ধারণার কয়েকটি উদাহরণ এখানে উচ্চ স্তরের ভাষাগুলিকে প্রভাবিত করতে পারে।

পয়েন্টার:

List<object> listOne = new List<object>();
List<object> listTwo = listOne;

listTwo.Add(new object());

Debug.WriteLine(listOne.Count); //do you know what this will be?

স্ট্রিংস:

string initial = "initial";
string another = initial;

another = "changed!";
Debug.WriteLine(initial); //what about this?

তালিকাসমূহ:

আপনি কখন একটি লিঙ্কযুক্ত তালিকা বনাম একটি তালিকা ব্যবহার করবেন? (কোনও তালিকা কীভাবে কাজ করে তার এক নিচু স্তরে বুঝতে না পেরে এটি জানা প্রায় অসম্ভব)

-

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


1

নিম্ন স্তরের প্রোগ্রামিং আমাকে কী শিখিয়ে দিতে পারে, অন্য কোন ভাষা আমাকে শেখায় না?

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

অবশ্যই নিম্ন স্তরের প্রোগ্রামিং আপনাকে সম্পূর্ণ আলাদা জিনিস যেমন এমবেডেড প্রোগ্রামিং এবং রিয়েলটাইম প্রোগ্রামিংয়ের সাথে কাজ করতে সক্ষম করবে যেখানে asm / C / C ++ আবশ্যক। আপনি যদি এই ধরণের অ্যাপ্লিকেশনগুলিতে আগ্রহী না হন তবে অবশ্যই asm / C / C ++ শেখার দরকার নেই।

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

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