Все для программирования на java. Обучение программированию на языке JAVA

От автора: на этом языке программирования работает примерно 3 миллиарда смартфонов, 125 миллионов телевизоров и все до единого Blu-Ray проигрыватели в мире. Этот язык регулярно занимает призовые места в рейтингах разработчиков ПО и является самым востребованным среди крупнейших IT-компаний. Он является техническим феноменом и работает абсолютно на любом устройстве, что соответствует его принципу «написал один раз - запускай везде» (WORA - «write once, run anywhere»). Кто догадался, поднимите руки! Конечно же, это язык Java. И сегодня я раскрою вам все карты и расскажу всю правду о том, как стать Java программистом с нуля! Устраивайтесь поудобнее!

Несколько фактов о Java

Дабы не утомлять вас длинными теоретическими проповедями, я сгруппировал некоторые сведения о Java в списочек, после прочтения которого вы получите озарение понимание того, что это за язык такой, и какова его роль в дикой природе программировании:

Java - это «модный» и кроссплатформенный язык программирования. Он работает на любом устройстве с любой операционкой. На нем написаны все Google и Android-приложения. Ни по одному другому языку вы не найдете столько информации и обучающих материалов;

официальная дата выпуска языка - 23 мая 1995 г. Изначально он задумывался для интерактивного кабельного телевидения, но «не срослось». Изобретателем Java является компания Sun Microsystems, которую в 2010 г. выкупила Oracle;

многие путают Java и JavaScript. Если вы хотите заниматься (веб-сайты, веб-приложения), то выбирайте второй вариант. Java - это back-end, т. е. разработка начинки приложений;

JavaScript. Быстрый старт

это объектно-ориентированный язык программирования, код которого выполняется специальной виртуальной java-машиной (JVM). В США примерно на 9 из 10 компьютеров установлена эта самая JVM;

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

Вы все еще здесь или побежали сделать себе чашку ароматного кофе? Тогда продолжим разговор о том, как стать Java программистом.

Установка программной среды

Как ни странно, у некоторых возникают проблемы уже на этапе установки программной среды Java. Для этого нужно перейти на официальный сайт компании-разработчика - Oracle. Ссылку на актуальную версию вы увидите в самом верху сайта. Вам нужны Java SE (Standard Edition) и Java Development Kit - набор инструментов для разработки. Обратите внимание, что существуют разные дистрибутивы под разные операционные системы.

Допустим, у нас Windows. Заходим в «Свойства системы» и смотрим, какая у нас система - 32-разрядная или 64-разрядная. Скачиваем файл, который подходит нам по разрядности. Если выберете неправильный дистрибутив, то при компиляции кода получите ошибку. После подтверждения Accept License Agreement нажимаем кнопку скачивания.

Каков инструментарий Java-разработчика?

Большую часть времени программист проводит в IDE (IntelliJ IDEA, Eclipse, WebStorm, NetBeans). IDE - это интегрированная среда разработки, специальный интерфейс для программирования. Он не только помогает при написании кода, но и упрощает использование других инструментов программирования. Некоторые советуют тем, кто хочет стать Java программистом с нуля, первые свои программы писать в обычном блокноте или Notepad++.

Может, элементарные программы и стоит писать в редакторе. Но в дальнейшем все-таки настоятельно рекомендую использовать IDE. У нее есть функции автодополнения кода, контроля синтаксиса, перехода к определению метода и многие другие. А интеллектуальные подсказки избавят вас от необходимости помнить все названия функций и их параметры, что просто физически невозможно.

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

Примерный алгоритм изучения Java

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

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

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

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

Как начать программировать?

Для тех, кто собирается стать Java-программистом с полного нуля, я расскажу, как написать свою первую программу.
Итак, открываем любой текстовый редактор и записываем:

class HelloWorld { public static void main(String args) { System.out.println("Hello World!"); } }

class HelloWorld {

public static void main (String args ) {

System . out . println ("Hello World!" ) ;

Сохраняем файл под именем HelloWorld.java. Обращаю ваше внимание, что Java чувствительна к регистру, поэтому слова «helloworld» и «HelloWorld» являются разными. Если названия файла и класса в коде будут отличаться, то программа попросту не запустится. Кроме этого, важно, чтобы кодировка была ANSI.

Теперь мы должны скомпилировать программу, используя компилятор javac из JDK. Пока мы не установили среду разработки, будем компилировать с помощью командной строки cmd, вызвав ее из меню «Пуск». В появившемся окне набираем cmd и жмем Enter.

Если мы сохранили HelloWorld.java в папку Progа на диске C, то вписываем команду:

cd C : \ Prog а

и нажимаем Enter. Таким образом, мы изменили каталог на тот, где расположена наша программа. Затем вводим.

Программирую на Java вот уже 7 лет. Но на работе часто приходится обучать новое поколение. В связи с этим и решил сделать некоторую шпаргалку, которая, надеюсь, пригодится и для хабрчан. Если кто-то может помочь дополнить чем-то информацию из этой статьи, то пишите! Итак:

Основные ресурсы для начального обучения

  • www.javable.com - сайт со статьями и tutorial"ом по Java. Все в основном на русском.
  • www.exampledepot.com - очень полезный ресурс, где собраны краткие примеры использования классов для тех или иных пакетов
  • java.sun.com - без первоисточника не обойтись. Для любого Java программиста JavaDoc должен быть истиной в последней инстанции. Так же здесь можно найти серию tutorial"ов на все возможные темы.

Основные Java пакеты

Ниже приведён список Java пакетов, в которых программист должен свободно ориентироваться. Знакомиться с ними рекомендуется как по JavaDoc"ам , так и с помощью www.exampledepot.com . Все пакеты выстроены в рекомендуемом порядке для изучения. Итак:
  1. java.lang - основа основ. Каждый класс в этом пакете нуждается в отдельном внимании.
  2. java.io - ни одна программа не может обойтись без операций с вводом-выводом.
  3. java.util - пакет в основном содержит все необходимое для работы с коллекциями: Collection, Enumeration, Set, List, Map и т.д. и т.п.
  4. java.net - содержит основные классы для работы с сетью.
  5. java.text - все необходимое для форматирования текста
  6. java.lang.reflect - Java не была бы Java"ой если бы не Reflection. Reflection стирает грань между данными и кодом.
  7. javax.sql - все необходимое по работе с базами данных
  8. javax.xml.* , org.w3c.dom.* , org.xml.sax.* - без этих пакетов работа с XML просто немыслима

Ресурсы для расширения кругозора

  • onjava.com - рано или поздно все новости мира Java попадают сюда
  • www.javaspecialists.eu - ресурс полезен как новичкам, так и продвинутым программистам, так как содержит много статей о тонкостях работы с Java.
  • www.theserverside.com - рекомендуется подписаться на RSS, так как часто проскакивают весьма интересные вещи по Java.

Java Библитеки, которые должны знать все

Java не заканчивается знаниями лишь о возможностях JSDK. Чтобы чувствовать себя комфортно необходимо знать еще десятка два сторонних библиотек, используемых Java программистами повсеместно. Итак, начнем с основных:
  • Commons Lang - то что «забыли» включить в JDK
  • Commons Math - отличное дополнение для java.math
  • Commons Logging - логирование должно быть грамотным. За System.out.println для вывода логов начинающим программистам уже через неделю обучения следует отрубать руки.

Наверняка многие из вас, кто задумывается о выборе языка программирования для изучения, много раз слышали тезис, что Java программисты получают более высокую зарплату, чем другие программисты, потому что конкуренции практически нет.

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

Какова цель изучать язык программирования Java?

Зачем нужна цель? Цель – это главный мотиватор, вы должны видеть, к чему нужно стремиться. А если цель определена неверно, то и двигаетесь вы в неправильном направлении и не достигнете того результата, на который рассчитывали.

Конечная цель изучать язык Java – это получить работу.

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

Цель есть, теперь переходим к средствам её осуществления. Крайне не желательно кидаться от одного источника обучения к другому, будь то Youtube каналы или авторские блоги, практикующие Java обучение .

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

А в худшем случае, вы найдете уроки написанные "незнайками" или монотонно зачитанные тексты, зарабатывающими на рекламе "горе видео-блогерами". Вы ходите по кругу, теряете время, а после потерянного времени, пропадает и интерес. Уверяю вас, что именно по этой причине из всех начинающих обучаться программированию по материалам, найденными в интернете, до финиша доходит лишь 5%.

Почему не доходят до финиша 95% начинающих?

Используют не структурированный материал

Обучающие статьи, уроки или видео, кусочками надёрганные от разных авторов, не имеют и не могут иметь логически связанной структуры – это просто "намешанная каша", вот в таком виде она и останется у вас в голове. Записать обучающий курс по Java на несколько десятков часов с хорошо продуманной структурой подачи материала, это огромный труд. Зачем кому-то это делать бесплатно?

Нерегулярный процесс обучения

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

Ошибки начинающих

Зацикленность на теории

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

Перфекционизм

Часто начинающие ученики занимаются перфекционизмом. В чем заключается эта проблем? Получив задание, ученик пытается выполнить его сразу идеально. Это априори невозможно, у новичка нет такого опыта. При решении задач, мы ставим цель, чтобы наш код работал. На втором этапе уже оптимизируем код.

Почему вредно, когда ученик хочет решить задачу сразу оптимально? Он смотрит на задачу и не знает, как ее решить идеально и в результате тратит много времени. В итоге он ничего не делает, а задача так и остается нерешенной.

Выводы

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

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

  • Перевод

«Вы счастливчики. Мы по три месяца жили в мешках из дерюги в грязных сараях. Мы вставали в шесть утра, стирали мешки, съедали по корке чёрствого хлеба и шли работать на мельницу, по 14 часов в день, с понедельника и до воскресенья, и когда мы возвращались домой, наш папа порол нас своим ремнем»
- Летающий цирк Монти Пайтона, Четыре йоркширца

Ленивая молодёжь.

Что может быть хорошего в тяжёлой работе?

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

Когда я был молод, я учился программировать на перфокартах. Если вы случайно делали ошибку, у вас не было такой «современной возможности», как нажать клавишу backspace и ввести заново то, что нужно. Вам приходилось выкидывать карту и начинать ввод заново.

Когда я начинал проводить интервью с программистами в 1991 г., я обычно позволял им использовать любой язык программирования для решения моей задачи на кодирование. В 99% случаев они выбирали C.

В наши дни они обычно выбирают Java.

Не поймите меня неправильно: нет ничего неправильного в использовании Java в качестве рабочего языка.

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

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

Это может звучать немного резковато, это просто моё скромное мнение, но есть две вещи, которым традиционно учат в университетах в курсе компьютерных наук (Computer Science, CS ) и которые многие люди никогда полностью по-настоящему так и не понимают: указатели и рекурсия.

В самом начале обучения в колледже вы проходите курс структур данных, со связанными списками, хеш-таблицами и прочими мелочами, с широким использованием указателей. Такие курсы довольно часто используются как курсы для отсева: они так сложны, что все, кто не обладает мыслительными способностями, необходимыми для CS, бросают, и это очень хорошо, потому что если вы думаете, что указатели сложны, то подождите пока вам не придётся доказывать факты теории неподвижной точки.

Все те юные гении, которые в старших классах школы писали на Бейсике пинг-понг для Apple II, поступают в колледжи, выбирают CompSci 101, курс по структурам данных, и когда сталкиваются с работой с указателями, их мозги просто взрываются, и они решают перевестись на политологию, потому что теперь правовая школа кажется им лучшим выбором. Я много раз видел графики отсеивания студентов с курсов CS, и обычно процент выбывших составляет от 40% до 70%. В университетах склонны считать это разбазариванием; я думаю, что это просто необходимая естественная отбраковка людей, которые просто не смогут быть счастливы или успешны в карьере программиста.

Другим сложным для многих студентов был курс, в котором изучалось функциональное программирование, в том числе рекурсивное программирование. В Массачусетском Технологическом Институте была очень высоко поставлена планка по этим курсам, разработан обязательный курс (6.001) и учебник (Абельсон и Сассман, Структуры и Интерпретация Компьютерных Программ (Abelson & Sussman"s Structure and Interpretation of Computer Programs) ) которые используются десятками или даже сотнями лучших школ CS как стандарт де факто для курсов введения в CS.

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

Теперь я бы предпочёл, чтобы меня не услышали.
Думаете, что вы знаете, что это такое? Проверьте Себя Здесь!

Об этом и ведутся споры. Годы скуления ленивых студентов, подобных мне, в сочетании с жалобами индустрии программного обеспечения на то, как мало американские университеты выпускают специалистов по CS, сделали своё дело, и за последнее десятилетие множество безупречных в остальном школ на 100% перешли на Java. И это приветствовалось: рекрутёрам, которые используют «grep» для оценки резюме (прим.: grep - это программа в Unix, позволяющая выбирать строки, в которых есть нужное слово ), это, кажется, нравится, и, что лучше всего, в Java нет ничего достаточно сложного, чтобы реально отсеять программистов без той части мозга, которая отвечает за указатели или рекурсии, соответственно уровень отсеивания в университетах понижается, факультеты CS выпускают больше студентов, за это получают больше денег, и всем становится хорошо.

Счастливые ученики Java-школ никогда не столкнутся с ужасными segfault (прим.: Segmentation Fault - типичная ошибка при обращении по некорректному адресу ) при попытках реализовать основанные на указателях хеш-таблицы. Они никогда не будут делать безумных, сумасшедших попыток упаковать что-то в биты. Они никогда не будут загружать свои головы мыслями о том, как в полностью функциональных программах значение переменной никогда не изменяется, и все-таки оно постоянно изменяется! Парадокс!

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

Неужели я всего лишь один из тех старомодных ворчунов, вроде Четырёх Йоркширцев, которые хвастаются тем, как тяжело было жить в суровые старые времена?

Эй, в 1900 г. латынь и греческий были обязательными предметами в колледже, не потому, что они были как-то необходимы в жизни, но потому, что их знание было одним из обязательных признаков образованного человека. В некотором смысле мои аргументы не отличаются от тех аргументов, которые приводили сторонники латыни (все четыре). «[Латынь] тренирует ваш ум. Тренирует вашу память. Распутывание предложений на латыни - это отличное упражнение для ума, настоящая интеллектуальная головоломка, и хорошее введение в логическое мышление», писал Скотт Баркер (Scott Barker). Но я не смог найти ни одного университета, который до сих пор преподаёт латынь в обязательном порядке. Неужели указатели и рекурсия - это латынь и греческий компьютерных наук?

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

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

Без понимания функционального программирования вы не сможете придумать MapReduce - алгоритма, который делает Google столь хорошо масштабируемым. Термины Map и Reduce пришли из Lisp и функционального программирования. MapReduce понятен любому, кто помнит из своего курса, эквивалентного 6.001, что истинно функциональные программы не имеют побочных эффектов и поэтому легко распараллеливаемы. Очень показателен тот факт, что в Google изобрели MapReduce, а в Microsoft нет, и это говорит кое-что о том, почему Microsoft до сих пор играет в догонялки, пытаясь заставить работать основные функции поисковой машины, в то время как в Google перешли к следующей проблеме: построению Skynet величайшего в мире параллельного суперкомпьютера. Я не думаю, что Microsoft действительно понимает, насколько они отстали на этом пути.

Но даже вдали от задач, где важность указателей и рекурсии очевидна, их реальная значимость в том, что создание больших систем требует той гибкости мозга, которую вы получаете при их изучении, и тех способностей мозга, которые были вам необходимы для того, чтобы не вылететь с курса во время обучения. Указатели и рекурсия требуют от человека определённых способностей: рассуждать, абстрактно мыслить, и, что особенно важно, видеть проблему на нескольких уровнях абстракции одновременно. Поэтому способность понимать указатели и рекурсию напрямую связана со способностью быть великим программистом.

Ничто в образовании, построенном полностью на Java, не отсеивает студентов из-за недостаточной гибкости их мозгов для понимания этих концепций. Как работодатель, я вижу, что 100%-Java школы начали штамповать выпускников курсов CS, некоторые из которых просто недостаточно умны для того, чтобы работать программистами с чем-то более замысловатым, чем Ещё Одно Бухгалтерское Приложение На Java, хотя они и управились со скрипом с «современной-упрощённой-для-тупиц» курсовой работой. Эти студенты никогда не справились бы с курсом 6.001 в Массачусетском Технологическом, или с CS 323 в Йеле, и, честно говоря, это и есть причина, почему, с точки зрения работодателя, диплом Массачусетского Технологического или Йеля имеет больший вес, чем диплом Дюка, который недавно стал Полностью-На-Java, или Penn University, который заменил Scheme и ML на Java, пытаясь преподавать на ней курс, который когда-то почти убил меня и моих друзей, CSE121. Дело не в том, что я не хочу нанимать умных ребят из Duke или Penn - я нанимаю их - просто мне гораздо сложнее понять, кто они. Раньше я мог сказать, что парень действительно умён, если он за несколько секунд может разобраться в рекурсивном алгоритме, или реализует функции, манипулирующие связными списками на основе указателей, с такой скоростью, с которой он может писать на листе бумаги. Но в случае выпускников школ Java я не могу сказать, имеет ли претендент проблемы с этими задачами, потому что у него просто не хватает соответствующего образования, или потому, что у него нет соответствующей части мозгов, необходимой для отличной работы в качестве программиста. Пол Грэхэм называет их Горе-Программистами.

Достаточно плохо уже то, что Школы-на-Java не отсеивают тех, кто никогда не сможет стать великими программистами, но на это школы вполне обоснованно могут сказать, что это не их проблема. Индустрия, или, по крайней мере, «рекрутёры-использующие-grep», действительно требуют, чтобы школы преподавали Java.

Но «школы-только-на-Java» также перестали тренировать мозги студентов для того, чтобы они стали знающими, проворными, и гибкими достаточно, чтобы могли хорошо проектировать программы (и я не имею в виду объектно-ориентированное «проектирование», когда вы тратите несчётное количество часов, переписывая собственный код при перестройке вашей объектной иерархии, или мучаетесь такими фальшивыми «проблемами», как выбор «содержит» или «является» (прим.: has-a vs. is-a, выбор между наследованием и композицией классов )). Необходимы тренировки, чтобы научиться думать на нескольких уровнях абстракции одновременно, что является абсолютно необходимым для проектирования отличной архитектуры программного обеспечения.

Вам может быть интересно, может ли обучение объектно-ориентированному программированию (ООП) быть хорошим заменителем указателей и рекурсии как вычищающих курсов. Короткий ответ - нет. Не обсуждая достоинства ООП, можно просто сказать, что оно недостаточно сложно для отсеивания посредственных программистов. Преподавание ООП состоит в основном в запоминании нескольких словарных терминов, таких как «инкапсуляция» и «наследование» и заучивании ответов на множество вопросов о разнице между полиморфизмом и перегрузкой операций. Не сложнее заучивания знаменательных дат и имён на уроках истории, ООП ставит неадекватно простую задачу для того, чтобы отпугнуть первокурсников. Когда у вас проблемы с ООП, ваша программа все-таки работает, она просто становится сложной для поддержки. Якобы. Но когда у вас проблемы с указателями, ваша программа выдаёт Segmentation Fault, и вы понятия не имеете, что происходит, до тех пор пока вы не остановитесь, не сделаете глубокий вдох и не попытаетесь на самом деле заставить свой ум работать на двух уровнях абстракции одновременно.

Рекрутёры-использующие-grep, кстати, высмеиваются здесь, и для этого есть веские доводы. Я никогда не был знаком с человеком, который бы понимал Scheme, Haskell и указатели С, и не мог бы освоить Java за пару дней, и после этого писать код на Java лучше, чем люди, имеющие пятилетний опыт работы с Java, но попробуйте объяснить это среднему HR-биороботу.

А что насчёт миссии CS-факультетов? Это не ПТУ! Их работа не состоит в том, чтобы подготовить людей к работе в промышленности. Это только для общинных колледжей, скажут вам, (прим.: в США двухгодичный колледж, готовящий специалистов средней квалификации для работы на территории местного сообщества ) и государственных программ переобучения для уволенных рабочих. Предполагается, что они дают студентам фундаментальные инструменты для того, чтобы те жили своей жизни, а не готовят их к первым дням работы. Правильно?

Всё же. CS это доказательства (рекурсия), алгоритмы (рекурсия), языки (лямбда-исчисление), операционные системы (указатели), компиляторы (лямбда-исчисление) - и в результате получаем, что школы-на-Java, которые не учат С и не учат Scheme, в действительности не учат компьютерной науке. Насколько бесполезно в реальном мире понимание концепции каррирования (прим.: в функциональном программировании порождения из одной функции другой функции с меньшим числом аргументов; например из f(x,y) = x*y получение функции f3(x) = f(x,3) = 3*x) , настолько же это необходимая предпосылка для высшего образования в области CS. Я не понимаю, почему профессора в комитетах, утверждающих программы обучения в колледжах, позволяют их программам тупеть до такой степени, что они не только не могут готовить программистов, готовых к работе, они даже не могут подготовить выпускников, которые могли бы получить степень PhD (прим.: аналог кандидата наук ) и соперничать с ними за рабочие места. Хотя нет, подождите. Забудьте. Может быть я всё-таки понимаю.

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

«Боже мой», - подумал я, - «они пытались отупить курс ещё сильнее!» Почему бы не кормить всех студентов с ложечки? Почему бы преподавателям самим не делать и тесты за них - тогда точно никто не будет переходить на гуманитарные специальности! Как предполагается научить кого-то чему-то, если курс обучения заботливо сконструирован так, чтобы стать ещё проще, чем он есть сейчас? Кажется, ставится задача приложить усилия (PDF) по разработке простого подмножества Java, предназначенного для изучения студентами, выпуск упрощённой документации, которая заботливо прячет весь этот EJB/J2EE-мусор от их нежных мозгов так, чтобы они не беспокоили свои крохотные головки какими-то другими классами кроме тех, которые необходимы для того, чтобы решать стандартный простейший набор заданий по курсу.

Наиболее сочувственное объяснение, почему факультеты CS с таким энтузиазмом отупляют свои курсы, это то, что у них будет значительно больше времени для обучения актуальным концепциям CS, если только они не будут вынуждены тратить две лекции на то, чтобы объяснить разницу между, скажем, int и Integer в Java. Хорошо, если дело только в этом, 6.001 будет для вас отличным ответом: учебный язык Scheme так прост, что весь язык может быть рассказан смышлёным студентам примерно за десять минут; после этого вы можете потратить остаток семестра на неподвижные точки.

Я возвращаюсь обратно к единицам и нулям.

(У вас есть единицы? Везучий ублюдок! Всё, что было у нас - это нули.)

Конец
Переводчик: Илья Болодурин

Cтатья давнишняя, но «зацепило».

Upd
В комментариях многие просили озвучить собственное мнение, а не тупой копипаст статьи.

По состоянию на сегодняшний день Java - это самый известный и популярный среди всех языков программирования. Начал существовать с 1996 года, изначально разрабатывался в компании Sun Microsystems . Со временем её поглотила корпорация Oracle. Разработчики планировали сделать из Java универсальный язык, применимый практически для всех задач.

За прошедшие 23 года Java сильно расширился и улучшился. На сегодня актуальная версия - Java 11, выпущенная в сентябре прошлого года. За это время Java стала больше, чем языком универсального предназначения. Её можно назвать полноценной платформой, которая обладает собственной экосистемой. Сегодня язык действительно может использоваться для чего угодно: от создания мелких программ до интернет-порталов колоссальных объёмов. Часто применяется для разработки ПО под все известные компьютеры, смартфоны и умную технику. Большая часть всех приложений на Android написана на Java.


Особенности Java

У много особенностей, но ключевой можно назвать принцип трансляции кода в особый байт-код , что не привязан к платформе. Впоследствии данный байт-код обрабатывается на JVM . Этот фактор отличает Java от прочих интерпретируемых языков наподобие Perl , и пр. В них код сразу поступает на интерпретатор. С другой стороны, Java также не относится к исключительно компилируемым языкам (вроде C-подобных).

За счёт необычной архитектуры достигается кроссплатформенность и переносимость приложений, основанных на Java. Такие продукты можно выполнять на Windows, Linux, Mac OS и для этого даже не нужна перекомпиляция кода. Реализация JVM на всех платформах может отличаться, но принцип и ход выполнения остаётся таким же.

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

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

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

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



Статьи по теме