Трудно переоценить важность знания компьютерных программ на сегодняшний день. Компьютер стал неотъемлемой частью жизнедеятельности современного человека. Это средство заработка и способ развлечения, возможность неограниченного общения и источник новых знаний – трудно перечислить все возможности, которые даёт нам компьютер. Но умеем ли мы пользоваться этими возможностями в полной мере?
Наверное, это трагедия современности, что самые лучшие плоды цивилизации доступны лишь ограниченному числу людей. И компьютер относится именно к таким плодам. Да, на сегодняшний день труднее найти дом, офис, предприятие, где отсутствует компьютер, чем тот, где это “приспособление” имеется.
Но пользование сложнейшей вычислительной техникой во многих случаях заключается только лишь в просмотре страниц интернета, загруженных фильмов и прохождении не типичных для пользовательского возраста игр. Большинство широчайших возможностей «электронного друга» остаются невостребованными, а тысячи компьютерных программ, которые могли бы значительно облегчить рутинный труд или добавить массу новых приятных впечатлений, остаются не у дел. В целом, это характерно для множества обывателей, конечно за исключением тех, для кого компьютер практически с рождения стал профессией.
Easily format JavaScript dates
Итак, для чего нам необходимо изучение компьютерных программ? В каждом виде деятельности человек проходит ряд последовательных этапов, повышающих уровень его мастерства. Для сравнения — сидя за экраном своего монитора, пользователь может самостоятельно достигнуть уровня профессионального программиста, начиная всего лишь с создания простого текстового файла! Но не всё так просто как кажется на первый взгляд.
— Во-первых, необходимо ВРЕМЯ. А время в этом деле играет всегда против нас. Казалось бы, выходит совершенно потрясающая программа моделирования графики, у неё уникальные функции и возможности. Вы тратите месяц, два, три и практически в совершенстве овладеваете данным произведением искусства.
Но выходя в интернет, Вы обнаруживаете, что Ваша версия программы уже устарела и существует более совершенная, на изучение которой Вам необходимо снова потратить кучу времени. Здесь хотелось бы порекомендовать “не догонять уезжающий автобус”, а отработать лишь фундаментальные основы, необходимые для работы в какой-либо программе, и не “тормозить” на изучении чего-то конкретного.
— Во-вторых, начинающему пользователя необходимо такое качество, как доведение начатого до конца. Можно бесконечно изучать одну и ту же программу, не доводя своё обучение до логического завершения. Человек имеет свойство забывать, а восприятие однообразной информации в больших объёмах создаёт для этого необходимые предпосылки. Поэтому важно четко распределить объем изучаемого материала во времени, создавая минимальные промежутки в учёбе, пока изучаемый материал не будет усвоен в надлежащем качестве.
Delete node_modules like a Pro #Shorts
— В-третьих, знание определённого рода программ предполагает применение их на уровне навыка, то есть без мучительного осмысления и вспоминания каких-либо действий. Здесь хотелось бы порекомендовать не просто чтение учебной литературы, а использование интерактивных самоучителей, учебного видео и ОБЯЗАТЕЛЬНОГО практикума самостоятельной работы после каждых 20-30 минут обучения. К примеру, при изучении особенно сложных программ, я часто использовал метод двойного экрана. Он заключался в том, что на экране одного монитора воспроизводится обучающий курс по какой-либо программе, а на экране другого монитора загружена эта программа, с которой можно одновременно производить практические действия.
— В-четвёртых, любая программа – это колоссальный и однообразный по содержанию массив информации, поэтому для лучшего его изучения необходимо объединение различных каналов восприятия при получении материала. То есть видеть глазами, слышать ушами, делать руками.
— В-пятых, важнейшую роль, как двигатель прогресса играет лень человека. Для решительного шага вперед почти всегда необходим мощный пинок под зад. Таким пинком является мотивация. То есть, чтобы найти в себе силы, превышающие Вашу лень, Вы должны чётко знать для чего вам это надо.
Деньги, работа, знания, профессионализм — решать Вам, главное чётко видеть свою цель и иметь план её достижения. Например, какие изучить программы, к какому времени и для чего.
Так почему же всё-таки необходимо самостоятельное изучение компьютерных программ? Любая система образования будь то школа, институт, университет просто не может успеть за стремительным развитием информационных технологий. А изучая те или иные программы самостоятельно, Вы сможете добиться необходимых навыков в усвоении чего-то нового, Вы будете подготовлены к любым переменам в мире информационных технологий, Вы сможете выбирать более продвинутое, более современное, обеспечение, максимально используя возможности современной техники.
Источник: mydiv.net
Computer Science или что должен знать программист?
Программисты бывают разные. Мобильные разработчики на Kotlin и Swift, веб-программисты, использующие PHP, Python, Ruby, хардкорные электронщики на Си и Assembler. Главным их отличием является сфера, в которой они работают и используемый язык. Однако не редки случаи, когда, например, веб-разработчики уходят в mobile, электронщики в gamedev и т.д.
А конкретно язык программирования вообще можно переучить за пару месяцев. Пропорции условны, а границы размыты. Языки и технологии меняются, и если всё так подвижно и непостоянно, что же объединяет всех этих людей? А объединяет их умение программировать в целом, не зависимо от языка, платформы и технологии. и знание английского языка, пока не поздно учи английский (вставка из «Криминальное чтиво»)
Умение же программировать складывает из практического навыка написания программ и теоретической базы из различных областей Computer Science. Какие алгоритмы нужно знать программисту, нужно ли ему разбираться в компьютерах, системах счисления, делить в уме столбиком и что вообще должен знать программист в широком смысле этого слова. На эти вопросы вам сегодня постарается ответить Макс — один из автора YouTube-канала PyLounge. Поехали!
Скажем так, Computer Science — это наука, объединяющая в себе различные области знаний, которые будут полезны специалисту, работающему с компьютерами и вычислениями. В общем-то это знания, которые пригодятся программисту. Самые необходимые из них, те, которые встречаются на практике постоянно я сейчас максимально кратко и перечислю.
Алгоритмизация (в целом). Суть в том, что не нужно заучивать реализацию чужих алгоритмов, а стараться развивать своё алгоритмическое мышление, чтобы ты сам мог составлять алгоритмы. Декомпозировать задачу и выявлять нужную последовательность действий. Развить эти навыки можно решая задачи и разбирая готовые алгоритмы, а не заучивая их.
Кстати у нас на канале есть ролик «Как решать задачи по программированию». Ознакомьтесь, если интересно.
Оценка сложности алгоритмов. Да, да. Это то самое большое О. Кроме него есть ещё Тета и Омега, но в принципе можно обойтись и просто О-большим. Действительно важно хотя бы примерно прикидывать временную сложность алгоритма.
Нужно понимать какой участок кода тормозит всё твою программу, почему O(n^2) хуже, чем O(n*log(n)), как следует переделать код чтобы добиться этого O(n*log(n)) и почему вот так лучше вообще не делать.
Это поможет вам писать нормально работящий код, который не будет решать 5 секундную задачу 15 минут на разогнанном I9. Сейчас уже недостаточно просто уметь решать задачу. Нужно уметь её решать максимально эффективным образом.
Кодировки — UTF-8, Windows-1251, ASCII и т.д. Очень многие программисты мучаются с различными проблемами, связанными с кодировками. Поэтому ориентируясь в этом хотя бы на минимальном базовом уровне, вы знатно облегчите себе жизнь.
Парадигмы программирования. Что такое объектно-ориентированное, функциональное, логическое программирование. Чем они отличаются, их преимущества и недостатки. Это поможет тебе выбрать наиболее подходящий инструмент и подход для максимально эффективного решения твоей задачи. Потому что язык и технология это в первую очередь просто инструменты, которые надо уметь грамотно выбирать под советующую работу.
Техники и приемы программирование. Стоит ознакомиться с понятием рекурсии, мемоизации, динамического, линейного программирования и тому подобного. А также понимать, что, где и когда (вставка Что, Где, Когда) лучше применять. Это поможет сделать твой код гораздо эффективнее и качественнее.
Архитектура компьютера. Хотя бы примерно понимать, что такое память в компьютере, зачем нужна, какая быстрее и т.д. Почему копировать объект 1000 раз не самая лучшая идея, зачем нужно кешировать информацию и т.д. Также неплохо бы разобраться в особенности вычислений процессором, видеокартой. Как грамотно распоряжаться программными ресурсами.
Да и вообще полезно знать, как и что там работает в этой коробке под столом.
Ориентироваться в структурах данных. Списки, деревья, очереди и т.д. Просто зачем нужна каждая структура, какие, когда эффективнее использовать. Вот необходимо на проекте решить какую-то задачу, а ты такой «О, чем-то это задача похоже на историю с графами». Есть зацепка, начинаешь гуглить графы, алгоритмы решения задач на графах, библиотеки для этого.
Поверь, твоя жизнь станет сильно легче, если конфиг настроек для бота ты будешь хранить в словаре, а не в массиве. Опять-таки, тебе не нужно уметь с нуля собственными руками реализовывать этот словарь, хеш-таблицу (хотя можно, ничего неподъёмного там нет). Просто надо знать, что она существует и когда обычно её применяют.
Базы данных. Для backend’деров это отче наш. SQL, запросы, таблицы, связи один ко многим, 1 к 1, многие ко многим, миграции. Что такое реляционные базы, не реляционные. Где лучше какие применять и почему.
Это тот раздел, без которого точно не обойтись.
Архитектура программного обеспечения. Ранее я упоминал, что недостаточно чтобы программа просто работала. Она должна работать эффективно. Эффективно не только в плане производительности. Важно уметь писать код качественно, чтобы его было легко сопровождать, расширять. Серьёзное программирование это сложный итеративный процесс, зачастую комодный.
Поэтому качественно спроектированная программа сделает вашу жизнь и жизнь других разработчиков лучше. Тут приходится понимание построение архитектуры ПО и грамотное использование паттернов (шаблонов) проектирование (GoF, GRASP, Enterprise). Кроме того, не мешало бы овладеть общепринятыми практиками (SOLID, KISS, DRY и т.д.)
Устройство Сети. Весь мир потихоньку переезжает в онлайн. Поэтому было бы неплохо разбираться в том, как работает Интернет. Опять-таки на базовом уровне. Что такое протоколы, сокеты, DNS, IP-адреса, зачем оно всё нужно и как между собой взаимодействует.
Важная заметка. Математика, в частности логика, комбинаторика, дискретка тоже входит в Computer Science. Поэтому коротко. Математика — круто. Математика точно нужна, но не всем и не всегда. Вообще математика для программиста эта тема довольно обширная и холиварная, заслуживающая отдельного обстоятельного разговора.
Поэтому сюда я её включать не стал. Однако держу в курсе.
Best practice. Наверное, Не совсем про Computer Science. Но мне кажется, необходимо ознакомиться как принято писать код именно на вашем языке/стеке. Программирование есть программирование. Но согласитесь, в каждом омуте водятся свои черти.
Поэтому будьте добры играть по их правилам или не играть вовсе.
Под конец я очень хочу порекомендовать ознакомиться с книжкой Феррейра Фило «Теоретический минимум по Computer Science». Она коротенькая, но даёт отличное общее понимание всего того, что тебе пригодится (и не отправит начинающего в психушку, как, например, труды Кнута). В том числе в этой книге есть и совсем немного про тот самый матан. Настоятельно призываю ознакомиться. Опытных вряд ли заинтересует, а для новичков самое то.
Как ты понял не нужно идеально всё знать наизусть. Достаточно разбираться в базовых понятиях, принципах и понимать, что, когда применять. Если ты понимаешь, что тебе нужно, но недостаточно глубоко знаешь это, всегда можно заглянуть в Интернет или справочник, спросить у кого-то. Когда ты выберешь специализацию, то будешь уже разбираться отдельных веща непосредственно на деле, когда коснёшься этого, предметно. Например, если решишь программировать ядро Linux, будешь подтягивать знания ОС и т.д.
Базовое понимание — это твой скелет. На которой в последствии ты будешь наращивать мясо из тонкостей, деталей и специфики.
Если я упустил что-то важное из виду, то обязательно напиши об этом в комментариях.
В некотором смысле программирование похоже на рисование. Сначала у вас есть только чистый холст и материалы. Нужно использовать сочетание науки, искусства и ремесла, чтобы определить, что со всем этим делать. (с) Эндрю Хант (Andrew Hunt)
P.S. Есть также видеоверсия данной статьи. Кому интересно, welcome на YouTube.
Источник: habr.com
Как разобраться в Computer Science самостоятельно
Для большинства программистов Computer Science — факультет в зарубежных вузах, целиком и полностью посвящённый программированию, математике и всему, что связано с разработкой программного обеспечения. К счастью, в современном мире необязательно инвестировать тысячи долларов и 4 года своей жизни в образование, ведь существует бесчисленное множество онлайн-курсов, книг и других ресурсов для изучения компьютерных наук.
Приводить сотни всевозможных материалов для программистов-самоучек мы не будем, а лишь попытаемся ответить на два главных вопроса:
- Какие дисциплины следует изучать и почему?
- Какие из доступных ресурсов, книг, серий лекций для конкретной дисциплины имеет смысл посмотреть?
В качестве ответа приведём список материалов, опубликованный Озаном Онай (Ozan Onay) и Майлзом Бёрном (Myles Byrne) — инструкторами в школе компьютерных наук Брэдфилда в Сан-Франциско. Данная подборка литературы и курсов основана на личном опыте обучения сотен программистов-самоучек.
Зачем изучать компьютерные науки?
Существует два типа программистов: те, кто владеют компьютерными науками достаточно хорошо, чтобы совершать инновации, и те, кто вроде как что-то могут благодаря знанию пары-тройки высокоуровневых инструментов.
И те и другие называют себя программистами или инженерами программного обеспечения и имеют примерно одинаковые доходы в начале своей карьеры. Однако первые в итоге становятся более высокооплачиваемыми специалистами. Причём абсолютно неважно, работают они над известными, дорогими и большими коммерческими проектами или над инновационными open-source проектами различной сложности. Они становятся лидерами в своей области и привносят нечто большее и более качественное на рынок.
Они углубленно изучают компьютерные науки, читая книги, слушая лекции, практикуясь или же упорно поглощая материал на личном опыте в своей карьере. Вторые же обычно остаются на дне, изучая различные инструменты и технологии для своей работы, а не то, на чём эти технологии основаны. Для них причиной для изучения чего-то нового является появление новых инструментов и, следовательно, устаревание старых.
На данный момент число людей в индустрии постоянно растёт, а число выпускников с факультета компьютерных наук остаётся неизменным. Перенасыщение рынка инженерами второго типа в итоге приводит оных к безработице или к сравнительно дешевому трудоустройству. Вне зависимости от ваших стремлений: хотите вы стать инженером первого типа или просто ищете способ заработать немного денег, изучение Computer Science — единственный надёжный путь для этого.
Дисциплины
Программирование
Лучшая книга:
Структура и интерпретация компьютерных программ
Львиная доля студентов Computer Science начинают с «вводных курсов» по программированию. Однако такие курсы будут полезны не только новичкам, но и вполне себе специалистам, которые по какой-либо причине пропустили некоторые базовые для программирования вещи.