Ява часто зустрічається в наукових колах. Яка причина цього?
real
світі, не приносить користі ні студентам, ні компаніям, які хочуть найняти студентів.
Ява часто зустрічається в наукових колах. Яка причина цього?
real
світі, не приносить користі ні студентам, ні компаніям, які хочуть найняти студентів.
Відповіді:
А декількох університетах є хтось із достатньо відомих, що багато (якщо не більшість) рішень обертаються навколо подобань, неприязнів, думок, смаку тощо. Техаський штат A&M має персонал Bjarne Stroustrup; це, мабуть, нікого не здивує, що їх навчальна програма має наголос на C ++.
Однак більшість університетів дещо відрізняються. По-перше, рішення часто приймаються набагато більше на користь викладачів, ніж студентів. Найбільш великим критерієм у багатьох випадках є "яка мова вимагає найменших зусиль з нашого боку?" Більшість з них також обережні у своїй лінощі - вони хочуть не лише мови з найменшими передовими поняттями, а й тієї, яка є (наприклад) найповільнішою для впровадження, оновлення чи прийняття чогось нового.
По-друге, більшість рішень приймає комітет. Це означає, що остаточне рішення є рідкісним (якщо і взагалі) тим, що хтось насправді хотів - це лише те, що найменше членів комітету (особливо тих, хто має найбільший вплив) визнали особливо заперечуючими. Це як підібрати аромат морозива. Один дуже любить полуницю, але інший має алергію на полуницю. Інший дуже любить шоколад, але хтось інший не витримує цього. Ще одна думка вважає, що родзинка рома - це чудово, але двоє інших хвилюються, що згадування про "ром" трактуватиметься як заохочення до зловживання алкоголем - тому вони закінчуються ваніллю, хоча це не те, що ніхто насправді хотів.
Нарешті, незважаючи на те, що зазвичай це прямо суперечить більшості того, що попередні два критерії виробляли б ізольовано, вони, як правило, потребують (або принаймні хочуть), щоб вони розглядалися як такі, що відповідають потребам промисловості.
Java є перетином цих трьох:
Зауважте, що я насправді не кажу (наприклад,), що про Java немає нічого більшого, ніж найосновніше поняття, що таке OOP - лише те, що це все, що потрібно для того, щоб пройти прийнятну роботу з її викладання.
Я вивчав комп’ютерні науки на початку дев’яностих, безпосередньо перед появою Java. Підхід, який дотримувалися наші професори, був такий.
Перший курс: вступний курс з програмування та алгоритмів на Паскалі. Чому Паскаль? Тому що це чиста мова, призначена для викладання концепцій програмування без засобів для злому. Звичайно, ми, студенти, знали, що найпопулярнішою мовою в той час була С і що з'явилася нова мова зі зростаючою популярністю: С ++. Тож ми постійно читали та обговорювали ці мови та робимо невеликі проекти, використовуючи їх самостійно. Отже, ідея полягала в тому, що на уроці ми займаємося серйозною теорією (Паскаль), а вдома вчимося зламати (С). :-)
Протягом другого курсу у нас був курс операційної системи, в якому нас попросили виконати вправи на С та складання. Професор не дав нам повного курсу C (лише кілька уроків), тому що (1) у нас уже був курс програмування протягом першого курсу, і (2) він сказав, що кожен комп'ютер, який знає поняття програмування, повинен вміти читати книгу та вивчати нову мову програмування. Курс пройшов досить гладко, і всі ми вважали нормальним, що C та збірка - це практичні теми, які ви вивчаєте самостійно або обговорюєте в коридорі з іншими студентами, але не варто було складати курс.
Під час третього курсу ми провели курс з мов програмування, на якому вивчали різні парадигми мов програмування (імперативні, функціональні, логічні, об’єктно-орієнтовані), вивчали загальні концепції та методи впровадження, а також переглядали основні мови програмування (Pascal, C, Modula2, Simula, Lisp, C ++, Prolog). Нам наш професор сказав на початку курсу: ви не повинні оцінювати цей курс, думаючи про те, скільки мов програмування ви знаєте в кінці курсу, а про всі загальні поняття, які ви засвоїли, як вони пов'язані між собою, для чого вони гарні, як вони використовуються на яких мовах. Тоді вивчення певної мови - це лише питання читання книги, перегляду наявного коду, спроби використовувати його у конкретному проекті тощо.
Я вважав такий підхід дуже підходящим та ефективним. Я не думаю, що університет повинен орієнтуватися на підготовку хороших програмістів, а на те, щоб дати хороші знання, що дозволяють зрозуміти мови програмування та програмування. Стати хорошим програмістом буде просто побічним ефектом цього. Зараз я розглядаю можливість подати заявку на роботу, де потрібна Ада, і мене це не лякає, хоча я ніколи раніше не робив жодного серйозного програмування в Ада.
Повертаючись до питання викладання Java. Я думаю, що Java часто використовується для викладання, тому що вона є достатньо нейтральною і дозволяє пояснити принципи програмування за допомогою мови, яка також близька до світової галузі.
Особисто я б все-таки використовував Pascal або подібну мову для першого курсу, тому що це дозволило б мені розрізнити структури управління та структури даних, які в Java / об'єктно-орієнтовані мови тісно інтегровані. Отже, на мою думку, Паскаль дозволив би поступовіше ознайомитись із основними поняттями програмування.
Крім того, вчений-комп’ютер (і хороший програміст) повинен знати про основні механізми / структури виконання, такі як стек, купа, параметри передачі, розподіл пам'яті, покажчики або як реалізувати абстрактні типи даних, не використовуючи вбудовані засоби мова (списки, набори тощо). Java відбирає багато цього від програмістів (це, звичайно, добре), але новачкам слід дізнатися про ці речі. Можливо, після першого курсу програмування на Java потрібно також взяти більш загальний курс з мов програмування.
Це лише мій досвід та думки.
Я був у школі, коли вийшла Java. І мій університет майже змінився за ніч. Люди відверто хизувалися на Яві в академічних колах. Коли я вийшов, я був молодшим, і до мого старшого року майже всі навчальні заклади швидко рухалися, щоб змінити свою навчальну програму. Не тільки в моєму університеті, але і всюди. Це було дійсно так швидко. Нашим другим вступним курсом був Паскаль, і він швидко перейшов на Java менш ніж за рік. Чому вони перетворили так швидко? Дві великі причини.
Один вчений хоче викладати теорію та алгоритми. Мови, які полегшують вивчення тих алгоритмів, яким не потрібно багато досвіду для роботи: найкраще: схема, Python, Java, Smalltalk тощо. Чим більше мова стає тим, чим сильніше відволікаєшся від вивчення реальних алгоритмів. У той час, коли мови розписів були громадянами другого класу, нахилялися роботодавцями як дешеві чи швидкі та брудні. Академіки розглядали їх як більше копіювальних котів, але те, що працедавці хочуть, також покладається на академіків.
Це підводить нас до наступної причини. Роботодавці хочуть певного мовного досвіду, і в той час, коли це було C / C ++. Але C / C ++ потребує багато досвіду для вивчення, і є багато кутових випадків, а також, якщо вони, або буци, які відволікають. Ми вивчили курси C / C ++, але не на нижчих рівнях. У той час роботодавці були злі на програми CS, оскільки студенти не виявились гуру C / C ++.
Java прокотилася через галузь занадто швидко, як і наукові школи. Тож нарешті вчені отримували те, що хотіли. Мова високого рівня, яку було легше вивчити, а мову прагнули роботодавці. Це було все надто досконало. Я мав повернення друга до академії, можливо, через 3 роки після того, як я пішов, і він сказав, що ви можете знайти книгу Java у кожному предметі CS. Ось так швидко Ява перейняла академічні центри.
Особисто я думаю, що Java не скинула CS, я думаю, що це насправді було гарною справою, оскільки студенти можуть вивчати CS, брати участь у відкритих джерелах та знаходити роботу навіть у школі. Я все ще вважаю, що ви повинні вивчати багато мов, як студент CS, і це не повинна бути тільки Java. Але, якби всі вони використовували пітона, Джоел також ненавидів би і пітона.
Для цього є кілька причин, зокрема:
Зауважте, що існує ряд шкіл, які викладають C # з багатьох однакових причин. Причин набагато більше, деякі з них більш притаманні окремій школі. По суті, Java стала об'єктно-орієнтованою "ОСНОВОЮ" минулих років.
*
синтаксису, але це було б дуже важко використовувати без основного розуміння покажчиків.
Мені подобається публікація Джоела Спольського під назвою The Perils Of Java Schools . Я вважаю, що Берін Лоріст вірно сприймає цю програму, спрощуючи циркулярну програму, і вона також застосовується до реального світу.
Я багато разів чув таке: "Ступінь інформатики - це не ступінь для вивчення програмування, це вивчення теорії". Мова не обов'язково має значення (хоча це не повинно перешкоджати), поки ця теорія вивчається. Java - це порівняно проста мова, яка дозволяє витратити більше часу на вивчення теорії за всім. Це одна з причин того, що MIT використовує схему (тому я чув).
Багато відповідей, поданих вище, є хорошими, але вони щось не залишають.
Java - це багатоплатформна мова. Один студент може використовувати свій Mac, інший свій ПК та ще один її обліковий запис Unix. Той самий код зробить те саме. Подумайте, наскільки простіше підтримати і вчителя, і шкільний ІТ-відділ.
Це було справжнє значення Java, коли вона вийшла. Жарт був "Код один раз, налагодження скрізь", але він дійсно виймає апаратні та операційні системи з рівняння.
Я чув, як професори говорять, що використовують Java для навчання, тому що:
Особисто я радий, що взяв CS в Берклі, коли вони використовували схему для викладання. Хоча я не усвідомлював, якою елегантною була мова насправді, лише через кілька років.
Трохи фону
Я взяв єдиний клас Java, який пропонували в нашій школі. Це було в кінці 90-х - на початку 2000 року. Ява зростала, але майже не знімалася. Виходячи з великої розробки C, я трохи засмутився всім кодовим кодом, необхідним для отримання Java та роботи. Я не міг зосередитися на своєму завданні. Я не міг просто відкрити файл із "відкритим". Мені довелося визначити клас, а потім імпорт тощо, тощо.
Я займався комп’ютерною інженерією, тому спершу я взяв програму складання, а потім C, а потім C ++, схему і один курс Java. Це була переважно шкільна програма, орієнтована на С. Клас алгоритмів викладали за допомогою C.
Коли я пішов у промисловість, Ява явно був домінуючим гравцем. Можливо, це був єдиний програвач під час конвертації з бекенд-систем COBOL в додатки веб-бізнесу Java. На початку 2000 днів Java зробила величезні успіхи у світі бізнесу.
У той же час я не знав усіх каркасів Java, але знав, як кодувати та адаптуватися до середовища Java. Якби я пройшов курси навчання з хороших стандартів кодування Java, я, мабуть, міг би почати з кращого стилю Java чи знання екосистеми Java.
Зрештою, я не думаю, що це має значення.
Щоб відповісти на ваше запитання: Чому ми вивчаємо Java в університеті?
Яву слід викладати, але не використовувати її на всіх курсах:
Ви повинні вивчити Java в якийсь момент коледжу, якщо ви вивчаєте інформатику. Він популярний у світі бізнесу. Ви повинні вивчити Java та, можливо, C #. Я б не АБСОЛЮТНО не навчав би Java як вступного курсу програмування. І Java, безумовно, не повинна бути основною мовою, що використовується на всіх курсах.
Щодо критики Java:
Java отримує багато критики, і це завжди є. Я читав журнали Java, в яких згадується Java із запитанням: "Чи готова Java для підприємства?". Платформа Java досі залишається широко використовуваною платформою. Але для більшості загальних завдань програмування Java працює чудово. І немає жодних основних проблем із використанням Java. Це не зашкодить вашому набору навичок. Це може бути, якщо ви просто покладаєтесь на бібліотеки Java, не вивчаючи, що відбувається нижче. Але Java не спричинює будь-якого пошкодження мозку (деякі розробники насправді вважають це правдою).
Плюс, чому розробники не атакують C або C ++? Або принаймні C ++. Парадигми імперативного програмування дуже схожі. І я б ніколи не замислювався над тим, щоб написати веб-сервер на C ++, але я можу з Java.
Ось як я налаштував навчальну програму:
Мови, які я вказав у своїй навчальній програмі, є досить поширеними. Багато шкіл без проблем викладають кілька мов. У промисловості ви будете використовувати безліч різних мов програмування. Ви будете використовувати мови, про які ви навіть не чули.
Тема Java в школах не є проблемою, якщо вони повністю не хочуть захищати вас від Java або хочуть навчати ТІЛЬКИ Java. В обох випадках школи є невиправданими.
(Вибачте Рубі Ланг)
Вибачте, довго нудна відповідь:
(1) Ви мали на увазі:
"Чому ми вивчаємо Java в університеті, як першу мову програмування?"
(2) Або ти маєш на увазі:
"Чому ми взагалі вивчаємо Java в університеті, навіть якщо ми вивчаємо інші мови програмування перед Java?"
Здається, ви насправді означаєте обидва питання.
У випадку (1):
Я не думаю, що Java (або .NET C # і Visual Basic) слід викладати як перші мови програмування. Структурований і модульний Паскаль повинен бути першим, навіть якщо він звучить старе та застаріле.
Багато людей думають, що ми повинні навчити людей об'єктно-орієнтованому програмуванню або функціональному програмуванню немедленно, лише тому, що його "ажіотаж" або "тренд".
Я вивчаю Structured Pascal як невелику версію "Об'єктно-орієнтованого програмування", а не як щось подібне. Я бачу структуровану програму як єдиний невеликий об’єкт.
Після цього я пропоную продовжити функціональні мови та об'єкт Pascal.
А пізніше C, C ++, C #, VB.Net, Java.
Основні причини, що мені не подобається Java або C #, як перша мова програмування, це те, що вони мають суміш понять "покажчики", "вказівники на об'єкти" та самі "об'єкти" ("посилання").
Я вважаю, що студенти повинні мати на увазі, відмінності та подібність цих понять. Порівняння об’єктів Strings на Java - хороший приклад цього odditie:
String A = "Mars";
String A = "Venus";
// pointer comparison or object comparison ???
if (A == B)
{
DoSomething();
}
У випадку (2):
Я думаю, що Java або C # слід навчати в школі, оскільки вони мають кілька оновлених хороших функцій, і в той же час вони мають реальне використання у світі.
Ви повинні вивчити Java в якийсь момент коледжу, якщо ви вивчаєте інформатику. Він популярний у світі бізнесу. Ви повинні вивчити Java та, можливо, C #. Я б не АБСОЛЮТНО не навчав би Java як вступного курсу програмування. І Java, безумовно, не повинна бути основною мовою, що використовується на всіх курсах.
Я більше не можу погодитися. Java в моєму коледжі була мовою, яку вам довелося взяти, щоб потрапити в програму CS&E в моїй школі. Яву надзвичайно легко навчати. Тому що ви можете обмежитися певними поняттями, які «непрограмісти» можуть навчитися.
Я також не можу сказати, ви б чи не хотіли АБСОЛЮТНО викладати Java як вступний курс програмування. Ви в основному сказали, що НЕ БУДЕ АБСОЛЮТНО НЕ БУДЕ навчити цього ?
Проста причина вже пояснена. У Java немає ліцензійних платежів. Ви можете навчити це за допомогою базового редактора тестів. Його застосовують з неправильних причин, безумовно.
Я не погоджуюся з попередньою відповіддю, що Java не зробила студентів, що передають це "тупіше", це дійсно показує, коли у них виникають проблеми з відносно простими поняттями, такими як масиви та списки в C ++.
Перехід з C на Java стався не в той час .
Десь близько 2000. Я був в останньому класі С у своєму університеті.
У C ++ було занадто багато функцій, щоб не бентежити новачка. (І це все ще відбувається. І планує додати деякі.)
.NET не дозріла і навіть більш дорогим , ніж сьогодні.
Ціль C була давньою, і використання її Apple летіло нижче радіолокатора ( iPhone навколо не було)
Я відчуваю вимушеність додати відповіді тут, оскільки я насправді не бачу жодної з цих відповідей, що фактично висвітлює мою точку зору.
Я програвач-хобіст. Я дуже випереджав криву, коли мова зайшла про "комп'ютери" та "програмування". Я закінчив ступінь бакалавра - бакалаврів - у 2007 році та магістратури - приблизно два роки пізніше - 2009. Я працював з безліччю мов, включаючи асамблеї, QuickBASIC, C, C ++, Java, PHP, Perl, Python, BASH Scripts, Javascript, COBOL тощо .
IMHO - мова, яка використовується для навчання студентам програмування - це показник часу, в який ми зараз живемо. Наприклад, у 1980-х Асамблея була мовою низького рівня, тоді як C вважалася мовою високого рівня.
Протягом 1990-х C ++, Java, Perl та подібні мови набули важливого значення насамперед тому, що набагато вищий рівень, ніж C, і втілювали принципи швидкого розвитку. Тому вони якось перестали навчати Асамблею студентам CS та навчали C як спосіб вираження алгоритмів. Повільно, що змінилося за останнє десятиліття, коли C вважається занадто низьким рівнем мови, щоб ефективно засвоїти суть алгоритмів та без надто багато «системних» ноу-хау. Це насправді надзвичайно важливо, оскільки фокус навчальної програми CS повинен бути більше "теоретичним", ніж практичним, і кожен раз, коли хтось хоче написати алгоритм, якщо він / вона замикається з розподілом пам'яті та арифметикою вказівника, тоді ви не отримаєте де завгодно.
Навіть сьогодні, якщо ви перебуваєте в програмі Masters CS, вам доведеться виконати певні "Системні" вимоги (як мінімум в США, і це не має сильно відрізнятися для американських університетів), що потребує студентів, щоб мати змогу програмувати додатки на рівні систем та в деяких випадках настільки глибокий, як злом рівня ядра, щоб фактично пройти вимоги. Тож, хоча C не є дефакто-мовою, яку викладають у школах, вона доречна, якщо ви хочете спеціалізуватися на таких системах, як «Високопродуктивні обчислення» чи подібних нішах.
Я також хотів би зазначити ще один момент - C вимагає великої дисципліни, щоб виправити все, тоді як мови, такі як Java, трохи розслаблені щодо таких обмежень. Це полегшує проведення курсів, не вимагаючи, щоб RA / TA запускали GDB для налагодження програми студента :)
Я думаю, що значна частина цього полягає саме в тому, що використовується в галузі.
У моїй програмі CS була Консультативна рада з питань промисловості, яку складали вищі співробітники місцевих технічних та космічних компаній, і вони багато вкладалися в навчальну програму. Вступні класи CS відмовили Паскаля на користь C року, коли я розпочав (1986), значною мірою за бажанням IAB. Аналогічно, на деяких курсах вищого рівня викладалося Ада, оскільки місцеві аерокосмічні компанії повинні були використовувати його для роботи в галузі наукових досліджень.
Зараз Java досить всюдисуща, особливо зараз, коли пристрої Android вилітають. Це смокче з дидактичної точки зору, але тоді це зробив і С.
Тому що вони сподіваються, що менше студентів не зможуть пройти курс, що саме по собі НЕМАЄ ІМХО. Можливо, одна з причин того, що майже ніхто більше не сприймає університетських ступенів серйозно, принаймні тут.
Java занадто проста мова, і не вчить ПК мати парадигму обмежених ресурсів. У той же час змушує «думати нічого, що не можна вирішити черговим шаром абстракції».
Так, це добре для концепцій ООП та проблем із іграшками, але вчить підходити до проблем з неправильного кута. Тут використовуйте акуратну конструкцію, решту прикрутіть.
Але академії відомі тим, що мріють про AI, OWL та інші технології іграшок. Поки вони продовжують досліджувати подібні речі, іноді хтось також вигадує щось дивовижне, але якщо ти хочеш бути хорошим розробником, мусиш це навчитися самостійно.