Часть 2
SharofiddinГде можно найти примеры хорошего кода и проектов для обучения?
Прежде чем начать, пожалуйста, помните, что изучение уже существующего кода — не всегда лучший способ научиться программировать. Ведь смысл программирования — практическое решение проблем, а лучший способ научить лучше решать проблемы — очень много тренироваться. Просто читая готовые отрывки кода, вы вряд ли многому научитесь. Обычно, если людям действительно необходимо изучить код, то они делают это с определённой целью и определённым образом. Например, разработчику, который захотел написать игру, используя тот или иной движок, логично разобраться с исходным кодом демо-версий различных игр, написанных на этом движке.
Загляните в раздел Коллекций на GitHub. Здесь размещён курируемый список массы популярных и интересных open source-программ от библиотек и игр до музыки, журналистики и анализа данных. Он хорошо отражает, какого рода вещи можно делать с помощью кода. Исходный код находится в публичном доступе, и вы можете скачать эти проекты и сами посидеть над ними.
Посмотрите также серию бесплатных электронных книг The Architecture of Open Source Programs, в которых более детально разобрана структура популярных open source-программ. Хорошим отправной точкой может стать последняя книга серии «500 lines or less», так как программы в ней достаточно малы, чтобы вы точно могли выполнить их/с ними справиться самостоятельно и использовать в качестве стартовой площадки для запуска своего проекта.
Как выучить темы, которые рассматриваются в стандартных университетских программах по информатике?
Если вам интересно самому пройти материал, который входит в большинство стандартных программ по информатике в вузах, неплохой материал, а также ссылки на дополнительные образовательные источники, можно найти по следующим ссылкам:
What every computer science major should know — Matt Might (Что нужно знать каждому студенту, изучающему информатику — Мэтт Майт)
Даёт высококачественный обзор различных областей и причин, почему они ценны. Также содержит список материалов к прочтению.
Open source computer science degree — Open Source Society (Открытая программа по информатике от Open Source-сообщества)
Предлагает последовательный учебный план со ссылками на курсы — преимущественно Coursera — в каждой теме.
Teach yourself CS (Как самостоятельно изучить информатику)
Аналог предыдущего ресурса с тем исключением, что рекомендует как книги, так и видеолекции. Более продвинутые рекомендуемые источники связаны с системами (например, операционными системами, базами данных…)
A Self-Learning, Modern Computer Science Curriculum (Современная программа по информатике для самостоятельного изучения)
Ресурс нестандартного формата с намного более математическим подходом к изучению информатики. Концентрируется на таких темах, как дискретная математика, функциональное программирование, верификация программного обеспечения, доказательства, теория типов и теория сложности вычислений.
Пожалуйста, помните, что качественные курсы по информатике преимущественно весьма требовательны и сложны. Если вы решились пройти этот путь, вам придётся потратить несколько лет и вложить колоссальные усилия, чтобы достичь желаемого уровня образованности через самообучение.
Как начать крупный проект и не забросить его?
Во-первых, досконально разберитесь в сути задачи.
Часто на этом этапе помогает Rubber Duck Debugging. Объясняя задачу или идею кому-то (или чему-то) другому, кто о ней ничего не знает или ничего в ней не понимает, человек сам более глубоко вникает в неё: ведь ему приходится размышлять над задачей значительно больше, и это приводит к её лучшему пониманию.
Во-вторых, не бросайтесь сразу же к компьютеру!
Проводите много времени, обдумывая задачу/задание. Создавайте черновики, рисунки, какой-либо псевдокод, заготовки на упрощённом языке или что угодно, что может пригодиться, на бумаге. (Я подчёркиваю это здесь, потому что цифровые инструменты отвлекают от стоящей впереди задачи — используйте только карандаш и бумагу или доску). Тщательно проанализируйте задачу.
Это приведёт нас к следующему.
Помните кое-что, когда работаете над крупным проектом в одиночку:
ВСЁ В МИРЕ СОСТОИТ ИЗ БОЛЕЕ МЕЛКИХ ЧАСТЕЙ.
Это значит, что каким бы большим ни был механизм, дом, небоскрёб, автомобиль, поезд, компьютер и т.д., он является совокупностью множества мелких элементов, которые вместе составляют единый продукт. Эти мелкие элементы также состоят из ещё меньших элементов и т.д.
Это распространяется и на большие программы. Они состоят из большого числа меньших единиц, которые соединены в целое. В идеале (хотя это часто невозможно), каждая меньшая единица должна функционировать (и тестироваться) независимо от остальных.
Начните с малого. Возьмите задачу, которую вы выбрали, и попробуйте разбить её на более мелкие части. Продолжайте, пока не обнаружите, что дальше она не раскладывается.
Как только вы дойдёте до этого момента, начинайте программировать. Напишите одну небольшую часть и протестируйте. Напишите следующую, протестируйте и т.д.
Не задумывайтесь о финальной, полной картине — это будет вас угнетать. Беритесь за одну отдельную часть за раз.
Самая большая проблема неопытных программистов в том, что они почти всегда пугаются объёмных задач. Но эту проблему не так уж трудно преодолеть:
Не думайте о конечной программе со всеми её фишками. Сосредоточьтесь на небольшой, выполнимой части, завершите её и двигайтесь дальше. Даже самая сложная программа/система состоит из простых небольших частей.
Как не забросить проект?
Представьте, что вы работаете на клиента, и клиенту нужно увидеть и одобрить вашу разработку до того, как вы начнёте писать код, на случай, если у него возникнет то или иное замечание или он пожелает убедиться в том, что коммуникация между вами была успешна и вы поняли его требования.
- Подготовьте детальное описание проекта, так называемую «функциональную спецификацию проекта».
- Обсудите эту функциональную спецификацию проекта с воображаемым клиентом (то есть объясните её любому неодушевлённому предмету или кому-то, кто готов вас выслушать).
- Подкорректируйте функциональную спецификацию проекта: вернитесь к предыдущему шагу и повторяйте, пока не будете довольны.
- Составьте план реализации проекта с жёстким (и реалистичным) конечным сроком.
- Соблюдайте пункт выше (потому что иначе воображаемый клиент мог бы потребовать немалую комиссию за просрочку)
Ещё несколько советов:
- Для начала полностью забудьте о коде и взгляните на программу полностью с точки зрения пользователя.
- Составьте список желаемых функций, которые программа должна выполнять.
- Составьте список функций, которыми программа не будет обладать (Так вы сможете избежать соблазна добавить кучу «классных» и совершенно ненужных «улучшений». В основном, именно потому, что программы становится слишком раздутыми, разработчики бросают их через несколько недель.)
- Сделайте несколько набросков экрана, который будет видеть пользователь, и как он будет с ним взаимодействовать. Это не должны быть точные прототипы — они, скорее, помогут представить, что будет изменяться на экране пользователя при переходе на другую страницу. Эти зарисовки помогут вам не забыть что-то важное.
- Научитесь использовать git и заведите аккаунт на GitHub. Здесь можно получить хорошую поддержку и попросить оценку коду. (Игнорируйте комментарии по поводу стиля кода: 99% из них — бесполезные споры.)
Распространённые страхи и опасения
Я уже слишком стар для программирования?
Нет, учиться программировать и, возможно, строить карьеру в разработке можно в любом возрасте.
Существует распространённый миф о том, что единственный способ стать хорошим программистом — начать учиться кодить в раннем возрасте. Это не так: хотя отдельные люди начинают учиться кодить рано (что может дать им некоторое преимущество), большинство начинает учиться этому, когда поступает в вуз, или позже.
Учиться можно в любом возрасте, и вместо того, чтобы зацикливаться на других, просто сосредоточьтесь на себе и вашем личном темпе прогресса. Постарайтесь развить в себе мышление роста и избавиться от фиксированного мышления.
Есть что-то другое, чему мне сначала нужно научиться?
Обязательных условий очень немного, и в целом вы можете в любое время приступать к изучению программирования.
Вот единственные действительно необходимые условия:
- Вы должны уметь печатать (если только вы не используете язык на основе подхода «drag-and-drop» вроде Scratch).
- У вас должен быть компьютер.
- Вы должны уметь самостоятельно гуглить/искать ответы на вопросы.
Вам также пригодится некоторое знание математики (алгебра на базовом уровне) и английского языка (потому что многие онлайн-ресурсы на английском), но без этих двух условий можно обойтись.
Всё, что указано выше, более или менее применимо к желающим получить официальный диплом в университете. Большая часть вузов рассчитывает на то, что поступающие студенты ничего не знают об информатике и программировании, и начинают обучать их с нуля (хотя в отдельных случаях можно пропустить один или два вводных курса, если пройти тестирование или продемонстрировать уже достаточные навыки). Если вы в старших классах или младше и хотите изучать информатику в вузе, то только выиграете, если начнёте учиться наперёд — это даст вам фору, но делать это вы не обязаны.
Некоторые вузы могут более строго относиться к общему образованию и уровню владения математикой (например, в большинстве вузов есть требование к вычислительным навыкам), но они разнятся от вуза к вузу, и вам следует узнавать о них напрямую там, куда вы хотели бы поступить. Более подробно читайте ниже.
Нужно ли мне хорошо знать математику?
Необязательно: программирование и информатика — это широкая область, и нужно ли вам хорошо разбираться в математике, зависит от того, на какой дисциплине вы решите специализироваться.
Например, в некоторых направлениях программирования действительно необходимы уверенные математические навыки. В 2D и 3D-играх часто используются векторы, матрицы и линейная алгебра; в интеллектуальном анализе данных и машинном обучении — многие понятия статистики; а справляться с алгоритмическими сложностями легче, если хорошо владеть алгеброй и элементарными вычислительными навыками.
Обычно чем выше уровень и сложность темы, тем больше вероятность того, что вам понадобится мощная математическая подготовка. Если ваша цель — научиться решать эти сложные задачи, то хорошая база будет для вас бесценна.
Однако так же много направлений информатики и программирования не требуют глубокого знания математики. Единственное, что вам действительно необходимо знать, — это сложение, вычитание, умножение, деление и иногда какие-то основы алгебры. Многие программисты за всю свою карьеру почти не имеют дела с математикой.
Если вы не очень сильны в математике, то в любом случае можете учиться и расти. Ведь в программировании вы, вероятно, тоже ещё не очень хороши, но всё равно собираетесь учиться кодить. Зайдите на Khan Academy и поищите бесплатные уроки, начинающиеся с базовых уровней и до более сложных.
Однако ответ будет несколько другим, если вы хотите получить диплом по информатике. У многих вузов есть особые требования, которым вы должны удовлетворять, прежде чем они либо примут, либо выпустят вас (курсы по исчислению и т.д.). А так как информатика — это в некоторой степени прикладная математика, вам почти наверняка придётся учить дискретную математику, писать доказательства и тому подобное, чтобы получить диплом. Вам не нужно изначально хорошо разбираться в математике, чтобы изучать эти темы (впрочем, любые математические темы), но какие-то познания в математике вам точно не помешают и могут упростить процесс обучения.
То, насколько программа по информатике будет переплетаться с математикой, различается от вуза к вузу. Чтобы узнать подробности, вам следует изучить требования и содержание программы того вуза, в который вы хотите поступить.
Подводя итог, вам не обязательно нужно хорошо знать математику, чтобы построить успешную карьеру в разработке. Если вы хотите стать информатиком, будьте готовы учить очень много математики. Если вы хотите работать над более сложными задачами/в рамках отдельных направлений, в зависимости от ситуации математика может стать очень полезным инструментом.
Я много гуглю или не знаю, как делать что-то, когда только собираюсь начать. Это плохо?
Нет. Вот ветка, в которой эта тема рассмотрена с разных сторон. Есть много других, аналогичных этой.
Программировать сложно?
Программирование подобно любому другому навыку: относительно легко учить и применять основы. Чтобы научиться играть в боулинг, вы выясняете, как вставлять пальцы в отверстия шара и бросать его просто в направлении кеглей. Вам, может, даже удастся сбить несколько штук, и это не особо сложно.
Программирование схоже с большинством навыков в том, что гораздо затруднительнее перейти с начального уровня на более продвинутый. В продолжение примера с боулингом: если вы захотите участвовать в соревнованиях, вам придётся потратить годы, чтобы отточить навык. То же самое верно и для программирования: вам придётся потратить какое-то время (то есть много времени), пытаясь понять, почему эта дурацкая программа не работает, хотя вы всё уже три раза перепроверили. Вам придётся читать книги, сидеть на занятиях и обсуждать их с другими людьми. Вы выучите сленг программистов. Вы выберете специализацию, чтобы более основательно изучить ряд узких областей. Всё это задействует основы программирования, но новыми способами и в новых сочетаниях. Искать решения задач будет тяжело. Часами разбираться с одной задачей будет тяжело. Это нормально, потому что если вы получаете от этого удовольствие и если у вас есть мотивация, трудности не будут казаться такими трудными, и вы справитесь с ними.
Итак, программирование может быть сложным. Как и многие другие вещи, оно требует усилий, и эти усилия могут нелегко даваться. Не опускайте руки — получайте удовольствие, и все трудности будут того стоить.
Вопросы про обучение
Что значит «знать язык» или «уметь программировать»?
«Знание языка» в программировании аналогично знанию разговорного языка. Вы можете сказать, что знаете его, когда научитесь эффективно его применять, даже если не знаете его в совершенстве. «Уметь программировать» обычно значит то, что вы понимаете принципы программирования и можете эффективно применять их в одном или нескольких языках. Почитайте недавние ветки по этой теме.
Я только что начал учить язык Х. Стоит ли мне начинать учить язык Y?
Особенно когда вы начинаете учиться программировать, лучше учить один язык и на какое-то время остановиться на нём. Даже если отдельная проблемная область использует конкретный язык, которым вы пока не владеете, сначала научитесь программировать. А разобравшись с основами (управление потоком, обработка ошибок, ввод/вывод, имплементация алгоритмов, структуры данных и т.д.), можете начинать думать о том, чтобы взять следующий язык.
Стоит ли учить более одного языка программирования одновременно?
Если вы только начинаете, мы рекомендуем выбрать один язык (как сказано в предыдущем ответе, неважно, какой именно) и сосредоточиться на нём минимум на месяц. Опытные программисты могут понемногу учить несколько языков сразу, но новички скорее просто запутаются.
Это плохо, что у новичков иногда возникают проблемы с задачами и упражнениями?
Это плохо, что новички иногда падают с велосипеда, когда учатся кататься? Это плохо, что новички иногда не могут удержаться на воде, когда учатся плавать? Это плохо что новички иногда не попадают в ноты, когда учатся играть на инструменте? Это плохо, что новичкам иногда приходится выбрасывать сгоревший обед?
Конечно, нет!
Серьёзно, это один из глупейших и часто задаваемых вопросов, связанных с программированием. Это естественно, если вам трудно и иногда что-то получается неудачно. В конце концов, вы только начинаете. Вам так и положено.
Неудача — важная часть обучения. Очень важно знать, как не надо делать. Неудача — это просто приобретённый опыт.
Если бы вам не было трудно и вы не сталкивались с неудачами, то вы не были бы новичком — вы уже были бы экспертом (но бывает, что даже у них иногда что-то не получается, просто не так часто, как у новичков, и обычно они знают, как с этим справиться).
Как найти/поддерживать мотивацию, чтобы учиться программировать?
Зайдите на /r/GetMotivated/ и /r/GetDisciplined.
Мы часто думаем: «если бы у меня было достаточно мотивации… тогда я мог бы…», хотя именно действие поддерживает мотивацию. Сначала идёт действие, потом — мотивация. Найдите небольшие конкретные программы, которые хотели бы создать. Избавьтесь от всего, что вас отвлекает. Установите расширения для браузера, блокирующие сайты вроде Reddit, Facebook и Twitter. На минуту представьте, насколько здорово будет ощущать, что вы стали более компетентным программистом.
Вот несколько свежих веток по теме:
- http://redd.it/uzt31
- http://redd.it/1c1bnj
- http://redd.it/2j6b7i
- http://redd.it/1s347g
- http://redd.it/javfv
- http://redd.it/gy0xa
- http://redd.it/1xvdte
- http://redd.it/1hh76b
С чего мне начать Х?
С чего начать делать видеоигры?
Современные видеоигры создаются с помощью игровых движков: это библиотеки программ, которые позволяют работать со сложными вещами, например, графикой, звуком, физикой и сетями. Существует множество доступных библиотек. Однако для начинающих настоятельно рекомендуют следующие библиотеки, так как они бесплатны и имеют лучшую для обучения документацию:
- Unity (C#): подходит для мобильных, десктопных, браузерных/онлайн и консольных 2D и 3D-игр
- Construct2 (JavaScript): для мобильных, десктопных и браузерных/онлайн 2D-игр
- Pygame (Python): движок для десктопных 2D-игр
- LÖVE (LUA): подходит для десктопных 2D-игр
Всегда помните, что ваша цель — разрабатывать игры, а не движки! Так что не нужно заново изобретать велосипед.
Движки помогут вам начать работу с графикой и пользовательскими элементами управления для будущих игр, но вам всё равно нужно тщательно изучить язык программирования, чтобы прописать логику игры, поэтому, подберите годную книгу или онлайн-ресурс.
Самое главное: начинайте с простого. Вам захочется взяться за всё и сразу же создать игру своей мечты, но помните, что единственный способ взобраться на вершину горы — делать по одному небольшому шагу за раз. Вот список простых игр для тренировки в порядке возрастания сложности — попробуйте выполнить какие-то из них, перед тем как броситься к своей конечной цели:
- Угадай число
- Блэкжек или крестики-нолики
- Охота на Вампуса (правила)
- игра в жанре choose-your-own-adventure на ваше усмотрение или клон Zork
- Pong, Тетрис или клон Сапёра
- Space Shooter с вертикальной или горизонтальной прокруткой
- простой клон DOOM, Марио или Legend of Zelda
Обязательно загляните в ЧаВо /r/gamedev, почитайте вводное руководство на /r/gamedev и поищите более старые ветки на /r/gamedev и /r/learnprogramming.
С чего начать делать веб-сайты/веб-приложения/веб-разработку?
Существует много различных способов научиться веб-программированию, но в целом ключевые навыки, которые вам будут нужны, — это фронтенд-разработка (код, который выполняется в веб-браузере пользователя) и бэкенд-разработка (код, который выполняется на вашем сервере).
Обычно большинство людей советует начинать с изучения HTML, CSS и Javascript (в таком порядке) — это три главных языка, которые поддерживают все веб-браузеры и на которых написаны все сайты.
Больше информации можно найти в ЧаВо /r/webdev. Вот ещё один список онлайн-курсов, пособий и ресурсов для начинающих.
С чего начать делать мобильные приложения/приложения для Android/приложения для iOS/приложения для Windows Phone?
Для каждого типа смартфонов понадобится выучить разные языки программирования.
- Приложения для Android пишутся преимущественно на Java — больше информации читайте в ЧаВо /r/androiddev.
- Приложения для iOS пишутся на Objective-C или Swift — больше информации ищите на боковой панели /r/iosprogramming и в их вики (на GitHub).
- Приложения для Windows Phone пишут на C#, Visual Basic или Javascript — больше информации ищите на боковой панели /r/WPDev.
Вы также можете создать приложения, которые будут запускаться на всех трёх крупнейших платформах, с помощью технологий Phonegap и Titanium — приложения пишутся один раз с использованием HTML, CSS и Javascript, а запускаются на любой платформе.
Больше информации ищите в списке ресурсов по разработке мобильных приложений. Вот одна старая ветка на эту тему: http://redd.it/352f09.
Однако не забывайте, что многие, если не все из указанных инструментов рассчитаны на тех, кто уже имеет предыдущий опыт в программировании. Если вы прежде никогда не занимались разработкой, может быть, вам лучше начать с изучения языка, по которому есть больше ресурсов специально для новичков. Когда вы приобретёте некоторый опыт и усвоите лежащие в основе программирования принципы, то вам станет намного проще учить новые языки и начинать изучение мобильной разработки. Раздел «С чего мне начать?» в нашем ЧаВо содержит больше информации о том, с чего нужно начинать.
Как автоматизировать что угодно?
Для Windows есть пара специальных языков программирования, такие как Autohotkey and AutoIt.
Другая подходящая кросс-платформенная альтернатива — это Python. Automate the Boring Stuff with Python (Как автоматизировать рутину с помощью Python) — потрясающий образовательный ресурс.
Если вы хотите автоматизировать MS-Office, используйте встроенный язык программирования Visual Basic for Applications (VBA). Сабреддит /r/vba посвящён программированию на VBA.
Какие лучшие…
/u/thekodols сделал подборку из более чем 150 вопросов и ответов в стиле «какие лучшие» в этом посте, который охватывает различные языки, инструменты и темы.
Терминология и словарь
В чём разница между информатикой (computer science, CS), компьютерной инженерией (computer engineering, CE), программной инженерией (software engineering, SE), программированием и кодированием?
Информатика/компьютерная инженерия/программная инженерия vs. программирование/кодирование
Понятия информатика, компьютерная инженерия, программная инженерия, программирование и кодирование взаимосвязаны, но между ними есть тонкое различие, из-за чего новичкам сложно разграничить их.
Первое отличие, о котором вам следует понимать, это отличие между первыми тремя терминами и программированием/кодированием. Информатика, компьютерная инженерия и программная инженерия — это научные дисциплины. Сказать «я изучаю информатику» — то же самое, что сказать «я изучаю химию» или «я изучаю литературу». В противоположность этому программирование и написание кода — это виды активности, то есть их нужно делать. Образно говоря, изучение этих трёх дисциплин можно сравнить с изучением теории музыки, а программирование и кодирование подобно обучению игре на конкретном музыкальном инструменте.
Теоретически, можно выучить одно и не учиться другому, но ваши знания будут гораздо богаче, если вы освоите и то, и другое.
Второе отличие состоит в том, что информатику, компьютерную инженерию, программную инженерию можно изучить, а навыки программирования приходят только с практикой. Фактически, большинство вузов формально обучает одному языку, чтобы изложить основы разработки кода, и сосредотачивается на преподавании теоретических дисциплин, а программировать студенты учатся самостоятельно, тренируясь и выполняя домашние задания.
Информатика vs. компьютерная инженерия vs. программная инженерия
Далее нужно разобраться, в чём разница между информатикой, компьютерной инженерией и программной инженерией. Если кратко, несмотря на многие их сходства, информатика, или «компьютерные науки», имеет мало общего как с компьютерами, так с науками, и, скорее, представляет собой область прикладной математики, которая изучает понятие вычислимости. Компьютерная инженерия схожа с информатикой, но сильнее концентрируется на аппаратном обеспечении нижнего уровня — это своего рода мост между информатикой и электротехникой. И наконец, программная инженерия больше связана с тем, как создавать большие и сложные, но при этом стабильно функционирующие программы. Это как информатика и компьютерная инженерия, только с меньшим количеством теории.
Более детальный обзор смотрите здесь: http://www.reddit.com/r/learnprogramming/comments/2k569h/eli5_computer_science_vs_software_engineering_vs/.
Программирование vs. кодирование
И наконец, остались программирование и кодирование. Разница между этими понятиями очень невелика, и многие используют их как синонимы. В целом термин «программирование» имеет более положительный оттенок, чем «кодирование». Если вы говорите «я программист», это подразумевает определённый уровень профессионализма и свидетельствует о том, что вы можете не только писать код, но и глубоко владеете основами и теорией, умеете общаться с клиентами, работать в команде и т.д.
Напротив, если вы говорите «я кодер», то подчёркиваете, что занимаетесь исключительно разработкой кода, и в меньшей степени — остальными вещами.
Но опять же, эти оттенки здесь почти несущественны: в подавляющем большинстве случаев эти два термина можно использовать взаимозаменяемо.
С чём разница между Cи, C++, Objective-C и C#?
Cи, C++, Objective-C и C# — это не вариации одного и того же языка.
Си — самый маленький и старый из этих языков. Изначально он создавался как системный язык программирования для операционной системы Unix и до сих пор широко используется в прикладном программировании.
С++ — очень популярный язык программирования общего назначения, изначально основанный на Си. После некоторых настроек большая часть кода (почти любой код) на Си может быть скомпилирована как код на С++. Однако в языке С++ появляется большой набор особенностей, которые значительно меняют применение языка по сравнению с Си. Написание кода в стиле Си на С++ обычно не приветствуется.
Objective-C — это строгое надмножество языка Си, поэтому любой рабочий код на Си также является рабочим кодом Objective-C. Этот язык далеко не так распространён, как Си или С++, и сегодня в основном используется в разработке для платформ OS X и iOS от Apple.
C# не основан на Си ни в каком техническом плане. С# — это язык программирования общего назначения, созданный Microsoft и подобный Java. Он компилируется в промежуточную форму, которая запускается на виртуальной машине (CLR), в отличие от предыдущих трёх языков, которые компилируются в нативный машинный код. И хотя С# заимствует элементы синтаксиса из Си и С++ (как и Java), технически он с этими языками не связан.
В чём разница между Java и JavaScript?
Java и JavaScript связаны в той же степени, в которой связаны крем и крем-брюле.
Аналогично предыдущему вопросу, с технической точки зрения Java и JavaScript никак не связаны. У них есть некоторые общие черты в синтаксисе, так как предком обоих был Си, но не более. В Википедии есть хорошее объяснение, откуда взялось это сходство в названиях: https://ru.wikipedia.org/wiki/JavaScript#JavaScript_%D0%B8_Java.