Ідеальна послідовність вивчення мови програмування? [зачинено]


17

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

NB: Це питання, яке я задав у стартовому потоці, і його було закрито, оскільки воно було суб'єктивним та аргументативним.


Чудове запитання. Які відповіді були б, якби це питання було орієнтоване на ефективність? Мені цікаво: programmers.stackexchange.com/questions/16323/… : D
JoeBilly

4
Я ТОРГОТЕ здивований і радий, що Лісп з'являється часто на високопоставлених питаннях.
Inaimathi

1
Це питання також було задано тут (хоча я думаю, що це було першим): programmers.stackexchange.com/questions/41720/…
oosterwal

Потрібно зберегти це посилання тут- streamhead.com/what-programming-language-to-learn-next
Gulshan

Відповіді:


26

Python, Lisp, C, Haskell

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

  1. Python : Почніть з динамічної, високоякісної, OO та функціональної мови. Тому що для початківців дуже важливо відчувати себе продуктивними якнайшвидше, і не може бути відключена чужорідним синтаксисом, відсутністю бібліотек, відсутністю багатоплатформності, відсутністю навчальних ресурсів та відсутністю спільноти. Python добре читає, має багато хороших бібліотек (особливо наукові бібліотеки - сучасний вчений / інженер повинен знати, як програмувати), легко працює з більшості ОС, має багато навчальних посібників і цілих безкоштовних книг, і, як правило, зручний для користувачів - все ще будучи достатньо потужним, щоб рости з вами, коли ви станете передовим програмістом, який працює над великими проблемами. Також важливо підкріпити важливі + корисні умови для початківця: читабельність коду рахує ЛОТ, і ви повинні писати код для себе та інших, щоб легко зрозуміти.

  2. Лісп: Зокрема, принаймні скуповуйте Структуру та інтерпретацію комп’ютерних програм або дивіться відео SICP , а очі відкриваються дуже широко, бачачи основи та виразну силу програмування - можна зробити так багато за так мало. Дізнайтеся, як Lisp може виражати не лише функціональну парадигму, але і OO, логічну / декларативну тощо - як створення нових мов, характерних для домену. Прочитайте PAIP Норвіга, щоб засвідчити, що майстер може зробити з мовою. Потім перегляньте Clojure , сучасний діалект Ліспа, який міг би стати однією з наступних великих речей.

  3. С: Тільки тому, що це лінгва-франка обчислень. :) Можливо, необов'язково в ці дні, якщо в першу чергу це програміст у певній непрограмній галузі. Я вважаю це некрасивим, але варто знати про те, щоб оцінити основне обладнання. Ідіть , звичайно, з K&R .

  4. Haskell : чиста функціональна потужність. Там, де зараз діють зб. теорія та практична експресивна сила відповідають. Дивіться Haskell в реальному світі .

Після вищевказаного туру можна було б дуже вміло вирішувати проблеми та виражати рішення в коді, і було б абсолютно комфортно з парадигмами тут :

alt текст


Я (природно) підміняю Smalltalk на Python як номер 1, але я кажу, що знати, що Python (a) є дикіше популярнішим, ніж Smalltalk, і що (b) отримувати Smalltalk для розмови на інших мовах так само важко, як і на Java , що означає досить важко, щоб засмутити новачка. "Писальність" Python виглядає як досить велика перевага.
Френк Шірар

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

+1 Я не впевнений, чи повинен Хаскелл бути на вершині, але якщо чесно, я цього ще не знаю, і він наступний у моєму списку, тому він, можливо, ще є останньою мовою, яку я вивчаю.
Inaimathi

2
1 клік до повнорозмірної діаграми @ i54.tinypic.com/168ity1.jpg
Майк Кларк

Я поставив би +1 цьому, якби цього не було в списку
Balog Pal

28

Ось як я це зробив би:

  1. Python (або Ruby або Lua): інтерпретована мова, без типів, ви можете виконати роботу в кілька рядків. Величезна бібліотека (найкраще для цього я думаю, Python). Ви можете заглиблюватися в алгоритми, оскільки немає відволікань. Не потрібна компіляція, просто запустіть. Крім того, з Python ви неявно викладаєте гарний стиль, оскільки відступ у Python є обов'язковим. Ви також можете навчити об’єктну орієнтацію (у Луї це більше проблема). Мета тут - розважитись і показати студенту, що можна зробити.

  2. C ++ (або, можливо, Java): набрана швидка мова. Якщо вам потрібна орієнтація на об'єкти, то ви вже знаєте деякі поняття. Основна ідея - "перекласти" те, що ви робили в Python, і зробити це з новими обмеженнями (переважно типи). Тепер, якщо у вас правильно поняття, додавання типів не є такою проблемою. Наступний крок - продумати більш низький рівень (Java не допомагає тут) і добре навчити вказівникам . Під цим я маю на увазі трохи пояснення про адресний простір, процесор, ОС, щоб ви могли почати бачити під програмою. Складена мова вводить різницю між інтерпретацією та компіляцією, дуже корисною для пояснення, що таке машинна мова тощо.

  3. Збірка : Нарешті, ніякої магії, ви просто поговорите з машиною. Йде дискусія про синтаксис Intel та GAS, це не важливо. Якщо у вас є MIPS, я вважаю, що це краще для викладання, але я вважаю, що x86 є більш зручним, оскільки він є більш поширеним (x86_64 кращий, оскільки має більше реєстрів і приємностей). Вам просто потрібно усунути деякі складності та дозволити учням далі досліджувати, якщо вони хочуть.

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

  1. Схема (або загальні Lisp або Clojure): Як сказав @dukeofgaming, мови Lisp дозволяють добре навчати рекурсії (найкраще для цієї схеми, оскільки не має явних циклів). Але я б пішов і навчив ще дві речі: закриття та макроси. Макроси - це те, що відокремлює мови Lisp від інших. Особисто мені не подобаються макроси схеми, але це не надто важливо. Я думаю, що макроси Clojure є приємними, наприклад (але рекурсія в Clojure не така чиста, оскільки у JVM немає хвостової рекурсії). Закриття - це дуже важлива концепція, як тільки ви їх зробите, миттєво «бачите» Javascript. Вивчивши C ++, Python та Lisp, Javascript стає "тривіальним".

  2. Haskell : Щодо функціональної мови, я не думаю, що ви можете перемогти Haskell. Лісп і Схеми вважаються функціональними, але щоб підкреслити функціональне програмування, ви повинні змусити учнів думати без стану. У Haskell також є інші дуже приємні речі, такі як каррінг та узгодження зразків для "руйнування". Я не знаю Хаскелла багато, але стислість коду, який ви можете написати, просто прекрасна. Знання Хаскелла значно полегшує шлях до розуміння Ерланга.

  3. Четверте : мова стека. Це повністю порушує вашу логіку (якщо Лісп і Хаскелл були недостатньо). Я б пішов на те, щоб викладати Джонс Форт, оскільки вони знають складання, і тоді ви можете повністю зрозуміти, що відбувається. (Наприклад, знаючи Forth відкриває PostScript.)

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

За бажанням ви можете вивчити такі:

  1. SmallTalk : суто об'єктно орієнтована мова. Щоб побачити, що станеться, коли ви серйозно сприймете Орієнтацію на об'єкт, мові не потрібно "якщо", "для". Все - це повідомлення: знову велика реалізація. (Це зробило б об'єктивним C зараз легшим.)

  2. Перейти : (гарна) мова з акцентом на одночасність. Мені здається, що Go дуже приємно та зручно програмувати.

  3. Пролог : Ще одна парадигма програмування. Я не писав жодного прологу, але я розумію, що це ще одна зміна мови.


6
Python та Ruby (я не знаю про Lua) - сильно набрані мови. Я думаю, ви маєте на увазі, що вони динамічно, а не статично типізовані.
Даніель Роузмен

13
Будь ласка, розглядайте C та C ++ як дві окремі мови.
Девід Торнлі

1
Bjarne каже : "Немає мови під назвою" C / C ++ ". Фраза зазвичай використовується людьми, які не мають поняття про програмування (наприклад, персонал з персоналу та погані менеджери). Крім того, його використовують люди, які просто не роблять знайте C ++ (і часто це також не C). "
fredoverflow

1
Я хотів би, щоб хтось заперечував, чи повинна збірка передувати C ++. У цей момент було б досить легко підійти до збірці, з - за прості поняття і невеликий набір інструментів при умови, тим НЕ менш , працює з сирої пам'яттю і необробленими посиланнями пам'яті повинна бути дуже корисні при наближенні до C ++, де використання номінальних посилань для вирішення як довільного місцеположення та значення пам'яті збиває з пантелику більшість людей.
Філіп Дупанович

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

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

Серйозно, я, можливо, свого часу навчився BASIC, COBOL, Fortran, Forth, Pascal та Prolog, але мені ніколи особливо не потрібно було їх використовувати, і я не можу реально побачити, як вони вплинули на моє використання інших мови, за винятком можливо неправильного застосування парадигм одна в іншу. Знадобилося мені віки, щоб навчитися BASIC достатньо, щоб насправді писати структурований Pascal, пару років, щоб перестати писати Pascal-код на C, та ще пару років, щоб насправді шукати OOP, коли я почав використовувати Objective-C та Java. З іншого боку, оскільки я працюю (майже) виключно на мовах ОО, я мав змогу зосередитись на вдосконаленні використання мов OO, не намагаючись зробити їх схожими на Scheme або PostScript.


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

8

Важко стверджувати, що будь-яка послідовність є ідеальною, але я викладу план, який можу виправдати:

  1. С

    Навчання C вимагає терпіння і старанності, і ознайомить вас з основними способами, якими комп'ютери обробляють дані, і покаже вам майже найширший набір обов'язків, які програміст може прийняти для роботи з такою машиною.

  2. Perl

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

  3. C ++ або, можливо, Java

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

  4. Звичайний Лисп

    Це нагорода за попередній слоган. Ви знайдете відгомони того, що ви дізналися на всіх попередніх мовах, і побачите, як нерозумно виглядає так багато попередніх поступок при програмуванні в Lisp. Препроцесор C і шаблони C ++ готують його до оцінювання макросистеми Lisp. Ви повернете собі простоту вираження від Perl, можливості оптимізації на низькому рівні з C, можливості абстрагування C ++ або Java і пройдете повз їх усіх. Жоден з попередніх трьох - можливо, крім налагоджувача Perl - не підготував би вас до інтерактивного досвіду програмування з можливим REPL ("читання, eval, цикл друку"). Робота з зображеннямсередовище на базі - яке змінює взаємозв'язок між вашим вихідним кодом та ідеєю "виконуваної програми" - змінить усе ваше уявлення про те, що означає створити програму.

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

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


4
+1 для C та Common Lisp, але Perl як друга мова ?? :) Python чудово послужив би динамічною мовою, заодно заохочуючи добрі звички програмування - як, наприклад, код дуже читабельний для себе та інших за тижні, місяці чи роки після первинного написання програми.
ліміст

1
Щодо рекомендації Perl: це я лише показую свій вік. Звичайно, сьогодні Python або Ruby були б близькими замінниками, але вони обидві догматичніші за Perl і більш упереджені до об'єктної орієнтації в стилі class-as-a-bag-of-method, що новий програміст, що виходить із C ще не потрібно. Я пам'ятаю, що коли я пізнав Perl, я був страшенно продуктивним негайно, і після цього я не почав довго використовувати об'єктно-орієнтовані засоби. Занадто часто все, що зосереджується на ОО, - це просто відволікаюча та непотрібна церемонія.
seh

Я не погоджуюся з вашим переглядом "торги, які роблять ефективнішими, коли рухається в абстракції". Одним із стовпів C ++ є те, що програма, що використовує засоби C ++, ніколи не повільніше, ніж еквівалентна програма C. Наприклад, використання віртуальних функцій у C ++ ніколи не повільніше, ніж моделювання віртуальних функцій у C.
fredoverflow

Правда, Фреде, і ось що я мав на увазі: скористатися функціями, не замислюючись над тим, як вони працюють, можна ввести витрати - витрати, яких ви, можливо, раніше уникали, уникаючи можливостей функції, оскільки це було б надзвичайно складним або просто недостатньо ідіоматичним. реалізувати вручну. Наприклад, скарга на те, що RTTI "занадто повільна", негайно ставить питання про те, як ще ви вирішите проблему.
seh

6

1. Малийрозмова

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

Smalltalk є чистою мовою ОО в тому сенсі, що "все є об'єктом".

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

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

2. ПРОЛОГ

Мова логічного програмування, яка дасть вам зовсім інший погляд на обчислення майже будь-якої іншої мови. Prolog також є дуже декларативним (але не зовсім так: !оператор або cut може мати значний семантичний вплив на присудок).

3. Лист звичайний

Замініть Схему тут, якщо хочете. Common Lisp підтримує декілька парадигм, особливо OO та функціональних. Він також має давню історію (Лісп - друга найдавніша досі широко використовувана мова: лише старша FORTRAN).

4. Хаскелл

(Caveat: Я лише почав її вивчати.) Мабуть, найчистіша функціональна мова на планеті. Він має дуже просунуту систему статичного типу. Існують зручні вступні книги .

5. C або Delphi

Потрібно знати, як працюють комп’ютери. Вам потрібно знати, як насправді функціонують пам'ять та процесор. Обидва вони традиційно «близькі до металу» і мають спільноти, які заохочують думати про те, як їх мова складається до складання.

Чому саме цей наказ?

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

Після того, як у вас є чітке уявлення про те, як працює OO (і - за умови, що існує багато різних розумінь того, що означає "OO" - справедливо сказати, що OO домінує на ринку), переміщення на Prolog гарантує, що ви не почнете думаючи, що ОО є єдиним способом. Пролог сильно відрізняється від більшості мов і розтягне ваші психічні м'язи, щоб ви не думали, що все знаєте.

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

Четвертий у списку Хаскелл, оскільки (мені кажуть: я тільки почав це вивчати), його чистота означає, що деякі дуже поширені речі (наприклад, введення / виведення) зробити складніше, ніж на менш чисто функціональних мовах. Люди Хаскелла також використовують деякі досить екзотичні термінології (такі слова, як "катаморфізм", скажімо), і вам, мабуть, буде краще з деяким досвідом програмування під вашим поясом, перш ніж братися за нього. (Але я мушу повторно повторити, я лише почав це вивчати! Прийміть цю думку з дрібкою солі!)

І чому C / Delphi триває? Тому що, якщо ви не працюєте у вбудованих системах, вам дійсно не доведеться вчитися програмуванню, думаючи, що ручне управління пам'яттю все є. Збір сміття працював досить добре для машини рівня 1980-х. Ваш телефон такий потужний!

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


2
Це послідовність навчання ?
Wizard79

Це чітко послідовність (довжина 1).
Френк Ширар

Менш грамотно: я надаю один крок у послідовності, а ви надаєте інший, і громада проголосує за впорядкування зазначеної послідовності, правда?
Френк Ширар

3
@Frank Я цього не мав на увазі. Я очікував повних послідовностей. І я думаю, що замовлення неможливо зробити шляхом голосування.
Гульшан

Будь ласка, люди: якщо ви збираєтесь голосувати, поясніть чому .
Френк Ширар

5
  1. Пітон. Відмінне вступ до програмування. Це також буде пов'язане з будь-яким попереднім впливом програмування.

  2. Схема. Також відмінний вступ до програмування. Якщо ви маєте справу з новачками з програмування, ви можете навчити цьому першому та другому Python. Однією з альтернатив був би спочатку Python, а потім Common Lisp замість схеми: більше роботи, але більше винагороди.

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

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

  5. Хаскелл. Для системи типу та чистої функціональності, якщо нічого іншого.

  6. Тут є кілька кандидатів, оскільки неможливо охопити всі концепції шістьма мовами. Звичайний Lisp варто вивчити, якщо тільки для макросистеми та об'єктної системи (що відрізняється від більшості інших, яких я бачив). По-четверте, Tcl і APL - це всі дивні мови, які досягли певного успіху, і одна з них була б хорошою, щоб студент не відчував себе так, ніби він чи вона все це навчилася. Ерланг був би хорошим для одночасності.


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

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

4

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

Ви також можете розглянути деякі мови сценаріїв на рівні ОС, такі як Batch, grep, awk тощо. "Make" також може потрапити в цю категорію.

Ще однією мовою, яку ви можете розглянути (якщо вона ще не зовсім мертва), є COBOL. Він досить відрізняється від інших процедурних мов, що заслуговує на деяку згадку. Варіації C, Fortran, Basic тощо стали настільки схожими, що коли ви знайомі з одним, перехід до іншого не є великою проблемою, але COBOL не вистачає безлічі конструкцій, сприйнятих як належне в інших. (Минуло щонайменше 20 років, як я щось робив із COBOL, тому мої спостереження можуть більше не бути дійсними щодо цієї мови.)

Ви можете згадати APL лише з історичної точки зору - або нехай вона спокійно відпочиває. Твій вибір.


1
Причина, по якій я не запропонував SQL, полягає в тому, що це не мова загального призначення. Я б швидше вдарив студентів про щось декларативне та загальне, як, наприклад, Пролог. Мови сценаріїв на рівні ОС нічого не пропонують, що більш загальна мова, як Python або Perl, не буде. Востаннє я торкнувся COBOL, він не запропонував понять, які не можна покращити на інших мовах. Мені подобається пропозиція APL, не стільки за історичну цінність, скільки за зовсім іншу мову.
Девід Торнлі

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

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

2

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

Для програмування я б також запропонував Haskell, Prolog, SQL та мову складання (лише деякі).

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


2

По-перше> Що ви хочете зробити, коли починаєте програмувати? Навчитися бути ігровим програмістом відрізняється від того, як навчитися бути програмістом баз даних для бізнесу ... відрізняється від веб-програміста ...

По-друге> Після того, як ви почнете вчитися, ви хочете почати високо і працювати вниз? Або почніть низько і працюйте вгору. Навчання C # (високий рівень) набагато відрізняється від вивчення Асамблеї (Низький рівень).

Величезний вибір буде залежати від того, що ви хочете зробити. Програмування драйвера, швидше за все, включає C або Assembly ... Програмування веб-сайту буде PHP, C #, asp і т. Д. ... Ви не торкаєтеся складання веб-програмування ... і т.д. ...

Що стосується основ ... як тільки ви вирішите, що ви хочете зробити, простіше вибрати мову. Я, наприклад, став аналітиком даних у лікарні. Тож мій "вибір" мов - це SQL / TSQL / DB2 для доступу до даних, C # WPF для клієнтів Windows, Silverlight для веб-клієнтів, деякі RPG / CL для бек-енд-логіки IBM ...

Особисто я дотримуюся гарної книги + будую власну програму, щоб практикувати мову. Мені подобається APress і я любив читати C # 2008 Ілюстрував під час вивчення C #. У них є інші книги, які містять основи як для неосвічених, так і для експертів.


2

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

  • Маленький розмову - це найкраще отримання OO, а просте викриття відкриє вам очі на те, як треба робити. Найкраще вивчити поняття OO на.
  • Java або C # - забезпечує більш архітектурний і плановий підхід до ОО, при цьому вводячи статично перевірені типи.
  • Ruby або Python - Ви не можете оцінити це, поки не відчуєте Java або C #
  • Ерланг - одночасність, зроблена таким чином, що це здається легким. Це набагато краще, ніж ваші мови OO або C.
  • Lisp, Haskell або інша функціональна мова - це різний підхід до вирішення проблем.
  • C - або будуючи вбудовані розширення для Java, або впроваджуючи алгоритми нижчого рівня, це так близько до збирання, як комусь потрібно, поки вони не напишуть компілятори

Ви можете запитати "де C ++?" а що з X? Чесно кажучи, вивчення кількох мов робить декілька речей: це збагачує ваш досвід, а також забезпечує потяг до вивчення більше мов. Список мов, які я добре знаю (Java, C #, Ruby, C ++, Javascript), орієнтований на всі об'єкти - але це в першу чергу тому, що це я повинен робити на роботі щодня. Список мов, до яких я піддавався (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go), навчив мене цінних уроків. Я можу принаймні зрозуміти, що відбувається з цими мовами. Я багато чого не досліджував, але дуже добре, можливо, в майбутньому. Також є кілька мов розмітки: HTML, XSL: FO, XSLT, CSS, XML, SGML, яким люди потребують впливу, якщо вони працюватимуть з Інтернетом будь-яким чином.

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


2

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

Чому? Для одного навчитися дуже просто. Синтаксису мови не так багато, щоб студент міг більше зосередитись на поняттях програмування та менше на синтаксичних особливостях певної мови. Станом на це написання Tcl має рівно 12 правил, які регулюють всю мову (від одинадцяти за останні пару десятиліть).

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

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

Крім того, оскільки це розширюється, ви можете легко вивчити основи C. Ви можете вивчити основи C та навчитися а) розширювати Tcl новими командами, написаними іншою мовою, або b) навчитися додавати мову скриптів до програми, написаної на C.

Після того, як ви засвоїли Tcl та C, більшість інших мов лежать десь між цими двома крайнощами, і їх слід порівняно легко підібрати. Мій повний список із чотирма, яких я навчав би після Tcl та C, це:

  1. Tcl
  2. С
  3. Python - для понять OO, а також поведінка визначення блоків за відступом для порівняння з іншими мовами.
  4. Ruby - для іншого використання OO, плюс рейок, щоб дізнатися про рамки
  5. java - він використовується скрізь, вам потрібно це знати, і вам потрібно дізнатися про JVM
  6. groovy - повернення до динамічних мов

1

Мова складання, C, SQL, C #

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

  1. ви не можете підробити свій шлях через мову складання; ти або отримуєш, або ні. компілятор не врятує вас, немає рамки або бібліотеки, і ви не можете сховатися від архітектури машини; це чисте програмування (на рівні початківця додавання двох чисел)

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

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

  4. після того, як ви написали кілька програм на C, що містять більше декількох сотень рядків, покажчики, структури та управління пам'яттю є другою природою, а процедурні конструкції - старі друзі. Ви почнете помічати шаблони вищого порядку: ці функції завжди йдуть із цією структурою даних, ця частина коду подібна до тієї частини коду, за винятком методів X, Y і Z тощо. Додайте до цього своє розуміння реляційних даних і тепер ви готові до об'єктно-орієнтованої мови. Маючи масивні рамки та загалом тупі документи. Ласкаво просимо в реальний світ! Досліджуйте графічні інтерфейси, пишіть програми для настільних ПК, пишіть веб-сайти, пишіть веб-сервіси, пишіть що завгодно. Іди влаштуйся на роботу, якщо ти так схильний.

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


1

Вам потрібні основи:

  1. Машинний код
  2. Мова складання
  3. С
  4. Лісп

Після цього це, мабуть, не має значення.


0

Гаразд, це останній день для щедроти. І я додаю свою відповідь. Моя запропонована послідовність-

C, C ++, JAVA / C #, Python / Ruby, будь-яка інша мова (асамблея / Lisp / Prolog тощо)

  • Я не думаю, що перша мова повинна бути найпростішою. Швидше думаю, це повинно дати загальне уявлення про те, як працює комп'ютер, зберігаючи деяку абстракцію.
  • Перехід від C до C ++ буде простішим. Буде OOP, найбільш використовувана парадигма в наші дні.
  • Перехід з C ++ до C # / Java буде простішим. Я віддаю перевагу C #, тому що він містить багато парадигм, як функціональне програмування.
  • Коли хтось зараз прийде до динамічних мов, таких як Python чи Ruby, з'явиться " WoW ". Так буде легше відчути красу динамічного набору тексту. Але вивчення динамічних мов спочатку та статичних пізніше спричинить: " О! Чому я повинен додати все це? "
  • Зараз найбільш використовувані парадигми та мови майже виконані. Отже, досліджуйте все, що завгодно. Від Асамблеї до Ліспа, Пролога чи Хаскелла. І відкрийте для себе новіші контексти та функції різних мов програмування.

Тут C тільки для початку.
Гульшан

перевага C # над Java залежить від багатьох факторів, я б сказав, що обидва майже рівні.
prasonscala

0

Схема, С, С ++

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

  1. Схема
    Ми з вами спочатку вивчаємо програмування, чим менше магії, тим краще. Мова викладання Схеми представляє чітке та розумне визначення мови, дійсно невеликий набір аксіом ("магія"), на якому можна будувати та розширювати. Кожен, хто може зрозуміти функції з математики, може простежити та обґрунтувати програми Схеми. Починаючи зі схеми - це чистий, але потужний спосіб продумати обчислення, не турбуючись про конкретні мови.

  2. C
    Перехід від Схеми до С є кардинальним, але дозволяє дізнатися про дуже важливе відображення мов високого рівня на мови низького рівня. Вивчення моделі пам'яті (покажчики, купа, стек тощо) та способи компіляції та запуску програм, як працюють покажчики, стек та купа - це важливі навички. Завдяки такому розумінню низького рівня ви можете почати аналізувати програми на більш високому рівні (Big O). Ви можете почати прокручувати власні абстрактні типи даних, граючи з різними реалізаціями (скажімо, просту хеш-таблицю проти бінарного дерева для набору).

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

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

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


0

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

  • C - Покажчики та управління пам'яттю
  • C ++ - основи ОО і досі дуже популярні
  • Java / C # - найпопулярніші мови
  • Якась основна збірка
  • Функціональна мова - Наприклад Haskell
  • Мова сценарію - Eg Python

0
  1. Пітон. Щоб виконати роботу, виконайте звичайне програмування. Процедурний, ОО та (певною мірою) функціональний.

  2. Регулярні вирази. Вони знаходяться в бібліотеці Python, але це окрема DSL.

  3. Оболонка (БАШ чи що завгодно). Знаки "&", "|", ";" Оператори для комбінування процесів є критичними і неприємними в Python.

  4. SQL. Це - наразі - lingua franca для доступу до даних.

  5. XHTML. Це - наразі - lingua franca для представлення даних.

  6. CSS.

Можливо, С, якщо це стане необхідним.


Здається, ви покинули етап " глибокого просвітлення ". Це номер 7?
Марк C

@Mark C: просто намагаємось охопити "більшість широко використовуваних мов та парадигм сьогодні". На мій досвід, ці "інші" або DSL, можливо, більш широко використовуються, ніж мови програмування. Я не впевнений, що це призводить до глибокого просвітлення - просто опромінення багатьох мов, які насправді використовуються.
S.Lott

Ви маєте рацію, я бачу, що він це сказав, тоді я помітив, що він також сказав "або парадигми". Це було просто в гарному гуморі.
Марк C

@Mark C: Але SQL і CSS - це "інші парадигми", які є найцікавішими. Дійсно регулярні вирази - парадигма, яка викликає багато питань щодо переповнення стека.
С.Лотт

0

Почніть близько до металу:

  1. Асемблер
  2. С
  3. C ++
  4. C #
  5. Лісп
  6. Пітон або Рубін

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

  1. Асемблер: 3 місяці
  2. C: 6 місяців
  3. C ++: 2 роки
  4. C #: 6 міс
  5. Лісп: 3 місяці
  6. Пітон / Рубін: 3 місяці

Якщо ви не маєте наміру навчити їх "Привіт, світ", на що потрібно 6 місяців.


-1

Чому б не зайти прямо та вивчити VB чи C #. На мій погляд, обидва мови - це цілі мови, починаючи від початкових і закінчуючи, імхо


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