Комментарии 71
Programmer тогда интерпретируется как Junior, а вот Software Engineer, как я понимаю, это что-то среднее между Senior и Team Lead?
Сейчас сам пытаюсь переквалифицироваться из web'а в геймдев и толком ничего нет. Есть всыкие курсы/tutorial'ы по конкретным движкам и т.д., а чего-то общего нет (и не уверен, что оно возможно). Тут, по-хорошему, надо по-другому: просто брать и делать игру. Сначала совсем простую, потом чуть сложнее и т.д.
Товарищу norlin — то же самое, книг по геймдеву — целые тучи. И алгоритмы, и математика, и структурирование кода, и вполне конкретные вещи типа обработки коллизий, например.
Ну, во-первых, лично для меня как раз книги – самый бесполезный источник информации в профессиональном плане. Книгами могу пользоваться только в качестве справочников. Но и то, сейчас в этой роли интернет намного лучше справляется. А просто "читать" техническую книгу я вообще не представляю как и зачем.
А видеоуроки крайне полезны в случае работы с визуальными средами, Unreal Engine, например или какой-нибудь Unity. И они очень удобны для понимания каких-то отдельных аспектов.
Советую полистать эту книгу. Главное её достоинство в том, что информация подана целостно (супротив разрозненных статеек из интернета). Там плюс ко всему высказаны достаточно меткие мысли по поводу организации общей архитектуры, которые стоит уяснить. Ну, и хороший гайд по основным вещам типа UI или управления, я остался доволен.
И соответственно советую начать с изучения Unity3d. Это неплохой старт, движок наиболее лёгок в разработке и не требователен к железу, и вместе с тем в нём есть всё, чтобы научиться делать нормальные проекты, ведь это именно программирование.
Потом уже, когда появится уверенность, можно делать самописные двиги или осваивать движки по-серьёзнее.
Главное отличие — SE занимается разработкой, руководством проектов, а программист их реализует путем написания кода
есть пример где в России программист ТУПО реализует путем _написания_ кода?
Насчёт последних предложений только предположение, а вот над компилятором уже работаю.
Дополню, что да — это визуальное «программирование»
Как думаете, сколько нужно переключателей, чтобы сделать интерфейс главной Хабра?) Не говоря уже про функциональность.
Не думаю, что уйдёт больше дня, если стоит задача просто создать копию. Больше времени потом может уйти на оптимизацию, как уже писал.
Не знаю, про какие переключатели вы говорите
Оформление рисуем курсором или пальцем.
Например, переключатель цвета блока, переключатель надо ли выделять блок при наведении мыши, переключатель цвета выделенного блока. Про подсветку текущего раздела в зависимости от URL с учетом пагинации и выборку статей из БД пожалуй и думать не стоит. Но ладно, вы предлагаете, что это будет спрашивать нейросеть. Но чтобы она спросила, надо чтобы она знала, что это можно спросить. Значит, в нее надо заложить все возможные вопросы, касающиеся создания сайтов, и потом как-то определять, какие из них задавать.
В общем, когда вы разберетесь, почему ваша нейросеть не захватит мир (то есть будет работать только для определенного круга однотипных задач), напишите статью хоть, что именно не получилось и почему. Для всех остальных, так сказать.
переключатель надо ли выделять блок при наведении мышиЧеловек хочет кнопку — нарисовал прямоугольник, залил цветом, поместил слово в центре. Ставит курсор на кнопку и заливает кнопку другим цветом. Отодвигает от кнопки — заливает предыдущий цвет.
Важно повторять любые действия минимум два раза. Нейросеть понимает повторяющиеся действия и вот у нас уже есть минипрограмма, в которой при наведении на кнопку она меняет цвет.
подсветку текущего раздела в зависимости от URL с учетом пагинации и выборку статей из БДЯ не разбираюсь в такие вещах (даже не знал о таком слове), но попробую:
Допустим, что БД — это папка, в которой 30 пронумерованных текстовых файлов, в каждом в тексте встречается habracut. Человек хочет получить три страницы по десять текстовых блоков до хабраката и пагинацию снизу.
Перетягивает первый файл в окно программы, видит его текст, удаляет часть, чтобы остался текст до хабраката. Перетаскивает второй файл, делает всё то же самое, ставит текст выше первого текста. Нейросеть выявляет шаблоны — повторная загрузка с той же папки, нарастание цифры/названия, удаление с хабракатом, установка текста выше предыдущего. Предлагает применить шаблон на остальные 28 файлов по порядку. Человек выбирает 8. Теперь есть страница из 10 текстовых блоков. Человек рисует внизу кнопку с цифрой 1, потом с 2. Программа выявляет шаблон и предлагает нарисовать за человека кнопку с 3. Человек соглашается, потом отказывается от кнопки с 4. Кнопку с 1 закрашивает и учит закрашивать другие кнопки при нажатии на них и «открашивать» предыдущую нажатую. Также удаляет все текстовые блоки, если нажата не 1. Нажимает 2, тексты пропадают, начинает перетаскивать файл 11. Программа предлагает применить предыдущий шаблон для загрузки этого типа файлов с этой папки с нарастающими именами на следующие 10 как в прошлый раз. Человек соглашается, потом нажимает кнопку 1 и тексты первой и второй страницы наслаиваются друг на друга. Теперь учим скрывать тексты второй страницы при нажатии кнопок первой и третьей. Программа выявит шаблон и при нажатии цифры 3 предложит загрузить файлы с 21 по 30.
Похоже, это примерно как объяснять на пальцах глухонемому =)
— как фильтровать статьи по разделам «все подряд / по подписке» (причем содержимое раздела «по подписке» у каждого пользователя разное)?
— как задать, что текущий раздел не должен подсвечиваться при наведении?
— как отображать всплывающие окна (и как их вообще нарисовать, чтобы программа не путала их с основным интерфейсом)?
— как отображать новые статьи, мы ведь их не перетаскивали при обучении?
ну и т.д.
Вопросы риторические, просто задумайтесь.
Не говоря уже о том, что на самом деле все происходит гораздо проще — берем номер страницы из URL, пропускаем (N-1)*10 статей, берем 10, рисуем активную страницу другим цветом. Как именно берем и рисуем — тут уже появляются SQL, HTML, и другие аббревиатуры, которые ваша нейросеть должна знать и уметь применять.
БД это не папка, и все остальное не имеет смысла.Наверно, БД может быть большим терабайтным образом-файлом не в текстовом виде и зашифрованным. Значит человеку надо сделать «прослойку-дешифратор» между БД и программой, и вот смысл мною написанного остаётся.
— как фильтровать статьи по разделам «все подряд / по подписке» (причем содержимое раздела «по подписке» у каждого пользователя разное)?В текстовых файлах остались тэги, их и переносим. Если ОС, то она увидит шаблон, что человек соответственно переносит тэги к тем же загруженным текстам в программе.
Если не ОС, а программа, то придётся снова загружать первые два текстфайла и уже удалять всё, кроме тэгов. Программа предложить загрузить остальные и оставить тэги в том же месте у текстовых блоков, как у первых двух.
Человек собирает список нужных тэгов (например на отдельной странице, открываемой по кнопке «По подписке») и удаляет все текстовые блоки, в которых этих тэгов нет. Если программу учили загружать новые текстфайлы по мере появление на странице 4, то для проверки нарочно загружаем 31ый текстфайл с ненужными тэгами. Программа загрузит — удаляем текстблок или отменяем действие. Вот уже повтор, связь, шаблон, корреляция.
Если надо переключаться между разделами, то стандартно уже делаем две кнопки сверху и учим удалять ненужные текстблоки при нажатии «По подписке». Хочу отметить, что у программы есть слой для невидимых элементов. Список тэгов можно собирать в него и программа будет держать их только в памяти.
— как задать, что текущий раздел не должен подсвечиваться при наведении?Да банально как с кнопкой — при наведении он подсветится, а человек обратно перекрасит. Переключаемся в другой раздел и повторяем — вот и шаблон, программа спросит применить ли это ко всем остальным кнопкам в ряду.
— как отображать всплывающие окна (и как их вообще нарисовать, чтобы программа не путала их с основным интерфейсом)?Наверно имеются в виду окошки при наведении на ник хабраюзера? Всё рисуемое — отдельный объект, вот почему программа «жирная» вначале. Есть чёрный квадратик, пририсовываем от него чёрную линию — это всё равно два разных объекта. Если мы хотели один сплошной объект, то придётся подвигать их вместе — двумя пальцами на каждой или переместив и собрав оба в конечной точке в тех же положениях. Программа выявит повторяющиеся координаты элементов и предложит соединить. Стоит отметить, что это для обычных людей, для продвинутых есть ПРО-режим, в котором, как в векторном редакторе, можно удалить соприкасающиеся границы.
— как отображать новые статьи, мы ведь их не перетаскивали при обучении?А вот это меня озадачило надолго =).
В папке появляется файл 31 (переносится или создаётся), человек переносит в окно программы. Создаётся текст 32. Если ОС, то она заметит, что уже два раза человек перенёс файл, отмеченный ею как новый. Передаст это программе, та предложит грузить только новые для неё (информация об уже загруженных файлах доступна и для ОС). Если не ОС, а программа, то при переносе файла сохраняет и список файлов исходной папки. При новом переносе сравнивает. Отмечает, что человек переносит только новый файл. Т.е. ОС за всем следит и всё знает, а вот программа вынуждена сама собирать информацию об окружении.
все происходит гораздо проще — берем номер страницы из URL, пропускаем (N-1)*10 статей, берем 10, рисуем активную страницу другим цветом. Как именно берем и рисуем — тут уже появляются SQL, HTML, и другие аббревиатуры, которые ваша нейросеть должна знать и уметь применять.Это уже дело сети и компилятора, от человека-непрограммиста всё это скрыто.
Первая и единственная пока сложная задача — генератор псевдослучайностей. Как объяснить нейросети, обученной выискивать шаблоны, что в этом случае шаблона нет? =)
Примерно куда копать уже знаю, что истинной случайности нет, а так же нужны диапазоны.
Ну если вы хотите, давайте продолжим.
Значит человеку надо сделать «прослойку-дешифратор» между БД и программой, и вот смысл мною написанного остаётся.
У статьи в базе данных гораздо больше параметров, чем название и содержимое, как у файла. Например, пользователь, который ее написал. И вот надо уже указывать нейросети, на какие свойства обращать внимание, на какие нет. А перед этим надо их еще задать, чтобы программа их сохраняла. Привет, работа программиста по проектированию БД.
В текстовых файлах остались тэги, их и переносим.
Если файл текстовый, как определить, что это именно тег, а не слово из статьи? Привет, специальные форматы и их обработка.
Кстати, как вы собираетесь хранить эту информацию для каждого пользователя?
Программа загрузит — удаляем текстблок или отменяем действие.
Как она должна угадать, что дело именно в тегах, а не содержимом статьи? Кстати, как вы собираетесь ее учить искать все статьи с определенным текстом? И с пагинацией, да.
Да банально как с кнопкой — при наведении он подсветится, а человек обратно перекрасит.
Не, вопрос больше был в том, как определить, что текущий раздел сейчас такой-то? И что дело именно в текущем разделе, а не в том, залогинен пользователь или нет.
И еще один вопрос. Вот мы выбрали цвет, навели мышку на кнопку, нажали мышкой, закрасили. Как различить ситуации "должна закрашиваться при наведении" и "должна всегда быть таким цветом"? Мышка-то в обеих ситуациях над кнопкой. И вдогонку — как сделать, чтобы кнопка закрашивалась только при нажатии на нее мышкой?
Программа выявит повторяющиеся координаты элементов и предложит соединить.
Ну круто, мы их соединили, открываем страницу, окно отображается сразу без всякого наведения. Мы же прямо поверх основного интерфейса рисовали. Привет, работа со слоями как в Photoshop.
Если ОС, то она заметит, что уже два раза человек перенёс файл, отмеченный ею как новый.
Я создал 10 файлов с интервалом в 1 час. Как определить, какие из них новые, какие старые? Когда новый файл становится старым?
Это уже дело сети и компилятора, от человека-непрограммиста всё это скрыто.
Я имел в виду, что нельзя сделать такую нейросеть.
Смотрите, у вас человек должен и векторную графику знать, и уметь нейросеть обучать, знать что означает каждый пункт в выборе, который она предлагает, задавать логику поведения элементов, еще и по 20 раз повторять, чтобы нейросеть шаблон запомнила. То есть не каждый, кто умеет обращаться с компьютером, сможет сделать себе сайт. То есть, такая нейросеть это особый вид визуального программирования.
Оптимизировать то, что получается, не получится. Потому что проще выкинуть и написать заново. Потому что для правильной работы используются абсолютно другие подходы.
Если файл текстовый, как определить, что это именно тег, а не слово из статьи? Привет, специальные форматы и их обработка.Даже если тэги не окружены в спецсимволы, а просто идут подряд через запятую в конце текста — это уже шаблон, такая строка сильно отличается от текста выше.
Кстати, как вы собираетесь хранить эту информацию для каждого пользователя?Не понял, какую информацию? О том, как обрабатывать тэги? Писал выше, p2p. Или «как в программе хранить для каждого пользователя этой программы свои тэги». Проясните.
Как она должна угадать, что дело именно в тегах, а не содержимом статьи?Вначале идут простые проверки и предлагаются простые варианты. Из текста быстро выявит шаблоны, что отрезки начинаются с заглавной буквы, могут иметь знаки препинания и заканчиваются точкой. А в конце текста есть строка со словами, выбивающаяся — начинается с маленькой, запятая через каждое слово. Эту часть проще проверить с такими же частями других текстов, так и выявится разница. Только потом идут сложные проверки. Не исключаю, что может ошибаться вначале.
как вы собираетесь ее учить искать все статьи с определенным текстом? И с пагинацией, да.Вводим этот определённый текст и начинаем удалять те текстблоки, в которых их нет. Про 10 текстблоков на страницу программа уже знает, наверно придётся учить удалять лишние кнопки 2 и 3.
как определить, что текущий раздел сейчас такой-то? И что дело именно в текущем разделе, а не в том, залогинен пользователь или нет.Это слишком сложно для меня, визуала =) Не могу уловить ход ваших мыслей. Зачем определять раздел? Какое «дело»? Причём вообще логин? %) Если он не залогинен — что меняется? Вы про «Интересные»? Про то, что Интересные до логина — не по интересами человека? Я не знаю, как выбираются Интересные — по рейтингу?
Вот мы выбрали цвет, навели мышку на кнопку, нажали мышкой, закрасили. Как различить ситуации «должна закрашиваться при наведении» и «должна всегда быть таким цветом»? Мышка-то в обеих ситуациях над кнопкой. И вдогонку — как сделать, чтобы кнопка закрашивалась только при нажатии на нее мышкой?Закрашивание есть только в режиме создания/редактирования, в нём не запоминаются последовательности для программы. Чтобы кнопка закрашивалась при нажатии надо навести курсор к кнопке в обычном режиме, нажать на неё и не отпуская переключиться в режим редактирования. Тем самым остаётся «застывшая» информация о нажатии. Теперь закрашиваем кнопку. Можно повторить для другой кнопки.
Ну круто, мы их соединили, открываем страницу, окно отображается сразу без всякого наведения.Наверно, дело в неописанной мной паузе — режиме редактирования. Наводим курсор на ник, переходим в режим редактирования/паузы, рисуем что надо, выходим в обычный вид программы, отодвигаем курсор, снова заходим в режим и удаляем окно. Теперь окошко появляется только при наведении.
Я создал 10 файлов с интервалом в 1 час. Как определить, какие из них новые, какие старые? Когда новый файл становится старым?ОС отметит для себя, что последний — новый, но для программы, грузившей до этого 30 файлов, эти 10 будут новыми, нет? Программа хранит же список файлов папки и сверяется.
у вас человек должен и векторную графику знатьНет, неровно нарисованный круг или квадрат система предложит выровнять. Про ПРО-режим забудьте, я стараюсь от него избавиться.
уметь нейросеть обучатьДостаточно знать, что программе надо показать разницу.
знать что означает каждый пункт в выборе, который она предлагаетПунктов не предлагает, только уточнение.
задавать логику поведения элементовНу мы рассматривали сложный случай, в геймдеве легче должно быть.
еще и по 20 раз повторять, чтобы нейросеть шаблон запомнила.Вы суммировали все повторы в тексте что ли? Два-три повтора же на каждый шаблон.
такая нейросеть это особый вид визуального программирования.Да, показать разницу -> проверить поняла ли, если нет, то повторить. Причём, очень быстрое программирование, сборка программы из шаблонов действий. Даже может заставить человека задуматься, например что означает «новый», как было выше.
База данных — это сложный пример, не каждый человек будет заниматься таким
Заданием свойств статьи будет заниматься любой, кто захочет сделать систему создания статей — хранить ли пользователя, который создал статью, хранить ли дату создания, и т.д. Аналогично и с любыми другими сущностями. Это называется проектирование.
Даже если тэги не окружены в спецсимволы, а просто идут подряд через запятую в конце текста — это уже шаблон
Ну так как отличить статью с тегами от статьи без тегов, у которой в последнем предложении несколько слов через запятую?
Не понял, какую информацию? О том, как обрабатывать тэги?
Какой пользователь на какие разделы подписан. Кстати, теги и разделы это не одно и то же.
А в конце текста есть строка со словами, выбивающаяся — начинается с маленькой, запятая через каждое слово.
Во-первых, есть статьи без тегов, во-вторых, это может быть частью текста. Например, частью текста статьи про теги.
Дело не в том как обучать нейросеть, я имел в виду, что без структурированного хранилища вам не обойтись.
Вводим этот определённый текст и начинаем удалять те текстблоки, в которых их нет. Про 10 текстблоков на страницу программа уже знает, наверно придётся учить удалять лишние кнопки 2 и 3.
Как программа должна догадаться, что признак именно отсутствие текста, а не отсутствие картинок например? Еще один переключатель? А если текст встречается во всех статьях? Тогда удалять страницы не надо.
Кстати, мне не очень понятно, почему вы в очередной раз пишете про удаление чего-то. Возможно я открою вам секрет, но при переключении страниц со страницы ничего не удаляется, страница полностью генерируется заново со всей необходимой информацией. Это гораздо проще, чем добавлять/удалять туда-сюда отдельные части.
Зачем определять раздел? Какое «дело»? Причём вообще логин?
— Как задать, что текущий раздел не должен подсвечиваться при наведении?
— Да банально как с кнопкой — при наведении он подсветится, а человек обратно перекрасит. Переключаемся в другой раздел и повторяем — вот и шаблон.
Человек взял и перекрасил кнопку на странице. Как нейросеть должна определить, из-за чего он ее перекрасил? Как она будет определять, какой раздел сейчас активный?
отодвигаем курсор, снова заходим в режим и удаляем окно
Только окно не должно пропадать, если мышка находится поверх него. А в каких-то других случаях должно. Еще один переключатель заранее заложенный вопрос в нейросети?
Программа хранит же список файлов папки и сверяется.
У нас миллион статей, предлагаете все копировать в программу? А еще есть разные разделы. А еще статью можно удалить.
Я же говорю, ваш вариант нельзя оптимизировать, можно только полностью переписать. Потому что подходы у вас неправильные.
Нет, неровно нарисованный круг или квадрат система предложит выровнять.
Зачем неровно. Банально нарисовать два прямоугольника одинаковой ширины. Группировка линий, размещение блоков — это приемы работы в векторном редакторе. А уж растягивание блоков при разворачивании окна, это ближе к знанию верстки.
Пунктов не предлагает, только уточнение.
Неважно, будет ли там вопрос с тремя пунктами или три вопроса с вариантами да/нет. Все равно надо понимать, что означает каждый. Неважно, сайты это или геймдев, в геймдеве тоже есть сущности и хранилища данных, и отрисовка этого всего на экране.
Вы все непонятные вопросы спихиваете на нейросеть как на волшебную палочку. О том и речь — искусственный интеллект такого уровня будет аналогом живого специалиста.
В общем, я вам рекомендую изучить программирование, и не писать больше глупых комментариев с обвинениями программистов в мировом заговоре и замедлении технического прогресса.
Но без картинок и текстом сложно тут объяснять, статью написать запланировано на будущее. К тому же я уже слишком много раскрыл, извиняйте.
Да, я всё спихивают на нейросеть, но пытаюсь донести, что она относительно простая, она реагирует на повторяющиеся действия/события.
Про заговор и уж те более про замедлении технического прогресса ваши выдумки, я писал что невыгодно автоматизаторам автоматизировать собственную профессию.
Спасибо за критику. Вы будете первым, кому я изложил свои наработки. Надеюсь, это обсуждение войдёт в историю, готовьтесь =)
Представьте, что человек «объясняет» компьютеру особым образом что хочет
Это как бы и есть программа. Неважно, пишете ли вы ее на ассемблере или на формализованной версии русского языка. Чем меньше формализован язык, тем больше неоднозначностей в трактовках. Чем подробнее вы объясняете «особым образом» все неоднозначности, тем ближе у вас описание задачи к ТЗ (которое якобы «не понадобится создавать»), и затем к программе.
Пока компьютер не научится понимать смысл, вы будете закладывать в него этот смысл сами. А когда научится и будет сам задавать вопросы, это уже будет ИИ, но это будет аналог живого специалиста.
А когда научится и будет сам задавать вопросы, это уже будет ИИ, но это будет аналог живого специалиста.Что и требуется же? ИИ необязателен, достаточно нейросети. Смыслом будет небольшой набор правил об ограничениях человека, например, что он воспринимает только то, что на экране (не за пределами), что не увидит объект на фоне того же цвета, что не успеет увидеть появившийся и исчезнувший объект, не может нажать и отпустить клавишу в пределах одного опроса, и т.д. Нейросети достаточно сверяться с ним, ну и корректировать его под каждого человека.
Все неоднозначности решаются либо прямо по ходу создания, либо во время пользования программой. Т.е. почти нет границы между созданием программы и его использованием, а потом и редактированием. Рекомпилятор встроен либо в каждой такой программе, либо в ОС, в которой они исполняются.
Например, человек заставил кружок двигаться и возится с ним далее. Программа/ОС по списку ограничений человека увидит, что если круг укатится за край экрана, то человек больше не увидит круг и взаимодействовать с ним не сможет, поэтому спросит что делать. Человек может захотеть не отвлекаться и проигнорирует все уточнения. Тогда Программа/ОС оставит уточнение на будущее, когда реально случится такой случай и программа остановится. Вся информация о неоднозначности теперь не нужна и удаляется. Так со временем программа будет ускоряться и худеть, но можно заранее ускорить это либо самим пользователем, либо сторонним программистом.
Смыслом будет небольшой набор правил об ограничениях человека, например… и т.д.
Для вот этого «и т.д.» были созданы куча компьютерных наук, включая и нейросети. Что говорит о том, что набор правил все-таки большой. Чтобы выбирать из него те правила, которые надо уточнить именно сейчас, нужен также анализ смысла, либо полная формализация всех возможных действий и понятий.
-человек с такой-то вероятностью не увидит появившийся пиксель на экране с таким-то dpi, и если экран залит такими-то цветами.
-человек не успеет нажать на кнопку, если оно исчезает в течение такого-то времени после появления. Да что там — даже навести не успеет.
-человек не может моментально сосчитать все точки на экране.
-человек не может увидеть разницу между этими оттенками цвета.
…
Может кто-то где-то уже изучал такое?
Представьте, что человек «объясняет» компьютеру особым образом что хочет, и ПК тут же создаёт минимально жизнеспособную программу
Это и называется программированием — объяснение компьютеру особым образом того, чего хочет человек.
Инструкция компьютеру — что он должен сделать — в том или ином виде — это программа.
Человек рисует на экране
Это и есть программирование в данном случае. Есть уже лет 30 как графический язык программирования, военные использовали при разработке софта под МиГ и емнип.
а нейросеть по ходу пытается понять.
Если она настолько разумна, что может понять требования человека (т.е. составить условное ТЗ и перевести его в код), то она пройдет тест Тьюринга и тогда человек вообще не нужен. Как потребитель в том числе.
Она лишь ищет шаблоны.
а вообще есть же всякие конструкторы сайтов и тд и тп… что то не спасло это никого, и программистов меньше не стало.
А ваша фантазия про «оптимизации» далека от реальности потому, что заведомо плохой алгоритм скорее всего проще просто выбросить, частями или полностью, чем пытаться его допилить. Тогда какой смысл? Проведя аналогии с тем же вебом: сейчас есть CMS, которые могут выполнять некоторые общие задачи и в некоторых рамках кастомизируются. Но если проект нестандартный, то изначально CMS рассматривать не будут, т.к. переделка может встать дороже специального проекта.
Кто ты по професии: Разница между «Programmer», «Software Engineer» и «Computer Scientist»