Как трудный это должно превратить “программиста” Школы Java в C или программиста на C++? [закрытый]

Моя компания, дом C++, всегда надеется нанимать недавних выпускников. Однако из-за явления Школ Java, мы обычно заканчиваем тем, что брали интервью у сильных программистов Java с, возможно, мелким поверхностным знанием C++. Часто классы C++ действительно не готовят студентов к работе в C++. Тем не менее, часто это яркие дети, стремящиеся изучить и приложить все усилия.

Каждое интервью, я борюсь с этим фундаментальным вопросом:

Как трудно это должно превратить "программиста" Школы Java в C или программиста на C++? Ваша компания имела опыт при превращении стереотипного "программиста" Школ Java в сильного программиста на C++? Действительно ли это стоит усилия?

Одна из причин, я борюсь с этим, не происходит просто из-за C или C++ по сравнению с языковым различием Java, это - фундаментальные навыки, которые идут с изучением C или C++, что я думаю, часто теряются в Школе Java. Они включают структуры данных, вычислительную сложность, ручное управление памятью, действительно все, что Joel Spolsky говорит здесь.

Часто, насколько я могу сказать, у студента будут некоторые из тех фундаментальных навыков (смочь ответить на несколько вопросов), но у меня все еще будет эта значительная часть моего ума, это чрезвычайно скептически настроено с тем, как хорошо кто-то может освоить эти навыки, не пачкая руки в некотором C или C++. Возможно, я должен быть разуверен этого стереотипа. Я просто несправедлив?

Так или иначе, каков Ваш опыт с превращением "программиста" Школы Java в C или программиста на C++?

28
задан Joel Coehoorn 28 December 2011 в 20:39
поделиться

21 ответ

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

Они не поймут указатели, но хорошее программирование на C++ обычно не использует указатели сложными способами. (Существуют исключения, но так как я не знаю то, что делает Ваша компания я не могу сказать, применялись ли они.), В конце концов, Вы, вероятно, не хотите своих разработчиков, пишущих их собственные связанные списки вместо того, чтобы использовать станд.:: список.

Они не поймут ручное управление памятью, но это намного легче в C++, чем это раньше было. В современном C++, делая Ваше собственное управление памятью стал более твердым, из-за потенциала исключений, таким образом, Вы хотите практиковать RAII с в значительной степени всем (использующий auto_ptr, повышение:: shared_ptr, безотносительно).

, Если бы я выполнял вещи, я нанял бы их, если бы они выглядели хорошими. Я знал бы, что могли бы быть проблемы (C++ является более требовательным языком, чем Java, в конце концов), и имейте своего рода идею, как иметь дело с ними.

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

41
ответ дан David Thornley 28 November 2019 в 02:15
поделиться

Я - Java-разработчик сам, но имел основу C/C++ в колледже. И я РАД, что запустил с управления памятью, списков, очередей, стеков и самый важный: указатели. Хотя я не использую указатели явно, я знаю то, что продолжается позади моего приложения, найдите утечки памяти, проблемы производительности, и т.д.

я думаю, что лучшее решение не просит, чтобы разработчики Java/C# изучили C/C++ (и все вопросы, которые идут с этими языками), когда они переходят к работе, НО преподают им эти предметы в колледже. Это было бы лучшим решением.

, Как это теперь, это похоже на фиксацию эффектов/признаков, не фактической причины.

1
ответ дан Alexandru Luchian 28 November 2019 в 02:15
поделиться

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

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

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

  1. Наем исключительно из школ C/C++, а не школ Java.
  2. , Если нет школ C/C++, то наймите опытных программистов C/C++, а не из колледжа.
  3. , Если Вы стремитесь нанимать из колледжа, затем примите, чем Вы собираетесь иметь ненезначительную интенсивность отказов в преобразовании их.
2
ответ дан JohnMcG 28 November 2019 в 02:15
поделиться

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

2
ответ дан Bill the Lizard 28 November 2019 в 02:15
поделиться

Относительно просто выяснить, есть ли у выпускника тело, понимая основы независимо от их группы 'языка'. Эти основные принципы включают 1) Структуры данных 2) Операционные системы и 3) Алгоритмы и их Сложность. Это чрезвычайно концептуальные области и обсуждающий дизайн, или подход к конкретной проблеме в них может показать, насколько сильный или слабый они. Вы не должны заставлять их записать код.

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

я всегда иду для этих основных принципов и их оценки - новый градиент или опытный. Это основные критерии для нанимания кого-то.

3
ответ дан Ather 28 November 2019 в 02:15
поделиться

Как человек, который в первую очередь является «школьником Java», и совсем недавно окончил его, я определенно думаю, что смогу выучить C или C ++ без особой боли ...

Однако я действительно не хочу. Я могу говорить только за себя, но C может быть довольно уродливым языком, если вы выросли на Java. Я думаю, что мотивация будет большим препятствием. Мотивация и, возможно, некоторое нытье о том, что «в Java это намного проще, почему не C Java ?» :)

Если вы можете найти кого-то с надлежащей мотивацией, все остальное будет хорошо. :)

4
ответ дан Ace 28 November 2019 в 02:15
поделиться

"Вы не можете преподавать высокий". - некоторый известный баскетбольный тренер.

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

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

6
ответ дан Larry OBrien 28 November 2019 в 02:15
поделиться

Мое эмпирическое правило: я бы предпочел, чтобы программист на C / C ++ писал на Java, а не программист на Java для написания C / C ++. Я не могу сказать, какие Java-программисты могут справиться с управлением памятью и указателями, пока не попробуют.

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

  1. Бесстрашный. Они не обращали внимания.
  2. Страшно и панически, потому что они знают, что не могут справиться с такой сложностью.
  3. Страшные и нетерпеливые, потому что они понимают, что даже люди умнее их могут получить удар в живот от странных проблем с памятью и оборудованием, но, черт возьми, это звучит как хороший вызов.

Я бы нанял из группы 3.

10
ответ дан Nosredna 28 November 2019 в 02:15
поделиться

Я запрограммировал на многих языках и нахожу C++ очень трудным выяснить и быть продуктивным в, по сравнению с другими языками, которые я использовал, такие как Java, C, Python, Fortan, JavaScript, ASP и Perl. Я почти сказал бы, что это находится в собственной категории. Я НЕ полагаю, что компетентность на одном из языков, которые я просто перечислил (включая Java) является большим предиктором того, насколько хороший программист на C++ человек мог бы быть. Я думаю, что C++ почти требует другого типа взглядов, и конечно способности содержать огромный объем информации в голове при кодировании, по сравнению с фокусировкой главным образом на бизнес-требованиях.

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

Так, на основе моей небольшой и явно смещенной выборки одного человека (меня!) Я предложил бы склониться к разработчикам, которые продемонстрировали значительное количество прошлого опыта C++ если, именно это они собираются быть выполнением на работе, повседневно. Необходимо будет провести больше времени, находя тех кандидатов, но у Вас будут лучшие шансы на успех в конечном счете, я думаю.

17
ответ дан unintentionally left blank 28 November 2019 в 02:15
поделиться

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

17
ответ дан coder1 28 November 2019 в 02:15
поделиться

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

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

19
ответ дан Onorio Catenacci 28 November 2019 в 02:15
поделиться

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

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

2
ответ дан pmr 28 November 2019 в 02:15
поделиться

Это - просто другой язык.

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

Однако, если они должны использовать STL, шаблоны, исключения и подобные, им, вероятно, будет нужно еще некоторое руководство.

-3
ответ дан Jasper Bekkers 28 November 2019 в 02:15
поделиться

Это более трудно, чем превращение хорошего программиста C/C++ в хорошего программиста Java. Акцент "хорош" здесь. Любые люди могут программировать на любом языке плохо. Хорошие программисты на C++ должны понять указатели хорошо. Одно из самых важных понятий в C++ является итератором, который является обобщением указателя C через перегрузку оператора, которая делает много алгоритмов действительно универсальными в C++.

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

0
ответ дан ididak 28 November 2019 в 02:15
поделиться

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

0
ответ дан Community 28 November 2019 в 02:15
поделиться

Зависит от IQ программиста. Реальный вопрос: действительно ли этот программист достаточно умен для нас для инвестирования времени изучения? Чем более умный, тем меньше времени он должен изучить.

0
ответ дан Ovidiu Pacurar 28 November 2019 в 02:15
поделиться

Java programmwer вписался бы прямо в дом C#, а также разработчик C++ будет.

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

0
ответ дан dove 28 November 2019 в 02:15
поделиться

Я думаю, что эта идея «школы Java» в значительной степени выдумана. Университет, в котором я учусь, использует java для обучения основным курсам CS (структуры данных, алгоритмы и т. Д.). Однако это многие другие курсы, использующие другие языки, такие как C / C ++ / Scheme, и на курсах более высокого уровня работа может быть выполнена в любой язык.

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

1
ответ дан None 28 November 2019 в 02:15
поделиться

Я запустил с C/C++ и переместился в Java.

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

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

, Когда Вы работаете с системой с GC, Вы становитесь намного лучше в размышлении о Вашем дизайне на высоком уровне. Можно на самом деле кодировать способом, который намного более понятен. Вы начинаете действительно иметь классы, которые фокусируются на единственной ответственности (большинство классов будет несколькими экранами - большинство методов будет тривиально).

я никогда не видел хороший код C++ OO, который, вероятно, хорош, потому что код OO не будет всем, что производительный и просто имеет слишком много маленьких выделений/освобождения, вызовов сокращенного метода и другие небольшие контрольно-пропускные пункты производительности для создания программиста на C++ счастливым.

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

Между прочим, я хотел бы на самом деле видеть некоторый хороший код C++ OO, если у кого-либо есть ссылка...

1
ответ дан Bill K 28 November 2019 в 02:15
поделиться

Я не покупаю «Вы либо получаете указатели / рекурсию, либо нет». Ум - это чистый лист. Любой может узнать что угодно, уделив достаточно времени и интереса. Вопрос в том, заинтересованы ли эти дети.

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

Тем не менее, лично я бы не стал тратить время на кого-то, кто не понимает C и ассемблер. Существует большая разница между отладкой дампа ядра с помощью gdb из-за сбоя C ++ и просмотром трассировки стека Java. C ++ - действительно ужасный язык по многим причинам, но в нем хорошо то, что у него есть общего с C.Это мощный способ указать компьютеру делать именно то, что вы хотите, без необходимости беспокоиться. о том, что еще за ерунда творит некоторая среда выполнения.

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

Массачусетский технологический институт, Стэнфорд, Калифорнийский университет в Беркли, Технологический институт Джорджии, Иллинойс Урбана Шампейн, CMU, Калифорнийский технологический институт, USC, Мичиган, Анн-Арбор, штат Техас, Остин

. Я бы также не стал нанимать кого-либо для написания программного обеспечения, использующего Microsoft Windows. Будучи студентом информатики, вы просто не могли

-3
ответ дан 28 November 2019 в 02:15
поделиться

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

-1
ответ дан 28 November 2019 в 02:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: