কোন মুহুর্তে আমি বলতে পারি যে আমি একটি ভাষা "শিখেছি"?


67

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


12
আমি মনে করি আপনি যে শব্দটির সন্ধান করছেন তা হ'ল একটি ভাষা "আয়ত্ত করা", এই প্রসঙ্গে "শেখা" কিছুটা আশ্চর্য।
পিটার বি

7
"শব্দগুলি অর্থের জন্য: আপনি যখন অর্থ পেয়ে যাবেন তখন আপনি শব্দগুলি ভুলে যেতে পারেন।" - ঝুয়াংজি
jfrankcarr

9
যখন আপনাকে এই প্রশ্নটি জিজ্ঞাসা করতে হবে না, আপনি যা জানার দরকার তা

1
পুনঃটুইট করেছেন
jadkik94

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

উত্তর:


70

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

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


15
কথোপকথন এবং সাবলীল শব্দগুলি বরং বিষয়ভিত্তিক এবং প্রাকৃতিক ভাষার সাথে উপযুক্ত হলেও কম্পিউটার ভাষার ক্ষেত্রে প্রয়োগ করার সময় তারা কী বোঝায় তা দেখা মুশকিল। যদিও এখনও বিষয়গত, কার্যকরী এবং প্রতিমাটি আরও ভাল কাজ করতে পারে। কার্যকরী ইঙ্গিত দেয় যে আপনি দরকারী বাক্য রচনার জন্য সিনট্যাক্সকে যথেষ্ট পরিমাণে জানেন, যখন একটি অভিব্যক্তিজ্ঞান জ্ঞান থাকা বোঝায় যে আপনি কেবল ভাষায় কীভাবে লিখতে জানেন তা নয়, ভাষার আইডিয়মগুলি ব্যবহার করার জন্য এটি যথেষ্ট ভাল জানেন যেমন usingসি # তে ব্যবহার করার মতো বা b, a = a, bঅজগর মধ্যে জেনারেটর। অন্যথায়, +1।
মার্ক বুথ

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

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

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

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

25

এটি কে জিজ্ঞাসা করছে তার উপর নির্ভর করে

প্রস্তাবিত ব্যক্তি জিজ্ঞাসা করেন এমন ব্যক্তির একটি নির্দিষ্ট ধারণা রয়েছে যে "যে কোন ভাষা শিখেছে" এমন একজনের কাছ থেকে দক্ষতার স্তরটি কীভাবে প্রত্যাশিত।

মূলত, আমি দুটি প্রত্নতাত্ত্বিক স্কেলগুলির মুখোমুখি হয়েছিলাম, যার মাধ্যমে লোকেরা "আপনি এক্স শিখেছেন?" এই প্রশ্নের উত্তরটি বিচার করে?

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

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

তো, আপনার শ্রোতা কি?


4
সাক্ষাত্কারে, আপনি যদি এটি জানেন তবে তা জানেন। কর্মক্ষেত্রে, গুগল এটি জেনে থাকলে আপনি এটি জানেন।
14:47 এ স্বীকার করে

3
সাক্ষাত্কারে, সাক্ষাত্কারটি যদি টাই পরে থাকে তবে এটি "আমি এটি জানি" এবং এটি "দয়া করে সংজ্ঞায়িত করুন" "যদি সে না জানে;)"। ন্যায়সঙ্গত হওয়ার জন্য, বেশিরভাগ সাক্ষাত্কারকারীরাই জিজ্ঞাসা করেন যে কারও সাথে "অভিজ্ঞতা আছে", যার কাছে আমি "হ্যাঁ" দিয়ে উত্তর দিতে আরও সহজেই আগ্রহী
কেপলা

18

আমি মনে করি লোকেরা "শেখা" শব্দের চূড়ান্ততার দিকে মনোনিবেশ করছে নিখুঁত কাল হওয়ার অর্থ এটি আপনি শিখতে শেষ করেছেন। এবং যেমন প্রত্যেকে লক্ষ্য করেছেন, প্রোগ্রামিং ভাষাগুলি হ'ল কথ্য ভাষার মতোই জীবিত সত্তা। উদাহরণস্বরূপ যে কেউ সি # 2 এর সম্পূর্ণ দক্ষতা অর্জন করেছেন তিনি লিনকিউ, ল্যাম্বডাস, varকীওয়ার্ড, অবজেক্ট / সংগ্রহের সূচনা এবং এক্সটেনশন পদ্ধতি সহ সি # 3 এ দেখবেন এবং জানতে পারেন যে তিনি আগের সংস্করণটির জন্য যা শিখেছিলেন তার থেকে অনেক কিছু বদলেছে। সি # 4 await, asyncকীওয়ার্ড এবং অন্যান্য নতুন ভাষা নির্মাণের সাথে একই ঘটছে ।

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

আমি বলব শিক্ষার বিভিন্ন স্তর রয়েছে।

  1. হ্যালো ওয়ার্ল্ড (আপনি সর্বাধিক প্রাথমিক প্রোগ্রাম লিখতে পারেন))
  2. দক্ষ (আপনি বেসিক প্রোগ্রাম লিখতে পারেন তবে নিয়মিত অনলাইন সাহায্যের পরামর্শ নেওয়া প্রয়োজন)
  3. সাবলীল (আপনি কিছু রেফারেন্স সহ অগ্রিম প্রোগ্রাম লিখতে পারেন)।
  4. নেটিভ স্পিকার (আপনি ন্যূনতম অনলাইন সহায়তা নিয়ে উন্নত প্রোগ্রাম লিখতে পারেন, আপনার কোড অন্য নেটিভ স্পিকারের কোড থেকে পৃথকযোগ্য)।

3
নিতপিক: awaitসি # 5 থেকে এসেছে, সি # 4-এ নতুন নতুন জিনিস ছিল dynamic
svick

আপনি ঠিক বলেছেন ... নেট # র কোন সংস্করণটি সি # এর কোন সংস্করণের সাথে আমি হারিয়ে ফেলেছি
মাইকেল ব্রাউন

7

আপনি খুব কমই বলতে পারেন যে আপনি কোনও ভাষা শিখেছেন। এটি বোঝায় যে আপনি এটি সম্পর্কে শেখা শেষ করেছেন, যা ... বোকা।

যখন আপনি কোনও ভাষা জানেন তা বলার অপেক্ষা রাখে না আপনি যখন এমন কোড লিখতে পারেন যা ভাষায় কোনও রীতি-নীতি রচনা করতে পারে না (সম্ভবত জ্ঞানের অবসারণের এক সপ্তাহ পরে) কোনও বাক্য বিন্যাস উল্লেখ না করে।


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

1
@ কালেব ঠিক
মাইকেল ব্রাউন

3
যদি আপনি
এটির মতো শিখেন

@ কালেব, এর চেয়েও খারাপ, সি ++ এর অনেকগুলি অংশ উপেক্ষা করা ভাল, কারণ কারম্যাক এবং টরভাল্ডস উভয়ই উল্লেখ করেছেন - তাই .. সিপিপি-র সমস্ত কিছু শিখলে ঠিক লাভ হয় না।
মর্গ

3

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

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


2

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


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

2

এর জন্য আমার ব্যক্তিগত উত্তরটি কখন,

  1. আমি একটি সাধারণ উত্পাদন-স্তর প্রোগ্রাম লিখতে বেসিক জানি।
  2. সরল মনে হলেও এমনটি সমস্যা সমাধানে আমি কমপক্ষে 3 সরাসরি সময় ব্যয় করেছি।

সেখান থেকে, আমি এটিকে শেখার বলব না, তবে প্রভুত্ব করব।


1

এই মুহুর্তে যখন আপনার অ্যাপ্লিকেশন বা উপাদান মেল পড়তে পারে, অর্থাত জাওনস্কির আইন , যা এতে বলে:

“প্রতিটি প্রোগ্রাম মেল না পড়লে প্রসারিত করার চেষ্টা করে। যে প্রোগ্রামগুলি এত বেশি প্রসারিত হতে পারে না তাদের দ্বারা প্রতিস্থাপন করা যায় যা পারে সেগুলি। মেলার জিনিসটি, তিনি বলেন, এটির কেবলমাত্র একটি পার্শ্ব প্রতিক্রিয়া)।

আরএসএস "... আরএসএস ফিডস পড়তে পারে" -এ জনপ্রিয় হয়ে উঠলে এটি আপডেট হয়েছিল এবং সম্ভবত এই দিনগুলিতে "... টুইটার ফিডগুলি পড়তে পারেন" এ আপডেট করা যেতে পারে। ;-)


0

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

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

আপনার অভ্যাস রয়েছে যা কেবলমাত্র অনুসরণ করে আপনাকে প্রচুর ভুল এড়াতে সহায়তা করে, যেমন: {} কোড ব্লক এবং () এক্সপ্রেশনগুলিতে ব্যবহার করুন এমনকি যদি আপনি একেবারে নিশ্চিত হন যে "এটি কেবলমাত্র একটি লাইন হবে" বা "আমি বোকা নই এবং জানি অপারেটর অগ্রাধিকার আদেশ "।

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

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

এবং অবশেষে উপলব্ধি করুন: আপনি চিন্তাভাবনা, বিশ্লেষণ এবং সমস্যাগুলি সমাধান করতে শিখেছেন; তাদের তুলনায়, প্রকৃত ভাষাটি গৌণ, কেবলমাত্র বিধি এবং সরঞ্জামগুলির বর্তমান বাক্স।

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