Як швидко підібрати нову мову, якщо я знаю декількох інших? [зачинено]


14

Один із питань, які виникають на Programmers.SE, - це як вивчити певну мову, враховуючи кілька інших (як правило, завдяки великому досвіду чи освіті).

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

З вашого досвіду, які загальні стратегії ви використовували для швидкого вибору нової мови? Чи є конкретні аспекти мови, на якій ви намагаєтеся зосередитись, коли починаєте холодно? Які види ресурсів ви вважаєте корисними в цьому процесі?


6
Я б сказав, просто зроби це. Офіційна документація та Google - це єдині ресурси, які вам знадобляться.
Фоско

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

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

1
@David Я знаю півдесятка мов, але я їх вивчив, як правило, після того, як проходив на них заняття або після декількох місяців роботи. Але якщо мені доведеться швидко підібрати мову для нової роботи, то це мені не допоможе. Я не сумніваюся, люди, які вивчили кілька мов, знайшли способи їх швидкого навчання: саме так, я сподіваюся, відповіді містять.

@Mark Trapp: Дякую, що для мене з’ясовуються речі.
Девід Торнлі

Відповіді:


18

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

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

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

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

Крім того, проекти, як правило, починають менше і зростають у складності - від простого додатка "Hello World" до невеликого і не дуже корисного проекту, далі до повного додатка. Що стосується того, які аспекти мови я зосереджуюсь, це залежить від застосованого використання мови - я ніколи не вивчаю кожен API або рамки для початку (як, наприклад, з .NET). Це займе занадто багато часу. Я вивчаю синтаксис ядра, потім відгалужуюсь звідти, досліджуючи кожне розширення за потребою Маючи менш модульну мову, як-от CSS або XSLT, я просто спочатку вивчаю найпопулярніші конструкції та додаю інші за потребою.


Коли ви говорите "просто зробіть це", чи є конкретні аспекти мови, на якій ви зосереджуєтесь під час пірнання, щоб переконатися, що ви підбираєте її якомога ефективніше? Або ви просто продовжуєте робити випадкові вибіркові проекти, поки він не "клацне"?

Ну, а проекти, як правило, починають меншими і ускладнюються - від простого додатка "Hello World" до невеликого і не дуже корисного проекту, далі до повного додатка. Що стосується того, які аспекти мови я зосереджуюсь, це залежить від застосованого використання мови - я ніколи не вивчаю кожен API або рамки для початку (як, наприклад, з .NET). Це займе занадто багато часу. Я вивчаю синтаксис ядра, потім відгалужуюсь звідти, досліджуючи кожне розширення за потребою Маючи менш модульну мову, як-от CSS або XSLT, я просто спочатку вивчаю найпопулярніші конструкції та додаю інші за потребою.
jqueryrocks

2
чи можете ви додати це до своєї відповіді? Це чудова інформація.

5

Це працює для мене:

  1. Читайте про це.
  2. Використай це.
  3. ГОТО 1.

Для прочитаного кроку я намагаюсь вибрати "посилання" для мови. Наприклад, "Мова програмування на C". Це потрібно до ущільнення до кінця і нарощувати свої знання поступово. Потім я прочитав його обкладинку, щоб обкладати. Я швидкий читач, і не зупиняюся на цьому першому читанні. Потім я повернусь і звернусь до конкретних моментів, коли я намагаюся використовувати мову. На що я, мабуть, витрачу більше часу, це приклади коду всередині книги.

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

Інша річ, яку слід пам’ятати, - це концепція «використати або втратити». Якщо ви не використовували мову деякий час, вам знадобиться певний час, щоб повернутися до швидкості (хоча цей час скорочується з досвідом). Отримавши синтаксис мови, вам потрібно буде дізнатися про бібліотеки тощо.

Тож це ітераційний процес. Заглиблюючись при кожній ітерації. Ніколи не закінчується. Навіть після використання мови протягом 20 років є ще чому навчитися.


Чи можете ви детальніше розповісти про те, що ви маєте на увазі під «читайте про це»? На чому конкретно ви зосереджуєтесь, коли починаєте читати про нову мову, яку хочете вибрати?

@Mark - подивіться мої зміни ... Це те, що ви шукаєте?
Гай Сіртон

5

Захопіть реальний світовий проект

Те, як я це бачу, легше чомусь навчитися, коли вам насправді потрібно це навчитися. Для мене це було з javascript, де я ризикував, прийнявши великий проект із двомісячним часовим рамком. Я там щодня і щовечора намагався досягти результатів цього позаштатного проекту, і за півтора місяці проект був зроблений.

Я також випадково засвоїв там якийсь SQL, потім я закінчив його в коледжі, і здогадуєтесь чого, мені теж було легше.

Якщо ви не хочете ризикувати ...

Справжнім ключем до попереднього моменту є вирішення реальних проблем ... але я працюю краще в умовах стресу (мені подобається стрес, я думаю, що це весело і я можу бути пошкоджений, тому ...). Якщо ви цього не зробите, просто перейдіть до проекту з відкритим кодом, який вас цікавить, і використовуйте мову, яку ви хочете вивчити, і спробуйте внести свій внесок. Якщо ваш код відстійний, ви можете отримати зворотній зв'язок залежно від громади.

Цілком ймовірно, що ви досягнете прогресу лише вивчивши код.

Отримайте всю довідку, яку можете

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

Інші спільноти - такі як форуми, списки розсилки та ін. - також вважаються посиланнями.


Я б додав "схопити важку проблему реального світу". Виберіть щось, що вимагає, щоб Ви в перший день заглибили шию. Мій перший день з C # я розбирався, як динамічно завантажувати dlls, використовувати роздуми, щоб отримати класи, а з цього - список меходів. Я дізнався тонну дня, ніколи раніше не використовував жодної технології .net.
Брайан Оуклі

2

Існує маса способів вивчення нової мови, але не всі однаково ефективні. Я знайшов, що ці три рекомендації найкраще працюють для мене:

Складіть карту того, чого ви не знаєте

Заздалегідь з’ясуйте, що вам потрібно буде навчитися. Знайдіть огляд або загальне джерело документації, яке описує мову в абстрактних термінах. З цього зазвичай можна отримати досить повний огляд того, про що мова йде. Використовуйте цей огляд, щоб виділити області, які ви не знаєте, але вважаються основними для мови. Чи є хвіст-рекурсія поняттям, яке потрібно навчитися справді рикувати мовою? Можливо, вам доведеться знати свій регулярний вираз набагато краще, оскільки мова спеціалізується на обробці струнами. Або, можливо, вам дійсно доведеться ввімкнути свою алгебру, оскільки багато понять на мовній карті безпосередньо з алгебраїчних понять.

Отримайте хороші ресурси, які допоможуть вам дізнатися те, чого ви не знаєте

Ви можете отримати хороший довідник про алгебраїчні формули, або, можливо, вам просто захочеться придбати " Javascript, хороші частини ". Для деяких кривих навчання ця робота вже частково виконана. Якщо ви намагаєтеся вивчити C # на фоні Java (і навпаки), існує цілий список публікацій блогу та веб-сайтів, які відображають відмінності та містять посилання / ресурси, які допоможуть вам дізнатися.

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

Побудуйте щось справжнє

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


1

Визначте парадигму програмування

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

Визначте ідіоми

Усі мови мають ідіоми. Ідіоми відрізняються за розміром і обсягом від того, як ви структуруєте код, аж до конкретних фрагментів коду. Ви завжди повинні намагатися використовувати мовні ідіоми.

Написати код

Я зазвичай пишу якийсь функціональний код. Все, від сита Primes до іграшок веб-додатків. Проблеми, які я вибираю, зазвичай характерні для того, для чого я маю намір використовувати мову.


1

Просто зануриться !!

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

  • знайти проект для домашніх тварин, щоб вас загнати
  • а на бічній програмі кілька загадок

Навчіться, практикуйте, застосовуйте (до задоволення)

Класичні 99 головоломок 99 Prolog (тут 99 головоломок у Scala ) або Project Euler - це зазвичай хороші місця для пошуку маленьких головоломок, які можна повторно реалізувати. Або ховайтеся навколо StackOverflow і переписуйте кілька приємних відповідей на своїй цільовій мові, намагаючись не робити перезаписи по рядках, а щось, що відображає суть вашої нової мови.

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

Якщо говорити про спільноту ...

Поділіться і викрийте себе. (Не надто багато, хоча.)

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


0

Я знаю, що це звучить кульгаво, але починайте кодувати щось, навіть якщо це нерозумно, і використовуйте багато Google для речей, що відповідають цьому шаблону:

як мені зробити [щось з однієї мови] на [іншій мові]

Якщо слова є загальновживаними, цитуються буквами.

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


0

Як конкретна пропозиція просто використовувати мову:

Виправлення помилок

  1. Знайдіть цікавий проект з відкритим кодом на цільовій мові, бажано, який має публічний трекер помилок, помірно активний розвиток та гідний набір тестів.
  2. Виберіть помилку, бажано ту, яка вас дратує, коли ви фактично використовуєте програму.
  3. З’ясуйте, чому програма проявляє помилку.
  4. Напишіть тести та код, щоб усунути проблему.
  5. Надішліть виправлення вище за течією.
  6. Перегляньте свій виправлення, поки розробники не будуть задоволені.
  7. Поверніться до кроку 1 або 2.

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

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

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