• Стоит ли учить ассемблер для глубокого понимания архитектуры компьютера?

    alex-saratov
    @alex-saratov
    Вспомним фразу из книги "Шерлок Холмс" - " человеческий мозг — это пустой чердак, куда можно набить всё, что угодно. Дурак так и делает: тащит туда нужное и ненужное. И наконец наступает момент, когда самую необходимую вещь туда уже не запихнёшь. Или она запрятана так далеко, что её не достанешь."
    На цитаты не обижаемся.

    Изучать глубоко стоит, если Вы в дальнейшем собираетесь найти этому практическое применение. Поверхностное знание может пригодиться. А глубокое изучение без последующего применения - это трата времени. Самое дорогое в нашей жизни - это время, ибо его не купишь не за знания ни за деньги.
    Ответ написан
    5 комментариев
  • Стоит ли учить ассемблер для глубокого понимания архитектуры компьютера?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    Стоит просто порешать банальные задачки: отрисовка графики, например, на ассемблере (пишем в память vga адаптера).
    - линию,
    - косую линию,
    - размытие (aka clearType),
    - фигуры,
    - заливка фигур.

    Если каждый день по часу уделять, то 2-3 недели на такие простенькие лабораторные вполне хватит, заодно какие-то алгоритмы на стеке можно глянуть, попробовать оптимизировать.
    Ответ написан
    Комментировать
  • Стоит ли учить ассемблер для глубокого понимания архитектуры компьютера?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Учить ассемблер глубоко необязательно.
    Будет достаточно, если вы на ассемблере сможете написать Hello World, и что-нить не намного сложнее, но главное что поймете принцип работы машинного кода.

    То есть вам нужно почитать на досуге, и понять что такое инструкция, что такое регистр, что такое битность (размер инструкций), что такое такт.
    Ответ написан
    Комментировать
  • Безопасники, как вы находили свою первую работу(по специальности)?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Спросите у Кевина Митника - он профи находить работу по специальности!)
    Ответ написан
    Комментировать
  • Почему полиморфизм так работает?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Объяснить суть полиморфизма "на пальцах" довольно просто. Представьте себе класс Телефон. Его спроектировал некто в далеких 80-х, и определил в нем метод набратьНомер(). А потом другой программист в 90-х отнаследовал от него класс МобильныйТелефон и перекрыл метод набратьНомер(), т.к. грубо говоря, в новом устройстве набор производится уже не импульсно, а тонально. А потом третий программист отнаследовал от него класс Смартфон. При этом он не стал трогать метод набратьНомер(), а просто добавил методы для нового функционала, типа определитьПоложениеПоGPS() и т.д.

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

    А теперь представьте другого пользователя, нашего современника. Он вырос в эпоху смартфонов... но если ему в руки дать старый телефонный аппарат, он тоже сможет сделать звонок, т.к., опять же, знает метод набратьНомер().

    Применительно к ООП, пользователь - это переменная, содержащая ссылку на экземпляр класса. Ее тип (как она была объявлена) - это "набор знаний" о возможностях этого экземпляра. И т.к. Смартфон в своей основе является Телефон-ом, мы вполне можем дать его в руки гипотетическому пользователю из 80-х:
    Телефон устройство = new Смартфон();
    в результате чего он сможет сделать звонок:
    устройство.набратьНомер("03");
    А вот определить свое местоположение он не сможет, пока не узнает о существовании соотв. метода:
    Смартфон усовершенствованноеУстройство = (Смартфон)устройство;

    Это называется приведением типа. В данном примере у экземпляра класса уже был соотв. метод, но чтоб им воспользоваться, нужно сначала явно указать, что мы хотим рассматривать имеющееся у нас в руках устройство не как "простой" Телефон, а как Смартфон.

    P.S. Кстати, в этом примере мы затронули не только полиморфизм, но и наследование, и инкапсуляцию (пользователя "снаружи" совершенно не интересует, как именно производится набор номера - тонально, импульсно или еще как-то иначе)... так сказать, все три кита ООП в одном флаконе. И только так вообще имеет смысл рассматривать эти принципы, т.к. они по сути неотделимы друг от друга, как Отец, Сын и Святой Дух в Христианстве или же длина, ширина и высота в трехмерном пространстве :) Если это понять, ООП становится совершенно простой и естественной парадигмой программирования.
    Ответ написан
    8 комментариев