Программирование для гуманитариев
6.67K subscribers
67 photos
5 videos
219 links
Личный опыт того, как скипнуть в IT с гуманитарным образованием. Что для этого делать, чего стоит бояться (спойлер: ничего!) и чего ожидать. Рассею мифы о программировании и мире IT.
Бот для вопросов об IT: @hum_it_bot
Download Telegram
#вашивопросы

Учусь на специальности "компьютерная безопасность". Изучаем много разных дисциплин (от линала, матанализа, программирования до баз данных, защиты в ос, ооп) , но совершенно непонятно, чем мы потом будем заниматься, куда идти.
Не могли бы посоветовать материалы, чтобы углубиться именно в специальность? Чем именно занимается данный специалист?


Основные варианты профессий в сфере информационной безопасности я представляю себе так:

1. Работать в компании, которая занимается разработками в области информационной безопасности. Из таких наиболее на слуху Лаборатория Касперского, но есть и другие. Там вы будете, грубо говоря, изучать вирусы и расследовать инциденты, связанные с хакерскими атаками. То есть, вам понадобится разбираться в реверс-инжиниринге (а частности дизассемблировать код вредоносного ПО) и форензике.

У меня есть знакомый, по образованию специалист по информационной безопасности, который работает в фирме, которая помогает спецслужбам ловить киберпреступников - так он даже участвует в спецоперациях по захвату таких преступников - ну то есть в окна к людям влезает вместе с оперативниками, чтобы осуществить арест. Но это очень экзотический случай, рассказываю скорее в развлекательных целях.

2. Работать специалистом по информационной безопасности в какой-нибудь компании - обычно крупные компании, особенно это касается госкорпораций и банков, имеют свою службу информационной безопасности. Это что-то вроде специальных системных администраторов, которые определяют правила безопасности для данной компании и следят за их выполнением - они решают, например, куда можно давать доступ разным сотрудникам, как защитить сети и данные, чтобы туда не проникли злоумышленники, расследуют нехорошие случаи (например, утечки персональных данных). Они же проводят аудит, учения по информационной безопасности и ищут слабые места. По сути это некая помесь админов с надзорщиками.

3. Пентестеры - сотрудники, тестирующие ПО и системы внутри компании на уязвимости, выполняющие так называемое тестирование на проникновение (penetration test). Это могут быть как отдельные специалисты, так и те же люди, о которых речь шла в пункте 2, смотря насколько большой штат у конкретной компании. Пентестеры - это как этичные хакеры, их задача - «атаковать» систему, чтобы найти в ней слабые места и сообщить о необходимых исправлениях.

4. Также информационной безопасностью занимаются спецслужбы, но я не в курсе, что именно они там делают, думаю это гостайна. 🙂

Что касается вопроса о том, что вам изучать самостоятельно - для начала определитесь, чем вам интереснее заниматься? Например, если вы хотите углубиться в анализ вирусов и дизассемблирование кода - ищите материалы по реверс-инжинирингу. Если вам интереснее пентесты - копайте в их сторону. И так далее

Задать вопрос автору блога можно здесь: @hum_it_bot
#вашивопросы

Я недавно перешла из гуманитарной специальности в веб-программирование (пишу на js) и после стажировки получила работу (невероятно счастлива по этому поводу!). Но мне сказали, что мне не хватает базы, которая есть у выпускников тех специальностей. Можешь подсказать, что почитать/посмотреть из бесплатных курсов, чтобы побыстрее восполнить пробелы (кроме курса CS50). Или хотя бы на какие темы обратить внимание. И спасибо за блог, он мне здорово помогал продолжать верить в себя, когда я училась😊

Ну начнем с того, что технические специальности, связанные с информатикой - разные, и программы в разных ВУЗах отличаются. Есть, например, факультеты больше с уклоном в математику, есть с уклоном в инженерные науки. Универсальной единой программы для всех не существует.

Главное отличие высшего технического образования от курсов в том, что в ВУЗах дают очень широкий набор дисциплин, а курсы, напротив, фокусируются только на минимально необходимых навыках. Вузы обычно не готовят, скажем, «веб-разработчиков фротэнда», они готовят, "специалиста по прикладной математике и информатике" - а кем этот человек будет трудоустраиваться, он уже решает сам.

Поэтому если вы хотите в целях самообразования подтянуть «базу» - то обратите внимание на те предметы, которым вас не учили на курсах, но которые преподают на технических специальностях. Глубину погружения в эти предметы вам придется выбирать для себя самостоятельно - не факт, что они вам действительно потребуются в процессе работы, а если потребуются - то не факт, что в большом объеме. Вот примерный набор таких предметов:

- Общая информатика (она же Computer Science)
- Математика (особенно матанализ, теория вероятностей, линейная алгебра, дискретная математика, статистика)
- Алгоритмы и структуры данных - в том числе математическая теория алгоритмов и их анализ
- Архитектура компьютера (микпропроцессоры, устройства ввода-вывода, память, ассемблеры)
- Операционные системы
- Сети
- Защита информации
- Базы данных
- ООП

Этот список я составила навскидку, как я уже говорила от вуза к вузу и от программы к программе он может отличаться, и обычно включает в себя еще больше дисциплин.

Кстати, если слова про недостаток «базы» принадлежат вашим коллегам - спросите у них, что именно они включат в понятие «база», и на какие конкретно предметы они бы советовали вам обратить внимание. Это же их мысль - так пусть выскажут ее до конца, чтобы вы могли извлечь пользу из этой информации. :)

Конкретного списка литературы или курсов для такого широкого набора дисциплин у меня нет - так что ищите по ключевым словам и по интересным для вас темам - тем, которые решите в итоге «прокачать».

Также у меня есть свой субъективный чек-лист по навыкам и знаниям, необходимым для работы программистом. Они ориентированы в большей мере на бэкенд-разработчиков, а вы, как я понимаю, больше со стороны фронта. Но можете посмотреть эти темы обзорно, в моем понимании они относятся к базовой компьютерной грамотности, а не только к бэку. Здесь соответствующий пост.

Задать вопрос автору блога можно здесь: @hum_it_bot
Подписчики часто спрашивают об обучении программированию или тестированию, но почему-то все забывают, что есть еще один вид очень востребованных специалистов-айтишников - это системные администраторы.

Подумайте - возможно, вам интереснее было бы не писать код, а настраивать сети, разбираться в тонкостях Linux-а и администрировать сервера?

Тогда можно записаться на курсы для системных администраторов в Skillfactory. За 9 месяцев из вас сделают специалиста уровня Junior+, при этом график обучения не настолько загруженный, чтобы пришлось отрываться от основной работы.

На обучении расскажут всё об устройстве компьютеров, операционных систем и сетей, продвинутых инструментах администрирования, мониторинга и резервного копирования, научат работать с терминалом LInux и писать скрипты для автоматизации админских задач.

Обучение практикоориентированное: вы будете разворачивать виртуальные машины - локально и в облаке, мониторить их активность и учиться решать проблемы «на лету», а в конце вас ждет большой финальный проект.

И с трудоустройством тут тоже помогут - у ребят есть свой карьерный центр - здесь вас проконсультируют, помогут составить резюме и предложат актуальные вакансии от партнеров.

Ну как, готовы стать настоящим айтишником?
Тогда впередhttps://clc.am/KnGY-A
до 26 апреля по промокоду ГУМАНИТАРИЙ действует скидка 50%
#вашивопросы

Интересует такой момент, как вы думаете, в какой сфере программирования наименьшая конкуренция среди джуниоров, чтобы все таки можно было устроится и начать работать, а не ходить по собеседованиям. Просто изначально были планы начать с фронтенда, но столкнулся с мнениями, что там конкуренция большая и не хотелось бы просто так потратить время на обучение, чтобы потом никуда не устроиться.

А то везде говорят что на айтишников дефицит, но это наверное на специалистов с опытом спрос, а Джуниоров наверное много, тем более верстальщиков, каждый школьник сейчас верстает:) вот и не получается ли ловушка для тех кто хочет войти с верстки


Ну во-первых, вы верстальщиком хотите стать или фронтэнд-разработчиком? Это разные вещи.

Во-вторых, в вашем вопросе я вижу одну проблему - непонятная мотивация. Вы хотите стать айтишником (любым? неважно каким?) - чтобы что? И почему именно айтишником? Просто потому что модно и вроде бы зарплаты больше, чем в среднем по рынку? Самая маленькая конкуренция «среди джуниоров» - это какой-то слабый критерий для выбора профессии, которой нужно обучаться несколько лет (включая обучение в ходе работы).

Выбирать нужно прежде всего то направление, которое вам будет в удовольствие, и я сомневаюсь, что как-то иначе можно достичь успеха - просто потеряете мотивацию и не сможете «дожать» свои навыки до профессионального уровня. Сидеть по 8 часов у компа и делать нелюбимое дело - не так уж просто, даже за деньги.

Что касается дефицита айтишников - да, он есть. Но поймите, это дефицит хороших специалистов, а не халявщиков и «лишь бы кого взять». Людей с очень плохими навыками и знаниями на собеседования приходит пруд пруди - и не только джуниоров, но и людей с опытом. А вот найти действительно хорошего грамотного специалиста - задача не из лёгких, тут мы действительно сталкиваемся с кадровым голодом.

И джуниоры джуниорам тоже рознь - все хотят найти перспективного джуна: ответственного, инициативного, готового быстро обучиться всем недостающим знаниям и превратиться в миддла. А лентяев, которые просто пришли отсиживать рабочие часы и затрачивать минимум усилий - вот таких все стараются избегать.

Если вы ищете направление IT, где маленькая конкуренция - то тоже загоняете себя в ловушку - маленькая конкуренция может быть например среди разработчиков очень редких языков программирования - просто потому что таких специалистов мало. Но и вакансий таких тоже очень мало - как вы думаете, проще найти работу в той сфере, где есть 3000 открытых вакансий, или там, где их всего 3, и то не каждый год?

Да, фронтэнд, то есть разработка на JavaScript относятся к одному из самых востребованных направлений - значит там и вакансий много, и обучиться ему много желающих. Но и самые распространённые языки для бэкенда - Java, Python - тоже очень популярны и пользуются высоким спросом. И, тем не менее, все изучают их, а не какой-нибудь Haskell - потому что вакансий с ним днём с огнём не сыщешь. Но да, станете Haskell-разработчиком и конкуренция будет очень низкой - потому что они почти нигде не нужны.

Поэтому ваша задача не думать о конкурентах, а сделать из себя крутого специалиста - да, джуны тоже бывают крутыми. А чтобы таким стать нужно быть увлечённым и любознательным - поэтому ищите любимое направление и развивайтесь в нём. Если сразу не понятно, что интереснее - попробуйте разное.

Задать вопрос автору блога можно здесь: @hum_it_bot
#вашивопросы

Здравствуйте, большое вам спасибо за канал, очень много полезного узнал! Вопрос такой - начал проходить CS50, все круто, интересные лекции, но проблема в том, что я затупил на заданиях уже ко 2ой лекции, т.е. без помощи ютуба я бы их не выполнил, это нормально? Или, если я не могу решать задачки на таких ранних этапах - моего интеллекта для IT недостаточно? Вероятно, что дальше задачи будут только усложняться(

И вам спасибо, что читаете и присылаете вопросы.

В вашем вопросе я вижу случай, который по-модному сейчас называют fixed mindset (дословно - фиксированное мышление). Если простыми словами - это значит, что человек, столкнувшись с трудностями, тут же пытается поставить себе диагноз (например, «я недостаточно умный») и делает вывод, что так будет всегда, и ничего тут не поделаешь. На эту тему у меня уже был пост со ссылкой на видосик, где подробнее рассказывают о двух видах мышления (осторожно, english).

Давайте для наглядности приведём еще несколько примеров fixed mindset: человек учится водить машину, и у него не получается правильно отпускать педаль сцепления. Он делает вывод, что он не способен водить машину и бросает автошколу. Или, например, школьник не понимает уравнение по математике - и решает, что «математика - это не моё» и с тех пор прогуливает математику и списывает все задания у одноклассников, даже не пытаясь вникать в этот предмет.

Противоположнсть такого мышления - growth mindset. Это мышление, ориентированное на рост, на движение вперёд. Такой человек говорит «у меня пока не получается разобраться с педалью сцепления, но надо больше тренироваться». Или «мне пока с трудом даётся математика, но к концу года я планирую её подтянуть». И как раз люди с таким типом мышления успешнее в учёбе.

Второй тип мышления основан на том, что трудности и неудачи - это нормальный этап любого обучения и любого развития. И что, если у вас что-то не получается с первой, второй, десятой попытки - это совершенно нормально, это просто значит, что на усвоение материала потребуется дополнительное время и усилия - в том числе, возможно, придётся что-то погуглить, почитать.

Знания, навыки и интеллект не возникают из ниоткуда и не остаются с человеком до конца жизни в неизменном виде. Их формирование - это процесс. Мозг каждого человека постоянно изменяется (это называется нейропластичность), и именно поэтому мы можем изучать что-то новое - будь то вождение машины, математика или программирование. Вопрос только в том - хотите ли вы этого?

Задать вопрос автору блога можно здесь: @hum_it_bot
👍1
Программирование для гуманитариев
#вашивопросы Здравствуйте, большое вам спасибо за канал, очень много полезного узнал! Вопрос такой - начал проходить CS50, все круто, интересные лекции, но проблема в том, что я затупил на заданиях уже ко 2ой лекции, т.е. без помощи ютуба я бы их не выполнил…
От подписчиков: Очень захотелось добавить к ответу на этот вопрос (https://t.iss.one/it_human/463), что на самом cs50 кроме лекций есть ещё секции, куда студенты приходят со своими вопросами к заданиям и разбираются с ассистентами профессора и/или одногруппниками.
От подписчиков: У меня тоже 5 копеек к вопросу https://t.iss.one/it_human/463. На курсах тестировщиков был блок по Git. Помню, чуть не плакала, когда домашние задания делала часами (тупила, что гуманитарий и 36 лет 😬). А сейчас Гит люблю нежно и трепетно 😍 Почти как Ваш канал 😇 А вообще, задавать вопросы и искать ответы (даже при выполнении ДЗ) - это суперполезный в дальнейшем навык 💪
#вашивопросы

Меняю профессию, изучаю JavaScript, React, Redux

Такой вопрос: бывает, что некоторые самоучки учат много, а потом может оказаться, что все, что они учили, - это не то для какой-то конкретной компании и вообще ещё нужно знать вагон и тележку, чтоб взяли на определённую вакансию.

Гуглю какие-то вакансии, а там в требованиях бесконечный список знаний и умений. При взятии на работу ДЖУНА предпочтение отдаётся больше софтскилам или знанию языка программирования и надстроек языка, фреймворков?

И вообще , насколько важно знать технические основы, потому что многие гуманитарии смотрят CS50 на ютубе все, достаточно ли этих технических знаний работодателям при найме ДЖУНА?


Честно говоря, я не очень верю, что самоучки могут выучить слишком много всего лишнего - потому что помимо вашей специализации (фронтэнд) есть еще базовая компьютерная грамотность. Помните, мне недавно задавали вопрос - там девушка пришла на работу со знаниями фронтэнда, и столкнулась с тем, что коллеги стали намекать, что хоть всё и ок, но всё же на их взгляд, ей не хватает базы.

Достаточно ли CS50 для того, чтобы вас взяли на работу? - Думаю, вы сами понимаете, что CS50 - это введение в информатику, там не дают специализации - тому же фронтэнду вы потом учитесь уже где-то в другом месте. Также там не дают глубокого погружения в отдельные темы, которые могут пригодиться - ну например, в сетевые протоколы, в базы данных и так далее. Поэтому если работодатель указал в вакансии «знание сетевых протоколов» - лучше, к примеру, почитать книгу, с углублением именно в эту тему, одним cs50 не обойтись.

Вы вот спрашиваете, сколько знаний нужно джуну. В этом вопросе меня немного смущает кое-что. Вот вы пришли в качестве джуна, и, допустим, вы не знаете, что такое «память компьютера» (не вымышленный пример - спрашиваю у джуна, сколько памяти использует его программа, а он отвечает «я не знаю, что такое «память»»). Так откуда же у вас возьмётся знание базы к тому времени, как вы уже станете ближе к middle-разработчику? Ведь много учиться и совмещать это с работой уже не получится, у вас будут другие задачи. В процессе работы вы скорее всего наработаете навыки в рамках своей узкой специализации - то есть JS и всё вокруг него, а вот общую грамотность так прокачать сложнее - времени не хватит. Джун в моем понимании - это человек без опыта, но со знаниями.

Что касается требований в вакансиях - там обычно перечисляют не базовые знания, о которых я говорила в предыдущих абзацах, а конкретные технологии - языки программирования, фреймворки для работы с ними, системы контроля версий и разные тулзы, которые нужны для разработки и запуска ваших программ. Если вы открываете список вакансий и видите там кучу непонятных вам слов - рекомендую почитать и поизучать, что это такое - хотя бы на уровне ликбеза.

Но слишком бояться забора из требований тоже не стоит - работодатель обычно хочет найти идеального кандидата - то есть со знанием всех технологий, которые используются в этой компании. А на практике таких кандидатов практически и нет. Поэтому если видите, что вам знакомы 70-80% технологий, которые упоминаются в вакансии - можете смело откликаться.

Что касается вопроса - что важнее для работодателей - софт-скиллы или знания и навыки (хард-скиллы) - ну вы так спрашиваете, как будто все работодатели одинаковые. Всё зависит от того, к кому вы попадёте не собеседование. Одни готовы взять новичка с недостающими знаниями - если видят в нём потенциал, и верят, что он сможет прокачаться во всём, что не знает. Другие, наоборот - будут придираться к знаниям.

С софт-скиллами вообще всё сложно - все о них говорят, но мало кто понимает, как их проверять. Я часто слышу точку зрения, что лучше человек с сильными софт-скиллами, но со средненькими знаниями - ведь знания можно прокачать, а вот софт-скиллы не так легко. Но это не значит, что вас будет собеседовать человек, который тоже исповедует такую идеологию - все люди разные, и подходы к найму у всех отличаются.

Задать вопрос автору блога можно здесь: @hum_it_bot
Good news everybody!

Мне тут написали из GeekBrains и прислали промокод со скидкой для подписчиков канала - IT_HUMAN. До конца апреля он даёт дополнительные скидки на курсы - до 50%.

Если вас интересуют другие школы программирования, я тоже могу поискать подходящие промокоды для вас - черканите в @hum_it_bot, возможно что-то найдётся и для них
Чтобы получать больше полезных материалов по ИТ и бизнесу, присоединяйтесь к сообществу @SelectelNews 🦖
#вашивопросы

Здравствуйте! DevOps это сисадмин с элементами знаний программиста, или программист, который полностью может и заменить сисадмина? Или таковыми могут называть всех, кто знает и ту, и другую работу?

Я вижу началась путаница в терминах, всё ж таки «гибрид» программиста с админом - это скорее метафора.

Давайте разберёмся, что значит DevOps. Прежде всего, это не человек и не профессия, DevOps - это процесс, либо методика разработки и поставки готовых программ пользователю. Расшифровывается это слово как Development + Operations, development - это собственно разработка программ, а operations - эксплуатация, то есть сборка, поставка в продакшен, мониторинг за работоспособностью программ.

Представим какой-нибудь продукт, например, поисковик яндекса - Dev - это разработчики, которые придумывают алгоритмы поисковика и пишут код, а Ops - это люди, которые получают от разработчиков готовый код, создают из него сборку, готовую для выкладывания в продакшен, собственно релизят новые версии (и тогда у пользователей появляется, например, новые возможности при использовании поисковика). Также эти люди следят за специальными графиками, на которых видно, насколько хорошо работает сайт, сколько там пользователей, хватает ли на всё ресурсов, есть ли какие-то проблемы. И если проблемы есть - оперативно их решают, например, откатывают код до предыдущей версии. В общем, это люди, которые отвечают за работоспособность конечного продукта.

Что же такое DevOps? Девопс - это процесс или идеология или методика, как угодно, которая подразумевает объединение функционала Dev и Ops. Либо сближение и более тесное взаимодействие этих двух областей.

В некоторых компаниях, особенно небольших, это означает, что сами разработчики не только пишут код, но и выкладывают его в продакшен, мониторят производительность и следят за работоспособностью сервисов. Таким образом ответственность не размазывается между разными отделами - отделом Dev и отделом OPs, сам написал программу - сам позаботься, чтобы она работала.

А в других компаниях появляется отдельная профессия, така как DevOps - инженер. Чаще всего это человек, отвечающий за автоматизацию процесса деплоя программ. То есть его задача - организовать такую инфраструктуру, чтобы новая версия кода автоматически отправлялась на сборку, тестирование и, скажем, по одному нажатию кнопки - обновлялась в продакшене (и так же легко откатывалась обратно в случае неполадок).

Почему DevOps - инженеров называют смесью админов и программистов? Админами потому что - это люди, которые в том числе настраивают железо, а также всю инфраструктуру для того, чтобы на них запускать программы и приложения. А почему они как бы «на полшишечки» программисты - потому что их задача в том числе - собирать, запускать, тестировать и релизить программы и следить, чтобы эти программы работали. В их обязанность не входит собственно создавать эти программы, писать код для них, но они должны понимать - что вообще такое программа, как она работает, как из нее собрать и запустить работающий проект и какие при этом могут быть узкие места. Также DevOps-у может потребоваться умение писать хотя бы небольшие скрипты для автоматизации его задач.

Поэтому отвечая на ваш вопрос - DevOps-инженер - это в первую очередь сильный администратор, с глубокими знаниями именно тех технических аспектов, которые нужны для процесса DevOps. А процесс разработки ему требуется знать хотя бы на уровне ликбеза, Senior-программистом быть не обязательно.

И как счас называют сисадминов, что за серверы отвечают? Есть же навен ещё у них свой старший? Наподобие тимлида у программистов

Админов, которые отвечают за сервера, называют администраторами серверов (неожиданно, правда?). А старших среди них называют старшими администраторами, тех, кто руководит командой - называют тимлидами, а самых старших - руководителями отделов. Есть еще технический директор, но это обычно руководитель уже над всем IT в компании, не только над админами. 🙂

Задать вопрос автору блога можно здесь: @hum_it_bot
#вашивопросы

Я изучаю Python, по видеокурс от Tceh (Может слышали про такой?) и по книжке Свейгарта "Автоматизация рутины". И чем больше я узнаю, тем больше понимаю, что ничего не понимаю и как много еще нужно выучить. И на некоторые темы приходится тратить столько времени, и концентрации что я уже начинаю подзабывать прошлые. Было ли у вас такое? И как вы с этим справлялись? Если постоянно возвращаться к старому, то прогресс в изучении минимальный. А к другим инструментам изучения у меня в данный момент нет доступа.(Работаю в море, интернета здесь хватает на телеграмм и максимум какие-то статьи найти.)

У меня из вашего вопроса создалось ощущение, что у вас есть некий перекос в сторону изучения теории.
Ну во-первых, ничего «выучивать» не нужно - теория нужна для того, чтобы достигнуть понимания общих принципов, лежащих в основе программирования, того, как всё устроено, и использовать эти знания для написания кода - они помогают выбрать лучшее решение (например, более эффективное, и не содержащее ошибок). Сама по себе зубрёжка материала без понимания где и как этот материал применять - бесполезна.

Python - это инструмент, такой же как, например, дрель. Можно бесконечно читать какие-нибудь книги о том, как правильно пользоваться дрелью, но вряд ли в этом есть толк, если очень редко её брать в руки.

Поэтому чтобы изучить Python - решайте больше практических задач. Пишите программы, придумывайте себе новые задачи и реализуйте их. Какие программы писать? Процитирую свой же старый пост:

А что именно писать? Да всё подряд. Напишите простенькую игру (поначалу можно консольные) - виселицу, крестики-нолики, морской бой, пинг-понг. Напишите небольшой сайт для себя. Напишите календарь с уведомлениями, напишите программу со списком дел. Напишите телеграм-бота, который будет вам присылать каждый день мотивирующую фразу, или курс валют, или прогноз погоды. Пишите, всё, что угодно - любую фигню, которая вам приходит в голову.

Или вот оттуда возьмите идеи для проектов.

Ваша цель - научиться решать всевозможные задачи с помощью Python, а теоретический материал нужен для того, чтобы облегчать вам эту задачу - но и не забывайте про путь проб и ошибок, он тоже чуть ли не важнейшая часть обучения.

Задать вопрос автору блога можно здесь: @hum_it_bot