Що мені робити, щоб бути мовним?


52

На даний момент я працюю з asp.net та C #. Я також зробив гідну роботу в Java. Я планую свою кар’єру таким чином, щоб я колись повинен бути мовним-агностиком. Які речі мені потрібно вивчити?

По-перше, парадигми OOP, як це говорить про дизайн класу. Чи є інші?


2
Ви намагаєтесь: не уникати етикетки, мати гнучкість до роботи або шукати певні пошуки?
JeffO

2
@Jeff Так! щоб уникнути маркування і не боротися з тим, що моя мова найкраща;)
Гопі

Я з більшою ймовірністю наймаю хлопця з твердою думкою, який не згоден з моїм. Бо тоді він міг писати Яву.
Ерік Реппен

Якби ви це зробили, рекрутери пропустили б ваше резюме.
gonzobrains

Відповіді:


67

Щоб бути мовним агностиком, потрібно мати досвід у всіх загальних стилях та типах мов.

  • Імперативний мову (Ви говорите йому , що робити, крок за кроком Eg -. C)
  • Декларативний мову (Ви говорите це своєї мети, він з'ясовує , що робити Eg. - SQL / HTML / Prolog)

Також:

  • Функціональний мова (Функція ключ, уникаючи стан і побічні ефекти є цілями Eg. - Haskell / OCaml / Lisp / F #)
  • Об'єктно - орієнтований мову (Архітектура , де об'єкти інкапсулюють пов'язані дані і методи , які діють на них). Напр. - Java / C #)

Деякі стилі введення тексту:

Деякі різні стилі виконання:

Нижній рівень:

  • Щось досить низький рівень (наприклад, C)
  • Деякий діалект складання (наприклад, NASM)

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

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

Коли ви вивчаєте ці парадигми, уникайте просто вивчати синтаксис і писати за старим стилем. Я бачив, як багато C # розробників пишуть JavaScript так, ніби він набраний статично. Не робіть цього, спробуйте вивчити мовні парадигми та сприйміть їх.

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

Не забувайте, хоча сучасне програмування майже завжди залежить від рамки, тому ознайомлення з загальними та популярними рамками для кожної мови, яку ви вивчаєте, також є критичним. Знання C # не має значення без .net.


9
Як HTML є декларативним у даному сенсі? "Мета -> Дія"? Це насправді нічого не робить .
Фелікс Домбек

3
Чудова декларативна мова, яку я можу лише порекомендувати заглянути - це Prolog. Він відрізняється від усього іншого - ніяких функцій (але відносини, які працюють навпаки), немає явного потоку управління (інтерпретатор вирішує все за вас), просто одна чудова структура даних (терміни, нічого іншого не потрібно.) Це неймовірно швидко в що це робить, роблячи мільйони уніфікацій і висновків за секунду - і час, необхідний для розробки чогось, приблизно такий же короткий, як у Python порівняно з C / C ++.
Фелікс Домбек

3
@Felix: HTML, goal = "Я хочу мітку та текстове поле". Дія = Макет і графічні двигуни визначають, як їх намалювати. Деталі наведені до окремих веб-переглядачів. Ви визначаєте лише те, що хочете, а не як це зробити. Дивіться тут . Я погоджуюся, хоча це насправді не "мова" як така. Пролог - кращий приклад, я оновлю.
Саймон П Стівенс

1
+1 Для гарного переліку типів місцями вибір мови трохи відсторонений від парадигми, але загалом - відмінний.
Увімкнення

2
До речі, слід додати "Різні домени / рівні абстракції": веб, інтерактивна павутина, інструменти для настільних ПК, настільні ігри, постійні ігри будуються не так, як обмеження та відстань до апаратних засобів відрізняються, роблячи вибір мов ( або навіть існування) більш очевидним для того, хто хоче зрозуміти, що це бути агностиком.
Клаїм

4

Я не думаю, що ти можеш стати справді мовним агностиком. Я вважаю, що "думаю" своєю поточною мовою (на даний момент C #).

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


+1 за "Ви не можете бути по-справжньому агностиком мови". Але я не зовсім згоден з вашим другим абзацом. Я думаю, що важливо створити мову та рамки, які ви збираєтесь використовувати.
Саймон П Стівенс

@Simon - у вас є гарний момент щодо розробки рамки. Я оновлю відповідь.
ChrisF

3

Читаючи ваше запитання та деякі відповіді, можна скласти враження, що ви «мовний агностицизм» зрівняєтеся з «знанням кожної парадигми на землі».

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

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

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

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

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

Можливо, ви хочете бути "мовним політеїстом".

Я сам компетентний у декількох мовних парадигмах, але я вважаю за краще OOP, коли він підходить. Тож я гадаю, що я не агностик.

Ви навряд чи знайдете того, хто не віддасть перевагу певній парадигмі чи мові, що надає свободу вибору.


0

Це не лише мови, сама Java має стільки різних режимів, що ви могли витратити роки, вивчаючи їх усі. Ви можете навчитися:

  • Особливості J2EE, такі як Повідомлення та Постійність, та різні сервери
  • jsp та Apache-орієнтовані набори інструментів
  • мурашині, Maven та інші системи побудови (самі мови).
  • Весь світ Groovy / Grails
  • всі API-адреси apache commons
  • системи тестування (Mocking, JUnit)
  • GUI-будівельники, як Swing, GWT ...

І сто речей, яких мені не вистачає - ДОВОЛЬНО в межах Java.

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

Я не кажу, що вивчення нової мови - це КОГО-небудь проблема, ви повинні активно це робити! Я намагаюся вибрати свою наступну роботу на основі того, що я можу навчитися (чого я ще не зробив), але я не часто вибираю випадкову мову і більше її вивчаю - Востаннє я спробував, що це було зі Скалою і я залишився дещо принижений ...


До "всього світу Groovy / Grails" ви могли б додати ", весь світ Scala / Play! 2, весь світ JRuby / Rails та весь світ Clojure / Noir".
Vorg van Geir

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