[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.819 Reply
File: tumblr_kpcw2lXdmD1qzpwi0o1_500.jpg
Jpg, 51.59 KB, 500×314 - Click the image to expand
edit Find source with google Find source with iqdb
tumblr_kpcw2lXdmD1qzpwi0o1_500.jpg
/s/, пишет тебе школьник, надеюсь на твою доброту.
У меня чуть ли не с пеленок есть мечта влиться в коллектив разработчиков игр программистом. И сейчас у меня одиннадцатый класс, выбор вуза и все такое. В общем-то, вуз я выбрал, пойду на матмех.
Но меня смущает, что до сих пор из всех языков я знаю лишь Pascal, да и то на школьном уровне.
Напрасно ли я беспокоюсь, и не грешно идти учиться на программиста, почти ничего не зная?
Но в любом случае, какие языки стоит учить в первую очередь? С++, я так понимаю, ужасен и отвратителен, но ведь на нем как раз игры и пишут в современном мире?
И какую литературу стоит читать? Все книги по программированию, которые мне попадались были либо слишком сложны, расчитанные уже на профессионалов, либо же наоборот не приносили в голову ничего нового - все в школе проходили.
>> No.820 Reply
> У меня чуть ли не с пеленок есть мечта влиться в коллектив разработчиков игр программистом.
Я еще не видел ни одного школьника, не мечтающего влиться в коллектив разработчиков игр программистом.
>> No.821 Reply
>>820

От остальных я отличаюсь тем, что действительно мечтаю об этом давно, пусть и не с самых пеленок, да, но лет с пяти-шести точно. Ну, и к тому же, мне нравится программировать, постоянно на разные олимпиады по информатике езжу и все такое.
>> No.822 Reply
>> No.827 Reply
File: XKCD-295__.png
Png, 44.12 KB, 400×336 - Click the image to expand
edit Find source with google Find source with iqdb
XKCD-295__.png
>>819
> Напрасно ли я беспокоюсь, и не грешно идти учиться на программиста, почти ничего не зная?
В моём вузе полна группа ничего не соображающих долбоёбов, так что не бойся.
Да на С++ пишут игры в современном мире, но это просто грёбанная традиция. Как уже говорили -- SICP.

Альзо, Python, довольно таки няшен. Плюс библиотека Pygame позволят тебе начать писать мелкие 2д игрульки.

С++ -- знать наверное надо. Но только после того когда ты научишься программировать на человеческом языке. (Scheme/Python/Haskell/OCaml)
>> No.828 Reply
>>819
> У меня чуть ли не с пеленок есть мечта влиться в коллектив разработчиков игр программистом
> программистом
Программистом лучше не надо. Нудная и неинтересная работа.
>> No.829 Reply
>>828
Пруфы, хуле.
>> No.830 Reply
>>827
> Альзо, Python, довольно таки няшен. Плюс библиотека Pygame позволят тебе начать писать мелкие 2д игрульки.
Там есть поддержка опенгл, так что ограничений в виде "2д" нет. Впрочем, для 3д есть еще биндинг для какой-то другой большой специально для 3д либы. Огр3д, штоле.
>> No.832 Reply
>>830
Анон, я имел ввиду такой гемдев, чтобы школьнег не обосрался.
>> No.833 Reply
>>819
Интересно сколько людей, которые мечтают разрабатывать игры, в итоге становятся программистами?
История ОПа во многом схожа с моей, но с одной только разницей: стремление стать разработчиком игр со временем ушло, а вот программистом - нет.
Алсо в своё время пошёл на МатМех.
>> No.834 Reply
>>827
> Но только после того когда ты научишься программировать на человеческом языке. (Scheme/Python/Haskell/OCaml)
Иди учить информатику, быдлокодер.
Программист - это не знатель конкретного языка, а определенным специфическим образом думатель головой.

Те или иные ксенотичные язычки полезны, чтобы сформировать эту самую думательную специфику гойловного мозга, но не более.
>> No.835 Reply
ОП снова тут.
Сегодня начал изучать питон. Уже нашел неплохой, вроде, учебник, штудирую.
Может ли анон подсказать, какие базовые алгоритмы стоит научиться составлять в первую очередь, прежде чем приступать к написанию простеньких вещей, типа передвижения точки по двумерному пространству?

>>833

У меня тогда к тебе вопрос. Мой одноклассник тоже собрался на матмех, но он хочет потом идти системным администратором. Я плохо понимаю систему обучения, но, в общем, чему именно учат на матмехе?
Сам собрался туда идти только лишь по наводке, которую где-то прочел несколько лет назад, может даже в каком-нибудь говно-журнальчике навроде нигромании.
>> No.837 Reply
>>835
>>834-кун очень даже прав. Тебе изучать нужно не омгвтф-языки-следующего-поколения, а то, за что будут платить. То есть как раз С++. Причём желательно помимо всего прочего прочесть книгу Бьярни (желательно последнюю редакцию). Там о C++ рассказывается в отрыве от конкретных реализаций, и сама книга более напоминает размышления на тему "популярные приёмы программирования, и как они выражены в моём языке". Алсо, все, кто считает плюсы ужасным и отвратительным языком — идиоты, этой книги не читавшие.

Что до питона, то прежде чем вообще хоть что-то начинать писать, не мешало бы прочитать http://diveintopython.org/, особенно главы с 14й по 18ю. Это сэкономит тебе немного времени в будущем. Вот только см. предыдущий параграф.
>> No.838 Reply
>>837
За плюсы платят только потому, что толпы быдлокодеров только их и знают (причем хуёво знают, должен заметить), а такие мрази как ты продляют им жизнь, склоняя школьников к их изучению.
>> No.839 Reply
>>838
Иногда лучше жевать, чем говорить
>> No.840 Reply
>>839
Это точно, особенно когда по делу возразить нечего.
>> No.841 Reply
>>840
Слишком толсто, дорогой. Выдать поток малоосмысленной¹ ругани, а потом требовать, чтобы тебе возражали "по делу" - на такое даже в уютных жежешечках никто давно не покупается.

Мимопроходил

¹) Содержательная часть твоего поста состоит в том, что "за плюсы платят потому, что они популярны", то есть "секрет популярности плюсов - в их популярности". Спасибо, кэп.
>> No.842 Reply
File: 124707790730.jpg
Jpg, 131.89 KB, 500×397 - Click the image to expand
edit Find source with google Find source with iqdb
124707790730.jpg
>>841
> секрет популярности плюсов - в их популярности
Ты не поверишь, но секрет популярности Аллы Борисовны Пугачёвой именно в её популярности. Что ей позволило стать популярной 40 лет - совсем другой вопрос и сейчас уже не актуально. Возможно 15 лет назад я бы ответил, что да, плюсы это здорово и полезно.

Однако разозлило меня не желание учить плюсы (на самом деле не вижу ничего плохого ни в одном языке), а фраза
> Тебе изучать нужно не омгвтф-языки-следующего-поколения, а то, за что будут платить.
являющая апофеоз быдланства. Начиная с того, что анон, имеющий наглость давать тут советы, настолько не в теме, что считает омгвтф-языками все, что не содержит фигурных скобок, заканчивая тем, что основным критерием при выборе языка является вовсе не желание получить инструмент, позволяющий эффективно решать задачи, вовсе не максимально быстрое совершенствование навыков и творческая самореализация, а "то, за что будут платить". Да-да именно так, в рашке люди не зарабатывают, им именно платят. Быдло пассивно получает свою миску с баландой и уползает в угол посасывать пивко и отсыпаться до следующего рабочего дня.

И этот конъюнктурный фатализм пронизывает всю Россию сверху до низу. Рабочие ничего не изучают потому, что на их разворованном заводе стоит старое полуполоманное дерьмо, администрация не приобретает новые станки, потому что все равно ими ни кто не умеет пользоваться - поломают и разворуют. Типичное объявление - требуется опытный настройщик C++, опыт настройки C++ - не менее 5 лет. Да, за 5 лет задротсва в C++, очевидно, можно познать его тайную суть и достичь нирваны. При этом ни одна контора до конца не осознает тот факт, что не бывает "программистов С/С++", бывают просто квалифицированные программисты, которые за пару месяцев могут освоить любую платформу и работать быстро, эффективно, и обезьянки, задроченные на выполнение определенных действий, которые перманентно переходят в состояние "омгвтф", когда видят что-то, что хоть как-то не укладывается в их привычную парадигму.

Однако в итоге, как ни странно, справедливость торжествует и все остаются при своём. Менеджер, делающий круглые глаза в ответ на предложение использовать какую-нибудь новую технологию ("как же так, ведь кроме тебя эту штуку никто не знает, а что я буду делать, если ты уволишься?") в итоге получает типичный неконкурентоспособный быдлокод, который точно так же нельзя передать новому специалисту в случае увольнения автора ("а ты бы лучше сделал так, чтобы я не увольнялся"). А быдло, не способное освоить ничего нового, после тяжелого трудового дня, посвященного копанию в чужом проекте на не омгвтф-языке, уползает домой со своими 70 т.р. (или 30, если мы говорим о Замкадье).

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

О книжках, ОП, вторая снизу. Она как раз для нубов. Потом любую по языку, который ты собрался использовать для решения своих задач. Можно по C++, если считаешь его наиболее подходящим для своих задач.
>> No.843 Reply
>>842
С основной мыслью поста (быть быдлом - плохо) я спорить не буду.
> И этот конъюнктурный фатализм пронизывает всю Россию сверху до низу.
Сраная рашка катится в сраное говно? У меня один знакомый программист съебал из Штатов обратно в Россию, потому что там быдлокодинг еще популярнее, чем здесь (и быломенеджеров еще больше), так что возможностей для самореализации у него там оказалось гораздо меньше, чем было на родине. Так что это общемировая проблема.
> О книжках, ОП, вторая снизу. Она как раз для нубов.
Честно говоря, мне кажется, что начинать с функционального программирования не стоит. На более высокие уровни абстракции лучше лезть тогда, когда понимаешь, от чего именно ты абстрагируешься. Я бы советовал идти в таком порядке:
С - структурное программирование (после Паскаля эта часть будет сводится к тому, что вместо begin надо писать "{") и знакомство с архитектурой;
Язык ассемблера - на таком уровне, чтобы можно было контролировать код, который генерит компилятор;
С++ - объектно-ориентированное программирование;
Потом, для прочистки мозгов, имеет смысл ознакомится с функциональным программированием.
>> No.844 Reply
>>843
> На более высокие уровни абстракции лучше лезть тогда, когда понимаешь, от чего именно ты абстрагируешься.
Это не "более высокий уровень". Императивное программирование построено на машине тьюринга, функциональное на лямбда-исчислениях, поэтому тут абстракция строится как-бы параллельно. Хотя да, функциональщина эмулируется на императивных машинках, но это ни на что не влияет.

Однако поинт в том, что SICP вовсе не про ФП. Там есть всего понемногу, это именно вводный курс для программистов. И структурное программирование, и ассемблер, на том уровне, чтобы контролировать выхлоп конпелятора (причем не обязательно x86, а вообще любой регистровой машины).

Учить ООП на C++ - пиздец. ОП будет размазывать слёзы и сопли по клавиатуре в поисках утечек памяти и байтоёбствовать, вместо того, чтобы учиться проектировать интерфейсы, разбивать приложение на слои, применять паттерны и п.р. Для ООП лучше взять что-нибудь типа джавы, C#, пейтона и им подобных.

И наконец, С++ не учебный ни разу. При должном уровне задротства он позволяет достичь неплохих результатов по скорости в некоторых типах приложений, и при этом не скатываться до ассемлера, но учиться на нём чему-либо - изврат.

По поводу ФП недавно тут http://www.0chan.ru/c/res/38174.html холиварили, заходи, если что
>> No.845 Reply
>>844
> Хотя да, функциональщина эмулируется на императивных машинках, но это ни на что не влияет.
Если не понимать того, как именно функциональщина эмулируется на императивных машинах (а других машин все равно нет), то невозможно понять и то, почему простая функция вычисления чисел Фибоначчи
(defun fibonacci (N) (if (< N 2) 1 (+ (fibonacci (- N 1)) (fibonacci (- N 2)))))
вычисляет их неприлично долго.
> Учить ООП на C++ - пиздец
Что, сборки мусора не хватает?.. А не надо мусорить, тогда и сборка не понадобится.

Тут я придерживаюсь такого же мнения, как и по поводу ФП: мощную абстракцию нельзя давать в руки тем, кто не понимает, что стоит за этой абстракцией. Человек не в состоянии отследить, когда у него объект создается, а когда уничтожается, но уже лезет "применять паттерны" и "проектировать интерфейсы". В результате почти все проекты, написанные на Jav'е - это несусветное уебанство, а все более менее работоспособное написано даже не на плюсах, а просто на няшном C. Не потому, что C чем-то хорош в плане написания безглючного кода (как раз наоборот), а потому, что если человек умеет писать хорошие программы, то ему и сборка мусора не нужна. А если не умеет - он пишет на Jav'е, потому что на C он не сможет написать ничего, что не грохалось бы сразу после запуска. Если бы меня допустили собеседовать кодеров C++, я бы их, сволочей, заставлял написать обработку исключений и виртуальные методы на чистом C. Если не может - значит и на C++, где это все уже готовенькое, ничего путного он не напишет.
> И наконец, С++ не учебный ни разу.
В том смысле, что ООП в нем не настолько "чистый", как других языках? Это не так уж плохо - суть ООП понять можно, плюс к этому появляется понимание (то есть может появиться, если человек не быдлокодер в душе), как ООП реализовывается на существующем железе.
>> No.846 Reply
>>845
> (defun fibonacci (N) (if (< N 2) 1 (+ (fibonacci (- N 1)) (fibonacci (- N 2)))))
Разве там не понятно написано, как именно оно будет вычисляться:
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.2
> Что, сборки мусора не хватает?.. А не надо мусорить, тогда и сборка не понадобится.
"Не мусорить" можно только если не передавать объекты за пределы функции. Однако большинство ООП-шных шаблонов как раз подразумевает активную передачу объектов. Для этого приходится придумывать различные способы управления временем жизни объекта, отличные от простого удаления после выхода из контекста функции. Например, подсчет ссылок. Но это уже считается моветоном. Или управление с помощью контейнеров (Delphi - ужас-ужас-ужас, Sun Java RTS - фактически те же яйца, но в красивой обертке). В итоге все равно приходишь к сборщикам мусора. Тут надо понимать, что единственное преимущество плюсов - это возможность не использовать сборщик мусора в тех местах, где это не надо (что позволяет выиграть в скорости работы на некоторых участках). Но это никак не способствует изучению ООП. Скорее вызывает желание городить костыли для управления памятью вокруг объектов, т.к. сомневаюсь, что нуб в состоянии грамотно прикрутить к плюсам сборщик мусора.
> В результате почти все проекты, написанные на Jav'е - это несусветное уебанство, а все более менее работоспособное написано даже не на плюсах.
Толсто же. На плюсах пишут всякие системные штуки, требующие ручного перекладывания байтов и окупающие себя только благодаря огромному тиражу (типа СУБД, да и те по привычке, и Web серверов, да и то не всегда, драйверов файловых систем и т.п.) Вся автоматизация как раз пишется на Джаве. Потому что на плюсах это гарантированно будет безумно дорогое, негибкое, глючное и текущее памятью говно. На сишке, кстати, тоже.
> как ООП реализовывается на существующем железе.
Но щас же. Плюсоёбские модели инстанцинации объектов и вызовов виртуальных методов используются только в плюсах и как-раз являются их слабой стороной. Изучение ООП на нем скорее не приведет к пониманию а выработает кучу вредных привычек, как то создание больших классов, совмещающих функциональность (т.к. создание экземпляра объекта в плюсах - весьма дорогая операция, а управление временем его жизни - весьма муторная), смешивание процедурной и объектной декомпозиции (т.к. чисто объектная порождает слишком много объектов, которыми в плюсах муторно управлять), нагромождение различных способов управления временем жизни объектов (т.к. куча паттернов, в частности порождающие, не укладываются в примитивные модели управления памятью, а прикручивать к плюсам GC = превращать их в Джаву).

Вообще плюсы отчаянно сливают на любых сложных проектах (надеюсь перемножатель матриц типа BLAS-а ты не считаешь сложным проектом). Как следствие, они повсеместно вытесняются Джавой. Я считаю, что у плюсов вообще нет будущего. Они много где держаться как тяжелое наследие, но в любом новом проекте они попросту не нужны. Т.к. для низкоуровневого программирования вполне достаточно более простой сишки, а для высокоуровневого лучше взять специально разработанный для этого инструмент, а не бред Страуструпа, полученный бессистемным прикручиванием к сишке фишек, модных в 1985 году.
>> No.847 Reply
>>846
> Разве там не понятно написано, как именно оно будет вычисляться
Понятно. Но это объяснение именно через "императивщину". Речь именно о том, что без понимания императивщины нельзя обойтись в любом случае. Поэтому-то ею и надо овладеть насильно.
> сомневаюсь, что нуб в состоянии грамотно прикрутить к плюсам сборщик мусора.
Повторю свою мантру: если нуб не в состоянии это сделать - значит, ему рано заниматься "активной передачей объектов".
> На плюсах пишут всякие системные штуки
Я как-то скачал torrent-клиент (если это - "системная штука", то я не знаю, кто тогда не системная), написанный на Java. В нем было много красивых свистоперделок, но он хреново качал файло, зато бодро жрал время и процессорную память. Заменил его клиентом, написанным на C++. Рекомендую, зависимости никакой, все дела. Другие Jav'ные поделия (чисто прикладной софт) тоже произвели на меня тягостное впечатление. Хуже них были только программы на Visual Basic'е.

Нет, есть нормальные проги на Jav'е. Нормальные программисты тоже на ней пишут - не ради того, чтобы за них мусор собирали, а ради того, чтобы получить кросс-платформенность по низкой цене. Но в процентном соотношении их работы тонут в потоке говн, извергаемых студентотой, которая просто не смогла освоить ничего сложнее Jav'ы.

Наверное, в серьезном софтописании студентоты нет. Но и серьезных продуктов, написанных на Jav'е, я как-то не видел. Это, конечно, не говорит о том, что их нет.
> Вся автоматизация как раз пишется на Джаве.
"Автоматизация" - это что именно? А то та автоматизация, которой занимаюсь я, пишется совсем не на Jav'е.
> Плюсоёбские модели инстанцинации объектов и вызовов виртуальных методов используются только в плюсах
Они просто максимально приближены к железу (да, это C с прикрученными фишками - и ты зря говоришь об этом так, как будто это что-то плохое). Можно сделать красивше - но только за счет каких-то закулисных действий, скрытых от программиста. Да, программер в этом случае избавляется от кучи грязной работы - и это хорошо. Плохо то, что программер, который сразу начал с Jav'ы может и не догадываться о том, что эта грязь существует.

Напомню, что мы здесь говорили об обучении - то есть о сравнительно небольших проектиках. В маленьком проекте все эти проблемы уж точно не приобретают катастрофических масштабов, так что совладать с ними можно. И этот опыт я считаю полезным - точно так же, как полезно поебаться с ассемблером (хотя для больших проектов он абсолютно непригоден).
> Как следствие, они повсеместно вытесняются Джавой.
Я бы все-таки хотел услышать, где именно идет этот процесс - потому что он явно идет мимо меня.
>> No.849 Reply
>>847
Анон, ты хуй, ты не шаришь.

С++ сраное гавно. И не потому что низкоуровневый. И не потому что Сборщика мусора нет. И не потому что не различает алгебраические структуры данных и объекты.

А потому что он создавался на коленке, постепенно обрастал говном разных сезонов. Потому что в нём нет нормального ООП и никогда не будет. Потому что это нихуя не гибкий язык. Потому что Ц++ -- смесь бульдога с носорогом, ни на что ни годный ни в одной нише.

Мимо проходил. Да.
>> No.850 Reply
>>847
Будь честен.

Гугли
c++ sucks
и
hate c++
>> No.851 Reply
>>850
Ха-ха-ха. Будь честен.

http://www.google.com.ua/search?q=python+sucks
http://www.google.com.ua/search?q=ruby+sucks
http://www.google.com.ua/search?q=perl+sucks
http://www.google.com.ua/search?q=java+sucks

И так далее.
Если уж постишь хуйню, то делай это не так явно.
>> No.852 Reply
>>850
hate c++ - 777,000 страниц
hate java - 3,150,000
с++ sucks - 394,000
java sucks - 1,870,000
>> No.853 Reply
File: 819.png
Png, 0.99 KB, 200×20 - Click the image to expand
edit Find source with google Find source with iqdb
819.png
>>847
> Речь именно о том, что без понимания императивщины нельзя обойтись в любом случае.
Все началось со SPIC-а. Я доказывал то, что императивщина дается в нём в достаточном объеме.
> Повторю свою мантру: если нуб не в состоянии это сделать - значит, ему рано заниматься "активной передачей объектов".
Это из серии "если инженер не понимает принципов компьютерной графики, ему рано использовать AutoCAD". Практика говорит об обратном. У меня были студенты, которые занимались проектированием. Им мешало отсутствие знания технического английского, отсутствие понимания принципов проектирования и основных шаблонов, они просто видели мало готовых систем, но знание принципов работы GC никогда не играло ключевой роли. Ручное управление памятью просто добавляет гемора, но никак не способствует более грамотному решению задачи (за исключением тех редких случаев, когда нужно вообще отказаться от GC).
> Я как-то скачал torrent-клиент
torrent-клиент хорошая задача для C++. А вот мессенджеры на нём уже глюковатые получаются. Попробуй использовать C++ для создания какой-нибудь ERP системы. Во всем, что я видел, C++ использовался максимум для написания "движка", далее вся логика реализовывалась на встроенном высокоуровневом языке. Или сразу все делалось на Джаве. Сейчас даже есть тенденции к переносу на высокоуровнемые языки того, что изначально было написано на плюсах. Т.к. написанные на нём системы дешевле переписать, чем сопровождать.
> Нормальные программисты тоже на ней пишут - не ради того, чтобы за них мусор собирали, а ради того, чтобы получить кросс-платформенность по низкой цене.
Нет не только. Просто в C++ даже нормальной ORM нет. Не говоря уж про средства обеспечения модульности, масштабирования, SOA и workflow фреймворки, STM, средства контрактного программирования, централизованного логгирования, DI/IoC фрейморки, aspect/policy injection фрейморки т.п., централизованной системы конфигурации, годные concurency & coordination и messaging фреймворки, веб-фреймворки и еще кучи всего, что требуется для создания больших систем, за которые большие организации готовы платить большие деньги. И конечно же проблемы совместимости библиотек (сколько реализаций стрингов известны лично тебе?) Это же просто не серьезно.
> в процентном соотношении их работы тонут в потоке говн
Это справедливо для любого популярного языка. 20 лет назад жемчужины на ассемблере тонули в потоках глючного говна на C++.
> Но и серьезных продуктов, написанных на Jav'е, я как-то не видел.
Посети сайты Sun, IBM, Oracle, The Apache Software Foundation или просто напиши слово Java в Google.
> "Автоматизация" - это что именно?
Бизнес, производство, ERP, DMS, ECM, MES. C++ более-менее уверенно себя чувствует только древних CAD системах и столь же древних СУБД. Связано это с тем, что такие системы интенсивно занимаются байтоперекладыванием, а во времена их создания (80-е годы) разумной альтернативы C++ просто не было.
> Они просто максимально приближены к железу
Нихуя подобного. Они просто неэффективно реализованы. Дотнет, например, запросто уделает C++ на создании/удалении объектов и вызовах интерфейсных методов просто за счет более эффективной реализации. Модель конструирования объектов (с перезаписями VMT - к чему приведет попытка вызова виртуального метода из конструктора?) - вообще бред сивой кобылы, как и множественное наследование впрочем. Все шаблоноёбство (Boost, Loki) по большому счету связанно с попытками сделать всё на статике, ибо виртуальные методы в C++ тормозят. С весьма неудачными попытками, кстати, в Хаскелле статика реализована на порядок лучше.
> да, это C с прикрученными фишками - и ты зря говоришь об этом так, как будто это что-то плохое
А это плохо на самом деле. Т.к. попытка усидеть одной жопой сразу на двух стульях (высоком и низком) ни к чему хорошему привести не может. Все программирование сводится к введению уровней абстракций, которые позволяют изолировать не относящиеся к делу детали и сосредоточится на решении задачи. C++ практически не содержит таких средств. Поэтому почти каждая бизнес, инженерная или научная система, написанная на C++, содержит встроенный высокоуровневый язык, на котором, собственно, все задачи и решаются. Да что там, даже движки игрушек содержат скриптовые языки, т.к. низкоуровневое говно только мешать программированию AI монстров.

И да, C++ вовсе не учит низкоуровневому программированию, он учит программированию на C++. Я знаю IA86/64, могу сказать, что программирование на нём мало что общего имеет с программированием на С++.
> как полезно поебаться с ассемблером
Под "ассемблером" многие понимают x86, да еще довольно древних версий. Неуёмная ебля с ним вызывает такие болезни, как "преждевременная оптимизация" и "попытка быть умнее компилятора". В итоге говнокод, который работает быстрее обычного кода лишь в воображении его создателей. гораздо полезнее знать, как работает компилятор и как генерируется код под регистровые машины в принципе. В SICP-е это есть.
> Я бы все-таки хотел услышать, где именно идет этот процесс - потому что он явно идет мимо меня.
Не удивительно, сидя на плюсах можно многое не заметить. По факту С++ остался только на embedded системах, не поддерживающих JavaME, и в сетевых маршрутизаторах. Ну и в гемдеве еще, куда так рвется ОП. Хотя текущий геймдев - то еще легаси, производители движков даже нормальное масштабирование на многопроцессорные системы освоить не в состоянии. Ах да, про torrent-клиенты забыл. Но там главным образом потому, что заставлять домохозяек скачивать виртуальную машину в довесок к 200 килобайтной фриварной программке как-то неприлично.

Вообще, если бы ОП не горел желанием написать свой круизис, я бы даже не рекомендовал ему изучать C++. Т.к. C++ - это скорее пример того, как не надо создавать языки программирования. Попытка выехать на популярности сишки, обвесив её всякой херней, для которой она изначально не проектировалась. В итоге довольно популярная, но крайне мутная штука, с кучей костылей для решения проблем, которые в других языках просто не возникают.

И наконец, я не одобряю программистов, которые не в состоянии ничего осилить, кроме Джавы. Я сам не фанат джавы, если что, просто на фоне C++ даже Джава выглядит даром божьим. Что касается необходимости изучения С++ - умение прыгать в темной комнате среди разложенных по полу граблей с завязанными глазами (чем является программирование на C++, т.к. владение им - вовсе не владение низкоуровневым программированием, а владение вполне конкретным кривоватым языком) - весьма сомнительный навык для квалифицированного программиста, и уж точно абсолютно бесполезный для работодателя.
>> No.854 Reply
>>853
> знание принципов работы GC никогда не играло ключевой роли.
Я и не говорил, что оно должно играть. Речь о том, что если человек не может реализовать свой собственный GC в небольшом "тренировочном" проекте - это нехороший симптом; о том, что если с самого начала привыкнуть к тому, что некоторые вещи "делаются сами", то спуститься потом на более низкий уровень будет гораздо тяжелее. Если есть уверенность, что всю жизнь будешь писать только на java (или столь же выскоуровневых языках), то, конечно, ничего другого учить и не надо.
> А вот мессенджеры на нём уже глюковатые получаются.
Я использую два мессенджера (под разными ОС), оба написаны на C/C++, оба работают нормально. Честно говоря, эта задача не кажется мне требующей такого уж хардкорного ООПа, чтобы ее нельзя было реализовать на чистом C, причем без особых извращений. Мессенджеров на Java я просто не видел (что как бы говорит об их популярности). Впрочем, если ты назовешь чего-нибудь, я с удовольствием погляжу.
> Во всем, что я видел, C++ использовался максимум для написания "движка", далее вся логика реализовывалась на встроенном высокоуровневом языке.
Ну да. Это стандартный подход для сложных систем - он еще во времена Кнута был классикой жанра.
> Посети сайты Sun, IBM, Oracle, The Apache Software Foundation
Посетил только последний (поскольку там есть поиск по языку). Apache HTTP server написан - естественно! - на няшной сишке, на Java написан log viewer и другие побочные продукты. Резонно, в общем-то.
> Бизнес, производство, ERP, DMS, ECM, MES.
Это все-таки довольно специфическая область софтостроения, со своими перекосами. Там, например, продукт все время находится в стадии активного развития, причем куда это развитие свернет завтра - непонятно абсолютно. Для того, чтобы работать в таких условиях действительно жизненно необходима такая гибкость, без которой вполне можно обойтись там, где с самого начала понятно, чего пишем-то. С другой стороны, этот софт, как правило, астрономически дорог (поскольку тираж очень маленький), поэтому проблемы производительности оказывается намного дешевле решать за счет наращивания вычислительных мощностей, а не за счет использования С вместо Java. Распространять этот опыт на все программирование было бы ошибкой - в других местах специфика совсем другая. В некоторых случаях тупо запрещено динамическое распределение памяти - сам понимаешь, там все совсем по-другому.
> Неуёмная ебля с ним вызывает такие болезни, как "преждевременная оптимизация" и "попытка быть умнее компилятора".
Ну так я с самого начала оговорился, что изучать асм стоит только в таком объеме, чтобы можно было почитать, что генерирует компилятор (в критических местах), заметить неоптимальные места и догадаться, что надо поправить в исходнике, чтобы компилятор смог сгенерировать код получше.
> Не удивительно, сидя на плюсах можно многое не заметить.
Сам-то я сижу на няшной сишке. Так что я стараюсь судить не по тому, что пишу сам, а по тому, на чем написаны продукты, которые я юзаю (как домохозяйка, ага).
> Попытка выехать на популярности сишки, обвесив её всякой херней, для которой она изначально не проектировалась.
Ну, Java - тоже поыптка доработать C++ напильником.
> Вообще, если бы ОП не горел желанием написать свой круизис, я бы даже не рекомендовал ему изучать C++.
> И наконец, я не одобряю программистов, которые не в состоянии ничего осилить, кроме Джавы.
В принципе, если человек имеет достаточный опыт работы с чистым С - в том числе и мусор собирать своими собственными руками способен - то ООП можно осваивать на примере какого-нибудь ООП-языка, а не на C++.
> умение прыгать в темной комнате среди разложенных по полу граблей с завязанными глазами - весьма сомнительный навык для квалифицированного программиста, и уж точно абсолютно бесполезный для работодателя.
Это умение говорит о том, что человек аккуратен и осторожен. Этот бесполезный навык свидетельствует о наличии полезных качеств. Как-то так.
>> No.856 Reply
А ведь есть еще Objective-C, про который часто забывают в силу его яблочной ориентации.

мимо проходил
>> No.857 Reply
>>856
Те, кто пишет под ифон — помнят о нём всегда...
>> No.858 Reply
>>857
Помнят хорошее или плохое?
>> No.860 Reply
>>858
Ничего особенного, как по мне. C со свистелкоперделками.
>> No.861 Reply
>>854
Блин, уел, со всем согласен.
а можно было бы устроить традиционный срач
>> No.862 Reply
>>861
Ой. А мне казалось, что это я в конце концов был вынужден со всем согласиться - даже признал, что C++ учить необязательно (с чего все, собственно, и началось-то).
>> No.863 Reply
>>819
Учи плюсы, начиная с чистого Си. Питончег тоже используется, но в силу того, что в среднем его производительность оставляет желать лучшего, большинство игр таки написаны на плюсах. Также полезным будет знать lua, т.к. это один из самых часто встречаемых скриптовых языков (ну и интерпретатор у него довольно быстрый), python, т.к. его иногда используют в прикладных нуждах, bash/sh/makefile/awk/etc для автоматизации того-же билд процесса иногда используются, perl для разбора и анализа тоже частый инструмент, асм используется редко и в основном либо в узких местах (если делается скелетка на проце, то простейший sse позволит весьма ускорить код), либо там, где можно воспользоваться преимуществами проца (у нас была распаковка/запаковка ландшафта на лету для Wii, которая юзала ручной кэш проца и оптимизированные вычисления, также, как и быстрая распаковка геометрии для коллижена на лету).

В общем основное ядро игры в 90+% это плюсы, для них огромное количество игровых движков. На питоне навскидку есть panda3d и биндинги из некоторых других движков. Плюсы используются именно из-за того, что для них есть все необходимое, есть адекватные компиляторы и среды разработки.

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

А учить язык я тебе советую не совсем по книжкам. Да, есть неплохие книжки, типа Эффективный С++, или эффективный STL, которые показывают хорошие приемы, до которых сам будешь долго доходить, но учить лучше вообще на небольших проектах. Берешь какую-нибудь небольшую задачу, и решаешь ее. Со временем ты сможешь эту-же задачу решить более эффективно.
>> No.864 Reply
File: design_patterns.jpg
Jpg, 25.78 KB, 200×291 - Click the image to expand
edit Find source with google Find source with iqdb
design_patterns.jpg
>>819
в добавок к >>842 осмелюсь посоветовать пикрилейтед
>> No.865 Reply
>>863
С++ - ужасен и отвратителен, просто быдло, советующее GoF-а знает про Лисп только из статей в википедии.
>> No.866 Reply
>>865
При чем тут GoF? При чем тут Лисп или Хаскель или прочие языки, которые де-факто не используются по назначению, которое интересно ОПу?
>> No.868 Reply
>>862
А что, разве мы не пришли к выводу, что учить плюсы имеет смысл только если собираешься с ними работать?

Ок, тогда имеет смысл продолжить холивар.

Во-первых, мы даже не узнали, какой вид гей-дева интересует ОПа. Понятно дело, если он хочет написать очередной унылый тридишутер, то ему потребуются плюсы, и за 5 лет его обучения в ВУЗ-ах вряд ли ситуация изменится. Но если его тянет на мобилки, брозерные или флеш-игрушки, то никакие плюсы там рядом не валялись. В ММОРПГ плюсы тоже не монополисты, ибо не шибко они подходят для построения распределенных систем, да и сам продукт больше напоминает ERP систему, чем тридишутер (т.е. безумно дорогой, инсталлируется в единственном экземпляре, имеет сложную архитектуру, постоянно допиливается).

Теперь относительно чистой сишки, я сейчас одну умную вешь скажу, только ты не обижайся. Си - говно даже в качестве языка для системного программирования. Связанно это с тем, что, во-первых, он был создан как промышленный язык 70-х, и многие вещи просто не нашли в нём воплощения (ок. Лисп тоже тот еще старпёр, но изначально разрабатывался как концептуальный язык, без особой оглядки на существующие в то время ограничения). Во-вторых, Си, разрабатывался скорее как универсальный язык, сейчас он используется как системный не потому, что особо под это заточен, а просто потому, что был вытеснен из других сегментов более совершенными языками. Разумеется, сишка сливает специализированным языкам для системного программирования, таким как Sing# например. В последнем нет указателей, а мэппинг структур на области памяти (собственно единственное практическое применение прямого доступа к памяти в сишке) осуществляется декларативно и проверяется конпелятором. Еще там используется автоматическая сборка мусора, но это вовсе не необходимое свойство таких языков (просто одной из целей проекта Singularity была проверка возможности тотального автоматического управления памятью), для более приземленных задач можно было бы использовать полуавтоматическое управление памятью как в Java RTS, или вообще удалять объекты вручную. В любом случае, разработка на таком языке была бы в два раза эффективнее, чем на сишке, хотя бы за счёт более строгой типизации и отсутствия указателей.

И наконец, арифметика указателей не имеет ничего общего с системным программированием. На самом деле это лишь абстракция, построенная на том факте, что процеззор может трактовать значение регистра как адрес в памяти. Не очень удачная абстракция на сегодняшний день, кстати, т.к. если на z80 использование результата хитрых вычислений в качестве указателя было нормальной практикой оптимизации у Ъ хакеров, то сейчас такая "оптимизация" лишь собьет prefetch процеззора и приведет к тормозам. Наконец, системных программистов, мыслящих исключительно указателями, ты можешь рассматривать так же как и жавобыдло, которое использует CG, но не знает, что на самом деле за этим стоит.

Какие в итоге преимущества как специалист имеет системный программист на сишке перед системным программистом на Sing#? Да никаких, ИМХО, кроме того, что системщик на сишке может прямо сейчас сесть и начать быдлокодить под венду или линпс. Но венда и линупс жуткое легаси само по себе, программирование под ними - скорее суровая необходимость, чем вектор развития. Разумеется, пойдя этим путем, ОП быстро найдет работу в какой-нибудь конторе - лидере в своей отрасли. Но и максимум на что он сможет рассчитывать - должность быдлокодера очердного движка для тридишутера, коих уже более 9000. Джон Кармак стал знаменитым потому, что придумал один из первых движков, а не один из 9001-х.

Спасибо.
>> No.869 Reply
>>868
> А что, разве мы не пришли к выводу, что учить плюсы имеет смысл только если собираешься с ними работать?
Учить любой язык имеет смысл только в том случае, если собираешься на нем работать. Для того, чтобы стать программистом, надо учить не языки, а учиться думать - думать алгоритмами, думать объектами, думать функциями высших порядков. Правильно говорил человек в треде на нульче: учить ФП надо не для того, чтобы потом писать на Хаскеле, а для того, чтобы писать красивый и надежный код на Джаве. Да даже если потом на C будешь писать, умение работать с ФВП тебе пригодится. "Функциональное программирование" - это не свойство языка, это свойство головного мозга. То же самое относится к ООП - даже если ты в машинных кодах пишешь, умение работать (в своей голове) с объектами может тебе очень пригодится. А на чем именно прокачивать скиллы ООП или ФП - не так уж важно.
> Во-первых
Согласен.
> Теперь относительно чистой сишки
Не согласен.
> Разумеется, сишка сливает специализированным языкам для системного программирования, таким как Sing# например.
Назвать в качестве альтернативы сишке язык, существущий ровно на одной платформе и требующий виртуальной машины (сколько там в ней мегов?) - это такой тонкий юмор?
> системщик на сишке может прямо сейчас сесть и начать быдлокодить под венду или линпс.
...и еще под тысячу платформ, на которых дотнета не будет даже в далекой перспективе.
> Но венда и линупс жуткое легаси само по себе
Учиться "программированию будущего" - рискованное мероприятие: будущее может меняться. Мне и 20 лет назад говорили, что со дня на день LISP и Prolog вытяснят все устаревшие языки программирования.
>> No.870 Reply
>>869
> Назвать в качестве альтернативы сишке язык, существущий ровно на одной платформе
А причем тут платформа? Я показал что можно запросто создать язык, который будет на порядок лучше сишки. Просто многие относятся к языку, как к чему-то данным Б-гом, это диагноз, я считаю (кстати лечится написанием собственного компилятора в качестве учебного проекта). Поддержка многими платформами ну никак не свойство языка. Сишка, кроме того, имеет не лучшие параметры для портирования. Слишком многое завязано на системные типы, также требуется доступ к памяти с гранулярностью в 1 байт. Это не всегда поддерживается, даже если поддерживается, может хуевато работать. Поэтому шейдеры в видеокартах вовсе не на сишке программируются. Да и вообще загляни в какой-нибудь malloc.h и иже с ним, все густо обмазано макросами, чтобы хоть как-то компенсировать убогость языка.
> и требующий виртуальной машины
Ни в коем случае. Bartok все в native компилит, никаким байткодом в сингулярити даже не пахнет.
>> No.872 Reply
>>870
> А причем тут платформа?
При том, что если мы говорим уже о том, какой язык использовать для работы (а не для обучение), то существование компилятора для этого языка (на той платформе/платформах для которой мы пишем) оказывается гораздо более серьезным преимуществом, чем все остальное.
> кстати лечится написанием собственного компилятора
То есть когда C++ предлагает тебе написать свой собственный сборщик мусора - это возмутительно. А когда ты предлагаешь мне написать свой собственный компилятор под мою платформу - это нормально. Не хотеть. Впрочем, даже если я и захочу написать компилятор собственного языка, я все равно буду компилить в няшную сишку, а в native переводить чем-нибудь готовым. Потому что написать хороший компилятор в native - совсем не учебный проект.
> Сишка, кроме того, имеет не лучшие параметры для портирования.
В теории - может быть, можно сделать и лучше. На практике - C переносимее любого другого языка.
> шейдеры в видеокартах вовсе не на сишке программируются
Программирумая логика - тоже не на ней. Разумеется, есть такие специфические области, где только специфические языки и могут использоваться - там си не применяют. Джава, кстати, тоже.
> Bartok все в native компилит
Последний раз, когда я слышал о нативной компиляции C#, это все было в состоянии ранней альфы, весьма глючной. Что, с тех пор появился работающий продукт? Поиск по сайту Microsoft Research и простое гугление ничего интересного об этом не сообщают - но я, конечно, искал не слишком упорно.
> никаким байткодом в сингулярити даже не пахнет
Совсем не факт, что сама сингулярити не запахнет тем же, чем пахнет сейчас ДжаваОС.

Пользуясь случаем, хочу еще раз сказать, что я вообще не считаю целесообразным осбуждать вопрос "на чем работать". Мы пишем на том, за что платят. Мне платят за C, я пишу на C. Платили бы за LISP - писал бы на LISP'е но, увы, заявления неизвестного нульчера, что "программист на LISP пользуется огромным спросом, и меньше 300000 не получает" не имеют никакого отношения к суровой действительности.
>> No.875 Reply
>>870
> поддержка многими платформами ну никак не свойство языка.
Еще какое свойство. Так же как производительность кода после компиляции. Получается, что чисто теоретически язык очень мощный, и написать можно что угодно, но оно будет очень медленно работать на компьютерах у трех с половиной человек.

В общем, есть два подхода: отталкиваться от идеи и "правильногог кода", а второй - от задачи и доступных средств для ее решения.
>> No.876 Reply
>>875
> Еще какое свойство.
Нет.
> Так же как производительность кода после компиляции.
Нет, это свойства конпелятора. Хотя да, есть языки, для которых эффективная конпеляция не возможна в принципе.
> Получается, что чисто теоретически язык очень мощный, и написать можно что угодно
Все тьюринг-полные языки равномощны.
> В общем, есть два подхода: отталкиваться от идеи и "правильногог кода", а второй - от задачи и доступных средств для ее решения.
Программиста от быдлокодера отличает умение самому создавать инструменты для решения задачи при необходимости.
>> No.877 Reply
>>876
Уйди, школьник.
Компилятор. И никак иначе!
>> No.878 Reply
>>876
Спасибо, Капитан, но я говорил не об этой мощности.

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

В нашем неидеальном мире язык программирования это не только язык, но и компиляторы, сопутствующие инструменты программиста и сообщество программистов в целом. Если речь идет о действительно больших проектах, то рассматривать одну из этих частей без учета остальных бесполезно. А, еще одну часть забыл - железо, его стоимость и доступность.
> есть языки, для которых эффективная конпеляция не возможна в принципе.
А кстати, какие?
>> No.879 Reply
>>878
vielleicht Perl?
>> No.882 Reply
>>868
> Во-первых, мы даже не узнали, какой вид гей-дева интересует ОПа
Консольные игры это C/C++, скриптовый язык, и что-угодно для тулзов.

ПэКа игры это C/C++, иногда python'чег. Намного реже всякие явы-сишарпы.

ММО это C/C++, Eve-online (python + критические места на C++), вроде где-то была ява.

Портативные консоли это C/C++.

Всякие айфоны и мобильники обладают кратким жизненным циклом и к моменты выпуска ОПа из института поменяется довольно много всего.

Согласен, что ФП надо заниматься для расширения кругозора и срыва шаблонов.

Короче, ОП, послушай дядю, который в геймдеве работает (то-бишь меня) и садись и учи сишку и плюсы. Выучишь плюсы на достаточном уровне, сорви шаблоны хаскелем, расширь кругозор питоном, перлом, научись писать мейкфайлы, напиши/позаимствуй движок, прикрути к нему lua, поучавствуй в конкурсе на инди-проекты, засветись, поработай в геймдеве параллельно с учебой и если вырастешь адекватным программером, то у тебя будут все шансы хорошо устроиться на работу в геймдеве.

Язык это инструмент, хороший программист быстро освоит новый инструмент в случае необходимости. Сейчас в геймдеве самый востребованный язык это С++, поэтому стоит начинать именно с него, и если мозги хорошо работают, то ты не будешь непродуктивно холиварить на чанах по поводу языков, а будешь тупо ебошить и добиваться успехов и двигаться вперед, пока люди не могут решить у кого длинее :)
>> No.885 Reply
>>868
> Sing#
Который раз слышу это название, посмотрел на сайте, компилятора к нему до сих пор нету, а судя по мануалам это какой-то очередной жуткий выкидыш из рода c# помешанный с канальными состояниями эрланга.
>> No.890 Reply
>>853
> Модель конструирования объектов (с перезаписями VMT - к чему приведет попытка вызова виртуального метода из конструктора?) - вообще бред сивой кобылы
Как "к чему"? Вызовется метод того класса, из конструктора которого он вызывается - не вызывать же метод того класса, который еще не создан. По-моему, все как раз очень логично. Для этого и приходится перезаписывать VMT. Единственная альтернатива - запретить вызовы таких методов (в том числе - косвенные) из конструктора.
> виртуальные методы в C++ тормозят.
Щито? Вызов виртуального метода отличается от вызова статического только тем, что адрес метода надо вынуть из таблицы, то есть выполнить что-то вроде call dword ptr [eax+8] вместо call fn. Это дороже ровно на одно обращение к памяти (а поскольку таблица лежит в той области, где находится сам объект, то она либо уже в кэше процессора, либо ее все равно пора туда грузить). Причем если на этапе компиляции очевидно, метод какого класса надо вызывать (то есть если написано X x; x.virtualfn();), то компилятор генерит статический вызов. Чтобы это начало заметно "тормозить", программа должна наполовину состоять из виртуальных вызовов (в принципе, в мудацких библиотеках темплейтов такое бывает - ну так C++ чем тут виноват?). Сделать виртуальные методы быстрее, чем они сделаны на C++, просто невозможно. А заменять виртуальные методы статикой "для скорости" - это вообще маразм. Вирутальные методы (и вообще указатели на функции) для того и нужны, чтобы можно было заменить медленное if (чего-то там) static_f1() else static_f2() на быстрое virtual_f(). Конечно, если писать виртуальные методы там, где они не нужны - это будет напрасная потеря производительности.
>> No.910 Reply
Привет, /s/. ОП на связи, давно не заглядывал сюда, думал, что тред уже погиб, а тут такие холивары.
> Во-первых, мы даже не узнали, какой вид гей-дева интересует ОПа
Пока изучаю языки программирования, я бы хотел сделать двумерную логическую аркаду с видом сбоку, с простыми ролевыми элементами (главный герой - маг, время от времени изучающий новые заклинания). Ну, может, с полностью открытым миром, как я видел в одном инди-проекте, кажется, Knytt. Вроде, это не должно быть сложно, но я до сих пор не совсем представляю, как именно это все сделать.
По питону почти закончил книгу, но до сих пор не могу на нем сделать ничего такого, чего не мог бы на паскале или бейсике. Сразу после нее брошусь по совету геймдев-куна изучать C. Разве что я не понял, начать с плюсов или обычной сишки?

Алсо, я тут погуглил и нашел двух разработчиков игр в своем городе. Обе не предел мечтаний, но остановился на Targem, у которых только когда-то в забагованую демоверсию Ex-Machina играл, ну и еще там что-то из ранних проектов. Хотя, на самом деле, меня вообще никак не интересует ни одна их игра, но выбирать почти не приходится, так что Таргем. На страничке вакансий написано, что программисту надо знать С++.

Требования:
Основательные знания C++ и STL, опыт их использования не менее 2 лет
Хороший алгоритмический базис
Знание базовых основ работы компьютерных подсистем (процессора,
памяти, кешей и т.п.)
Знание основ векторной алгебры (вектора, матрицы, скалярное/векторное
произведение и т.п.)
Опыт разработки/отладки ПО в команде
Приветствуется:
Опыт: работы в аналогичной должности (предпочтительно наличие реализованных проектов)
разработки игрового UI
работы в индустрии игр и развлечений.
Высшее техническое образование (предпочтительно IT или физ-мат).
Навыки работы с языком LUA

Такие дела.
Я сейчас спешу, но через часик снова зайду и напишу, что еще хотел сказать.
>> No.911 Reply
А хотел я написать вот что.
Сегодня в школе проходили олимпиады, и я, само собой, писал информатику. Там было две задачи на 40 минут, и впервые в жизни я ни одной не решил.
Также, я с двумя одноклассниками послезавтра еду на командную олимпиаду по программированию, которая проводится тем университетом, в который мы собираемся как раз поступать. Нас готовили пару дней его выпускники, давали задачи, как там будут. И на задачи, которые должны решаться за 20 минут, мы тратим полтора часа. В смысле, тратят два моих одноклассника, потому что мои идиотские идеи сразу отвергаются, а потом, когда они пишут программу, я смотрю на экран и, хоть и вижу все знакомые команды, вообще не понимаю, что там происходить, в голове начинается каша, но программа работает и правильно.
Я это к тому, что у меня затаились сомнения по поводу выбранного пути, раз мышление людей, которые программируют только два часа в неделю на информатике, лучше развито моего. Я сдаваться не собираюсь, ведь у меня есть шанс развить это самое мышление, правда?
Я тут, когда второпях читал тред, где-то видел про это, сейчас внимательнее перечитаю.
>> No.912 Reply
>>911
выложи сюда свой код, заценим
>> No.913 Reply
>>911
> Там было две задачи на 40 минут, и впервые в жизни я ни одной не решил.
Что, до сих пор не решил?
>> No.914 Reply
>>911
выкладывай условия же, может их тут никто не сможет решить.
отличный гет, ололо
>> No.915 Reply
>>910
> Разве что я не понял, начать с плюсов или обычной сишки?
Ну если ты начнешь с плюсов это все равно будет на уровне Си с классами. Т.е. как язык (и инструментарий) брать конечно С++, чтобы не геммороиться по поводу всяких Си-специфик отличий, но начинать с простых вещей. Сам сто лет назад начинал с нескольких книг, но вроде "Как программировать на С++" Х.М. Дейтел как раз позволило все проще понять. Только обязательно не просто читай, а экспериментируй с полученными знаниями, чтобы лучше закреплялись. Потом уже сам поймешь в какую сторону развиваться. Чистый Си используется крайне редко, обычно максимум что делают это воздерживаются от использований классов, перегрузки операторов и фигачат id tech 3 style. У нас так был написан кроссплатформенный движок и он даже офигенно работал, но геймплейные части конечно писались на почти полноценных плюсах + свой кастомный скриптовый язык.
> я бы хотел сделать двумерную логическую аркаду с видом сбоку, с простыми ролевыми элементами
Бери тогда HGE, движок неплохой и простой, тем более будет еще бОльшая мотивация изучать язык и применять его.
> но остановился на Targem
Как будешь на старших курсах все еще может измениться, но если они все еще будут там, то постарайся попасть к ним на internship, чтобы уже начать внедряться и изнутри все изучать.

882-кун
>> No.916 Reply
>>910
Блин, да ты еще из Ёбурга.
Знаешь, я тебе ни одну из местных гей-дев контор не советую, они все унылы до безобразия и не привыкли платить своим программистам.

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

Поступай в УрГУ, КН очень вырос в профессиональном плане за последние несколько лет, если динамика сохранится, может из него получится что-то годное. В УПИ дают набор актуальных технологий (например, его выпускники вроде как должны знать UML, у них есть курс "функциональное и логическое программирование" с Лиспом и Прологом), но видимо как-то слабо, или не заставляют.

Алсо не уходи далеко из треда, холивар еще не закончен, просто я время никак не могу найти.
>> No.920 Reply
>>912 >>913 >>914

Код я выложить не могу - то, что написал осталось на школьном компьютере.
Но в любом случае, одну задачу я потом понял, как решить. У меня там была проблема не с программированием, а с геометрией.
Вторую, как решать, я, кажется, додумался еще в те сорок минут, но после того как написал код, он у меня не компилировался и я все оставшееся время до конца пытался исправить ошибки, которые не понимал. Так и не успел.
Задачи следующим сообщением выложу.

>>915

Спасибо, буду тогда учить С++.
HGE взял на заметку. Он даже технологичнее, чем мне не надо. Ну, и бесплатность импонирует.
Internship - вроде, практика за границей, но могу и ошибаться. В любом случае, понял, что вы имели ввиду.

>>916

В Ургу и собираюсь поступать на матмех, как уже писал. Вот завтра поеду на олимпиаду, которую они же как раз и проводят.
Уезжать из города не планирую - есть вещи, которые меня здесь держат. Хотя, в детстве мечтал уехать в Питер, но теперь это вряд ли. Так что при всех неудобствах только таргем. Но все-таки надеюсь, что тут еще какая команда появится.
Из треда, само собой, не уйду, даже не ожидал такой активности.
>> No.921 Reply
Задачи из школьной олимпиады.
1)"Три участника переговоров сели за треугольный стол. каждый сел со своей стороны этого стола, при чем провно в середине стороны. Напишите программу, которая вычислит среднее расстояние между участниками переговоров."

Я, когда догадался до ее решения, утонул в одном затяжном фэйспалме. Тут программа всего в пять строчек получается, а дают за нее 10 баллов - столько же, сколько за вторую, на которую я и потратил почти все олимпиадное время.

2)"В час пик на остановку одновременно подъехали три маршрутных такси, следующие по одному маршруту, в которые тут же набились пассажиры. Водители обнаружили, что количество людей в разных маршрутках разное, и решили пересадить часть пассажиров так, чтобы в каждой маршрутке было поровну пассажиров. Требуется определить, какое наименьшее количество пассажиров при этом придется пересадить. Программе вводится три натуральных числа, не превосходящих 100 - количество пассажиров в первой, второй и третьей маршрутках соответственно. Программа должна выводить одно число - наименьшее количество пассажиров, которое требуется пересадить. Если это невозможно, выведите слово IMPOSSIBLE."

Решал я с помощью массивов, циклов и булевых выражений. Ошибка, которую я так и не смог тогда исправить у меня была в самом начале. Программа должна была брать входные данные - сразу три числа - из внешнего текстового файла, после присвоить каждое число по порядку трем элементам массива. Присвоение я написал через копирование текста из переменной со значением из внешнего файла с нулевой позиции до позиции первого пробела. Затем скопированное из той переменной должно было удаляться. На этой строке компилятор выводил, кажется, identified qualified. Я без понятия, что это значит.
>> No.922 Reply
>>921
Учи, анон, язык программирования J. Там обе задачи решаются в одну строчку:
task1 =: -:
task2 =: ; @ ((<. = ]) { ('IMPOSSIBLE'&;)) @ (+/ @ ((}.^:(<&0 @ {.)) @ (}. @ (/:~ - (%&3 @ (+/))))))
>> No.924 Reply
>>922
охлол, это вин.
с:модплок модной явно указывает что j (или apl?) с опозданием но войдет в моду
>> No.925 Reply
>>920
Internship у нас тоже применяется, только не везде и надо уметь договариваться. В принципе работал с человеком, который учился на 5-м курсе и у нас работал на половину рабочего дня. Ну и были товарищи, которые тоже учились и работали полный рабочий день. Но это естественно возможно только на старших курсах, на младших, наверное, просто времени не хватит еще и работать. Тут как-бэ я не эксперт, у меня вышки нет.

Если интересует вообще выбор разных движков, то тут: http://www.devmaster.net/engines/ большой каталог движков, а тут: http://www.twilightsembrace.com/personal/gamelibs.php список разных, полезных, бесплатных библиотек.
>> No.926 Reply
>>924
> j (или apl?)
Ты сделал меня плакать от радости: в /s/ есть люди, которые знают про APL!
>> No.933 Reply
>>922
Я нихуя не понимаю :-(
Анонимус, можешь прокомментировать как это работает?
>> No.934 Reply
>>933
Это шутка юмора какбэ. ^_^
Но если тебе действительно интересно, то читай здесь: http://ru.wikipedia.org/wiki/J_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29
И здесь: http://dr-klm.livejournal.com/42312.html
>> No.937 Reply
>>933
> Анонимус, можешь прокомментировать как это работает?
Могу, конечно.

Чтобы было понятнее, я напишу программу из восьми отдельных строк (потом объединю их в одну). Это будет несколько другое решение, чем приведенное ранее, поскольку первый вариант ограничен случаем трех автобусов.

Выясним сначала, сколько человек должно оказаться в каждом автобусе после пересадки:
mean =: +/ % #
=: обозначает присваивание: в данном случае мы присваиваем имени mean функцию вычисления среднего (или функции присваиваем имя). Аргументом функции mean будет массив натуральных чисел (начальное количество пассажиров в каждом автобусе). Среднее - это "сумма всех элментов делить на их количество", верно? Так и пишем: сумма (+/) делить (%) на количество (#). # x возвращает количество элементов в x, x % y делит x на y, а на +/ стоит остановиться подробнее. Сам по себе +, понятное дело, вычисляет сумму. А вот / делает из + новую функцию, которая получает в качестве аргумента массив y и вычисляет y[0] + y[1] + y[2] + ... Точно так же можно написать */ и получить функцию, которая считает произведение всех элементов массива.

Вся конструкция из трех функий называется "вилкой". Когда J видит что-то вроде (f g h) y, он интерпретерует это как (f y) g (h y). Или, если аргументов два (слева и справа), то x (f g h) y интерпретируется как (x f y) g (x h y). Просто, понятно, легко запоминить: например, - * + это "разность, умноженная на сумму". Как слышится, так и пишется.

Если теперь мы напишем mean 25 21 14, оно ответит нам "20".

Теперь посчитаем, сколько человек должно выйти из каждого автобуса.
getout =: ] - mean
] - это функция, просто возвращающая свой правый аргумент. - это минус. Вся конструкция - уже знакомая нам вилка, и означает она "из массива (]) вычесть (-) среднее значение этого массива (mean)". Вычитание одного числа из массива - это вычитание этого числа из каждого элмента массива (что логично). Результатом вычисления getout 25 21 14 будет массив 5 1 _6. (знаком подчеркивания обозначаются отрицательные значения).

Из первого автобуса должны выйти 5 человек, из второго 1, из последнего -6 (то есть в него должно сесть 6 человек). Для того, чтобы найти ответ на поставленный в задаче вопрос, надо найти общее количество выходящих - то есть надо сложить все положительные числа из полученного массива. Напишем вот такую функцию:
positive =: >&0
Функция > возвращает 1, если ее первый аргумент больше второго. С помощью & мы делаем из функции сравнения функцию сравнения с нулем (точно так же мы могли бы получить функцию умножения на три, написав *&3). Если применить эту функцию к массиву 5 1 _6, то мы получим 1 1 0. Теперь, когда мы научились отличать положительные числа, нам не составит труда их просуммировать:
sumofpositive =: +/ @ (] * positive)
В скобочках уже знакомая вилка из знакомых функций: здесь сам массив умножается на массив нулей и единиц, вычисленный функцией positive. Умножением массивов делается поэлементно, так что умножив 5 1 _6 на 1 1 0 мы получим 5 1 0 - массив, в котором остались только положительные значения. +/ вычисляет сумму элементов этого массива. @ обозначает композицию двух фукнций, то есть указывает на то, что суммировать надо результат вычисления в скобках. Результат вычисления sumofpositive 5 1 _6 равен 6. Задача почти решена - осталось только рассмотреть случай, когда пересадка невозможна. А она будет невозможна только в одном случае - если из какого-то автобуса должно выйти дробное количество пассажиров. Напишем функцию проверки на натуральность:
integer =: <. = ]
<. - это округление вниз. = - это равно. Все вместе читается "округленное значение числа равно самому этому числу". Если вычислить integer 10 20 0.5 мы получим 1 1 0. Теперь напишем еще одну функцию:
allintegers =: *./ @ integer
*. - это логическое "И". А / делает из этого "И" функцию, которая будет вычислить y[0] И y[1] И y[2] ... для всего массива. Эта функция выполняется поверх (@) функции integer. В результате allintegers 10 20 0.5 дает 0, а allintegers 10 20 дает 1. Теперь напишем тупейшую функцию, которая всегда возвращает строку IMPOSSIBLE:
IMPOSSIBLE =: 'IMPOSSIBLE'&[
[ очень похожа на ], только она возвращает свой первый (левый) аргумент, игнорируя правый. С помощью & мы "закрепляем" левый аргумент, и получаем функцию от одного аргумента, который она будет игнорировать и всегда выдавать 'IMPOSSIBLE'. Это выглядит немного странно, но из дальнейшего будет видно, зачем это нужно.

Теперь осталось свести это воедино. Для того, чтобы получить результат, нам надо подсчитать, сколько человек выходит из каждого автобуса (getout); затем, если все полученные числа - целые (allintegers), нам надо просуммировать положительные числа (sumofinteger), а если не целые - то напечатать IMPOSSIBLE. Пишем:
task2 =: (IMPOSSIBLE`sumofpositive@.allintegers) @ getout
@ getout говорит нам о том, что выражение в скобках выполняется поверх getout. Интерес представляет выражение в скобках: в нем с помощью одинарной кавычки из двух функций IMPOSSIBLE и sumofpositive создается массив из двух функций. С помощью @. из этого массива извлекается (и выполняется) нужная функция (именно для этого нам и нужно, чтобы IMPOSSIBLE была такой же функцией, как и sumofpositive). А какая именно функция нужна - вычисляется с помощью allintegers. Если в массиве будет дробное число, allintegers вернет 0 и @. извлечет функцию IMPOSSIBLE; если все числа - целые, она вернет 1, и будет выполнена sumofpositive. task2 25 21 14 возвращает 6, а task2 20 20 21 возвращает IMPOSSIBLE (потому что в этом случае треть пассажира из последнего автобуса должна пересесть в первый, а вторая его треть - во второй).

Разумеется, то же самое можно записать в одну строчку, просто заменяя все имена функций их содержимым:
task2p =: (('IMPOSSIBLE'&[)`(+/ @ (] * (>&0)))@.(*./ @ (<. = ]))) @ (] - (+/ % #))
Хотелось бы обратить внимание на то, что во всей программе нет ни одной переменной - даже формальной. Это и есть function-level programming (не путать с functional pogramming).

Спасибо всем, кто дочитал до этого места.
>> No.938 Reply
>>934
ссылка доставила, спасибо!
>>937
охуенное спасибо.
алсо piem taradox
>> No.939 Reply
>>934
> Это шутка юмора какбэ.
J - сириуз бизнес, какие тут могут быть шутки, анон?
> И здесь: http://dr-klm.livejournal.com/42312.html
Хорошая статья, ага. Только dr-klm клевещет на J, когда говорит, что сортировка работает за O(N*log N) - в J сортировка базовых типов выполняется за линейное время. Так что его программа работает гораздо эффективнее, чем кажется ему самому, лол.
>> No.940 Reply
>>939
> сортировка базовых типов выполняется за линейное время.
c этого момента поподробнее
>> No.942 Reply
>>940
Ограничение в N * log N существует только в том случае, если мы можем только сравнивать элементы массива между собой. А если мы можем без этого обойтись, то можно уложиться и в линейное время. Например, если нам надо отсортировать список из 4 млрд людей по их полу, то нам достаточно сделать только два прохода по массиву - на первом выбираем всех мужчин, на втором - всех женщин. Алгоритм, основанный на сравнениях (типа quicksort) сделал бы log N = 32 прохода. Подобный метод можно реализовать и для других типов данных - целых или вещественных, например (см. bucket sort). Для базовых типов в J что-то подобное и сделано.
>> No.943 Reply
>>942
посмотрел на radix sort
она работает за n*log(k) , к - количество возможных значений элемента.
получается, что несмотря на линейность она (почти) всегда медленее тех, что на сравнениях
>> No.945 Reply
>>943
Нет. Здесь log - не обязательно двоичный логарифм. Двоичным он будет только в том случае, если "разрядом" при сортировке будет двоичный разряд. Но если мы будем рассматривать в качестве "разряда" один байт (нам понадобится доп. массив из 256 счетчиков, но это пустяки), то логарифм будет по основанию 256, и сортировку 32ухбитных целых мы сможем выполнять за 4 прохода. То есть, если количество элементов в массиве больше 16, то radix sort будет быстрее quicksort'а или любой другой сортировки, основанной на сравнениях.
>> No.946 Reply
>>944
ах да, это меня проглючило что основание будет менять сложность алгоритма.
>> No.947 Reply
Привет, /s/. Ездил сегодня на олимпиаду в Ургу.
Наша команда называлась epic_fail, и мы хотели очень здорово посмеяться, когда бы объявляли наше первое место, но как лодку назовешь, так она и это.
Мы решили что-то 8 или 9 задач из 12, но ни одна из них не прошла даже первого теста в проверке. Пять часов мы психовали, пытались отлаживать код, добивались идеала, но каждый раз нам приходило сообщение wrong answer.
Порадовался лишь при разборе задач, когда выяснилось, что я в своей программе при решении одной из них учел все возможные ошибки, на которых другие команды погорели. Но при этом она все равно оказалась неправильной, и я так и не понял, почему.
Такие дела. Если кому надо, через какое-то время смогу выложить тексты задач.
>> No.948 Reply
>>947
ну давай, выкладывай.
просто я был на олимпиаде по информатике только раз в 6ом классе, в остальных случаях физик запретил.
>> No.953 Reply
>>845
> В результате почти все проекты, написанные на Jav'е - это несусветное уебанство
Потрясающе! Eclipse, значит уебанство. Куча веб-приложений, написанных на яве(среди них веб-морда к Vmware server 2.0) тоже уебанство. I lol'd it.
>> No.955 Reply
File: 819.png
Png, 0.97 KB, 200×20 - Click the image to expand
edit Find source with google Find source with iqdb
819.png
Так, я сразу говорю, что мимо проходил, дабы избегнуть лишних обвинений.

>>953
Честно признайся, что ты просто фанбой жавы. Или тролль. Теперь подробности:
> Eclipse, значит уебанство.
И ещё какое. Впрочем, последними его версиями я непользовался, потому как осознал вышеуказанную причину. Возможно, его уже улучшили/пофиксили, но пару лет назад настолько тормознутую IDE, падающую без напильника, нужно было ещё поискать.
> веб-морда к Vmware server 2.0
Ты ей не пользовался, что ли? Лично у меня она отваливается при каждой перезагрузке. И нет, это не проблема компа, или кривых рук, это проблема входящего в комплект поставки кошака, отказывающегося поднимать свои страницы.

Этот поток слов, что был выше, ни в коем случае не направлен против Жабы. На ней действительно написана куча хороших вещей... Но ни одной из них ты не перечислил. Try again.

PS Капча намекает на самый длинный тред в /s/ :3
>> No.956 Reply
>>953
Веб-морда к Vmware server 2.0 - уебанство. Нет, правда.
>> No.957 Reply
File: Безымянный.jpg
Jpg, 78.28 KB, 796×599 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.jpg
Играю в эту http://armorgames.com/play/4707/genesis игрушку. Дико доставляет. Завтра закину денег на карточку и переведу автору 10 баксов. Flash. В таргемовские игры не играл.
>> No.958 Reply
>>955
> Этот поток слов, что был выше, ни в коем случае не направлен против Жабы. На ней действительно написана куча хороших вещей... Но ни одной из них ты не перечислил. Try again.
Хм, а каких кстати? Из жаба-ёбства у меня например только Vuze, но хоть его и писали не долбоёбы, он жрет в 100 раз больше ресурсов чем всякие трансмишны и рторренты.
Немного жабаёбства есть в OOo, но основной код там на плюсах.
>> No.960 Reply
>>957
Как ты прошел битву, где против тебя 4 лучника и воин?
>> No.961 Reply
>>960
Я еще не дошел до туда, я понемногу играю. А так описание прохождения на сайте у автора есть, если совсем думать лень.
>> No.962 Reply
>>961
Все уже, прошел эту битву. Игра таки сложная...
>> No.966 Reply
>>937
Большое тебе спасибо, анон.
>> No.1624 Reply
File: 1230149795212.png
Png, 23.12 KB, 298×291
edit Find source with google Find source with iqdb
1230149795212.png
File: bobra.jpg
Jpg, 162.06 KB, 400×533
edit Find source with google Find source with iqdb
bobra.jpg

>>842
Доброанон, ты сделал меня счастливым!
Бобра тебе!


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]