Результаты поиска
| |
Xakep | Дата: Понедельник, 01 Июля 2019, 19:25 | Сообщение # 41 | Тема: Как начать |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата afq ( ) Ооп удобно например для программирования игр. А так утилиты писать и си хватит. Забавно, но как раз таки в программировании игр обычно не используют ООП (и это я сейчас не про unity, а про крупные студии, к слову unity тоже потихоньку мигрируют на Data Oriented Design), а предпочитают DataOrientedDesign, ООП плохо ложится в кеш процессора, и если для серверных систем это не проблема, потому-что там узкое место обычно - это БД или сеть, то в играх это критично.
Вот немного интересного видео на эту тему:
Цитата afq ( ) Тут всё просто в отличии от windows. На windows ты должен зайти на сайт, скачать программу и установить, а в линуксе ты из консоли можешь установить А в других языках есть пакетный менеджер, это намного удобнее чем тащить зависимости в систему будь то линукс или винда.
Цитата afq ( ) После этого пользоваться консолью и использовать vim. Кстати рекомендую использовать vim на начальных этапах, без каких либо дополнений в коде. Так хорошо освоишься. Я например пишу на нетбуке иногда и там ide будет проблематично, экран для кода будет маленьким, а vim консольный предоставляет весь экран для кода. Да и vim командно ориентированный редактор. В редакторе ты должен кликнуть мышью несколько опций, прежде чем дойдешь до нужной функции, а в vim ты можешь нажать esc и всё ты в командном режиме
это просто максимализм, у меня такое же было, только с emacs'ом. Во первых нужно знать инструменты, с котоырми работаешь, и IDE не исключение, сейчас любая современная IDE предоставляет возможность работать с кодом не отрывая рук от клавиатуры, да и чего уж говорить, сейчас в любой IDE есть плагин для vim, благодаря которму, твоя IDE превращается в vim, да чего уж говорить об IDE, даже в браузере есть подобные плагины.
Сообщение отредактировал Xakep - Понедельник, 01 Июля 2019, 19:26 |
|
| |
Xakep | Дата: Понедельник, 01 Июля 2019, 19:12 | Сообщение # 42 | Тема: Как начать |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата drcrack ( ) надо же, мода на хейт ООП и до сюда добралась я не хейтю ООП, более того я пользуюсь ООП, просто не для всего подряд, и часто встречался с тем, что не правильное использование ООП очень сильно вредило системе, особенно в многопоточной среде. Есть множество других интересных подходов, к примеру - функциональное программирование, реактивное программирование, Data Oriented Programming итд, не обязательно ограничиваться одним лишь ООП, можно использовать вместе разные подходы. Каждое направление учит чему-то новому и интересному. Сейчас становится довольно популярным использовать ОПП вместе с ФП.
|
|
| |
Xakep | Дата: Понедельник, 01 Июля 2019, 18:52 | Сообщение # 43 | Тема: Как начать |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата afq ( ) нафиг это ооп и прочее, если хочется сначала научиться программировать? согласен, ООП вообще переоценено и в кривых руках только навредит, но почему-то все пытаются в каждую дырку его запихать.
|
|
| |
Xakep | Дата: Понедельник, 01 Июля 2019, 18:50 | Сообщение # 44 | Тема: Как начать |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата drcrack ( ) к чему эта демагогия? ты правда не понял о чем речь, надо подробней разжевать? Не демагогия, просто интересный момент с сортировкой, ответ не относится к посылу в цитате.
Цитата afq ( ) Если надо быстро посмотреть в каком порядке функция принимает параметры, то man самое лучшее Обычно автодополнение показывает в каком порядке идут аргементы у функции, на крайний случай можно сразу в исходниках глянуть и документацию к функции (обычно сверху в виде комментариев оформляют) и порядок аргументов и их типы.
|
|
| |
Xakep | Дата: Понедельник, 01 Июля 2019, 16:11 | Сообщение # 45 | Тема: Как начать |
めちゃくちゃちゃ
Сейчас нет на сайте
| DrVooDoo, тебе для чего это нужно, для того, чтобы найти работу? или просто хочется для себя? Если хочется найти в будущем работу, то учи алгоритмы, ООП, ООД (Object Oriented Design - всякие SOLID, паттерны проектирования итд), потом нужно определиться с направлением - и там уже нужно выбирать необхоидмые инструменты, к примеру - хочешь стать backend разработчиком, один из самых простых способов - взять python и django и начать пробовать что-то делать, хочется андроид приложения писать - андроид студия + Java и опять же смотри что используют - это различные RxJava, Dagger, архитектурные компоненты итд. все это можно совмещать. Потом устраиваешься на работу джуном и тебя там уже всему научат.
Если же ты хочешь исключительно для себя - то просто начни делать что-то для себя, какой-нибудь проект, опять же - нужно определиться с целями - если ты хочешь создавать игры выбирай подходящий инструмент и делай - будь то Unity или Game Make Studio и просто пробуй, будешь сталкиваться с реальными проблемами и искать решения, и постепенно начнешь понимать как программировать в принципе. Если совсем по хардкору хочется - можешь попробовать написать свой игровой движок с нуля, либо свой компилятор, свою ОС итд, конечно же исключительно в образовательных целях, если хочется делать игру, вряд ли писать свой движок будет хорошая идея. Подобные проекты хороши тем, при реализации они дают понимание - как оно все внутри устроенно, плюс далеко не тривиальные задачи.
Цитата drcrack ( ) 99% программистов не смогут сходу написать эффективную сортировку (=что-либо сложнее пузырька), потому что это задача которая в реальной работе не встречается вообще никогда а почему сортировка пузырьком - это не эффективная сортировка? т.е. в плане производительности можно сказать только после замеров что быстрее, и зависит от задачи. К примеру - на маленьких размерах массива сортировка пузырьком дает лучший результат чем быстрая сортировка.
Цитата afq ( ) В линукс есть документация встроенная, а в windows тебе надо читать онлайн документацию. В windows больше 1000 системных вызовов, а в линукс около 400. Тебе проще будет на линуксе заниматься.
какая-то странаая логическая цепочка :D. Я вот встроенным в линукс маном не часто пользуюсь, в основном онлайн доки. Про системные вызовы вообще не понял, как это коррелируется с тем что на линуксе будет проще.
|
|
| |
Xakep | Дата: Воскресенье, 30 Июня 2019, 18:03 | Сообщение # 46 | Тема: Помогите определиться с выбором профессии |
めちゃくちゃちゃ
Сейчас нет на сайте
| Работал я и мобильным разработчиком и сайты клепал, сейчас занимаюсь backend разработкой на java/kotlin, с уклоном на работу с финансами.
Простые веб сайтики делать это одно, а быть хорошим backend разработчиком - это уже совсем другое и стать таковым не так уж и просто, backend разработчик может разрабатывать как простенькие api для SPA или тех же мобильных приложений, так и сложные распределенные системы у которых постоянная нагрузка очень высокая, и при этом нужно сохранять высокую доступность (High Availability, в русскоязычных ресурсах это по модному называется HighLoad). В общем довольно интересное направлени. Многое конечно еще завист и от команды, проекта и компании в целом.
Сейчас на рынке довольно востребованны Java и C# разработчики в качестве backend (можно устроиться и программистом игр на Unity). Мобильная разработка тоже в принципе востребована.
Лично для меня быть бекенд разработчиком в разы интереснее чем мобильным, потому-что там все довольно скучно и однообразно, заучил пару шаблонов проектирования и пользуешься только ими (очень там популярно MVP и MVVM и разработчики дальше этих шаблонов обычно ничего не видят). Еще проблема мобильной разработки, в частности - android - это количество устройств с кастомными прошивками, с кастомными UI, и даже, если ты все сделал идеально все по спекам, то у какойнить Meizu обязательно что-то где-то отвалится и придется писать граничный случай исключительно под эти платформы, сам Android SDK написан ужасно и довольно убог, особенно рендеринг, android studio - тоже ужасно глючное говно, не только всю память отожрет у тебя (у меня бывало все 16гб съедала одна только студия), но и часто просто работает не корректно, это все постоянно фиксится конечно, но отпечаток остается, учитывая что софт пишут одни из "лучши" разработчиков мира из гугла (а именно гугл накосячил, потому-что IDEA, на которой основана студия, работает хорошо).
Цитата afq ( ) Есть знания си c++, но они для собственных нужд, да и на работу с такими языками в основном берут с образованием ну это не правда, как уже писали выше - на образования смотрят редко, если смотря, возможно у джунов чаще требуют (кстати ты скорее всего с джуна и пойдешь), если же у тебя уже есть опыт и знания, то компании будет плевать на образование. А знания C/C++ - в будущем может оказаться большим плюсом в той же мобильной разработке, где нужна будет дополнительная производительность, и ЗП у людей, которые знают и Java и C++ может быть значительно выше (потому-что таких мало), но и вакансий таких тоже мало
|
|
| |
Xakep | Дата: Суббота, 29 Июня 2019, 05:27 | Сообщение # 47 | Тема: паттерны проектирования |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата afq ( ) Xakep, head first это по java, а я по c++ читал. Ну тогда остается либо банда четырех, либо выучи основы Java, основы языка не сложные, учитывая что ты на C/C++ программируешь, сможешь понять книгу и хорошую базу по ООП получишь.
Добавлено (29 Июня 2019, 05:30) ---------------------------------------------
Цитата JackNazaryan ( ) afq, в этом смысле текстовые блоги выигрывают. Жаль только, что уже не нулевые, и читать их никто не будет. Разве что на Яндекс.Зене Программисты в основном все таки предпочитают статьи (на том же хабре или medium) или доки читать, а не смотреть видео (разве что с конференций), потому-что текст намного быстрее можно прочитать и разобрать чем слушать очередного блогера. Да и крайне мало блогеров, которых хотелось бы слушать.
Сообщение отредактировал Xakep - Суббота, 29 Июня 2019, 05:31 |
|
| |
Xakep | Дата: Четверг, 27 Июня 2019, 06:42 | Сообщение # 48 | Тема: паттерны проектирования |
めちゃくちゃちゃ
Сейчас нет на сайте
| В каком месте это абстрактная фабрика? это простой полиморфизм, абстрактная фабрика - это порождающий шаблон, он должен создавать объекты, а не тупо вызывать виртуальные методы.
про абстрактную фабрику не плохо разжевано тут.
С билдером опять же, очень странная реализация, это тоже порождающий шаблон и пользуются им не так, у тебя - это просто сеттеры и ничего больше, в твоей реализации - ты инстанциируешь оъект и только потом задаешь ему параметры. Шаблон строитель - это обычно класс, который создает объект на команду build. К примеру так:
Код auto builder = new House.Builder(); auto house = builder .setName("My house") .setNumber(12) .setOwner("I") .build()
Про шаблон строитель хорошо разжевано тут.
Цитата afq ( ) Пробывал на youtube смотреть уроки на эту тематику, но они казались какими-то сложными Вероятно они не спроста немного сложные, шаблоны проектирования - это серьезная тема, нельзя просто заучить что - вот это вот фабрика и все, нужно понимать зачем нужна эта фабрика, какие проблемы она решает. Ну и уже давно есть отличная книга по шаблонам проектирования для тех, кому сложно понять банду четырех: Head First. Паттерны проектирования отличная книга с множеством картинок, разжовано очень хорошо.
У тебя же мало того что все скомкано без объяснений, так еще и не верно показываешь шаблоны. Посмотри в тех же статьях, что я скинул на структуру статьи: Проблема -> Решение -> Структура шаблона -> Псевдокод -> Применимость шаблона -> Шаги реализции -> Преимущества и недостатки. Примерно так и в твоем видео стоило сделать. Вообще стоит разобраться для начала самому, как оно работает, прежде чем пытаться учить кого-то другого. И если хочется заниматься блогерством, советую освоить ораторское исскуство, а то слушать тяжело.
|
|
| |
Xakep | Дата: Вторник, 18 Июня 2019, 10:26 | Сообщение # 49 | Тема: Уроки по программированию по си и c++ |
めちゃくちゃちゃ
Сейчас нет на сайте
| Вангую что т.к. это работа с сетью, то структуры должны иметь строгую схему, к примеру - сначала адрес приемника, потом адрес отправителя, сообщение итд. Скорее всего это просто устаявшийся способ использования конкретно этих структур, плюс функция accept принимает len, что намекает на то, что функция не будет пытаться вылазить за пределы данных структуры sockaddr_in. Это конечно все догадки. И для меня такой код считается не самым лучшим - сетевое это программирование или нет, не важно. Один из вариантов, как это можно было-бы сделать более читабельнее и понятнее:
Код void sockaddr_in_accept(? sock, struct sockaddr_in* client) { // не в курсе какой там тип нужен для sock socklen_t len = sizeof(struct sockaddr_in); accept(sock, (struct sockaddr*) &client, &len); }
void some_action() { struct sockaddr_in client; sockaddr_in_accept(sock, &client); int port = htons(client.sin_port); }
Собственно вроде как бы код делает тоже самое, но страшную идиому мы прячем под sockaddr_in_accept, и спокойно пользуемся типом sockaddr_in.
Сообщение отредактировал Xakep - Вторник, 18 Июня 2019, 12:43 |
|
| |
Xakep | Дата: Вторник, 18 Июня 2019, 09:53 | Сообщение # 50 | Тема: Уроки по программированию по си и c++ |
めちゃくちゃちゃ
Сейчас нет на сайте
| И что это за пример? ничего не понятно, какую проблему ты решаешь?
Цитата afq ( ) С чего ты вообще взял что приводить к типу не стоит? А я и не говорил что приводить к типу не стоит, другое дело, что у тебя переменные совершенно разных типов и имеют разные данные, подобный код скрывает в себе Undefined Behavior, при этом запутывает читателя. Ты пытаешься сделать какое-то подобие полиморфизма, если так хочется - делай по нормальному - возми тот же C++ и опиши интерфейс и для 2х типов уже реализуй этот интерфейс.Добавлено (18 Июня 2019, 10:02) --------------------------------------------- Кстати второй пример отличается от первого, в первом примере у тебя адрес памяти на структуру a, которую ты преобразуешь в структуру b. В твоем примере у обоих типов одинаковый размер, меняшь у одного типа размер, преобразуешь в другой тип, пытаешься прочитать член, для которого не выделено памяти и получаешь либо Segmentation Fault, либо, что еще хужеб UB - в каких-то случаешь все будет отрабатывать, либо отрабатывать криво косо, в других падать.
Сообщение отредактировал Xakep - Вторник, 18 Июня 2019, 09:59 |
|
| |
Xakep | Дата: Вторник, 18 Июня 2019, 09:44 | Сообщение # 51 | Тема: При компиляции вылезают ошибки. |
めちゃくちゃちゃ
Сейчас нет на сайте
| я не Unity разработчик, но с андроидом знаком, так вот, в ошибке пишет, что имя пакета не верное. Нужно правильно настроить как и указано в ошибке: com.YourCompanyName.YourProductName - это стандарт в мире Java.
Добавлено (18 Июня 2019, 09:45) --------------------------------------------- >> Как поменять идентификатор
Сообщение отредактировал Xakep - Вторник, 18 Июня 2019, 09:45 |
|
| |
Xakep | Дата: Вторник, 18 Июня 2019, 05:14 | Сообщение # 52 | Тема: Уроки по программированию по си и c++ |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата afq ( ) То есть я даже и не думал раньше что так можно. Ну тут нет никакой магии, только костыли не стоит так никогда делать. Ну и выше верно подметили, не стоит делать уроки по C/C++, особенно для новичков, лучше показывать как можно решать определенного рода интересные задачи на том же C/C++
|
|
| |
Xakep | Дата: Понедельник, 03 Июня 2019, 11:59 | Сообщение # 53 | Тема: Делаю hex редактор |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата afq ( ) Например какое приложение вы на работе делаете? Может есть альтернативы понавароченнее! Мы делаем специфический биржевый аукцион. мы не пытаемся сделать по навороченнее что-то, просто есть определенная ниша на рынке, которая не занята, есть новые трендовые технологии итд и есть инвесторы, которые готовы давать деньги на такие вот разработки.
Цитата afq ( ) На это можно ответить - потому что хочу делать. Вот и я хочу опыта набраться в построении интерфейсов и не только, вот и делаю что придумаю. Да это хорошая идея, с этим спорить не буду, просто имей ввиду что вряд ли кому-то понадобится твой hex редактор вот и все.
Цитата afq ( ) Я посмотрел wxHExEditor. Там нет такого что секция кода уже была бы подсвечена. Надо самому искать, а откуда ты знаешь где начало кода? Хорошо что есть диззассемблер. Не плохо бы в свой встроит, но это пока сложно для меня. Ну я думаю как минимум можно найти нужную последовательность байт (через поиск) и подсветить ее вручную. Ну и полезность данного функционала весьма спорное.
|
|
| |
Xakep | Дата: Понедельник, 03 Июня 2019, 07:45 | Сообщение # 54 | Тема: Делаю hex редактор |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата afq ( ) TLT, так ida и стоит своих денег. Не каждый захочет платить такие деньги, если не занимается этим каждый день, что анализирует софт. чтобы суметь написать хорошую альтернативу IDA, нужно как минимум иметь не плохой опыт в реверс инженеринге и иметь опыт работы в том же IDA или OllyDBG. А по поводу денег, уже давно есть куча альтернатив той же IDA, вероятно не такие удобные и навороченные (ну по крайне мере по навороченее твоего хекс редактора будут), но тем не менее они есть, как пример: Radare
Цитата afq ( ) А в каких есть посветка секций? в wxHexEditor ты можешь сам подсветить и протегировать нужные секции и последовательности.
|
|
| |
Xakep | Дата: Воскресенье, 02 Июня 2019, 05:10 | Сообщение # 55 | Тема: Делаю hex редактор |
めちゃくちゃちゃ
Сейчас нет на сайте
| hex редакторами обычно не пользуются чтобы читать объектные файлы, его используют для чтения, редактирования и анализа бинарных форматов. Какой смысл, если легко можно дизасемблировать код и читать по человечески. Ну и к слову, я думаю у тебя по функционалу и половины нету, того что есть в обычных, ну скажем я пользуюсь emacs'ом с hexl-mode (есть еще nhexl-mode, более продвинутый вроде, ном енхватает и hexl), там во первых весь функционал emacs'а с удобновй навигацие и прочее, а во вторых можно легко дописать недостающий на лиспе, как пример - твое подсвечиване секций .text. Вероятно есть более мощные специализированные hex редакторы, где можно помечать вручную секции и ставить им теги (вроде wxHexEditor так может), скрывать определенные последовательности байтов, чтобы не мешали анализу итд.
|
|
| |
Xakep | Дата: Вторник, 28 Мая 2019, 17:21 | Сообщение # 56 | Тема: Готовы ли вы выложить свой код? |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата TimKruz ( ) Т.е. "Func4 сделала что-то с 1, 2 и 3, передала ответ в Func3, которая ... в Func1, которая сохранила результат работы в v". По-моему всё просто. ну если в кратце то да, но там все же есть различные понятия такие как fold, map, filter, reduce, transduce плюс монады, паттерн матчинг итд. Лично я когда входил в ФП ничего не понимал по началу, было ощущение, как будто я впервые сел за программирование.
Цитата TimKruz ( ) Глянь fasm, там тема с макросами дошла до того, что можно программы писать только из макросов, без инструкций ЦП. :D прикольно, может какнить попробую его, действительно - это совершенно не то что я привык видеть в ASM'е.
|
|
| |
Xakep | Дата: Вторник, 28 Мая 2019, 17:16 | Сообщение # 57 | Тема: Actors |
めちゃくちゃちゃ
Сейчас нет на сайте
| Понятно, согласен в общем-то. Вообще интересный проект, ECS я люблю, время от времени задумываюсь над тем, чтобы вернуться в геймдев, если все таки надумаю попробую этот фреймворк, звездочку на гитхабе поставил, так что не потеряется
|
|
| |
Xakep | Дата: Вторник, 28 Мая 2019, 05:32 | Сообщение # 58 | Тема: Actors |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата pixeye ( ) Вот тебе ситуация. Пишут тебе игру программисты. Пишут на ооп, в лучшем случае архитектор игры принимает какие-то решения по коду чтобы все это как-то шло в русле. Но правила субъективны. Человек ушел и на его место пришел новый программер который скажет "фу бяка так нельзя" и в любом случае затратит кучу времени на то чтобы разбираться со всеми зависимостями по коду в игре и понять логику. А чем твое решение не ООП решение? ECS - это просто архитектурный шаблон проектирования, который может быть выполнен как в ООП стиле так и в любом другом (ФП к примеру). Кстати, сейчас Майк Актон разрабатывает ECS с Data Oriented Design для юнити и все официально: DOTS, не пробовал использовать этот подход? и может просто добавить необходимые удобные абстракции поверх DOTS.
Сообщение отредактировал Xakep - Вторник, 28 Мая 2019, 05:36 |
|
| |
Xakep | Дата: Вторник, 28 Мая 2019, 04:27 | Сообщение # 59 | Тема: Готовы ли вы выложить свой код? |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата Ordan ( ) Я хоть и кодил когда то давно давно на плюсах но перешел на дельфи, а после еще и на шарп. Я наоборот с дельфи на плюсы перелез потом на D, но это только для своих pet проектов, на работе я на Java, Kotlin (backend) пишу и сейчас учу Scala.
Цитата Ordan ( ) И вот, я часто слышу от плюсовиков о проблемах с памятью и никогда не понимал, что за ужасы там творятся то)
Да нет там никаких ужасов, у новичков часто бывает так, что выделят память и не освобождают, либо удалили объект, а потом в другом месте пытаются получить доступ к нему (хотя это не только у новичков, таки ошибки даже в крупных проектах встречаются, такие как blender), просто нужно уметь работать с память и иногда пользоваться санитайзерами. Сейчас в C++ предпочтительная модель работы с памятью - это RAII и она, в общем то, решает большинство проблем связанных с памятью.
|
|
| |
Xakep | Дата: Понедельник, 27 Мая 2019, 18:26 | Сообщение # 60 | Тема: Хакерский движок для линукс |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата martuk ( ) Xakep, Пишите как хотите. Если вам так удобнее - почему бы и нет, и правда. ну в своих pet проектах я таки использую английский язык, но на работе я работаю с людьми, который английский совсем не знают и если заставлять их писать комментарии на английском, то считай комментариев не бдует в принципе.
Цитата martuk ( ) Просто это признак дурного тона, не более того. в open source вообществе наверное да, и то, скорее не признак дурного тона, а подлость по отношению к другим разработчикам.
|
|
| |
|