Чи підходить C ++ як перша мова? [зачинено]


26

Місцевий коледж викладає C ++ студентам першого курсу (16 років) без попереднього досвіду програмування.

Чи підходить C ++ як перша мова програмування?


56
Будь-яка мова може бути першою мовою. Це насправді не має значення.
Адам Лір

8
Це може вас зацікавити - joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Craige

19
@Anna Lear: Звичайно, будь-яка мова може бути першою мовою, але це не кваліфікує C ++ як хорошу першу мову. Якщо ваша відповідь була справжньою відповіддю, я б проголосував за непорушну.
Ед Джеймс

6
@Doug: Я програмую C ++ на життя ... який твій погляд?
Матьє М.

9
@Dough - 70% обчислювальних проектів сьогодні передбачають написання програмного забезпечення для вбудованих систем та мікро пристроїв. Здогадайтесь, які мови використовуються для цих проектів? Здогадайтесь, хто найкраще обладнаний для позицій початкового рівня? Безумовно, не Java або .NET однонадійні поні. Звучить суворо, але школи зробили велику користь для цілого покоління випускників КС, навчаючи їх лише для 30% ринку роботи в програмі. У нас є надмірна кількість програмістів для додатків (30%) і дефіцит у системному секторі (70%). Ці цифри нікуди не діваються. Майбутні можливості кар’єри? Так правильно.
luis.espinal

Відповіді:


61

Підкреслено, що ні .

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

«Студенти повинні розуміти поняття низького рівня».

Кодування "низького рівня" не полягає в тому, щоб отримувати об'єкти 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 ++, швидше приїде до студентів, і вони знають, як створити більше. Просто не навчайте С ++ спочатку.


4
Чудова відповідь! Дійсно, багато функцій C ++ зовсім не пов'язані з програмуванням низького рівня.
Марко Мустапік

7
+1, відмінна відповідь. Це правда, що іноді примхи C ++ помилково ототожнюють із "низьким рівнем". Ви пов’язали поширені запитання на C ++, але я б також рекомендував людям подивитися на C ++ FQA (або "Часто запитувані відповіді": P)
Андрес Ф.

2
Ого. Це нагадує мені Java IAQ ...
Джессі Мілікан

Повністю згоден. Навіть Малболдж був би кращим за С ++ для початківця.
праворуч

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

54

Ні, 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!")

Ось так, давайте кодируємо деякі алгоритми.


15
Пітон підійде для семикласника. Студент коледжу може зрозуміти набагато більше.
Гульшан

13
Звичайно, але ми говоримо про першу мову. C ++ відомий тим, що його важко вивчити та опанувати, порівняно з іншими мовами. Навіщо використовувати його для навчання програмуванню? Студент може вивчити С ++ пізніше, коли він знатиме деякі основи програмування.
Марко Мустапік

8
Ви навіть не згадали про аргументований пошук << :)
MetricSystem

6
Вам не потрібно знати абсолютно все, щоб розпочати роботу з мовою. cout << все, що завгодно; "просто працює", вам не потрібно буде вникати в деталі, що містять круту, поки пізніше ви не покриєте перевантаження оператора тощо.
Колен

6
Я б взяв Python над C ++ будь-якого дня тижня як вступну мову.
jprete

21

Це, мабуть, непогана перша мова: складний синтаксис, багато правил, стара мова, керована помилками управління пам'яттю. Краще навчити своїх учнів чогось більшого OO, наприклад, Smalltalk, або щось приємніше програмувати, як Python, або щось функціональне, як Haskell.

Вони можуть вивчити C ++ пізніше в житті (якщо вони не можуть у цьому допомогти), після того, як вивчать кращі мови.


5
Хаскелл як перша мова був би цікавим експериментом.
Ларрі Коулман

@Larry, курс CS Кембриджського університету викладає SML як першу мову.
Пітер Тейлор

1
Функціональне програмування перекручує ваш мозок - я знаю, що MIT починається зі схеми досить рано, але я радий, що я не почав функціонувати програмування лише після двох років гібридного процедурного / OO-стилю в школі.
justkt

11
@justkt: Усі мови крутять ваш мозок. Це лише питання про те, як ви хочете, щоб він крутився.
Девід Торнлі

+1, але я б категорично не позначав мови, окрім C ++, як обов'язково "кращі".
greyfade

18

Коротка відповідь: Так!

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

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


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

4
@Marco: вступний підручник Stroustrup "Програмування: принципи та практика використання C ++" вводить покажчики приблизно в середині книги. У C ++ ви можете робити багато речей, не вводячи покажчик.
Девід Торнлі

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

1
@David: Проблема в тому, що робити "багато чого в C ++" без покажчиків ще гірше. Без покажчиків всі ваші об'єкти декларуються на стеці, що є однією з найгірших ідей програмування ВСЕ. Типи значень і успадкування / поліморфізм просто не змішуються, а спроба їх змішання призводить до цілих категорій помилок, які не існують у кращих мовах.
Мейсон Уілер

9
О боже, ні! Навіщо спалювати обмежений цикл мозку на непотрібних ідіосинкразіях С ++? Навіщо орієнтуватися на нерелевантні речі низького рівня, такі як управління пам'яттю, коли мета полягає у вивченні основних понять у програмуванні? Навіщо стрибати в глибокий кінець ?!
Маглоб

14

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


10
З усією належною заслугою Dijkstra практично неможливо навчити студентів добре програмувати, які мали попередній вплив C ++; як потенційних програмістів вони психічно понівечені поза сподіванням на відновлення. ;)
Мейсон Вілер

3
Їм доведеться навчитися багато шкідливих звичок у С ++. Якщо використовувати інший приклад, чи знання асемблера робить вас кращим програмістом Java? Я б сказав, що НЕ.
Андрес Ф.

16
@ Андрес Ф .: Не повинен погодитися з цим. Знання асемблера робить вас кращим програмістом незалежно від того, про що ви пишете, адже тоді ви можете зрозуміти, що насправді відбувається.
Мейсон Уілер

2
@Andres: Я бачив занадто багато програмістів Java / C #, які переходять на інші мови і набивають усе на об'єкти ... їм не вистачає широти досвіду.
Матьє М.

3
@Andres F. - У свої 12 років, що займаються Java, я стикався зі своєю часткою Java-програмістів, які по-справжньому засихають за те, що вони не піддаються впливу таких питань, як розподіл ресурсів, RAII, не знаючи, як програмувати прикладні програми для gc, і т. д. Знання складання та знання скомпільованих мов без автоматичної підтримки сміття та з підтримкою парадигм, відмінних від OO (C, C ++, Ada, або майже будь-якої компільованої мови сімейства Algol) вчить вам писати ефективні та великі системи на Java, C #, Python, ти його називаєш. Плюс, об'єктна модель в C ++ зовсім не така, як у Java.
luis.espinal

10

Я навчав себе C ++, коли мені було 15-16.

Краще залишити магію іншим і навчитися внутрішній роботі речей самостійно.


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

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

Існує дуже погана тенденція хотіти приховувати тонкощі програмування для студентів. Це не закінчується добре (див. Есе Явольних шкіл Спольського). Ці люди потрапляють на DailyWTF, якщо вони не отримують голову прямо. Абстракції витікають, і коли (не якщо) абстракція протікає, це гірше, ніж з цим боротися. Я працював як ТА для студентів C ++ початкового рівня. Або речі треба ховати до кінця, або їх потрібно винести на світло для дослідження. Магія - ворог учня.

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


1
@Ed: Не дуже. Я освоїв If і Goto в QBASIC, і це було про це. Покажчики, масиви, функції, класи тощо - це все в моєму майбутньому C ++. Рекурсія також була незрозумілою.
Пол Натан

5
Зачекайте, ніхто не очікує, що хтось попрацює над проектом, використовуючи C ++, не розуміючи C ++! Це дійсно призведе до коду, гідного TheDailyWTF. Але в відміну від вашої претензії, це НЕ тривіально , щоб дізнатися C ++ (і це не «C з класами», або). C ++ має величезний, заплутаний, а іноді і нечуттєвий синтаксис і граматику, і нескінченність ключових слів і правил. Це жахлива мова для початку. Як мова викладання це жахливо, тому що вона обумовлює студентів, що думають про недоліки C ++, є природними і неминучими в світі програмування.
Андрес Ф.

1
Андр: Ви наполягаєте на хибній дихотомії: "~ C ++ або All C ++". Це помилково.
Пол Натан

1
@Paul: досить справедливо. Але врахуйте це: навіть синтаксис та граматика спрощеного C ++ є складним, оскільки він повинен підтримувати всі функції повної мови. Тож ви вже йшли на компроміс із використанням некрасивої мови, навіть якщо ви викладаєте її в її більш простих формах. Я припускаю, що ви не просто кодуєте в C деяким синтатичним цукром (він же "C з класами"), тому що в цьому випадку вам краще подавати звичайний C!
Андрес Ф.

2
@Andr: Не дуже. C ++ пропонує значне синтаксичне спрощення щодо C89. Крім того, для цілей початкового рівня все дуже зрозуміло для всіх випадків, про які я можу придумати ...
Пол Натан

8

Я б сказав «ні» - у мене з'явилася пристрасть і бажання вивчити програмування, і я пішов прямо в свій вступний рік в коледжі з C ++ прямо з місця. У поєднанні з викладачем, який викладав C ++ так, ніби це була інша мова (поняття, які мають для них сенс, не обов'язково поняття мови чи застосування в реальному світі), і проекти, що кидаються на нас одразу щотижня, я розбився і спалив разом з половина класу. На той момент, коли я навіть міг переварити, експериментувати та застосовувати те, чого мене навчали, я боровся з домашнім завданням проекту, яке збільшилось удвічі як тести. Я б стверджував, що це був більше курс 200 рівнів, ніж 100.

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

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


8
Будь-яка мова - це погана перша мова, якщо вона погано викладається.
Девід Торнлі

3
@David Thornley: однак, навіть якщо їх правильно навчають, деякі мови є поганим вибором для перших мов. Наприклад, Кобол.
Андрес Ф.

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

@ Andrés F .: Я не згоден з цим. Однак, в Кевіна розповідалося про поганого вчителя, і поганий викладач може викрутити Python або схему як першу мову (мої два кандидати на хорошу першу мову).
Девід Торнлі

2
@Chris: Я програмував у Коболі, і я шкодую вас :)
Андрес Ф.

8

Ні.

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

Це не означає, що C ++ (або C) - це погані мови або їх не варто вивчати; просто, що є кращі мови викладання, наприклад, Python.


1
C - це важка мова для викладання, але вона, безумовно, одна з найгірших. COBOL і Java сприймають торт як один з найгірших, набагато гірших, ніж C. Добре, що у C є те, що вам доведеться мати справу з внутрішнім металом на передній частині (не заглиблюючись у асемблер). Люди успішно викладаються з С, як основної мови. Звичайно, є й інші, більш елегантні варіанти, такі як Python або Ruby (або будь-яка мова, яка є багатопарадигмою і яка не потребує піднесення OO на передній план навіть для найпростіших завдань.) C не є одним з найгірших навчань вибір, не з дальнього пострілу.
luis.espinal

1
Незначно краще? Як ти малюєш? C ++ приймає все, що погано стосується C, і будує на ньому !
Мейсон Уілер

1
@MasonWheeler: Головним чином, через те, що C ++ надає чесний Богом stringтип даних, який перевантажує операторів, таких як +, =і ==робити те, чого студенти більш-менш очікують, порівняно з тим, як обробку рядків потрібно робити в C. Отже, "незначно" . Я б не рекомендував ні як мову викладання.
Джон Боде

7

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

Якщо говорити, C ++ - це чудова перша мова, якщо ви хочете бути інженером, і хитра мова, якщо ви хочете бути еквівалентом програмування механіком.

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

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


5

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


4

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

Ось що говорить доповідь декана університету Карнегі Меллон про використання C ++ для вступного курсу до програмування для першокурсників:

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

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


2

Звичайно. Є й інші мови, які можуть бути легшими для розуміння студентам першого курсу. Однак є способи, за якими вчитель міг повільно вводити поняття в C ++.


2

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

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


Але чому б не почати з більш високого рівня програмування? Це рівень, на якому ми вирішуємо більшість проблем (звичайно, крім певних проблем, що стосуються домену). Тоді, якщо їм потрібно наблизитися до металу, вони можуть вивчити C ++, асемблер тощо.
Андрес Ф.

Я згоден, його про те, наскільки добре його навчають!
Gary Willoughby

2

Ні. Абсолютно ні.

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

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

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

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

Абсурдно, що першою мовою програмування має бути C / C ++ або близькі варіанти, оскільки клас проблем, які вирішують C та його похідні, безумовно, не підходить для якогось довільно великого відсотка поточних та майбутніх проблем (за винятком випадків, коли потрібно врятувати попередньо викручена програма), і насправді це більше мізерний набір проблем, що надходять. Більшість програмістів ніколи не наблизяться до розробки основних функцій ОС або прямих інтерфейсів пристроїв, незважаючи на збільшення кількості маленьких мобільних взаємопов’язаних пристроїв. Більшість буде працювати і жити так, як ми. Виправлення та поетапне відключення коду, якому вже більше двох поколінь, впроваджуючи технологію, яка вже демонструє вік, або працює за межами технології програми "убивця" (x + 1).

Для першої мови я хотів би розглянути Lego NXT, легкий, але дуже багатий варіант LabView. Хоча Lego NXT не використовується широко в комерційних підприємствах, він буде представляти фундаментальну природу того, що це програмувати "сенсорним" способом. Я можу поєднати його з дещо нейтральною платформою, мовою сценаріїв, як Javascript або TCL / TK. І те й інше матиме відносно низький вплив з точки зору того, що вам доведеться виявити, щоб виконувати дуже основні, але ефективні завдання, з високою віддачею з точки зору циклу зворотного зв'язку та гнучкістю для впровадження та вирішення різного ступеня складності проблеми. Крім того, це дає гарну можливість для студентів, коли вони заздалегідь вивчать потенціал для перевищення того, що передбачено в консервованому середовищі: шанс спробувати працювати в темряві, вогкості,

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


1

Деякі моменти, де початківці легко роблять помилки в C ++:

складання завдань там, де ви хотіли перевірити = vs ==

Відсутній;

Читання фігурних дужок порівняно, наприклад, з Pascal Begin-End

А потім є всі включені файли, макроси, управління пам’яттю тощо, щоб плутати.

Тому я б сказав, що C ++ - це не найкраща мова для початку - проте, без сумніву, вона може бути дуже корисною, коли ви її навчитеся.

Я б - як і інші пропонували - використовувати C #, Java або, можливо, навіть VB - і хороший IDE з підсвічуванням синтаксису, налагоджувачем тощо, щоб полегшити відновлення після помилок.


1

Коли я навчався в коледжі, C ++ була мовою основи, яку викладали протягом першого курсу коледжу. Теорія полягала в тому, що вона містить деякі складні концепції програмування, тож якщо ти зможеш її засвоїти, ти можеш вибрати інші мови. Це добре послужило мені.

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

На аналогічній ноті ми прагнули найняти пару недавніх випускників коледжів із справді хорошими навичками C ++. Нам не вдалося знайти жодного.


1

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

C ++ була моєю першою мовою, і я радий, що це було. Мені здалося, що я рано думав про налаштування OOP, і я вдячний за це. Але врешті-решт, це дійсно зводиться до того, що ти хочеш зробити. Мова не має великого значення, тому що якщо ви зможете добре попрацювати з однією мовою, швидше за все, у вас не виникне жодних проблем з вибором іншої. Що ти хочеш робити? Зробити ігри? Програма для мобільних телефонів? Кожен з них матиме інструменти та мови, які краще підходять для нього.


1

C ++ - це мова експертів, а не початківець ... сказав би спершу C, а не Java чи C # чи Python ... чому? тому що C навчає вас дбати про свою пам’ять і деякі складні поняття, такі як вказівники, які "приховані" усіма мовами, але є скрізь. Я бачив так багато молодих розробників, які навіть не розуміють, чому слід випускати пам'ять іноді і вважають, що збирач сміття - це не маленький карлик, який очищає всі кодові кодові: вони створюють екземпляри, вони створюють інстанцію та вибухають, навіть якщо у них є XXXXGb ОЗУ ... Але вони не розуміють, чому сміттєзбірник не просто просто магічно очищує все! І я бачив такого роду розробників, що кодують в C ++ (і навіть божевільніше, в Корбі), і це було забій !!!!!!!!!! Тому я радив би вивчити кодування в C, а потім перейти до Python / Java / C # для об'єктних понять і всього цукру навколо. Потім, коли ви все це розумієте, переходите до C ++ і відчуваєте силу C ++, але ви також виявляєте всі його небезпеки і чому його ніхто не повинен використовувати;)


1

НІ. Є стільки речей, що мають C ++, що новачкові важко зрозуміти. Не потрапляйте у помилки "всі мови програмування рівні".

Почніть з Basic або Pascal (ігноруйте матеріали, які "застаріли"), а пізніше - з C / C ++ / Java / C # / Perl. Або якщо у вас є шанс, спочатку за допомогою Logo & Karel, а потім Basic або Pascal.

PD У деяких університетах та колегіях є клас використання та порівняння мови програмування, і трапляється, що я навчив цей клас ;-)


0

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


0

Якщо "підходящий" означає "можливо", так. Якщо для "доброго", точно - ні.

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

Не на початку, коли ти незайманий, поспіль з невеликими, простими (але нібито цікавими та веселими) проблемами.

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

Пізніше, коли ви вже зможете запрограмувати вихід з паперового пакета, перейдіть на голий метал: вивчіть способи складання та декілька архітектур, плюс, можливо, Mix Knuth's. Я не маю на увазі запам'ятовування опкодів або багато реальних речей, просто щоб зрозуміти пам'ять, регістри, ALU, кешування, переривання та перехід на рівень читання.

Тоді за допомогою цієї основи ви можете зазнати інших мов, включаючи C ++. Можливо, хороша ідея, щоб додати між ними "історію та еволюцію мов".


0

Я починав з C ++ в середній школі. Я взяв копію цієї книги: C ++ Як програмувати Deitel та Deitel . Ця книга досить гарна.

Відверто кажучи, тут немає правильної чи неправильної відповіді, я особисто виявив, що C ++ зрозумілий. Я навчився цього аж до OOP (мене натрапило на "це", що я зараз не розумію, як я не міг цього отримати, але що б там не було). Спробуйте, не відволікайте. Якщо ви застрягли, перевірте інші мови та продовжуйте вивчати нові. Ідея полягає в тому, що коли ви побачите одне і те ж поняття в 2-3 різних формах, ви зрозумієте їх краще. Як я вже говорив, поняття "цього" вказівника мене збентежило, але коли я побачив те саме в Python (натомість назвав себе), це мало сенс для мене одразу, тому що я зрозумів це на C ++. Вивчіть Java, якщо ви можете стільки коледжів викладати цьому. Навчіться пітона або рубіну, оскільки це мова про подорожі, і якщо ви можете вивчити більше нішевих / нових речей, таких як Clojure (та всі інші ліпси), Haskell, Scala ...


-1

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


2
Чому Java або C #, коли Python ще простіший?
Девід Торнлі

-3

Здається, припущення, що стоїть за цим питанням, "C ++ виявляється настільки складним, чи зможе 16-річний дитина змогти підібрати його як першу (комп'ютерну програмування) мову?"

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

Звичайно, C ++ набагато менш складний / складний, ніж, скажімо, більшість людських мов. 16-річні повинні бути в змозі забрати його. Чи напишуть з ним чудовий код? Треба чекати і дивитися.


4
Людські мови можуть дозволити собі складний синтаксис, тому що якщо ви отримаєте грамматику або орфограму, люди все одно можуть вас зрозуміти. Не так з комп’ютерними мовами.
dan04

-3

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

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