Comments 24
В чём основное веселье программирования? В получении полезного результата.
Да, я неоднократно слышал эти слова от энергичных менеджеров. Однако ж лучшим программистам из тех, которых я видел на результат нередко откровенно наплевать. Результат это для них побочный продукт процесса, от которого они получают искреннее удовольствие.
Однако ж лучшим программистам из тех, которых я видел на результат нередко откровенно наплевать
Это скорее может быть про очень хороших. Лучшие же как раз и лучшие, потому что они получают удовольствие как от процесса, так и от результата.
Хотя, конечно, все зависит от смысла слова "лучший" :)
Или от смысла слова "программист" :). Смешно, но не все понимают его одинаково.
Аналогии лживы, но я приведу одну. Вот есть у нас спортсмен, который любит ходить на тренировки и получает от этого искреннее удовольствие. А соревнования он не любит, скучные они, смысла в них особого нет, кроме как продемонстрировать окружающим правильную методику. Но иногда участвует, потому что за это можно получить приз. И, собственно, регулярно получает, без особого напряга.
изначально бесперспективной работы
Стоит заметить, что в большинстве серьезных коммерческих защит (Themida, VMProtect, и прочие) как раз используются виртуальные машины с динамическим байт-кодом
Я помню, в институте была курсовая, писали эмулятор процессора (правда регистровый). Сразу с GUI, чтобы отображались все регистры, память команд и данных, стек.
А в реальной практике был проект, когда писал виртуальную машину (эмуляция процессора, памяти и доступ к периферии), работающую внутри микроконтроллера, и компилятор с языка высокого уровня для этого виртуального процессора. Представляете, какое это удовольствие — написать
программу на собственном языке программирования в собственной среде разработки, скомпилировать собственным компилятором и запустить на собственном процессоре в реальном железе!
Пусть и "несёт", как вы выразились курсовой, но написана она блестяще :-)
Все относительно и зависит от интереса и любопытства самого человека. Кому-то скучно писать программы, которые только принесут какой-то там результат, потому что в них может быть не так много развития на самом деле. Кто-то хочет развиваться и для него это как раз весело, а кто-то — нет.
Игрострой, в свою очередь, как предметная область известен, практически, весь, в шесть слоёв покрыт каким-то диким количеством движков, делающих хорошо даже без нажатия кнопки. Весь интерес программиста — написать посредственный glue-код для ассетов из unity store и заплатить дизайнеру с композитором. Скука.
То ли дело из ничего создать full stack (процессор, ассемблер, компилятор ЯВУ, ОС), да на какой-нибудь хитрой аппаратной платформе.
Раз в год где-то в течение человекомесяца я делаю компилятор для нового языка программирования.
Первый — учебник Зубкова, рассылка уроков с wasm.ru (ох, тогда e-mail-рассылки были как хабра), и ночи неуклюжего программирования под DOS. Иногда я ностальгирую на один из немногих сохранившихся с того времени исходников, и прекрасно понимаю, что за те несколько ночей узнал об архитектуре вычислительных машин не меньше, чем за институтский курс. Впечатления сопоставимы с описываемыми автором: раньше компьютер был «чёрным ящиком», после стал понятным, хотя и сложным, устройством.
Второй раз — когда я открыл для себя Logisim. Меня захлестнуло: я залип, и запилил себе процессор, и ассемблер к нему. До сих пор жалею, что не хватило свободного времени довести штуку до желаемого состояния, но как же было увлекательно!
Меня захлестнуло: я залип, и запилил себе процессор, и ассемблер к нему. До сих пор жалею, что не хватило свободного времени довести штуку до желаемого состояния, но как же было увлекательно!
Круто. Меня тоже как-то захлестнуло, закончилось приличной дипломной работой: эмулятор процессора, архитектура которого тоже разработана мной. Вместе с микрокодом, транслятором для него, демонстрационной реализацией системы команд и ассемблера для этой системы.
Например, когда я задумался о реализации процедур в SVM, я понял, что вызов функции это ничто иное как переход с дополнительным набором правил, с которыми неявно должны согласится и вызывающий, и вызываемый. Это помогло мне понять концепцию соглашения о вызове, а волшебные штуки вроде _cdecl и WINAPI вдруг стали иметь смысл.
Вы извините, но для этого достаточно просто пописать немного код на самом обычном языке ассемблера для x86, например. Также руками заполняется стек, регистры, в зависимости от конвенции.
Моим самым важным проектом был интерпретатор байт-кода (или «как увидеть матрицу»)