Как полюбить программирование, что изучать, проолжение...
2730
49
Можете считать это гайдом, статьей. Но, как и рекламировал, раскрываю тему “Как полюбить программирование”.
В этой статье, будут упущены явные минусы в работе программистом: мало физической активности, перегорание, стресс или переработки. По причине того, что тема неконкретно об трудоустройстве. Я считаю недостатки и минусы есть во всех работах. Идеальной работы где ничего делать не нужно - не бывать. И очень сильно все зависит от компании и менеджмента.
Первое на что нужно обратить внимание это на математическую составляющую программирования и компьютеров в целом. Фраза - "математика не нужна", форсится некоторыми ИТ пропагандистами с целью, набрать работников на механическую однотипную работу без понимания и деталей. Как правило, это потом приведет к плачевным последствиям. Попытка сделать все быстрее и дешевле, в мыслях у каждого. Даже у изучающих программирование.
Второе, это то что кроме вас самих никто не будет вас учить. Люди, выбирающие курсы ИТ, в надежде, что там покажут и расскажут. Остаются ни с чем. Даже сами руководители курсов после того как получают деньги от клиента, меняют информационный поток в русло, что все зависит только от Вас, Вам нужно больше и больше учиться.
Собственно слушая лекцию по математической физике, будучи студентом третьего курса, я четко решил что хочу реализовать себя в этой сфере.
Для того чтобы заинтересоваться программирование, для начала нужно усвоить необходимую математическую базу. Также миф - что математика не нужна в программировании от слова совсем, повторяется многими программистами, выпускниками ПМ (Прикладной Математики). После изучения криволинейных интегралов, дифференциальных уравнений, Гильбертовых пространств, столкнувшись в работе максимум с арифметическими операциями (+, -, \, %, *), ты невольно задаешься вопросом, а зачем тогда все это ? Тут слишком тонкая грань, между сферами математики и программированием. Нужно учитывать тот факт, что люди занимающиеся исследованием разных пространств и сфер, с целью применить их на практике прибегают к программированию. Сам теория программирования, переняла множество алгоритмов и способов интерпретации операций на свой лад. Например, думаю многие слышали о теории множеств, она довольно обширна, но ей проще объяснить логику объединений SQL запросов. То же самое с областью шифрования. Передавать данные о карте клиент не зашифрованным способом, влечет к утрате всех банковских данных клиента, тем самым подрывая статус банка.
С какой математики тогда начать ?
Для начала неплохо бы разобраться, в элементарных операциях (арифметические операции пятого класса мы опустим) компьютера. Системы счисления и перевод из одной в другую, округление, модульная арифметика, операции с дробными числами, логические, битовые и унарные операции.
Думаю все понимают особенности компьютера. Что весь машинный код для него это набор чисел 0 и 1, которые передаются с одного сервера (компьютера) на другой, к тому же умеют авто корректироваться.
Все конечно хорошо, но зачем нам понадобились вдруг системы счисления, ведь уже существуют низкоуровневые языки умеющие работать с процессором напрямую (Ассемблер).
Задача, найти уникальный элемент в массиве, самым оптимальным способом.
a = [1, 3, 3, 5, 2, 5, 1]
Зная как работают битовые операции нам достаточно просто, написать цикл внутри которого будет.
for i := 0; i < len(a); i++ {
e ^= a
}
output e = 2
где a - массив, i - индекс, e - переменная, ^ - операция XOR (исключающее или, eXclusive OR).
Загвоздка в том что, XOR работает таким образом, что если взять два одинаковых числа, например, 13. Перевести его в двоичный код.
По следующей форме:
c = b^n * ((a / b^0) % b) + b^n-1 * ((a / b^1) % b) + … + b^1 * ((a / b^(n-1)) % b) + b^0 * ((a / b^n) % b
При условии пока a > 0
Кратко.
Делим число на основание, берем остаток, делим вновь и так пока не дойдем до 0.
Да слишком сложно, для человека кто не понимает буквы в математике. Но на самом деле все можно понять легко. (В интернете есть куча примеров, которые подробно объяснят)
b - это основание
a - коэффициент, в нашем примере 13
a % b - по модулю, фактически мы находим остаток от деления.
Теперь возьмем наше 13. Все числа которые мы используем, когда считаем дни до пятницы, сдачу в магазине, сколько зп средняя в стране или просто называем их арабскими числами, основание этих чисел 10. Думаю никто не будет спорить, потому-то можно посчитать 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 (всего 10 цифр).
Любое действительное число (½, -2, 0.333) в нулевой степени равно 1. Если забьете в гугл -1 ^ 0, получая ответ -1, не удивляйтесь, поскольку гугл поставил скобки за вас -(1 ^ 0) = -1. Напишите ему (-1)^0 и получите то что надо.
Как ни странно 0^0 = 1, для простоты это так (я хотя не совсем с этим согласен, есть более глубокие размышления и теории насчет этого, что скорее 0^0 - это неопределенность, но компьютер нам дает 1, значит таков выбор компьютера, и его надо придерживаться).
Думаю никого не смутит что, число 1024 = 10^3 * 1 + 10^1 * 2 + 10^0 * 4
input = 13
Значит b = 2
c = 2^3 * 1 + 2^2 * 1 + 2^1 * 0 + 2^0 * 1
Если это запрограммировать, в конце нужно перевернуть результат, потому-то изначально мы делим на два, потом делим результат еще раз на два, то есть повышаем степень. Поэтому 2^3 это результат последнего деления.
Если взять только коэффициенты, то получится 1101, то что нам нужно.
Теперь возьмем операцию XOR
1 ^ 1 = 0
1 ^ 1 = 0
0 ^ 0 = 0
1 ^ 1 = 0
a ^ b = 0, тогда и только тогда если a = b
Вот так компьютер и понял, какое число у нас уникальное.
Звучит задача отдаленно от реальности, но действительно ли это так ? Аппроксимировать данный пример тяжело на реальную задачу в повседневной работе, но при модификации таковой, основа никуда не денется. Поэтому знание базы, разных приемов и изящных способов решения, ценится очень высоко.
После того ознакомившись с машинными правилами, можно перейти к выбору языка.
Хочу сказать, что до языков, в интернете есть так называемый ГОСТ или если быть точным Internet Engineering Task Force (IETF), Institute of Electrical and Electronics Engineers (IEEE). На чем и основывается вся наша изящная теория и спецификация. Доступ к этим документам открыт ко всем, и также открыт контрибьютинг (вклад) в общее дело по улучшению, исправлению и модификации стандартов. Например, все знают что сначала было только ASCI шифрование, поддерживающее числа, спецсимволы (по типу $, почему он на всех раскладках) и только латиницу. Со временем, комьюнити росло и появлялись все новые и новые кодировки. UTF-8, UTF-16, которые позволяют хранить и кириллицу, и китайские символы, арабские алфавит, а также все это расширяется включая появление (или добавление) новых языков и видов письменности.
Все языки реализуют эти спецификации, общий стандарт и понимание, что и как работает. Порой происходят странные вещи и баги, например, многие видели мемы про математику в JS, а они всего-то, реализовали стандарт IEEE 754, это я к тому, что машинная математика хоть и теоретически обоснована, но работает согласно четким алгоритмам.
Исходя из этого, открыв js inspector или js playground, вбив 0.1 + 0.2 мы получим 0.30000000000000004, все логично и правильно посчитано, разработчики просто не включили округления, до знаков слагаемых. Но это не значит, что серьезными подсчетами нельзя заниматься, отнюдь. Есть много других языков, которые реализуют более строгие спецификации высчитывая числа с плавающей точкой до астрономической точности.
К вопросу с языком. Нужно четко понимать что интересно. Web\Desktop Software, Game Development, Hardware, Math Modeling, Machine Learning и т.д. И все это можно менять. То есть поработав 2 года в финансовом проекте, я успешно перешел с Web Payments среды, в Desktop Software, а сейчас хочу на Machine Learning.
Типы программирования бывают разные ООП, функциональное программирование, процедурное. Но есть языки которые по-разному сочетают в себе все три вида, но с большим упором на какой-то из трех.
Например, Java, C#, Scala, Python, кому интересен front-end Javascript, Typescript соответственно.
Зная их, вам будет несложно перейти дальше, на C\Golang\C++\Haskell\Kotlin и т.д. Потому-то вы заденете весь материал с минусами и плюсами реализации данных парадигм в языке.
Самыми популярный считаются Java, Javascript, Python.
Нужно для начала выучить синтаксис каждого из них, их реализации обработки ошибок, многопоточность (в случае JS это async\await promise or Node JS) и структуру памяти.
Само изучение синтаксиса, базовых типов данных и умение обращаться с ним, учиться за пару дней, а вот потом когда садишься за проект, думаешь “А как это правильно применить ?”, “Почему лучше делать способом X, а не Y, ведь на вид и результат они одинаковы ?”, “А когда Y быстрее X ?” и т.д. Тут подходим к алгоритмам.
Алгоритмы вообще отдельный вид, многие программисты их толком не знают, а зря, ведь они лишают себя своего же времени и сил. Написанный алгоритм и теоретически обоснован, работает надежно и быстро, сохраняет ваше время, сон и принесет вам счастье, пока кривые костыли соседа, рано или поздно придется переделывать.
Вот если посмотреть на Google поиск, это всего лишь поиск в базе данных страниц по ключевым словам. Я такой бы написал ну за 1-2 часа времени, но погодите, а что делать если таких страниц ну скажем 10^12 ? Тогда мой поисковик скорее будет работать неделю, в надежде найти нужную страницу, а как определять ранг страницы ? Какую показать первой, а какую последней. Ведь дата добавления, отнюдь не полезность.
Вот тут и вступают в игру алгоритмы. Тут можно писать очень долго, но мой личный совет начните с простых книг “алгоритмы для начинающих” или книгу по алгоритмам, на языке, который вы изучайте. Если хотите серьезных результатов, тогда прочитав и разобрав два тома (Introduction to Algorithms Алгоритмы: построение и анализ Publisher: MIT Press) вы будете вполне сильным, и сможете подавать резюме в Google (вот только еще надо чтоб его заметили). Да-да и книга называется “Вступление в алгоритмы”.
Также не забывайте дедушку Кнута “Искусство программирования”, он сделал огромную и гигантскую работу на то время (70-80 годы) чтобы объяснить всем, как работать должны программы.
После всего этого материала, вы сможете читать научные статьи и изучать алгоритмы 21 века, а точнее прям те, которые создаются в то время, пока ты читаешь это.
Теперь наконец-то как полюбить программирование ?
Ответ - писать код, писать много и то что нравится. На третьем курсе, как проект я решил сдать компьютерную игру покер в которую можно было играть по сети, две бессонные ночи, да я сдавал в последний момент. Можно подумать, после этого должно быть отвращение к этому делу, но сейчас мне кажется те два дня были одни из лучших в моей жизни. Я был настолько вовлечен в процесс, и доволен результатом когда мы с друзьями проверяли программу играя в покер, я был действительно счастлив, даже несмотря на то, что был баг, который не смог поделить банк между двумя оставшимися игроками, и вернул все деньги выбывшему.
Баги отдельная история. Ничего идеального не бывает даже начальные алгоритмы были несовершенны и с недостатками. Я сразу предлагаю привыкнуть к тому что, вы будете часто ошибаться, или делать что-то не так. К этому нужно относиться спокойно.
Однажды на работе, знакомый удалил всю базу данных перепутав ее с подключением к тестовой базе. Он открыл не ту вкладку, и вместо stage базы, выполнил скрипт на prod. Фактически база осталась, но она уже была не в том состоянии. Он был уже в полу безумном состоянии, чуть не теряя сознание, я его быстро успокоил, тем что есть бекап. Но всегда будьте осторожны, уточните всегда и все, всех ошибок избежать невозможно. Не ошибается лишь тот, кто ничего не делает. Но нужно быть рациональным. Работа в ИТ точно также требует концентрации и внимательности, так же как и работа врача. От вас зависит, дойдет ли зарплата на карточку работнику завода, а может даже и жизнь, например, диагностирует ли правильно аппарат МРТ рак ?
Чтобы полюбить программирование, надо кодить разные нестандартные вещи. Вот например попробуйте также, поработайте с бэкапами, продумайте ситуации, которые могут внезапно произойти в жизни в работе, это будет бесценным опытом.
Еще очень действенный метод, это контрибьютить в open-source проекты. Я думаю те кто уже знаком немного с программированием, понимают, что есть какие-то фреймворки, например, Spring Framework для Scala, Kotlin и Java. Этот фреймворк в общем доступе, но делают его поистине работоспособным целое комьюнити программистов альтруистов. Хотя Spring это другая история, есть такая компания Pivot. Но сам факт, что их работа это огромный вклад в разработку.
Подключайтесь также, ищите баги в чужих проектах. И пишите какие-то свои фичи. Таким трюком, вы ощутите себя уже практически на рабочем месте.
https://github.com/spring-projects/spring-framework
Вот например клонируйте проект и запустите его у себя, попробуйте что-то там написать какую-то фичу или исправить баг.
Я не советую писать не обдуманную фичу и пушить им на проверку, так как скорее они не будут ее рассматривать, но если вы пофиксите какой-нибудь злосчастный NullPointerException, и причем красивым способом, Вам скажут спасибо.
Помимо упражнений которые приводятся в книги, а делать их нужно обязательно, без практики - прочитанное бесполезно, попробуйте написать свой HTTP Server, свой Database Storage, или простую игру. Пускай это будет не production ready, с минимальным функционалом, за то вы изнутри поймете с какими трудностями сталкивались разработчики уже существующих СУБД и Web Серверов.
Написать игру всегда хорошая идея. Пускай это будут шахматы, карты или может 3D игра. Главное вовлечься в процесс.
Также попробуйте написать свой проект, который облегчит жизнь многим людям программистам и выложите его в общий доступ, возможно, он приобретет популярность и вы сможете его монетизировать, и работать в дальнейшем будете над своей идеей, а не над чужой.
Я вот, например, так и не нашел хороший транскрибатор, а ведь есть люди, которые делают это за деньги руками!
Вообще хорошей прокачкой скиллов, это автоматизация, лень - двигатель прогресса. Кто будет менять слово в тексте руками по одному - человек не обладающей компьютерной грамотностью. Так что практики хватит всем.
Так что учиться, читать и практиковаться на различных платформах по типу leetcode\hackerank. Отмечайте прогресс в своем личном дневнике, и когда будете видеть, что с каждым днем вы все лучше, будет больше мотивации не останавливаться.
Напоследок, давайте пройдемся по интересным вопросам из топика:
p.s. Орфография и пунктуация сохранены.
Q: Насколько и главное в каких направлениях нужны знания в математике выше средного?
(под условным средним я имею ввиду матешу 10-11 класса)
A: Нужно иметь знания Computer Science, там именно так математика, которая нужна программисту в работе.
Q: Как сохранять мотивацию обучаться и не бросить до первого трудоустройства? (самоучкам)
A: Писать код, попробовать себя в фрилансинге (там рынок заполнен не только разрабами, но и задачами), найти сообщество программистов и обсуждать разные интересующие темы. Решать задачи на leetcode или похожих сайтов, чтобы видеть прогрессы и продолжать двигаться вперед.
Q: Нравиться программирование, но не могу выбрать сферу. Мне в принципе все интересно. Но хочется узнать, в какой сфере по началу меньше конкуренции, и где больший потенциал получать большую зп.
A: Попробовать себя во всех понемногу, что запомнится лучше всего, то и есть твое.
Q: более менее подробный план для развития
минусы, которые не упоминают
как совершенствоваться самому
A:
Выбрать направление
Язык
Постоянно что-то кодить, читать статьи, смотреть видео на эту тему, кодить на leetcode отмечая прогресс, а если есть прогресс есть и мотивация.
Минусы как по мне, стресс, иногда приходиться перерабатывать, могут позвонить и попросить что-то пофиксить. Тут надо, во-первых, найти контору адекватную, где тобой не будут забивать все щели, а правильно распределять ресурсы. Второе, поставить границы, мол я не могу 24\7 работать, либо доплачивайте мне за овертайм или ищите нового. Стресс - это всегда и везде, у всех людей по-разному, главное адаптироваться, к тому, что там разные люди работают. Вот был чел, как только на часах 18-19, закрывал комп и пока. Принципиально даже на звонки не отвечал, теперь я начинаю брать с него пример, да и его никто не уволил, хоть и жаловались, мол, как-то, мы звоним, а он не берет.
Q: Кароче, что нужно знать? я сейчас слушаю лекции Тимофея Хирьянова, очень интересно и доступно объясняет, но я пока на каких-то базовых вещах сижу и не знаю, что изучать(
A: Алгоритмы, паттерны и синтаксис языка. Дальше уже зависит от направления. Как правило, хорошая база уже шанс попасть на работу в 4 раза выше.
Q: Я бы поспорил. Если смотреть по хедхантеру, то у джавы зарплаты больше чем у скалы, и кол-во вакансий в джаве более чем в 10 раз больше чем в скале. Или ты на какие источники информации ориентируешся?
A: Зависит от компании, обычно пишут Java-Scala, приходишь и по факту Scala. Ну есть куча разных DOU, Glassdoor. Как правило, Scala более сложное и уникальнее, отсюда и зп просят больше. Но это не аксиома, так что тут как повезет.
Q: Попробуй меня убедить и заставить любить это.
То что я по образованию программист не помогло
То что у меня двоюродный брат из глубинки сейчас живет и работает программистом в германии, в фирме которая создала эфириум, получая 9к евро тоже не убедило
Может у тебя получится
A: Берешь и начинаешь писать какую-то прогу, не заходит, значит не твое.
Q: Хочу научится программированию, полный 0 в этом, подскажи, пожалуйста, с чего начать? С какого языка? Лучше обучатся самому, или курсы купить?
A: Даже если купишь курсы, все равно придешь к тому, что нужно самому все учить. Начни с Java или Python - они обширные и покрывают много аспектов.
Q: ТС, где топик? От себя спрошу - какой лвл нужно иметь, чтобы влететь на позицию мидл AQA? Писать e2e тесты или юнит тесты много ума не надо, но вот например если нужно с 0 забацать тестовый фреймворк - хватит ли знаний у дефолтного джуна?
A: Ну думаю с нуля фреймворк писать на работе вряд ли попросят, а если попросят то тут надо скил backend разработчика. Я думаю если ты умеешь писать smoke testing, regression testing + есть необходимые знания devops (чтобы самому это все запустить или подключить к проекту), то ты уже мидл.
Q: Стал изучать джаву. Обязательно ли нужна корочка при приему на работу? Или лучше работать сам на себя беря заказы у людей на работу?
A: Зависит от страны, в 90% случаях нужна или какой-то сертификат, подтверждающий, что ты квалифицирован и можешь предоставлять определенные услуги.
Q: Вот думаю пытаться попасть на работу на JSe фуллстек либо фронт (сейчас тыкаюсь в ноду и реакт), насколько это реально атм?
A: фуллстек везде востребованы, да и на Node JS проектов куча.
Q: Насколько влияет профильное образование, если двигаться в сфере IT? Сам по образованию инженер, работаю в крупной компании, но попутно изучаю ЯП и потихоньку вникаю во все тонкости. Заинтересован в смене деятельности.
A: Смотря чего инженер, вообще очень часто образование играет на руку, так как это документ твоей квалификации. Возможно ты сможешь найти проект, в той сфере где ты сейчас работаешь инженером, и это большой плюс.
Maiev Shadowsong сказал(а):↑
Почему бы не учить математику по мере необходимости? На собеседовании джуна не будут об этом спрашивать, его завалят на алгоритмах. Тем более на это уйдет куча времени, а за еду и хату надо чем-то платить.
Нажмите, чтобы раскрыть...
зная математику, джун развалит по алгоритмам изи, я не раз собесил типов, и видел когда они пытались она изусть запомнить, а когда четко понимали что и как.
Читать алгоритмы
Контрьюбить в опенсорс, чтобы привыкать к большим проектам и на них тренироваться
Писать свои проекты тренировочные, аля сервер, покер, дабы столкнуться с тяжелыми вопросами
Попробовать написать свой проект, выложить в общественность, возможно он зайдет, и не нужно будет париться поиском работы
AMDkrolyan сказал(а):↑
Хочу сказать, что до языков, в интернете есть так называемый ГОСТ или если быть точным Internet Engineering Task Force (IETF), Institute of Electrical and Electronics Engineers (IEEE). На чем и основывается вся наша изящная теория и спецификация.
Нажмите, чтобы раскрыть...
ля, ну пиши ты попроще
пишешь "гост", хотя это очевидно не гост.
пишешь "спецификация", хотя у тебя руководство (мануал).
если ты реально пишешь не чтобы пофапать самому себе и вылить мысли, которые приходят к тебе во время душа, сделай красные строки и заголовки, выдели. уважай хотя бы себя - если ты собираешься кого то учить программированию, покажи что умеешь систематизировать и упорядочивать информацию
AMDkrolyan сказал(а):↑
зная математику, джун развалит по алгоритмам изи, я не раз собесил типов, и видел когда они пытались она изусть запомнить, а когда четко понимали что и как
Нажмите, чтобы раскрыть...
Знания - сила, это понятно. Имхо, осознанное изучение математики подойдет тем, кто учится в универе и может позволить себе пожить у родителей.
Интересно твое мнение про джетбрейновский сайт с теорией (математика там, кстати, тоже есть), если тестил: хайперскил.
Всё прочитал, очень интересно, даже немного замотивировался, появилось резкое желание снова начать учить питон (уже пробовал, писал пару не сложных скриптов читая книгу A Byte of Python)
Но вопрос, можешь посоветовать какие-то книги связанные с математикой в направлении ИТ и собственно Computer Science?
Foxes Boobs сказал(а):↑
Что можешь сказать о питоне? Что на нём можно реализовывать, каков у него потанцевал?
Сработает ли метод обучения через прочтение документации и обзора исходников?
Нажмите, чтобы раскрыть...
Да вполне, исходники обязательно надо чекать, иначе толку ноль будет.
А вот документация это скорее проверить лишний раз, или узнать что-то конкретное, то есть за надобностью.
Лучшее читать книги где это все структурировано
Maiev Shadowsong сказал(а):↑
Знания - сила, это понятно. Имхо, осознанное изучение математики подойдет тем, кто учится в универе и может позволить себе пожить у родителей.
Нажмите, чтобы раскрыть...
Могу тебе сказать что осознанное изучение математики подходит всем, кто действительно хочет правильно "вкатиться" в сферу, а также тем кто хочет нормально развиваться дальше внутри нее.
Никто не мешает тебе после работы учиться, было бы желание.
Maiev Shadowsong сказал(а):↑
Интересно твое мнение про джетбрейновский сайт с теорией (математика там, кстати, тоже есть), если тестил: хайперскил.
Нажмите, чтобы раскрыть...
Мне присылали подписку на бета-тест - проекты довольно хорошо подобраны, правда немного странная структура и тестовые задания не относящиеся непосредственно к проекту удивляют своим однообразием.
Математика там так себе - лучше khan academy в этом плане только нормальное университетское образование, так что тебе туда.
SillyMelon сказал(а):↑
Всё прочитал, очень интересно, даже немного замотивировался, появилось резкое желание снова начать учить питон (уже пробовал, писал пару не сложных скриптов читая книгу A Byte of Python)
Но вопрос, можешь посоветовать какие-то книги связанные с математикой в направлении ИТ и собственно Computer Science?
Нажмите, чтобы раскрыть...
Computer Science Седжвик - самая легкая и первая
Если получится найди Cracking the Coding Interview
SillyMelon сказал(а):↑
Всё прочитал, очень интересно, даже немного замотивировался, появилось резкое желание снова начать учить питон (уже пробовал, писал пару не сложных скриптов читая книгу A Byte of Python)
Но вопрос, можешь посоветовать какие-то книги связанные с математикой в направлении ИТ и собственно Computer Science?
Нажмите, чтобы раскрыть...
Грокаем алгоритмы
Maiev Shadowsong сказал(а):↑
Знания - сила, это понятно. Имхо, осознанное изучение математики подойдет тем, кто учится в универе и может позволить себе пожить у родителей.
Интересно твое мнение про джетбрейновский сайт с теорией (математика там, кстати, тоже есть), если тестил: хайперскил.
Нажмите, чтобы раскрыть...
Maiev Shadowsong сказал(а):↑
Знания - сила, это понятно. Имхо, осознанное изучение математики подойдет тем, кто учится в универе и может позволить себе пожить у родителей.
Интересно твое мнение про джетбрейновский сайт с теорией (математика там, кстати, тоже есть), если тестил: хайперскил.
Нажмите, чтобы раскрыть...
лично сам не юзал, но слышал от других что вполне норм вышло
ОП возможно имеет другое мнение на этот счет, выскажу свое.
Понятие "математика для СS" - весьма сомнительное, поскольку она - суть основа всей индустрии.
Так что стоит изучать в комплексе, уделяя внимание всем ключевым разделам понемногу, и двигаясь от простого к сложному.
От себя порекомендовал бы
"Дискретная математика для программистов" Хаггарти
"Алгоритмы: Построение и анализ" Кормен
"Начала теории множеств. Математическая логика и теория алгоритмов" Шень
"Алгебра и теория чисел для математических школ" Алфутова
Если есть вопросы по каким-то другим разделам - спрашивай, посоветую из того что лично сам читал и изучал.
А, ну и если есть желание учить онлайн то khan academy безусловно топ ресурс для изучения математики.
AMDkrolyan сказал(а):↑
Фраза - "математика не нужна", форсится некоторыми ИТ пропагандистами с целью, набрать работников на механическую однотипную работу без понимания и деталей. Как правило, это потом приведет к плачевным последствиям. Попытка сделать все быстрее и дешевле, в мыслях у каждого. Даже у изучающих программирование.
Нажмите, чтобы раскрыть...
Это не пропаганда, это то как работает бизнес. 90% задач в IT - простая, механическая, однотипная работа не требующая вообще никаких знаний кроме умения гуглить и хоть чуть-чуть делать выводы из прочитанного.
И да, сделать "быстрее и дешевле" это девиз вообще любого бизнеса, не только IT. Никто, никогда, никому не будет платить за то что ты имеешь невероятные знания математики и смог благодаря своему алгоритму снизить нагрузку на сервер с 1% до 0.9%. Здесь действует "Закон Парето", когда ты получаешь 80% результата сделав 20% усилий. Никто не будет тебе доплачивать за то что ты потом потратил в 4 раза больше времени на то чтоб доделать оставшиеся 20%. Это не выгодно бизнесу, они платят тебе за то что бы ты решал актуальные задачи. По этой причине ты можешь открыть любой популярных проект на гитхабе и увидеть там сотни, а то и тысячи багов которые никому не уперлось фиксить которым уже по 5-6 лет, потому что это того не стоит.
Мне приходилось помогать собеседовать когда-то бывшего олимпиадника у которого оранжевый ник на кодфорсез был (топ1000-1100). Да, у него огромные познания в алгоритмах. Да, он закончил мехмат. Но он потратил огромное кол-во времени на решение сфеерических задач в вакууме. Но ему было отказано по двум причинам:
1) Очень убогое качество кода, которое заточено на оптимизацию всего и вся. Да, его код быстрый. Да, его код укладывается во все ограничения по памяти и по времени выполнения. Но его код это такая лапша из ифов, такая нечитабельная ерунда, посмотрев на которую, члены команды просто придут и начнут жаловаться на такого человека.
2) Он переусложнял на собеседовании вещи. Там где было вполне очевидное, простое решение, он искал какой-то подвох, потому что "ну не может же быть так легко".
И после него приходил простой, средний мидл, у которого нету ни опыта спортивного программирования, ни ВУЗа с углубленным изучением математики, а из алгоритмов там только основные с сортировкой, деревьями, перебором. У него был хороший, читаемый код. Да, он может быть не был оптимизирован по максимуму, но он прекрасно читался.
Вот и вопрос: А зачем в 90% компаний, где большая часть задач это примитивная работа, нужны знания математики сложнее школьной программы? Есть гугл, есть майкрософт, есть десятки других компаний которым такие люди требуются. Но в обычном бизнесе, такие люди просто не нужны. Любому бизнесу проще набрать 10 средних программистов, чем набрать 9 средних программистов и одного топа, потому что во-первых, это как нестандартная деталь, которую потом сложно заменить в случае чего, а во-вторых, это усложняет работу 9 другим средним программистам, которым приходится тратить время и разбирать что же за гениальную вещь написал этот топовый программист.
Поэтому я в корне не согласен с фразой про то что сначала ты учишь математику а потом учишь программирование. Люди на первой работе будут требовать с тебя возможность решение задач, фикс багов, допилить тут и там, а не спроектировать систему и придумать алгоритм чтоб эта система работала нормально, для этого в команде есть сеньоры, тимлиды и архитекторы.
Поэтому ты СНАЧАЛА учишь язык программирования, учишься решать типовые бизнес задачи, делаешь свои проекты, портфолио. И только после этого, когда уже есть какой-то бэкграунд, ты начинаешь учить алгоритмы и математику по мере необходимости.
Кого на собеседовании возьмут, того, кто выполнит тестовое задание качественнее с читаемым кодом или того кто имеет более высокий ранг на каком-нибудь кодфорсез/кодварсе/хакерранке? В гугле, МС - очевидно последнего. А не 90% других вакансий без вариантов предпочтут первого.
Taiga121 сказал(а):↑
ОП возможно имеет другое мнение на этот счет, выскажу свое.
Понятие "математика для СS" - весьма сомнительное, поскольку она - суть основа всей индустрии.
Так что стоит изучать в комплексе, уделяя внимание всем ключевым разделам понемногу, и двигаясь от простого к сложному.
От себя порекомендовал бы
"Дискретная математика для программистов" Хаггарти
"Алгоритмы: Построение и анализ" Кормен
"Начала теории множеств. Математическая логика и теория алгоритмов" Шень
"Алгебра и теория чисел для математических школ" Алфутова
Если есть вопросы по каким-то другим разделам - спрашивай, посоветую из того что лично сам читал и изучал.
А, ну и если есть желание учить онлайн то khan academy безусловно топ ресурс для изучения математики.
Нажмите, чтобы раскрыть...
Спасибки
SillyMelon сказал(а):↑
Спасибки
Нажмите, чтобы раскрыть...
Не за что.
Оно все с непривычки довольно сложное, я когда начал два года назад по новой после универа изучать все, чуть голову не сломал наглухо.
Но норм, главное в комплексе изучать все, поскольку кросс-референсов в математике полно и многие вещи не дадутся тебе без изучения параллельных разделов.
SillyMelon сказал(а):↑
Спасибки
Нажмите, чтобы раскрыть...
Не за что.
Оно все с непривычки довольно сложное, я когда начал два года назад по новой после универа изучать все, чуть голову не сломал наглухо.
Но норм, главное в комплексе изучать все, поскольку кросс-референсов в математике полно и многие вещи не дадутся тебе без изучения параллельных разделов.
SillyMelon сказал(а):↑
Спасибки
Нажмите, чтобы раскрыть...
Не за что.
Оно все с непривычки довольно сложное, я когда начал два года назад по новой после универа изучать все, чуть голову не сломал наглухо.
Но норм, главное в комплексе изучать все, поскольку кросс-референсов в математике полно и многие вещи не дадутся тебе без изучения параллельных разделов.
AMDkrolyan сказал(а):↑
Исходя из этого, открыв js inspector или js playground, вбив 0.1 + 0.2 мы получим 0.30000000000000004, все логично и правильно посчитано, разработчики просто не включили округления, до знаков слагаемых.
Нажмите, чтобы раскрыть...
Лол. Ты понятия не имеешь почему 0.1 + 0.2 = 0.30000000000000004, судя по этому предложению.
Такой результат получается из-за того что ты не можешь никак представить 0.1 в двоичной системе счисления, потому что это число будет бесконечно заканчиваться на 1100, т.е. 1100110011001100110011001100 и так до бесконечности. По этой причине происходит округление до 24 бит и 0,100000001490116119384765625 соответственно. Поэтому 0.1 + 0.2 = 0.30000000000000004, а не из-за того что кто-то там забыл округление добавить.
Вебмакака сказал(а):↑
Лол. Ты понятия не имеешь почему 0.1 + 0.2 = 0.30000000000000004, судя по этому предложению.
Такой результат получается из-за того что ты не можешь никак представить 0.1 в двоичной системе счисления, потому что это число будет бесконечно заканчиваться на 1100, т.е. 1100110011001100110011001100 и так до бесконечности. По этой причине происходит округление до 24 бит и 0,100000001490116119384765625 соответственно. Поэтому 0.1 + 0.2 = 0.30000000000000004, а не из-за того что кто-то там забыл округление добавить.
Нажмите, чтобы раскрыть...
все правильно, но если ты напишешь 0.1 + 0.2 на другом языке, например го, ты увидишь 0.3, есть разные тонкости и речь не об округлении
Тема закрыта
-
ЗаголовокОтветов ПросмотровПоследнее сообщение
-
Сообщений:2
Просмотров:3
-
Сообщений:7
Просмотров:14
-
Сообщений:11
Просмотров:29
-
Сообщений:40
Просмотров:78
-
Сообщений:10
Просмотров:35