Я написал ряд статей по истории техники, с которой сталкивался. Раз, Два, Три, Четыре. Но эти статьи были посвящены технике. А как было с наймом на работу?
Итак, на дворе 1991 год. Вы не знаете, кто вы — джуниор, миддл и синьер, потому что никто не знает этих слов. Вы не поймете слова «стек», но после дополнительных пояснений можете объяснить, железячник вы или «по программам». Скорее всего «писишки». Уже были и узкие специалисты, Novell Netware, например.
И собственно, поиск первой работы. Нет сайтов linkedin и hh.ru, leetcode... Да собственно, никаких сайтов нет.
Нетворкинг
Конечно, он. Моя первая настоящая работа была в фирме Ниеншанц, которая, в отличие от типичных кооперативов ранних 90х, которые занимались всем сразу: продажей доски обрезной, обучению английскому и абортами, практически сразу сфокусировалась на продаже компьютеров. И ей была нужна самописная CRM, как бы сказали сейчас.
Но попал я туда не просто так. Это был именно нетворкинг — еще в 89–90х я регулярно приходил в Аналитприбор и давил на клавиши компьютеров VAX. Там меня и заметили старшие товарищи, которые наверняка читают сейчас эту статью. А на VAX, в свою очередь, я попал потому, что вместо встреч с девушками просиживал штаны на "машинном времени" на СМ-4 (это аналог PDP-11).
Таким образом, оглядываясь назад, я бы сказал, что мой путь был совершенно естественным и логичным — студент начинает что‑то лабать сам, его замечают, и к концу обучения его уже знают на кафедрах и в других местах. Сейчас это выглядит более формально, но ничем не отличается по сути.
Но давайте я перейду к самому важному в этой истории — к образованию. Начну с плохого, а потом скажу хорошее.
Об образовании. Плохое
Я учился в ЛЭТИ на кафедре ФАВТ, автоматики и вычислительной техники, кафедра прикладной математики, поэтому нас называли приматами. Иначе она называться не могла, потому что еще не было дисциплин, связанных с собственно программированием.
Большую часть обучения нас мучали матрицами, потому что матрицы в СССР были частью так называемого «линейного программирования». Линейное программирование к программированию имеет очень опосредованное отношение. Это решения систем уравнений с матрицами. Отцам основателям этого виделось, что закодировав производство в потребление по категориям, можно все это загнать в машину, и она вычислит, сколько каждому человеку надо мяса и молока для счастья и откуда и куда оптимальнее везти.
Кроме того, школа программирования СССР машины не зря называла вычислительными (а ранее — счетными) — это были чистые расчеты, где строки не встречались почти никогда (кроме форматов вывода), а целые числа — изредка, как индексы массивов. Float наше все. Смотри архитектуру БЭСМ-4. Я писал об этом статью https://habr.com/ru/articles/483 264/ — Дейкстра: Величайшей победой Запада в холодной войне над СССР был переход на IBM — myth busted
IBM PC не было. Был доступ несколько часов в неделю на лабы на СМ-4 (как правило, программы на фортране), и на перфокартах на ЕС ЭВМ, где был PL/I. На пятом курсе был разговор про структуры данных, связанные списки, но это было мало, в основном мелом на доске и уже на последнем курсе. Была еще компьютерная графика: ее писали на Фортране, а в самом конце надо было вызвать
CALL ACPU
И картинка из линий печаталась звездочками. Правда, до этого этапа доводили только избранных. Для тех кто не понял, ACPU это не A‑CPU, а АЦПУ
То есть все, что студент хотел узнать про программирование — это после (или вместо) обучения. А если такого желания нет, то выпустишься из института с дипломом, но без знаний. Джуниором. Впрочем, людям это не мешало устроиться в загнивающую полугосударственную контору или забить на высшее образование и уйти в бизнес.
Все что я узнал о программировании, я узнал не в институте, а сам. И тем не менее...
Об образовании. Хорошее
.. образование было потрясающим! Дело было не в фактах — факты устаревали не менее стремительно, чем сейчас. Поэтому было совершенно не важно, что изучал человек (если обучение было техническим). Важно было, что он прошел через «вышку», которая правильным образом форматировала мозг. Сейчас мы приходим снова к этому — не факты, которые можно гуглить, а умение мыслить.
Лучшие люди Ниеншанца — это костяк из университета, физики. Поэтому очень очень долго было не важно, какое у тебя образование. Важно, что оно было. Если его не было, то не страшно, но это уже были талантливые ремесленники. Они могли быстро делать то, что им сказали и даже творить новое, но летали они очень странно и низэнько низэнько.
Если человека с высшим образованием попросить сравнить подходы в коде A и B, то он сделает графики с подписанными осями, с описанным методом тестирования и зависимостью времени работы от объема входных данных. Ремесленник скажет: «ну, я вот потестировал. В общем, A быстрее»
Один из таких талантливых ремесленников, назовем его Муркис, работал с нами в Ниеншанце. Он работал продуктивно, быстро в стиле — бери больше, кидай дальше. Рыл глубоко, и когда не нужен дизайн — надо, например, найти хитрую ошибку, ему не было равных.
Но вот один раз нам понадобился макропроцессор над T‑SQL, иногда его сильно не хватает. Один день — и Муркис выкатил решение. Оно работало, и только через пару недель я с ужасом осознал, что при анализе подстановок он не проверяет контекст, то есть если макрос abra был определен как 123, то abracadabra будет заменено на 123cad123. Насколько потенциально катастрофичен этот подход — вот как‑то ничего не щелкнуло в его голове.
FIFO
Люди не только приходили в IT, но и уходили. Тот же Муркис, насколько я знаю, много позже нашел себя в фермерстве. Другой парень не вышел после выходных и пропал. Тогда не было соц. сетей и телеграмма — дело даже не в том, что это дополнительные каналы связи, а в том, что через социальные связи человека можно хоть как‑то найти. А тот парень на звонки не отвечал, пропал с концами. Это очень беспокоило бухгалтерию, потому что он был оформлен официально. Позже он сказал, что поехал в Москву и сломал там обе руки и обе ноги и не мог связаться. Не знаю, насколько это правда. Но современные зумеры используют гостинг ничуть не меньше.
Еще один парень уволился и ушел в бизнес. Сразу в генеральные директора! Он потом говорил, что ему очень страшно, потому что он подписывает кучу документов не понимая, о чем они. Не знаю где он зарыт его дальнейшую судьбу.
К 2000 уже появился и интернет, и электронные доски объявлений стали замещать «Из рук в руки». Но поиск работы все равно долго еще оставался крайне неформальным.
Но главное — многое меняется, но многое остается тем же самым. Вы думаете нам было легче?
Комментарии (295)
quazycrazy
17.11.2024 17:12Наиболее важный момент времени - то что интернета, в его современном понимании, не было: невозможно было что-то "загуглить", скопировать ошибку компилятора в поисковую строку и надеятся что кто-то уже решил твою проблему. Поэтому приходилось работать с книжками (привет библиотекам) и разбираться до основ, а не использовать stackoverflow - отсюда и глубокие знания, который при упорстве и усидчивости образовывались как бы сами собой.
ImagineTables
17.11.2024 17:12Можно было купить замечательный компакт-диск, где в формате почему-то .arj были запакованы сотни книжек. Это был первый раз, когда мне предложили: «Псс, пацан! Хочешь выучить C++ за 21 день?».
Настоящая беда была в том, что вставить его было особо некуда. Только осознайте всю боль: у тебя есть диск с книжками, ты ещё школьник с не убитой жизнью нервной системой, у тебя адова мотивация учиться, и тебе не на чем их читать.
1998 год.
vesowoma
17.11.2024 17:12где в формате почему-то .arj
одно время это был стандарт для архивирования преимущественно для текста, пока не поднялся rar/zip
Такой диск я тоже видел, но у меня в 90ые и компа своего не было, но была возможность распечатывать на принтере на рулонной бумаге книжки про ДОС/Окна! Свитки! )
Фигурнов был бумажный...MaFrance351
17.11.2024 17:12ACE ещё такой был. Но под натиском RAR сдался.
SpiderEkb
17.11.2024 17:12Много чего было. Бы еще HA - работал медленно, но жал лучше чем ZIP и ARJ (основные на то время архиваторы). Особой популярности не получил, но на всякий случай на компе его многие держали.
CrazyElf
17.11.2024 17:12ha
использовал арифметическую компрессию, в отличие от других архиваторов, которые использовали алгоритм Хаффмана на последнем, статистическом этапе упаковки. Арифметическая компрессия лучше пакует, но она гораздо более медленная как при сжатии, так и при распаковке. Поэтому имело смысл её использовать только для чего-то мелкого и статистически неоднородного, то есть как-раз для текстов.
aik
17.11.2024 17:12одно время это был стандарт для архивирования преимущественно для текста, пока не поднялся rar/zip
Почему-то мне кажется, что для текстов чаще .ha использовался
А arj как таковой был "стандартнее" зипа, по крайней мере в наших краях. Думаю, что не в последнюю очередь из-за того, что у него был один исполняемый файл, который всё умел.
YMA
17.11.2024 17:12А еще arj умел делать многотомные архивы, что было актуально в эпоху дискет.
Zip, ha и т.д. приходилось разбивать после сжатия, а потом собирать.
ImagineTables
17.11.2024 17:12Я только со временем начал понимать, почему мои старшие коллеги видели в этом начало эпохи упадка. Они говорили: компрессия это одно, архивация — другое, а для компрессионной архивации есть конвейер команд. А всё это «чегоизволите» до добра не доведёт. «Так и вышло».
SpiderEkb
17.11.2024 17:12Ну это *NIX подход с его .tar.gz - tar архиватор, он просто объединяет несколько файлов в один без сжатия. А потом уже этот один файл сжимается gz. И получается сжатый файл .gz внутри которого несжатый .tar а уже внутри - файлы. Короче, игла в яйце, яйцо в утке, утка
под кроватьюв зайце
aik
17.11.2024 17:12tar.gz банально неудобен в использовании в сравнении со всякими там arj и т.п.
Потому всё эти разговоры, что компрессия должна быть отдельно, а архивации отдельно - снобизм олдфага.
StraNNicK
17.11.2024 17:12сейчас, когда дисковое пространство стоит дешево и его много — вероятно да.
во времена, когда было ровно наоборот, компрессия отделённая от архивации имела смысл (кажется winrar потом сделал то же самое, но скрытое от пользователя. Что-то вроде solid archive).
P.S. а чего там неудобного в tar.gz? Он же распаковывается ровно так же, как какой-нибудь 7z.aik
17.11.2024 17:12Компрессия без архивации была нужна на лентах. Таром файлы склеиваете, потом через гзип - и в ленту.
Неудобного в тар.гз то, что его надо распаковывать. В зипе я могу добавить файл, удалить файл, обновить файл. Была в своё время даже программа зип фолдерс, которая прозрачно работала с зип-архивами, представляя их как папки (потом её вроде в качестве встроенного виндового архиватора использовать стали).
А в тар.гз ничего подобного невозможно. Потому что файлы затарены и недоступны для работы с ними.
StraNNicK
17.11.2024 17:12так это не только в tar.gz же
это, собственно, в rar, 7z и как бы не везде, кроме zip
но в чём неудобство стало понятно, спасибо.aik
17.11.2024 17:12Произвольный доступ к файлам "ломает" непрерывная (solid) архивация. tar.gz - это именно непрерывный архив. Остальные архиваторы по-умолчанию непрерывных архивов не делают.
salnicoff
17.11.2024 17:12Это философия UNIX — одна программа решает одну задачу. tar — архивирует, gz — жмет, openssl — шифрует. И данные можно передавать между ними без промежуточных файлов.
Tzimie Автор
17.11.2024 17:12Наверное поэтому в Postgres вроде вначале делают бэкап, а потом жмут его. Я бы посмотрел, как они это будут делать с базой под 90 терабайт
salnicoff
17.11.2024 17:12Архивация баз — отдельная тема. Там же транзакции идут, индексация и прочее.
Tzimie Автор
17.11.2024 17:12А вот системе бэкапа это пофик, она на MSSQL просто тупо пишет страницы как есть, не интересуясь транзакциями, иногда - более дня. Потом записывает лог. И лишь при восстановлении идёт магия WAL
mordusnaglus
17.11.2024 17:12а в чём проблема? сделанный бэкап сразу через пайп отправляется в gzip, xz или ещё что-то для сжатия - промежуточных файлов при этом не создаётся. Так что хоть 90 терабайт, хоть 200 петабайт, лишь бы было куда сжатый бэкап залить (можно сразу на стриммер)
aik
17.11.2024 17:12Страшно далеки они от народа (с)
Пайпы и в досе были, если что. Но пользоваться ими исключительно по философским мотивам желания у пользователя не было.
salnicoff
17.11.2024 17:12В MS-DOS'е они были недоделанными. Насколько помню, ошибки там валились в общий output. Что-то еще не так было. Ну и пользователи были менее квалифицированными, а потом в массы пошли «Маки» и «Винды», где идеальная программа имеет всего одну кнопку — «сделай мне хорошо».
unreal_undead2
17.11.2024 17:12stderr/stdout всё таки разделялись. Но пайпы эмулировались временными файлами, всё таки памяти было маловато и многозадачности не было, так что отдельные программы в пайплайне можно было только по очереди запустить.Хотя при этом, насколько помню, в DJGPP tar zxf не работало, только gzip -d | tar xf - , после этого и в линуксе какое то время по привычке явно пайп писал.
salnicoff
17.11.2024 17:12stderr/stdout всё таки разделялись.
В MS-DOS??? Это вроде только в консолях Windows появилось.
всё таки памяти было маловато и многозадачности не было, так что отдельные программы в пайплайне можно было только по очереди запустить.
Да, однозадачность сильно мешала в некоторых случаях...
unreal_undead2
17.11.2024 17:12Стандартный command.com отдельно редиректить не умел - но внутри система их различала и способы раскидать в разные файлы были.
salnicoff
17.11.2024 17:12Раз command.com не умел, считай, что и не было. Все остальное — извращение на фоне UNIX. Мало кто этим пользовался.
aik
17.11.2024 17:12Ну и пользователи были менее квалифицированными, а потом в массы пошли «Маки» и «Винды», где идеальная программа имеет всего одну кнопку — «сделай мне хорошо».
Именно. Компьютер становился ближе к обычному человеку. А снобы, вместо того, чтобы радоваться, возмущались, что юзер тыкает кнопочки в нортоне или вообще в GUI мышевозит, а не в командной строке с пайпами мучается. :)
salnicoff
17.11.2024 17:12UNIX писали тогда, когда обычных людей к компьютеру за версту не подпускали. А для тех, кого подпускали, командная строка с пайпами — стандартный инструмент.
aik
17.11.2024 17:12Но юникс вей - это не обязательно правильный вей. А даже если и правильный, то не обязательно единственный, ведущий к цели.
Tzimie Автор
17.11.2024 17:12Угу. Взять хотя бы их древний fork(), который копировал процесс и целиком. Это им пришлось изменить. Или спорное решение с заменой маски на конкретный список файлов шеллом, до вызова собственно программы
mordusnaglus
17.11.2024 17:12fork не копирует процесс целиком, он поначалу вообще почти ничего не копирует. Потом только изменяемые страницы памяти копируются, чтобы разделить их между родительским и дочерним проектом (copy-on-write)
unreal_undead2
17.11.2024 17:12Только CoW появился далеко не сразу, до этого мучались и делали костыли типа vfork.
mordusnaglus
17.11.2024 17:12Только на днях думал, а как fork делали на XENIX, который на 8086 работал?
unreal_undead2
17.11.2024 17:12Скорее всего как в оригинальном UNIX, просто полное копирование. На PDP 11 защиты памяти тоже не было.
Tzimie Автор
17.11.2024 17:12Even with copy-on-write techniques,
fork
fails if you don't have enough memory to duplicate the memory used by the parent process. For example, if the parent process uses 2 GB of resident memory (ie, memory that is used and not just allocated),fork
fails if you have less than 2 GB of free memory left. That's frustrating when you just want toexec
a simple program and therefore will never n
unreal_undead2
17.11.2024 17:12Выглядит странно, учитывая что overcommit по дефолту разрешён (а виртуальная память в наше 64битное время практически бесконечна). Впрочем, цитата относится ко временам ядер 2.6
salnicoff
17.11.2024 17:12Не единственный. Просто так в UNIX принято. И за этим стоит смысл — минимизация кода.
aik
17.11.2024 17:12Компьютер должен быть для человека, а не человек для компьютера.
Потому, если человеку удобнее "комбайн", то надо делать комбайн. А не ссылаться на философию и заставлять его прогибаться под единый верный путь во имя минимизации кода.
salnicoff
17.11.2024 17:12Человеки (точнее — потребители) бывают разные. Кто-то любит консоль с пайпами, кто-то — окно с одной кнопкой. И каждому надо сделать свое, чтобы у них не ломалось сознание.
aik
17.11.2024 17:12Так я тоже самое пишу. Началось-то всё с того, что "старшие коллеги видели ... начало эпохи упадка " в том, что всякие там arj'и и zip'ы придумали, вместо того, чтобы пользоваться единственно верным методом "сперва затариться, потом загзипиться".
CrazyElf
17.11.2024 17:12Да,
ARJ
в основном именно поэтому использовался - чтобы делить что-то на тома. Потом то иZIP
этому научился, но какое-то время просто не было никакой альтернативы.sshmakov
17.11.2024 17:12но какое-то время просто не было никакой альтернативы.
long.exe же был
Demonter
17.11.2024 17:12long забивал дискеты до последнего сектора. А если потом на какой-то из дискет оказывался битый сектор, то всё. один из томов архива заново на нее не перепишешь. Пиши всё заново. В следующий раз конечно сбой будет на другой дискете.
axe_chita
17.11.2024 17:12ARJ в большинстве случаев сжимал сильнее и умел делить архивы на части, с точностью до байт. Все другие архиваторы того времени, включая отца всех архиваторов ZIP, не умели делать этого либо приходилось пользоваться сторонними утилитами.
Krasnoarmeec
17.11.2024 17:12Искренне сочувствую. А так да, CD в то время были как Интернет сейчас. Году в 98 как раз и стали появляться диски с pdf-ками книжкек. DjVu ещё не получил распространения.
А вот до этого информации было практически ноль. В основном были толстенные талмуды всяких переводов с иностранных языков, ну и конечно же свои авторы: Фаронов, Библиотека Системного Программиста и прочие. Какие-то обрывки информации были в виде hlp и ng (помните такие?) файлов. Сложно было с информацией.
mc2
17.11.2024 17:12Про DjVu до 2000 года мало кто слышал и по ту сторону океана. Хотя чем то полезным он не стал и до ныне.
fongostev
17.11.2024 17:12Ну как же, большая часть физической литературы, по крайней мере в моей области, как классической, так и современной,
издаётсякачается именно в djvu.Основные преимущества - компактность и возможность полнотекстового поиска.
mc2
17.11.2024 17:12Возможно. Кроме декстоп, что либо умеет читать djvu? у меня в доме нет ни одного устройства, которое без дополнительных усилий, способно читать данный формат файла.
vesowoma
Очень известный термин как минимум с середины 80х, знал каждый продвинутый пользователь программируемых калькуляторов, спасибо публикациям в журнале "Наука и жизнь"!
Tzimie Автор
Имелся в виду стек технологий
Mox
Тогда стек - это было про организацию вызовов в памяти и вообще структуры данных, а не про то, на чем пишешь
wilelf
Угу.
Push и Pop