Почему Ява является языком общения во многих учреждениях? [закрыто]


22

РЕДАКТИРОВАТЬ: Этот вопрос на первый взгляд, кажется, бьет Java, и я думаю, на данный момент это немного. Тем не менее, я хочу подчеркнуть, что любой отдельный язык выбирается как единый конец, который будет решением всех проблем. Я использую Java, поэтому мне пришлось побеждать здесь, но я не намеренно разрываю Java на новый :)

Я не люблю Java в большинстве учебных заведений. Я не говорю, что язык сам по себе плохой - у него есть несколько чрезвычайно желательных аспектов, и, самое главное, возможность работать без перекомпиляции на большинстве платформ. Ничего плохого в использовании языка для вашего следующего приложения ^ TM. (Не то, что я лично сделал бы, но это больше, потому что у меня меньше опыта с этим, а не то, что дизайн плохой)

Я думаю, это пустая трата, что курсы высокого уровня CS преподаются с использованием Java в качестве языка. Слишком многие из моих сокурсников не могут программировать напрасно, потому что они не знают, как работать в мире без сбора мусора. Они принципиально не понимают машины, для которых они программируют. Когда кто-то может работать за пределами мира, где собирается мусор, он может работать внутри него, но не наоборот. GC - это инструмент, а не костыль. Но то, как оно используется для обучения студентов-информатиков, является опорой.

Информатика не должна преподавать целый набор курсов, предназначенных для одного языка. Студенты уходят с идеей, что весь хороший дизайн - это идиоматический Java-дизайн, и что объектно-ориентированный дизайн - это единственно верный путь, то есть единственные способы, которые могут быть выполнены. Другие языки, по крайней мере один из которых не является языком для сбора мусора, должны использоваться в обучении, чтобы дать выпускнику лучшее понимание машин.

Это смущение, что кто-то с докторской степенью в CS из уважаемого учреждения не может запрограммировать свой выход из бумажного пакета.

Хуже всего то, что когда я общаюсь с профессорами CS, которые действительно понимают, как все работает, у них возникает такое чувство, что мы оказываем плохую услугу нашим студентам, делая все на Java. (Обратите внимание, что вышеперечисленное было бы таким же, если бы я заменил его на любой другой язык, обычно проблема заключается в использовании одного языка, а не самой Java)

В целом, я чувствую, что больше не могу уважать какую-либо степень - когда я не вижу, чтобы окружающие могли программировать выход из проблем fizzbuzz.

Почему / как так получилось?


9
Не беспокойся Дайте Oracle половину шанса, и они исправят ситуацию :) Их судебные процессы против Android и Apache - это только начало изгнания разработчиков. Я преподаю в учреждении, которое восприняло вышесказанное как сигнал к тому, чтобы начать преподавать Python в ожидании будущего рынка.
SamGoody

3
На какие академические параметры вы ссылаетесь? Я нигде не знаю, где студенты CSci должны изучать только один язык. (В прошлый раз, когда я учился в школе, вы могли бы обойтись с C и Scheme, я думаю, если бы вы тщательно выбрали свой основной предмет и классы, но вы бы использовали по крайней мере два разных языка.)
David Thornley

16
Можете ли вы объяснить, как работает ваш кэш L1? Можете ли вы разработать АЛУ? Можете ли вы объяснить уравнения Максвелла? А как насчет термодинамических свойств вашей материнской платы? Не могли бы вы собрать USB-накопитель? Вы ДЕЙСТВИТЕЛЬНО знаете, как работает ваш компьютер? Или вы выбрали уровень абстракции, соответствующий вашим интересам, и пошли оттуда?
MetricSystem

5
Потому что решение о том, что вам нужно понимать управление памятью, чтобы «в общих чертах понять машины, для которых они программируют», является совершенно произвольным уровнем, на котором можно остановиться. Если нет необходимости понимать проблемы, которые вас интересуют, ваше время часто лучше проводить, изучая то, что вас интересует (поскольку ни у кого нет времени, чтобы все изучить). И любой аргумент, который вы приводите в отношении того, почему Java-программистам нужно изучать управление памятью, может быть расширен до бесконечности, пока всем не понадобится знание атомной физики, чтобы «понять» что-либо.
MetricSystem

7
Более того, если у кого-то есть аргументы в пользу соломенного чучела, то это вы, учитывая, что я никогда не слышал об одной CS-программе, которая представляет Java только как язык программирования.
MetricSystem

Ответы:


30

Это не проблема Java, это проблема обучения. Не знание, как программировать, не является ошибкой языка, это ошибка студентов. То же самое касается всех ваших проблем, GC, базовых знаний о машинах, так сказать, как все работает "под капотом".

Ваше главное недовольство по поводу сбора мусора слегка меня сбивает. Если вы не занимаетесь сборкой мусора на C или C ++, это, как правило, очень хорошо и не является проблемой. Вы бы предпочли, чтобы они все изучали сборку? Строгие языки высокого уровня очень полезны для обучения. Он дает вам гибкость библиотек, пакетов и других тонкостей, когда вам это нужно, без какого-либо запутанного языкового «сахара», присутствующего в большинстве других языков более высокого уровня (PHP, Ruby, Python, Perl).


5
Я не говорю, что языки более высокого уровня не должны преподаваться. Но я говорю, что чему-то более низкому уровню (порядка C или Fortran или некоторому другому языку системного программирования) также следует учить. (Переход ниже C менее полезен, потому что ниже этого уровня все, что вы узнаете, будет специфичным для архитектуры одной машины). Я не говорю, что все выпускники CS должны быть хорошими программистами низкого уровня. Но я говорю, что если они столкнутся с проблемой низкого уровня, они не должны распыляться и умирать, как, кажется, делают все ученики вокруг меня.
Билли ONEAL

3
@ Билли: Идти ниже, чем ваш начальный уровень обучения трудно. Я ловлю себя на том, что смотрю код на C ++ / C и немного весело провожу время. Не ожидай чудес, но и ангелов не ожидай. У программистов должен быть драйв, при этом им не хватает того, что они все «разбрызгиваются и умирают» довольно быстро, независимо от уровня проблемы.
Джош К

5
@Josh: Достаточно справедливо, но имхо формальное знакомство хотя бы с одной другой средой программирования должно стать необходимостью для получения степени CS. Степень не говорит «Я понимаю Java», она говорит: «Я понимаю CS». Это не одно и то же, и вы не можете достичь полного понимания CS, используя только Java (или, в данном случае, любой язык). (Кстати, +1)
Билли ONEAL

2
@JoshK: невозможность отладки на низких уровнях и значительно ограниченная способность правильно рассуждать о последствиях кода, который они пишут.
Мейсон Уилер

1
Я знаю программистов, которые только изучали Java и напуганы C ++ или C, потому что им приходится использовать указатели. Я не знаю, можно ли считать того, кто не умеет программировать с помощью указателей, настоящим программистом: в конце концов, все современные компьютеры и среды выполнения по-прежнему основаны на базовой архитектуре, включающей регистры, основную память, стек, кучу. Поэтому я предпочитаю программировать на Java, а не на C ++ (определенно легче добиться цели, если вам не нужно беспокоиться об управлении памятью), но я согласен, что обучение определенно не должно ограничиваться Java.
Джорджио

12

Университеты действительно делают это? Или это просто восприятие, которое люди получают, когда получают плохого кандидата на собеседование?

Я получил степень бакалавра в области образования 4 года назад, и хотя во вступительных классах использовалась Java, после этого это не особо подчеркивалось. Вдобавок ко всему, основные обязательные курсы требовали от вас изучения Java, C, C ++, SML (функциональный язык программирования), ассемблера, matlab и CAST (язык описания схем). Это не учитывает все математические и теоретические курсы по КС и, конечно, полдюжины факультативных курсов по КС, которые открыли бы для вас еще больше. От разговоров с друзьями в разных университетах было совсем не похоже на то, что они делали.

Если есть университеты, которые преподают исключительно Java, то это действительно трагедия. Не потому что Java плохая, а потому что это всего лишь один из многих инструментов, который должен быть доступен программисту. Разработчик, который знает только Java, эквивалентен плотнику, который знает только, как использовать молоток. Однако мне трудно поверить, что это действительно так, по крайней мере для уважаемых университетов. Я подозреваю, что это всего лишь восприятие от видения плохих кандидатов и обвинения школы в некомпетентности кандидатов, а не в собственной нехватке кандидата / мотивации / любопытстве / профессионализме / и т.д.


2
Согласовано. Я только что закончил несколько лет назад, и хотя большинство моих классов преподавалось с использованием Java, было трудно закончить учебу без обучения с использованием C или C ++, и у нас также был курс по языку программирования, который подчеркивал использование Haskell ,
Мипади

В моей степени мы сначала делали Pascal, а затем Java как наш ОО-язык. Тем не менее, в последние 2 года 90% специалистов не заботились о том, какой язык вы используете. Некоторые из нас использовали c / c ++ / ruby ​​/ C # / python / даже haskell, но большинство людей придерживались того, что они знали, java. Только несколько курсов, требующих использования ассемблера / c / c ++, а именно такие вещи, как наш курс по трехмерной графике (необязательно), довольно сильно применяют c / c ++ для opengl. И, разумеется, базовый курс по системам обеспечивает сборку SPARC (потому что мы работали преднамеренно и на низком уровне). Я слышал, что они перешли на Python / C ++ в первый год, хотя ....
Арен

11

Я действительно удивлен такой ситуацией во многих школах. Когда я получил степень CS, у меня была серия языковых курсов, в которые вошли все популярные языки того времени (это было почти 40 лет назад): ассемблер (Univac 1108 и MIX), FORTRAN IV, SNOBOL4, COBOL, Lisp и Алгол 68. Я не могу представить, чтобы мне преподавали только один язык. Или как я мог оценить, что компиляторы должны были сделать, не написав несколько ассемблерных программ.

Мы использовали Algol и FORTRAN для большинства курсов по данным и алгоритмам. Мне бы хотелось проводить больше времени с Лиспом - вместо этого у нас было только введение, и теперь я пытаюсь заново изучить некоторые концепции. Мы использовали SNOBOL4 для написания синтаксических анализаторов - и его сопоставление с шаблоном с возвратом назад создало хорошую основу для дальнейшей работы библиотек регулярных выражений, включенных во многие современные языки.

Это введение в полдюжины языков вызвало во мне интерес, который продолжается до сих пор.


8

Чтобы узнать реальную причину, вам нужно будет спросить людей, которые управляют этими учреждениями (и даже тогда они могут не сказать вам).

Несколько возможных причин (и я здесь никого не защищаю и не обвиняю, просто догадываюсь):

Вы можете сделать вещи в Java

Ява это язык общего назначения и как таковой может быть использован для решения многих проблем.

Многие учителя понимают Java

Трудно учить язык, который ты не понимаешь

Java популярна

Это означает, что есть много ресурсов Java - книги, активное сообщество, библиотеки кода и т. Д.

Java это просто

Вам не нужно понимать много вещей низкого уровня или теории, чтобы делать Java. Вы можете не делать это хорошо , но, по крайней мере, вы можете добиться цели.

Ява распространена

Вы можете запустить его более или менее на что угодно.

Есть вакансии для программистов на Java

Java требует много работы - учителя должны готовить студентов к реальному миру.

Есть ограниченное время

На многих курсах нет времени для преподавания нескольких языков, теорий, понятий низкого уровня и т. Д.

Это то, что хотят студенты

Многие студенты уже слышали о (и даже использовали) Java. Им нравится, потому что это знакомо.


6

Это то, что индустрия просила. Был нехватка разработчиков Java, поэтому школы начали создавать их. Компании получили разработчиков, которые могут начать работу, как только они войдут в дверь.

Во всяком случае, язык не имеет значения. Они могли бы преподавать язык не-GC и по-прежнему создавать плохих программистов. Использование языковых школ - это деталь реализации. Школы должны учить понятиям. Если это не так, то проблема в школе, а не в языке, на котором они учат. Тот факт, что кто-то не знает, что такое указатель, не означает, что он не может быть эффективным программистом.

В любом случае, GC - это путь в будущее.


4
Вам не нужно знать, что такое указатель. Но вы должны быть в состоянии понять концепцию относительно быстро. Отсутствие понимания указателей или понятий, аналогичных указателям, указывает на отсутствие понимания компьютерной науки в целом. Я не говорю, что все выпускники CS должны быть отличными программистами низкого уровня, но я говорю, что они должны по крайней мере иметь концептуальное понимание того, что происходит, когда они получают 4-летний университетский диплом.
Билли ONEAL

1
CS не о программировании.
Хавьер

1
@Javier: Как CS не о программировании? Конечно , есть та ветвь CS, «Теоретическая информатика», которая не о программировании, но по большей части она является о программировании.
Билли ОНил

1
@Billy ONeal: определение в Википедии немного длинное, но часть, которая ближе всего подходит к программированию, это «изучение практических методов их реализации». то есть речь идет не о реализации (программировании), а об изучении методов реализации (алгоритмов, структур, языков и т. д.)
Хавьер

1
@Javier: я думаю, «изучение программирования» и «действие программирования» - это одно и то же. Ведь код читается гораздо чаще, чем пишется. Но это не относится к делу - когда вы получаете степень CS, то, что вы в конечном итоге будете делать, это программирование.
Билли ONEAL

4

Мотив лени и прибыли. Java получает большинство людей на 80% пути, с 20% усилий. Однако, это часто приводит к тому, что кодировщики вуду "monkey see monkey do" не имеют глубокого понимания происходящего и не могут копать глубже, чем инструменты высокого уровня.

Обучение C / C ++ правильно - сложная задача. Даже если все сделано хорошо, многие не будут полностью понимать концепции низкого уровня, такие как указатели (есть исследования по этому вопросу). Более того, это не кажется актуальным на рынке труда.


2
Но если вы понимаете указатели, вы можете гораздо легче понять ссылки.
Майкл К

3

Я в основном согласен, но в определенной степени.

Если вы хотите преподавать CS, курс сосредоточен на структурах данных или алгоритмах. Избавление от ненужных вещей - это хорошо. Вы не хотите, чтобы студенты имели дело с понятием низкого уровня при изучении понятий высокого уровня.

С другой стороны, материал низкого уровня также должен преподаваться. Просто так мы получаем больше универсальных программистов.


Я не говорю об одном курсе. Для одного курса это нормально. Для всей учебной программы это не так.
Билли ONEAL

3

Как всегда, это вопрос того, чему ты хочешь научить и сколько времени у тебя на это нужно.

Работа в Java означает, что вам не нужно иметь дело с случайными указателями и free / malloc. Это означает, что гораздо меньше трудно найти ошибок.

Это не означает, что вы не должны изучать базовую машину - которую вы должны быть хороши в торговле - но, возможно, вам следует выбрать правильный инструмент для работы. Алгоритмы высокого уровня, возможно, не лучшая тема для курса ассемблера.


Для курса от начального уровня до программирования или курса по структурам данных подойдет Java. Не для всей 4-летней учебной программы как бы то ни было.
Билли ОНил

@Билли. Согласовано. Я только упоминаю, что использование Java дает вам некоторые вещи, о которых вам не нужно беспокоиться. Вы должны изучить основы на других курсах без Java.

2

Не слишком ли много просить, чтобы их научили тому, как на самом деле работают компьютеры ? Для меня не имеет смысла, что любой план курса CS не будет включать в себя что-то из операционных систем и компьютерной архитектуры. Я не говорю, что вы должны иметь возможность проектировать компьютер на обратной стороне конверта, но общий обзор ставит все языки в соответствие. Я имею в виду, Java работает в виртуальной машине!


1
Существуют ли хорошие компьютерные программы, которые не включают курс ОС и курс по организации компьютеров?
Mipadi

Я, конечно, надеюсь, что нет!
Майкл К

0

Честно говоря, я не думаю, что вы должны терять уважение ко всем степеням, особенно к CS, потому что единственным языком, который преподается, является Java.

Любой приличный комп. Научный студент понимает, что его степень по КС - не более чем лист бумаги, и что реальные знания будут получены из личных проектов и личного обучения. Я хотел бы думать, что хорошие студенты знают, что им нужно знать C и научиться делать что-то в Linux / Unix, а также научиться НЕ держать свои руки в современных языках.


-1

Я не вижу проблемы с использованием Java. Самая большая проблема (как вы упомянули) - это когда университеты преподают императивное программирование как лучший и единственный способ решить все ваши проблемы. Это очень далеко от истины. Например, вместо того, чтобы использовать три императивных языка (или даже хуже одного и того же языка) для трех разных курсов, они должны использовать три разные парадигмы программирования. Пример - Java (императив), Prolog (декларативный) и Haskell (функционал).

Что касается того, почему это происходит, я думаю, что это комбинация (1) политики - председатели не являются открытыми или не имеют личных выгод / спонсоров, и (2) лень - профессора когда-то были студентами, и они преподают все, что знают или любят.


-1

Кальвин колледж в Гранд-Рапидс Ми Когда они перешли с Java на Python для вводных классов программирования, профессор в недоумении сказал группе из нас ближе к концу своего семестра: «Многие из них могут программировать, это невероятно». Его изумление было в отличие от предыдущего опыта с Java. Это не делает Java плохим языком, просто его трудно подобрать с нуля. Я бы сказал то же самое о C, C ++ или любом языке, который требует глубокого знания схем или типов выделения памяти.


1
Хм, Python требует глубокого знания типов, как и других языков, которые вы упомянули.
Билли Онеал

Я ожидаю, что языки с переводчиками будет намного легче выучить, так как студенты могут получать обратную связь за заявлением, а не скомпилировать за компиляцией.
Кевин Клайн

@BillyONeal Вы неправильно поняли меня, контекст был распределением памяти в моем последнем предложении. Мне еще предстоит беспокоиться о размере или количестве элементов str () или dict () или tuple () или list () или set () ... Я просто «использую» их.
Бен ДеМотт

@kevincline Спасибо, Кевин, это то, что я пытался донести. Судя по отрицательным голосам, мне нужно работать над своими коммуникативными навыками;)
Бен ДеМотт

-2

Я получил степень в области компьютерных систем, поэтому я изучал сборку, микропроцессоры, 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 лет назад.

Признайте сейчас, что вы никогда не вернете свое время, поэтому старайтесь тратить его с умом.


Downvoters, пожалуйста, уточните.
Работа

-2

Несколько лет назад я где-то читал, что в Великобритании было принято решение Java, чтобы привлечь больше студентов к программированию. Очевидно, это было проще для мозга из-за отсутствия неприятных указателей и управления памятью и т. Д. Я думаю, что это причина, по которой Python быстро воспринимается как новый «инструмент обучения». Я бы придерживался мнения, что ваш типичный универкурс не сделает вас программистом. Все, что он должен сделать, это вооружить вас определенным количеством знаний и подготовить вас к программированию. День, когда можно назвать себя программистом, обычно наступает довольно много времени после универа, и когда наступит это время, указатели, сборка мусора и парадигмы программирования, отличные от ООП, не должны быть проблемой.


-2

Почему используется Java?

Три причины:

  1. Java использует синтаксис в стиле C. Многие программисты знакомы с ним, поэтому он сокращает кривую обучения.

  2. Деньги были потрачены на продвижение Java как крутого и современного. Но по сравнению с Лиспом, ява живет в каменном веке.

  3. JVM. JVM - это единственная классная вещь в Java, которая является законной, а не просто рекламной шумихой. Хотя JVM заслуживает похвалы как платформа для запуска программ, она сама по себе не заслуживает существования языка Java. Вы можете теоретически и практически скомпилировать много разных языков для JVM.


1
Добро пожаловать. Похоже, что это может быть ваш первый пост в Stack Exchange Programmers. Пожалуйста, посмотрите на страницу часто задаваемых вопросов programmers.stackexchange.com/faq, чтобы получить советы по репутации, задавать вопросы и отвечать на них. Ключевым моментом является то, что ответы должны быть информативными, а не провокационными. Если вы делаете утверждение, что Java - это каменный век, а Lisp - современный, объясните почему. Многие читатели могут знать, что Лисп был указан в 1958 году, и он немного моложе Фортрана. Если вы хотите сказать, что что-то о Java, которое используется совместно с FORTRAN или Algol, определяет его дизайн и ограничивает его, опишите это.
DeveloperDon

-3

Ваш вопрос поддерживает выводы другого человека, который написал статью о том, что 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 ++.


2
Ссылки не являются указателями. Вы не можете использовать их арифметически, и вы не можете использовать их, чтобы переосмыслить часть памяти, на которую они указывают. И, конечно же, независимо от того, сколько вы хотите жить в мире сбора мусора, факт в том, что мир не является миром сбора мусора. Я не говорю, что Java - плохой язык, или что люди не должны использовать Java. Если вам это нравится, используйте его, в нем есть что-то замечательное. Я просто считаю, что это неуместно как язык для начинающих, потому что он скрывает вещи, которые важно понять новым программистам.
Билли ONEAL
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.