Задать вопрос
  • Какие привычки могут сэкономить время?

    GavriKos
    @GavriKos
    - не ставить знаки препинания в сообщениях (sms, соцсети, мессенджеры);
    - сокращать некоторые слова и выражения;

    Это не лайфхаки. Это неуважение к собеседнику. А экономия - копеечная в данном случае.
    Ответ написан
    Комментировать
  • Как начать програмировать для дилитанта?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Начинать никогда не поздно, 35 лет - жизнь только началась, можно сказать. А ваше несчастье не помешает вам развиваться в выбранном вами направлении (программирование). Наоборот, большое количество программистов так и работают - удалённо, из дома. Поэтому, я думаю, что программирование сможет стать вам реальной профессией, а не только хобби (как вы написали в вопросе - "Цель научится писать небольшие прикладные программы так сказать для домашнего пользования").
    А для того, чтобы стать хорошим специалистом, у вас всё есть: самое главное - желание, а также свободное время. При должном усердии уже через полгода-год вы будете уметь "небольшие прикладные программы", а через два года сможете стать конкурентноспособным программистом. Хотя, помните, что хороший программист учится всегда.
    Вам только стоит выбрать, к чему вас больше тянет, потому что в программировании очень много направлений. Посмотрите мой ответ на один вопрос, там я привёл список направлений и технологий, которые нужны для этих направлений. Также указал, что отличает хорошего специалиста от не очень хорошего.
    Я бы посоветовал начать программирование с языка c#, но у вас Линукс, а там нет нормального си-шарпа.
    Хорошим решением был бы выбор Python - это очень простой, но мощный язык; но у него достаточно необычный синтаксис.
    Можно начать и с PHP, но с ним нужно быть аккуратнее, он тоже очень простой, и поэтому легко позволяет писать плохо. Хотя как язык он очень даже неплох.
    Я хочу помочь вам изучать программирование. Напишите мне (лучше на скайп), и я смогу помочь вам выбрать, с чего начать, и далее буду отвечать на ваши вопросы.
    Ответ написан
    1 комментарий
  • Как начать програмировать для дилитанта?

    mak-oleg
    @mak-oleg
    I believe in god, for the rest i pay in cash!
    Интерактивные обучающие курсы
    habrahabr.ru/post/156241
    siliconrus.com/2014/03/code
    Библиотеки
    forcoder.ru
    progbook.ru
    proglibrary.ru
    www.proklondike.com
    Ответ написан
    Комментировать
  • Как начать програмировать для дилитанта?

    1)Не поздно.
    2)На самом деле вообще не важно, главное начать.
    3)Многие сейчас начинают с языка python так он прост и популярен.

    Я рекомендую сайт informatics.mccme.ru
    Есть например курс по питону: informatics.mccme.ru/course/view.php?id=156
    И что важно, можно решать задачки и сдавать их в тестирующую систему, вам будут отвечать правильно ли она решена.

    P.S. Вам дофига чего посоветуют, и на самом деле не важно что вы выберите. Успехов вам.
    Ответ написан
    Комментировать
  • Объясните что такое полиморфизм простыми словами ?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Полиморфизм указывает, какую версию метода текущего объекта запустить.
    Например, у вас есть несколько наследуемых классов, с разной реализацией одного и того же метода. То есть, у вас есть несколько разных методов с одинаковым именем (и сигнатурой), реализованных в разных классах. Какую версию метода вызвать? Это зависит от типа переменной, в которой находится объект.
    Также с помощью полиморфизма можно поместить объекты разных классов в один массив с типом базового класса.

    Создадим три класса с двумя методами - один виртуальный, а другой нет. Виртуальный метод переопределён (override) в классах-наследниках. Невиртуальный метод просто скрыт в наследниках новой реализацией (невиртуальные нельзя переопределять).
    class Animal {
        public void Info() { Console.WriteLine("Animal"); }
        public virtual void Say() { Console.WriteLine("Nothing to say"); }
    }
        
    class Cat : Animal {
        public void Info() { Console.WriteLine("Cat"); }
        public override void Say() { Console.WriteLine("Meow"); }
    }
        
    class Dog : Animal {
        public void Info() { Console.WriteLine("Dog"); }
        public override void Say() { Console.WriteLine("Woof"); }
    }

    При создании объекта важно, в переменную какого типа объект будет записан:
    Dog dog1 = new Dog();
    Animal dog2 = new Dog();
    // Не виртуальный метод - вызовется метод класса, указанного у переменной 
    dog1.Info(); // напишет Dog
    dog2.Info(); // напишет Animal
    // Виртуальный метод - вызовется метод класса, которого переменная реально имеет
    dog1.Say(); // напишет Woof
    dog2.Say(); // напишет Woof


    А теперь частая ситуация, когда полиморфизм нужен - при итерации массива:
    Animal[] animals = new Animal[10];
    FillAnimals(animals); // заполним массив вперемешку собаками и кошками
    
    foreach (var animal in animals) animal.Say(); // вызовется правильный метод
    // У невиртуальных методов так сделать нельзя! Полиморфизм в действии

    Наследование без виртуальных методов полезен только фиксацией интерфейса.

    Вот весь код примера: code.re/5ZC
    Вставьте его вот сюда и проверьте.

    P.S. Написал код на C#, чтобы подчеркнуть разницу между виртуальными и невиртуальными методами. В Javascript все методы виртуальные (как и в php, например).

    UPD. (спасибо @Petroveg)
    В языке C# (и других статически типизированных) обычно делают так - если метод в базовом классе записывается для всех потомков и оттуда будут использоваться напрямую, то он помечается обычным, невиртуальным. А если метод предназначен для того, чтобы в наследниках его переопределить, то необходимо его сделать виртуальным, чтобы при вызове метода компилятор выбрал нужную версию метода. То есть некоторые методы лучше делать виртуальными, а некоторые нет.
    И ещё раз - виртуальность важна только в одном случае - если объект-наследник записан в переменную базового класса:
    Animal animal = new Dog();
    В javascript невиртуальных методов не бывает - динамическая основа этого языка ВСЕГДА автоматически вызывает именно последнюю версию метода, определяя конкретную по цепочке прототипов. Поэтому в Javascipt, по большому счёту, сильно думать о полиморфизме смысла нет - это только абстрактная концепция, не влияющая на сам код, а только на архитектуру.
    Ответ написан
    6 комментариев