LINUX.ORG.RU

Нормальная ли система обучения?

 ,


1

4

Я немного знаю C++ (что такое класы, абстракция, инкапсуляция, массивы понимаю). Будет-ли нормально если я с этими небольшими знаниями начну изучать Qt, а потом уже потихоньку читать Бьерна Страуструпа, Лафоре, и т.д?

Ответ на: комментарий от anonymous

Так вот отлично вспоминается как вначале было куда интереснее склепать что-то с «окошками», а не просто с консольными программами играться.

Если оно тебе интересно, то задумайся, а надо ли тебе вообще заниматься программированием?

Я уж не говорю про весь тот непоправимый вред для психики, который нанесет любой окошечный фреймворк. Qt в этом плане ничуть не лучше MFC. После такого нормально, качественно программировать никто и не сможет.

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

anonymous
()
Ответ на: комментарий от VadimAlexeev

Вот вот! Я пока нихрена не понимаю кайфа консольных приложений. Спасибо большое!!!!

И кого ты слушаешь? Бывшего дельфиниста? У него уже мозги сгнили безвозвратно.

Если тебе интересна графика - пожалуйста, занимайся графикой. Только без окошек-менюшек-конпочек-хренопочек. Потому как если углубишься в это говно, программистом уже никогда не станешь. Бери SDL и OpenGL, и вперед.

anonymous
()
Ответ на: комментарий от mix_mix

ты бы не высирал такой бред про абстракции сколько угодно высокого порядка в С++.

Приведи пример абстракции, которую нельзя было бы элегантно и без протечек изобразить на C++.

в крестах не запилят нормальную систему типов

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

anonymous
()
Ответ на: комментарий от anonymous

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

VadimAlexeev
() автор топика
Ответ на: комментарий от cdshines

Хотя чем дальше, тем болше тред скатывается в ООП против ФП, как обычно

На самом деле нет. Я не против ООП, это вообще довольно полезная штука, если его опять же правильно использовать, а не попадаясь в маркетинговые сети начинать сувать и туда, и сюда, где оно, в общем-то, нахрен не нужно. Но ООП тоже разное бывает: есть Smalltalk, есть какой-нибудь Ruby, маргинальный Io, CLOS. Вот это хорошее ООП, реализованное по всем канонам и принципам. А та отрыжка, что есть в С++ (которая перекочевала из не менее убогого Eiffel) и которая ошибочно выдаётся под видом ООП, вот это нужно уничтожать. Я не за ФП, оно тоже годится далеко не для всех задач. Я за то, что каждой задаче по своему инструменту. Так вот С++, претендуя на лавры «универсального», справляется с каждой задачей одинакого плохо (как и с реальными мультитулами). Поэтому меня больше беспокоит то, что люди как упрутся рогом в один какой-то инструмент (более того объективно хреновый), так и всю жизнь паразитируют на обществе, заставляя потомков разгребать их тонны говнокода.

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

И этот же самый человек чего-то тут верещит про лишп, в котором вообще никакой системы типов нет.

Ой дурак, ой дурак. У меня нет слов.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Ну расскажи народу про статическую типизацию в лишпике. Посмеемся.

Тогда как на системе типов C++ можно даже dependant types делать. Хачикель отдыхаетю

anonymous
()
Ответ на: комментарий от anonymous

Приведи пример абстракции, которую нельзя было бы элегантно и без протечек изобразить на C++.

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

nonfix nil; 

avltree xs = foldl insert nil xs; 

null nil = 1; 
null (bin _ _ _ _) = 0; 

insert nil y = bin 1 y nil nil; 
insert (bin h x t1 t2) y 
   = rebal (mknode x (insert t1 y) t2) if x > y; 
   = rebal (mknode x t1 (insert t2 y)); 

delete nil y = nil; 
delete (bin h x t1 t2) y 
   = rebal (mknode x (delete t1 y) t2) if x > y; 
   = rebal (mknode x t1 (delete t2 y)) if x = join t1 t2; 

join nil t2 = t2; 
join t1@(bin _ _ _ _) t2 
   = rebal (mknode (last t1) (init t1) t2); 

init (bin h x t1 nil) = t1; 
init (bin h x t1 t2) = rebal (mknode x t1 (init t2)); 

last (bin h x t1 nil) = x; 
last (bin h x t1 t2) = last t2; 

mknode x t1 t2 = bin (max (height t1) (height t2) + 1) x t1 t2; 

height nil = 0; 
height (bin h x t1 t2) = h; 

slope nil = 0; 
slope (bin h x t1 t2) = height t1 - height t2; 

rebal t
   = shl t if slope t == -2; 
   = shr t if slope t == 2; 
   = t; 

rol (bin h x1 t1 (bin h2 x2 t2 t3)) 
   = mknode x2 (mknode x1 t1 t2) t3; 

ror (bin h1 x1 (bin h2 x2 t1 t2) t3) 
   = mknode x2 t1 (mknode x1 t2 t3); 

shl (bin h x t1 t2)
   = rol (mknode x t1 (ror t2)) if slope t2 == 1; 
   = rol (bin h x t1 t2); 

shr (bin h x t1 t2)
   = ror (mknode x t1 (ror t2)) if slope t2 == -1; 
   = ror (bin h x t1 t2);
Кто там код просил? А теперь изобрази мне тоже самое на крестах (или найди где готовую реализацию) и умри от осознания их (и своей заодно) ущербности. Но разумеется ты сольёшься, и я так, в конечном счёте, и не увижу от тебя ни строчки кода.

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

Ну расскажи народу про статическую типизацию в лишпике.

Ты вообще хоть понимаешь разницу между статической и динамической, слабой и сильной? Судя по всему, нет, иначе бы ты не высерал такой бред «лишп, в котором вообще никакой системы типов нет» про сильную типизацию «лишпа».

(defun mult (to from val)
    (declare (type (simple-array fixnum (*))
                   to from))
    (declare (type fixnum val))
    (let ((size (array-dimension to 0)))
      (dotimes (i size)
         (setf (aref to i)
                 (the fixnum (* (aref from i) val))))))

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

Если оно тебе интересно, то задумайся, а надо ли тебе вообще заниматься программированием?

Ты вообще читал на то, что отвечаешь или ответил на первые встретившиеся знакомые слова? БЫЛО ИНТЕРЕСНО. Да, нубу было интересно увидеть «более впечатляющий результат». Ничего плохого в этом не вижу совершенно. «Простым людям» как-то тоже больше графические среды нравятся, а не консоль. Тебя это тоже удивляет?

Я уж не говорю про весь тот непоправимый вред для психики, который нанесет любой окошечный фреймворк. Qt в этом плане ничуть не лучше MFC. После такого нормально, качественно программировать никто и не сможет.

Опять ерунда. Если глубоко не лезть, то фреймворки понимания не дают, это да. Ну и что? Углубляться ведь всё равно придётся. Зато топик-стартеру будет интересно. Параллельно он знания по языку подтянет. А дальше уже к чему душа лежит.

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

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

А на хaскели/лиспы я смотрю без розовых очков. Просто интересно.

anonymous
()
Ответ на: комментарий от mix_mix

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

Предложи более удачный язык для геймдева и всяких программ вроде 3ds Max, Maya и т.д.

anonymous
()
Ответ на: комментарий от anonymous

Для геймдева С++ не придумаешь. Gtk - не фреймворк?

VadimAlexeev
() автор топика
Ответ на: комментарий от VadimAlexeev

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

Ты все три мои пункта уже выполнил? Нет? Так что ты тут пасешь?

Тут каждый клоун вещает со своей колокольни. Тебя волнуют чужие проблемы?

anonymous
()
Ответ на: комментарий от anonymous

Предложи более удачный язык для геймдева и всяких программ вроде 3ds Max, Maya и т.д.

Лол, гугли по теме «The Next Mainstream Programming Languages: A Game Developer's Perspective», будешь, мягко говоря, озадачен.

mix_mix ★★★★★
()

Короче решил, читаю k&r, делаю все упражнения, решаю задачки, изучаю исходники, применение. Далее Бьерн, и уже потом выбор, что делать дальше.

VadimAlexeev
() автор топика
Ответ на: комментарий от mix_mix

Давно смотрел. И что там такого? На сегодняшний день ничего лучше плюсов для геймдева нет.

anonymous
()
Ответ на: комментарий от VadimAlexeev

Короче решил, читаю k&r, делаю все упражнения, решаю задачки, изучаю исходники, применение.

Правильно.

Далее Бьерн, и уже потом выбор, что делать дальше.

А вот это спорно. Я бы вначале обратил свой взор на нормальные языки, а к крестам обращался бы только потом, уже через призму опыта. А подумаешь ещё, что всё, как там, так-де делать правильно. А если действительно влечёт к низкоуровщине, то архитектура, архитектура и ещё раз архитектура. Ну и на wasm.ru загляни, статьи почитай, тоже полезно.

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

Давно смотрел. И что там такого?

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

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

Ты мне (или собрат твой анонимный) когда код родишь? Долго мне ждать?

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Люди осознают ущебность крестов, до них доходит

Осознали уже. Исправились. C++11 устранил все ущербности, окончательно.

Ты мне (или собрат твой анонимный) когда код родишь?

Своей реализацией делиться не буду, она заоптимизирована слишком, лапшой назовешь. Вот тебе красивая, эквивалентная хачкелевой реализация:

http://oopweb.com/Algorithms/Documents/AvlTrees/Volume/AvlTrees.htm

Причем, эффективность даже сравнивать глупо. Хачикелевая версия тормозит.

anonymous
()
Ответ на: комментарий от VadimAlexeev

Но с++ - нужная вещь.

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

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Не, плюсы нужно изучать серьезно. Они имеют серьезное применение практически в любой сфере деятельности.

VadimAlexeev
() автор топика
Ответ на: комментарий от mix_mix

Люди осознают ущебность крестов

Давно уже осознали, вот только толку с этого? Я же не утверждаю, что C++ - ЛУТШИЙ ЕЗЫК ПРАГРАМИРОВАНИЯ!!!1, а только то, что ничего лучше плюсов для задач гейдева нет. Ты несколько постов ранее утверждал, что для любой задачи можно подобрать более адекватный инструмент.

anonymous
()
Ответ на: комментарий от anonymous

Люди осознают ущебность крестов

Давно уже осознали, вот только толку с этого

Вот только сектанты вроде mix_mix ситуацию никак не изменят, т.к. только могут понтоваться всяким матаном на форумах, а не программы писать.

anonymous
()
Ответ на: комментарий от anonymous

Вот тебе красивая, эквивалентная хачкелевой реализация

template <class KeyType>
Comparable<KeyType> *
AvlNode<KeyType>::Delete(KeyType              key,
                         AvlNode<KeyType> * & root,
                         int                & change,
                         cmp_t                cmp)
{
      // See if the tree is empty
   if (root == NULL) {
         // Key not found
      change = HEIGHT_NOCHANGE;
      return  NULL;
   }

      // Initialize
   Comparable<KeyType> * found = NULL;
   int  decrease = 0;

      // Compare items and determine which direction to search
   cmp_t  result = root->Compare(key, cmp);
   dir_t  dir = (result == MIN_CMP) ? LEFT : RIGHT;

   if (result != EQ_CMP) {
         // Delete from "dir" subtree 
      found = Delete(key, root->mySubtree[dir], change, cmp);
      if (! found)  return  found;   // not found - can't delete
      decrease = result * change;    // set balance factor decrement
   } else  {   // Found key at this node
      found = root->myData;  // set return value

      if ((root->mySubtree[LEFT] == NULL) &&
          (root->mySubtree[RIGHT] == NULL)) {
             // We have a leaf -- remove it
         delete  root;
         root = NULL;
         change = HEIGHT_CHANGE;    // height changed from 1 to 0
         return  found;
      } else if ((root->mySubtree[LEFT] == NULL) ||
                 (root->mySubtree[RIGHT] == NULL)) {
            // We have one child -- only child becomes new root 
         AvlNode<KeyType> * toDelete = root;
         root = root->mySubtree[(root->mySubtree[RIGHT]) ? RIGHT : LEFT];
         change = HEIGHT_CHANGE;    // We just shortened the subtree
            // Null-out the subtree pointers so we dont recursively delete
         toDelete->mySubtree[LEFT] = toDelete->mySubtree[RIGHT] = NULL;
         delete  toDelete;
         return  found;
      } else {
            // We have two children -- find successor and replace our current
            // data item with that of the successor
         root->myData = Delete(key, root->mySubtree[RIGHT],
                               decrease, MIN_CMP);
      }
   }

   root->myBal -= decrease;       // update balance factor 

   if (decrease) {
      if (root->myBal) {
         change = ReBalance(root);  // rebalance and see if height changed
      } else {
         change = HEIGHT_CHANGE;   // balanced because subtree decreased
      }
   } else {
      change = HEIGHT_NOCHANGE;
   }

   return  found;
}

vs.

delete nil y = nil; 
delete (bin h x t1 t2) y 
   = rebal (mknode x (delete t1 y) t2) if x > y; 
   = rebal (mknode x t1 (delete t2 y)) if x = join t1 t2; 
Даа, такая-то красота, просто слов нет. Наверное, я всё же чего-то не понимаю, коль ты считаешь свой крестовый пример хоть немного красивым. Ты мне скажи как сильно надо головой о стену стукнуться, чтобы начать так считать.

Причем, эффективность даже сравнивать глупо.

Разумеется эффективность труда программиста даже сравнивать глупо.

Хачикелевая версия тормозит.

Пруфы будут? Или как обычно?

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

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

Пожалуйста: C#, F#, Nemerle, Java, пускай даже какая-нибудь Scala, если её грамотно использовать. Тот же хачикель пока не годится, но здесь проблема не в языке, а лишь в его текущей реализации (для тупых: это временно).

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

Вот только сектанты вроде mix_mix ситуацию никак не изменят

Сектанты это те, кто кричит, что С++ это наше всё, и лучше него вообще ничего нет.

понтоваться всяким матаном

Ты вообще анализ от алгебры отличаешь?

а не программы писать

Подобные той уродливой во всех смыслах реализации AVL-деревьев, что ты привёл? Нет уж, спасибо, таких программ не надо никому.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

C#, F#, Nemerle, Java, пускай даже какая-нибудь Scala, если её грамотно использовать.

Я как бы все еще о гейдеве говорю. Если ты тоже, то от этого списка мне становится смешно.

anonymous
()
Ответ на: комментарий от mix_mix

Сектанты это те, кто кричит, что С++ это наше всё, и лучше него вообще ничего нет.

Здесь кричат, что на C++ можно писать полезные крупные программы (надеюсь это утверждение очевидно). На твоем хачкеле можно только факториалы да AVL деревья писать. Полезных программ - 0.

Ты вообще анализ от алгебры отличаешь?

Под матаном я другое имел в виду.

anonymous
()
Ответ на: комментарий от anonymous

Я как бы все еще о гейдеве говорю. Если ты тоже, то от этого списка мне становится смешно.

Всем как бы похер смешно тебе или нет, они знай себе делают, да делают игры на этих языках. Я не знаю как часто используются F# и Nemerle, но это исключительно из-за их маргинального статуса (и то первый спорно), технических ограничений нет никаких. Под CLR есть нативные структуры, есть XNA, так что игры особо даже не тормозят. Java, представь себе, всегда использовалась для этого. Ну Scala, опять же, если руки прямые — расчёты на неё перекладывать глупо, а вот какой-нибудь AI вполне.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

они знай себе делают, да делают игры на этих языках.

Я про серьезные AAA игры, а не социалки для фейсбука или втентакля.

есть XNA, так что игры особо даже не тормозят

Ога. Только никто так это и не смог доказать. Единственная серьезная игра на XNA - Magicka, только выглядит она как привет из начала 2000-ых и жутко тормозит.

anonymous
()
Ответ на: комментарий от anonymous

Здесь кричат, что на C++ можно писать полезные крупные программы

Можно, кто спорит? Но в теории и гланды через задний проход можно удалять. Другой вопрос нужно это или стоит всё же более подходящий инструмент использовать. Наверное, gamedev это единственная область, где использование крестов (пока!) хоть как-то оправдано.

На твоем хачкеле можно только факториалы да AVL деревья писать. Полезных программ - 0.

Опять двадцать пять. Программ дофига, ты просто о них не знаешь. Более того, представь себе, все эти лишпы и хачкели ещё как используются в ынтерпрайзе, особенно как раз для различных расчётов, data mining и проч. У нас для телекоммуникационного софта своя DSL на лиспе крутится, со встроенным оптимизатором запросов, редукциями на графе и прочими плюшками.

Под матаном я другое имел в виду.

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

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

Ога. Только никто так это и не смог доказать.

Ты так до сих пор и не смог доказать, что деревья в хачкеле тормозят.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Это был другой анонимус. Я про тормознутость деревьев в хачкеле ничего не утверждал.

anonymous
()
Ответ на: комментарий от anonymous

Так вот отлично вспоминается как вначале было куда интереснее склепать что-то с «окошками»

Как интересно! Да ты просто король вечеринок!

anonymous
()
Ответ на: комментарий от anonymous

только выглядит она как привет из начала 2000-ых и жутко тормозит

Если трахаться с OpenGL, а не DirectX, у которого все интерфейсы сугубо приплюснутые (собственно, немаловажный фактор почему везде используются плюсы), то я бы ядро игрушки делал на OСaml, а сверху лишпе всё остальное, включая скриптовую логику и остальную дребедень. А вот пройдёт еще лет 5, закон Мура пока продолжает действовать, посмотрим как ты закукарекаешь.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

а не DirectX, у которого все интерфейсы сугубо приплюснутые (собственно, немаловажный фактор почему везде используются плюсы)

Ты бред несешь же. На DirectX можно спокойно писать на Plain C.

anonymous
()
Ответ на: комментарий от mix_mix

А вот пройдёт еще лет 5, закон Мура пока продолжает действовать, посмотрим как ты закукарекаешь.

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

anonymous
()
Ответ на: комментарий от anonymous

сколько существует лисп говорят про закон Мура

Здесь я облажался, да. Закон Мура появился в 65-ом. Впрочем суть утверждения не меняет.

anonymous
()
Ответ на: комментарий от mix_mix

то я бы ядро игрушки делал на OСaml
я бы делал
я бы

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

anonymous
()
Ответ на: комментарий от mix_mix

то я бы ядро игрушки делал на OСaml, а сверху лишпе всё остальное

И где же?

O02eg ★★★★★
()
Ответ на: комментарий от VadimAlexeev

Короче решил, читаю k&r, делаю все упражнения, решаю задачки, изучаю исходники

Правильно решил. Не важно, будешь изучать кресты или нет, будешь ли делать гуйню или нет, будешь ли программистом или нет, в любом случае начинать с K&R при твоих запросах самое оптимальное.

LamerOk ★★★★★
()
Ответ на: комментарий от mix_mix

Программ дофига, ты просто о них не знаешь.

Ну да, слышали уже. В засекреченных бункерах, глубоко в джунглях.

Более того, представь себе, все эти лишпы и хачкели ещё как используются в ынтерпрайзе, особенно как раз для различных расчётов, data mining и проч.

Но только (тсссс!) в очень-очень засекреченном ынтырпрайзе. В свинцебетонных бункерах, глубоко под землей, в джунглях Амазонки. А тебя теперь выследят и убьют, за то, что секрет растрепал.

У нас для телекоммуникационного софта своя DSL на лиспе крутится, со встроенным оптимизатором запросов, редукциями на графе и прочими плюшками.

И пишешь ты сейчас из засекреченного свинцебетонного бункера?

anonymous
()
Ответ на: комментарий от anonymous

Ну да, слышали уже. В засекреченных бункерах, глубоко в джунглях.

Ну на:

http://www.franz.com/success/all_customer_apps.lhtml

http://www.lispworks.com/success-stories/index.html

http://dev.clojure.org/display/community/Clojure Success Stories

Что теперь? Убьешься об стену?

anonymous
()
Ответ на: комментарий от anonymous

Ну и какое мне дело до твоего списка засекреченных бункеров? В реальной-то индустрии всего этого нет.

anonymous
()
Ответ на: комментарий от anonymous

Ну и какое мне дело до твоего списка засекреченных бункеров? В реальной-то индустрии всего этого нет.

Лол, реальная индустрия выбирает Java, C++ там и рядом не валялся со своими матанистыми лямбдами. То же мне индустриальщик нашелся... Игрульки для школоты сиди делай.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.