Місцевий коледж викладає C ++ студентам першого курсу (16 років) без попереднього досвіду програмування.
Чи підходить C ++ як перша мова програмування?
Місцевий коледж викладає C ++ студентам першого курсу (16 років) без попереднього досвіду програмування.
Чи підходить C ++ як перша мова програмування?
Відповіді:
Підкреслено, що ні .
Для будь-якої мети, яку ви маєте на увазі для студентів, інша мова чи послідовність мов були б швидшими та кращими. Приклади.
«Студенти повинні розуміти поняття низького рівня».
Кодування "низького рівня" не полягає в тому, щоб отримувати об'єкти new
, подавати їх назад delete
, а інколи мати вказівник, який вказує кудись, не повинен. Функції, класи та шаблони не є низькими. RAII, 12 способів використовувати const
, std::ostream::operator<<
, protected
і new
не є поняттями низького рівня. Ці речі мають наслідки низького рівня, і ви пропускаєте їх місяцями або до майбутнього класу, а натомість викладаєте гори семантики С ++.
Я пропоную асемблеру з хорошим середовищем та навчальним матеріалом, таким як MIPS або MMIX. Якщо ви поспішаєте, навчіть C з об'їздами хоча б дивитись на вихід асемблера. Це дозволить вам зрозуміти, що C ++ низького рівня робить, а потім і деякими - швидше.
"Студенти повинні зрозуміти об'єктну орієнтацію."
Об'єктна орієнтація, вбудована в C ++, є надмірно складною для викладання концепцій ОО, або майже будь-якої іншої концепції високого рівня. Дивіться відповіді на C ++ FAQ, щоб отримати хороший довгий список можливих причин. Вам або доведеться потрапити на весь цей матеріал, що займе дуже багато часу з новими програмістами; інакше вам доведеться пропустити багато цього, залишаючи нових програмістів у темряві - ефективно, не дуже знаючи C ++!
Я пропоную вивчити більш просту мову на високому рівні з предметами (Python, Ruby, Squeak, Common Lisp, Racket), якщо ви взагалі повинні навчати C ++. Крім цього, вивчіть поліморфізм як поняття, яке є окремим від ОО, відвідавши функціональну мову.
"Студенти повинні зрозуміти шаблони та метапрограмування шаблонів."
Ніхто насправді цього не запитує, але я б хотів, щоб вони. У C ++ є гарні шаблони, і STL - це круто, але вони просто не повинні бути достатньо високим пріоритетом, щоб спочатку навчати C ++. Викладання системи типів OCaml або Haskell, а потім переоснащення цих понять все одно може бути швидшим.
"Студенти повинні навчитися вирішенню проблем."
Так, ви отримуєте це будь-якою мовою, і ви отримуєте більше, якщо це майже будь-якою мовою, крім C ++, тому що багаж набагато менше. Знову дивіться відповіді на C ++ FAQ, щоб ознайомитись зі списком усіх речей, які навчатимуться учні, а не навички вирішення проблем.
"Все вищезазначене, і нам потрібно використовувати лише одну мову". або "Роботодавці хочуть цього". або "Нам потрібна мова у стилі С". або ...
Вчити більше однієї мови.
Думка про те, що ви економите час або енергію, навчаючи чи вивчаючи лише одну мову, є абсолютно смішною. Він заснований на ідеї, що вивчення будь-якої мови займає рівно X чоловіків місяців ( ПОДАКА! Підказка! ), Де X - це одне число або одне число на кожну мову. Це майже ідентично ідеї, що ви можете заощадити час і гроші, пропустивши все, що "вимоги" та "тестування" сміття.
Що стосується декількох синтаксисів, ви небезпечно калічите учнів, якщо навчите їх очікувати синтаксису С на кожній мові, роблячи їх дико упередженими щодо інших мов.
Практично будь-який шлях швидший і кращий, ніж починати з C ++. Вивчення простої мови високого рівня, а потім C ++ було б швидше. Навчання асемблеру і тоді C ++ було б швидше. Все, окрім C ++, швидше приїде до студентів, і вони знають, як створити більше. Просто не навчайте С ++ спочатку.
Ні, C ++ - це важка мова навіть для досвідчених розробників C ++. Навіть для найпростіших алгоритмів ви повинні пояснити багато тонкощів мови. Розглянемо приклад Hello World:
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
}
Що це за #include
команда? Що таке std::cout
. Чому ::
? Що таке <<
? Ох, це перевантажений оператор! Що таке перевантажений оператор? Sooo, бо ints
, він трохи зміщується, але при будь-якому std::cout
, він виводить речі на консоль. Ох, std::cout
це потік, і потоки перевантажені ними <<
і >>
оператором.
Давайте побачимо той самий зразок у Python:
print("Hello World!")
Ось так, давайте кодируємо деякі алгоритми.
Це, мабуть, непогана перша мова: складний синтаксис, багато правил, стара мова, керована помилками управління пам'яттю. Краще навчити своїх учнів чогось більшого OO, наприклад, Smalltalk, або щось приємніше програмувати, як Python, або щось функціональне, як Haskell.
Вони можуть вивчити C ++ пізніше в житті (якщо вони не можуть у цьому допомогти), після того, як вивчать кращі мови.
Коротка відповідь: Так!
Я б сказав, що будь-яка мова - це підходящий початок, але особливо C ++ (або еквівалентний). Цього дня C # і Java - основні мови використання та програмування, завдяки чому ви швидко навчитесь спиратися на API та IDE, але за допомогою C ++ ви отримуєте шанс навчитися програмуванню з нуля, включаючи оптимізацію продуктивності тощо.
Ніколи не погана ідея засвоїти основи програмування, циклічного циклу та сортування, перш ніж просто сліпо покластися на вбудовані мови .Sort ();
Насправді я вважаю, що це, мабуть, хороший вибір як першої мови з цілком практичної причини: після вивчення мови C ++ будь-яка інша мова, з якою ви стикаєтесь, буде здаватися вітром для вивчення.
Я навчав себе C ++, коли мені було 15-16.
Краще залишити магію іншим і навчитися внутрішній роботі речей самостійно.
Відверто кажучи, якщо ви не можете розібратися в синтаксисі C ++ початкового рівня та семантиці, ви не настільки хороші в комп'ютерах. Це не так складно. Немає вагомих причин уникати "C з класами".
Якщо ви очікуєте, що студенти почнуть працювати над метапрограмуванням шаблонів, виведенням поліморфних викликів та розплутуванням декількох ієрархій успадкування - це смішно для класу початкового рівня для будь-якої мови, якою ви користуєтесь.
Існує дуже погана тенденція хотіти приховувати тонкощі програмування для студентів. Це не закінчується добре (див. Есе Явольних шкіл Спольського). Ці люди потрапляють на DailyWTF, якщо вони не отримують голову прямо. Абстракції витікають, і коли (не якщо) абстракція протікає, це гірше, ніж з цим боротися. Я працював як ТА для студентів C ++ початкового рівня. Або речі треба ховати до кінця, або їх потрібно винести на світло для дослідження. Магія - ворог учня.
Якби мені довелося порекомендувати початкову мову, складену до машинного коду, варіант Pascal, мабуть, був би найкращим підходом. Він, як я пам'ятаю, має більш регулярний і структурований підхід, ніж сім'я C.
Я б сказав «ні» - у мене з'явилася пристрасть і бажання вивчити програмування, і я пішов прямо в свій вступний рік в коледжі з C ++ прямо з місця. У поєднанні з викладачем, який викладав C ++ так, ніби це була інша мова (поняття, які мають для них сенс, не обов'язково поняття мови чи застосування в реальному світі), і проекти, що кидаються на нас одразу щотижня, я розбився і спалив разом з половина класу. На той момент, коли я навіть міг переварити, експериментувати та застосовувати те, чого мене навчали, я боровся з домашнім завданням проекту, яке збільшилось удвічі як тести. Я б стверджував, що це був більше курс 200 рівнів, ніж 100.
Я дійсно намагався з усіх сил. Я не просив співчуття, я знав, що це буде викликом, але вчитель навіть мені не допоможе. Тільки казав мені піти читати підручник, як я це робив.
Я б заперечував (а дехто не погодився б), що Рубі чи Пітон є набагато кращою мовою, щоб зламати когось у світ програмування. Чистий, стислий, читабельний, чіткіший синтаксис.
Ні.
Як мова викладання, C ++ лише незначно краща за C, яка є однією з найгірших мов викладання навколо. Це вносить багато складності наперед, деякі частини мови глибоко не інтуїтивно зрозумілі, і більшу частину часу ви вивчаєте більше про C ++, ніж про програмування взагалі.
Це не означає, що C ++ (або C) - це погані мови або їх не варто вивчати; просто, що є кращі мови викладання, наприклад, Python.
string
тип даних, який перевантажує операторів, таких як +
, =
і ==
робити те, чого студенти більш-менш очікують, порівняно з тим, як обробку рядків потрібно робити в C. Отже, "незначно" . Я б не рекомендував ні як мову викладання.
Існує два найважливіші типи після середньої освіти: університет та торговельна школа. Різниця полягає в тому, що ви хочете бути готовими робити після закінчення навчання. В автомобільній галузі - це чи будете ви механіком чи механіком.
Якщо говорити, C ++ - це чудова перша мова, якщо ви хочете бути інженером, і хитра мова, якщо ви хочете бути еквівалентом програмування механіком.
Вступний клас на C ++ збирається витратити багато часу, розмовляючи про типи даних, визначення, декларації, покажчики, розподіл пам'яті тощо. Це чудовий фундамент, якщо ви збираєтесь провести кілька семестрів, будуючи можливість зробити що-небудь корисне, але хочете знати, що як тільки ви потрапите туди, у вас є фундамент для вирішення будь-якого рівня складності.
З іншого боку, якщо ви хочете швидше зробити щось корисне, але не заперечуйте, якщо домен і складність обмежені, то витрачати весь цей час на ці поняття нижчого рівня на передній план буде марно. Є багато програмістів, які можуть написати чудовий валідатор форми HTML, але не мають поняття, як підійти до проектування драйвера пристрою.
Звичайно. Моєю першою мовою був C, але це було насправді просто для того, щоб полегшити наш клас на C ++. Це значно полегшило роботу з Java, коли я потрапив до університету. У C ++ може бути трохи крутіша крива навчання, але якщо її правильно навчати, це має бути добре.
Ні, C ++ не підходить як перша мова. Як показано тут, багато професійних програмістів поділяють цю думку, але це також думка професійних викладачів.
Ось що говорить доповідь декана університету Карнегі Меллон про використання C ++ для вступного курсу до програмування для першокурсників:
Стандартні мови, такі як C або C ++, не підходять для цього курсу, оскільки їх складність та недоліки перешкоджають як неформальним, так і механізованим методам міркування.
КМУ пропонує два вступні курси, імперативний та функціональний. SML було обрано для функціонального програмування. Я не знаю, що було обрано для імперативного курсу, але у звіті зазначається використання підмножини C.
Очевидно, що C ++ може бути найпершою мовою. Але йдеться про те, наскільки добре це вчать.
Всі кажуть, першу мову слід зрозуміти дуже просто. Але моя думка полягає в тому, що більшість людей починають програмувати на бакалавраті. Отже, ви можете навчити чомусь вони здатні зрозуміти. І за допомогою C ++ ви можете перейти від нижчого рівня до вищого рівня програмування.
Ні. Абсолютно ні.
Якби я мав свій шлях, я б заборонив його використовувати в академічній обстановці майже повністю. Не з причин, які суперечать тим, що вже були зроблені, а тому, що занадто багато людей вважають, що C ++ (або його варіанти) є відповіддю майже для кожної проблеми, оскільки ви можете використовувати її майже в будь-якій ситуації. Це викрутка програмування.
Деякі люди використовують його для закручування гвинтів, цілком розумний інструмент для роботи. Інші використовують його як прибор, хоча часто ефективний, не дуже ідеальний, тому що викрутка, незалежно від того, що вам сказав би ваш батько, не є приборною стрічкою і може катастрофічно вийти з ладу через неправильне використання, оскільки композиція хвостовика навмисно не побудована для виду сил зіткнувся б прибар. Інші ж можуть спробувати використовувати його як перфоратор або зубило, і вони майже завжди будуть стикатися з проблемами, оскільки рукоятка викрутки не була побудована для того, що вражає зловживання, яке перфоратор або зубило призначене для того, щоб протистояти.
На мою думку, завдання програміста полягає в тому, щоб загалом перекласти реальні проблеми в автоматизацію, що забезпечує певну ступінь підвищення ефективності (зменшення залучення ресурсів до завдання), швидкість (зменшення часу на виконання завдання), передбачуваність (підвищення повторюваності завдання) або організації (підвищити обізнаність про зв’язок між завданнями).
Хоча зрозуміло, що кожен, хто програмує, повинен мати деякі загальні знання про операції з комп’ютерами низького рівня, а саме про пристрої вводу-виводу даних та розподілення пам’яті, напевно нечасто справді доводиться використовувати ці знання в будь-якій значній мірі, не кажучи вже про те, щоб використовувати їх для переважна більшість завдань. Спроба зробити це без розуміння більш широкого контексту проблеми вкладає необхідний ризик для зусиль.
Абсурдно, що першою мовою програмування має бути C / C ++ або близькі варіанти, оскільки клас проблем, які вирішують C та його похідні, безумовно, не підходить для якогось довільно великого відсотка поточних та майбутніх проблем (за винятком випадків, коли потрібно врятувати попередньо викручена програма), і насправді це більше мізерний набір проблем, що надходять. Більшість програмістів ніколи не наблизяться до розробки основних функцій ОС або прямих інтерфейсів пристроїв, незважаючи на збільшення кількості маленьких мобільних взаємопов’язаних пристроїв. Більшість буде працювати і жити так, як ми. Виправлення та поетапне відключення коду, якому вже більше двох поколінь, впроваджуючи технологію, яка вже демонструє вік, або працює за межами технології програми "убивця" (x + 1).
Для першої мови я хотів би розглянути Lego NXT, легкий, але дуже багатий варіант LabView. Хоча Lego NXT не використовується широко в комерційних підприємствах, він буде представляти фундаментальну природу того, що це програмувати "сенсорним" способом. Я можу поєднати його з дещо нейтральною платформою, мовою сценаріїв, як Javascript або TCL / TK. І те й інше матиме відносно низький вплив з точки зору того, що вам доведеться виявити, щоб виконувати дуже основні, але ефективні завдання, з високою віддачею з точки зору циклу зворотного зв'язку та гнучкістю для впровадження та вирішення різного ступеня складності проблеми. Крім того, це дає гарну можливість для студентів, коли вони заздалегідь вивчать потенціал для перевищення того, що передбачено в консервованому середовищі: шанс спробувати працювати в темряві, вогкості,
Після того, як вони навчаться керувати чотирма циліндрами автоматично, потім підняти їх у великий керівник V8, якщо вони справді зацікавлені та мотивовані. Якщо Джоель не може знайти програмістів рок-зірки під жодним каменем під його ногами, він, можливо, повинен буде продовжувати шукати десь в іншому місці або переосмислювати, чому йому може знадобитися більше, ніж купа викруток у своєму наборі інструментів.
Деякі моменти, де початківці легко роблять помилки в C ++:
складання завдань там, де ви хотіли перевірити = vs ==
Відсутній;
Читання фігурних дужок порівняно, наприклад, з Pascal Begin-End
А потім є всі включені файли, макроси, управління пам’яттю тощо, щоб плутати.
Тому я б сказав, що C ++ - це не найкраща мова для початку - проте, без сумніву, вона може бути дуже корисною, коли ви її навчитеся.
Я б - як і інші пропонували - використовувати C #, Java або, можливо, навіть VB - і хороший IDE з підсвічуванням синтаксису, налагоджувачем тощо, щоб полегшити відновлення після помилок.
Коли я навчався в коледжі, C ++ була мовою основи, яку викладали протягом першого курсу коледжу. Теорія полягала в тому, що вона містить деякі складні концепції програмування, тож якщо ти зможеш її засвоїти, ти можеш вибрати інші мови. Це добре послужило мені.
Сказавши, що під час мого старшого курсу я працював у комітеті, щоб визначити, чи слід переключати основну мову на Java. Після розмови з кількома видатними роботодавцями та деякими випускниками кафедри було встановлено, що перехід на Яву найбільше зацікавив студентів. Роботодавці, з якими ми спілкувалися, хотіли, щоб люди мали досвід роботи з мовою, якою вони користуються, щоб найняти їх. Я вірю, що через 10 років вони все ще використовують Java як основну мову.
На аналогічній ноті ми прагнули найняти пару недавніх випускників коледжів із справді хорошими навичками C ++. Нам не вдалося знайти жодного.
Я б сказав так. Але будь-яка мова справді може бути першою мовою. Я думаю, що C ++ хороший тим, що, хоча він складний, а іноді і складний, він показує, що ти можеш зробити насправді (менше обмежень). Крім того, він має деякий об'єктно-орієнтований дизайн, який допоможе вам підготуватися до використання інших мов.
C ++ була моєю першою мовою, і я радий, що це було. Мені здалося, що я рано думав про налаштування OOP, і я вдячний за це. Але врешті-решт, це дійсно зводиться до того, що ти хочеш зробити. Мова не має великого значення, тому що якщо ви зможете добре попрацювати з однією мовою, швидше за все, у вас не виникне жодних проблем з вибором іншої. Що ти хочеш робити? Зробити ігри? Програма для мобільних телефонів? Кожен з них матиме інструменти та мови, які краще підходять для нього.
C ++ - це мова експертів, а не початківець ... сказав би спершу C, а не Java чи C # чи Python ... чому? тому що C навчає вас дбати про свою пам’ять і деякі складні поняття, такі як вказівники, які "приховані" усіма мовами, але є скрізь. Я бачив так багато молодих розробників, які навіть не розуміють, чому слід випускати пам'ять іноді і вважають, що збирач сміття - це не маленький карлик, який очищає всі кодові кодові: вони створюють екземпляри, вони створюють інстанцію та вибухають, навіть якщо у них є XXXXGb ОЗУ ... Але вони не розуміють, чому сміттєзбірник не просто просто магічно очищує все! І я бачив такого роду розробників, що кодують в C ++ (і навіть божевільніше, в Корбі), і це було забій !!!!!!!!!! Тому я радив би вивчити кодування в C, а потім перейти до Python / Java / C # для об'єктних понять і всього цукру навколо. Потім, коли ви все це розумієте, переходите до C ++ і відчуваєте силу C ++, але ви також виявляєте всі його небезпеки і чому його ніхто не повинен використовувати;)
НІ. Є стільки речей, що мають C ++, що новачкові важко зрозуміти. Не потрапляйте у помилки "всі мови програмування рівні".
Почніть з Basic або Pascal (ігноруйте матеріали, які "застаріли"), а пізніше - з C / C ++ / Java / C # / Perl. Або якщо у вас є шанс, спочатку за допомогою Logo & Karel, а потім Basic або Pascal.
PD У деяких університетах та колегіях є клас використання та порівняння мови програмування, і трапляється, що я навчив цей клас ;-)
Ви можете вибрати будь-яку мову, щоб вивчити основи програмування. Я дізнався продукти на C / C ++. але через 7 років інструменти / мови змінюються в моїй школі, і вони віддають перевагу Java / C #. мови - просто інструменти. Те, що вам потрібно для покращення, - це основи. наприклад, в MIT люди вивчають основи алгоритму за допомогою python. наприклад, Java може бути корисною для веб-програмування. але C / C ++ корисні для сервісів та високоефективних додатків. Тож це залежить від ваших ситуацій.
Якщо "підходящий" означає "можливо", так. Якщо для "доброго", точно - ні.
Можна сподобатися, навіть полюбити C ++, але для цього вам краще вивчити кілька мов і попрацювати декаду з гнилими кодовими базами життя, отримати досвід роботи над "майстерністю нетривіального програмного забезпечення, яке працює насправді" - тоді C ++ матиме привабливість.
Не на початку, коли ти незайманий, поспіль з невеликими, простими (але нібито цікавими та веселими) проблемами.
Я б почав з python, за ним слід SICP (схема) або щось подібне. Можливо, перевернутий чи переплетений. З тими можна просто піти і впоратися з проблемою. Замість того, щоб боротися з системою, ходити в глибокій грязі та вивчати всілякі нелогічні химерності та їхні історичні причини.
Пізніше, коли ви вже зможете запрограмувати вихід з паперового пакета, перейдіть на голий метал: вивчіть способи складання та декілька архітектур, плюс, можливо, Mix Knuth's. Я не маю на увазі запам'ятовування опкодів або багато реальних речей, просто щоб зрозуміти пам'ять, регістри, ALU, кешування, переривання та перехід на рівень читання.
Тоді за допомогою цієї основи ви можете зазнати інших мов, включаючи C ++. Можливо, хороша ідея, щоб додати між ними "історію та еволюцію мов".
Я починав з C ++ в середній школі. Я взяв копію цієї книги: C ++ Як програмувати Deitel та Deitel . Ця книга досить гарна.
Відверто кажучи, тут немає правильної чи неправильної відповіді, я особисто виявив, що C ++ зрозумілий. Я навчився цього аж до OOP (мене натрапило на "це", що я зараз не розумію, як я не міг цього отримати, але що б там не було). Спробуйте, не відволікайте. Якщо ви застрягли, перевірте інші мови та продовжуйте вивчати нові. Ідея полягає в тому, що коли ви побачите одне і те ж поняття в 2-3 різних формах, ви зрозумієте їх краще. Як я вже говорив, поняття "цього" вказівника мене збентежило, але коли я побачив те саме в Python (натомість назвав себе), це мало сенс для мене одразу, тому що я зрозумів це на C ++. Вивчіть Java, якщо ви можете стільки коледжів викладати цьому. Навчіться пітона або рубіну, оскільки це мова про подорожі, і якщо ви можете вивчити більше нішевих / нових речей, таких як Clojure (та всі інші ліпси), Haskell, Scala ...
Ні. Я б почав з Java або C #. Якщо ви хочете вивчити C ++, це, ймовірно, простіше після того, як ви засвоїли основи, наприклад, що таке клас, як робити петлі та виделки (якщо, то заяви) тощо. Набагато важливіше навчитися дивитися на проблема або математичне рівняння і запрограмуйте її, ніж це з'ясувати, ви випустили всю свою пам'ять чи що завгодно.
Здається, припущення, що стоїть за цим питанням, "C ++ виявляється настільки складним, чи зможе 16-річний дитина змогти підібрати його як першу (комп'ютерну програмування) мову?"
До моменту, коли нам виповниться 4 або 5 років, ми збираємо більшість конструкцій на рідній мові, якраз при такому значному впливі на неї, слухаючи, як інші говорять на ній. Формування чудових речень займає життєвий час, питання тут немає.
Звичайно, C ++ набагато менш складний / складний, ніж, скажімо, більшість людських мов. 16-річні повинні бути в змозі забрати його. Чи напишуть з ним чудовий код? Треба чекати і дивитися.
Початківцям потрібно спочатку оцінити "програмування". З мого досвіду підготовки класу початківців, вони спочатку оцінили те, що вони найбільше розуміють. Як і Python vs. C #, вони цінують Python за те, що він дуже високий і не використовує символів, таких як C #, тобто дуже близький до людської мови, її англійської. Тому я б рекомендував вивчити програмування від високого до низького рівня.