Pull to refresh
4
0
Олег @playermet

Программист

Send message

У меня на цифровом блоке настроены глобальные хоткеи foobar2000. Без них непривычно совсем.

В начале статьи смешиваются в кучу две разные сущности - язык для начала обучения программированию, и язык на котором предполагается работать.

Когда речь идет об обучении программированию, выбор между C и Python не должен стоять. В любом учебном заведении на специальностях связанных с программированием студенту будут преподаваться сразу несколько языков. Потому что одним языком все основные сущности просто не покрыть. При этом нет необходимости зазубривать эти языки до "production ready", достаточно основ (досягаемых буквально за неделю-две) покрывающих цель изучения языка.

Если бы я мог составить себе из 15-летнего прошлого список обязательных языков для ознакомления, он бы выглядел так:

Pascal; Ради переменных, типов, управляющих инструкций, функций, и прочих основ. Потому что он одновременно близок к псевдокоду, бьет по рукам, не дает стрелять в ногу, со статической строгой типизацией. А современный PascalABC покрывает вообще большую часть перечисленного далее.

С; Ради вездесущего C-подобного синтаксиса, удобства изучения голых указателей, побитовых операций, изучения алгоритмов и структур данных, всяких системных API и библиотек.

Один интерпретируемый язык из Lua, Python, JS. Я бы советовал Lua в реализации LuaJIT. Ради собственно знакомства с интрепретацией, JIT, GC, неявной слабой динамической типизацией, функциями первого порядка, корутинами, замыканиями, интернированием строк, встраиванием в C, биндингом к C, и т.д..

Один managed язык из C#, Java. Я бы советовал C#. Ради знакомства с ООП, дженериками, многопоточностью, рефлексией, и т.д.

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

Собственно, примерно эти языки мне и преподавали, причем примерно в том же порядке. Только было еще много других - C++, VB6, PHP, 1C, и почему-то не было ничего из managed, с ними я уже сам позже ознакомился.

После обучения основам программирования по списку примерно как выше, у человека уже будет базовое представление о минимум о 2-3 "боевых" языках, в которые можно будет углубиться согласно собственным предпочтениям или обстоятельствам. При этом легко можно будет перешагивать основы других языков в рамках структурной и объектной парадигмах.

Видимо, закодировано оно тоже было с помощью ChatGPT.

Мясной программист использует его локально, там где это требуется. При этом псевдокод все равно очень технический, и в итоге переводится на какой-то реальный ЯП, а затем может еще и покрываеться тестами на этом же ЯП. В статье же предполагается, что вообще весь "код" писать будет "непрограммист" просто естественным человеческим языком.

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

Код - это не более чем формализованное описание требований того что должен сделать компьютер. Можно ли его заменить более многословным, неформальным естественным языком с двоякостями интерпретации, которые менеджер будет набирать голосом и молиться что он ничего не забыл, перечислил все в правильном порядке и т.д. и т.п.? Можно. Станет ли разработка быстрее (с учетом числа попыток и проверкой соответствия всем требованиям), при сохранении надежности и уровня потребления ресурсов? Крайне сомнительно. Пока не появится общий искусственный интеллект, который будет буквально мыслить и помнить все в точности как обычный мясной программист, это не более чем мечта. А если/когда появится, то во-первых не факт что он обойдется дешевле человека, а во-вторых заменить им можно будет буквально всех.

Лично меня IT-термины, слэнг и жаргон не раздражают, но вот корежит от ухода в сторону канцелярита и формальности. Например, вместо "подумай над X, потом напиши в телегу" говорят "проведи работу по анализу X, по завершению подготовь и отправь в телеграмм отчет", при том что подразумевают именно первое. У меня после них приступ синдрома самозванца. А, еще бесит слово "ретеншн".

В качестве соли для второго хеша можно взять хоть номер дела, хоть дату, да хоть первый хеш. Главное, чтобы хеша было два сразу, это уже не позволит использовать существующие методы подбора для одного хеша. Эффективных (способных выдать результат к моменту когда он еще имеет ценность) методов, которые позволяют подбирать данные под совпадение двух хэшей сразу, насколько мне известно сейчас нет.

Там речь о другом. Результирующая строка MD5 записана алфавитом из 36 символов (26 букв латиницы + 10 цифр), а ее длина составляет 32 позиции.

Достаточно хранить MD5 оригинального документа и MD5 документа к которому прибавили какую-то соль. Даже так получить коллизию будет практически невозможно. А уж с заданным необходимым смыслом изменения так тем более.

Тем что я не робот, и не могу просто выключить восприятие чего-то. Эти финтифлюшки туда вставлены не просто так, а потому что они оказывают какое-то психологическое воздействие на пользователя, по принципам схожим с теми которые завлекают лудоманов в казино. Лучшее что можно делать не выключая их это заниматься через раз, постоянно сбрасывая счетчик на 0.

У этой программы есть еще один фатальный недостаток - игровая механика с непрерывной серией. Когда-то давно я установил это приложение, пол года держал серию, а затем у меня три дня не было то ли света, то ли интернета, и весь мой трудом нажитый "игровой прогресс" поделился на ноль (и даже купленный предмет на пропуск для не помог). С чего я словил дикую дизмораль, снес приложение, и больше не собираюсь его ставить, пока там не появится возможность выключить к хренам все эти игровые финтифлюшки.

Формулирование нового определения не делает старый неверным.

Дело не в формулировке, а в сути конкретного принципа, которую она пытается донести.

Но не совсем понимаю какую мысль ты хочешь до меня донести.

Мысль очень простая. Принцип описанный в вашей статье очень полезный, но его нет в SOLID, и никогда не было. Это просто другой принцип. Это практически перевод фрагмента цитаты Мартина выше.

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

Да много чего бесит. Например, когда нельзя открыть меню посреди катсцены или нет ожидания нажатия после загрузки локации. Или когда предметы делают списком и их влазит только 10 штук на весь экран, при этом в него не влазят их длинные названия (привет, Fallout 4). Ублюдочные консольные интерфейсы с кучей переходов. Карты, по которым ничего нельзя понять или найти. И т.д. и т.п..

Из последнего, играл в Wolfenstein II - The New Colossus. Размер субтитров микроскопический и это нельзя изменить, буквы банально сливаются с задним планом. Но что хуже всего, так это комбинация возможности подбирать всякую хрень с абсолютно отвратительным контрастом в левелдизайне. Приходится каждые пять метров останавливаться чтобы посмотреть, не пропустил ли ты чего. Это при том, что в игре есть встроенная кнопка подсвечивающая маркер задания. Почему бы блин не сделать, чтобы она подсвечивала и предметы в области экрана? И еще вишенкой на торте дебильное решение заставить игрока вручную подбирать броню и патроны с земли и трупов. Есть же вроде правило для начинающих геймдизайнеров - если при каком-то выборе игрок всегда выбирает один вариант, то этого выбора быть не должно. Метаемые топоры вообще куда-то пропадают с убитых противников. Как такое может быть в современном AAA-шутане?

Судя по отзывам, они обещали open world но не осилили его, хотя это не то чтобы рокет-сайенс фича. Обещали MMO, и этого там тоже нет. Обещали survival, но и его там не оказалось. И вообще почти ничего нет судя по отзывам - холодного оружия, работающих лестниц, объемного звука, и т.д. и т.п. При этом игру пилили целых пять лет, и она в значительной части состоит из готовых ассетов. Не понятно чем они вообще занимались все это время.

Шел 2023 год, а в статьях до сих пор используют неверное определение и объяснение принципа Single Responsibility, которое к тому же висит в русской википедии (в англоязычной пофиксили). И это при том, что Мартин еще в 2014 выпустил статью, в которой попытался разъяснить принцип. А затем сделал это еще раз, в книге Clean Architecture 2017-го:

Of all the SOLID principles, the Single Responsibility Principle (SRP) might be the
least well understood. That’s likely because it has a particularly inappropriate name.
It is too easy for programmers to hear the name and then assume that it means that
every module should do just one thing.


Make no mistake, there is a principle like that. A function should do one, and only
one, thing. We use that principle when we are refactoring large functions into
smaller functions; we use it at the lowest levels. But it is not one of the SOLID
principles — it is not the SRP.


Historically, the SRP has been described this way:
A module should have one, and only one, reason to change.


Software systems are changed to satisfy users and stakeholders; those users and
stakeholders are the “reason to change” that the principle is talking about. Indeed,
we can rephrase the principle to say this:
A module should be responsible to one, and only one, user or stakeholder.


Unfortunately, the words “user” and “stakeholder” aren’t really the right words to
use here. There will likely be more than one user or stakeholder who wants the
system changed in the same way. Instead, we’re really referring to a group—one or
more people who require that change. We’ll refer to that group as an actor.
Thus the final version of the SRP is:
A module should be responsible to one, and only one, actor.

Now, what do we mean by the word “module”? The simplest definition is just a
source file. Most of the time that definition works fine. Some languages and
development environments, though, don’t use source files to contain their code. In
those cases a module is just a cohesive set of functions and data structures.

Наниты угрожают юнити чуть более чем вообще никак. Подавляющее большинство выпускаемых игр на юнити это не гиперреалестичные AAA-шутаны с миллионами полигонов, а что-то с половиной пунктов из: мобильное, двухмерное, стилизованное, индюшатина.

Бинарник может:

  • подтянуть другой бинарник своей платформы и запустить

  • подтянуть скомпилированную заранее в свою платформу функцию и слинковать

  • вызвать установленный в систему компилятор и передать сгенерированный файл

  • вызвать встроенный в систему язык программирования (например, PowerShell)

  • вызвать установленный в систему язык программирования (например, Python)

  • иметь запас настраиваемости логики с достаточной для задачи свободой

  • иметь кастомную виртуальную машину и при необходимости DSL к ней

  • иметь полноценный встроенный компилятор (например, TinyCC)

  • иметь встроенный интерпретируемый язык (например, Lua)

  • JIT-ить функции соответствующими фреймворками (например, AsmJit)

  • JIT-ить функции по хардкору из инструкций платформы вручную

В CMake есть переменные, есть условия, есть циклы, есть типы данных, есть математические операции, есть подпрограммы, и т.д. и т.п. Я терпеть не могу встроенный язык CMake, и мечтаю о том чтобы его заменили на Lua, декларативный вариант с JSON или обрубком синтаксиса инициализации переменных C++ по готовым типам, объявленных в хедерах сответствующей версии (чтобы его мог обрабатывать линтер любой современной IDE С++). Но блин, по какому конкретно признаку встроенный в CMake язык не является языком программирования, и чем он является тогда?

Information

Rating
3,864-th
Location
Украина
Date of birth
Registered
Activity