Чи боляче вивчати шматочки багатьох мов програмування?


37

Я розпочав свою кар’єру програмування з BASIC, у 9 класі. Я трохи навчився БАЗА, написавши прості програми для додавання, віднімання та друку. Потім я пішов до університету і взяв комп'ютерну інформацію та інженерію систем. На першому курсі мене навчали С, і я добре володію ним.

Далі я вивчив C ++ на другому курсі. Це просто навчило мене деяким знанням ООП. Зараз я роблю PHP (разом із HTML). Я ще не освоїв C ++, BASIC або PHP. Зараз я планую перейти до мобільної розробки. Але я відчуваю, що не висвітлював усе, що вивчив.

Це насправді має значення?

Відповіді:


50

Усі ми просто вивчаємо шматочки мов програмування. Я б вважав, що мовні виконавці є лише тими, хто знає мову 10 із 10.

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

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


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

1
З огляду на те, що компілятори та інтерпретатори мають помилки, я не думаю, що в більшості мов людям можливо дістатися до 10.
jmoreno

6
Я не думаю, що навіть люди, які пишуть компілятори C ++, розуміють C ++. Я маю на увазі індивідуально. Очевидно в сукупності вони повинні якось зрозуміти всю мову, але я не думаю, що на цій планеті є одна людина, яка все це розуміє. Насправді, члени комітету зазвичай досить чітко розуміють той факт, що всі вони розуміють лише власну сферу знань. Аналогічно на Java: Мартін Одерський нещодавно сказав, що він вважає, що в світі є лише 3 людини, які розуміють символи. І від тону електронної пошти у мене склалося враження, що він не включав себе
Jörg W Mittag

2
в тій групі, хоча він насправді розробляв Java Generics (звичайно, разом з Філом Уодлером). Хоча, чесно кажучи, до його дизайну були додані макіяжі без його згоди, насправді, проти його явного інакомислення.
Йорг W Міттаг

1
@brian, повір мені, вам не потрібно знати мову, щоб мати можливість реалізувати її компілятор. Ви можете просто перевести специфікацію в код наосліп. Але в результаті цього ви навчитесь хоча б деяким основам мови - саме тому це мій кращий спосіб вивчення нових мов.
SK-логіка

21

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


5
У свої перші два роки я думаю, що ми підбирали нову мову кожні 3 - 4 тижні, щоб разом із мовою Pascal, яка була основою більшості наших проектних робіт (1982-85) - деякі з них були функціональними мовами. Частина полягала в тому, щоб спробувати переконатися, що ми розділили "програмування" від "кодування"
Мерф

12

Я вважаю, що найважливішим у програмуванні є розуміння різних парадигм .

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

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

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

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

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


2
+1 для парадигм. Не важливо орієнтуватися на синтаксичний цукор мови X або Y (звичайно, це потрібно, якщо ви використовуєте мову X кожен день на роботі); що корисно - це вивчити різні парадигми, оскільки ІМХО вони допомагають бути більш відкритими та креативними у вирішенні проблем.
sakisk

5

На мою думку, мало сенсу змінювати мову дуже часто. Ви ніколи не будете на самому ділі зрозуміти , який - або з них. Особливо такі, як C ++, де деякі люди проводять десятиліття, пишучи мову, і все ще мають свій код схожий на C.

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


5

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


3

Я використовував багато мов протягом своєї кар'єри, як AMOS Basic, Java, C ++, PHP, VB6, Delphi тощо. Сьогодні на роботі я використовую C #, JavaScript, Ruby та деякі Clojure, а також грав з Pyhton, Erlang, Спільний Лісп і Схема.

Але цієї осені я хотів скласти для свого блогу спеціальний календар x-mas, і вирішив ознайомитись і вирішити конкретну проблему на 24 додаткових мовах. Це був чудовий досвід, я багато чому навчився, і настійно рекомендую робити це, як тільки у вас є досвід програмування.

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

Сьогодні важливо добре знати як OOP, так і FP (функціональне програмування), і вам також повинно бути зручно і в дуже статичній, і в дуже динамічній мові.

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


2

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


2

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

Переваги бачити, як інші мови роблять речі, допоможе вам як програмісту; навіть якщо випадково, коли ви стрибаєте навколо, ви робите синтаксичні помилки (наприклад, перевірка на нерівність !=, ~=або <>). Вам слід бути обережним, хоч ви дізнаєтесь більше, ніж просто синтаксис мови, але найкращі практики в мові, а також просто загальні хороші навички програмної інженерії. Якщо ви вивчили C, а потім вивчили C ++, ви повинні переконатися, що ви пишете код C ++, що він знаходиться в стилі коду C ++ (а не просто C з кількома новими ключовими словами. Тобто у вас є кілька класів / об'єктів, віддайте перевагу посиланням / розумні покажчики на необроблені покажчики тощо.


1
Не запускайте мене на If x <b> = </b> 5 Потім. Мені потрібно двічі перевірити весь мій код C протягом тижня після збереження нічого, що стосується BASIC.
user606723

2

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


2

Точно ні. Звичайно, ви також хочете переконатися, що ви вивчаєте різні стилі мов. Вивчення як C #, так і Java не розширить ваш розум жодним серйозним чином, але вивчення Java та Haskell дозволить.

Ознайомтесь із книжкою « Сім мов за сім тижнів» , яка проведе вас через вступ до Ruby, IO, Scala, Erlang, Prolog, Clojure та Haskell. Якщо вам подобаються мови, вам сподобається ця книга.


1
Вивчення C # після Java може розширити ваш розум завдяки його функціональному програмуванню (та інших можливостей, яким Java не вистачає). Але якщо це лише для навчання, Хаскелл буде, мабуть, набагато кращим, через те, наскільки він суто функціональний.
svick

1

Що ж, C і C ++ не принесуть шкоди мобільному програмуванню. Ви можете використовувати як з Cocoa Touch, так і з Android NDK, а іноді потрібно для продуктивності. Крім того, іноді ви хочете, тому що ви хочете написати код, який працює на кількох платформах. У такому випадку, якщо припустити, що ви не просто використовуєте сторонні рамки, ви можете написати додаток на C / C ++ та компілювати в обгортки для певних платформ для необхідних нативних елементів (наприклад, єдиний спосіб отримати контекст OpenGL на iPhone використовується за допомогою рідного класу CAEAGLLayer).

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


1

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


6
Я поняття не маю, що ти намагався сказати цим.
svick

Ви розумієте, що більшість з нас не знає "добре" навіть рідних мов, правда?
Spidey

1

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

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


0

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

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

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

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


0

Коротка відповідь: Ні.

Довга відповідь: стільки робота програміста, програмного інженера чи дизайнера не залежить від конкретної мови, але дуже залежить від певної методології. Наприклад, об’єктно-орієнтоване програмування - це дуже багато про те, де існують речі в пам'яті та в режимі виконання, наскільки вони доступні та наскільки вони доступні для подальшого використання (успадкування та інкапсуляція). Реалізації відрізняються, наприклад, у Java, яка має успадкований клас вищого рівня. Об'єкт, подобається вам це чи ні, і C ++ не має жодного, який ви не вказуєте.

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

Мова - це інструмент. Ви просто вкладаєте більше інструментів у пояс. Але інструмент такий же хороший, як і майстер, який ним володіє.

Тепер, скільки ви дізнаєтесь, це особистий вибір. Я б ніколи не вивчав мови заради вивчення нової. Будь-який вибір для вивчення нової мови підказує або вимога курсу (потрібно було підібрати js, php та R для одного класу минулого року), існуюча вимога проекту (якщо 90% роботи виконано в Perl 6 раніше вас приймають на роботу, як і решта 10% після) або вигоду для конкретного додатка (R над мовою Java у поєднанні з деякою цукровою бібліотекою для статистичного аналізу).

Це означає, що ви хочете дізнатися, що там є і доступне. У моєму коледжі викладався курс на цю тему, Мовні програми програмування . Це був широкий оглядний курс, а не сувора математика чи кодування, що охоплював основи того, що може вважатися практичним, а не теоретичним інформатикою. Це був чудовий курс, і я хотів би, щоб це було щось запропоноване на 1-му-другому курсі, а не на 3-му-4-му. Текст був Концепції мов програмування . Не кажучи, що ви повинні вийти і прочитати цю книгу, але це, безумовно, розширить ваш кругозір.


0

Ну, так, як я бачу, це вам не доведеться вивчати кожен шматочок мови. Але спробуйте вивчити дуже основні функції, які знадобляться і в інших мовах.
Наприклад, концепції OOPS потрібні на всіх мовах, будь то Java , PHP або будь-яка інша мова. Концепції
розподілу пам'яті досить схожі в багатьох мовах програмування. Такі теми, які ви ніколи не повинні пропускати.
Кожна мова має граматику та правила, те саме стосується і мов програмування; Сам Денніс Річі прийняв цей факт. Отже, слід вивчити граматику цієї мови.
Але, як я бачу, це те, що ви повинні вивчити не поширені фактори між двома мовами програмування. Вони дозволять вам визначити, яка мова означає для чого. C ++ - це все базове OOP (об'єктно-орієнтоване програмування), тож коли ви засвоїте поняття OOP , ви засвоїте граматику, яку ви побачите також у PHP та Java.
Мій потік навчання був:
Visual Basic 5 (частковий) -> HTML 2.0 (частковий) -> C (частковий) -> CPP (частковий) -> Java (частковий),
а потім я знову вивчив мову C, а потім C ++, а потім JAVA ( завершити цей час), тоді я перейшов на android, як я був знайомий з Java та XML(частковий) і навчився це в середній час. Перша спроба навчила мене менше, але у другій спробі обов'язково дізнайся все, що допоможе тобі наступного разу.


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