Любой язык программирования может быть легко освоен, если основы программирования сильны. Факт или миф? [закрыто]


33

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

Хорошо, когда я говорю о языках программирования, я имею в виду гибкие и динамические языки, такие как PHP, Perl, Ruby и т. Д., Но не бывшие языки программирования далекого прошлого.

Я работал только на Java, Groovy и Flex в некоторой степени. Итак, учитывая тот факт, что я программист-любитель, но быстро учусь, грубо говоря, сколько времени потребуется, чтобы закрепиться на любом из таких языков?


1
Заменить «Любой» на «Мост».

4
Что делает язык «гибким»? Я думал, что Agile - это процесс разработки .
oosterwal

17
Освоил легко? Нет. Учился легко? Да. Мастерство подразумевает уровень опыта, который требует многолетнего использования на любом языке. Изучение того, как использовать любой язык, как только ваши основы будут на месте, должно быть само собой разумеющимся.
Джоэл Этертон

1
Нет, это просто так для языков similair. Знание Java не поможет вам выучить Haskell, но поможет вам изучить C ++ и так далее. Знание PHP не поможет вам выучить ассемблер, но поможет вам выучить Ruby.
Iveqy

Ответы:


46

Да, с оговорками.

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

В течение следующих двух недель я прочитал много примеров кода, нашел все классные библиотеки и написал свою программу. Это сделано, и это работает. Затем на прошлой неделе я купил книгу на JavaScript, и я ее читал, и мальчик, я не знал, что я делаю. Теперь я понимаю, почему мои объекты действовали так странно.

Так что теперь я говорю, я знаю немного JS. Я могу читать его и работать с ним, но я уверен, что то, что я пишу, неэффективно, трудно читается и не соответствует передовым методам.

В общем, быстрый ученик может занять неделю и начать выпускать некачественный продукт на новом языке. Если вы знаете Java, вы можете довольно быстро освоить C, C ++, PHP, Python, JavaScript, но достаточно хорошо, чтобы изменить код или написать четко определенные функции. (Perl может быть сложнее, потому что регулярные выражения сложны.) Чтобы правильно спроектировать систему на новом языке, вам, вероятно, понадобится год профессионального развития под руководством опытных наставников.


18
Рискну сказать, что это займет два года. Первый год должен оставить вас относительно опытным, второй год должен сделать вас относительно эффективным.
Тим Пост

4
У меня был этот опыт много лет назад (после изучения примерно дюжины языков) ... Мне пришлось работать в Аде. Написание кода на Аде заняло несколько дней. Чтобы по-настоящему попасть в свободное пространство разработчиков языка / среды исполнения и написать ХОРОШИЙ код, это заняло год.
quick_now

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

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

У меня был похожий опыт работы с VB.net, пока я не прочитал код, который написал мой начальник (с несколькими годами опыта работы с VB) ... о дорогой. Код пахнет как повторяющийся код, как правило, выходят за рамки языков!
Рассерженная шлюха

28

В основном ответ - да ... и нет ... это зависит от того, что вы подразумеваете под основами и легко освоите .

ФАКТ

  • Знание основ программирования поможет независимо от языка. Под основами здесь я подразумеваю вещи, которые не являются специфическими для данной парадигмы. Такие вещи, как алгоритмические, уровни абстракции, изоляции и т. Д.

  • Знание основ данной парадигмы (ООП, функционал и т. Д.) Позволит легко выучить языки, поддерживающие одну и ту же парадигму. Можно сказать, что хорошее знание языка позволит вам быстро освоить языки одной семьи.

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

МИФ

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

--- отредактировал последний раздел на основе комментариев ---

Факт...

  • Знание первой парадигмы может помочь вам узнать следующую ...

но

Миф

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

все хорошо, кроме последнего. Необычно, что знание процедурного языка программирования, такого как C, не помогло при попытке выучить логический язык, такой как Пролог, и в моем случае это не помогло, например: «Вопрос: как мне кодировать цикл в прологе?» ==> «А: нет».
Стивен А. Лоу

2
Неподтвержденное свидетельство, которое я слышал здесь и там, говорит о том, что вы можете довольно легко начать программировать новичка на Scheme, но гораздо сложнее, если они программируют на BASIC или C # или что-то подобное в первую очередь.
Дэвид Торнли

1
@ Стивен и Дэвид: я не был уверен в этом последнем. Я перешел от процедурного к объектному к функциональному, но еще не пробовал семью логики. С течением времени и опыта мне было легче, но я не осмеливался обобщать. Я изменю ответ на основании вашего комментария.
Newtopian

14

для любого подобного языка, да

для языков с принципиально разными парадигмами не так уж много

пример: вы знаете C ++, вы хотите изучать Java, кусок пирога; вы знаете VB.NET, вы хотите выучить пролог ... весь торт, возможно три или четыре торта


1
Я согласен. Есть некоторые языки, которые просто следуют совершенно другой философии; таким образом, нетрудно переключиться, например, с императивного языка, такого как C, на язык логического программирования, такой как Prolog, без каких-либо усилий.
Сакиск

4

Я считаю, что краткий ответ: «вроде как правда, но трудно проверить». Очень трудно выучить тесно связанные API, использования, идиомы и парадигмы (ОО, функциональные и т. Д.), Чем фактический синтаксис языка. Я думаю, что сам язык легко завоевать, если у вас есть сильные знания и опыт в основах программирования и некоторые знания компилятора, но его трудно освоить из-за вспомогательных вещей.

Ясным примером будет переход с одного языка на другой; С на Java. Синтаксис кода очень похож на программы в стиле C, но вам также необходимо знать API Java (универсальные шаблоны, сборка мусора и т. Д.) И, скорее всего, в нашем текущем «ИТ-ландшафте» некоторые сторонние фреймворки (Spring, jUnit). , Спящий режим и тд) делать что-то полезное для бизнеса. Так что если вы делали C раньше, синтаксис языка не был бы проблемой, остальное.

Это исходит от меня, который знает Java, C #, Javascript, HTML, CSS, Delphi и т. Д. Я, возможно, не знаю каждый закоулок о фреймворках или библиотеках, которые я использую, но я знаю свой путь и могу быстро освоиться из-за мой опыт использования разных из ранее. Для "быстрого ученика" это все латеральное мышление на самом деле.


Я полностью согласен с этим. Изучение лучших практик / apis / популярных библиотек / и т. Д. Занимает гораздо больше времени, чем изучение синтаксиса языков программирования, и это было настоящей проблемой, ложью, которую можно получить, потратив некоторое время на работу с языком и его языком. экосистема.
Jviotti

3

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

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

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


2

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

Например, вы можете написать множество полностью правильных C #, даже не используя usingоператор для автоматического удаления объектов, но в хорошо написанном идиоматическом C # вы увидите using {...}много. Я не знаю ни одного не-Net языка, который имеет эту конструкцию (хотя я знаю очень немного других, и мой Java довольно ржавый, так что я могу ошибаться), так что даже эксперт из другого языка, который не имеет этого Особенность нужно будет выучить эту идиому с нуля как бы.


Подобные идиомы широко используются в Лиспе и Схеме, так что это не будет чем-то новым для человека, пришедшего из этого фона, и человек намеренно будет искать эту функцию на любом новом языке.
SK-logic

Да, но если вы приехали, скажем, из Паскаля или ADA, это была бы совершенно новая идиома, которую вы даже не знали бы высматривать, пока не увидели ее.
Стив

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

@ SK-logic: Когда я видел такие вещи, как «использование» и «попробуй ... наконец-то», у меня не было проблем с пониманием их как грубого эквивалента Common Lisp «unwind-protect». Однако такие языковые функции могут не отображаться в данной многопарадигмальной выборке языков.
Дэвид Торнли

1

Это верное утверждение для некоторого определения «довольно хорошо» и «легко».

Чем лучше вы понимаете основы, тем легче переходить с одного языка на другой. Например, если вы опытный Java-программист, хорошо разбирающийся в объектно-ориентированных языках, базовые синтаксические различия между Java и C # должны быть относительно простыми в освоении через неделю или две. Понадобится больше времени, чтобы понять, как функциональность всех связанных библиотек отображается от одной к другой, но вы, вероятно, будете иметь приличный контроль над основными библиотеками через месяц или два. Затем нужно выяснить, в каких случаях стандартный подход к проблеме на языке A не переводится напрямую на стандартный подход на языке B (т. Е. Вы хотите использовать LINQ в C #, а не JPA в Java) и почувствовать себя комфортно. достаточно на новом языке, что вы думать в нем, а не думать на старом языке и "переводить". Это может занять от трех до шести месяцев, в зависимости от того, насколько хорошо вы используете карты. По прошествии шести месяцев опытный Java-программист, вероятно, будет достаточно эффективным и компетентным разработчиком C #. Но, как и во всем, вы можете потратить годы на изучение всех сложных деталей, освоение различных библиотек и надстроек, которые не являются частью языка, но являются частью окружающей экосистемы, и в целом улучшают себя как разработчика на этом языке. Опытный Java-программист, вероятно, был бы достаточно эффективным и компетентным разработчиком C #. Но, как и во всем, вы можете потратить годы на изучение всех сложных деталей, освоение различных библиотек и надстроек, которые не являются частью языка, но являются частью окружающей экосистемы, и в целом улучшают себя как разработчика на этом языке. Опытный Java-программист, вероятно, был бы достаточно эффективным и компетентным разработчиком C #. Но, как и во всем, вы можете потратить годы на изучение всех сложных деталей, освоение различных библиотек и надстроек, которые не являются частью языка, но являются частью окружающей экосистемы, и в целом улучшают себя как разработчика на этом языке.


1

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

Лучший пример - это я. Я работал с несколькими языками, хотя большую часть своей работы я делал в C #, но я начал свою карьеру с C и начал изучать C ++, Java, VB, PHP, языки сценариев, Perl и так далее. В течение всего этого семестра я никогда не чувствовал, что не могу выучить этот язык.


3
И языки, которые вы описали, более или менее похожи друг на друга. Для испытания попробуйте выучить Haskell, или Scheme, или Forth, или Prolog.
Дэвид Торнли

1

Мне никогда не было сложно выучить новый язык программирования, наоборот, большую часть времени это было очень весело. Тем не менее, есть языки, на которые я смотрел, но никогда не понимал, потому что я не мог понять идею, стоящую за ними, если таковые были. Одним из примеров является COBOL, я никогда не понимал, что должно было пойти в разделение и раздел и почему. Другими примерами являются PHP и Groovy. С PHP я пытался понять, зачем он вообще нужен, учитывая, что есть perl. Возможно, кто-то может объяснить. С Groovy я также не понимаю немного концепций, стоящих за ним.


1

Все это зависит.

Я знаю, что это часто ответ ...

Но что означают основы ? Многие люди, у которых есть основы для одной парадигмы (например, ОО), не имеют их для других парадигм (например, функциональных).

Многие люди, пришедшие из ОО и знающие все шаблоны проектирования, могут не иметь ни малейшего представления о функциональных шаблонах проектирования или таких вещах, как понимание списка, каррирование, хвостовая рекурсия, замыкания ...

Так что ДА: если основы означают основы всех парадигм.

В этом случае проблема заключается в том, что javascript использует много парадигм, таких как процедурный, OO и немного функциональный, и имеет странную область видимости, исходящую из java, c ++, ...

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


0

Не забывайте, что искусство компьютерного программирования - это искусство оставаться ТОЧНО тем, что вы имеете в виду. Поэтому любой способ сообщить компьютеру, что он делает - от Java до Access, Excel и Visual Fortran, - это язык программирования.

А некоторые языки просто плохие. ИМХО Excel и Basic - плохие языки; Java и C ++ - хорошие языки. Скрипты FileMaker - ужасный язык. HTML может быть отличным, если вы не неряшливый.

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

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


0

Ответ: «Это факт, а не миф!»

Я так же, как вы, я также работал в различных технологиях, а именно. Ява, .net и недавно работал с iPhone, Android и BlackBerry.

Сеть полна ресурсов, просто просмотрите информацию, поймите это, внедрите это и двигайтесь дальше.

На самом деле «Технология создана для разработчиков, а разработчики не для технологий, технологии меняются, а разработчики - нет».

:)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.