Pull to refresh

Comments 24

UFO just landed and posted this here
«Веселье программирования» не обязательно должно вести к полезному результату. Это как разгадываение нового кроссворда, весело.
Верно, в университете для этого самое время. Помню с трепетом читал в библиотеке «Компиляторы: принципы, технологии и инструменты» (Книга дракона)
В чём основное веселье программирования? В получении полезного результата.

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

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

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


Хотя, конечно, все зависит от смысла слова "лучший" :)

Или от смысла слова "программист" :). Смешно, но не все понимают его одинаково.


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

изначально бесперспективной работы

Стоит заметить, что в большинстве серьезных коммерческих защит (Themida, VMProtect, и прочие) как раз используются виртуальные машины с динамическим байт-кодом
Ну а как еще изучать что-то? Пока не попробуешь сам написать — не поймешь.
Я помню, в институте была курсовая, писали эмулятор процессора (правда регистровый). Сразу с GUI, чтобы отображались все регистры, память команд и данных, стек.
А в реальной практике был проект, когда писал виртуальную машину (эмуляция процессора, памяти и доступ к периферии), работающую внутри микроконтроллера, и компилятор с языка высокого уровня для этого виртуального процессора. Представляете, какое это удовольствие — написать
программу на собственном языке программирования в собственной среде разработки, скомпилировать собственным компилятором и запустить на собственном процессоре в реальном железе!
UFO just landed and posted this here
Сам процесс — да, уныл, но результат — нет.

да.это лампово) до сих пор помню, как писали программы на ассемблере на занятиях по Архитектуре ЭВМ

Нам довелось писать в машинных кодах под VAX, совсем, кстати, недавно.

Пусть и "несёт", как вы выразились курсовой, но написана она блестяще :-)

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

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


То ли дело из ничего создать full stack (процессор, ассемблер, компилятор ЯВУ, ОС), да на какой-нибудь хитрой аппаратной платформе.

Раз в год где-то в течение человекомесяца я делаю компилятор для нового языка программирования.


Безудержное веселье...
Есть такой замечательный язык Forth, который представляет собой квинтэссенцию стекового подхода. Распространялся он, например, в виде небольшого com-файла (даже не exe), который содержал в себе одновременно и компилятор, и IDE, и саму исполняемую программу. Т.е. запускаем его — открывается командная строка, в ней можно писать код программы и отлаживать, а по готовности — вызывается процедура, которая все написанное сбрасывает в этот же самый com-файл.
Современные реализации Forth (Форт) создают оптимизированный под архитектуру процессора код.
Как раз хотел написать, что для понимания как всё работает каждый программист должен написать однажды свой Forth :-)
Более тонкое наблюдение: программисты делятся на два класса — кто в своей реализации Fort хранил вершину стека в регистре, и тех, кто не хранил.
Последних давно должно было поглотить очищающее пламя аутодафе! :-)
У меня дважды был подобный опыт выхода «за скобки».
Первый — учебник Зубкова, рассылка уроков с wasm.ru (ох, тогда e-mail-рассылки были как хабра), и ночи неуклюжего программирования под DOS. Иногда я ностальгирую на один из немногих сохранившихся с того времени исходников, и прекрасно понимаю, что за те несколько ночей узнал об архитектуре вычислительных машин не меньше, чем за институтский курс. Впечатления сопоставимы с описываемыми автором: раньше компьютер был «чёрным ящиком», после стал понятным, хотя и сложным, устройством.
Второй раз — когда я открыл для себя Logisim. Меня захлестнуло: я залип, и запилил себе процессор, и ассемблер к нему. До сих пор жалею, что не хватило свободного времени довести штуку до желаемого состояния, но как же было увлекательно!
Меня захлестнуло: я залип, и запилил себе процессор, и ассемблер к нему. До сих пор жалею, что не хватило свободного времени довести штуку до желаемого состояния, но как же было увлекательно!

Круто. Меня тоже как-то захлестнуло, закончилось приличной дипломной работой: эмулятор процессора, архитектура которого тоже разработана мной. Вместе с микрокодом, транслятором для него, демонстрационной реализацией системы команд и ассемблера для этой системы.
Например, когда я задумался о реализации процедур в SVM, я понял, что вызов функции это ничто иное как переход с дополнительным набором правил, с которыми неявно должны согласится и вызывающий, и вызываемый. Это помогло мне понять концепцию соглашения о вызове, а волшебные штуки вроде _cdecl и WINAPI вдруг стали иметь смысл.

Вы извините, но для этого достаточно просто пописать немного код на самом обычном языке ассемблера для x86, например. Также руками заполняется стек, регистры, в зависимости от конвенции.
Sign up to leave a comment.

Articles