Java або C ++ для університетських курсів CS?


11

Мені не вдається вступити до школи, щоб отримати ступінь CS. Школа, в яку я дивлюся, насправді пропонує як Java, так і C ++ - для вступних курсів розробки програмного забезпечення (об'єктно-орієнтоване програмування, схеми дизайну тощо). Вибір учня, який трек слідкувати, це вибір, але на це є лише час.

Знаючи те, що ви знаєте зараз, якби у вас був вибір, ви б заклали свою основу навчальних програм CS на Java або C ++?

Моя сьогоднішня дискусія виглядає приблизно так:

Хороший друг (маючи докторську ступінь в Інтернеті) називає Яву найкращим вибором незалежно від того, чим я займаюсь, якби тільки згодом відкрити більше можливостей для роботи, хоча він може бути упередженим, оскільки вся його робота була на Яві (він любить це). Я живу в районі Бостона, штат Массачусетс, США і бачу рівну кількість роботи на Java та C.

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

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

Або я міг би надто важко думати про це.

ОНОВЛЕННЯ: Виявляється, вибір мови був не таким чітким, як я спочатку вважав. Хоча кілька основних курсів орієнтовані на Java, деякі інші основні курси працюють в основному на C та Java, а також на кілька інших, які були кинуті для гарної міри. Насправді, решта мого семестру буде перебувати в Objective-C, витративши час на Java та Javascript. Останній семестр склав C, Javascript та PHP, а також декілька інших, поданих у якості необхідних завдань. Оскільки речі були значно розбиті на середину загалом, і я все ще отримую відповіді на це, я зараз намагаюся працювати над своєю навчальною програмою таким чином, щоб я відповідав усім вимогам до ступеня, але засвоював стільки мов, на які я можу розумно впоратися. . Поки мої оцінки не страждали, намагаючись це зробити.


1
Усі в академічному дослідницькому середовищі прямо зараз балакають Java. Крім того, незалежно від мови, яку потрібно вивчити в університеті, як вивчати нові мови. C ++ є, як і java, але немає тверджень, що вони будуть через 5 років. Нові мови / технології завжди надходять, тож вам потрібно бути готовим до того, щоб забрати їх та швидко стати вмілими.
Кріс

1
@Chris: Тому моєю рекомендацією було б вивчити щось, що полегшує подальше навчання, а не те, що зараз популярне. Я б рекомендував або C ++, або Python, а не Java (очевидно, з різних причин).
Девід Торнлі

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

1
Я перебуваю в (грізній) подібній ситуації: повертаюся до школи за КС після 20 років поза школою. У моїй школі також є розділена доріжка Java / C ++. Прочитавши все тут і навіть давши +1 головній відповіді, я все-таки буду їхати з Java, і ось чому, у випадку, якщо вам це корисно: я переходжу до веб-розробки (Javascript, PHP, Python) , тому підтримка бібліотек Java - плюс. Якщо припустити, що я також знаходжу час, щоб реально засвоїти принципи ООП, я не думаю, що перехід на C ++ (якщо потрібно) буде нелегким. Java - це середина між сценарієм та компіляцією.
бути hollenbeck

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

Відповіді:


51

Я особисто пішов би з C ++, оскільки це дасть вам зрозуміти, як частини Java працюють під кришкою (наприклад, покажчики). Перехід до Java з C ++ є досить тривіальним, тоді як рухатись навпаки, можливо, складніше.

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

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

Мій JUG збирається вбити мене за підтримку C ++ ;-)


1
+1 за відмінну оцінку щодо розміру екосистеми Java та пояснення переходу.
Яс

1
Проблема з навчанням великої екосистеми в університеті полягає в тому, що це не буде корисним протягом вашої професійної кар’єри. Вам краще вивчити менше бібліотек та вивчити поняття чи ознайомитись із фактичними особливостями мови.
Девід Торнлі

2
Ще одним стрибком для C ++ є те, що ви могли потім керувати C ++ в .NET Framework, що дає вам передумови до вивчення C #, F # та будь-якої іншої мови під час виконання. Java також чудово вводить JVM та такі мови, як Scala, але я не знаю жодного JVM C ++.
CodexArcanum

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

Ще в деякі наші дні до Java у нас не було цього вибору, і ми всі вивчили C ++, тому я не бачу жодних проблем із тим, що люди все ще вивчають C ++. Я думаю, що вступ на Java краще, ніж інтро в Turbo Pascal.
Братч

18

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

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

Коли ви досить добре володієте C ++, впевнені в управлінні пам’яттю та STL, підбір Java / C # повинен бути легким вітром.


Погоджений, я впевнений, що вивчення Java, якщо ви вже володієте C ++, буде набагато, набагато простіше, ніж вивчення C ++, якщо ви вже володієте Java.
Carson63000

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

Java не є швидкою мовою розробки додатків. Він може бути дещо вищим за рівень C ++, але він ніде не близький до рівня абстракції Python, Ruby, Perl або Visual Basic.
Еван Кроске

@Evan - Так, Java - це "швидка" мова розробки, якщо нічого іншого не має для цього величезні бібліотеки (зазвичай говорять, що будь-який розробник Java має відкриті документи Java API під час роботи), а також не потребує ручного управління пам'яттю. А людина, яка розробила Java, спроектувала її тому, що нікуди не дісталася за допомогою C ++. Плюс велика кількість розгорнутих Java-програм сьогодні (нижній бар'єр для входу) - ще один аргумент для її «швидкості».
Яс

9

Школи та науковці, які виступають за Яву як перший вибір, повинні перевірити голову (або просто отримати реальну роботу там.) Я говорю це як людина, яка за останні 12 років займалася розробкою додатків та систем на Яві. Java - жорстока мова для викладання.

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

Крім того, людина, що покладається виключно на основі мови gc (будь то Java або .NET), ніколи не може дійсно наблизитися до обладнання. Якщо ви не усю вашу амбіцію робити динамічні веб-сторінки, здогадайтесь, що? Вам потрібно бути комфортним з наближенням до мови.

Ви переходите до школи CS, щоб стати добре розвиненим комп'ютерним науковцем та програмістом (сподіваємось, у вас є досить багато кредитних годин практичної практики програмування на багатьох мовах програмування.) Якщо ви все, що знаєте, - це Java (або .NET або C або Python все, що завгодно), то ви "програміст Java" (не програміст, який може працювати на Java, а "програміст Java"). І це має стільки сенсу, як казати, що ви "столяр молотка" або "механік шуруповерта Філіппа", чи не так.

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

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

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

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

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

Я б запропонував вам прочитати твір Джоела Спольського на тему "Школи Java".

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

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


Від кого - то , хто знає , Java, C і C ++ дуже добре , а хто не закінчив занадто давно, я буду змушений не погодитися. C (або C ++) VS Java - Java - це "легше". Можливо, якби я почав із C ++ (що, на мою думку, є досить приголомшливим (але не легким) btw) (замість (Delphi (eww) +) Java) цілком можливо, що я став би демотивованим, відмовився і не став програмістом) (хоча, можливо, у нас просто був поганий вчитель C ++). Але так, навчання C ++ для розуміння внутрішніх якостей Java було абсолютно неоціненним. І я б здогадався, що близько 95% програмістів сьогодні "ніколи не наближаються до обладнання".
Герцогство

" C (або C ++) VS Java - Java - це" легше " " - ну, це добре відомо. Я не впевнений, що це стосується моєї посади, хоча (?????)
luis.espinal

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

Легше зрозуміти і викладати не обов'язково означає, що це адекватна мова для педагогічних цілей. Після 12 років роботи з Java, я переконаний у цьому. Набагато кращою педагогічною мовою, яка легше, ніж C або C ++, була б, наприклад, Python ... або будь-яка мова, яка не змушує кожного методу бути у класі, тобто мовою, яка справді є багатопарадигмою на відміну від Java, де все є "нібито" об'єктом, де немає хороших альтернативних варіантів вибору за межі класів і пакетів і так далі тощо. Це обмежує можливість навчити правильному моделюванню.
luis.espinal

Java, змушуючи вас вчитися програмуванню в орієнтованому на іменник режимі все як об'єкт, забезпечує слабкі метафори моделювання для інших парадигм, які більше підходять для фактичного світового моделювання. Професійний розробник з траншей може обійти це обмеження. Студенти ні, і пробачте, але дуже мало викладачів коледжу мають досвід роботи, який знає цю відмінність. Я б вибрав Python або Ruby (або насправді Lisp або BASIC) над Java, якщо C / C ++ занадто хардкор.
luis.espinal

4

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

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

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

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

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

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

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

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


3

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

Java є набагато простішою мовою і не заважає вашому навчанню.

Якщо ви повинні вивчити C ++, вивчіть поняття з Java, а потім перейдіть до C ++, а ще краще - OBJ-C, якщо ви хочете написати програмне забезпечення для Mac. Java та OBJ-C не надто відрізняються.

FYI Я провів 10 років як комерційний розробник C ++.


Це не буде моєю першою мовою. Я зараз програміст, повертаючись до школи, щоб фактично отримати ступінь. Мій досвід роботи з C ++ та Java обмежений, але я маю досвід роботи з C та Objective-C. Але дякую, що знайшли час для відповіді.
Філіп Реган

3
Java буде отримати в дорозі вашого навчання. Це навчить вас загальним неістинам щодо незалежних від мови понять.
DeadMG

2

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

  • EJB 1.x / 2.0, JNDI, JMS, JTA / JTS, RMI, JDBC, Servlets, JSP, SAX / DOM, веб-сервіси, SOAP, WSDL, UDDI, JAXB, JavaMail, WAP, WML, HTML
  • Tomcat, Apache Xalan, Apache Xerces, Jserv, JRun, JBuilder, TogetherJ, Web Logic 5.x / 6.x, Websphere 3.5 / 4

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


1
Я додам, що (принаймні в моєму районі) C ++ завдання також платять трохи краще, ніж завдання на Java (об'єктивні) і, як правило, цікавіші (суб'єктивні).
Cercerilla

2

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

C ++ є набагато складнішою мовою для роботи. Покажчики та управління пам’яттю концептуально та практично складно працювати. C ++ не пропонує мереж безпеки.

У перспективі було б корисно зрозуміти все, чого навчає C ++. Також перехід від C ++ до Java набагато простіше, ніж в іншому напрямку.

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

Інша сторона полягає в тому, що якщо ці випробування не змусять вас взагалі кинути рушник, вони зроблять вас кращим програмістом, якщо ви освоїли C ++. І якщо у вашій кар'єрі є C # або Java або python, і вам ніколи не доведеться торкатися іншого покажчика у вашому житті, ви оціните це набагато більше ...


2

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

При цьому завдання C ++ не є настільки поширеними, як завдання Java.

Java та її нащадок, C #, - це стандартні рішення для корпоративного / корпоративного простору кодування з великим залізам. Я настійно рекомендую вчитися одному з двох на другому курсі і бути дуже комфортним з ним до моменту закінчення ступеня. Це дозволить вам отримати роботу набагато простіше. Це не означає, що я думаю, що ці роботи в середньому мають значний інтелектуальний інтерес. Нещодавно я пройшов службу програмного забезпечення craigslist в Скелястих горах, і більшість робочих місць були C # / Java і стосувалися того, що називається програмним забезпеченням " CRUD "; ІМО, це дуже нудно.


1

Навчивши як C ++, так і Java на рівні коледжу, я настійно рекомендував би Java .

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

IDE для Java забезпечують підтримку як початкових, так і продовжуючих студентів. Введення потужних інструментів рефакторингу в розмову на початку (під час обговорення OOP, наприклад) допоможе учням навчитися писати коди, що підтримуються.

Хоча C ++ є корисною мовою, яку слід знати, додаткові поняття, засвоєні на C ++, насправді не варті додаткових зусиль мови в цілому. Існує великий додатковий набір "gotchas", який потрібно навчити навколо, який можна ввести пізніше (проблеми з управлінням пам'яттю та переповнення буфера, щоб назвати пару). Вимагаючи від учнів розуміння цього перед тим, як перейти до таких понять, як алгоритмічна складність та успадкування, сповільнює вас, так як вимагати від водія розуміння тиску в шинах перед тим, як їхати, сповільнить водійський Ед. Звичайно, це потрібно знати. Але вам потрібно лише знати це як щось, з чим ви помилитеся одного дня, а не як складовий елемент більшої концепції.


2
Якщо у вас виникли серйозні проблеми із переповненням буфера та керуванням пам’яттю, ви навчаєте C ++ неправильно. Хто із стандартних контейнерів може переповнюватись як буфер?
Девід Торнлі

Масиви? Я, власне, можу навчити C ++ неправильно; це було значно більше десяти років тому.
Алекс Фейнман

0

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

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


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