TGINSIGHT CHAT
Программирование для гуманитариев
@it_human
КарьераЛичный опыт того, как скипнуть в IT с гуманитарным образованием. Что для этого делать, чего стоит бояться (спойлер: ничего!) и чего ожидать. Рассею мифы о программировании и мире IT. Бот для вопросов об IT: @hum_it_bot
Последние посты
Стр. 39 из 54 · 646 постов
#вашивопросы Вопрос: когда человек изучает свой первый язык программирования, может ли оказаться так, что он технически не готов его изучать дальше: нет подходящей операционки, мощностей компьютера, еще каких-то вещей, которые новичок не подготовил? Если у вас есть компьютер (стационарный или ноутбук), даже старенький - этого хватит. Вы же собрались задачки по программированию решать, а не крипту майнить, верно? Добрый день, мне 50 лет,так, к разговору,подскажите, что можно изучить в lt сфере, возможно для подработки, для начала В этом вопросе меня смущает пункт про подработку - работа в IT в первое время, пока это всё в новинку, требует полного рабочего дня - это не вариант для необременительной подработки, там нужно будет во всё хорошо вникать. Если я правильно поняла ваш запрос, вас интересует что-то полегче для начала, поэтому я бы вам рекомендовала рассмотреть профессию тестировщика - тут обучающие курсы по тестированию от гикбрейнс, а тут от skillfactory. Основные направления для развития именно в сфере IT (по ссылкам примеры курсов по этим направлениям): - Программирование (например, можно научиться делать веб-сайты) - Аналитика данных Также есть профессии на стыке IT и маркетинга, например: - Продуктовая аналитика - Веб-аналитика - UX-аналитика и другие В IT также востребованы дизайнеры: - Веб-дизайнеры - Дизайнеры интерфейсов Также есть менеджерские профессии и ещё много разного. Задать вопрос автору блога можно здесь: @hum_it_bot
Hashtags
#вашивопросы Зачем программисту работать фиксированные часы в день? Сказывается ли фиксированный график на качестве? В целом, фиксированный график не у всех, кто-то, особенно на фрилансе, может работать хоть по ночам. Но смысл работать в определенные часы тоже есть. Например, не все программисты занимаются только написанием кода. Те, кто работает в парадигме DevOps - часто еще отвечает за то, чтобы всё работало как нужно - это значит, нужно мониторить сервисы, и в случае аварий или неполадок (в том числе жалоб от пользователей) - быстро решать возникающие проблемы. Почему тут важны фиксированные часы работы? Представьте, например, банковское приложение. Когда его использует большинство пользователей? - Естественно в рабочие часы, а не в 3 часа ночи. Поэтому важно, чтобы люди были у монитора именно в дневное время, и в случае проблемы быстро вмешались. Второе - это коммуникации. Сейчас популярна идеология Agile, и вопросы разработки всё больше принимаются в процессе обсуждений, а не в виде указов на бумаге. Обсуждения, естественно, происходят днём - попробуйте уговорите менеджеров (особенно топ-менеджеров компании), аналитиков, маркетологов, да и остальных разработчиков собраться в zoom в три часа ночи? Многие ли из них согласятся? Существует подход, при котором программист просто получает ТЗ и уходит его реализовывать - хоть ночью, хоть днём. Но это звучит как-то очень идеалистично, программист как будто просто автомат, в который можно засунуть бумажку с ТЗ и на выходе получить продукт. Полностью детализированные задачи получают в основном junior-разработчики, и то не всегда. Чем вы выше по статусу, тем большего вклада от вас ждут в продумывание проекта, а не только в его реализацию по готовому «рецепту». ТЗ вообще пишут не везде и бывает, что решения о том, что разрабатывать и как разрабатывать принимаются на лету в ходе обсуждений. Но даже если ТЗ в компании принято писать, перед тем как его написать, надо многое обсудить. С менеджерами решаете, какой именно продукт и в какие сроки нужно реализовать, уточняете все требования и особенности. С другими программистами обсуждаете архитектуру будущего проекта - как именно его написать, какой стэк использовать, кто за какой компонент отвечает и так далее. Вот эти все обсуждения как раз происходят в плюс-минус фиксированные часы. А как сказывается график работы на производительности, я сказать точно не могу. Могу только сказать, что, согласно медицинским исследованиям, работа в ночное время суток может спровоцировать диабет и другие очень серьезные проблемы со здоровьем. Задать вопрос автору блога можно здесь: @hum_it_bot
Hashtags
Опубликован 14 окт.
Когда сложно и непонятно Когда я читаю статьи по новым для меня темам, например, про фондовый рынок, то бывает, в процессе посещает это чувство: «что-то сложновато». И в результате стараешься побыстрее проскочить, например, раздел про фьючерсы или опционы (это что-то слишком сложное, не хочу не буду). Но в глубине души я понимаю, что если остановиться и неспеша разобраться с этими инструментами, ничего принципиально сложного и непонятного в них не будет - просто нужно время, чтобы вникнуть и разложить в голове все по полочкам. Примерно так же это работает в любом обучении. Например, во время изучения программирования вы ловите себя на ощущении, что тема слишком сложная, непонятная, неохота в неё вникать, лучше побыстрее проскочить, а там как пойдёт. Лектор рассказывает про устройство памяти программы, про хип и стэк, и вам всё это непонятно, и вы думаете - да ну его, зачем мне это. Но с таким подходом вы будете только накапливать снежный ком непонимания и сложностей. Лучше сделать наоборот - остановиться и замедлиться, пока не добьётесь хорошего понимания темы. Всё сложное раскладывается на очень простые винтики, если сесть, вникнуть в детали и разобраться, как оно устроено. Сложным и непонятным всё это выглядит, если слишком спешить и слишком скакать по верхам, ни во что не вникая глубоко. Будущим айтишникам нужно воспитывать в себе въедливость и внимание к деталям. Если в лекции или в учебнике слишком сложное объяснение, поищите в Интернете более простое - наверняка, где-нибудь на хабре есть статья, где этот вопрос раскладывается по полочкам, а на stackoverflow уже кто-то задавал похожий вопрос, где-нибудь есть наглядные объяснения с примерами и картинками, а может, даже с видео. Можно рисовать схемы на бумаге для себя, можно экспериментировать с кодом, дабы проработать примеры, можно, наконец, попросить знакомого разъяснить непонятный материал, или даже нанять себе репетитора. Если учебное задание не получается выполнить быстро и на ходу, выделите на него больше времени и выполняйте его неспеша. Значит, степени вашего погружения в задачу на этом этапе уже недостаточно и нужно копать глубже. Главное - вопросов и неясностей не должно оставаться. Программист - это инженер, а не волшебник из Хогвартса. Он проектирует приложения из понятных и простых блоков, а не взмахом волшебной палочки делает какую-то магию, и всё начинает работать само, и непонятно как…
#вашивопросы Вчера я отвечала на вопрос по NLP (обработке естественных языков), сегодня небольшой апдейт: нашла у гикбрейнс целый факультет, посвященный NLP с трудоустройством. Я по специальности врач, последние шесть лет занимаюсь анализом медицинских данных. Есть сертификат от СибГМУ по медицинской статистике. Фактически, осуществляю полный цикл анализа. Хочется развиваться дальше. Есть ли на слуху курсы, где анализ именно медицинских данных преподают? В смысле, данными банков, рекламы и т.д. я бы не хотел заниматься С автором вопроса мы общались некоторое время назад, и тогда я советовала идти на любые курсы по анализу данных или data science. Но сейчас появился вариант в точности под такой запрос: Data Science в медицине, тоже от гикбрейнс, тут даже обещают 6 месяцев обучения в подарок. Вы когда всякие онлайн-курсы проходили раньше, конспектировали что-то в тетрадь? или это только трата времени? Не знаю, трата времени это или нет, но я ничего не конспектировала. Когда начала увлекаться курсерой, там некоторые преподаватели так и говорили: не тратьте время на конспектирование, вы от этого хуже слушаете, а краткое содержание каждой лекции и слайды можно скачать после урока. С тех пор я отказалась от университетсткой привычки писать конспекты. На IT-конференциях могу разве что записать для себя незнакомый термин (чтобы потом погуглить) или название новой для меня технологии - чтобы из головы не вылетело. Что вы можете посоветовать юристу в IT? Я подумываю переехать на ПМЖ в другую страну. Работу по специальности в другой стране найти очень трудно, практически невозможно. Смотрел много роликов в Ютюб, как наши сограждане работают в ИТ сфере удаленно из других стран. Что-то специфическое именно для юриста в голову не приходит, так что могу посоветовать изучать то же, что и всем остальным: либо программирование, либо data science, из более простых вариантов - qa (тестирование). По поводу эмиграции и удаленки у меня есть подозрение, что с нуля искать работу сразу на удалёнке сложновато, проще сначала отучиться, потом поработать junior-ом в офисе, скажем, год, а потом уже, приобретя опыт, идти во фриланс. И устроиться джуном в офис, думаю, проще будет в России, а не за рубежом. Задать вопрос автору блога можно здесь: @hum_it_bot
Hashtags
#вашивопросы Подскажи пожалуйста , я инженер в сфере электроники , в какую сферу Айти можно пойти , чтоб совместить мой прошлый опыт ? Есть ряд профессий на стыке программирования и микроэлектроники - скажем, в разработке микроконтроллеров, встраиваемых систем, умного дома, робототехники и прочих интерфейсов между «железом» и пользователем. Обычно такие профессии идут под кодовым названием «Инженер-программист». Я самостоятельно изучаю NLP и анализ данных на Python. Быть может, вы можете подсказать полезные ресурсы/маршрут изучения данной области. Раз вы увлекаетесь natural language processing и анализом данных, значит вы уже стали на путь data science, и тут я могу рекомендовать развиваться дальше в этом направлении, не ограничиваясь одним только анализом данных. - В этом посте я собрала список книг по data science для начинающих. - А в этом - некоторые варианты платных курсов по специализации Data Scientist. - Атут - варианты курсов по математике в необходимом для дата-саенс объёме. Но если вы хотите ограничиться аналитикой данных, на этом направлении специализируются, в частности Skillfactory, можно рассмотреть такие варианты курсов: - Курс по аналитике данных - Python для анализа данных А бесплатные курсы, как и по любым другим предметам, можно найти на coursera, stepik, edx и на других похожих онлайн-платформах. Задать вопрос автору блога можно здесь: @hum_it_bot
Hashtags
#вашивопросы Какие языки программирования будут наиболее востребованны в будущем? Ну, в предсказании далёкого будущего я не эксперт, а в ближайшем будущем, полагаю те же, что наиболее популярны сейчас, то есть Java, Python и Javacript для фронта. C++ - это неустаревающая классика. C# - актуален для разработки под Microsoft и игр на платформе Unity. Go и Kotlin - модные новинки, но насколько они завоюют тотальную популярность, пока непонятно. Расскажи подробней о специальностях которые не только с компами , а про менеджмент в сфере it Менеджерские и околоменеджерские профессии и их названия отличаются от компании к компании в зависимости от оргструктуры. Бывают, например, функциональные менеджеры - по сути это синоним слову «начальник» - например, рукводители группы, отдела или подразделения. Обычно такие начальники вырастают из айтишников, но чем выше должность, тем меньше в их работе технических задач, и больше управленческих задач, коммуникаций, совещаний и тому подобного. Их цель - наладить рабочие процессы внутри группы/отдела/подразделения. Они должны составлять план работ для своего отдела (группы или подразделения) - с учетом указов от еще более высоких начальников, распределять эти задачи между своими подчиненными и обеспечить их выполнение. Также они несут ответственность за найм новых сотрудников, за мотивацию подчиненных, за их обучение и развитие в рамках компании, за увольнение профнепригодных сотрудников и так далее - в общем, это классический руководитель. Самая низшая ступень такого менеджера - это руководитель группы или тимлид - обычно это программист с некоторым «довеском» из менеджерской работы, который несет ответственность за работу всей группы. Бывают аналитики/менеджеры, которые отвечают за четкую постановку задач для айтишников и за написание детализированного ТЗ. По сути это прослойка между айтишниками и не-айтишниками внутри компании, их задача - получить задачу от бизнеса, и перевести её в максимально конкретизированный вариант, перевести на «айтишный язык». И, опять-таки, не во всех компаниях вообще пишут ТЗ, сейчас модно работать по agile, и сводить к минимуму бумажную работу, увеличивая роль живого общения. Бывают продакт-менеджеры - их работа заключается в формировании облика продукта, за который они отвечают. Им нужно придумать, как должен выглядеть продукт, так чтобы он был максимально востребованным среди пользователей и принёс хорошую прибыль. Ему нужно и собрать пожелания к продукту (например, у потенциальных клиентов, заказчиков и у топ-менежеров своей компании), из них сформировать требования, и план развития продукта. Если пожелания прямых заказчиков и начальников расходятся с его видением, ему также нужно уметь аргументированно убеждать всех их, что выгоднее сделать продукт так, как он предлагает. В общем, работа состоит из бесконечной коммуникации, генерирования идей, их проверки и отбора лучших - вплоть до принятия конечного решения, куда должен развиваться продукт. Это включает в том числе и коммуникацию с разработчиками и другими конечными исполнителями задачи. Проджект-менеджер отвечает за реализацию проекта. Ему нужно разработать план проекта, учесть все необходимые ресурсы для его выполнения и обеспечить коммуникацию между всеми звеньями - разработчиками, дизайнерами, тестировщиками и заказчиками. Если во время проекта возникают какие-то проблемы и задержки - его задача разрулить всё это. Он отвечает за то, чтобы уложиться в сроки и бюджет, и за конечный результат. Но лично моё мнение, что все эти понятия достаточно расплывчаты и варьируются от компании к компании. Есть еще и разные схемы agile - где есть определенных набор ролей для любой команды с четко прописанными полномочиями, и там нет традиционных менеджеров, но есть, например - продакт-оунеры со схожим функционалом. Задать вопрос автору блога можно здесь: @hum_it_bot
Hashtags
#вашивопросы Расскажи пожалуйста, как "набрать опыт" типа "5 живых проектов", про которые пишут, например, в вакансиях на питониста. То есть... Ну вот освоил я азы пайтона, разбираюсь с Джанго, - но практического опыта просто негде набраться. Разве меня такого красивого пригласят на работу без хотя бы какого то опыта? Вы разбираетесь с пайтоном и джанго - значит, ваш стэк сейчас - разработка сайтов на Python и django. Значит, вам нужно придумать и сделать 5 разных сайтов на любую тему - подумайте, какие сайты могли бы быть полезны/интересны лично вам или друзьям/родственникам и так далее. Можно (и даже лучше) их запустить в Интернете, чтобы показывать потом работодателям в качестве портфолио. Но может хватить и кода, загруженного на github. Без какого-либо опыта на работу тоже могут взять, но с готовым портфолио вы будете смотреться более выигрышно. Стоит ли начинающему программисту идти в первую компанию, в которую взяли, даже если условия там не самые хорошие? Ведь найти работу без опыта трудно и надо брать то, что есть, а, имея опыт, можно пойти в компанию получше. Если сомневаетесь, сходите еще на несколько собеседований - может, появятся более привлекательные варианты. А вообще для новичка главное - набраться опыта и стать востребованным на рынке специалистом, так что если у вас в наличии только одно предложение, где платить будут копейки, но там вы вырастете в более зрелого специалиста - то, я думаю, это вполне разумный вариант. Вопрос по курс cs50. Его стоит просто смотреть на ютуб или надо прям находить задачники и т д? К примеру, вы хотите научиться шить одежду. Сможете ли вы профессионально шить одежду, если будете просто смотреть видео про шитье на ютюбе? С программированием так же. В любых курсах, как правило, есть теоретическая часть (в виде лекций или текста), а есть практические задания. Конкретно в cs50 много всего сделано для вашего удобства при выполнении заданий: у них там есть своя виртуальная машина, в которой всё уже настроено для разработки проектов, есть свои библиотеки, которые там нужно использовать - остаётся всё это скачать, запустить и следовать инструкциям. А что значит «находить задачники» я не очень поняла, у них же там есть разделы с заданиями - заходите на сайт курса (он есть на платфомре edx), а не просто в ютюб. А что можете посоветовать на стыке с++ и математики? И как думаете, сколько должен получать программист с++ в Москве, уровня между джуном и миддлом? Есть такая профессия, программист-математик - там обычно как раз и требуется знание C++ и математики. Такие ребята разрабатывают, к примеру, алгоритмы, математические модели, компьютерную графику, разные низкоуровневые штуки и в принципе многое другое, где требуется математика. Посмотреть примеры таких вакансий можете на том же hh - вбейте в поиск «математика c++» - и там можно почитать, для каких конкретно проектов нужны такие специалисты. Что касается зарплаты - от компании к компании разброс большой, и тут я могу пальцем в небо попасть, но думаю, что зарплата junior-а где-то в диапазоне 60-80-100 тысяч рублей. Задать вопрос автору блога можно здесь: @hum_it_bot
Hashtags
#мнения_подписчиков В дополнение к вопросу о математике в Python. Это необязательно, однако всё же желательно по той простой причине, что алгоритмы сплошь и рядом требуют понимания алгебраических функций, а в некоторых случаях математический анализ позволяет работать с большим количеством данных (в статистических целях, а также допустим расчёт местоположения и пр.). Мнение о том, что всем программистам лучше хорошо знать математику имеет право на существование, но я могу согласиться с ним только частично и с некоторыми оговорками. У меня на эту тему уже был пост - да, в некоторых областях математика нужна. Но, скажем, в веб-разработке и подобных популярных направлениях - не особенно. Вряд ли умение находить интегралы и производные тут сильно пригодится. > Алгоритмы требуют понимания алгебраических функций Возьмём простейшие алгоритмы по сортировке массивов - насколько там нужно понимать функции? Как мне кажется, только для оценки, какой алгоритм работает быстрее - то есть понимать, чем линейная функция отличается от экспоненты. А это легко понять даже визуально, по картинке, там не нужен какой-то ядрёный матан. Что такое функции люди проходят в 8м классе, и если кто забыл - можно почитать о них и вспомнить, это не такой уж крутой уровень. А вот разработка и анализ более сложных алгоритмов - это часто как раз математическая задача, но далеко не все программисты вообще занимаются такими вещами. Далеко не все программисты в принципе используют в работе хоть сколько-нибудь сложные алгоритмы. > Математический анализ позволяет работать с большим количеством данных (в статистических целях) Тут речь идёт уже не о программировании, а скорее об анализе данных и возможно о Data Science. Ну тут не спорю, для дата саенс математика нужна, об этом я писала ранее. > …допустим расчёт местоположения В принципе да, бывает, что в разработке нужно решать какие-то математические задачи, но чаще всего они не превышают по уровню школьную математику, и даже не старших классов. И часто достаточно найти в Интернете нужную формулу, чтобы решить такую задачу. А так вообще чисто концептуально программирование основано на математике - скажем, понятие функции в программировании - это отражение математического понятия функции. Зная математику, легче понять, что такое рекурсия и в целом сформировать некое абстрактное обобщенное представление о том, что такое программирование и на каких операциях оно основано. Но незнание высшей математики, на мой взгляд, вообще не препятствие в большинстве случаев. А уровень 7-9 класса хорошо бы восстановить в памяти. В остальном я согласна, что знание, лучше чем незнание - просто с точки зрения общего развития.
Hashtags
#вашивопросы Всем привет! Вас становится больше, и вопросов тоже всё больше, так что отвечать буду в порядке их поступления, не переживайте, если до вашего вопроса пока очередь не дошла. А Вы бы посоветовал: лицензионную версию windows, или пиратскую? Тут как мне кажется, прогеру лучше уж выбрать лицензию, либо самому для себя кодить(что то наподобие crack, или что то в этом роде) Не знаю, у меня нет винды. С пиратской версией потенциально может возникнуть больше проблем, скажем, с обновлениями и поддержкой, такая вот цена экономии. Но по большому счёту, какая разница - пиратская или лицензионная? Лично я пиратским ПО не пользуюсь, но и платным ПО тоже - крайне редко. Мне хватает и бесплатных продуктов. Бесплатных в смысле - официально бесплатных, а не с крякнутыми лицензиями. Что вы имеете в виду под «самому для себя кодить», я не поняла - написать свою операционную систему что ли? Это не легко, если вы не Линус Торвальд. А как быть семье итшников? они ведь походу все свое свободное время должны отдавать, и это действительно дом-работа. А почему вы считаете, что айтишники работают круглосуточно? Стандартный рабочий день по закону - 8 часов. Внеплановые переработки случаются не только у айтишников, а у самых разных специалистов, тут всё зависит от работодателя. Не понимаю, чем с вашей точки зрения айтишник отличается от любого другого офисного работника? С IT всё бывает по-разному. Кто-то работает ровно 6-8 часов в сутки, и ни минутой больше. Кто-то систематически перерабатывает, и сидит над работой по 12 часов. На счет этого момента спрашивайте на собседовании, сколько у них принято работать. У меня чаще всего работа занимает не больше чем 8 часов. Изредка случаются авралы, когда я работаю и больше. Ещё может случиться, что попадается очень интересная задача, и засиживаешься за ней дольше, чем необходимо. Бывают также отдельные ситуации такие как технические работы, запланированные на ночное время суток - пока большинство пользователей спит, чтобы работы их не затронули - тогда выполняем их по ночам. Или экстренные случаи, когда у нас что-то ломается, тогда приходится срочно всё чинить и поднимать - и это в любое время суток. Но это всё ситуативно, и такое бывает далеко не каждую неделю. А если в питоне нужен матан, можно ли дорасти до senior без знания? Про матан в питоне это вы сами придумали. Задать вопрос автору блога можно здесь: @hum_it_bot
Hashtags
#вашивопросы Добрый день, я очень интересуюсь айти сферой, хочу попробовать себя в этой сфере. Совсем недавно начал читать ваш блог, а пока в какой именно области хочу быть, пока не могу определиться. Скорее всего мне просто хочется уметь писать коды для программ,в сфере программировании для игр, приложений и программ. Я думаю попробовать изучать язык Java или JavaScript. Но я не могу понять, с какого языка будет проще начинать новичку. Однако у меня есть противопоказания по работе в сфере программировании, меня это расстраивает (зрение, дистрофия сетчатки), но я не думаю, что буду останавливаться, скорее наоборот пойду все равно изучать. Так будет ли хорошо изучать для новичка Java? Где и как правильно искать информацию для изучений? Во-первых, меня смущает, что у вас есть медицинские противопоказания против работы за компьютером. Может, не стоит рисковать зрением? Без него уж точно кодить не получится. В сфере айти есть профессии менеджерского плана, где нужно больше взаимодействовать с людьми и меньше смотреть в монитор - продакт-менеджер, проджект-менеджер и другие. Подумайте, не рассмотреть ли их? Что касается языков программирования - Java или Javascript - зависит от того, что именно разрабатывать. Javascript - это язык фронтэнда, на нём разрабатывают «лицевую» сторону веб-сайтов: кнопочки, менюшки, формы и тому подобное. Java же - это язык общего назначения, на нём пишут бэкенд, всевозможные программы, а также приложения под Android. Что вам ближе? Что касается простоты изучения - я обычно советую начинать с того, что посложнее, потом легче будет перейти на что-то более простое, а в обратную сторону - уже сложнее. Хотите начинать с Java - начинайте с неё - она не то чтобы очень сложная, но и не из самых лёгких языков - строгая типизация и си-подобный синтаксис - это, я считаю, то, с чего следует начинать. Но если хотите что-то совсем легкое, берите Python. Информацию искать нужно, естественно, в гугле. Можно начать с книг, можно пройти курсы - они бывают как бесплатные, так и платные. Подробнее о том, какие бывают курсы - в этом посте, да и в других тоже, я много пишу на эту тему. Я чаще всего советую начинать с бесплатного курса CS50 - он хоть и не про джаву, но общие основы закладывает хорошо. Задать вопрос автору блога можно здесь: @hum_it_bot
Hashtags
Опубликован 4 окт.
Python vs Си (продолжение) …Ещё один пример - числа в Си и Python. У каждого числа есть тип. Например, возьмём тип int, целое число. Чтобы хранить что-то в памяти (в том числе число), нужно выделить некоторое количество памяти для его хранения. Есть, например тип int32 - это значит целое число, занимающее максимум 32 бита. Если для хранения числа потребуется больше битов, мы не сможем его хранить как int32. 32-битное число - это максимум 2147483647. А минимальное значение будет -2147483647. Если нужно число больше, придётся использовать int64. Если, наоборот, число будет совсем маленьким - можно взять int8. Если мы знаем, что наше число не может быть отрицательным, можно использовать тип unsigned int - то есть число без знака, и в нём уместится уже в 2 раза большее число, чем 2 миллиарда, упомянутые выше. Зачем это знать питонисту? Скажем, целые числа в Python сделаны настолько user-френдли, что они не ограничены ни 32 битами, ни даже 64 - можно даже не беспокоиться о том, что используешь слишком большое число. Но вот с дробями, float или double есть нюансы. В математике дроби могут иметь бесконечное количество знаков после запятой, например, если разделить 10 на 3, мы получим число 3,333333… . У этого числа бесконечное количество цифр после запятой, а значит, чтобы хранить его в памяти, понадобится бесконечное количество памяти. А так не бывает - на хранение одной дроби выделяется ограниченное количество памяти, и болше взять мы не можем. Поэтому дроби в итоге очень часто имеют неточное значение - лишние цифры «обрезаются». Что это значит для программиста? Это значит, что мы не можем сравнивать дроби и получать гарантированно верное значение. Например, мы делаем какие-то вычисления по бухгалтерии, и ожидаем, что результат будет равен 100,123456. Поэтому мы сравниваем полученное число с 100,123456 и на этом основываем какую-то логику. А в реальности окажется, что мы получили не 100,123456, а, например, 100,123455 - потому что, опять-таки дроби часто невозможно передать точно. И используя операторы "равно" или "больше" или "меньше" мы получим не то, что ожидаем. Это лишь пара примеров, почему понимание более низкоуровневых механизмов важно даже если вы метите в разработчика на высокоуровневых языках, таких как Python. И ещё Python написан на Си, так что всё что есть в питоне - это всего лишь удобный фасад над операциями на Си - и знание этого может помогать принимать верные решения при написании кода. Так что ещё раз - всем новичкам очень рекомендую гарвардский бесплатный курс CS50 (ссылки на него есть в этом посте).
Опубликован 4 окт.
Python vs C Сегодня я расскажу, почему считаю, что в начале айтишного пути освоение азов Си, на мой взгляд - лучшее, с чего стоит начинать. И что можно упустить, если ограничиться, скажем, одним питоном. Когда я впервые попробовала что-то из программирования - это был небольшой и очень простенький курс по введению в программирование на основе javascript, затем - тоже несложный курс по Python - и, пройдя их, я считала, что уже чему-то научилась. Потом же я случайно набрела на CS50 (ну вы помните, я его все время тут упоминаю). И, начав проходить его (а там как раз дают основы Си), поняла, что я ВООБЩЕ НИЧЕГО НЕ ЗНАЮ, и что этот курс по питону, пройденный мной ранее - это просто смех какой-то, а не курс. Потому что, изучая питон, можно очень сильно прыгать по верхам, ни во что не вникая. Взять, к примеру переменные. Что думает о переменных новичок при знакомстве с Python? Что переменная - это некое имя, скажем, x. И в этом x можно хранить всё что угодно - например, надпись или число, список, dict - и так далее. То есть по сути, переменная - это как бы и есть это число или надпись или другой объект. Что понимаешь о переменных, когда знакомишься с Си? Что за переменными скрывается некая область памяти. В этой памяти хранятся биты информации - то есть последовательность нулей и единиц. В этих битах могут быть закодированы разные типы данных, например, число или буква. Как именно «расшифровать» последовательность ноликов и единиц, определяет тип переменной. Например, мы объявляем переменную типа char (символ) - значит тот байт, что хранится в этом участке памяти скрывает в себе некоторый символ, например, букву. Есть ещё один особый вид переменных - это указатели. В таких переменных не хранятся данные, которые мы будем использовать напрямую - например, буква или число. В них хранится адрес другой «ячейки» в памяти. Для наглядности давайте представим себе почтовые ящики в доме - это будет наша метафора для памяти компьютера. Мы открываем почтовый ящик, и там лежат нужные нам данные - например, газета. Вот так работает обычная переменная в си. А теперь представьте, что вы открываете почтовый ящик, а там записка: «смотрите почтовый ящик номер 38». Вы можете прочитать эту записку, открыть почтовый ящик номер 38 и достать оттуда нужные данные - газету. Переменные-указатели работают примерно как ящик с запиской - хранят адрес нужных данных, но не сами данные. И ещё есть схожее понятие ссылка, не будем тут рассматривать её отличия от указателя, в данном контексте это несущественно. Зачем же питонисту знать про указатели и ссылки? А потому что в Python - любая переменная - это ссылка. Переменные питона напрямую не хранят никаких чисел, букв, текста или других данных. Они хранят только адрес в памяти, из которого можно достать нужные данные. Поэтому можно создать 2 или больше переменных, которые будут ссылаться на один и тот же объект, например, на список. И когда мы меняем этот список - он изменится и во всех переменных, которые на него ссылаются. Потому что эти переменные хранят в себе всего лишь адрес, по которому «живёт» этот список. А вот если мы присваиваем переменной какой-то другой объект, то мы меняем уже сам адрес, на который ссылается эта переменная. То есть, убираем из почтового ящика записку «см. ячейку 38» и кладём туда новую записку - «см. ячейку 42». В Python есть изменяемые и неизменяемые объекты. Упомянутые выши списки - это изменяемые объекты - поэтому, при операциях со списком мы меняем сами данные, но не меняем переменную - она по прежнему ссылается на ту же ячейку памяти. А, например, строка str - это неизменяемый тип - существующую строку изменить нельзя, можно создать новую строку, и записать в переменную адрес этой новой строки. Подобные детали могут ускользнуть от новичка, но без их знания вы гарантированно в итоге будете делать ошибки в коде.