সিস্টেমগুলির জটিলতা বৃদ্ধির ফলে প্রোগ্রামারদের ক্রমাগত প্রজন্ম কীভাবে প্রভাবিত হয়েছে?


127

একজন "নতুন" প্রোগ্রামার হিসাবে (আমি প্রথমে ২০০৯ সালে কোডের একটি লাইন লিখেছিলাম), আমি লক্ষ্য করেছি যে একটি প্রোগ্রাম তৈরি করা তুলনামূলকভাবে সহজ যা উদাহরণস্বরূপ NET ফ্রেমওয়ার্কের মতো জিনিসগুলির সাথে আজ বেশ জটিল উপাদানগুলিকে প্রদর্শন করে। ভিজ্যুয়াল ইন্টারফেস তৈরি করা বা তালিকা বাছাই করা এখন খুব কম কমান্ড দিয়ে করা যেতে পারে।

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

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

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


24
2002 এর জোয়েল স্পলস্কির নিবন্ধটি প্রাসঙ্গিক: joelonsoftware.com/articles/LeakyAbstferences.html শব্দগুচ্ছ / রচনা অনুসারে, এই প্রশ্নটি মূলত মতামত ভিত্তিক বিবেচিত হতে পারে।
ব্রায়ানএইচ

আমি খুব বেসিক প্রোগ্রামিং কৌশলগুলি অন্বেষণের জন্য আরও সহজ বিকল্পগুলির অভাবকে শোক করি।
গ্র্যান্ডমাস্টারবি

1
এটি প্রাসঙ্গিক। প্রকার, রকম. (আমার অর্থ, আমি আশা করি যে চিত্রটি একটি রসিকতা, তবে স্ট্যাকওভারফ্লোতে যা ঘটে তার সাথে কিছুটা ...)
ইজকাটা

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

1
40/50 বছরের টাইমস্কেলটি ভুল। স্মৃতি দক্ষ প্রোগ্রামিং এখনও 16 বিট উইন্ডোজ (কম 20 বছর পূর্বে) এবং (দুর্ভাগ্যক্রমে) আজকে বেশিরভাগ এম্বেড / রোবোটিক্সের ক্ষেত্রে গুরুত্বপূর্ণভাবে গুরুত্বপূর্ণ।
ডেভিড.পিএফএফএক্স

উত্তর:


174

প্রসেসিং শক্তি এবং মেমরির পরিমাণ বাড়ার কারণে এটি কেবল প্রয়োজনীয় নয়।

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

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

আমার প্রশ্ন যদিও নিম্ন স্তরের উপাদানগুলির এই "লুকানো" সম্পর্কে লোকেরা কেমন অনুভব করে is আপনি কি পুরানো প্রোগ্রামাররা এটিকে কোনও গডসেন্ড বা অযৌক্তিক স্তর হিসাবে যেতে দেখেন?

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

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

আপনি কি মনে করেন বিস্তৃত লাইব্রেরির ক্ষেত্রগুলির সন্ধানের আগে কম বয়স্ক প্রোগ্রামাররা নিম্ন-স্তরের প্রোগ্রামিংয়ের আরও বেশি উপকৃত করবেন?

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

এখন যদি প্রশ্নটি হয় "প্রোগ্রামাররা যারা কেকের লেয়ার এন বোঝেন তারা লেয়ার এন - 1 বোঝার দ্বারা উপকৃত হন?" উত্তর হ্যাঁ, তবে এটি বয়স বা অভিজ্ঞতা থেকে পৃথক; এটি সর্বদা এমন হয় যে আপনি অন্তর্নিহিত বিমূর্ততাগুলি আরও ভাল করে বুঝতে আপনার উচ্চ স্তরের প্রোগ্রামিং উন্নত করতে পারেন।


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

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

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

25
@ ইউফোরিক: সংক্ষিপ্ত উত্তরটি হ'ল হ্যাভেনস হ্যাঁ আমাদের আরও বেশি শালীন প্রোগ্রামার প্রয়োজন! আমাদের দক্ষতা এবং অভিজ্ঞতার প্রতিটি স্তরে আরও প্রোগ্রামার প্রয়োজন। বিশ্ব সফটওয়্যার চালায় । আরও বেশি লোক যাদের নিজের বিশ্বকে কীভাবে কাজ করতে হয় সে সম্পর্কে কোনও বোঝাপড়া থাকে the
এরিক লিপার্ট

6
@ ইউফোরিক (এবং অন্যান্য) - আমরা মন্তব্যগুলির গঠনমূলকতার বিষয়ে সীমাবদ্ধতার দিকে ধাক্কা দিচ্ছি। আপনি যদি এই কথোপকথনটি চালিয়ে যেতে চান তবে দয়া করে আমাদের সাথে সফটওয়্যার ইঞ্জিনিয়ারিং চ্যাটে যোগ দিন ।

50

এই বিষয়ে আমার ধারণা ছিল এবং আমি এগুলি 20 বছর আগে একটি বইয়ে রেখেছি । এটি প্রিন্টের বাইরে দীর্ঘ, তবে আপনি এখনও অ্যামাজনে ব্যবহৃত কপি পেতে পারেন ।

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

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

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

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

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

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

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

দীর্ঘ পোস্টটি শেষ করতে, আমি প্রোগ্রামিংয়ের একটি স্টাইল তৈরি করেছি (যা আমাকে মাঝে মাঝে সমস্যায় ফেলতে পারে) যেখানে

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

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

3
@ পিটারমোরটেনসেন: একমত এটা একাকী। এর জন্য একটি শব্দ আছে - ক্যাসান্দ্রা কমপ্লেক্স
মাইক ডুনলাভে

2
ভাষাগুলি "সম্প্রসারিত" করতে কোড আর্টফিটগুলি লেখার পক্ষে কোনও কঠিন উদ্যোগ নয়, এমন একটি ভাল এপিআই তৈরি করা যা সমস্যা ডোমেনের সঠিক এবং স্বজ্ঞাতভাবে মিরর করে
রবার্ট হার্ভে

3
@ মাইকডুনলাভে: বিটিডাব্লু: আপনিও "নো-প্রোফাইলার" লোক (এটি ইতিবাচক উপায়ে বোঝানো হয়েছে)। কয়েক মাস আগে, আমি আবার আপনার দুনিয়ায় আপনার কৌশলটি ব্যবহার করে ডকুমেন্ট ফাইলের লোড সময়কে দ্রুত 25 সেকেন্ড থেকে 1 সেকেন্ডে (ব্যবহারকারীকে সরাসরি বোঝা যায় এমন একটি লোড টাইম) দ্রুতগতিতে হ্রাস করতে ব্যবহার করি । এটি কয়েকটি পুনরাবৃত্তি গ্রহণ করেছিল এবং সমস্ত পুনরাবৃত্তিতে 10-20 নমুনাগুলি পর্যাপ্ত পরিমাণের চেয়ে বেশি ছিল। পারফরম্যান্সের সমস্যাগুলি অবশ্যই অপ্রত্যাশিত জায়গায় ছিল।
পিটার মর্টেনসেন

2
@ ইজকাটা এবং পিটার: হ্যাঁ, আমি সেই অদ্ভুতবল। এফডাব্লুআইডাব্লু, আমি এটি বুঝতে সহজতর করার আশায় একটি দম্পতি (অত্যন্ত অপেশাদার) ভিডিও রেখেছি। র্যান্ডম বিরাম ডিফারেনশিয়াল এক্সিকিউশন। চিয়ার্স।
মাইক ডুনলাভে

35

কম্পিউটিংয়ে চলমান অগ্রগতি অর্জনের জন্য উচ্চ-স্তরের বিমূর্ততা আবশ্যক।

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

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

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

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

এই সমস্ত বিমূর্ততা আপনাকে হার্ডওয়্যার থেকে অন্তরিত করে? অবশ্যই এটি। ঘরে বসে তাঁবু খাওয়ার পরিবর্তে কী আপনাকে প্রকৃতি থেকে বিচ্ছিন্ন করে? একেবারে। তবে সকলেই জানেন তারা কেন তাঁবুর পরিবর্তে ঘরে বসে থাকেন এবং একটি ঘর তৈরি করা তাঁবু বেঁধে রাখার চেয়ে একেবারে আলাদা বলের খেলা।

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


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


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

1
আমি একটি ছোট স্পষ্টতা যোগ করেছি।
রবার্ট হার্ভে

2
"কম্পিউটিংয়ের প্রথম দিনগুলিতে আমরা মেশিনের ভাষা ব্যবহার করতাম। আমরা যে হার্ডওয়্যারগুলির জন্য লিখেছিলাম তার অন্তরঙ্গ জ্ঞান সহ আমরা খুব ছোট, খালি ধাতব প্রোগ্রাম লিখেছিলাম।" এম্বেড থাকা প্রোগ্রামিংয়ে আমাদের মধ্যে কিছু লোক মাঝেমধ্যে এখনও তা করে চলেছে, 8-কিন্তু মাইক্রোকন্ট্রোলারগুলিতে যা 1K এর চেয়ে কম প্রোগ্রামের মেমরি, র্যামের 64 বাইট এবং প্রায় এক চতুর্থাংশের জন্য ব্যয় করে। সেখানে কোনও সি সংকলক নেই। (তবে আমি সাধারণত প্রোগ্রামের স্পেসের 1/2 এমবি সহ 32-বিট মাইক্রোকন্ট্রোলারদের সাথে কাজ করি))
tcrosley

9

সত্যিই ভাল প্রশিক্ষণ উভয় চূড়ান্ত, পাশাপাশি একটি ব্রিজ জড়িত।

নিম্ন-স্তরের দিকে: কোনও কম্পিউটার কীভাবে সমাবেশের ভাষার জ্ঞান এবং সংকলক কী করছে তা সহ গ্রাউন্ড আপ * থেকে কোড কার্যকর করে।

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

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

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


* এবং, যাইহোক, কম্পিউটার কোড চালায় কীভাবে "ভিত্তি" কোথায়? এটা কি সমাবেশ ভাষা? নাকি কম্পিউটার আর্কিটেকচার? নাকি ডিজিটাল যুক্তি? নাকি ট্রানজিস্টর? নাকি ডিভাইস ফিজিক্স?


7

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

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


7

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

আমি 40 বছরেরও বেশি সময় ধরে প্রোগ্রামিং করছি, 50-100 বিভিন্ন ভাষা বা উপভাষায় লিখিত কোড পেয়েছি এবং 5-10-এ বিশেষজ্ঞ হয়ে উঠছি। আমি এতগুলি দাবি করার কারণটি হ'ল বেশিরভাগ তারা কেবল একই ভাষা, টুইটগুলি সহ। টুইটগুলি জটিলতা যুক্ত করে, প্রতিটি ভাষাকে কিছুটা আলাদা করে তোলে।

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

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

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

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

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

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

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

চূড়ান্ত শব্দ: জটিলতা চূড়ান্ত শত্রু! যে মার এবং জীবন সহজ হয়।


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

@ ডিক্সালভেজ: আমি সম্মত, এবং আমার বড় হতাশা হ'ল উচ্চতর স্তরের অভাব। 1980 এর দশকে 10 টি লাইনে অ্যাডাক কী করতে পারে তা এখন রুবি বা পাইথনে 15 লাইন নিয়েছে তবে আমি এটি 3 করার জন্য কিছু খুঁজছি এবং ফোনে লক ডাউন পরিবেশের অর্থ একই জিনিস জাভা বা উদ্দেশ্য সিতে 50 লাগে সেখানে খোলের স্ক্রিপ্ট!
ডেভিড.পিএফএফএক্স

গুগল "অ্যান্ড্রয়েডের জন্য ব্যাশ" বন্দরগুলিতে প্রচুর লোকেরা কাজ করে দেখায়। এছাড়া মত Python- র সংস্করণ এর Kivy
DocSalvager

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

4

আমার প্রশ্ন যদিও নিম্ন স্তরের উপাদানগুলির এই "লুকানো" সম্পর্কে লোকেরা কেমন অনুভব করে is আপনি কি পুরানো প্রোগ্রামাররা এটিকে কোনও গডসেন্ড বা অযৌক্তিক স্তর হিসাবে যেতে দেখেন?

না, সত্যিই।

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

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

আপনি কি মনে করেন বিস্তৃত লাইব্রেরির ক্ষেত্রগুলির সন্ধানের আগে কম বয়স্ক প্রোগ্রামাররা নিম্ন-স্তরের প্রোগ্রামিংয়ের আরও বেশি উপকৃত করবেন?

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

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

এত কিছুর ফলস্বরূপ এটি এখন কেবল উন্নয়নের কথা নয়। অব্যাহত বিশেষায়নের অর্থ বিকাশকারীদের তাদের যোগাযোগ এবং সংহতকরণের দক্ষতা উন্নত করতে হবে।


3

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

এটি এখানে বর্ণনা করা হয়েছে

বা এখানে - "কোডের একক লাইনের সাহায্যে আপনি 500 টি ব্যবহারকারীকে ডোমেনে যুক্ত করতে পারেন" ...

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


2

তরুণ প্রোগ্রামাররা কি বিস্তৃত লাইব্রেরির ক্ষেত্রগুলি সন্ধানের আগে নিম্ন-স্তরের প্রোগ্রামিংয়ের আরও বেশি সুবিধা অর্জন করে? যদি তাই হয় তবে কেন?

আমি তাই মনে করি না. এখনও অনেকগুলি পরিস্থিতি রয়েছে যেখানে 'নীচের স্তরটির' কম কাজ সম্পর্কে সচেতন হওয়া সুবিধাজনক eg

  • স্তরে কোনও সমস্যা ডিবাগ করার সময় n, স্তরটিতে কী ঘটে যায় তা বিবেচনা করে এটি প্রায়শই ব্যাখ্যা করা যেতে পারে n-1(নীচের স্তরটি)। আমার ধারণা স্তর 0 টি "ট্রানজিস্টর" হবে তবে আপনি যদি ট্রানজিস্টরগুলির সাথে কোনও সমস্যার ব্যাখ্যা দিতে চান তবে আপনি সম্ভবত পদার্থবিজ্ঞানের (যেমন তাপ) সম্পর্কে কথা বলবেন, সুতরাং পদার্থবিজ্ঞানটি সত্যই 0 স্তরের।

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

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

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

  • আপনার লেখা প্রোগ্রামগুলিতে যৌক্তিক ত্রুটিগুলি খুঁজে পেতে কম্পিউটার আপনাকে সহায়তা করবে। স্ট্যাটিক টাইপ সিস্টেমগুলি বা সোর্স কোড বিশ্লেষকের মতো বিষয়গুলি (আমি শুনেছি এরিক লিপার্ট এই দিনগুলিতে বেশ জনপ্রিয় একটিতে কাজ করে) এর সাথে সহায়তা করে।

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

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



1

"যদি পুরানো প্রোগ্রামাররা বিস্মৃত হওয়ার জন্য গডসেন্ড বা অতিরিক্ত স্তর হিসাবে এই জাতীয় উদ্ভাবনগুলি দেখেন এবং তারা কেন এমনটি ভাবতে পারেন?"

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

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

"এবং অল্প বয়স্ক প্রোগ্রামাররা কি বিস্তৃত গ্রন্থাগারের ক্ষেত্রগুলি অনুসন্ধান করার আগে নিম্ন-স্তরের প্রোগ্রামিং শেখার আরও সুবিধা অর্জন করে? যদি তাই হয় তবে কেন?"

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

OTOH, এমনকি যদি আপনার লক্ষ্যটি একজন প্রযুক্তিবিদ / যান্ত্রিক স্তর হিসাবে কাজ করা হয় তবে নিম্ন স্তরের প্রোগ্রামিং এক্সপোজারের কিছু স্তর এখনও আপনার সমস্যা সমাধানের দক্ষতা বিকাশে সহায়ক হতে চলেছে।


1

আমার প্রথম প্রোগ্রাম (15 বছর বয়সী কিশোর হিসাবে) 1974 সালে আইবিএম 370/168 মেইনফ্রেমের জন্য খোঁচা কার্ডগুলিতে পিএল / 1 এ ছিল। আমার বাবা আইবিএম-এ কর্মরত ছিলেন এবং আমি রবিবার ডেটাসেন্টারে যেতে পেরে যথেষ্ট ভাগ্যবান।

সেই সময় কয়েক হাজার স্টেটমেন্টের (যেমন পঞ্চ কার্ড) একটি প্রোগ্রাম ছিল একটি বড় প্রোগ্রাম (এবং একটি ভারীও ছিল, যেহেতু কয়েক হাজার পাঞ্চ কার্ড বহু কিলোগ্রাম ওজন করেছিল)। ভিসুয়াল ইন্টারফেস অস্তিত্ব না (এর সাথে শুরু একটি পাঞ্চ কার্ড কমান্ড ব্যবহার করে তার "স্ট্যান্ডার্ড ইনপুট" থেকে পড়া একটি টিপিক্যাল প্রোগ্রাম //GO.SYSIN DD *IIRC, কিন্তু আমি মাস্টার করা হয়নি JCL )। অ্যালগরিদমিক্স গুরুত্বপূর্ণ ছিল এবং আইআইআরসি স্ট্যান্ডার্ড লাইব্রেরিটি আজকের মান অনুসারে বেশ ছোট ছিল।

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

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

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

১৯ 1970০ এবং আজকের মধ্যে একটি প্রধান পার্থক্য হ'ল বিকাশকারীর (মানুষের) প্রচেষ্টা এবং কম্পিউটার পাওয়ারের মধ্যে ব্যয়ের অনুপাত।

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