Ответы пользователя по тегу IT-образование
  • Java почему вылетает java.lang.NullPointerException?

    Daniro_San
    @Daniro_San
    Программист
    В Java массив - тоже класс, а значит по него должна быть выделена память в куче.
    Ответ написан
    Комментировать
  • Олимпиадное программирование с чего начать?

    Daniro_San
    @Daniro_San
    Программист
    Просто пиши на C++ что нибудь интересное для себя, попутно читая про непонятные для тебя вещи.
    Ответ написан
    Комментировать
  • Что изучать C# или С++?

    Daniro_San
    @Daniro_San
    Программист
    C# не то что бы легче, просто язык многое делает неявно за тебя, многие вещи сложны внутри, но простые для использования.
    C# усваивается легче, идет сразу с библиотеками почти на все случаи жизни.

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

    Понимание C++ дает лучшее понимание как устроена та или иная фишка из C#.

    Вот пример "неявности" C#:
    struct StackWork {  
            public Int32 Value;
        }
    
       class HeapWork {
           public Int32 Value;
       }
       
       // ...
       StackWork sw1 = new StackWork();
       StackWork sw2 = sw1;
       sw2.Value = 475;
      
       Console.WriteLine( sw1.Value.ToString() ); // 0
       
       // ...
       HeapWork hw1 = new HeapWork();
       HeapWork hw2 = hw1;
       hw2.Value = 475;
    
       Console.WriteLine( hw1.Value.ToString() ); // 475


    То есть, область выделяемой под обьект памяти (куча или стек) зависит от типа, причем при одинаковом синтаксисе ( "new TypeName()" ).
    Конечно, это сделано для удобства, но в C# ты не можешь выбирать в какой области памяти разместить свой обьект!

    А вот пример на "страшных и неинтуитивных плюсах":
    struct MyWork {  
            int Value = 0;
        }
        
       //...
       // Явно, выделяем память в стеке
       MyWork sw1;
       MyWork sw2 = sw1;
       sw2.Value = 475;
       
       cout << sw1.Value; // Как и ожидалось, 0
       
       // Явно, выделяем память в куче
       MyWork * h1 = new MyWork;
       MyWork *h2 = h1;
       hw2 -> Value = 475;
       
       cout << hw1 -> Value; // Как и ожидалось, 475


    Интересные вещи есть и там и там.
    Для бизнеса конечно выгоднее C# (никаких заморочек, поддержка, библиотеки).
    Но все же C++ интереснее для саморазвития.
    Ответ написан
  • Верен ли такой подход к изучению программирования?

    Daniro_San
    @Daniro_San
    Программист
    Копипаста - зло.
    Так и дезигнером стать не далеко - знай себе копипасти да формочки лепи.
    Лучше всего как уже сказали - понять чужой код и написать свой.
    Ответ написан
    Комментировать