Ява часто встречается в научных кругах. В чем причина этого?
real
мире, не приносит пользы студентам или компаниям, которые хотят нанять студентов.
Ява часто встречается в научных кругах. В чем причина этого?
real
мире, не приносит пользы студентам или компаниям, которые хотят нанять студентов.
Ответы:
В некоторых университетах есть кто-то, кто достаточно хорошо знает, что многие (если не большинство) решения зависят от его симпатий, антипатий, мнений, вкуса и т. Д. Например, в штате Техас A & M работает Бьярн Страуструп; Вероятно, никого не удивляет, что в их учебной программе делается акцент на C ++.
Хотя большинство университетов немного отличаются. Во-первых, решения часто принимаются гораздо больше в пользу преподавателей, чем студентов. Самый большой критерий во многих случаях - «какой язык требует наименьших усилий с нашей стороны?» Большинство из них также осторожны в своей лени - им нужен не только язык с наименьшим количеством продвинутых концепций, но также и тот, который (например) является самым медленным для инноваций, обновления или внедрения чего-то нового.
Во-вторых, большинство решений принимаются комитетом. Это означает, что окончательное решение редко (если вообще когда-либо) было тем, чего на самом деле хотел кто-то, - именно то, что наименьшее количество членов комитета (особенно тех, кто оказал наибольшее влияние) считало особенно нежелательным. Это как выбрать вкус мороженого. Один действительно любит клубнику, но другой имеет аллергию на клубнику. Другой действительно любит шоколад, но кто-то другой не может этого вынести. Еще один думает, что ромовый изюм - это здорово, но двое других беспокоятся, что упоминание «рома» будет интерпретировано как поощрение злоупотребления алкоголем - так что в итоге они получат ваниль, хотя это не то, чего на самом деле кто-то хотел.
Наконец, даже несмотря на то, что это обычно идет вразрез с большинством того, что предыдущие два критерия производили в изоляции, они обычно должны (или, по крайней мере, хотят) рассматриваться как отвечающие потребностям промышленности.
Ява является пересечением этих трех:
Обратите внимание, что я на самом деле не говорю (например), что о Java больше ничего не нужно знать, кроме самого базового понятия о том, что такое ООП, - только то, что это все, что нужно для того, чтобы выполнить приемлемую работу по обучению этому.
Я изучал информатику в начале девяностых, прямо перед выходом Java. Подход, которого придерживались наши профессора, заключался в следующем.
Первый год: вводный курс по программированию и алгоритмам на Паскале. Почему Паскаль? Потому что это чистый язык, предназначенный для обучения концепциям программирования без средств взлома. Конечно, мы, студенты, знали, что самым популярным языком в то время был C и что появился новый язык с растущей популярностью: C ++. Поэтому мы все время читали и обсуждали эти языки и выполняли небольшие проекты, используя их самостоятельно. Идея была такова: в классе мы делаем серьезную теорию (Паскаль), а дома мы учимся взламывать (C). :-)
На втором курсе у нас был курс по операционной системе, на котором нас попросили выполнить упражнения на языке C и сборке. Профессор не дал нам полный курс по C (всего несколько уроков), потому что (1) у нас уже был курс по программированию в течение первого года и (2) он сказал, что каждый ученый, который знает концепции программирования, должен уметь читать книги и изучать новый язык программирования. Курс прошел довольно гладко, и мы все сочли нормальным, что C и сборка - это практические темы, которые вы изучаете сами или обсуждаете в коридоре с другими студентами, но не стоит делать курс по ним.
В течение третьего года у нас был курс по языкам программирования, на котором мы изучали различные парадигмы языков программирования (императивные, функциональные, логические, объектно-ориентированные), изучали общие концепции и методы реализации, а также пересматривали основные языки программирования (Pascal, C, Modula2, Simula, Lisp, C ++, Пролог). Наш профессор сказал нам в начале курса: вы не должны оценивать этот курс, думая о том, сколько языков программирования вы знаете в конце курса, а скорее обо всех общих понятиях, которые вы изучили, как они связаны друг с другом, для чего они хороши, как они используются на каких языках. Затем изучение конкретного языка - это просто чтение книги, просмотр существующего кода, попытка использовать его в конкретном проекте и так далее.
Я нашел этот подход очень уместным и эффективным. Я не думаю, что университет должен быть нацелен на подготовку хороших программистов, а скорее на то, чтобы дать хорошие знания, которые позволяют понимать языки программирования и программирования. Если вы станете хорошим программистом, это будет побочным эффектом. Сейчас я рассматриваю возможность подать заявку на работу, где требуется Ада, и меня это не пугает, хотя я никогда раньше не занимался серьезным программированием в Аде.
Возвращаясь к вопросу обучения Java. Я предполагаю, что Java часто используется для обучения, потому что она достаточно нейтральна и позволяет объяснить принципы программирования с использованием языка, который также близок к миру промышленности.
Лично я все еще использовал бы Pascal или подобный язык для первого курса, потому что это позволило бы мне различать управляющие структуры и структуры данных, которые в Java / объектно-ориентированных языках тесно интегрированы. Так что, на мой взгляд, Паскаль позволит более постепенно знакомиться с основными понятиями программирования.
Кроме того, компьютерный ученый (и хороший программист) должен знать об основных механизмах / структурах среды выполнения, таких как стек, куча, передача параметров, распределение памяти, указатели или как реализовать абстрактные типы данных без использования встроенных средств язык (списки, множества и т. д.). Java отнимает большую часть этого у программистов (это, конечно, хорошо), но новичок должен узнать об этом. Может быть, после первого курса по программированию на Java следует также пройти более общий курс по понятиям языков программирования.
Это всего лишь мой опыт и мнения.
Я был в школе, когда появилась Java. И мой университет почти изменился за одну ночь. Люди были в восторге от Явы в академических кругах. Когда он вышел, я был младшим, и ко времени моего старшего года почти все академические круги быстро переходили к изменению своей учебной программы. Не только в моем университете, но и везде. Это было действительно так быстро. Нашим вторым вводным курсом был Паскаль, и он быстро перешел на Java менее чем за год. Почему они конвертировали так быстро? Две большие причины.
Одни ученые хотят преподавать теорию и алгоритмы. Лучше всего использовать языки, облегчающие изучение тех алгоритмов, которые не требуют большого опыта работы: Scheme, Python, Java, Smalltalk и т. Д. Чем больше язык мешает, тем больше вы отвлекаетесь от изучения реальных алгоритмов. В то время языки сценариев считались гражданами второго сорта работодателями, считая их дешевыми, быстрыми и грязными. Академики видели в них больше подражателей, но то, что хотят работодатели, влияет и на академиков.
Это подводит нас к следующей причине. Работодатели хотят определенного языкового опыта, и в то время это был C / C ++. Но, C / C ++ требует большого опыта для изучения, и у него много угловых случаев, и если и то или иное отвлекает. Мы изучали курсы по C / C ++, но не на более низких уровнях. В то время работодатели злились на программы CS, потому что студенты не были гуру C / C ++.
Ява пронизывала всю индустрию почти так же быстро, как и научные круги. Итак, наконец, академия получила то, что хотела. Язык высокого уровня, который было легче выучить, и язык, который хотели работодатели. Это было слишком прекрасно. У меня был друг, который вернулся в академию, возможно, через 3 года после моего отъезда, и он сказал, что вы можете найти книгу по Java по каждому предмету по CS. Вот так быстро Java овладела научными кругами.
Лично я думаю, что Java не ослабевает в CS, я думаю, что это действительно было хорошо, потому что студенты могут изучать CS, участвовать в Open Source и находить работу, даже когда они учатся в школе. Я все еще считаю, что вы должны изучать много языков в качестве студента CS, и это не должно быть просто Java. Но, если бы они все использовали Python, Джоэл тоже ненавидел бы Python.
Для этого есть несколько причин, в том числе:
Обратите внимание, что есть ряд школ, которые преподают C # по тем же причинам. Есть еще много причин, некоторые из которых более специфичны для отдельной школы. По сути, Java стала объектно-ориентированной "Бейсик" прошлых лет.
*
синтаксиса, но его будет очень сложно использовать без базового понимания указателей.
Мне нравится пост Джоэла Спольски под названием «Опасность школ Java» . Я думаю, что Берин Лорист прав в том, что это упрощает круговую схему и также применимо к реальному миру.
Я много раз слышал следующее: «Степень информатики - это не степень для изучения программирования, а для изучения теории». Язык не обязательно должен иметь значение (хотя он не должен мешать), пока теория изучается. Ява является относительно простым языком, и это позволяет тратить больше времени на изучение теории, лежащей в основе всего. Это одна из причин, по которой MIT использует Scheme (так я слышал).
Многие из приведенных выше ответов являются хорошими, но они что-то пропускают.
Java - это мультиплатформенный язык. Один студент может использовать свой Mac, другой - ее компьютер, а другой - ее учетную запись Unix. Тот же код будет делать то же самое. Подумайте, насколько легче поддержать и учителя, и ИТ-отдел школы.
Это было реальное значение Java, когда оно вышло. Шутка была «Код один раз, везде отладка», но это действительно выводит из уравнения аппаратные средства и операционные системы.
Я слышал, профессора говорят, что они используют Java для обучения, потому что:
Лично я рад, что взял CS в Беркли, когда они использовали Scheme для обучения. Хотя я не понимал, насколько элегантным он был на самом деле, до нескольких лет спустя.
Немного фона
Я взял единственный класс Java, предлагаемый в нашей школе. Это было в конце 90-х и в начале 2000 года. Ява росла, но почти не взлетела. Исходя из многих разработок на C, я был немного разочарован всем необходимым кодом для запуска и запуска Java. Я не мог сосредоточиться на своей задаче. Я не мог просто открыть файл с «открытым». Я должен был определить класс, а затем импорт и т. Д. И т. Д.
Я занимался вычислительной техникой, поэтому сначала взял программирование на ассемблере, а затем на C, а затем на C ++, Scheme и еще один курс Java. В основном это была C-ориентированная школьная программа. Класс алгоритмов преподавался с использованием C.
Когда я вошел в индустрию, Java явно был доминирующим игроком. Возможно, это был единственный игрок при переходе от серверных систем COBOL к веб-приложениям на Java. За первые 2000 дней Java добилась огромных успехов в мире бизнеса.
В то же время я не знал всех фреймворков Java, но знал, как программировать и адаптироваться к среде Java. Если бы я проходил учебные курсы по хорошим стандартам Java-кодирования, я бы, возможно, начал с лучшего стиля Java или знания экосистемы Java.
Оглядываясь назад, я не думаю, что это имеет значение.
Чтобы ответить на ваш вопрос: почему мы изучаем Java в университете?
Java следует изучать, но не использовать во всех курсах:
Вы должны изучать Java в какой-то момент в колледже, если вы изучаете информатику. Это популярно в деловом мире. Вы должны изучить Java и, возможно, C #. Я бы АБСОЛЮТНО не учил бы 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) следует преподавать как первые языки программирования. Структурированный и модульный Паскаль должен быть первым, даже если он звучит старым и устаревшим.
Многие люди думают, что мы должны учить людей объектно-ориентированному программированию или функциональному программированию сразу, просто потому, что это «обман» или «тренд».
Я изучаю Структурированный Паскаль как маленькую версию «Объектно-ориентированного программирования», а не как нечто подобное. Я вижу структурированную программу как один маленький объект.
После этого я предлагаю продолжить функциональные языки и Object Pascal.
А позже C, C ++, C #, VB.Net, Java.
Основные причины, по которым я не люблю Java или C # как первый язык программирования, заключаются в том, что в них есть понятия «указатели», «указатели на объекты» и «сами объекты» («ссылки»).
Я считаю, что студенты должны иметь в виду различия и сходства между этими понятиями. Сравнение объектов Strings в Java - хороший пример такой странности:
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 года. Я был на последнем уроке Си в моем университете.
В С ++ было слишком много возможностей, чтобы не запутать новичка. (И это все еще делает. И планирует добавить некоторые.)
.NET не созрела и даже более дорогим , чем сегодня.
Цель C была устаревшей, и Apple использовала ее ниже уровня радаров (вокруг не было iPhone )
Я чувствую себя обязанным добавить к ответам здесь, поскольку я действительно не вижу ни одного из этих ответов, фактически покрывающих мою точку зрения.
Я программист-любитель. Я был далеко впереди, когда дело дошло до «компьютеров» и «программирования». Я закончил бакалавриат - бакалавриат - в 2007 году, а магистратуру - через два года - 2009. Я работал с множеством языков, включая ассемблер, QuickBASIC, C, C ++, Java, PHP, Perl, Python, BASH Scripts, Javascript, COBOL и т. Д. ,
ИМХО, язык, который используется для обучения студентов программированию, является показателем времени, в которое мы сейчас живем. Например, в 1980-х ассемблер был языком низкого уровня, а язык С считался языком высокого уровня.
В течение 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 слишком прост для языка и не учит, что у ПК ограниченная парадигма ресурсов. Хотя в то же время заставляет мыслить «нет ничего, что не может быть решено с помощью другого уровня абстракции».
Да, это хорошо для концепций ООП и проблем с игрушками, но учит подходить к проблемам с неправильной точки зрения. Используйте аккуратную конструкцию здесь, винт остальное.
Но академические круги известны тем, что они мечтали об искусственном интеллекте, сове и других игрушечных технологиях. Хотя они продолжают исследовать такие вещи, иногда кто-то тоже изобретает что-то удивительное, но если вы хотите быть хорошим разработчиком, вы должны изучить это самостоятельно.