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.
Что должен знать и уметь хороший программист на самом старте карьеры
Программисты – это люди, которые создают программы или, как говорят на профессиональном языке, разрабатывают. Браузеры, аудио- и видеопроигрыватели, антивирус, торрент-клиент и многое другое создано программистами.
Расскажем о том, что должен уметь программист, какие навыки обязательны, а какие можно освоить дополнительно.
Базовые знания
Любая профессия начинается с изучения фундаментальных основ. Что должен знать программист на старте – дискретную математику, теорию вероятности, математическую статистику, линейную алгебру, функции и т. д.
На основе полученных знаний можно изучать любой язык программирования и совершенствовать в нем.
Второе обязательный навык – умение искать в интернете необходимую информацию. Программист не может знать все обо всем, но он знает, где можно это найти.
Третье, что должен знать и уметь программист – огромное желание разбираться во всем новом. Например, появилась новая библиотека .NET Framework. Разработчику стоит изучить ее, чтобы понимать, где использовать, а не просто прочитать описание и забыть.
Также обязателен английский язык уровня Intermediate и выше. Большинство информации (книги или статьи топовых разработчиков) выходит на английском языке без перевода. В дальнейшей карьере также придется общаться с клиентами на иностранном языке.
Расширенные навыки
Начинающие студенты часто задаются вопросом – какие еще навыки нужны программисту, кроме базовых?
- Необходимо аналитическое мышление, чтобы находить ошибки в написанном коде и оптимизировать его.
- Если разработчик ведет несколько проектов параллельно, то обязательно умение работать с программами контроля версий, например, GitHub.
- Умение работать в разных операционных системах как минимум на уровне опытного пользователя. Зачастую приложения создаются как кроссплатформенные, то есть используются в различных ОС.
- Работа в команде. Если проект большой, то его разбивают на несколько частей и нанимают соответствующее количество программистов.
- Использовать специализированное ПО для создания понятного и красивого дизайна программы. Пользователи не увидят сам код, но будут оценивать по внешнему виду и удобству использования.
Где изучать
Второй вопрос, который сразу возникает у начинающих – куда пойти учиться на программиста? На самом деле вариантов много. Это может быть специализированный вуз, индивидуальные занятия или самостоятельное изучение.
Если студент выбирает путь самостоятельного изучения, то ему потребуется гораздо больше времени стать разработчиком.
В качестве вуза студент может выбрать онлайн-университет, который преподает курсы программирования с нуля. Ученику не нужно регулярно ездить на занятия и тратить время на дорогу. Он может выбрать удобную для себя форму обучения – например, в свободное время слушать лекции и сдавать практические занятия. Диплом в онлайн-университетах приравнен к обычным вузам.
Один из вариантов изучения онлайн–курсы на сайте https://checkroi.ru/. Веб-сайт предоставляет огромный список разных учебных материалов.
На какого программиста пойти учиться – выбор за студентом. Он вправе выбрать область, которая для него наиболее интересна. Программирование творческий процесс: если работа не интересна, то и результата не будет.
Сфера применения
При возникновении вопроса у начинающего программиста – какое образование выбрать, сначала стоит определиться с областью программирования.
На 2020-2021 года актуальные темы:
- Облачные решения. Программист создает приложения с помощью облачных сервисов, например, Amazon или AWS.
- Мобильные устройства. Разработчики пишут код для работы на смартфонах, планшетах и не только.
- Микросервисные решения. Крупная задача разбивается на множество мелких для независимых команд.
- Data Science. Разработка специализированного ПО для искусственного интеллекта и нейронных сетей.
Существует и другие области, в которых также востребованы программисты – контейнеризация, DevOps, QA engineer и др.
Уровень зарплат
Стоимость услуг программиста варьируется в зависимости выбранной сферы и профессиональных навыков. Например, начинающий разработчик мобильных приложений в среднем получает на руки до 70-80 тысяч рублей, а опытный – 200-300 тысяч.
Поэтому на вопрос какая зарплата у программиста – нельзя дать четкий ответ. Также учитывается и компания, которая наняла сотрудника. Apple платит на порядок больше, чем небольшая компания.
Резюмируем
В статье рассмотрели, какие знания нужны для программиста, чтобы стать высококвалифицированным специалистом в своей области. Перечислили основные тренды на сегодняшний день, в которых идет высокий спрос и хороший уровень зарплат.
Каждый программист должен знать эти 12 вещей
Вопрос “что должен знать разработчик?” невероятно популярен. И мы собрали для вас дюжину лучших на него ответов. Понимание данных тем отлично поможет вам как в учебе, так и в работе.
Каждый, кто только начинает писать код, наверняка много раз задается вопросом о том, какого уровня знаний ему необходимо достичь. С базовым набором не так уж сложно определиться, и в этом вам как раз поможет данная подборка. Она универсальна и не зависит от языка программирования, среды или операционной системы.
Каждому программисту стоит знать (или уметь):
1. Значение общих понятий. К примеру, шаблоны проектирования, архитектура ПО, тестирование, рефакоринг, стэк и др.
3. Хотя бы один язык программирования на хорошем уровне. При этом сверхъестественного ничего не требуется: просто умение создавать переменные, методы, пр. Как только научитесь этому, дальнейшее обучение пойдет очень быстро.
4. Как правильно читать код других программистов.
5. Что нужно постоянно учиться. Но информацию потребляйте как можно более качественную. Источник при этом большой роли не играет: Интернет, учебники, книги, справочники — что угодно.
6. VCS — системы контроля версий. А именно основы, характерные для каждой.
7. Ситуации, в которых можно и даже нужно обращаться за помощью, и когда этого делать не стоит.
8. Как понять, какую проблему решать, а какую — отбросить. Довольно часто программисты впустую тратят свое рабочее время, борясь с разными пустяками.
9. Не быть самолюбивым и признавать собственные ошибки, не принимая замечания и критику на личный счет.
10. Мыслить, как пользователь. Хоть вы и программист, не забывайте: вашими программами пользуются обычные люди, не только технари, а значит вы должны стремиться создать для них полезный, понятный и по-настоящему удобный продукт.
11. Качественно отдыхать. Иначе продуктивной работы не будет. Как минимум, делайте перерывы в работе, уделяйте время любимому хобби и обязательно высыпайтесь.
12. Правила командной работы. Практически наполовину успех в карьере программистов зависит от умения взаимодействовать с людьми.
Конечно же, этот список — только краткий набор тех знаний и умений, которые вам предстоит получить. Главное, не бойтесь неизвестного, не пасуйте перед трудностями и не останавливайтесь. Помните, что любой айтишник просто обязан постоянно развиваться и следить за новинками индустрии. Так что активно совершенствуйтесь и привыкайте к тому, что делать это придется всегда.
Больше интересных новостей
Эти языки программирования стали трендовыми, и вот почему
Закат программирования как профессии?
8 «мертвых» профессий, которые навсегда остались в прошлом
10 популярных мифов о карьере IT-разработчика
7 дисциплин, которые стоит знать программисту
Чтобы писать логичный и полезный код, нужно не только быть хорошим программистом, но и разбираться во многих других вещах.
Евгений Кучерявый
Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Изучить популярный язык или даже несколько недостаточно, чтобы стать программистом. Чтобы создавать сайты, приложения, ПО, игры, да и вообще хоть
что-то, необходимо разбираться в науках и языках. Их не так уж и много, но погружение занимает даже больше времени, чем изучение какого-нибудь PHP или еще чего-то попроще.
Английский язык
Если вы пишете на 1С, сразу переходите к следующему пункту. Ну а всем остальным знание английского языка пригодится, чтобы:
- лучше понимать код;
- читать мануалы;
- взаимодействовать с иностранными заказчиками.
Кроме того, английский язык позволит задавать вопросы на зарубежных форумах и stackoverflow — это иногда единственный способ получить помощь, потому что на англоязычных ресурсах люди стараются помочь, в то время как на отечественных прежде всего поднимут на смех, спросят, зачем вам это нужно и для чего вообще вы пришли в программирование, и только потом, может быть, помогут.
Так что английский для IT-специалистов — мастхэв, иф ю вонт ту би э вери гуд программер. Но если вы не дружите с языками, не беда — знания терминов будет достаточно, чтобы нормально работать.
Полезная литература:
- English for Information Technology.
- Career path Software Engineering.
- Oxford English for Information Technology.
- Professional English in Use ICT.
- Check Your English Vocabulary for Computers and IT.
Нужно: всем.
Математика
Большинству программистов хватит умения выполнять простые операции и знания нескольких формул. Например, полезно разбираться в процентах — с их помощью можно создавать адаптивные интерфейсы, работать со звуком и прозрачностью. Вот образец того, как разработчик компьютерных игр может использовать математику:
Продвинутый уровень математики позволяет программисту писать сложные алгоритмы, которые применяются в графике, аналитике, сортировке, построении маршрутов и машинном обучении.
Полезная литература:
- Томас Кормен. «Алгоритмы: построение и анализ».
- Дональд Кнут. «Искусство программирования».
Нужно: всем.
Логика
Все программы построены на логике. Они получают какие-то данные, проводят вычисления и, в зависимости от результата, делают что-то еще. Например, вот пример кода акции в интернет-магазине:
$cost = $position['cost']; $costMessage = "Цена: ".$cost; if($position['type'] == $sale['type']) < //Проверяем, участвует ли этот тип товаров в акции if($date > echo $costMessage;
В коде две логических операции: первая проверяет, распространяется ли акция на товар, а вторая — не прошел ли срок ее действия. В зависимости от результата меняется цена и выводимое сообщение. Это банальный пример; в реальных программах логики очень много, поэтому в ней нужно разбираться хотя бы на базовом уровне.
Полезная литература:
- Непейвода Н.Н. «Прикладная логика».
- Владимиров Д. А. «Булевы алгебры».
Нужно: всем.
Статистика
Если вы собираетесь заниматься аналитикой, то без статистики никуда. С ее помощью выявляются закономерности, которые помогают в исследованиях. Например, можно написать программу, которая определяет, какие статьи принесли больше всего трафика и почему. Для этого находятся все похожие случаи и сравниваются их показатели:
- день недели и время публикации;
- формат статьи;
- объем;
- затраты на рекламу;
- тема;
- автор;
- язык;
- количество ключей.
Также с помощью статистики и алгоритмов можно создать искусственный интеллект с машинным обучением — тогда программисту останется лишь подождать, когда ИИ сам найдет закономерности.
Полезная литература:
- Чарльз Уилан. «Голая статистика».
- Савельев В. «Статистика и котики».
Нужно: аналитикам, ученым, разработчикам ИИ.
Информатика
В школах курс информатики состоит из примерно таких уроков:
- как включить компьютер;
- как выключить компьютер;
- как открыть/создать/удалить папку;
- как работать в MS Word;
- как писать программы на Pascal и HTML в тетради.
Программист, конечно, должен уметь все это, но информатика — это не только компьютерная грамотность: это наука об информации, ее сборе, хранении, передаче, обработке, шифровании и других операциях с данными. Знание может помочь как в написании кода, так и в его оптимизации. Поэтому в информатику нужно хотя бы немного погрузиться, а углубляться — только по желанию.
Полезная литература:
- Иванов Б.Н. «Дискретная математика. Алгоритмы и программы. Расширенный курс».
- Есипов А. «Информация и информационные технологии».
Нужно: желающим.
Профильные науки
Так уж сложилось, что программы в основном пишутся, чтобы решать практические задачи обычных людей:
- найти ближайший магазин;
- решить домашку по математике;
- рассчитать стоимость строительства;
- отредактировать фотографию;
- создать 3D-модель;
- сохранить запись в базе данных;
- проанализировать статистику;
- перевести текст.
Чтобы успешно разрабатывать приложения для решения этих задач, нужно уметь справляться с ними самостоятельно. То есть если приложение предназначено для того, чтобы рисовать графики, то разработчик должен знать, как и зачем люди это делают, чтобы программа соответствовала требованиям пользователей. Иначе он не сможет создать ничего полезного.
Нужно: всем.
Программирование
Последнее, но не по значению, — программирование. Тут не важен какой-то конкретный язык — важен сам подход. Необходимо понимать, как составляются приложения, для чего они нужны, как лучше решить ту или иную задачу и многое другое.
Поэтому перед тем, как углубляться в какой-то язык, нужно обучиться основам программирования. Это поможет по-новому взглянуть на разработку и научиться работать более осознанно и, следовательно, эффективно.
Читайте также:
- Как перестать быть джуниором и начать жить
- Нужен ли программисту английский?
- Кто такой мобильный разработчик и как им стать