Для Java IDE нет затрат на лицензирование, как для экосистемы Microsoft. Больше ваших огромных плат за обучение в университете.
Mjhilton
16
Какая? Вы можете получить Microsoft Visual Studio Express бесплатно.
quant_dev
12
На самом деле большую часть времени вы можете получить Visual Studio бесплатно, если вы студент, а также любое другое приложение Microsoft.
Эрин
5
потому что вы хотите зарабатывать деньги, когда вы закончите правильно? Тратить 4 года на изучение вещей, которые никто не использует в realмире, не приносит пользы студентам или компаниям, которые хотят нанять студентов.
5
@JarrodRoberson, только некоторые компании используют Java, университеты должны действительно обучать вас более широкому разнообразию языков, чтобы вы лучше подготовились к реальному миру. Вы не хотите застрять, будучи просто программистом на Java, когда существует так много других способов мышления и развития.
CaffGeek
Ответы:
73
В некоторых университетах есть кто-то, кто достаточно хорошо знает, что многие (если не большинство) решения зависят от его симпатий, антипатий, мнений, вкуса и т. Д. Например, в штате Техас A & M работает Бьярн Страуструп; Вероятно, никого не удивляет, что в их учебной программе делается акцент на C ++.
Хотя большинство университетов немного отличаются. Во-первых, решения часто принимаются гораздо больше в пользу преподавателей, чем студентов. Самый большой критерий во многих случаях - «какой язык требует наименьших усилий с нашей стороны?» Большинство из них также осторожны в своей лени - им нужен не только язык с наименьшим количеством продвинутых концепций, но также и тот, который (например) является самым медленным для инноваций, обновления или внедрения чего-то нового.
Во-вторых, большинство решений принимаются комитетом. Это означает, что окончательное решение редко (если вообще когда-либо) было тем, чего на самом деле хотел кто-то, - именно то, что наименьшее количество членов комитета (особенно тех, кто оказал наибольшее влияние) считало особенно нежелательным. Это как выбрать вкус мороженого. Один действительно любит клубнику, но другой имеет аллергию на клубнику. Другой действительно любит шоколад, но кто-то другой не может этого вынести. Еще один думает, что ромовый изюм - это здорово, но двое других беспокоятся, что упоминание «рома» будет интерпретировано как поощрение злоупотребления алкоголем - так что в итоге они получат ваниль, хотя это не то, чего на самом деле кто-то хотел.
Наконец, даже несмотря на то, что это обычно идет вразрез с большинством того, что предыдущие два критерия производили в изоляции, они обычно должны (или, по крайней мере, хотят) рассматриваться как отвечающие потребностям промышленности.
Ява является пересечением этих трех:
Каждая концепция, которую она воплощает, была хорошо известна к 1980 году. За пределами самого основного понятия о том, что такое ООП, не так много информации.
Это безвкусный, не имеющий запаха, нетоксичный, биоразлагаемый, политически правильный выбор.
Почти единственным другим языком в истории, который существовал так долго и (вероятно) меньше обновлялся, является SQL. Несмотря на то, что они вряд ли можно назвать быстро движущимися целями, COBOL и Fortran все еще вводят инновации в большей степени, чем Java.
Широко используется. Когда вы приступаете к этому, у профессионалов и PHB есть схожие критерии.
Обратите внимание, что я на самом деле не говорю (например), что о Java больше ничего не нужно знать, кроме самого базового понятия о том, что такое ООП, - только то, что это все, что нужно для того, чтобы выполнить приемлемую работу по обучению этому.
отсюда было удалено множество комментариев, так как мнения по этому ответу разделились.
Отображаемое имя
1
FWIW, я предпочитаю ваниль.
Легкость гонок с Моникой
Я подписался, чтобы проголосовать за пользователя
user2445942 20.04.14
22
Я изучал информатику в начале девяностых, прямо перед выходом Java. Подход, которого придерживались наши профессора, заключался в следующем.
Первый год: вводный курс по программированию и алгоритмам на Паскале. Почему Паскаль? Потому что это чистый язык, предназначенный для обучения концепциям программирования без средств взлома. Конечно, мы, студенты, знали, что самым популярным языком в то время был C и что появился новый язык с растущей популярностью: C ++. Поэтому мы все время читали и обсуждали эти языки и выполняли небольшие проекты, используя их самостоятельно. Идея была такова: в классе мы делаем серьезную теорию (Паскаль), а дома мы учимся взламывать (C). :-)
На втором курсе у нас был курс по операционной системе, на котором нас попросили выполнить упражнения на языке C и сборке. Профессор не дал нам полный курс по C (всего несколько уроков), потому что (1) у нас уже был курс по программированию в течение первого года и (2) он сказал, что каждый ученый, который знает концепции программирования, должен уметь читать книги и изучать новый язык программирования. Курс прошел довольно гладко, и мы все сочли нормальным, что C и сборка - это практические темы, которые вы изучаете сами или обсуждаете в коридоре с другими студентами, но не стоит делать курс по ним.
В течение третьего года у нас был курс по языкам программирования, на котором мы изучали различные парадигмы языков программирования (императивные, функциональные, логические, объектно-ориентированные), изучали общие концепции и методы реализации, а также пересматривали основные языки программирования (Pascal, C, Modula2, Simula, Lisp, C ++, Пролог). Наш профессор сказал нам в начале курса: вы не должны оценивать этот курс, думая о том, сколько языков программирования вы знаете в конце курса, а скорее обо всех общих понятиях, которые вы изучили, как они связаны друг с другом, для чего они хороши, как они используются на каких языках. Затем изучение конкретного языка - это просто чтение книги, просмотр существующего кода, попытка использовать его в конкретном проекте и так далее.
Я нашел этот подход очень уместным и эффективным. Я не думаю, что университет должен быть нацелен на подготовку хороших программистов, а скорее на то, чтобы дать хорошие знания, которые позволяют понимать языки программирования и программирования. Если вы станете хорошим программистом, это будет побочным эффектом. Сейчас я рассматриваю возможность подать заявку на работу, где требуется Ада, и меня это не пугает, хотя я никогда раньше не занимался серьезным программированием в Аде.
Возвращаясь к вопросу обучения Java. Я предполагаю, что Java часто используется для обучения, потому что она достаточно нейтральна и позволяет объяснить принципы программирования с использованием языка, который также близок к миру промышленности.
Лично я все еще использовал бы Pascal или подобный язык для первого курса, потому что это позволило бы мне различать управляющие структуры и структуры данных, которые в Java / объектно-ориентированных языках тесно интегрированы. Так что, на мой взгляд, Паскаль позволит более постепенно знакомиться с основными понятиями программирования.
Кроме того, компьютерный ученый (и хороший программист) должен знать об основных механизмах / структурах среды выполнения, таких как стек, куча, передача параметров, распределение памяти, указатели или как реализовать абстрактные типы данных без использования встроенных средств язык (списки, множества и т. д.). Java отнимает большую часть этого у программистов (это, конечно, хорошо), но новичок должен узнать об этом. Может быть, после первого курса по программированию на Java следует также пройти более общий курс по понятиям языков программирования.
Когда я училась в университете в 1-м курсе, мы проводили Аду на курсах программирования (некоторая сборка в курсе компьютерных систем). 2-й год был довольно похожим языком стиля. На третьем курсе нам сказали именно это: «Каждый ученый, знакомый с концепциями программирования, должен уметь читать книгу и изучать новый язык программирования». К концу года мы были самоучками C, C ++, Java и на каком бы языке вы ни делали свой проект (у меня был Python). Это была лучшая подготовка, которую я когда-либо получал к реальному миру, как быстро и на лету учиться.
Эми
(+1) Языки программирования, связанные с Pascal, лучше использовать для обучения программированию, потому что его отец «Никлаус Вирт» тщательно проектирует их для обучения. ;-)
umlcat
@umlcat: Спасибо. Да, я думаю, что хорошо иметь C или C ++, где можно нарушать правила и взламывать. Но прежде чем нарушать правила, вы должны знать, какие правила вы нарушаете. Для этого очень полезно иметь чистый язык программирования, такой как Pascal, чтобы научиться программировать в «идеальном мире». Тогда, по крайней мере, вы знаете, что делаете, когда взламываете. :-)
Джорджио
@ Джорджио: Я думаю, что сначала ученики должны учить Паскаль, а затем C / C ++, а затем и Java. Я имею в виду не только одно или другое, но все они в определенном порядке. Некоторые школы отказываются от преподавания одной в пользу другой. П.Д. Я также работаю на Си и Java. Надеюсь, это поможет ;-)
umlcat
@umlcat: я полностью согласен. Я также добавил бы немного Lisp, Haskell, Prolog: чем больше известных программных парадигм, тем лучше.
Джорджио
10
Я был в школе, когда появилась 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.
Если ваша школа все еще использовала Паскаль в середине 90-х, то они все равно должны были провести капитальный ремонт. Мои первые занятия CS были в Паскале, но это было в 1980 году! Интересно, однако, что это были только вводные курсы - классы верхнего уровня использовали C (для внутренних компонентов ОС), Modula (для разработки компилятора), Prolog, а некоторые выпускные курсы даже использовали Ada. Я не понимаю, почему школы до сих пор не делают этого.
TMN
1
большинство или все еще использовали Паскаль еще в 1995 году, некоторые переехали в Модулу. Мой начал вводить C ++ в 1995 году для старших, а Pascal - для юниоров. Я думаю, что они уже заменили Pascal на Java (им нужен язык низкого уровня, так как большая часть работы связана с взаимодействием с оборудованием, поэтому C ++, вероятно, все еще существует).
jwenting
Мы немного использовали C / C ++ после вводного курса по Паскалю. Пролог, LISP, Scheme, Smalltalk, Assembly использовались в классах среднего уровня. Поскольку важность государственного потребления технологий уменьшилась в 1990-х годах, Ада была постепенно сокращена, и к концу 1990-х годов о ней просто упоминалось. Я думаю, что опасности Java не имеют ничего общего с Java, но связаны с монокультурой и обучением. Сейчас я разработчик Flex, и на прошлой неделе Adobe прекратила свою жизнь, зарабатывая этим на жизнь. Я не волнуюсь, потому что у меня долгая история не использования только одного языка. У меня есть Java, Ruby, Php, Python, к которым можно вернуться.
chubbsondubs
8
Для этого есть несколько причин, в том числе:
Повсеместное распространение на рынке труда - если университеты хотят, чтобы их студенты трудоустраивались (и рекомендуют больше студентов в университет), им необходимо преподавать соответствующие языки.
Упрощает учебную программу
Легче оценивать и легче реализовать свою домашнюю работу в нем.
Сборка мусора, поэтому не нужно учить указатели и ручное управление памятью
Обратите внимание, что есть ряд школ, которые преподают C # по тем же причинам. Есть еще много причин, некоторые из которых более специфичны для отдельной школы. По сути, Java стала объектно-ориентированной "Бейсик" прошлых лет.
Существуют также великолепные книги по Java, в которых представлены ООП, такие как первый объект Java с использованием BlueJ. Однако в C # я не видел таких учебников, которые бы брали вас с нуля и хорошо изучали. Согласен ли ты со мной?
Гома
Я буду. Обучение - очень сложная задача, и учителя все еще учатся тому, как лучше всего преподавать. Вы найдете ряд онлайн-школ, таких как Strayer, придерживающихся C #, а школы кирпича и мортера стремятся к Java. Вероятно, потому что онлайн-школы обслуживают студентов, которые уже работают. Основные книги по программированию могут применяться на любом языке, поэтому есть доступные материалы.
Берин Лорич
«Мусор собран, поэтому не нужно учить указателям и ручному управлению памятью». если вы, как инженер-программист, не знаете об указателях и управлении памятью или не знаете, как они работают, вам не хватает некоторых очень важных знаний.
правостороннее
Java может не иметь *синтаксиса, но его будет очень сложно использовать без базового понимания указателей.
Ден04
@WTP, и именно поэтому Java часто используется для вводных курсов (где ранее использовались Pascal или Modula), а позже вводится C (++).
jwenting
6
Мне нравится пост Джоэла Спольски под названием «Опасность школ Java» . Я думаю, что Берин Лорист прав в том, что это упрощает круговую схему и также применимо к реальному миру.
Я много раз слышал следующее: «Степень информатики - это не степень для изучения программирования, а для изучения теории». Язык не обязательно должен иметь значение (хотя он не должен мешать), пока теория изучается. Ява является относительно простым языком, и это позволяет тратить больше времени на изучение теории, лежащей в основе всего. Это одна из причин, по которой MIT использует Scheme (так я слышал).
@nate C - Да, я не был уверен. Тем не менее, Python довольно прост в освоении. И все же спасибо за ссылку!
Джетти
Я бы полностью облажался со своими учениками, если бы я преподавал в классе. Я бы посоветовал написать свой собственный язык программирования, и вы можете использовать этот язык только на протяжении всего урока.
berlinbrown2
1
@Берлин - Наверное, поэтому ты не учитель :)
Джетти
3
Многие из приведенных выше ответов являются хорошими, но они что-то пропускают.
Java - это мультиплатформенный язык. Один студент может использовать свой Mac, другой - ее компьютер, а другой - ее учетную запись Unix. Тот же код будет делать то же самое. Подумайте, насколько легче поддержать и учителя, и ИТ-отдел школы.
Это было реальное значение Java, когда оно вышло. Шутка была «Код один раз, везде отладка», но это действительно выводит из уравнения аппаратные средства и операционные системы.
Возможно, это объясняет, почему Java выбрана вместо C, C ++ или C #, но Ruby и Python (среди прочих) работают просто отлично кроссплатформенно.
Эрик Уилсон
Хорошая точка зрения. Я считаю, что отделы CS также предпочитают строго типизированные языки по ряду причин. Кроме того, у Java был большой старт в США. Ruby на самом деле не был здесь до 1999 года или позже, и Python был довольно ограниченным, пока не вышел 2.0.
Мэтью Флинн
1
Я слышал, профессора говорят, что они используют Java для обучения, потому что:
использует более новую парадигму (ы) (ООП, некоторые дженерики)
синтаксически очень простой, хотя довольно многословный
нет продвинутых понятий, таких как функции высшего порядка, замыкания, карри или продолжения, которые могут запутать людей, все еще изучающих базовые понятия
для него написано много библиотек
студенты не зацикливаются на утечке памяти, так как есть gc
Лично я рад, что взял 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.
Вот как я могу настроить учебный план:
Вводный курс: схема, Python, язык ассемблера, C (все три)
Алгоритмы Курс: C, Haskell, Python (все три)
Курс операционной системы / Сетевой курс: C / C ++
Разработка графического интерфейса: Java Swing, C ++ на Win32
Объектно-ориентированное программирование: (это сложно, у меня не было бы курса ООП). C ++, Java, C #
Языки, которые я перечислил в моей учебной программе, довольно распространены. Многие школы преподают несколько языков без проблем. В промышленности вы будете использовать много разных языков программирования. Вы будете использовать языки, о которых вы даже не слышали.
Тема Java в школах не является проблемой, если они не хотят полностью оградить вас от Java или не хотят преподавать ТОЛЬКО Java. В обоих случаях школы неоправданны.
(-1) «Язык ассемблера» слишком сложен для «Вводного курса». Я не имею в виду «не учите это», я имею в виду «Мы научим это позже»
umlcat
1
Извините, только длинный скучный ответ:
(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 ++.
Я хотел бы отметить, что невежество не то же самое, что быть «глупым». Люди, «проходящие» Java, могут не знать эти «простые понятия», потому что их не учили. Это не значит, что если им потребуется время, чтобы понять это, они не получат это.
Джетти
0
Переход с C на Java произошел не в то время .
Где-то около 2000 года. Я был на последнем уроке Си в моем университете.
В С ++ было слишком много возможностей, чтобы не запутать новичка. (И это все еще делает. И планирует добавить некоторые.)
.NET не созрела и даже более дорогим , чем сегодня.
Цель C была устаревшей, и Apple использовала ее ниже уровня радаров (вокруг не было iPhone )
Другие проблемы .NET в то время? Нет портативного времени выполнения - не было доступного моно .
ZJR
Нет нейтральности текстового редактора . ( Текстовый редактор войны уродливы, но реальный) и IDE по умолчанию , что делает студенты балуются boilerplating .
ZJR
Кстати, я бы предпочел, чтобы мир пошел по пути Objective C , Apple не была бы единственным ребенком на этом поприще, и даже ее бизнес-модель была бы немного менее безумной.
ZJR
0
Я чувствую себя обязанным добавить к ответам здесь, поскольку я действительно не вижу ни одного из этих ответов, фактически покрывающих мою точку зрения.
Я программист-любитель. Я был далеко впереди, когда дело дошло до «компьютеров» и «программирования». Я закончил бакалавриат - бакалавриат - в 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 слишком прост для языка и не учит, что у ПК ограниченная парадигма ресурсов. Хотя в то же время заставляет мыслить «нет ничего, что не может быть решено с помощью другого уровня абстракции».
Да, это хорошо для концепций ООП и проблем с игрушками, но учит подходить к проблемам с неправильной точки зрения. Используйте аккуратную конструкцию здесь, винт остальное.
Но академические круги известны тем, что они мечтали об искусственном интеллекте, сове и других игрушечных технологиях. Хотя они продолжают исследовать такие вещи, иногда кто-то тоже изобретает что-то удивительное, но если вы хотите быть хорошим разработчиком, вы должны изучить это самостоятельно.
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 - хороший пример такой странности:
В случае (2):
Я думаю, что Java или C # должны преподаваться в школе, потому что они имеют несколько обновленных полезных функций, и в то же время они имеют реальное использование.
источник
Я не могу не согласиться больше. В моем колледже 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 слишком прост для языка и не учит, что у ПК ограниченная парадигма ресурсов. Хотя в то же время заставляет мыслить «нет ничего, что не может быть решено с помощью другого уровня абстракции».
Да, это хорошо для концепций ООП и проблем с игрушками, но учит подходить к проблемам с неправильной точки зрения. Используйте аккуратную конструкцию здесь, винт остальное.
Но академические круги известны тем, что они мечтали об искусственном интеллекте, сове и других игрушечных технологиях. Хотя они продолжают исследовать такие вещи, иногда кто-то тоже изобретает что-то удивительное, но если вы хотите быть хорошим разработчиком, вы должны изучить это самостоятельно.
источник