Я нахожусь в муках зачисления себя в школу, чтобы получить степень CS. Школа, на которую я смотрю, на самом деле предлагает как Java, так и C ++ - на основе вводных курсов по разработке программного обеспечения (объектно-ориентированное программирование, шаблоны проектирования и тому подобное). Выбор ученика - какой путь выбрать, но есть только один.
Зная, что вы знаете сейчас, если бы у вас был выбор, вы бы заложили основы учебной программы по CS на Java или C ++?
Мои текущие дебаты в настоящее время выглядят так:
Хороший друг (у которого есть докторская степень в области искусственного интеллекта) рекламирует Java как лучший выбор, независимо от того, что я делаю, хотя бы для того, чтобы открыть больше возможностей для работы позже, хотя он может быть предвзятым, поскольку вся его работа была на Java (он люблю это). Я живу в Бостоне, штат Массачусетс, США, и вижу одинаковое количество работ на Java и C.
С другой стороны, хотя я еще не совсем определился с тем, что я хочу сделать со степенью, когда я закончу, я бы предпочел развиваться для Mac, что я и делаю сейчас, хотя и в ограниченном объеме. С этой целью я уже получаю некоторое ограниченное знакомство с C ++, но у меня ничего не было с Java, и, глядя на свои проекты на своей повседневной работе, я не вижу необходимости использовать его в ближайшее время, "скоро" измерил по крайней мере, на два года.
Я, наверное, должен отметить, что я взрослый человек, возвращающийся в школу через 20 лет (в настоящее время у меня нет никакой степени), поэтому я стараюсь максимально использовать возможности и время, потраченное как можно лучше. Я склоняюсь к C ++, но я все еще амбивалентен, и некоторые объективные советы помогут мне в этом.
Или я просто слишком много думал об этом.
ОБНОВЛЕНИЕ: Оказывается, выбор языка был не таким четким, как я предполагал изначально. В то время как несколько основных курсов были сосредоточены на Java, некоторые другие основные курсы работают в основном на C и Java, но также некоторые другие были добавлены для хорошей меры. Фактически, мой остаток семестра будет в Objective-C после того, как я провожу время на Java и Javascript. В прошлом семестре были написаны C, Javascript и PHP, а также несколько других, добавленных по мере необходимости. Так как в целом все было разбито по середине, и я до сих пор получаю ответы на эти вопросы, я сейчас пытаюсь составить свою учебную программу так, чтобы я соответствовал всем требованиям для получения степени, но впитывал столько языков, сколько смогу , До сих пор мои оценки не пострадали при попытке сделать это.
Ответы:
Лично я бы пошел с C ++, поскольку он даст вам понимание того, как части Java работают под капотом (указатели, например). Переход на Java из C ++ довольно тривиален, тогда как переход на другую сторону, возможно, более труден.
Действительно сложная вещь в экосистеме Java - это огромное количество фреймворков, библиотек и т. Д. - они, во всяком случае, вряд ли охватят все это в университете.
В конце концов, это не будет иметь большого значения , какой язык вы выберете, пока вы изучаете принципы.
Мой кувшин убьет меня за поддержку C ++ ;-)
источник
Я должен не согласиться с большинством людей, защищающих Java здесь. Изучение C ++, даже если вы еще не изучали компьютерную и микропроцессорную архитектуру, дает вам очень много полезных знаний о том, как работают и работают компьютерные программы.
Замечание, я НЕ рекомендую вам не изучать Java (еще лучше, C #), потому что это современные быстрые языки разработки приложений, и вокруг них построены огромные фреймворки, предоставляющие вам доступ ко многим «свободным» функциям, таким как абстрактный доступ к файлам и тому подобное, однако настоящий инженер-программист должен знать хотя бы немного C ++, C или хотя бы ассемблер, потому что именно это отличает вас от типов script-kiddie.
Если вы достаточно опытны в C ++, уверены в управлении памятью и STL, освоение Java / C # должно быть легким делом.
источник
Школы и ученые, которые отстаивают Java в качестве первого выбора, должны быть изучены (или просто получить реальную работу там). Я говорю это как человек, который занимался разработкой приложений и систем на Java в течение последних 12 лет. Ява является жестоким языком для обучения.
Причина в следующем: за исключением одаренных, большинство учеников могут (и, скорее всего, никогда) не поймут ориентацию объекта без понимания модульного программирования. И они не могут понять модульное программирование без предварительного понимания структурированного программирования на процедурном языке. Легко и просто. Свидетельством этого (среди прочего) является то, что, хотя мы знаем ОО уже 3-4 десятилетия, на практике люди все еще пишут гиперспагетти.
Более того, человек, который полагается исключительно на язык gc (будь то Java или .NET), никогда не сможет приблизиться к аппаратному обеспечению. Если только вы не хотите создавать динамические веб-страницы, угадайте, что? Вы должны чувствовать себя ближе к языку.
Вы идете в школу CS, чтобы стать всесторонним специалистом по информатике и программисту (мы надеемся, что потратили немало часов на практические занятия программированием на многих языках программирования). Если вы знаете только Java (или .NET или C или Python, что угодно), тогда вы «программист на Java» (не программист, который может работать на Java, а «программист на Java»). И это имеет такой же смысл, как если бы вы говорили, что вы «плотник-молот» или «механик-отвертка Филиппа», не так ли?
Хорошая школа познакомит вас с C (или с некоторыми другими процедурными языками, такими как Pascal или Ada), затем с C ++ и сборкой, что позволит вам изучать Java самостоятельно, когда вы будете проходить курсы проекта capstone в течение своего младшего / старшего года. Кроме того, он должен предоставить вам доступ к функциональным языкам, чтобы вы понимали концепцию передачи вычислительных блоков в качестве аргументов, вычислений без побочных эффектов, прозрачности местоположения и т. П. (Которые реально применяются даже в Интернете).
Вам нужно знать, что такое сегфо. Вам нужно знать, что означает пейджинг, виртуальная память и всякая ерунда. Вы должны знать, как разбивать проблемы на модули (будь то процедурные и основанные на OO). Вам необходимо знать, как ОО-системы действительно реализуются изнутри (чтобы вы знали стоимость.) Вы должны знать, где ломается абстракция ОО (и это происходит потому, что мир и сложные проблемы не обязательно объектно-ориентированы).
Вам нужно знать все эти вещи, чтобы стать всесторонним специалистом по компьютерам, способным работать либо на предприятии, либо на очень низком уровне, внедряя материал на уровне системы, как для коммерческого, так и для государственного сектора, как крупного, так и малого. шкала.
Академики, которые настаивают на том, чтобы Java был единственным в своем роде языком, чтобы управлять ими всеми, совершенно не понимают, что на самом деле нужно индустрии. Бестолковые. Непростительный невежественный. Вот что происходит, когда они работают над башнями из слоновой кости, глядя на индустрию на расстоянии.
Они превратили факультеты компьютерных наук в дорогие 4-летние профессиональные училища, где выпускают пони с одним языком программирования. И это можно было бы простить, если бы они могли хотя бы научить студентов базовым навыкам ведения бизнеса / предприятия / организации (то есть отказаться от фасада CS и принять учебную программу MIS.) Но они даже этого не делают, что, я думаю, является большой медвежьей услугой. для промышленности, экономики и в конечном итоге студентов.
Я бы посоветовал вам прочитать статью Джоэла Спольски "Java Schools".
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Таким образом, если они не учат вас процедурному языку программирования (будь то промышленный язык, такой как C или Ada, или достаточно хорош для преподавания, например, Pascal), они дают вам C ++ (если вам повезет) или Java / C # (если вам не повезло), я бы искал другую школу. Проще говоря, от парня, который уже давно использует Java для жизни в реальном мире.
источник
Я думаю, что многое зависит от вашей личности. По крайней мере, с моей точки зрения, Java и C ++ имеют радикально разные ориентации, которые обращаются к существенно разным людям.
Когда вы приступаете к этому, Java на самом деле представляет собой большую библиотеку классов с достаточным количеством языков, чтобы иметь возможность создавать экземпляры объектов и вызывать методы из этой библиотеки. «Изучение Java» состоит, в основном, из запоминания (или, по крайней мере, ознакомления) с тем, что находится в библиотеке и как она организована, так что вы можете найти то, что хотите, когда захотите.
C ++ уделяет гораздо меньше внимания предоставлению предварительно написанного кода. Хотя она включает в себя библиотеку (STL 1 ), эта библиотека не столько о коде, который включен, сколько о стиле и наборе принципов. Вполне возможно написать код, который можно легко и легко распознать как код "STL", даже при том, что он практически не использует или вообще не использует заранее написанный код.
Есть также довольно существенная разница в том, как используются языки. Java уделяет большое внимание простоте языка. Это облегчает создание инструментов, которые манипулируют кодом Java различными способами (например, для рефакторинга). Это также означает, что вам, как правило, нужны инструменты, которые могут это сделать, потому что рефакторинг часто включает в себя довольно существенные изменения в больших объемах кода.
C ++ является гораздо более сложным языком, что означает (среди прочего), что создание инструментов для манипулирования исходным кодом C ++ чрезвычайно сложнее, чем для Java. Баланс между этим заключается в том, что это гораздо менее необходимо - работа по рефакторингу, которая может включать сотни изменений для десятков файлов в Java, может быть выполнена, например, путем изменения одного параметра шаблона в C ++.
В Java гораздо больше внимания уделяется простоте изучения. В C ++ гораздо больше внимания уделяется простоте использования - но (к сожалению), только если вы действительно знаете, что делаете.
Я не собираюсь выступать за то или другое. Мое мнение о языках намного менее актуально, чем то, что у вас есть представление о том, чего ожидать от каждого, и если вы честно посмотрите на себя, чтобы выяснить, что, вероятно, подойдет вам лучше.
1 Да, я знаю, что это не совсем точно, но я стараюсь не превращать это в книгу ...
источник
Я не могу поверить, что люди защищают C ++ как первый язык! Вы будете тратить большую часть своего времени на написание котельной пластины и пытаться обойти ограничения и рыболовные крючки в языке, чем на самом деле научиться программировать.
Java - намного более простой язык, и он не помешает вашему обучению.
Если вы должны изучить C ++, изучить концепции с Java, а затем перейти к C ++ или, что еще лучше, OBJ-C, если вы хотите написать программное обеспечение для Mac. Java и OBJ-C не слишком отличаются.
К вашему сведению, я провел 10 лет в качестве коммерческого разработчика C ++.
источник
Я бы порекомендовал C ++. У меня было несколько классов по Java, а некоторые по C ++ в колледже, и специфические для языка навыки, которые я выучил из C ++, помогли мне больше при изучении дополнительных языков позже. Кроме того, хотя я вижу гораздо больше вакансий в Java, чем в C ++, большинство из них ищут полный стек Java, например:
И, скорее всего, учебная программа на основе Java не подготовит вас намного лучше, чем учебная программа на C ++ против такого списка.
источник
Это сложно, потому что Java, несомненно, легче выучить. Вы будете делать больше раньше с Java.
C ++ - гораздо более сложный язык для работы. Указатели и управление памятью концептуально и практически сложно работать. C ++ не предлагает вам никаких сетей безопасности.
В долгосрочной перспективе было бы полезно понять все, чему вас учит C ++. Также переход с C ++ на Java намного проще, чем в другом направлении.
Но я действительно задаюсь вопросом, действительно ли при запуске и во время многих дипломных проектов дополнительные издержки и отладка, которые вы должны выполнить для того, чтобы что-то работало в C ++, на самом деле усложнили бы ваши проекты, сузили бы сроки выполнения ваших работ и расстроили вашу жизнь , Чтобы достичь того же в C ++ и Java, я бы сказал, что почти в каждом случае вы выполняете работу быстрее в Java и сталкиваетесь с меньшим количеством раздражающих проблем. Это может быть действительно большим делом, когда вы находитесь в конце семестра, и у вас есть пять курсов, которые должны быть закончены в тот же день.
Другая сторона этого заключается в том, что, если эти испытания не приведут вас к полному срыву полотенца, они сделают вас лучшим программистом, если вы освоите C ++. И если ваша карьера связана с C #, Java или python, и вам никогда не придется дотрагиваться до другого указателя в своей жизни, вы оцените это намного больше ...
источник
C ++ является более гибким и предлагает более глубокое понимание. Безусловно, вы получите больше от C ++, чем от Java. С ++ также сложнее, потому что он сложнее.
Тем не менее, задания C ++ встречаются не так часто, как задания Java.
Java и ее потомок, C #, являются стандартными решениями для корпоративного / корпоративного пространства кодирования большого железа. Я настоятельно рекомендую изучать один из двух предметов на втором курсе и хорошо освоить его к моменту окончания учебы. Это позволит вам получить работу намного проще. Это не значит, что я думаю, что эти работы в среднем имеют значительный интеллектуальный интерес. Недавно я прошел работу по программному обеспечению Craigslist в Скалистых горах, и большинство работ были на C # / Java и были связаны с тем, что называется « CRUD »; ИМО, это очень скучно.
источник
Преподав C ++ и Java на уровне колледжа, я настоятельно рекомендую Java .
Java помогает в процессе обучения и поощряет хорошее поведение при программировании. Встроенные библиотеки для Java полезны и легко доступны при каждой установке. Возможность создания приложения с графическим интерфейсом в одном предложении с использованием встроенных библиотек, доступных в каждой установке Java и соответствующих всем учебным пособиям, которые учащиеся находят в поиске в Google, имеет решающее значение для того, чтобы помочь студентам выйти за рамки языка и начать понимать концепции программирования. ,
IDE для Java предоставляют поддержку как начинающим, так и начинающим студентам. Внедрение в разговор мощных инструментов рефакторинга (например, при обсуждении ООП) поможет студентам научиться писать поддерживаемый код.
Хотя C ++ является полезным языком для изучения, дополнительные понятия, изученные в C ++, на самом деле не стоят дополнительных усилий языка в целом. Существует большой дополнительный набор «уловок», которые необходимо изучить, которые могут быть введены позже (проблемы управления памятью и переполнения буфера, чтобы назвать пару). Требование, чтобы студенты поняли это, прежде чем переходить к таким понятиям, как сложность алгоритмов и наследование, замедляет вас, в то время как требование, чтобы водитель понимал давление в шинах перед вождением, замедляло бы его. Конечно, вы должны это знать. Но вам нужно знать это только как нечто, что вы когда-нибудь ошибетесь , а не как строительный блок более широкой концепции.
источник
Я думаю, что самый большой вопрос, который нужно задать себе: хотите ли вы быть хорошим программистом или сосредоточиться на информатике. Если CS - ваша цель, и вы хотите быть на маршруте PHD, тогда, возможно, Java - путь. Java предоставляет классы коллекций Java, которые имеют множество готовых структур данных и алгоритмов. Преимущество этого двоякое: во-первых, вы можете поиграться со структурами данных и алгоритмами, чтобы увидеть, что они делают, прежде чем беспокоиться о том, как они были построены. Во-вторых, это дает профессорам больше возможностей для обучения принципам CS, которые используют структуры данных, не беспокоясь о мелочах. Позже они могут вернуться и попросить своих учеников создать структуры с нуля.
С ++, с другой стороны, является языком более низкого уровня. Это заставляет вас учитывать указатели и сборку мусора. Кривая обучения немного круче, но, в конце концов, когда вы попадаете на путь программирования с внешними фреймворками, вы будете меньше чувствовать, что просто полагаетесь на скрытую магию. Кроме того, многие крупные компании все еще используют C ++. С Java на C ++ труднее перейти, чем с C ++ на Java.
источник