2014 সালে, আমি পাইথন বলেছি। 2017 সালে, আমি আন্তরিকভাবে বিশ্বাস করি যে স্নাতকদের স্নাতক পড়ানোর ভাষাটি জুলিয়া is
পড়াশুনা সর্বদা একটি ট্রেডঅফ সম্পর্কে। একদিকে আপনি এমন কিছু চয়ন করতে চান যা যথেষ্ট সহজ যে এটি উপলব্ধি করা সহজ। তবে দ্বিতীয়ত, আপনি এমন কিছু শিখতে চান যা স্থায়ী শক্তি রয়েছে, অর্থাৎ এমন কিছু যা আপনার সাথে বাড়তে পারে। প্রচলিত গতিশীল ভাষাগুলি (পাইথন / এমএটিএলবি / আর) সমস্ত সহজেই তাদের অস্তিত্ববিহীন বয়লারপ্লেট কোড এবং একটি দোভাষী খোলা এবং স্পিট আউট কোডের স্বাচ্ছন্দ্যের কারণে 1 বিভাগে চলে যায়, যখন সি / সি ++ / ফোর্টরান দ্বিতীয় বিভাগে আসে যে ভাষাগুলি নিয়ে আজকের বিশ্বের সবচেয়ে উচ্চ-পারফরম্যান্ট সফ্টওয়্যার রচিত হয়েছিল।
তবে এমন কোনও ভাষা ব্যবহারের ক্ষেত্রে সমস্যা রয়েছে যা অন্য বিভাগটিকে পুরোপুরি ক্যাপচার করে না। পাইথনের মতো ভাষা ব্যবহার করার সময়, এটি প্রকার এবং পূর্ণসংখ্যার ওভারফ্লো জাতীয় জিনিসগুলিকে সুন্দরভাবে বাদ দেয়। এটি প্রথম সেমিস্টার কম্পিউটিং শেখানোর জন্য দুর্দান্ত, তবে আপনি কীভাবে জিনিসগুলি আসলে কীভাবে কাজ করছে তার গভীরতর গভীরতর গভীরতা আঁকতে চান, পাইথনের ভাষা একটি ভাল শিক্ষার সরঞ্জাম হিসাবে অন্তর্নিহিত ধাতব থেকে খুব দূরে সরানো হয়েছে। তবে সি / সি ++ / ফোর্টরান (বা জাভা ... আমি প্রথমে জাভা শিখেছি ...) সবারই এত বড় স্টার্টআপ ব্যয় হয় যা শিখতে সবচেয়ে কঠিন জিনিস হ'ল হেডার সেটআপ এবং main
সংকলন কীভাবে পাওয়া যায় , যা আসলে প্রোগ্রামে শেখা থেকে বিরত থাকে ।
জুলিয়া প্রবেশ করান। আপনি যখন জুলিয়াটি প্রথম ব্যবহার করেন, আপনি প্রকারের সম্পূর্ণ ধারণাটি বিমূর্ত করতে পারেন এবং এটি কেবল ম্যাটল্যাব বা পাইথনের মতো ব্যবহার করতে পারেন। তবে আপনি আরও শিখতে চাইলে ভাষার গভীরতার একটি "খরগোশের ছিদ্র" রয়েছে। যেহেতু এটি সত্যিই কোনও টাইপ সিস্টেমের ভিত্তিতে একটি বিমূর্ত স্তর + এলএলভিএমের মাধ্যমে একাধিক প্রেরণের, তাই এটি মূলত "স্ট্যাটিকালি সংকলিত কোড লেখার একটি সহজ উপায়" (এবং টাইপ-স্থিতিশীল ফাংশনগুলি আসলে স্থিতিকরভাবে সংকলিত হতে পারে)। এর অর্থ হ'ল সি / সি ++ এর বিশদগুলিও অ্যাক্সেসযোগ্য। আপনি কীভাবে বয়লারপ্লেট কোড ছাড়াই সহজ লুপ এবং ফাংশন লিখবেন এবং ফাংশন পয়েন্টারগুলিতে খনন করতে পারেন। জুলিয়ার রূপক বৈশিষ্ট্যগুলি আপনাকে সরাসরি এএসটি অ্যাক্সেস করতে দেয় এবং ম্যাক্রোগুলি রয়েছে যা সংকলনের শৃঙ্খলের প্রতিটি অংশ দেখায়। এছাড়াও, লিস্প হিসাবে, কার্যকরী প্রোগ্রামিং শৈলীর জন্য উপযুক্ত। এবং এটিতে অনেকগুলি সমান্তরাল কম্পিউটিং ক্ষমতা রয়েছে। প্যারামেট্রিক টাইপিং এবং টাইপ-স্থিতিশীলতার মতো ধারণাগুলি জুলিয়ায় মোটামুটি অনন্য এবং গভীর।
আপনি যদি প্রোগ্রামিং ভাষা নিজেই অধ্যয়ন করতে চান তবে @code_lowered
কী কী কমছে তা দেখার সাথে সংকলনটি কীভাবে কাজ করে তার পদক্ষেপগুলি শিখতে পারেন, টাইপড-এএসটি দিয়ে @code_typed
এলএলভিএম আইআর সহ @code_llvm
এবং শেষ পর্যন্ত এর সাথে দেশীয় সমাবেশ কোডটি দেখুন @code_native
। ডায়নামিক ভেরিয়েবলের দাম কী এবং সঠিকভাবে "ভেরিয়েবল বক্সিং" কীভাবে কাজ করে তা দেখানোর জন্য এটি ব্যবহার করা যেতে পারে এবং এই ব্লগ পোস্টটি দেখায় যে কীভাবে সংকলক অপ্টিমাইজেশানগুলি ঘটতে পারে / কীভাবে সংঘটিত হতে পারে তা শেখানোর জন্য এই অন্তর্মুখী সরঞ্জামগুলি কীভাবে ব্যবহার করা যেতে পারে।
অন্বেষণ করার জন্য কেবল কম্পিউটার বিজ্ঞান এবং সফ্টওয়্যার ইঞ্জিনিয়ারিং ধারণা নেই, তবে সমৃদ্ধ গাণিতিক ধারণাও রয়েছে। যেহেতু জুলিয়ার মূল গ্রন্থাগারগুলি জেনেরিক টাইপিংয়ের কথা মাথায় রেখে লেখা হয়েছে তাই ম্যাট্রিক্স-মুক্ত অপারেটর তৈরি করা এবং এগুলি ব্যবহার করে জিএমআরএস সম্পাদন করতে IterativeSolvers.jl ব্যবহার করা তুচ্ছ। আপনি @which
কীভাবে কোনও কিছু বাস্তবায়িত হয়েছিল তা আপনাকে সঠিকভাবে দেখানোর মতো অন্তর্নির্ধারণের সরঞ্জামগুলি ব্যবহার করতে পারেন । উদাহরণস্বরূপ, কিভাবে \
কাজ করে?
@which rand(10,10)\rand(10)
#\(A::AbstractArray{T,2} where T, B::Union{AbstractArray{T,1}, AbstractArray{T,2}} where T) in Base.LinAlg at linalg\generic.jl:805
যে পয়েন্ট আমাকে সোজা \ সংজ্ঞা । এটি জুলিয়ায় প্রয়োগ করা হয়েছে, সুতরাং যিনি জুলিয়াকে চেনেন এমন কেউ আলগোরিদিম শিখতে পারেন এবং ম্যাট্রিক্স সাব টাইপগুলি সনাক্তকরণ এবং যখন সম্ভব (বিশেষত গাউসিয়ান নির্মূলকরণে ফিরে যেতে পারেন) বিশেষজ্ঞের মাধ্যমে এটি কীভাবে কাজ করে তা শিখতে পারে। যেহেতু জুলিয়ার কোড এমআইটি লাইসেন্সযুক্ত (এবং প্রায় সমস্ত প্যাকেজ এমআইটি লাইসেন্সযুক্ত) তাই শিক্ষার্থীরা এই ধারণাগুলি তাদের নিজস্ব কোডে (অ্যাট্রিবিউশন সহ) ব্যবহার করতে পারবেন (যখন কোডটি জিপিএল লাইসেন্সপ্রাপ্ত, যেমনটি বেশিরভাগ ম্যাটল্যাব এবং আর প্যাকেজগুলির ক্ষেত্রে হয়) লাইসেন্স সংক্রান্ত সমস্যা সম্পর্কে তাদের সতর্ক হওয়া দরকার!)।
যেহেতু ভাষা কোরটি একটি খুব সক্রিয় ওপেন সোর্স সম্প্রদায় দ্বারা নির্মিত, তাই ভাষা বিকাশের ইতিহাসের জন্য একটি সমৃদ্ধ সংস্থান রয়েছে: এর গিথুব বিষয়গুলি । ভাষার প্রশ্নগুলি বোঝার মতো একটি ম্যাট্রিক্স ট্রান্সপোজ আসলে কী? বৃহত্তর বিশদে এই গাণিতিক বিষয়গুলি বোঝার জন্য খুব আলোকিত করা যায়।
তবে শেষ পর্যন্ত, আপনি কীভাবে তৈরি করবেন তা আপনার ছাত্রদের শিখিয়ে দিতে চান। দুঃখের বিষয় হচ্ছে, পাইথন বা আর শেখার অর্থ এই নয় যে আপনার "পাইথন / আর বিকাশ করতে" যা লাগে তা হ'ল যেহেতু বহুল ব্যবহৃত-ব্যবহৃত এবং ভাল-অনুকূলিত প্যাকেজগুলির মধ্যে যথেষ্ট পরিমাণে সি / সি ++ / ফোর্টরান কোড রয়েছে কর্মক্ষমতা পেতে। সুতরাং, এই শিক্ষার্থীদের এই ভাষাগুলির জন্য বৈজ্ঞানিক বাস্তুসংস্থানে অবদান রাখতে সক্ষম হওয়ার জন্য তাদের শেষ পর্যন্ত কোনও এক সময় অন্য ভাষা শিখতে হবে। যদিও এটি সম্পূর্ণরূপে ভয়াবহ নয়, এখন জুলিয়া বিদ্যমান হওয়ায় এটি উপ-অনুকূল। যেহেতু টাইপ-স্থিতিশীল জুলিয়া সি / ফোর্টরানের গতি অর্জন করতে সক্ষম, জুলিয়া বাস্তুতন্ত্রের বেশিরভাগ প্যাকেজগুলি খাঁটি জুলিয়া কোড। জুলিয়া শেখার অর্থ একজন জুলিয়া বিকাশ করতে শিখেছে। এবং যেহেতু বেস জুলিয়াও বেশিরভাগ ক্ষেত্রে জুলিয়া কোড (কেবল কয়েকটি প্রাথমিক এবং পার্সারটি নেই),
সে বলেছিল, জুলিয়ার পছন্দের কিছু ডাউনসাইড রয়েছে। একটির জন্য, এটি অন্যান্য অন্যান্য ভাষার তুলনায় এটি অনেক নতুন এবং তাই এটি সংস্থানগুলিতে কিছুটা কম। আপনাকে নিজের হাতে প্রচুর শিক্ষণ সরঞ্জাম নিয়ে আসতে হবে, বা ওয়েলিয়ায় যে সম্পদ জুলিয়া ওয়েবসাইটে তালিকাভুক্ত রয়েছে সেগুলি থেকে টানতে হবে । এছাড়াও, ভাষা সংক্রান্ত বিবরণগুলি বেশিরভাগ ক্ষেত্রে নিষ্পত্তি হয় নি, যদিও 1.0 শীঘ্রই প্রকাশিত হবে (2017 এর শেষের দিকে)। এবং এটিও বেশ সম্ভবত যে আপনি, জুলিয়ার একটি কোর্সের সম্ভাব্য শিক্ষক, নিজের সাথে ভাষা নিয়ে এতটা অভিজ্ঞতা নাও থাকতে পারেন। তবে এই ধরণের সমস্যাগুলি যা সময়ের সাথে সাথে চলে যায়, যদিও জুলিয়ার উপকারগুলি যে আমি উপরে উল্লিখিত করেছি সেগুলি ভাষাগুলির কাছে অনেক বেশি মূল।