Стоит ли учить программировать по старинке?

Учусь в школе в 10 классе, на физ-мат направлении с профильной информатикой учат нас языку C. Так вот у меня созрел вопрос если я захочу связать жизнь с программированием, нужен ли мне этот опыт, просто наши преподаватели учат нас так, как учили их, а это было ой как давно. Ну например почему плохо что переменная счётчика цикла for, объявляется внутри него, а не в начале main ()? И ещё актуален ли Си как язык программирования в 21 веке, или даже ОС пишут на чем-нибудь повыше? Я конечно понимаю что секс с указателями развивает мозг, а понимание базовых структур данных просто необходимо, но не выработую ли я вредные привычки, связанные с постоянным слежением за памятью, не помешает ли мне то, что я часто использую конструкции вида " указатель на указатель" (например при работе со связанными списками), ведь это сильно снижает понимаемость кода.
P.S. Начал изучать плюсы, для того чтобы вникнуть в ООП т.к. они кажутся мне самым естественным следствием из Си с объектами. Не заблужаюсь ли я в своём начинании, не нужно ли мне сразу учить что-то типа java?
P.S.S Насамом деле такое программирование кажется мне достаточно интересным, вообще требуются ли рынку C/C++ специалисты?
  • Вопрос задан
  • 2647 просмотров
Пригласить эксперта
Ответы на вопрос 15
но не выработую ли я вредные привычки, связанные с постоянным слежением за памятью

Мда. "Если ваша программа потребляет всего лишь на 50% больше памяти, чем ей нужно, это не так уж и плохо".

"Мне противно, как часто программа обучения строится на посылке, что Java представляет собой хороший язык для того, чтобы начинать программировать, потому что это так "просто" и не нужно отвлекаться на эти скучные детали про строки и выделение памяти, и сразу можно изучить кульные ООП-штучки которые помогут сделать ваши большие программы так восхитительно модульными. Это педагогический провал. Поколения выпускников снисходят на нас, раскидывая алгоритмы маляра Шлемиэля налево и направо, даже не понимая этого, поскольку у них нет представления о том, что строки на нижнем уровне сложны, даже если из их перлового скрипта этого не видно. Если хочешь научить кого-то хорошо, надо начинать с основ." (с) Джоель Спольски
Ответ написан
Комментировать
mrusklon
@mrusklon
Не получается? Яростно гугли!
я когда в школе учился , у меня на информатике учили ms офису... как же я вам завидую
Ответ написан
@evgeniy_lm
1. В программировании язык ни какого значения не имеет.
2. Язык СИ был разработан для переноса кода ОС UNIX на различные аппаратные платформы. Короче, пока будет существовать программирование будет существовать язык СИ и его потомок С++.
3. Обучение программированию может осуществляться единственным способом - чтение книг.
4. Сначала научись писать программы, а потом ты с удивлением обнаружишь, что знаешь все языки программирования
Ответ написан
@red-barbarian
Есть старая мудрость "чем лучше человек знает с, тем труднее ему будет перейти на с++" )))
Объясню, если считать с++ улучшенным с, то проблем нет.
Трудности возникают из-за того, что есть две (+) парадигмы программирования "процедурное" и ооп. Это скорее способ мышления. Мыслить модель которую описываешь как некий алгоритм и данные или как взаимосвязь и взаимодействие объектов. Так вот чем больше привыкаешь к одному мышлению, тем труднее учиться другому.
сам С направлен на описание системы как данные и процедуры(функции) над ими. Он имеет сейчас свою сферу применения. Контроллеры, драйверы и проч. Также процедурное программирование полезно в разработках алгоритмов.
Но сейчас рынок захвачен ооп. Т.е. обычные программист это ооп программист.

Думаю нужно понимать это. Понимать как язык влияет на мышление.
И будет вам счастье)))
Ответ написан
Комментировать
Rou1997
@Rou1997
плохо что переменная счётчика цикла for, объявляется внутри него

Бред, уже давно почти везде объявляют внутри.

И ещё актуален ли Си как язык программирования в 21 веке, или даже ОС пишут на чем-нибудь повыше?

И то, и другое.

конечно понимаю что секс с указателями развивает мозг

Развивает лишь одну из характеристик мозга.

но не выработую ли я вредные привычки

Не переживайте, деятельность преподавателей как правило просто бесполезна, они ничтожны и на вас никак не влияют, ни положительно, ни отрицательно.

не помешает ли мне
ведь это сильно снижает понимаемость кода.
не нужно ли мне сразу учить что-то типа java?

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

вообще требуются ли рынку C/C++ специалисты?

Этим вопросом нужно заняться гораздо серьезное, а так примитивно и не ответить.
Ответ написан
Комментировать
Neznayka1979
@Neznayka1979
Интересы - IT, психология...
Роботизация производства, торговых площадок, авто/авио... идёт и будет идти полным ходом.
И нужны будут специалисты для написания программ, ИБшники и т.д.
Яп С (Си) один из основных яп, который используется и будет использоваться ещё очень долго для функционирования всего выше перечисленного и не только этого...
Насчёт того, что вас мучают сомнения "учат по старинке", то тут выход простой купите книжку например:
«Язык программирования Си. Лекции и упражнения» Стивен Прата
Осваивайте С по данной книжке и заодно параллельно осваивайте англ. яз. + алгоритмы + базы данных +...
Ответ написан
Комментировать
@abcd0x00
И ещё актуален ли Си как язык программирования в 21 веке, или даже ОС пишут на чем-нибудь повыше?

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

Да там много всяких действий надо делать. Основной принцип: если ты что-то сделал второй раз, напиши скрипт, который будет делать это в следующий раз. Так вот, для таких дейсвий C не подойдёт, потому что он под это не заточен, нужен специальный язык. В итоге у тебя сам проект на C, куски кода для проекта генерирует скрипт на shell'е, тестирование проекта выполняется скриптом на питоне. А потом тебе, например, надо сгенерировать набор подобных скриптов для любого нового проекта - и ты на shell'е пишешь скрипт, который создаёт shell-скрипты, python-скрипты и базовый исходник на C. Написать программу на C, которая создаёт исходники на C для написания другой программы, - милое дело, а может и несколько программ написать.

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

У меня вообще первые программы были на QBasic'е, и они делали своё дело - добывали мне текстовые данные из бинарников, которые я брал из программы одной. Но это было давно, но я до сих пор помню, сколько я данных ими добыл. Вот для чего нужны программы. У тебя их никто не будет покупать, ты их делаешь для того, чтобы они работали и давали результат, который вручную не получишь, потому что это долго или невозможно вообще (100 часов надо).
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
С/С++ актуален, у этого семейства огромнейшая экосистема.
На счет привычек: не всегда но часто стоит написать более медленный и простой для чтения код, чем быстрый но нечитаемый.
На счет правильности начала с крестов: у каждого языка своя реализация того же ооп и выучив один язык вы будете считать ооп именно этого языка самым правильным, но на самом деле вы будете работоать только с реализацией того же ооп, а не обобщенными принципами. У того же golang отсутсвует наследование но есть агрегация и встраивания, есть еще прототипное ооп как в js...
Ответ написан
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
C/C++ даёт хорошее понимание основ, но в любом случае, если собираетесь связать жизнь с программированием, потом будете пробовать учить не один язык и выберите то, что вам по душе/за что вам будут платить
Ответ написан
@McBernar
А у нас в школе был Бейсик.
И я никак не мог понять из вашего вопроса — при чем здесь школа и C?

В общем, вам очень повезло.
Ответ написан
Комментировать
lxsmkv
@lxsmkv
Test automation engineer
количество программистов на Си уменьшается, скоро будет с ними так же как и с программистами мейфреимов на COBOL, их днем с огнем не найти, и стоят они очень дорого. Но и мест таких мало. Поэтому нужно к знаниям си, добавить еще пару популярных языков, просто для того чтобы на рынке труда попасть в 80% требований.
А для Си как я слышал есть библиотека boost которая сильно помогает.
Ответ написан
Комментировать
nki
@nki
bezkart.ru готовая система лояльности
Я конечно понимаю что секс с указателями развивает мозг

выработую ли я вредные привычки, связанные с постоянным слежением за памятью

я часто использую конструкции вида " указатель на указатель"

Займись 1С и ты увидишь, что можно жить без всего этого.
Ответ написан
Комментировать
@Sh0ttky
1) ООП - это АБСТРАКЦИЯ, и сказать что в С++ есть ООП, а в си нет - это некорректно. Всё равно, что сказать, что в c++ есть кнопки, а в си нет. Посмотрите код любого хорошего проекта, и увидите огромное кол-во ООП.
2) актуален ли си сегодня? Однозначно да. Но нужно знать и С++. Точно так же С++снику обязательно нужно знать си. Сегодня вакансии именно такие.
Ответ написан
Комментировать
Dit81
@Dit81
Security researcher, pentester, internet-marketer
Смотрите потом в сторону многоплатформенной QT или на перспективу ЯП Python... Думаю С может потом и не пригодится...
Ответ написан
Комментировать
@potan
Функциональный программист
Ну например почему плохо что переменная счётчика цикла for, объявляется внутри него, а не в начале main ()?

Именно так и учат, а не наоборот? Хорошо делать время жизни переменных как можно меньше - это и делает программу понятнее человеку, и упрощает оптимизацию компилятору. То есть переменную лучше объявлять именно в цикле.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы