LINUX.ORG.RU

Вопрос по изучению C++

 , , , ,


1

1

Доброго времени суток, хотелось бы задать один вопрос: каким образом можно выучить C++ с самого начала? И стоит ли? Если не стоит, то с какого языка/какой теории начинать? Такой шквал вопросов из-за того, что хочется начать программировать, но глаза и правда разбегаются, ибо языков полно, равно как и методик изучения.


  • Никлаус Вирт «Алгоритмы плюс структуры»;
  • Б. Керниган, Д. Ритчи «Язык программирования Си»;
  • Р. Седжвик «Алгоритмы на Си++».

Это если более, менее имеешь представление о программировании.

Как то так...

Twissel ★★★★★
()

каким образом можно выучить C++ с самого начала?

Прочитать незабвенный труд Б. Страуструпа - The C++ Programming Language, 4th Edition

asaw ★★★★★
()
Ответ на: Кнут от Hubble

Кнут к C++ никаким боком.

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 1)
Ответ на: комментарий от asaw

C лучше вообще ничего не знать и не читать

Самый спорный вопрос всей подобной пропедевтики

Twissel ★★★★★
()

открыть текст стандарта языка C++ и прочитать от начала до конца, очевидно же

Harald ★★★★★
()

хочется начать программировать

Программировать что?

Я бы разделил
1) программирование для WEB - php, javascript
2) системное программирование (контроллеры, ядро, драйверы и т. п.)
3) прикладное программирование - утилиты для ОС, игры и другие прикладные программы

С++ хорош для прикладного программирования. Если так - начни с Паскаля. Потом С (хоть немного), потом уже С++.

Для WEB проще придумывать задачки. Но WEB-овские языки далековаты от C/C++

В системное программирование пока не лезь.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Да, забыл дописать. Конечно прикладное, с системой как-то не очень хочется возиться. А Паскаль знаю, хоть и не очень хорошо. Мне язык не понравился своей дикой упрощенностью, из-за которой много чего нельзя реализовать.

Hubble
() автор топика
Ответ на: комментарий от asaw

Какой я старый...:( Я читал не то 2, не то вообще 1 редакция, распечатанную на матричном принтере.

anonymous
()
Ответ на: комментарий от Harald

Нее .. отобъет себе желание потом вообще программировать. Кнут хорош как справочник. Читать его - тоска смертная.

anonymous
()
Ответ на: комментарий от Hubble

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

Интересно было бы послушать что именно.
Паскаль - полноценный язык. Да, там нет лямбд, монад, и других наворотов, но я еще не слышал чтобы Паскаль в чем-то ограничивал.

А Паскаль знаю, хоть и не очень хорошо.

Тогда проще. Тогда вот: Помогите составить план изучения С++ (комментарий) . Ну, и сам тред почитай.

Kroz ★★★★★
()
Ответ на: комментарий от anonymous

Не то слово)) С тех пор появился стандарт C++98 (про который 3-е издание), а потом и C++11 (про который четвертое). Я только 3-е успел прочитать(

asaw ★★★★★
()
Ответ на: комментарий от Hubble

Паскаль - тьюринг-полный язык, поэтому на нем теоретически можно все реализовать. Но в системное программирование лучше с ним не лезть ибо там C (и местами C++) - вне конкуренции. А поскольку ты туда и не хочешь, то тебе должно быть всё равно. Учи питон тогда.

asaw ★★★★★
()

Тут тебе насоветовали правильных вещей, но с точки зрения изучения всего этого в ВУЗе на программистской специальности, когда вокруг много увлеченных тем же начинающих программистов и есть преподаватели, которым всегда можно задать вопрос. Продолжается это 5 лет. Ты готов пройти этот путь в одиночку (ну, разве что с помощью форумов в интернете)?

Нормальный способ стать программистом, если ты не учишься в ВУЗе по этой специальности - это для начала получить некоторые знания по языку (чтобы начать писать код и понимать, что там для чего) и некоторые (поверхностные) знания по алгоритмам (это не книга Кнута или Сэджвика, да и вообще никакая толстая книга не подойдет). Лучше пройти пару курсов на курсере или где еще по языку и по алгоритмам. Это только начало, чтобы ты мог начать писать простой код и немного понимать чужой. Дальше идет развитие навыков.

Но возникает вопрос, в каком направлении развиваться (в смысле какие навыки прокачивать), потому что когда ты начнешь читать разные статьи по разным аспектам работы программиста - ты просто утонешь в обилии направлений развития навыков и знаний. И этот вопрос, кстати, самый главный и сложный для новичка. Самая большая трудность не в том, что ты чего-то не знаешь, а в том, что не знаешь, что именно изучать. Причем все эти знания и навыки взаимосвязаны, начав изучать одно - поймешь, что не хватает знаний в другом...

В общем, тебе нужно узнать, какие навыки и знания наиболее востребованы на практике (востребовано очень много всего и сразу, но изучать нужно по очереди, поэтому начинать надо с наиболее нужного). А знают это только люди с опытом и никто тебе не станет помогать (проще самому получить нужные знания и навыки, чем найти того, кто поможет). Ну, то есть на простые и короткие вопросы тебе ответят, но для того, чтобы правильно задать вопрос, нужно узнать половину ответа.

Выход из этой ситуации есть. Нужно начать делать что-то самому (свой проект, достаточно небольшой, который будет давать направление для развития и мотивировать). Однако, этот проект должен быть хоть сколько-нибудь востребован (реально его никто не будет использовать кроме тебя), поэтому лучше взять что-то существующее, популярное (а, значит, востребованное) и написать самому. По ходу ты будешь разбираться деталями реализации, а для этого придется смотреть код существующего проекта и читать статьи с нужной тебе информацией.

После того, как чуток научишься кодить, можно присоединиться к уже существующему проекту (до реализации своего проекта ты будешь им не нужен, потому что от тебя не будет никакой пользы, ты слишком слаб как разработчик). В существующем проекте, кроме кода промышленного качества ты сможешь также общаться с опытными разработчиками. И это сильно ускорит твое развитие. И, кстати, где-то на этом этапа тебе и понадобиться почитать серьезные книжки по алгоритмам, до этого достаточно будет более поверхностной информации.

Коротко повторю суть. Для программиста нужны навыки и знания, помогать тебе никто не будет (сильнее, чем просто отвечать на простые вопросы). Знаний и навыков нужно много, они все взаимосвязаны, но еще больше устаревшей, неверной, ненужной информации. При этом в каждый момент времени ты можешь либо развивать конкретный навык (кодить, например) либо получать информацию по какому-то одному вопросу, начать нужно с наиболее актуального и избежать траты времени на ненужное. Для этого, сначала делаешь свой проект (аналогичный уже существующему, активно используемому), получаешь нужную информацию, читаешь чужой код, развиваешь навыки кодирования, а затем присоединяешься к чужому проекту и начинаешь еще и общаться с опытными разработчиками.

После этого нужно устроиться работать Junior'ом и узнать много нового (потому что разработка как хобби и работа по ТЗ сильно отличаются).

anonymous
()
Ответ на: комментарий от Hubble

Паскаль знаю, хоть и не очень хорошо.
Мне язык не понравился своей дикой упрощенностью, из-за которой много чего нельзя реализовать.

Можно пример того, что нельзя реализовать из-за «дикой упрощенности»?

Так что дело скорее всего в «не очень хорошо».

bormant ★★★★★
()

... хочется начать программировать

Если хочется, то бери и начинай с какой-нибудь интересной тебе задачи. Непонятные моменты и порбелы можно восполнять в процессе, по мере возникновения проблем - благо сейчас в поисковике можно быстро найти ёмкие и небольшие статьи почти по любым вопросам. Конечно, при таком подходе нужно понимать что проблема вообще сущесвутет - тут уж как повезёт: если есть соответствующие задатки, то будешь их интуитивно чувствовать, если нет - то в лучшем случае докатишься по продвинутого шаблонщика.

Можно, конечно, обставиться различными книжками, начать знакомиться с какими-то максималистическими теориями (это почти все которые может предложить «печатная» литература) и подходами в разработке, но всё это с большой вероятностью закончится ничем без достаточного опыта работы руками: либо мало чего усвоишь, либо начнёшь неосознанно воспроизводить чужие глупости без повода.

А Паскаль .. Мне ... не понравился...

Паскаль неплохой индикатор на условную профпригодность: если он вызывает положительные впечатленя то кодить нормально скорее всего не будешь.

mashina ★★★★★
()
Ответ на: комментарий от Kroz

Для прикладного кресты не очень, если нет потребности в производительности (как в играх). Тот же C# гораздо приятнее для разработки утилит под оффтопик.

peregrine ★★★★★
()

Есть два адекватных пути:
1) Разобраться с Си (Си прост и его можно осилить за неделю) и потом перейти к Си++ без изучения. Т.е. потратить несколько часов на понимание разницы между структурой и классом и привыкнуть к new вместо malloc.
2) Сразу перейти к Си++. Этот пусть сложнее, но код станет Си++сным намного раньше. После первого способа есть большая вероятность, что ты никогда плюсы и не выучишь и будешь всю жизнь писать на «Си с классами».

Нужно ли?
Есть 3 языка, покрывающие 95% всего полезного(и высокооплачиваемого)кода: Си, Си++ и Ява.
Удел остальных языков это Веб-болото, прототипизация или демонстрация каких-то идеологических абстракций, которые когда себя зарекомендуют всё равно будут включены в плюсы или яву.

Stahl ★★☆
()
Ответ на: комментарий от peregrine

Для прикладного кресты не очень, если нет потребности в производительности (как в играх).

С++ хорош тем, что он универсален. То есть на нем можно написать все что угодно с любыми требованиями под практически любую платформу - в отличии от C#.

Да, наверное его наилучшее применение - там где нужно учитывать ресурсы. И это не только процессор, но и память, и дисковое пространство и т. п. Но тогда нужно говорить о том, что для каждой задачи свой инструмент. А инструменты выбираются из того арсенала, который знает программист (или команда).

Если бы меня спросили, если бы я мог выучить только один язык программирования, какой бы я выбрал, то я назвал бы именно С++.

Так что выбор ТС'а для прикладного программирования я полностью поддерживаю.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 3)

isocpp.org/tour

ну и Программирование: принципы и практика использования C++ (последнейшие на момент тобою изучения)(от Страуструпа)

qulinxao ★★☆
()
Ответ на: комментарий от peregrine

херасе. ну раз гений высказался, то все срочно на сисярп

anonymous
()
Ответ на: комментарий от peregrine

Может тогда F#? Ничего более лаконичного не использовал. Что ещё лаконичнее? Может, лисп или хаскель? Не знаю.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от asaw

как раз без основ лучше к С++ не приближаться даже. а то потом нахватаются верхов и не знают банальную семантику указателей. и потом на форумах начинают задавать глупые вопросы. а всё потому, что чтобы научиться бегать, надо сначала научиться ходить. и всё начинается с простых вещей. С для этой цели служит просто отлично.
а Кнут нужен для того, чтобы человек стал программистом, а не кодером. без Кнута возможен лишь кодер, в режиме «индус».

Iron_Bug ★★★★★
()
Ответ на: комментарий от asaw

Если цель выучить C++, то про C лучше вообще ничего не знать и не читать.

Война - это мир, свобода - это рабство, незнание - сила.

curufinwe ★★★★★
()
Ответ на: комментарий от Iron_Bug

а то потом нахватаются верхов и не знают банальную семантику указателей. и потом на форумах начинают задавать глупые вопросы.

чтобы их не было, нужно знакомиться с ассемблером) вообще, я рекомендую всем (именно всем, а не только, там, чайникам или секретаршам) вот эту книгу: http://old.computerra.ru/offline/2001/410/12378/

asaw ★★★★★
()
Ответ на: комментарий от asaw

ну, про общие вопросы и историю развития программирования и комбинаторики, конечно, почитать можно, но это не добавит практических навыков. ассемблеры слишком разные, чтобы с них можно было начинать изучение программирования. хотя мне в своё время изучение ассемблера ничуть не повредило. было интересно. опять же, тогда и архитектура была 80286 максимум и всё было относительно просто. сейчас в новых процессорах слишком много специфики. я по работе редко использую ассемблеры. просто обычно не приходится работать на столь низком уровне. хотя иногда приходилось сталкиваться, были баги в компиляторах на микроконтроллерах и приходилось их обходить ассемблерными вставками. но это, скорее, исключение, чем правило.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

ну, про общие вопросы и историю развития программирования и комбинаторики, конечно, почитать можно, но это не добавит практических навыков.

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

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 2)
Ответ на: комментарий от asaw

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

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

asaw ★★★★★
()

Не стоит к нему прикасаться вообще - порог вхождения высок, тяжело писать, сопровождать и дебажить код. И не слушай криков местных ископаемых, они еще лет 20 будут советовать паскаль. Смотри в сторону Java/Go/Python в зависимости от области применения.

Deleted
()
Ответ на: комментарий от asaw

секретаршам она нужна, чтобы формы поддерживать, таская с собой увесистый фолиант. а вот программистам - для понимания.

Iron_Bug ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.