Будь-яку мову програмування легко освоїти, якщо основи програмування є сильними. Факт чи міф? [зачинено]


33

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

Добре, коли я розмовляю мовами програмування, я маю на увазі гнучкі та динамічні мови, такі як PHP, Perl, Ruby тощо, але не колишні мови програмування далекого минулого.

Я певною мірою працював лише на java, groovy та flex. Отож, враховуючи той факт, що я аматорський програміст, але швидко навчаюся, приблизно, скільки часу знадобиться, щоб закріпитися на будь-якій з таких мов?


1
Замініть "Будь-який" на "Найбільше".

4
Що робить мову "спритною"? Я подумав, що спритний - це процес розвитку .
oosterwal

17
Освоївся легко? Ні. Навчився легко? Так. Майстерність передбачає рівень знань, який вимагає років використання будь-якої мови. Навчання, як користуватися будь-якою мовою після встановлення ваших основ, має бути даним.
Джоел Етертон

1
Ні, це справедливо для мов similair. Знання Java не допоможе вам вивчити Haskell, але допоможе вивчити C ++ тощо. Знання PHP не допоможе вам навчитися монтажу, але допоможе навчитися Ruby.
iveqy

Відповіді:


46

Так, із застереженнями.

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

Протягом наступних двох тижнів я прочитав багато фрагментів зразків коду, знайшов усі цікаві бібліотеки та написав свою програму. Це зроблено, і воно працює. Тоді минулого тижня я купив книгу JavaScript, і я її читав, хлопче, я не знав, що роблю. Тепер я розумію, чому мої об’єкти діяли так дивно.

Тому зараз я кажу, я знаю трохи JS. Я можу її читати та працювати з нею, але я впевнений, що те, що я пишу, є неефективним, важко читається та не дотримується кращих практик.

Загалом, швидкий учень може зайняти тиждень і почати випускати неякісний продукт новою мовою. Якщо ви знаєте Java, ви можете досить швидко підібрати C, C ++, PHP, Python, JavaScript, але лише досить добре, щоб змінити код або записати чітко визначені функції. (Perl може бути складніше, тому що regex є складними.) Для того, щоб правильно сконструювати систему новою мовою, ви, мабуть, хотіли б року професійного розвитку під досвідчених наставників.


18
Я б ризикну сказати, що це займає два роки. Перший рік повинен залишати вас відносно досвідченим, другий рік повинен залишати вас відносно ефективними.
Tim Post

4
Я мав цей досвід багато років тому (після вивчення десятків мов) ... мені довелося працювати в Аді. На написання коду в Ада знадобилося кілька днів. Щоб дійсно потрапити в головний простір дизайнерів системи мови / часу роботи і написати хороший код, на це пішов рік.
quick_now

1
Якщо чесно, я навчився і Java таким чином. Зараз я перебуваю на рівні 1 року, і я б сказав, що "відносно досвідчений" є точним.
Бред

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

У мене був подібний досвід роботи з VB.net, поки я не прочитав код, який написав мій начальник (з декількома роками досвіду VB) ... о, дорогий. Код пахне дублюючим кодом, як правило, перевершує мови!
НезадоволенеЗаключення

28

По суті, відповідь - так ... і ні ... це залежить від того, що ви маєте на увазі під основами та з легкістю освоюєте .

ФАКТ

  • Знання основ програмування допоможе незалежно від мови. Під основою я маю на увазі речі, не характерні для певної парадигми. Такі речі, як алгоритмічні, рівні абстракції, ізоляція тощо.

  • Добре знаючи основи даної парадигми (OOP, functionnal тощо), буде легко вивчити мови, що підтримують ту саму парадигму. Можна сказати, добре знання мови дозволить швидко підібрати мови однієї родини.

  • З усіма мовами, які вивчаються в одній сім'ї, наступна мені стане набагато легшою, я не здивуюся, якщо ця крива навчання буде експоненціально швидшою, як ви знаєте більше.

МІФ

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

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

Факт ...

  • Знання першої парадигми може допомогти вам вивчити наступну ...

але

Міф

  • Не будьте зухвалими, це може так само гальмувати вас або взагалі не допомогти третій парадигмі.

все добре, окрім останнього. анекдотично, знання мови процедурного програмування на зразок C нічим не допоможе при спробі вивчити логічну мову, як Prolog, і в моєму випадку це перешкоджає, наприклад, "Питання: як я кодую цикл у prolog?" ==> "А: ти цього не робиш".
Стівен А. Лоу

2
Анекдотичні свідчення, які я чув тут і там, свідчать про те, що ви можете легко почати програмування в «Схемі» досить легко, але що набагато складніше, якщо вони програмували в BASIC або C # або щось подібне спочатку.
Девід Торнлі

1
@Steven & David: Я був не зовсім впевнений у цьому останньому. Я перейшов від процедурного до об'єктного до функціонального, але ще не намагався створити логіку. Мені було легше, коли йде час і досвід, але не наважився на узагальнення. Я видозмінюю відповідь, грунтуючись на вашому коментарі.
ньютопський

14

для будь-якої подібної мови, так

для мов з радикально різними парадигмами не так багато

приклад: ви знаєте C ++, ви хочете вивчити Java, шматок пирога; ви знаєте VB.NET, ви хочете навчитися Prolog ... весь торт, можливо, три-чотири торти


1
Я згоден. Є деякі мови, які просто слідують за зовсім іншою філософією; таким чином, не тривіально переходити, наприклад, з імперативної мови, наприклад C, на логічну мову програмування, як Prolog, не докладаючи певних зусиль.
sakisk

4

Я вважаю, що коротка відповідь така: "якась правда, але важко перевірити". Дуже важко вивчити тісно пов'язані API, звичаї, ідіоми та парадигми (OO, функціональні тощо), ніж власне синтаксис мови. Я думаю, що мова сама по собі легко завойовується, якщо ви маєте потужні знання та досвід з основ програмування та деякі знання компілятора, але їх важко засвоїти через допоміжні речі.

Ясний приклад - перехід від однієї мови до іншої; C до Java. Синтаксис коду дуже нагадує програми в стилі C, але ви також повинні знати java api (дженерики, збирання сміття тощо) і, швидше за все, в нашому нинішньому "ІТ-пейзажі", деякі сторонні рамки (Spring, jUnit , У сплячку тощо), щоб зробити щось корисне для бізнесу. Отже, якщо ви робили C раніше, синтаксис мови не був би проблемою, це інше.

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


Я з цим повністю згоден. Вивчення найкращих практик / apis / популярних бібліотек / тощо займає багато, набагато довше, ніж вивчення синтактики мов програмування, і це була справжня неправда, і те, що можна придбати лише витративши деякий час на роботу з мовою та її екосистема.
jviotti

3

Основи інформатики, які вам потрібно знати, включають не тільки математичну основу (теорія множин, логіка, теорія графів, алгебра, теорія інформації, алгоритмічна теорія інформації тощо), а й ряд мов програмування, принаймні по одному з кожного група - тобто один імператив (можливо, з OOP, але цей біт не є обов'язковим), один прагнутий функціонал, один ледачий функціонал, один логічний, один конкатенативний або на основі стека.

З цією базою ви зможете легко за будь-який час вивчити будь-яку нову мову. Якщо деякі біти відсутні, ви можете зіткнутися з серйозним опором.

І найкращий спосіб вивчення мови зсередини - це реалізація компілятора іграшок або інтерпретатора для значного її набору (звичайно, без стандартної бібліотеки - це найскладніша і найнаситніша частина будь-якої мови).


2

Я думаю, що тут є консенсус, що наявність хороших основ допоможе певною мірою, і я не згоден з цим. Однак один момент, якого не вистачає в інших відповідях, - це питання підбору ідіом мови, і я думаю, щоб засвоїти мову, ви повинні писати її ідіоматично.

Наприклад, ви можете писати повтори повністю правильного C #, не використовуючи жодного разу usingоператора для автоматичного розпорядження об'єктами, але в добре написаному ідіоматичному C # ви побачите using {...}багато. Я не знаю жодної мови. Немає такої конструкції (хоча я знаю дуже мало інших, і моя Java досить іржава, тому я можу помилитися), тому навіть експерт з іншої мови, який не має цього особливістю потрібно буде вивчити цю ідіому з нуля.


Подібні ідіоми широко використовуються в Lisp та Scheme, тому для цього не буде нічого нового для того, хто виходить з цього фону, і навмисно шукати цю особливість будь-якою новою мовою.
SK-логіка

Так, але якщо ви родом з, скажімо, Паскаля чи ADA, це була б абсолютно нова ідіома, на яку ви навіть не знали, як слідкувати, поки не побачили.
Стів

саме тому я вважаю, що треба знати принаймні одну мову з кожної групи, щоб мати можливість вивчити будь-яку нову мову та розумно вибрати інструменти.
SK-логіка

@ SK-логіка: Коли я побачив такі речі, як "використання" та "спробуй ... нарешті", у мене не було проблем з розумінням їх як грубого еквівалента загального Ліса "розмотувати-захистити". Однак мовні функції, подібні до цієї, можуть не відображатись у заданому виборі мов з багато парадигми.
Девід Торнлі

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 я намагався зрозуміти, навіщо це потрібно в першу чергу, враховуючи, що існує перл. Можливо, хтось може пояснити. З Groovy я теж не розумію трохи понять, що стоять за цим.


1

Все залежить.

Я знаю, що це часто відповідь ...

Але що означає основи ?? Багато людей, які мають основи для однієї парадигми (наприклад, ОО), не мають їх для інших парадигм (як функціональних).

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

Так ТАК: якщо основи означають основи всіх парадигм.

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

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


0

Не забувайте, що мистецтво комп'ютерного програмування - це мистецтво залишатися ТОЧНО тим, що ви маєте на увазі. Тож будь-який засіб розповісти комп’ютеру, що робити, від Java до доступу до Excel до Visual Fortran - це мова програмування.

І деякі мови просто погані. IMHO Excel і Basic - це погані мови; Java та C ++ - хороші мови. Сценарії FileMaker - жахлива мова. HTML може бути чудовим, якщо ви не неохайний.

Ви можете це навчитися? Якщо це добре, так. Якщо це погано, залежить від вашої огидної межі. Речі, які змушують вас бавитись, важко вивчити.

Не кожен зобов’язаний використовувати мову X у проекті, якщо ви вже не бачили та не грали з мовою X.


0

Відповідь "Це факт не міф!"

Я так само, як і ви, також працював у різних технологіях. java, .net і нещодавно працював з iPhone, android та blackberry.

Мережа наповнена ресурсами, просто пройдіть інформацію, зрозумійте це, застосуйте це і рухайтеся далі.

Насправді "Технологія створена для розробників, а розробники не створені для технологій. Технології змінюються, але розробники не роблять".

:)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.