Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 
Показаны сообщения с ярлыком диалог. Показать все сообщения
Показаны сообщения с ярлыком диалог. Показать все сообщения

пятница, 7 июня 2024 г.

Научный подход: Что лучше подтверждать многократно или опровергнуть 1 раз?

Такой вот диалог состоялся сегодня. С позволения коллеги опубликую его часть. Спасибо собеседнику за чудный диалог!

Люблю эту задачку, стараюсь ее использовать в работе. Счтаю упущением, что ей не уделяют должного внимания в школе.

Q: ... это гипотеза, и она может стать самоисполняющимся пророчеством, если ее попробовать подтверждать, а не не опровергнуть. Знаешь этот баяс?

A: давай)

Q: Есть загадка. Есть некоторая закономерность. Вот ее три числа из нее: 2 4 8.
Твоя задача:
1) или сказать мне какая закономерность мной задумана
2) или предложить 3 другие цифры ряда чтобы проверить подходит или нет
Я могу только так делиться с тобой инфой
на 1) вопрос "да, это загаданная мной закономерность" или "нет, это не та закономерность что я загадал"
и на второй вопрос "да, эти числа подходят под загаданную закономмерность" или "нет, не подходят"

A: арифметичская прогрессия ?)

Q: нет

A: цифры на numpad в виде ромбика?

Q: нет

A: 16 32 64

Q: подходит под мою закономерность что я загадал

A: чет я изначально подумал там 2 4 6 8, а оказся просто степени двойки)

Q: нет не степень двойки

A: ну я угадал 2 часть? нужно теперь закономерность? просто каждое число это предыдущие 2 помноженные, забыл как называется)

Q: нет это не то что загадано

A: типа фибоначчи только перемноженные. а нет, не подходит

Q: нет не чиса фибоначчи загаданы

A: 32 256 8192

Q: 32 256 8192 - подходит

A: может это просто любые четные числа?

Q: нет, не эту закономерность я загадал

A: я сдаюсь)

Q: я сейчас умничаю чуть, но так же было не просто. потом ты сможешь сделать то же с другими ребятами

A: алгоритмы не мой конёк)

Q: смотри один момент.
можно докзывать гипотезу, пытаться подтвердить ее тестами, которые сразу зеленые.
а можно попробовать опровергнуть гипотезу, и попытаться найти тест, который будет красный

A: то есть мне следовало сначала попробовать неверную комбинацию?

Q: у тебя есть идея, например степень двойки
и вместо того, чтобы ее подтвержать
2 4 8
16 32 64
128 256 512
что все будет да да да, напиши один тест, который опровергнет ее и посмотри что будет

A: а ты как среагируешь - скажешь что подходит?

Q: давай проверим - зависсит от того что я загадал

A: 9 6 3

Q: это не подходит
идея в том, что 1 фейл тест сразу отсекает гипотезу, но 10000 саксес тестов не делают того же

A: ага

Q: а баяс в том, что люди и их метод познания мира заточен by default под подтверждение - сразу выдвинуть гипотезу, посмотреть что она работает и погнали, а она объясняет только часть модели мира, и то очень поверхностно

A: есть вроде какой-то вид тестирования, в основе которого такой принцип

Q: Test Driven Development с его fail first

A: нет, я про сначала все опровержения, т.е. негативные кейсы)
то есть у тебя реальная закономерность

Q: да

A: ну мне только брутфорсом остаётся)
0 2 4

Q: подходит

A: 4 8 3

Q: 16 32 64 - true
32 256 8192 - true
9 6 3 - false
0 2 4 - true
4 8 3 - false

A: нечётные - падают

Q: а попробуй опровергни эту гипотезу?
она рабочая у тебя - и сразу могу сказать что это не то что я загадал, но попробуй это тестом покажи

A: опровергнуть гипотезу что все четные - true?)

Q: да, какой тест может ее опровергнуть, ну или набор тестов - ты не ограничен в попытках

A: можно ограничиться 2 тестами
1 1 1
2 2 2
первое упадет второе пройдет

Q: 16 32 64 - true
32 256 8192 - true
9 6 3 - false
0 2 4 - true
4 8 3 - false
1 1 1 - false
2 2 2 - false

A: хм
значит и порядок важен?
пробуем 2 3 4

Q: и это тоже гипотеза, опровергни ее
16 32 64 - true
32 256 8192 - true
9 6 3 - false
0 2 4 - true
4 8 3 - false
1 1 1 - false
2 2 2 - false
2 3 4 - true

A: 2 4 3

Q: 16 32 64 - true
32 256 8192 - true
9 6 3 - false
0 2 4 - true
4 8 3 - false
1 1 1 - false
2 2 2 - false
2 3 4 - true
2 4 3 - false

A: значит не связано с чётностью, а только порядок важен

Q: это гипотеза
или тест, или закономерность
я смогу провалидировать
даешь больше fail тестов!

A: 0 0 1
будет много тестов)

Q: 16 32 64 - true
32 256 8192 - true
9 6 3 - false
0 2 4 - true
4 8 3 - false
1 1 1 - false
2 2 2 - false
2 3 4 - true
2 4 3 - false
0 0 1 - false

A: 0 1 0

Q: отлично
16 32 64 - true
32 256 8192 - true
9 6 3 - false
0 2 4 - true
4 8 3 - false
1 1 1 - false
2 2 2 - false
2 3 4 - true
2 4 3 - false
0 0 1 - false
0 1 0 - false

A: надо проверять каждую позицию
1 0 0

Q: 16 32 64 - true
32 256 8192 - true
9 6 3 - false
0 2 4 - true
4 8 3 - false
1 1 1 - false
2 2 2 - false
2 3 4 - true
2 4 3 - false
0 0 1 - false
0 1 0 - false
1 0 0 - false

A: 1 2 0

Q: 16 32 64 - true
32 256 8192 - true
9 6 3 - false
0 2 4 - true
4 8 3 - false
1 1 1 - false
2 2 2 - false
2 3 4 - true
2 4 3 - false
0 0 1 - false
0 1 0 - false
1 0 0 - false
1 2 0 - false

A: 9 2 3

Q: ...
9 2 3 - false

A: 1 2 3

Q: 1 2 3 - true

A: ну всё я уверен
есть закономерность
каждое число больше предыдущего
я проверил все 3 позиции

Q: верно!
смотри что интересно, когда ты начинаешь генерить тесты которые будут false по твоему ты можешь получить diff между я думал А (false), а на самом деле Б (true)
вот так отсеиваются гипотезы
в этом суть научного подхода
если ты генеришь тесты которые true - то скорее всего ты будешь получать подтверждения гипотезы, что не доказывает ее правдивость
хоть 10000000 раз подтверди

A: ну это примерно как проверяют вакцины
согласен, проще сначала опровергнуть

Q: все потому что одно может включать другое просто

Q: и твоя гипотеза ок, как частный случай
а есть другие люди
и тут двоим ребятам может показаться, что не прав тот кто точно ничего общего не имеет с вашим пересечением

A: и вроде у всех всё сходится, и у каждого своя правда

Q: так и живем
одними и теми же словами описывая разный опыт
потому что у Homo Sapiens есть баясы
их много вообще


Q: А про научный подход есть видео хорошее, очень рекомендую

Если думаешь что что-то правда изо всех сил старайся это опровергнуть, если это не получится как ты не старайся - вероятно ты подобрался/алась близко к истине.

воскресенье, 26 мая 2024 г.

На заметку тем, кто хочет попасть в IT - как звучать как айтишники?

Только что пообщался с  GPT на тему рунглиша. Помню когда-то в JuJa мы с коллегами собирали для начинающих будущих джавистов словарикa технических терминов с произношением. Все чтобы ребята на собеседовании больше походили на своих. Собирали термины пару недель. Собрали много. Теперь достаточно спросить у GPT. Вот какой сегодня получился диалог у меня.

Q: Есть слово resize из него получили "рисайз". Если просклонять его по правиам русского языка, то получится "прорисайзить", "отрисайзить" и так далее. Теперь я дам тебе текст на английском. Конвертни его в подобный слен: has current or previous experience in the job function of Account Management.

A: имеет текущий или предыдущий экспириенс в джоб-функции оф Аккаунт Менеджмент

Q: как ты определяешь что тебе поменять, а что перевести?

A: В случае сленга в стиле "рисайз", обычно английские слова, которые имеют конкретное профессиональное или техническое значение, заменяются на англоязычные варианты. Таким образом, я заменил "experience" на "экспириенс", "job function" на "джоб-функцию" и "Account Management" на "Аккаунт Менеджмент".

Однако, не все слова, которые в контексте могут быть профессиональные или технические, я заменяю. Например, "current", "previous", и "in" были оставлены без изменений, потому что они являются обычными словами, применяемыми в общем языке.

Это не формальный метод перевода и зависит от контекста и знаний переводчика.

Q: If we don't have a field in json or no json at all, we just report it and continue working with an empty string without breaking down

A: Если у нас нет филда в джейсоне или вообще нет джейсона, мы просто репортим это и продолжаем работать с эмпти стрингом, без брейкинг дауна.

Q: Maven addresses two aspects of building software: how software is built and its dependencies. Unlike earlier tools like Apache Ant, it uses conventions for the build procedure. Only exceptions need to be specified. An XML file describes the software project being built, its dependencies on other external modules and components, the build order, directories, and required plug-ins. It comes with pre-defined targets for performing certain well-defined tasks such as compilation of code and its packaging. Maven dynamically downloads Java libraries and Maven plug-ins from one or more repositories such as the Maven 2 Central Repository, and stores them in a local cache.[2] This local cache of downloaded artifacts can also be updated with artifacts created by local projects. Public repositories can also be updated. 

A: Мейвен решает два аспекта билдинга софта: как софт билдится и его депенденсис. В отличие от более ранних тулзов, типа Апач Ант, он использует конвеншены для билд процедуры. Нужно специфайить только исключения. Эксэмэл файл описывает софт проект, который билдится, его депенденсис на другие внешние модули и компоненты, билд ордер, директории и реквайред плагины. Он приходит с предефайнед таргетами для выполнения определенных хорошо определенных тасков, таких как компиляция кода и его пакетинг. Мейвен динамически скачивает Джава либы и Мейвен плагины из одного или более репозиториев, например, Мейвен 2 Централ Репозиторий, и хранит их в локальном кэше. Этот локальный кэш загруженных артефактов также может быть обновлен артефактами, созданными локальными проектами. Паблик репозитории тоже могут быть обновлены.

Q: A central feature in Maven is dependency management. Maven's dependency-handling mechanism is organized around a coordinate system identifying individual artifacts such as software libraries or modules. The POM example above references the JUnit coordinates as a direct dependency of the project. A project that needs, say, the Hibernate library simply has to declare Hibernate's project coordinates in its POM. Maven will automatically download the dependency and the dependencies that Hibernate itself needs (called transitive dependencies) and store them in the user's local repository. Maven 2 Central Repository[2] is used by default to search for libraries, but one can configure the repositories to be used (e.g., company-private repositories) within the POM.

A: Центральной фичей в Мейвене является депенденси менеджмент. Механизм Мейвена по управлению депенденсис организован вокруг координатной системы, идентифицирующей индивидуальные артефакты, такие как софт либы или модули. В приведенном выше примере ПОМ, JUnit координаты ссылки как директ депенденси проекта. Проект, которому, скажем, нужна Хибернейт либа, просто должен объявить в своем ПОМ Хибернейт проект координаты. Мейвен автоматически скачает депенденси и депенденсис, которые сам Хибернейт нуждается (называются транзитивные депенденсис) и хранит их в локальном репозитории юзера. По умолчанию используется Мейвен 2 Централ Репозиторий[2] для поиска либ, но можно конфигурировать репозитории для использования (например, компани-приватные репозитории) внутри ПОМ.

Q: А теперь список слов глаголов из того же домена что текст выше, с его сленговоыми переводами.

A: Build - Билдить
Compile - Компилировать
Configure - Конфигурировать
Download - Скачивать
Specify - Специфицировать
Implement - Имплементировать
Define - Дефайнить
Inherit - Инхеритить
Declare - Декларировать
Store - Cторить
Support - Саппортить
Rely - Релайить
Update - Апдейтить
Test - Тестировать
Package - Пакетировать

Q: Еще

A: Deploy - Деплоить
Debug - Дебагать
Refactor - Рефакторить
Commit - Коммитить
Fetch - Фетчить
Push - Пушить
Merge - Мержить
Install - Инсталлировать
Import - Импортировать
Export - Экспортировать
Initialize - Инициализировать
Execute - Экзекьютить
Sync - Синкать
Validate - Валидировать
Optimize - Оптимизировать

Q: еще

A: Link - Линковать
Connect - Коннектить
Implement - Имплементировать
Integrate - Интегрировать
Use - Юзать
Reboot - Ребутить
Load - Лоадить
Run - Ранить
Code - Кодить
Design - Дизайнить
Plan - Планить
Launch - Лаунчить
Automate - Автоматизировать
Generate - Генерировать
Upload - Аплоадить
Fix - Фиксить
Monitor - Мониторить
Analyze - Анализировать
Adapt - Адаптировать
Translate - Транслейтить
Index - Индексировать
Ping - Пинговать
Update - Апдейтить

Q: а теперь то же с именем существительного для примера и глаголом в формате "пропингуй кластер", "продебаж код"

A: Cluster - Пинговать ⮕ Пропингуй кластер
Code - Дебаггать ⮕ Продебаж код
Dependency - Обновить ⮕ Проапдейт депенденси
Configuration - Изменить ⮕ Проконфигурируй конфигурацию
Algorithm - Тестировать ⮕ Протестируй алгоритм
Database - Бекапить ⮕ Пробекапь базу данных
Interface - Имплементировать ⮕ Проимплементируй интерфейс
Query - Оптимизировать ⮕ Прооптимизируй запрос
Report - Генерировать ⮕ Прогенерируй репорт
Server - Ребутить ⮕ Проребуть сервер
System - Апгрейдить ⮕ Проапгрейдь систему
Task - Автоматизировать ⮕ Проавтоматизируй задачу
Plugin - Инсталлировать ⮕ Проинсталлируй плагин
Profile - Обновить ⮕ Проапдейт профиль
Script - Запустить ⮕ Прозапусти скрипт

Q: а теперь "задефайни сториз", "закомитай код", "заєстимируй таски"

A: Stories - Дефайнить ⮕ Задефайни сториз
Code - Коммитить ⮕ Закомитай код
Tasks - Эстимировать ⮕ Заэстимируй таски
Issues - Фиксить ⮕ Зафикси ишью
Logs - Чекать ⮕ Зачекай логи
Layout - Дизайнить ⮕ Задизайни лэйаут
Report - Валидировать ⮕ Завалидируй репорт
Project - Планить ⮕ Запланируй проект
Class - Рефакторить ⮕ Зафактори класс
Request - Отправить ⮕ Засендь реквест
Configuration - Экспортировать ⮕ Заэкспортируй конфигурацию

Q: а как ты определяешь когда использовать приставку "за" а когда "про" 

A: Приставка "про" обычно используется с глаголами, которые подразумевают активное действие над объектом или процессом, которое направлено на изменение или достижение определённого результата. Это может быть что-то вроде "протестировать код" или "проконфигурировать систему".

Приставка "за" с другой стороны, чаще используется с глаголами, которые обозначают начало действия или подразумевают необходимость совершения определённого действия, как в "запланировать митинг" или "зафиксировать ошибку".

Однако, это не строгие правила, и в контексте сленга приставки могут использоваться interchangeably.

среда, 14 января 2009 г.

Что для меня "наводящий вопрос"

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

Я не знаю всего и вся :) и не могу знать. Я знаю пару эффективных инструментов которые помогают искать другие эффективные инструменты (находить решения проблем).

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

Часто это со стороны выглядит так, как будь-то бы я знаю ответ, но не говорю его. Но это не так.

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