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

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

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

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

На бесплатных курсах если есть code review - то он заключается в том, что ваш код читают другие студенты курса. Это лучше, чем ничего, но не настолько полезно - они такие же новички, и откуда им знать, как должен выглядеть хороший код? Я проходила один такой курс по играм на Python на курсере - и там ревьюеры обычно просто ставили «ок» и писали что-то в духе «ты молодец». Но часто даже такого на курсах нет - есть только автоматизированная платформа, куда вы загружаете свой код, и она его проверяет на корректность работы. А то, что код выполняет свою задачу еще не значит, что он хорошо написан.
#вашивопросы

Я начинающий программист. Знаю +/- немного C#, python, а сейчас вообще изучаю разработку сайтов с хостингами, https, базой данных потянуло. Вопрос: как я могу получить свой первый доллар на программировании в интернете, без фриланса? Неужели единственный выход - монетизированная игра на unity?

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

Почему считается большой ошибкой "перескакивать" с одного языка, на другой? Почему нельзя себя попробовать и в Front-end'е(html), и в Gamedev'е в Unity(C#)?

А кем считается? Я не считаю это ошибкой, по крайней мере на стадии обучения. Я сама проходила курсы по всему подряд без разбора - Python, C, C++, Java, даже всякую экзотику вродe Ruby, Haskell и ряда Lisp-подобных языков. Пробовала android-разработку, но как-то не пошло, и я её забросила. Ни о чём из этого не жалею - это помогает шарить в разных языках и подходах, в частности в функциональном программировании, а не только в ООП. Так что имхо пока учитесь - пробуйте всё подряд, почему бы и нет?

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

Но это совсем не значит, что вам нужно всю жизнь заниматься только чем-то одним. Через условно 3-5 лет вполне можно сменить направление, если появится такое желание. А вот переключаться на что-то новое каждый месяц-полгода непродуктивно.

А у вас есть примеры того, когда человек устраивался на работу в it сферу после прохождения курса?
И если есть, то на каких платформах?


Есть такой пример - это я. Училась я лет 7 назад на всевозможных курсах, которые попадались под руку - coursera, edx, stepik, mit online, stanford online и так далее. Это сейчас появилось много онлайн-курсов, которые предлагают программу на год-полтора, включая ментора, работу в группах, разработку проектов, приближенных к жизни - а тогда их практически не было, поэтому я просто проходила всё подряд.

Задать вопрос автору блога можно здесь: @hum_it_bot
Мне тут несколько раз жаловались на очень токсичную среду в комментариях на Хабре. Что тут нужно понимать. Некоторые люди тратят своё время на обучение, саморазвитие, приятные хобби, общение с друзьями и семьёй. Кто-то посвящает свое время тому, чтобы упорядочить свой опыт и поделиться им с другими людьми (как авторы хороших статей на том же Хабре). А кто-то тратит своё время на срачи в комментариях и хаяние других точек зрения, наверно это как-то помогает им поднять чувство собственной значимости. Каждому своё. Так что ищите полезную информацию, и игнорируйте бесполезный негатив. 🙂
Хейтеры курсов

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

Ну что значит «кидалово»? Возьмём какие-нибудь курсы, которые длятся полтора года. В чём там кидалово? Вместо настоящего преподавателя там будет кассир из пятёрочки? За полтора года никого ничему не будут учить? А чем там люди вообще тогда занимаются полтора года - строят финансовые пирамиды и вкладываются в МММ? Слушают мотивационные речи в духе Тони Роббинсона? Мантры поют?

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

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

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

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

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

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

Думаю, вопрос тут упирается в деньги - большая цена создаёт завышенные ожидания. Поэтому, ещё раз - никого не призываю идти и тратить деньги - сначала подумайте и оцените риски. И смотрите на курсы реалистично - это обучение. Обучение требует в первую очередь самостоятельных усилий. Курсы призваны облегчить ваше обучение и оптимизировать его. Это не значит, что весь материал можно просто «записать» в вашу голову без усилий с вашей стороны, как это было в фильме «Матрица». Успех в итоге зависит только от вас.
Дебаггинг

Недавно мне писал подписчик по поводу одной учебной задачки. В ходе решения ему нужно было проверить, что строка s содержит в себе только латинские буквы (ascii).

Для решения этой задачи требовался цикл примерно вот такого вида (неважно, на каком языке)

for (int i = 0; i < l; i++)
{
// Здесь код с проверкой, что каждый символ строки s (s[i]) соответствует нужной раскладке
}


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

Знакомая ситуация?

Что в таких случаях НЕ надо делать: не надо вносить в код беспорядочные изменения, надеясь, что «а может так заработает?», «а если так?», «а если эти строчки местами поменять?».

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

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

for (int i = 0; i < l; i++)
{
log(«loop iteration start»);
log(i);
log(l);
log(s);
log(s[i]);
// и так далее

log(«end of iteration»);
}


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

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

Из хардовых утилит - есть консольная gdb, используется для C, C++ и некоторых других языков. Для других языков программирования есть свои аналоги.

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

Так что не игнорируйте ошибки, а учитесь их отлавливать и исправлять.
#вашивопросы

А изучали ли Вы , и пригодилось ли Вам такие темы как, числа Фибоначчи, факториалы, и двоичная система (вроде не сложная тема для гуманитариев)?

«Не сложная тема для гуманитариев» звучит как будто гуманитарии - это что-то вроде умственно отсталых, и для них нужно выбирать максимально «щадящие» и адаптированные темы, что-то вроде «Библии для детей». 🙂 Но ладно, перейдём к сути.

В этом вопросе мне не совсем понятно, что значит «изучали» - если речь идёт об углублённом изучении математических тонкостей, связанных, скажем, с числами Фибоначчи или факториалами - то нет, не изучала. А если речь о понимании определения - то да (а что там, собственно, изучать?).

Числа Фибоначчи - это последовательность чисел, в которой каждое последующее число равно сумме двух предыдущих: 0, 1, 1, 2, 3, 5, 8, 13 и так далее. На вычисление чисел Фибоначчи (в том числе на разработку более эффективных алгоритмов для ее решения) любят давать учебные задания по программированию - я такие решала.

Факториал какого-либо числа - это произведение всех чисел от 1 до самого числа, включительно. Например, факториал числа 6 (записывается 6!) равен 1 * 2 * 3 * 4 * 5 * 6 = 720. На факториалы тоже иногда дают задания по программированию, например, я как-то писала реализацию факториала на ассемблере. И второе, где встречаются факториалы - это в анализе алгоритмов - там важно понимать, что факториал от n - это ОЧЕНЬ большое число и алгоритм, у которого сложность выполнения приближена к факториалу от n - это очень-очень медленный и неэффективный алгоритм, на больших числах он будет вычисляться, скажем, сотни лет или дольше.

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

Что же касается двоичной системы - её понимать нужно, так как все вычисления и все данные в конеченом итоге хранятся именно в двоичной системе - то есть, в последовательности ноликов и единиц. Отличие двоичной системы от всем привычной десятичной в том, что в ней меньше цифр (всего две: 1 и 0), а устроена она так же, как и десятичная. Также имеет смысл разобраться с восьмеричной системой (oct) и с шестнадцатеричной (hex) - на самом деле они все строятся одинаково, просто в двоичной системе всего 2 цифры, в восьмеричной их уже 8 (от 0 до 7), в нашей основной десятичной 10 (0-9), а в шестнадцатеричной - 16 (0-9, a, b, c, d, e, f) - a - это число 10, b - 11, c - 12 итд. Например, ff - это число 255 в шестнадцатеричной системе счисления, а не бессмысленный набор букв)

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

Задать вопрос автору блога можно здесь: @hum_it_bot
Вот поэтому я и советую всем начинать с чего-то более сложного, а потом переходить на простое. Python по большому счету после более сложных языков и учить специально не придётся - можно сразу начинать на нём писать, сам выучится. )
Друзья! Если вы присылали свой вопрос мне, а ответ не получили - ни в канале, ни лично - вероятно, ваш вопрос затерялся среди множества других. В таком случае не стесняйтесь, присылайте ваши вопросы еще раз, чтобы уж наверняка: @hum_it_bot
«Для того, чтобы стать старшим разработчиком нужно 3 года опыта, или соврать в резюме». Правда ли это?

Нет, это чьи-то влажные фантазии. В IT в конечном счёте котируются только скиллы, а не умение врать.

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

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

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

В общем, сказки это всё - в хорошую профессиональную команду старшим разработчиком кого попало не возьмут - разве что по какому-то досадному недоразумению. Да, если речь идёт о сельской библиотеке или об онлайн-магазине, в котором работают ровно 3 сотрудника - там возможно всякое, людей мало, разбираться в тонкостях некому и некогда, поэтому там могут довериться и начинающему специалисту (для вас это может и плюс - наберётесь опыта, а для самой конторы - такое себе).
Товарищи, мои подписчики нашли ещё одну версию курса CS50 в переводе на русский язык.
Для тех, кто тут недавно и ещё не в курсе - это бесплатный гарвардский курс по введению в Computer Science, с которого я всем советую начинать знакомство с IT и программированием. Ниже привожу все ссылки с ним:

1. https://online-learning.harvard.edu/course/cs50-introduction-computer-science?delta=0 - тут оригинал курса, лучше всего проходить его, но если ваш уровень английского не позволяет, тогда можно рассмотреть варианты в переводе на русский

2. https://javarush.ru/quests/QUEST_HARVARD_CS50 - тут перевод этого курса от javarush

3. https://www.youtube.com/c/OnlineUniver - а эту ссылку прислали мне вчера, говорят, там есть перевод не только лекций cs50, но и всех дополнительных коротких видео.

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

Ассемблер простой язык или сложный? Стоит ли входить в программирование с него? Что б сразу было понимание зачем это всё высокоуровневое и фреймворки.

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

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

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

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

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

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

Задать вопрос автору блога можно здесь: @hum_it_bot
P.S. К предыдущему посту.

На счёт Data Science - да, это сейчас модно и востребованно. Но дата-саентисты не могут существовать без программистов. Так что чем больше на рынке дата-саентистов, тем больше нужно инженеров (в значении Software Engineer) и DevOps инженеров.

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

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

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

Есть ли какие-то школы, которые предоставляют именно услугу менторства в программировании? Дело в том, что я самостоятельно прошла несколько курсов и более менее умею гуглить, и могу написать небольшую программу, которая, например, будет стандартные таски к story в Джире создавать, но иногда возникает необходимость задать вопрос в духе "как к такой задаче подступиться?" или "что почитать?" или "где у меня пробелы?", что бы ту же книгу, курс, статьи выбирать основываясь на том чего не хватает.

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

Имеет ли смысл учить сразу Vue вместо React? Так как по слухам Vue становится все более популярной опцией для фронтенда.

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

Мое образование и текущая работа связана с профессиональным владением английским языком. Может ли хорошее знание английского языка дать хотя бы небольшое преимущество для прохождения «джуновской мясорубки» при трудоустройстве?

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

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

Друзья, чуть-чуть в сторону от IT-тематики: хочу пригласить вас в канал, в который мы с админами дружеских блогов будем скидывать честные обзоры на всё подряд - книги, курсы, технику, косметику, товары с Алика, сервисы доставки еды, всевозможные приложения и тому подобное. Прежде чем что-то покупать, всегда полезно почитать отзывы. Заходите: https://news.1rj.ru/str/bloggers_try
#вашивопросы

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


Я не могу принимать за вас такие серьёзные решения, поэтому отнеситесь, пожалуйста, к моим словам просто как к мнению, а не как к совету.

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

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

Что же касается синтеза медицины и IT, это вполне возможно.

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

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

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

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

Давно назрел вопрос. А какими навыками (имеются ввиду хардскилы) владеете лично вы, будучи разработчиком ПО?

Чтобы ответ не превратился в сухое перечисление терминов, как в резюме, постараюсь не только рассказать, с какими технологиями я работаю, но и для чего они нужны. Ответ занял аж три поста.

Для тех, кто только начинает и может испугаться длины списка: 90% всего перечисленного я не изучала заранее, а осваивала уже в процессе работы, когда возникала такая потребность - и всё не так сложно, как может показаться на первый взгляд. Наверно, примерно так выглядит стэк любого бэкенд-разработчика со стажем более 3-5 лет.

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

Языки программирования
Больше всего я работала с Python и сопутствующей экосредой - Django, rest framework, tornado и др - всё это используется для написания бэкенда и различных микросервисов.

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

Эпизодически приходилось работать с Javanoscript и React - для единичных задач на фронте, с lua, PHP.

Языки командной оболочки
Это по сути тоже языки программирования, а нужны они для взаимодействия с операционной системой, в основном для решения задач администрирования (пример такой задачи: запускать каждый день в полночь скрипт, который удаляет ненужные файлы на диске).
В Linux это, к примеру, bash. а в Windows - cmd - но он очень корявый и неудобный, поэтому когда я освоила Powershell - работа с виндой стала в разы приятнее.

Операционные системы
Естественно, это linux - чаще всего семейства debian (в том числе ubuntu), реже red hat (centOs). И иногда еще alpine, в случае с докером (про докер будет ниже). С Windows Server тоже приходилось работать, в дальнейшем хотелось бы такого опыта избегать. 🙂

Базы данных
Больше всего я работала с PostgreSQL (бесплатная), меньше - с микрософтовской SQL Server (платная). Постгрес продолжаю нежно любить.

NoSQL
Я не фанат NoSQL-баз данных, и считаю, что очень и очень многие задачи успешно решаются на основе стандартных реляционных баз данных. Но одно время приходилось работать c Redis.

Системы контроля версий
Тут всё стандартно - git. Гит нужен для того, чтобы хранить код проекта, включая всю историю изменений. Он позволяет в любой момент отменить любые изменения и откатиться к более ранней версии. И еще он позволяет разным разработчикам одновременно менять код одной и той же программы (в разных ветках).
[продолжение предыдущего поста]

Брокеры сообщений
Расскажу, для чего нужен RabbitMQ.

Например, у нас есть веб-сайт, который позволяет конвертировать и сжимать изображение. К нам приходит пользователь, и загружает через сайт свою картинку, которую он хочет конвертировать из png в jpeg, уменьшить масштаб на 50% и еще сжать. Картинка попадает к нам на бэкенд, и на бэкенде запущены 3 микросервиса (небольших программы) - 1 из них умеет обрезать картинку, другой - конвертировать, а третий - сжимать.

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

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

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

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

Поэтому и были придуманы docker-контейнеры. Контейнер - это как бы маленький линукс (любой версии, на выбор) - который мы запускаем внутри своей операционной системы. На этом маленьком линуксе мы устанавливаем все настройки и зависимости, которые нужны, чтобы программа работала правильно. И в итоге что на своём компьютере, что на сервере мы запускаем программу внутри этого докер-контейнера - и неважно, где запускаем, работать программа будет одинаково. Освоить докер не сложно, главное для начала - освоить линукс.

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

CI/CD

СI/CD расшифровывается как continuous integration/continuos delivery - и по сути это набор инструментов, который позволяет быстро обновлять ПО. Например, можно настроить процесс так, что когда программисты изменяют код в git-репозитории, после каждого изменения автоматически запускается сборка приложения, затем тесты, а дальше - замена старой версии программы на новую в продакшене, а в случае, если во время деплоя происходит сбой - приложение автоматически откатывается до предыдущей версии. Для этой цели я работала с Jenkins, но есть и другие аналоги, например, gitlab.
[окончание предыдущего поста]

Мониторинг и логи

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

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

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

В каких организациях чаще всего работают программисты/разработчики, например владеющие python на уровне junior?
Если смотреть блогеров, которые освещают это дело, так у всех офисы Microsoft, где диванчики и настольный футбол, светлые студии и бородатые мужчины в свитерах.
Но ведь не везде так. Есть и гос организации, например больницы, заводы, образовательные организации, которым необходимы так же программисты и администраторы, и где будет далеко не такая (имхо) атмосфера)
Где конкретно Вы начинали свой путь?


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

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

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

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

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

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

А шаблонных бородатых айтишников в свитерах не встречала ни разу и нигде (откуда вообще взялся этот стереотип?). Ладно, бородатые бывают, но не в свитерах. А чаще всего айтишники всё же бреются, носят футболки и джинсы. 🙂

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

Как и где создать свою информационную систему для учёта документов? В общем, обычная десктопная программа , в какой среде/программе/технологии лучше всего начать писать для новичка, который мало ещё шарит за это все 🙈

Подробностей по этому вопросу у меня нет, так как девушка, которая задавала этот вопрос, сначала прислала вопрос, а потом забанила бота (зачем вы это делаете?) - и уточнить детали у неё я не смогла. 🙂

Так что отвечу, на вопрос - на чем написать «обычную десктопную программу». Если программа пишется под Windows - можно использовать C# и Visual Studio. Также можно использовать любой другой язык общего назначения - скажем, Java или Python - они подойдут не только для windows, но и для других ОС.

А есть ли какие нибудь способы заработка в интернете? Я очень буду признателен если есть какие нибудь варианты

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

Привет а подскажите пожалуйста как обучиться андроид разработке, какой язык изучить (мне говорят что джава устарел и надо Котлин учить)?

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

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

Если человек дуб в операционках, то учебник «Линукс для чайников 2007 г.» пойдет или устарел?

Книги по IT-тематике вообще очень быстро устаревают (кроме неустаревающей классики). Даже те, что выпущены недавно, часто уже содержат неактуальные сведения - всё потому, что пока книгу отредактируют, переведут, напечаютают и выпустят - за это время уже выйдет несколько новых версий операционной системы, новые версии языков программирования или библиотек для них и так далее. Это касается даже новых книг, так что чего можно ожидать от книги 2007 года?

Скорее всего, часть информации, которая там опубликована, относится к дистрибутивам Линукса, выпущенным до 2007-го года. Это не значит, что в книге нет ничего полезного - вполне возможно, она неплохая. Но какой процент информации там уже устарел - сказать сложно, зависит от того, какие темы там освещаются и в каком объёме. Если эта книга уже есть у вас дома - полистайте, что вы от этого теряете? А вот на счет покупки сложно сказать, есть ли в этом смысл.

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