РЕДАКТИРОВАТЬ: Этот вопрос на первый взгляд, кажется, бьет Java, и я думаю, на данный момент это немного. Тем не менее, я хочу подчеркнуть, что любой отдельный язык выбирается как единый конец, который будет решением всех проблем. Я использую Java, поэтому мне пришлось побеждать здесь, но я не намеренно разрываю Java на новый :)
Я не люблю Java в большинстве учебных заведений. Я не говорю, что язык сам по себе плохой - у него есть несколько чрезвычайно желательных аспектов, и, самое главное, возможность работать без перекомпиляции на большинстве платформ. Ничего плохого в использовании языка для вашего следующего приложения ^ TM. (Не то, что я лично сделал бы, но это больше, потому что у меня меньше опыта с этим, а не то, что дизайн плохой)
Я думаю, это пустая трата, что курсы высокого уровня CS преподаются с использованием Java в качестве языка. Слишком многие из моих сокурсников не могут программировать напрасно, потому что они не знают, как работать в мире без сбора мусора. Они принципиально не понимают машины, для которых они программируют. Когда кто-то может работать за пределами мира, где собирается мусор, он может работать внутри него, но не наоборот. GC - это инструмент, а не костыль. Но то, как оно используется для обучения студентов-информатиков, является опорой.
Информатика не должна преподавать целый набор курсов, предназначенных для одного языка. Студенты уходят с идеей, что весь хороший дизайн - это идиоматический Java-дизайн, и что объектно-ориентированный дизайн - это единственно верный путь, то есть единственные способы, которые могут быть выполнены. Другие языки, по крайней мере один из которых не является языком для сбора мусора, должны использоваться в обучении, чтобы дать выпускнику лучшее понимание машин.
Это смущение, что кто-то с докторской степенью в CS из уважаемого учреждения не может запрограммировать свой выход из бумажного пакета.
Хуже всего то, что когда я общаюсь с профессорами CS, которые действительно понимают, как все работает, у них возникает такое чувство, что мы оказываем плохую услугу нашим студентам, делая все на Java. (Обратите внимание, что вышеперечисленное было бы таким же, если бы я заменил его на любой другой язык, обычно проблема заключается в использовании одного языка, а не самой Java)
В целом, я чувствую, что больше не могу уважать какую-либо степень - когда я не вижу, чтобы окружающие могли программировать выход из проблем fizzbuzz.
Почему / как так получилось?
источник
Ответы:
Это не проблема Java, это проблема обучения. Не знание, как программировать, не является ошибкой языка, это ошибка студентов. То же самое касается всех ваших проблем, GC, базовых знаний о машинах, так сказать, как все работает "под капотом".
Ваше главное недовольство по поводу сбора мусора слегка меня сбивает. Если вы не занимаетесь сборкой мусора на C или C ++, это, как правило, очень хорошо и не является проблемой. Вы бы предпочли, чтобы они все изучали сборку? Строгие языки высокого уровня очень полезны для обучения. Он дает вам гибкость библиотек, пакетов и других тонкостей, когда вам это нужно, без какого-либо запутанного языкового «сахара», присутствующего в большинстве других языков более высокого уровня (PHP, Ruby, Python, Perl).
источник
Университеты действительно делают это? Или это просто восприятие, которое люди получают, когда получают плохого кандидата на собеседование?
Я получил степень бакалавра в области образования 4 года назад, и хотя во вступительных классах использовалась Java, после этого это не особо подчеркивалось. Вдобавок ко всему, основные обязательные курсы требовали от вас изучения Java, C, C ++, SML (функциональный язык программирования), ассемблера, matlab и CAST (язык описания схем). Это не учитывает все математические и теоретические курсы по КС и, конечно, полдюжины факультативных курсов по КС, которые открыли бы для вас еще больше. От разговоров с друзьями в разных университетах было совсем не похоже на то, что они делали.
Если есть университеты, которые преподают исключительно Java, то это действительно трагедия. Не потому что Java плохая, а потому что это всего лишь один из многих инструментов, который должен быть доступен программисту. Разработчик, который знает только Java, эквивалентен плотнику, который знает только, как использовать молоток. Однако мне трудно поверить, что это действительно так, по крайней мере для уважаемых университетов. Я подозреваю, что это всего лишь восприятие от видения плохих кандидатов и обвинения школы в некомпетентности кандидатов, а не в собственной нехватке кандидата / мотивации / любопытстве / профессионализме / и т.д.
источник
Я действительно удивлен такой ситуацией во многих школах. Когда я получил степень CS, у меня была серия языковых курсов, в которые вошли все популярные языки того времени (это было почти 40 лет назад): ассемблер (Univac 1108 и MIX), FORTRAN IV, SNOBOL4, COBOL, Lisp и Алгол 68. Я не могу представить, чтобы мне преподавали только один язык. Или как я мог оценить, что компиляторы должны были сделать, не написав несколько ассемблерных программ.
Мы использовали Algol и FORTRAN для большинства курсов по данным и алгоритмам. Мне бы хотелось проводить больше времени с Лиспом - вместо этого у нас было только введение, и теперь я пытаюсь заново изучить некоторые концепции. Мы использовали SNOBOL4 для написания синтаксических анализаторов - и его сопоставление с шаблоном с возвратом назад создало хорошую основу для дальнейшей работы библиотек регулярных выражений, включенных во многие современные языки.
Это введение в полдюжины языков вызвало во мне интерес, который продолжается до сих пор.
источник
Чтобы узнать реальную причину, вам нужно будет спросить людей, которые управляют этими учреждениями (и даже тогда они могут не сказать вам).
Несколько возможных причин (и я здесь никого не защищаю и не обвиняю, просто догадываюсь):
Вы можете сделать вещи в Java
Ява это язык общего назначения и как таковой может быть использован для решения многих проблем.
Многие учителя понимают Java
Трудно учить язык, который ты не понимаешь
Java популярна
Это означает, что есть много ресурсов Java - книги, активное сообщество, библиотеки кода и т. Д.
Java это просто
Вам не нужно понимать много вещей низкого уровня или теории, чтобы делать Java. Вы можете не делать это хорошо , но, по крайней мере, вы можете добиться цели.
Ява распространена
Вы можете запустить его более или менее на что угодно.
Есть вакансии для программистов на Java
Java требует много работы - учителя должны готовить студентов к реальному миру.
Есть ограниченное время
На многих курсах нет времени для преподавания нескольких языков, теорий, понятий низкого уровня и т. Д.
Это то, что хотят студенты
Многие студенты уже слышали о (и даже использовали) Java. Им нравится, потому что это знакомо.
источник
Это то, что индустрия просила. Был нехватка разработчиков Java, поэтому школы начали создавать их. Компании получили разработчиков, которые могут начать работу, как только они войдут в дверь.
Во всяком случае, язык не имеет значения. Они могли бы преподавать язык не-GC и по-прежнему создавать плохих программистов. Использование языковых школ - это деталь реализации. Школы должны учить понятиям. Если это не так, то проблема в школе, а не в языке, на котором они учат. Тот факт, что кто-то не знает, что такое указатель, не означает, что он не может быть эффективным программистом.
В любом случае, GC - это путь в будущее.
источник
Мотив лени и прибыли. Java получает большинство людей на 80% пути, с 20% усилий. Однако, это часто приводит к тому, что кодировщики вуду "monkey see monkey do" не имеют глубокого понимания происходящего и не могут копать глубже, чем инструменты высокого уровня.
Обучение C / C ++ правильно - сложная задача. Даже если все сделано хорошо, многие не будут полностью понимать концепции низкого уровня, такие как указатели (есть исследования по этому вопросу). Более того, это не кажется актуальным на рынке труда.
источник
Я в основном согласен, но в определенной степени.
Если вы хотите преподавать CS, курс сосредоточен на структурах данных или алгоритмах. Избавление от ненужных вещей - это хорошо. Вы не хотите, чтобы студенты имели дело с понятием низкого уровня при изучении понятий высокого уровня.
С другой стороны, материал низкого уровня также должен преподаваться. Просто так мы получаем больше универсальных программистов.
источник
Как всегда, это вопрос того, чему ты хочешь научить и сколько времени у тебя на это нужно.
Работа в Java означает, что вам не нужно иметь дело с случайными указателями и free / malloc. Это означает, что гораздо меньше трудно найти ошибок.
Это не означает, что вы не должны изучать базовую машину - которую вы должны быть хороши в торговле - но, возможно, вам следует выбрать правильный инструмент для работы. Алгоритмы высокого уровня, возможно, не лучшая тема для курса ассемблера.
источник
Не слишком ли много просить, чтобы их научили тому, как на самом деле работают компьютеры ? Для меня не имеет смысла, что любой план курса CS не будет включать в себя что-то из операционных систем и компьютерной архитектуры. Я не говорю, что вы должны иметь возможность проектировать компьютер на обратной стороне конверта, но общий обзор ставит все языки в соответствие. Я имею в виду, Java работает в виртуальной машине!
источник
Честно говоря, я не думаю, что вы должны терять уважение ко всем степеням, особенно к CS, потому что единственным языком, который преподается, является Java.
Любой приличный комп. Научный студент понимает, что его степень по КС - не более чем лист бумаги, и что реальные знания будут получены из личных проектов и личного обучения. Я хотел бы думать, что хорошие студенты знают, что им нужно знать C и научиться делать что-то в Linux / Unix, а также научиться НЕ держать свои руки в современных языках.
источник
Я не вижу проблемы с использованием Java. Самая большая проблема (как вы упомянули) - это когда университеты преподают императивное программирование как лучший и единственный способ решить все ваши проблемы. Это очень далеко от истины. Например, вместо того, чтобы использовать три императивных языка (или даже хуже одного и того же языка) для трех разных курсов, они должны использовать три разные парадигмы программирования. Пример - Java (императив), Prolog (декларативный) и Haskell (функционал).
Что касается того, почему это происходит, я думаю, что это комбинация (1) политики - председатели не являются открытыми или не имеют личных выгод / спонсоров, и (2) лень - профессора когда-то были студентами, и они преподают все, что знают или любят.
источник
Кальвин колледж в Гранд-Рапидс Ми Когда они перешли с Java на Python для вводных классов программирования, профессор в недоумении сказал группе из нас ближе к концу своего семестра: «Многие из них могут программировать, это невероятно». Его изумление было в отличие от предыдущего опыта с Java. Это не делает Java плохим языком, просто его трудно подобрать с нуля. Я бы сказал то же самое о C, C ++ или любом языке, который требует глубокого знания схем или типов выделения памяти.
источник
Я получил степень в области компьютерных систем, поэтому я изучал сборку, микропроцессоры, VHDL, что такое логические элементы и как их создавать, я изучал электрические схемы, операционные усилители, фильтры нижних частот, амплитуду Модуляция, построенная схема в лаборатории, которая будет звучать как телефонная клавиатура, перепутанная с логическим анализатором, взяла несколько уроков физики. Со стороны Linux - я перекомпилировал ядро раньше, написал крошечный драйвер устройства и домашнюю файловую систему.
Но потом я понял, что мне нравятся более высокоуровневые вещи гораздо больше. Я предпочитаю Python над C. Мне нравится C #, и я люблю сборщик мусора. Я люблю математику, алгоритмы и структуры данных, но я не особо люблю указатели - я могу с ними связываться; Я просто не хочу.
Итак, вы думаете, что университет должен учить больше C, меньше Java. Кто-то думает, что они должны учить всему на Схеме. Спольский возьмет оба.
Да, это правда, что высшее образование - это просто лист бумаги, но «не позволяйте школьному образованию мешать вашему образованию». Всегда есть Википедия, Переполнение стека, Coursera.org и т. Д. Похоже, традиционные университеты станут менее важными.
Если бы я мог учиться на всех курсах, я бы пошел в другую школу, я бы не изучал электротехнику, а только математику, CS + минор по физике и французскому языку. Поцарапать по-французски; Я должен был учиться за границей в Швейцарии и выучить 5 естественных языков в то время как в нем. Я также вернусь и найду человека, который бы убедил меня в том, что я обязательно должен взять вступительное слово на уроках экономики в колледже, чтобы выжить в реальном мире, и ударить его по голове своей коллекцией книг Милтона Фридмана (только немногие книги на тему экономики, которые я читаю, которые не сосут). Я также не стал бы платить деньги за книгу Freakonomics 1 или книгу о языке Perl.
Оглядываясь назад, я бы многое сделал по-другому. Все, что я могу сейчас сделать, и я рекомендую это вам, это выбрать свое собственное приключение: http://www.codinghorror.com/blog/2008/03/choosing-your-own-adventure.html
Оглядываясь назад, я бы уже заработал на фондовом рынке 100 миллиардов долларов, и я бы вложил их в исследования рака, я бы нанял ученых, чтобы избавить мир от пластиковых отходов; Я бы пожертвовал достаточно денег на кампанию Рона Пола, чтобы война на Ближнем Востоке была более 3 лет назад.
Признайте сейчас, что вы никогда не вернете свое время, поэтому старайтесь тратить его с умом.
источник
Несколько лет назад я где-то читал, что в Великобритании было принято решение Java, чтобы привлечь больше студентов к программированию. Очевидно, это было проще для мозга из-за отсутствия неприятных указателей и управления памятью и т. Д. Я думаю, что это причина, по которой Python быстро воспринимается как новый «инструмент обучения». Я бы придерживался мнения, что ваш типичный универкурс не сделает вас программистом. Все, что он должен сделать, это вооружить вас определенным количеством знаний и подготовить вас к программированию. День, когда можно назвать себя программистом, обычно наступает довольно много времени после универа, и когда наступит это время, указатели, сборка мусора и парадигмы программирования, отличные от ООП, не должны быть проблемой.
источник
Почему используется Java?
Три причины:
Java использует синтаксис в стиле C. Многие программисты знакомы с ним, поэтому он сокращает кривую обучения.
Деньги были потрачены на продвижение Java как крутого и современного. Но по сравнению с Лиспом, ява живет в каменном веке.
JVM. JVM - это единственная классная вещь в Java, которая является законной, а не просто рекламной шумихой. Хотя JVM заслуживает похвалы как платформа для запуска программ, она сама по себе не заслуживает существования языка Java. Вы можете теоретически и практически скомпилировать много разных языков для JVM.
источник
Ваш вопрос поддерживает выводы другого человека, который написал статью о том, что Java настолько крута, но недостаточно тяжела для научных вычислений. Я думаю, что он должен просто использовать Big Decimal со всеми его точными значениями, NAN и т. Д. И продолжать с этим.
Я хочу жить только в автоматическом мире мусора. Его полезнее, чище, аккуратнее, эстетичнее, он предотвращает потерю денег на расходы на здравоохранение, более желателен - не нужно помечать что-либо как нежелательное - просто путем разыменования его или установки в ноль или когда я выхожу из области видимости, предмет автоматически получается помечен для сбора мусора ..
Хорошо, теперь я говорю только о Java, но было бы очень полезно, если бы это работало и в реальном сценарии мусора. Ява пишется однажды, запускается в любом месте, что достаточно для меня, чтобы использовать его в качестве языка в школах. Отсутствие утечек памяти и то, что им нравятся счастливые программисты, которые не хотят тратить время на маркировку каждого объекта, который они используют, и перестают использовать его сами по себе - хорошая логика для Java
У Java есть указатели - мы называем их ссылками .. String s1 = "Hello"; String s2 = "Hello"; String s3 = new String ("Hello");
s1 и s2 будут указывать на один и тот же объект String - по ссылке s1 == s2, s1.equals (s3), но s1 == s3 является ложным, потому что s3 - это новый ссылочный объект - это арифметика ссылок Java, и я Понимаю все это, извините, я не хочу, чтобы меня помечали как человека, который не понимает сложностей арифметики указателей из C или C ++.
источник