Правда ли, что человек с достаточно хорошими основами в программировании может легко выучить любой язык программирования?
Хорошо, когда я говорю о языках программирования, я имею в виду гибкие и динамические языки, такие как PHP, Perl, Ruby и т. Д., Но не бывшие языки программирования далекого прошлого.
Я работал только на Java, Groovy и Flex в некоторой степени. Итак, учитывая тот факт, что я программист-любитель, но быстро учусь, грубо говоря, сколько времени потребуется, чтобы закрепиться на любом из таких языков?
programming-languages
learning
Вамси Эмани
источник
источник
Ответы:
Да, с оговорками.
Четыре недели назад я бы сказал, что у меня есть навыки профессионального уровня в C и C ++ и навык любительского уровня в Java. Мой начальник попросил меня написать программное обеспечение на JavaScript, с которым у меня не было опыта, и я ушел.
В течение следующих двух недель я прочитал много примеров кода, нашел все классные библиотеки и написал свою программу. Это сделано, и это работает. Затем на прошлой неделе я купил книгу на JavaScript, и я ее читал, и мальчик, я не знал, что я делаю. Теперь я понимаю, почему мои объекты действовали так странно.
Так что теперь я говорю, я знаю немного JS. Я могу читать его и работать с ним, но я уверен, что то, что я пишу, неэффективно, трудно читается и не соответствует передовым методам.
В общем, быстрый ученик может занять неделю и начать выпускать некачественный продукт на новом языке. Если вы знаете Java, вы можете довольно быстро освоить C, C ++, PHP, Python, JavaScript, но достаточно хорошо, чтобы изменить код или написать четко определенные функции. (Perl может быть сложнее, потому что регулярные выражения сложны.) Чтобы правильно спроектировать систему на новом языке, вам, вероятно, понадобится год профессионального развития под руководством опытных наставников.
источник
В основном ответ - да ... и нет ... это зависит от того, что вы подразумеваете под основами и легко освоите .
ФАКТ
Знание основ программирования поможет независимо от языка. Под основами здесь я подразумеваю вещи, которые не являются специфическими для данной парадигмы. Такие вещи, как алгоритмические, уровни абстракции, изоляции и т. Д.
Знание основ данной парадигмы (ООП, функционал и т. Д.) Позволит легко выучить языки, поддерживающие одну и ту же парадигму. Можно сказать, что хорошее знание языка позволит вам быстро освоить языки одной семьи.
С каждым языком, изучаемым в одной семье, следующий будет мне намного легче, я не удивлюсь, если эта кривая обучения будет экспоненциально быстрее, как вы знаете больше.
МИФ
--- отредактировал последний раздел на основе комментариев ---
Факт...
но
Миф
источник
для любого подобного языка, да
для языков с принципиально разными парадигмами не так уж много
пример: вы знаете C ++, вы хотите изучать Java, кусок пирога; вы знаете VB.NET, вы хотите выучить пролог ... весь торт, возможно три или четыре торта
источник
Я считаю, что краткий ответ: «вроде как правда, но трудно проверить». Очень трудно выучить тесно связанные API, использования, идиомы и парадигмы (ОО, функциональные и т. Д.), Чем фактический синтаксис языка. Я думаю, что сам язык легко завоевать, если у вас есть сильные знания и опыт в основах программирования и некоторые знания компилятора, но его трудно освоить из-за вспомогательных вещей.
Ясным примером будет переход с одного языка на другой; С на Java. Синтаксис кода очень похож на программы в стиле C, но вам также необходимо знать API Java (универсальные шаблоны, сборка мусора и т. Д.) И, скорее всего, в нашем текущем «ИТ-ландшафте» некоторые сторонние фреймворки (Spring, jUnit). , Спящий режим и тд) делать что-то полезное для бизнеса. Так что если вы делали C раньше, синтаксис языка не был бы проблемой, остальное.
Это исходит от меня, который знает Java, C #, Javascript, HTML, CSS, Delphi и т. Д. Я, возможно, не знаю каждый закоулок о фреймворках или библиотеках, которые я использую, но я знаю свой путь и могу быстро освоиться из-за мой опыт использования разных из ранее. Для "быстрого ученика" это все латеральное мышление на самом деле.
источник
Основы информатики, которые вам необходимо знать, включают не только математические основы (теория множеств, логика, теория графов, алгебра, теория информации, алгоритмическая теория информации и т. Д.), Но также ряд языков программирования, по крайней мере по одному от каждого группа - т. е. один императив (возможно, с ООП, но этот бит не обязателен), один активный функционал, один ленивый функционал, один логический, один конкатенирующий или основанный на стеке.
С помощью этой базы вы сможете легко выучить любой новый язык в кратчайшие сроки. Если некоторые биты отсутствуют, вы можете столкнуться с серьезным сопротивлением.
И лучший способ выучить язык наизнанку - это реализовать игрушечный компилятор или интерпретатор для значительной части его (конечно, без стандартной библиотеки - это самая сложная и самая скучная часть любого языка).
источник
Я считаю, что консенсус здесь заключается в том, что наличие хороших основ поможет до некоторой степени, и я не согласен с этим. Тем не менее, один момент, который отсутствует в других ответах, это вопрос выбора идиом языка, и я думаю, что для овладения языком вы должны писать его идиоматически.
Например, вы можете написать множество полностью правильных C #, даже не используя
using
оператор для автоматического удаления объектов, но в хорошо написанном идиоматическом C # вы увидитеusing {...}
много. Я не знаю ни одного не-Net языка, который имеет эту конструкцию (хотя я знаю очень немного других, и мой Java довольно ржавый, так что я могу ошибаться), так что даже эксперт из другого языка, который не имеет этого Особенность нужно будет выучить эту идиому с нуля как бы.источник
Это верное утверждение для некоторого определения «довольно хорошо» и «легко».
Чем лучше вы понимаете основы, тем легче переходить с одного языка на другой. Например, если вы опытный Java-программист, хорошо разбирающийся в объектно-ориентированных языках, базовые синтаксические различия между Java и C # должны быть относительно простыми в освоении через неделю или две. Понадобится больше времени, чтобы понять, как функциональность всех связанных библиотек отображается от одной к другой, но вы, вероятно, будете иметь приличный контроль над основными библиотеками через месяц или два. Затем нужно выяснить, в каких случаях стандартный подход к проблеме на языке A не переводится напрямую на стандартный подход на языке B (т. Е. Вы хотите использовать LINQ в C #, а не JPA в Java) и почувствовать себя комфортно. достаточно на новом языке, что вы думать в нем, а не думать на старом языке и "переводить". Это может занять от трех до шести месяцев, в зависимости от того, насколько хорошо вы используете карты. По прошествии шести месяцев опытный Java-программист, вероятно, будет достаточно эффективным и компетентным разработчиком C #. Но, как и во всем, вы можете потратить годы на изучение всех сложных деталей, освоение различных библиотек и надстроек, которые не являются частью языка, но являются частью окружающей экосистемы, и в целом улучшают себя как разработчика на этом языке. Опытный Java-программист, вероятно, был бы достаточно эффективным и компетентным разработчиком C #. Но, как и во всем, вы можете потратить годы на изучение всех сложных деталей, освоение различных библиотек и надстроек, которые не являются частью языка, но являются частью окружающей экосистемы, и в целом улучшают себя как разработчика на этом языке. Опытный Java-программист, вероятно, был бы достаточно эффективным и компетентным разработчиком C #. Но, как и во всем, вы можете потратить годы на изучение всех сложных деталей, освоение различных библиотек и надстроек, которые не являются частью языка, но являются частью окружающей экосистемы, и в целом улучшают себя как разработчика на этом языке.
источник
Я бы сказал, что это полностью зависит от энтузиазма человека, чтобы выучить новый язык. Когда основы сильны, и если он может понять, как новый язык что-то интерпретирует, то довольно легко выучить любой язык.
Лучший пример - это я. Я работал с несколькими языками, хотя большую часть своей работы я делал в C #, но я начал свою карьеру с C и начал изучать C ++, Java, VB, PHP, языки сценариев, Perl и так далее. В течение всего этого семестра я никогда не чувствовал, что не могу выучить этот язык.
источник
Мне никогда не было сложно выучить новый язык программирования, наоборот, большую часть времени это было очень весело. Тем не менее, есть языки, на которые я смотрел, но никогда не понимал, потому что я не мог понять идею, стоящую за ними, если таковые были. Одним из примеров является COBOL, я никогда не понимал, что должно было пойти в разделение и раздел и почему. Другими примерами являются PHP и Groovy. С PHP я пытался понять, зачем он вообще нужен, учитывая, что есть perl. Возможно, кто-то может объяснить. С Groovy я также не понимаю немного концепций, стоящих за ним.
источник
Все это зависит.
Я знаю, что это часто ответ ...
Но что означают основы ? Многие люди, у которых есть основы для одной парадигмы (например, ОО), не имеют их для других парадигм (например, функциональных).
Многие люди, пришедшие из ОО и знающие все шаблоны проектирования, могут не иметь ни малейшего представления о функциональных шаблонах проектирования или таких вещах, как понимание списка, каррирование, хвостовая рекурсия, замыкания ...
Так что ДА: если основы означают основы всех парадигм.
В этом случае проблема заключается в том, что javascript использует много парадигм, таких как процедурный, OO и немного функциональный, и имеет странную область видимости, исходящую из java, c ++, ...
Таким образом, основы не помогают в этом случае, но выбор большего количества основ здесь и все же переход на другой язык может становиться все легче и легче, чем больше шаблонов вы получаете в своем наборе инструментов.
источник
Не забывайте, что искусство компьютерного программирования - это искусство оставаться ТОЧНО тем, что вы имеете в виду. Поэтому любой способ сообщить компьютеру, что он делает - от Java до Access, Excel и Visual Fortran, - это язык программирования.
А некоторые языки просто плохие. ИМХО Excel и Basic - плохие языки; Java и C ++ - хорошие языки. Скрипты FileMaker - ужасный язык. HTML может быть отличным, если вы не неряшливый.
Вы можете это узнать? Если это хорошо, да. Если это плохо, зависит от вашего порога отвращения. Вещи, которые заставляют вас рвать, трудно учиться.
Не все решайте использовать язык X в проекте, если вы уже не видели и не играли с языком X.
источник
Ответ: «Это факт, а не миф!»
Я так же, как вы, я также работал в различных технологиях, а именно. Ява, .net и недавно работал с iPhone, Android и BlackBerry.
Сеть полна ресурсов, просто просмотрите информацию, поймите это, внедрите это и двигайтесь дальше.
На самом деле «Технология создана для разработчиков, а разработчики не для технологий, технологии меняются, а разработчики - нет».
:)
источник