Рассказ про прогу для младшекуров
Тут я на правах старого умного перд... старшекурсника расскажу своё видение насчёт проги. Мой путь в проге, разницу в Си и Питоне и тыры-пыры
Питон и разработка VS С и счётная прога. ВАЖНАЯ РАЗНИЦА, КОТОРУЮ СЛЕДУЕТ УЯСНИТЬ
Разработка - это Вк, Гугл, Яндекс и все-все-все. Их цель - написать приложение, игру для людей. На первом плане - удобство пользования.
Вы будете пользоваться чужим кодом, а другие - вашим. Поэтому фен-шуй - форматирование, удаление указателей - обязателен.
Тут же объектно-ориентированное программирование.
А счётная прога - это научка. На первом месте - быстродействие программы любой ценой.
Скорее всего, вашим кодом никто пользоваться не будет, кроме вас и вашего научника. Поэтому фен-шуй идёт нафиг. Лишь бы работало.
А что по языкам? Программы на Питоне пишутся легче, быстрей и код там читаем. Но исполняются дольше, чем на С.
Поэтому кесарю кесарево, а слесарю слесарево.
Нужно вам написать численную схему, решётку в квантовых системах? Подрубаем С. А ещё лучше С на Линуксе, потому что Виндоус часть мощностей расходует не туда, в отличие от Линукса.
Вам нужно написать какой-нибудь парсер, бот Вк или что-то подобное? Выбирайте Питон, там есть все необходимые библиотеки.
Поэтому 100500 видео на Ютубе "я считаю, что С бесполезен, когда есть мой любимый Питон" полностью бессмысленны. Автор этих разраб, и о численном счёте ни бум-бум.
Вот у меня прямо сейчас (когда я пишу эти строки) пишется парсер на Питоне, и одновременно крутится счётная программа на С по научке )
На всякий случай - на Паскале, который мы все учили в школе, никто всерьёз не пишет. Не потому что, "чё я лох, писать на языке школьников". Просто потому, что в нём мало возможностей. Ребята-младшекуры, простите за то, что я обидел язык, с которым у вас связаны тёплые школьные воспоминания. Мне на 1 курсе, когда мне сказали это же, тоже было обидно. Се ля ви!
И нейронки на Питоне?
Есть книга Тима Джонса по нейронкам. Так вот, он там предлагает их писать на С. Книжка хорошая, я её рекомендую - для общего развития, просто хотя бы понять алгоритмы.
Но Питон именно для нейросетей лучше. Да, вы проиграете в скорости, но выиграете в написании программе - на Питоне есть библиотеки keras и tensorflow для нейростеей, где за вас уже написали все вспомогательные функции.
ООП в научке не используется?
Лично мне не доводилось. А вот моему одногруппнику из Дубны - приходилось. Он занимается обработкой экспериментальных данных с детекторов, и для он пишет методы. Ну и это оформляет красиво в виде класса, чтобы этим могли пользоваться его коллеги, которым данные также приходят.
Назови 3 отличия Питона от С
1. Нет точек с запятой. Вместо этого для разделения команд отступы. Питон заставит вас писать код красиво, иначе он не будет работать. А в С вы можете ставить Enterы и отступы где вам хочется, лишь бы ";" ставили.
2. Вы можете не объявлять тип переменной, Питон сам догадывается - int, double или char.
Это, кстати, превращается в проблему, если вам нужен какой-нибудь long double.
3. Если в С код сначала компилируется, а затем исполняется, то в Питоне он построчно исполняется. Т.е. вы можете допустить синтаксическую ошибку в 20-й строчке - Питон исполнил первые 19, лишь потом выведя "ты дурак?" С же выдаст "Ты дурак?" сразу.
А я слышал, что Питон хорош своими графиками!
О да! Поэтому в них кайфово обрабатывать праки. На ГП была методичка от меня на эту тему.
С стоить графики не умеет. Есть такой язык - надстройка над С, как Root. Вообще он разрабатывался CERNом для собственных нужд - визуализации данных, но вы можете использовать его, даже не будущи ядерком. Если выучите, конечно :)
Я Root не знаю, поэтому вручную копирую данные из С в Питон, чтобы затем из них построить графикю
Стоит ли мне учиться проге?
Навряд ли могу сказать, стоит ли ТЕБЕ учиться проге. Но скажу, что во многих IT-компаниях помимо разработки есть должность аналитика. Погуглите, например, Glowbyte или Avenix. Это консалтинговые компании, в них много IT и разработки. Но много и аналитики, где надо думать, а не писать код.
Для кого-то проще писать код по образцу и получать удовольствие от "оно работает", а для кого-то общение с компьютером - это скука смертная, зато смекалочка русская работает что надо.
Но вот только спрос на разрабов колоссальный и колоссально также предложение. Инет просто завален вакансиями разрабов и ещё в большей степени - курсами "стань разработчиком!". Аналитикам в этом плане сложнее, но они умные ребята и понимают, как пробиваться :) Я сам скорее аналитик.
Как мне учиться проге?
Навряд ли могу сказать, как ТЕБЕ учиться проге. Расскажу про свой жизненный опыт. Он показал, что учить прогу можно только по тем задачам, которые имеют для тебя практический интерес. Типа "на внешней работе попросили написать такой-то парсер для такого-то".
А все курсы - от бесплатных МФК до платных по проге - не то что бесполезны, но подходят не всем. Потому что это рутина, цель которой - сдать непонятно что непонятно кому только для отчётности.
Помнится, летом после 1 курса я решил выучить нейронки (тогда ещё С). Посмотрел, что-то даже пописал, а потом забросил.
А следующим летом, т.е. после 2 курса я решил выучить питон. Выучил только то, что мне нужно - построение графиков, а остальное не вышло. Нет цели - нет прогресса. А учить прогу ради проги - путь вникуда.
А вот сейчас (8-й семестр) мне потребовалось написать парсер и я узнал много нового и интересного.
А перед этим пришлось чутка выучить html, чтобы создать этот сайт.
Так что сначала цель, а потом знания. Правда, нужна база. Но мне повезло с препом по проге на 1-м курсе. Дергачёв Александр Александрович лучший!
А где мне кодить? В каких средах программирования?
Для С однозначно рекомендуются скачать CodeBlocks и прогать там.
Для Питона - PyCharm.
CodeBlocks невероятно прост в использовании, в отличие от тяжёлой Visual Studio Code.
А PyCharm позволяет отслеживать значения переменных в процессе дебага.
Это всё очень субъективно. Мой знакомый всё пишет в Visual Studio Code и ему норм.
ООП – это специфика именно С++?
Нет, ООП есть и на Питоне. Там оно даже понятней. Разберём, как оно устроено и зачем оно нужно.
Питон, как известно, славится своими библиотеками:
Matplotlib (сокращённо plt) позволяет строить графики
Numpy (сокращённо np) упрощает работу с массивами
Pandas (сокращённо pd или df) упрощает работу с датафреймами – таблицами.
Посмотрим, как работает ООП в Питоне:
plt.plot(…)
Это команда, которая строит график. На самом деле это чистой воды ООП: класс plt, его метод plot.
В С++ аналогичным образом работает оператор четырёхточия:
Iostream::cin – это конструктор «создай поток ввода класса iostream. Только в С++ для пользовательских классов используется точка ., а для внешних – четырёхточие ::. Наверняка оно уже достало читателя тем, что приходится ради него постоянно переключаться на русскую накладку. Собственно, поэтому автор и пишет всё на С, а не на С++. Ну или же магическая фраза «using namespace std».
Я сел писать курсач (или что угодно, где у вас нет строгого препа «пиши обязательно через это!) и решил, что стоит создать свой класс…
Не надо так делать. Почему?
Возможно, вы слышали от преподавателей термин «инкапсуляция». Он означает, что:
1) Другие пользователи не могли иметь возможность узнать «подноготную» класса
2) Но вы как разработчик должны предусмотреть методы для всего того, что может захотеть пользователь.
Например (быстро перенесёмся в Питон) нам неинтересно, какая подноготная matplotlib, как она на самом деле строит графики. Но
Если вы поняли, что у вас есть некий сложный тип, к которому вы хотите написать несколько функций – да, это заявка на ООП. Но совсем не обязательно для этого писать класс! Есть такая вещь, как структуры – structures. Она есть и в С (а не только в С++). Это тот же класс, но без всяких там фишек с приватностью, что вы не можете обращаться к «внутренностям» класса без методов. Вы же пишете код только для себя – не планируете его куда-то там выкладывать на Гитхабе и т.д.? Тогда зачем вам страдать с приватностью?
Два типа программ
А) для себя (и, может быть, научника)
Б) для других
И к ним совершенно разные требования. В программах типа А) НИКОГДА НЕ ЗАНИМАЙТЕСЬ ОЧИЩЕНИЕМ ДИНАМИЧЕСКОЙ ПАМЯТИ.
Вот эти вот free(…), деструкторы классов и прочие.
Многие преподы говорят: «да как вы смеете, динамическая память забьётся!» Да не забьётся она, динамическая память очищается автоматически после завершения работы программы.
Free нужны, если вы планируете выложить код куда-нибудь, чтобы вашим классом пользовались. Или вы, закончив ФФ, устроились в разработку и пишите классы. Вот там да, free(…) нужен – а то найдётся пользователь, который запихнёт ваш класс в 10 циклов и будет удивляться Segmentaion fault или Stack Overflown.
Преподаватели, требующие free, делают это с единственной целью: убедиться, что вы знаете о существовании free и деструкторов.
Единственное, зачем нужно следить за программами типа а) – за закрытием файлов (.txt и других), если вы с ними работаете. Потому что не закрыли файл – там не сохранились данные.
Три файла в ООП
Кстати, коли речь зашла о файлах. От вас наверняка требуют оформлять класс в двух файлах: заголовочном .h и исполнительном .c (а использовать так вообще в третьем). Это остаток тех времён, когда компиляторы были слабыми и маломощными – разделение на несколько файлов, где в одном указаны заголовки методов, в другом коды.
Сейчас компиляторы уже мощные и без проблем всё скомпилируют, если всё в одном файле. Так что если вы пишите программу не для препода, который требует структуру «как в восьмидесятых» - можете всё в одном файле писать.
Более того, я настоятельно рекомендую писать программы в одном файле (я про файлы с кодом, а не про подключаемые файлы .txt с данными). Так проще и понятней – в моей практике пока ни разу разбивать код по нескольким файлам не пригождалось.