• Как выбрать направление развития, или "Это только в начале скучно, или дальше также?

    @Namynnuz
    Дядь, в этом случае надо искать, что тебе по-настоящему нравится, а не «какие вообще (существуют) задачи в серьезном фронтенде». И начинать надо в общем виде, не с сидения за компом в тёплом офисе, чтобы тыкать клавиши вконтакте, а с работы ручками. Вдруг ты пивовар от бога? Или пищевой технолог? Музыкант-исполнитель? Ты пробовал рисовать? Лепить из глины? 3D-моделирование? Преподаватель? Актёр? Повар? Предприниматель? А что, если тебе на самом деле нравится класть собственноручно изготовленный кафель?
    Если ты ищешь своё место в жизни, то надо вопрос оплаты труда вообще исключить из уравнения. Как и комфорта. Любой труд (даже самый творческий) — это в любом случае 95% рутины. Суть «твоего», когда тебя даже аутичная рутина привлекает и ты готов возвращаться к этому снова и снова. Не потому, что пришла пора платить за квартиру. Ты можешь быть вообще голодным бомжом на улице. А потому что иначе не можешь. Потому что без этого не смыслишь своей жизни. Потому что без этого ты потеряешь часть себя, а это гораздо страшнее, чем голод или холод. Когда ты возвращаешься к этому снова и снова, вместо сна, забывая про еду, усталость или не отвеченные сообщения в мессенджерах. Когда ты к этому прорываешься не смотря на все перипетии судьбы, даже когда тебе это прямо запрещается. Для этого надо посмотреть на себя со стороны и изначально не загонять в рамки. Если же ты сразу ограничиваешь себя уютным креслом и пачкой грина — будь готов выть белугой и с отвращением проживать день за днём.
    И вот уже когда ты начнёшь что-то из себя представлять (а с таким фанатичным подходом иного исхода быть не может), можешь уже задумываться о том, как это монетизировать. Успех придёт, обязательно. А даже если не придёт — какая разница, если ты и так самый счастливый человек на свете?
    Ответ написан
    2 комментария
  • Реально в 36-40 лет стать тестировщиком или программистом если есть свободное время?

    @Namynnuz
    Ну, если тебя устраивает, что твоё имя вряд ли будет красоваться рядом с новым прорывным алгоритмом, невероятно изящным подходом, самым лучшим языком программирования или обобщённой методологией, если тебе нравится процесс ради самого процесса, если устало бросаешь, но потом всё равно возвращаешься — попробуй. Главное, не иди в эту область ради денег. Если будет желание, интерес, всё остальное приложится. Найди для себя достаточно интересную область и приятный современный язык (то есть кресты, паскаль — мимо). Если уже на достаточно уровне знаешь английский, если в математику тыкаешься, то может и Кормена со Скиеной осилишь (это по алгоритмам). Ну и SICP стоит прочитать (потом сам сможешь язык или даже компиллятор/транслятор свой написать). С таким багажом ты заткнёшь за пояс охапку джунов, если не миддлов.
    Единственное, не стоит лезть в Web. Слишком низкий уровень входа, слишком большая конкуренция со студентами и пакистанцами. Если башка варит и живёшь в крупнейшей тройке городов (или есть наглость попробоваться к иностранцам), то и джуном возьмут. И в реальных боевых условиях опыт накопится очень быстро, даже если кажется, что уже старик (кстати, в 25-30-35 надо сдавать свой общий уровень тестостерона и, когда он начнёт плохо вырабатываться, потихоньку переходить на ЗГТ, подкалывая его себе до уровня 22-23 лет; а это и интеллект, и энергия, и силы, и выносливость, и здоровье, и долголетие).
    Вообще, в программисты на заре профессии шли умудрённые опытом хардкорные инженеры обоих полов, кому за тридцать (если не сорок), это потом понабежали малолетние хипстеры с андеркатами на гироскутерах и вытеснили взвешенный, вдумчивый подход. С другой стороны, пока рыночек в рассее стремительно схлапывается, мировое число вакансий в области программирования постоянно растёт. Так что при наличии желания и интереса, найти своё место определённо можно будет.
    Удачи.
    Ответ написан
    1 комментарий
  • Какие есть хорошие примеры архитектуры кода на C# в GitHub(пояснение внутри)?

    @Namynnuz
    Для того, чтобы код был реюзабелен и поддерживаем, стоит следовать методологии SOLID. Именно это и есть ООП. Точнее, попытка применения ООП-подхода, похожего на оригинальные изыскания теоретиков, в случае откровенно неудачной реализации.
    Ответ написан
    2 комментария
  • Остановить проверку if на время?

    @Namynnuz
    Тебе просто нужно добавить в условие проверки соответствующий тайм-аут. Например, это можно сделать так:
    public class Checker {
        const double _stdDelta = 10.0d;
        Dictionary<string, DateTime> _dictionary = new Dictionary<string, DateTime>();
    
        bool check( string input, double? delta = null ) {
            if ( !_dictionary.ContainsKey( input ) ) {
                _dictionary.Add( input, DateTime.Now );
                return true;
            }
    
            var d = delta.HasValue ? delta.Value : _stdDelta;
    
            if ( ( DateTime.Now - _dictionary[input] ).TotalSeconds > d ) {
                _dictionary[input] = DateTime.Now;
                return true;
            }
    
            return false;
        }
    
        public void CheckConditionByIfs( int condition ) {
            if ( condition > 100 && check( "second_condition", 20.0d ) ) {
                Console.WriteLine( "Second_condition met, custom timeout set." );
            } else if ( condition > 20 && check( "first_condition" ) ) {
                Console.WriteLine( "First_condition met, standard timeout set." );
            } else {
                Console.WriteLine( "Nothing." );
            }
        }
    
        public void CheckConditionBySwitch( int condition ) {
            switch ( condition ) {
                case var _ when condition > 100 && check( "second_condition", 20.0d ):
                    Console.WriteLine( "Second_condition met, custom timeout set." );
                    return;
                case var _ when condition > 20 && check( "first_condition" ):
                    Console.WriteLine( "First_condition met, standard timeout set." );
                    return;
            }
            Console.WriteLine( "Nothing." );
        }
    }

    Пример использования:
    var rnd = new Random();
    var values = new int[] { 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 80, 100, 150, 200 };
    var c = new Checker();
    int cnd;
    
    while ( true ) {
        cnd = values[rnd.Next( values.Length )];
        Console.WriteLine( cnd );
    
        if ( rnd.Next( 100 ) > 50 )
            c.CheckConditionBySwitch( cnd );
        else
            c.CheckConditionByIfs( cnd );
    
        Thread.Sleep( 1500 );
    }

    Поясню. В C# 7.0 появилось зарождение Pattern Matching'а, который ты можешь наблюдать в CheckConditionBySwitch (в плане логики выполнения он ничем не отличается от CheckConditionByIfs, поэтому они потом выбираются случайно). По выходу C# 8.0 это будет вполне себе полноценный вариант, как в Nemerle, Kotlin или F#, поэтому к switch и его новому синтаксису стоит присмотреться уже сейчас. Вообще, использование Thread.Sleep для таймаута — дурной тон. Он неточен и выдаёт что-то примерно около, когда у системы появятся свободные ресурсы. Гораздо лучше воспользоваться каким-нить TimeSpan, как таймером. Ну да ладно.
    В данном примере условия для разных веток разделяются, путём назначения им по уникальному стринговому ключу текущей даты-времени (ключ может содержать, в принципе, что угодно). После этого для соотв. ключа ты проверяешь, не пришло ли время обновить значение по ключу и вернуть true, для входа в ветку кода. Если у тебя однозначно ограниченные варианты, то, вероятно, стоило бы создать enum, вместо string и проверять\передавать уже его.
    Ответ написан
    Комментировать
  • Переопределение метода через override. Почему не срабатывает?

    @Namynnuz
    Подобного рода наследования приводят к очень хрупкому коду. Именно поэтому ОПП не является моделированием реальности, иначе потом поддерживать эти наркоманские зависимости будет невозможно и любые изменения на любом уровне будут приводить к тому, что где-то что-то постоянно будет отваливаться и чиня в одном месте, мы будем ломать в другом.
    Кроме того, что тебе стоит прочитать хоть какую-то книженцию по шарпею, следует так же изучить принципы SOLID.
    Ответ написан
    Комментировать
  • Как проверить значения переменных в конструкторе?

    @Namynnuz
    Необходимо чтобы при инициализации объекта (т.е. вызове конструктора) метод проверял сумму этих переменных и либо по новой запрашивал значения либо прерывал с ошибкой.

    Зачем?

    Если нужно сделать всё в едином классе, то достаточно написать статический метод и в нём проверять, после чего уже создавать объект. Бросать исключения в конструкторе — плохая идея. Бросать исключения в принципе — идея неплохая, но они все должны быть уловлены блоками try-catch, с записью в лог или ещё куда.
    Если стоит задача написать консольное приложение, который бы инициализировало класс с правильными значениями, то оно может выглядеть, к примеру, так:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace Toster.Q561594 {
        public static class Extentions {
            public static string Join<T>( this IEnumerable<T> list, string separator = "," )
                => string.Join( separator, list );
            public static int[] ConvertConsoleInput( this string input, params char[] separators )
                => input.Split( separators, StringSplitOptions.RemoveEmptyEntries )
                            .Select( int.Parse )
                            .ToArray();
        }
    
        public class Triangle {
            public readonly int A;
            public readonly int B;
            public readonly int Y;
    
            public Triangle(int a, int b, int y) {
                A = a; B = b; Y = y;
            }
    
            public static bool IsValidAngles( int a, int b, int y )
                => a > 0 && b > 0 && y > 0 && ( a + b + y ) == 180;
    
            public override string ToString()
                => $"( {nameof( A )}: {A}, {nameof( B )}: {B}, {nameof( Y )}: {Y} )";
        }
    
        class Program {
            static void Main( string[] args ) {
                int[] temp;
    
                while ( true ) {
                    Console.Write( "Enter three valid space separated angles and press Enter: " );
                    try {
                        temp = Console.ReadLine().ConvertConsoleInput( ' ' );
                        if ( temp.Length != 3 )
                            throw new IndexOutOfRangeException($"Incorrect number of angles: {temp.Length}");
                        if ( Triangle.IsValidAngles( temp[0], temp[1], temp[2] ) )
                            break;
                        else
                            throw new InvalidOperationException( $"Incorrect angles: ( {temp.Join( ", " )} )" );
                        
                    } catch ( Exception ex ) {
                        Console.WriteLine( "Error. " + ex.Message + Environment.NewLine );
                    }
                }
    
                var triangle = new Triangle( temp[0], temp[1], temp[2] );
    
                Console.WriteLine( $"Valid triangle object was created: {triangle.ToString()}" );
                Console.ReadLine();
            }
        }
    }

    При работе в консоли это будет выглядеть как-то так:

    Enter three valid space separated angles and press Enter: i'm typing
    Error. Input string was not in a correct format.
    
    Enter three valid space separated angles and press Enter: 1 2 3
    Error. Incorrect angles: ( 1, 2, 3 )
    
    Enter three valid space separated angles and press Enter: 100 10000
    Error. Incorrect number of angles: 2
    
    Enter three valid space separated angles and press Enter:    5  100    75
    Valid triangle object was created: ( A: 5, B: 100, Y: 75 )

    Обрати внимание на статический класс Extentions, статические методы которого имеют у первого аргумента this. Это методы расширений, они позволяют расширять уже имеющиеся классы, как если бы у них существовали эти методы. StringSplitOptions.RemoveEmptyEntries в ConvertConsoleInput отбрасывает получившиеся пустые строки, поэтому вводить можно хоть «__4____152______24___», оно это превратит сначала в string[] { "4", "152", "24" }, а потом распарсит и выдаст int[] { 4, 152, 24 };
    Ответ написан
    Комментировать
  • Как реализовать стек на C#?

    @Namynnuz
    Например, вот так:
    public class SimpleSystemStack<T> where T : struct, IConvertible {
        private readonly int _sizeOfOneElement;
        private T[] _array;
    
        public SimpleSystemStack( int sizeOfOneElement, T[] inputArray = null ) {
            _sizeOfOneElement = sizeOfOneElement;
            if ( inputArray?.Length > 0 ) {
                Length = inputArray.Length;
                _array = inputArray;
            } else {
                Length = 0;
                _array = new T[sizeOfOneElement];
            }
        }
    
        public int Length { get; private set; }
    
        public T Pop() {
            if ( Length > 0 ) {
                Length--;
                return _array[Length];
            }
            throw new IndexOutOfRangeException("Stack is Empty.");
        }
    
        public void Push( T element ) {
            if ( Length >= int.MaxValue )
                throw new IndexOutOfRangeException("Stack overflow.");
            if ( Length >= _array.Length ) {
                var temp = new T[_array.Length * 2];
                Buffer.BlockCopy( _array, 0, temp, 0, Length * _sizeOfOneElement );
                _array = temp;
            }
            _array[Length] = element;
            Length++;        
        }
    }

    Использование:
    var sss = new SimpleSystemStack<int>( sizeof( int ) );
    
    sss.Push( 1 );
    sss.Push( 2 );
    sss.Push( 3 );
    sss.Pop();
    sss.Pop();
    sss.Push( 4 );

    Работает только для primitive types.
    Ответ написан
    Комментировать
  • Какой путь изучения программирования выбрать?

    @Namynnuz
    Привет, всем! Мне 28 лет и я решил начать изучение программирования
    Привет, 28. Это, конечно, не 42, но первые результаты, при условии, что у тебя есть определённые способности и стремления, проявят себя в лучшем случае лет через пять.
    Какая специальности в программировании наиболее открыты и дружелюбны к джуниорам?
    Каковы перспективы развития?
    Никакие. В этой области +5 лет сосутся очень жёсткие дяди из Пакистана и всё ещё из Индии. Без реально роста, но говнокод они лепят отменный. Тебе с ними и через десять лет не сравниться (и не надо, пожалуйста).
    На какие специальности можно выучиться до джуниора за наиболее короткий срок?
    Зависит исключительно от тебя и твоих способностей.
    В общих чертах, что должен знать и уметь джуниор?
    Зависит от конкретного места, куда ты пойдёшь устраиваться.
    До какого уровня учиться?
    До какого можешь, до такого и учишься. Предела нет. Даже через десять лет в, казалось бы, вдоль и поперёк изученной технологии ты можешь узнать и изучить такую прорву новой информации, что стажёру и не снилась в страшном сне.
    Каковы шансы устроиться джуниором в сферу C++?
    Ниже, чем в случае более современных языков.
    И, с учётом сложности языка, стоит ли мне рассматривать эту сферу в свои года?
    Года ничто — опыт всё.
    где-то было много и было не ясно нужно ли столько изучать.
    Изучай всё, до чего можешь дотянуться.
    Хотел бы узнать наиболее полный список действительно нужных тем и дисциплин computer science.
    Берёшь курс MIT и смотришь, чем они учат-учили последние 20 лет. Вот это всё: знание, понимание, умение — отправная точка для начала поглядывания в область CS со стороны стажёра, который так, покурить на в соседнее здание зашёл.
    Покрывают ли потребность в теории курсы Introduction To Computer Science от MIT и Harvard?
    Покрывают ли потребность в операции на гипофизе пространный пересказ бухого философа на тему «Хирургия 18 века для идиотов»?
    Что ещё из теории помимо основ computer science нужно программисту?
    Всё, до чего сможешь дотянуться. Чем больше знаешь — тем меньше надо будет изучать на местах, тем шире будет твоя область применения. Если ты сможешь выдержать конкуренцию.
    Хотел бы узнать наиболее полный список действительно нужных математических дисциплин для программиста?
    Берёшь, допустим, топовый российский вуз и изучаешь досконально дисциплину Прикладная Математика. Наверное, для большинства формошлёпов в самых типичных ситуациях этого может и хватить.
    Сколько языков нужно знать джуниору?
    Чем больше, тем лучше. Чем глубже, тем лучше. Нельзя взять какую-то область или языка и оставаться в ней до конца жизни. Иначе ты очень сильно будешь ограничивать себя. Не говоря уже о прямой деградации межушного ганглия до уровня адинэсников...
    С какого языка следует начать обучение?
    Тот, который тебе больше всего понравился. То есть ты взял, потыкал его, поискал книжки, почитал первые 100 страниц каждой, посмотрел код проектов на github и ты почувствовал, что «палочка выбрала тебя».
    Посоветуйте самые качественные проработанные курсы для изучения рекомендуемых языков
    Нет таких.
    Насколько сильно версии одного и того же языка отличаются друг от друга? Как долго времени занимает изучение новой версии языка?
    Напрямую зависит от языка/фреймворка и как авторы подразумевали обратную совместимость.
    Стоит ли мне начать изучения с языка C++?
    Возьми что-то более современное, чтобы не насиловать себя непонятными тебе ограничениями.
    Ответ написан
    4 комментария
  • C# vs Java для удалённой работы за рубежом. Что востребовано?

    @Namynnuz
    C# вышел позднее Java, с учётом набитых чужими дядями шишек. И в дальнейшем обрастал приятным синтаксическим сахаром. После релиза .NET Core 2.0, вопрос о зрелости платформы для мультиплатформенной разработки больше не стоит, его можно тащить в прод. Проблема тут только в том, что обычно приходится поддерживать какой-то невероятно разросшийся кусок старого кода. И никто не станет переходить с одного стэка технологий на аналогичный. В лучшем случае будут потихоньку переписывать на чём-то абсолютно непохожем, если для этого есть предпосылки. В Европах больше любят Java, в США неплохо себя чувствуют .NET-чики. Так или иначе, и тем, и тем, найти работу можно. Эти языки точно не помрут. Бери то, что приятнее. Поковыряй одно, потом другое, или просто оцени книжки, которые ты можешь достать, к чему больше лежит душа. Пощупай среды разработки. Перейти с одного языка на другой в начале изучения можно совершенно безболезненно, они слишком похожи.
    И ещё ремарочка. Если ты не считаешь, что будущее за Clojure (и тебя выворачивает LISP, ты не готов читать курс SICP от MIT) или Erlang/Haskell (даже при условии стремлению к параллелизму) и выберешь Java, стоит смотреть немного в будущее и в первую очередь пощупать Kotlin, который максимально удобно встраивается в уже имеющийся Java код и всю инфраструктуру, но обладает всеми фишечками C# (которые поддерживаются объектной моделью, потому как в .NET она более стройная), и даже немного сверху. Что-то придёт с C# 8, но отсутствие immutable типов из коробки удручает (в F#, например, всё это есть в лучшем виде).
    В любом случае, писать потом на этом тебе, а сами языки мало чем отличаются по существу. Бери то, что тебе приятно. Не насилуй себя и не беги за модой (которая постоянно меняется) или вероятными барышами. Если ты станешь достойным специалистом, найдёшь куда приткнуться. Вообще, человек, который идёт в эту профессию за лёгким заработком (или ради денег), обычно плохо заканчивает.
    Ответ написан
    2 комментария
  • Как построить изучение С++ после С#?

    @Namynnuz
    Какое-то базовое понимание относительно современной версии крестов на основе знаний о C# позволяет получить C++ Succinctly. Но это просто чтобы не путаться и начать понимать, чем языки друг от друга по своей сути отличаются.
    Ответ написан
    Комментировать
  • Как найти свою почти первую работу: Unity Junior?

    @Namynnuz
    Ну, 7-10к это уже не символическая плата, тем более за неполный рабочий день. Вероятно, я бы больше смотрел на стажировку, и уже только потом — возможно, джуном. По удалёнке ты, наиболее вероятно, ничему не научишься. А по поводу «не расту» — ну вот ты и стала заложником Пика Глупости. Точнее, ты только начала свой путь к вершинам, чтобы рухнуть...
    Ответ написан
    7 комментариев
  • 44 года можно ли еще стать востребованным специалистом в IT?

    @Namynnuz
    Вообще, несколько странно было писать это первого апреля, наводит на какие-то не те мысли. Ну... Раз с экономикой всё хорошо, то нужно двигаться в сторону не верстальщиков, а аналитиков. То есть что-то, направленное на статистику и обработку данных. Обычно это R, SAS, вероятно какие-то более специфические языки. Ну и Python. Последний встречается вообще много где.
    В качестве примера, можете поглядеть на одну питерскую геймдев-студию, куда нужен аналитик. Что-то подобное в плане именно экономических и прочих моделей rings the bell, как говорится? Вы бы это потянули?
    Так же вы можете попытаться приткнуться в какую-то околоменеджерскую сферу в своём городе. Попробуйте разослать CV или попросить аудиенции у каких-нить товарищей в вашем городе. Рассказать им свою ситуацию, показать знания экономики, вот это всё. И заинтересованность в изучении айтишной стороны вопроса. Вполне возможно, что вас возьмут в качестве стажёра и пойдут навстречу.
    Вообще, несколько странно, что вы не в курсе различных программных продуктов и способов построения моделей, каких-то приложений автоматизации на рынке. Это же наверняка должно быть на слуху, тем более в научно сфере? Плюс, как экономист, вы должны были провести предварительную разведку области. Меня всё ещё терзают смутные сомнения.
    Ответ написан
    Комментировать