Не люблю просто так разбрасываться общими данными, но тут мне на работе попался очень частный случай, о котором я тебе хочу поведать.
Итак, представь себе компанию, которая занимается разработкой для NetSuite. Это такая американская версия 1С. Старая, хреновая, но бухгалтера её любят. Проекты, написанные в 2016 году, отлично работают под NetSuite, потому что самые свежие апдейты примерно того же года. Всем всё хорошо. Нововведения считаются дурным тоном, и народ спокойно себе работает на всём этом.
И вот ко мне в комнату заходит новый программист. С пылу, с жару. Ему 22 года, и он только что закончил колледж по профессии «программист». Отлично, говорю я, давай приведём тебя в порядок и как следует подучим, чтобы ты мог нормально работать.
Сразу хочу оговориться, что пацан этот — светлая голова, в состоянии воспринимать инструкции и готов работать над ошибками. То, что его сейчас очень сильно спасло, — это фраза «Я знаю, что колледж был бесполезным, поэтому я готов переучиваться». И он реально старается, задаёт вопросы и переучивается. Судя по всему, он уже выиграл, мы его оставили, и я с ним работаю. Но хочу поделиться опытом работы с новенькими программистами.
Я сам очень не люблю людей, которые рассказывают, что вышка — это гавно собачье, и на неё надо класть с высокой колокольни. Потому что я так не считаю. Я закончил универ в 2008 году, и я до сих пор пользуюсь данными, которые я получил на курсах. Но вот этот перец меня порадовал совсем новой для меня информацией.
Проблема
У нас есть мальчик, только что из колледжа. Я у него уже спросил, сколько он там учился и что делал. А также, сколько он за всё это заплатил.
Да, в колледж ходят 4 года подряд. Я думал, что так как на пятом курсе универа мы всё равно полгода били баклуши, а полгода писали диплом (били баклуши с умным видом), то разницы между колледжем и универом должно быть ровно нисколько. В реальности всё оказалось по-другому.
Лекции в современном колледже в США длятся по 2,5 часа в день. Всего. Это — максимальная нагрузка. И только с понедельника по пятницу. Если и бывают домашние задания, то они занимают не больше одного часа в неделю. Проектных работ не бывает. Курсовых не бывает.
Сравним это с универом. От четырёх до шести (а иногда семи) пар в день, по полтора часа каждая. Работа с понедельника по субботу, плюс курсовые и задания на дом.
Хорошо, подумал я, ну фиг с ним. Нас тоже учили всякому, типа философии и практики написания писем на английском языке. Наверняка, если оптимизировать курсы, почистить всё лишнее, то можно уложиться.
Реальная проблема
Первый красный флаг я заметил, когда новоприбывший спросил: «А можно ли мне подключиться удалённо к этому компьютеру?» Ему приходилось работать по удалённому рабочему столу, подключаясь к одному из ноутбуков в сети. Я спросил его: «Нет, а ты пробовал?» На что он ответил утвердительно. Он сказал, что пытался подключиться к компьютеру с адресом 192.168.252.11 из дома, и это не сработало.
На что я его спросил, знает ли он, что такое маска подсети. Он честно признался, что нет, не знает. Потом я спросил, в чём разница между TCP и UDP. Он ответил, что это им как-то говорили на лекции, но препод сказал, что не надо обращать на это внимание.
В результате я провёл трёхчасовую лекцию по сетям. Я начал с одного стабильного данных, на основании которых мы построили всё остальное. Я показал ему, что такое маска подсети, и как она делит сеть на подсети. Я объяснил ему, что такое роутеры, мосты и фаерволлы. Я показал ему, как производится направление пакетов во внутренней сети, как они прыгают между подсетями и что делает BGP для того, чтобы он мог пингануть Google со своего ноутбука.
Пацан быстро всё это воспринял, и даже осознал, что может подключиться к компьютеру из дома, если установит туда ngrok. После чего он заметил, что такое решение наверняка обходит фаервол, так что лучше им не пользоваться. Я был доволен, данные не прошли мимо. Но это — программист, который учился четыре года.
Копаем глубже.
Следующий флажок запустили над кораблём под фанфары. Вопрос был прост: «Ты же знаешь JavaScript?» Да, он мне сказал, что его учили писать на C#. Я тоже в универе писал на C#. Моя первая статья на Хабре, которая принесла мне тогда немалый успех, была про ADO.NET. Но даже в универе мне пришлось выучить: Шарпы, Си, Плюсы, Ассемблер, Яваскрипт, чистый PHP, ASP и ещё кучу различных фреймворков с кучей различных технологий. Ладно, да, я видел вторую войну браузеров. Я видел, как погибал IE6 и как JQuery сначала был неубиваемым стандартом, а потом превратился в бесполезную приблуду. И это всё произошло за пять лет, пока я был в универе. Ладно, IE6 и JQuery были за пределами универа, но всё остальное было в универе.
Чувак реально ни разу в жизни ничего не писал ни на чём, кроме C#. Но, погодите, подумал я, C# — это же ASP.NET, это же куча вэба. «Ты же писал для Web?» Нет, он не писал для Web.
Так, подумал я, что же это за фигня получается? Как так, за четыре года ни разу не писать для Web? А на чём же ты писал? XAML. Так, а на каком фреймворке ты писал? 4.5
Стоп, 4.5 в 2023 году? А как же .NET Core? Ну, это такая вещь, это же .NET для Linux, мы на нём по этому не писали. Писец.
Хочешь глубже?
Так, а как там с компиляторами? Понятия не имеем. Парень сам учил эти компиляторы, и сам немного поупражнялся, поэтому у него было представление о том, как это работает.
А как там с SQL? Ну, в универе его не преподавали, был только LINQ, но он, опять же, сам изучал SQL.
Ну хорошо, а что такое Git? Git — это плагин для VSCode, который позволяет скачивать код с github.com.
При этом он по-человечески очень даже обучаем, быстро и хорошо воспринимает новые данные. После двух недель работы с ним он быстро выучил JavaScript и воспринял то, как тот работает. Он хорошо усвоил разницу в основных принципах JavaScript и .NET. Он понял типизацию и её отсутствие. Научился управлять памятью и примерно понимает, куда и как копать.
Сегодня начинается его третья неделя жизни в этой компании. Он сидит и разбирается со старым Vue2 проектом. Вопрос сбора проекта из сорцов — это проблема на два дня. Для начала надо было установить Node.js и заставить ChatGPT переписать bash-скрипты в PowerShell. Потом сама установка и настройка среды. Java на его компьютере нашлась, просто потому что он её сам изучал во внеурочное время. Так что все приблуды для NetSuite (которую пилит Oracle, и которая сама Java-зависима) более-менее за день запустились.
Архитектура? Ой, не смешите меня, у меня и так губа треснута. Распределённые приложения? Нет. IPC? Даже не думайте.
А хочешь ещё глубже? Нет? А я тебя туда отправлю.
Что же в итоге? Человек реально сказал, что в гробу он видал этот колледж. Человек реально из кожи вон лезет, чтобы остаться в компании, и ещё ни разу не сказал «Я не буду этого делать». За это он заработал своё место в компании. Я буду его учить, деваться некуда. Хорошие разработчики — это полезные люди, и их надо воспитывать.
Но у него за институт висит долг в $130,000. Сто тридцать тысяч долларов. Ему двадцать два. Мне в свои 38 лет до такого долга ещё далековато. И это учитывая, что я только что умудрился импульсно купить себе Toyota Corolla 2024 с финтифлюшками, потому что мне цвет понравился, поназадолжать налоговой службе и сменить свой технологический стек с Linux и Android на топовые MacBook’и. Плюс переехать, купить новой мебели и техники в дом, заменить машинку и переделать кучу вещей в доме. Добавьте к этому 25,000 долларов, пожертвованных на благотворительность в этом году. Всё это, вместо взятого, поставило меня в долговую яму, намного меньшую, чем у этого парня.
Парень же офигительный. Но теперь мне придётся заниматься тем, что буду спасать его от последствий его образования.
Тут, если честно, я ещё подумал о всех этих статьях на Хабре о том, что нигде программистов не берут. Приходит после курсов на каком-то там акселераторе чувак, который с горем пополам знает один язык. Просится в компанию. Но это значит, что я буду тратить по 3 часа в день примерно полгода своей жизни, просто для того, чтобы его довести до состояния, когда он сможет:
1. Открыть git
2. Склонировать репозиторий
3. Изменить код
4. Дописать скрипты в базу данных
5. Закоммитить это обратно в git
6. Протестировать
У меня меньше ненависти к современным нанимателям. Когда я в 2008 году пришёл работать на свою первую работу, меня спросили написать SQL-скрипты, C# код и JavaScript. Интервью продлилось 30 минут, и меня взяли на следующий же день. Но, судя по всему, я уже превзошёл большинство современных джунов, которые очень просятся на работу.
Вопрос к клубу:
Что делать и где учить детей? Ладно, моему сейчас пять лет. Он ходит в школу, в которой ему надо разукрашивать квадратики и учить английский. Он это делает хорошо и получает неплохие результаты. Школа мне обходится в смешные 70 долларов в неделю, при учёте того, что штат Флорида спонсирует 450 долларов на образование в месяц.
Но переживать колледж? Серьёзно? Ладно, я понимаю, у чувака была программа в 4 раза короче моей программы. Но в долговую-то яму зачем его сажать? При том, что он будет знать только одну технологию, и смысла в ней будет с гулькин шиш.
В какой стране прикажете учить? Где сейчас есть универы, в которых можно за нормальные деньги научить чему угодно? Я готов отдать 130k за хорошее образование. Но не за американский колледж.
Я так подумал, и дописал мою точку зрения у себя в телеграмме. Залинкую здесь, чтобы дать идею о том, с какой точки зрения смотрю на всё это я.
Кстааати, а хотите узнать, как мне удалось выучиться на приличного программиста в универе?
Тут до меня дошло, что одно дело - рассказывать о том, как всё ужасно, а другое дело - это то, что с этим всем делать. Посему, давай я поведаю историю того, как я выучился на прогрммиста в универе.
Учился я с 2003 по 2008 годы на ДКО в МЭСИ. (Может здесь кто ещё остался?) ДКО означало Дневной, Компьютерный, Очный. Инженер-программист, математик-программист, специалист по обслуживанию и настройке программных систем. Что-то в этом роде.
В конце восьмого класса я был уверен, что закончу школу прямо там же, и пойду учиться на повара, ибо мне так хотелось. Но, родители сказали, что этого делать низзя, и мне придётся пойти учиться в универ. Хорошо, что к тому моменту я уже пытался что-то программировать и мне это нравилось.
Тут момент странный. С одной стороны, моя мама, которая сама была золотой медалисткой и закончила медицинский с отличием, пару раз рассказала мне историю о том, как она хотела быть пловчихой. У неё это очень хорошо получалось, она выигрывала соревнования, но её отец сказал “Нет” и отправил её учиться на врача. Она была очень расстроена, аргументация отца была “Пловчихи выглядят просто ужасно, у тебя мужа никогда не будет”. В итоге она выучилась на доктора, отработала 10 лет на скорой помощи, и забыла это всё, как страшный сон. С другой стороны когда меня заставили сменить профессию, я не очень сильно этому воспротивился, и просто пошёл в другом направлении, причём достаточно удачно. Повезло, наверное.
На факультет я пришёл с толстой пачкой журналов Хакер (за что был так и прозван, и исправно покупал эти журналы до 2005-го года). У меня за плечами было несколько незавершённых проектов, написанных на Паскале, умение запускать Delphi, а так же недурное понимание языка Assembler для 486 процессора.
Сам процесс обучения был 50 на 50. Некоторые учителя вызывали дикую скуку и ужас. Была одна тётя, которая в 2005 году рассказывала нам про то, как работает SQL, на примере базы данных Informix 1989 года выпуска, которая была запущена на SCO Unix, под которым работал один из серверов универа. С другой стороны у нас было несколько отличных преподавателей, которые были молоды, веселы, и давали зубодробительные, но интересный задания. Был, например, <a href="https://habr.com/ru/users/ceba/">https://habr.com/ru/users/ceba/</a> Это - вообще отдельный кадр. Помимо того, что давал неимоверно сложные, но полезные и интересные задания, переманивал нас, студентов, в свой личный блог https://blog.stanis.ru (только аккуратнее, там NSFW может быть) Этот блог работает с незапамятных времён.
Но, как бы то ни было, основной упор не в этом.
На втором курсе универа, я понял, что одна только стипендия, которая с трудом покрывала стоимость проездных, вообще не канает. Надо было искать работу. Варианта было два. Либо устраиваться гребцом в какую-нибудь компанию, и пытаться совместить учёбу и работу, либо идти работать в свой универ.
В итоге я пошёл работать в ОСПМУПИПСМГЭУЭСИ. Я уже с трудом воспроизведу смысл всех этих букв. Это был отдел обеспечения процесса образования. Короче, мы занимались тем, чтобы у всех было расписание, оно работало красиво и показывалось на сайте.
Казалось-бы, просто расписание, что может быть проще? Всё было очень непросто. Для начала давайте сыграем в игру по комбинаторике. У нас есть 6 разных зданий, 200 преподавателей, и 3000 студентов. Каждая пара должна учитывать несколько параметров:
Как проходил процесс составления расписания на пол-года? Запасавшись печеньками и чаёчком, 4-5 девочек из ОСП собирались вокруг огромного листа ватмана, в который с помощью булавок, вставляли название пар для разных групп. Две недели такого бдения позволяли сделать расписание. Потом у всего этого делалась фотка, и отправлялась программисту, который забивал это расписание в эксельку, и запускал макрос. Макрос этот создавал расписание на верхнюю и нижнюю недели, путём генерации вордовских документов, которые мы потом и выкладывали на FTP сервер.
И вот в этот момент один из преподавателей универа договорился с начальницей отделения о том, что он создаст новую систему по работе с расписанием. Для этого были наняты четыре программиста, одним из которых был я.
И тут - понеслось. Я думал, что мне придётся перебирать этот эксельчик за 15000 рублей в месяц. Ха!
Начали мы с того, что создали свои классы DALC. Data Access Logic Component. Тогда только-только вышел C# 2.0 в котором появились Generic, и на основе этого мы писали подобие Hibernate для .NET. На основе этих DALC мы писали BL - Business Logic. Всё это прикручивалось к базе данных SQL Server 2003. По тем временам - просто невероятное новшество.
Но, надо понимать, что такой проект набрал популярность, и к нему начали прикручивать новый функционал. В итоге, за 4 года проект разросся до 150 связанных таблиц в базе данных. Сама таблица расписания содержала в себе более 20 различных связей.
Ко всему этому весь код выгружался в TFS - Team Foundation Server, и его приходилось администрировать на сервере Windows 2003. Это надо было запускать на IIS, настраивать и пилить. Более того, в те времена была Вторая Война Браузеров. Когда я только-только пришёл на работу, сайты должны были работать просто на IE6, но в очень скором времени к нему прибавились Firefox и Google Chrome. Посему код для вэба должен был быть кроссплатфореным. Сайт с расписанием усложнялся каждый месяц. Плюс, новые функции и фитчи, типа “карточки преподавателя” и так далее.
В итоге, после четырёх лет в этом проекте я набрал опыта больше, чем мог себе представить. У меня было чёткое понимание того, как работает сервер совместной разработки, я мог с помощью чистого SQL сварить себе супчик. А умение строить NHibernate от начала до конца было для меня таким-же очевидным навыком программиста, как и умение дебажить код на 20000. Наш сервер обслуживал два сайта, для внутреннего и внешнего пользования. Всё было завязано на сложную систему ролей, и сервера были забекабленны дважды.
Более того, дипломная работа моя заключалась в том, что я написал алгоритм, который позволял брутфорсом составлять-таки это расписание, чтобы девочки не маялись по 2 недели. Брутфорсом его можно было взять за час. Потом - просто косметические правки в удобном интерфейсе. В итоге диплом защитился.
Когда я пришёл на своё первое место работы за пределами универа, мне в течении двух недель предложили заниматься переводом разработки на новые рельсы. Так что с таким опытом - у меня не было проблем с тем, чтобы просто начать работать в течении трёх дней.
Может быть мне просто повезло?
Залинкую: https://vas3k.club/question/24173/
Думаю, что за 10+ лет, спустя которые твоему парню понадобится колледж, изменится все, чуть менее, чем полностью. Например, список онлайн курсов/проектов от ии-ассистента, которые тебе надо закончить/сделать.
Кстати, что-то такое, минус ии-ассистент, недавно появилось для школьного образования, возможно, будет более актуально, учитывая возраст https://collinsinstitute.org/ourstory/
Да где угодно, но и в Америке полно отличных универов.
Открываем топ-60 условных универов по CS, подаемся после школы в штук 10, залетаем в самый лучший. Ну это если программиста на выходе хотим, иначе меняем на любой другой major. Чтобы были не заоблачные цены, то фильтруем только public schools. Чтобы еще лучше было, то берем свой штат, чтобы был in-state tuition. В Джорджии вот если ты местный, то очень просто попасть в топ-7 универ по стране по Computer Science будучи просто норм школьником с адекватными оценками. Конечно из другого штаты (не говоря из-за границы) гораздо сложнее. Стипух для школьников с полными грантами тоже достаточно, найти достойный уровень с полным финансированием мне не кажется большой проблемой, все осуществимо.
Описанное в посте я слышал от ребят, которые переводились из коммьюнити колледжей / слабых местичковых уников в более крупные универы. Все правда: нагрузки нет, особо ничему не учат, по факту все ради бумажки. Как бороться? Узнавать заранее, где рееально учат чему-то, а где нет. Как? Общаться с людьми. В любой другой стране ситуация будет плюс-минус идентичная.
Залетаю в тред как чувак, только что закончивший универ в Северной Америке (Канада, University of Waterloo). Признаюсь, что я по специальности не 100% кодер - учился на Mechatronics Engineering и сейчас работаю в должности mechanical automation designer. Но это скорее мой выбор, а не косяк университета.
У меня есть пост, который рассказывает, что́ примерно происходит внутри, что по деньгам и по перспективам найма на работу по окончании.
https://vas3k.club/post/17349/
В целом, технически-сильные университеты в Канаде являются своего рода читом для американских соседей, потому как качество в среднем может соревноваться с монстрами южнее, в то время как ценник намного более по карману, и долговая яма не так страшна.
В посте ты коснулся весьма правдивого момента, что формальное образование всегда отстаёт от жизни - и не важно, насколько глобально уважаемо твоё ГБОУ, просто таков закон джунглей. Сфера написания кода накладывет дополнительный эффект из-за своих особо стремительных темпов развития.
Окей, а делать-то что?
Подытоживая: реального опыта (hard skills) набираемся во время практики, а во время учёбы напрягаем социальную мышцу (soft skills) - ходим на тусовки, ищем всякий рандомный движ по поводу и без, предлагаем товарищу плечо поплакать о заваленном экзамене, и далее по списку.
А чисто ради интереса, кто прочитал пост и подумал «ну я бы так же после универа тупил»?
У меня годы занял процесс понимания того чему нас учили через моменты вроде «вон оно что, мы же это проходили у универе». Я учился не в топовом заведении, и весь упор был на теорию, которая без практики в лучшем случае оседала где-то глубоко до востребования, а чаще просто улетучивалась после сессии.
Главное что я забрал оттуда это в целом понимание что как работает на высоком уровне и умение решать проблемы, а потом это применял на настоящей работе.
Скажем так, ключевой момент касаемо образования в США для аргументации:
Если у тебя стоит вопрос "найти хорошее место образования для твоего пездюка", то рекомендую откладывать не 130к на сынка, а уже пол-мульта минимум, заводить связи для поступления в топ-5 универов по специальности, что сынка выберет, либо здесь уже предлагали хорошие варианты куда отправлять сыночку не в США.
Внезапный хак, который может сработать с точки зрения "качественное образование дешево" - университеты Европы в целом и университеты Эстонии и Финляндии в частности.
Например, в Талтех можно выучить и получить бакалавра в компьютер сайнс где то сумарно тыщ за 30 (обучение на английском разумеется). При этом я с выпусниками работаю - их уровень на порядок выше чем ты рассказываешь. Плюс обычно выглядит так - ты можешь брать и делать столько, сколько хочешь. Знаю типа, который упарывался и после универа и одного года работы ушел в Гугл сразу на "миддла".
Правда у меня эмбеддед сфера, это немного другой опыт.
В Штатах: дорогой район = хорошая школа, хорошая школа = много программ для подготовки к хорошему универу, включая их стипендиальные программы. Также в Штатах есть отдельная профессия "образовательного консультанта", который помогает выстроить набор классов-курсов-программ с прицелом на стипендиальные программы в хороших универах.
Есть много рейтингов (например, мировые и американские). Конечно там много маркетинга, но тем не менее все довольно справедливо. Разве что в Европе фокус больше на теории, а в Америке — на практике.
Согласен с @koshelev на все сто процентов.
Я студент третьего курса бакалавра в Технологическом институте Нью-Джерси, факультет компьютерных наук. Нраица!
Без понятия. Да и надо ли? Универ (по крайней мере для меня) это больше про связи, чем знания. Разумеется я бы не хотел ложиться под нож хирурга-самоучки, но вот сертификаты авторов алгоритма построения маршрута в гугл картах меня волнуют намного меньше.
Прочитав пост остался вопрос про то, а что это за колледж, где он по рейтингу? Мне кажется, условный вяжский государственный не сильно лучше обучает.
По ит уже давно существуют бесплатные школы вроде этой https://www.42network.org/ где обучают всем основном на практике и уровень трудоустройства высокий.
Если исходить из классического образования. Если есть способности, то условный топ 50 вузов будет хорошим стартом для карьеры и научит всему. Американские университеты все публикуют статистику по карьерам, причём и сейчас и через х лет. Образование такой-же продукт, который нужно выбирать. Для способных всегда есть стипендии, даже в топ 10 университета США есть need blind admission, когда сначала ты поступаешь, а уже потом по доходу твоей семьи тебе определяют стоимость.