Как правильно задавать вопросы: bugtraq.ru/forum/faq/general/smart-questions.html

654a8caa511dc921594769.png

Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc

Как распознать кракозябры (HiRes).png (исходник)


Достижения

Все достижения (76)

Наибольший вклад в теги

Все теги (492)

Лучшие ответы пользователя

Все ответы (1927)
  • Какой ВУЗ в Москве даст знания, но и позволит работать?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Я боюсь поступить в ВУЗ, ...., где не будет разработки программного продукта

    Судя вот по этой фразе - вас интересует направление "Разработка ПО". К сожалению, сегодня практически во всех ВУЗах ситуация именно такая - в области разработки ПО там не научат практически ничему. Почему так? А вот почему:
    1. Огромная скорость развития и изменений в области IT - отсюда следует, что надо бежать, только для того чтобы оставаться на месте. А уже чтобы быть в курсе - надо это надо бежать еще быстрее. Т.е., надо учиться, учиться и еще раз учиться. Каждый день.
    2. Большинство преподавателей в ВУЗах из старшего поколения и многие из них остались в "том времени". Не все конечно, сам лично знаю нескольких вполне бодрых "старичков" из нескольких крупных ВУЗов, которые занимались программированием еще в советское время, наработали огромный опыт и сейчас вполне себе разрабатывают электронику, МК, ПЛИС, процессоры в кремнии, даже передовые нанометровые техпроцессы для мировой промышленности.
    3. Низкая ЗП у преподавателей - сегодня даже начинающим программистам на мировом рынке готовы платить очень даже приличные деньги по нашим меркам, а профессионалам в несколько раз больше. Кто из опытных программистов пойдет работать за месячную ЗП, которую они вполне зарабатывают за день, а то и быстрее?
    4. Программа обучения ВУЗов устарела на полвека - за четыре-пять лет такого "обучения" невозможно подготовить современного программиста. Потому что пока человек будет учиться - его знания устареют на 5-10 лет (а то и больше). А в IT - это целая эпоха, а то и несколько. Это как учить человека конной езде и охоте из лука на диких кабанов, а когда он закончит обучение - везде уже будут ездить машины и супермаркеты на каждом углу. Ну, т.е. передвигаться и достать еды можно и так и так - вот только кому нужен верховой ездок и умеющий стрелять из лука в век самолетов и фастфудов? Вот примерно так же и в IT - сегодня охотимся на кабанчиков и собираем ягоды в лесу, уже завтра кушаем искусственное/синтетическое мясо заморских зверей и фруктов из пробирки, а послезавтра на другом конце галактики помогаем местным неандертальцем предотвратить ядерный конфликт и погрозить пальчиком.
    5. На программиста нужно учиться самостоятельно - просто потому что других вариантов нет из-за скорости развития IT и программисту каждый день надо изучать что-то новое. Надо понять как это все работает, а главное - хотеть понять, надо отрабатывать память, развивать способность к переключению контекста в голове, образное мышление. Если привыкнуть, что тебе все рассказывают, показывают и разжевывают - самостоятельно что-то новое вряд ли изучишь. Просто потому что разум привыкнет, а разумом управлять как-то не учат (что несколько странно - есть же общая физическая подготовка, почему же нет общей умственной подготовки?).
    6. При наличии желания - вполне реально за несколько месяцев с нуля выучить что-то из мейнстрима и найти вакансию джуниора и примерно за год-два дорасти до миддла. А за пять лет можно и до сеньора/тимлида дорасти. Было бы желание. Ну или пойти в ВУЗ, потратить годы на сомнительную деятельность, выйти и получить практически нулевой выхлоп в целевой области. Т.е., никакого реального опыта не получить.
    Ответ написан
    6 комментариев
  • Как выполнить выгрузку информации по классу по определённому правилу?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    1. Документируете код согласно принятым стандартам, типа такого:
      /// <summary>
      /// Class description
      /// </summary>
      public class SomeClass { }

    2. В параметрах проекта на вкладке "Сборка" ставите галочку "XML-файл документации — далее файл документации можно скормить любому приложению/скрипту, понимающему xml.
    3. Далее ставите приложение Doxygen
    4. В doxygen создаете проект документации, указываете xml файл документации и все требуемые настройки и сохраняете проект в файл
    5. Теперь документацию по всему коду в удобном формате (HTML, LaTeX, RTF, Man, XML, DocBook) можно получить просто выполнив команду:
      doxygen.exe doxyproject
    Ответ написан
    4 комментария
  • Какой CMS движок учить начинающему?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никакой. Изучайте разработку ПО, языки программирования, построение архитектуры ПО, алгоритмы, математику и т.д и т.п.

    UPD
    Приведу немного аргументации и очевидных вещей для тех, кто не понимает почему ответ именно такой. На самом деле все очень просто: в IT индустрии все развивается и меняется очень, очень-очень быстро. И как следствие возникает проблема устаревания знаний и умений. Вот например 15-20 лет назад изучение языка программирования под названием "Дельфи" и популярной тогда его среды разработки для дестктопных приложений вполне имело смысл и было популярным явлением, т.к. оно тогда довольно широко использовалось, или например Perl для создания сайтов. А где оно сейчас? Почему сегодня сайты пишутся на джаваскрипте? А как на счет десктопных приложений? А ведь те же десять лет назад попробуй скажи такое — как бы область деятельности не пришлось менять. И вот такое происходит просто с языками программирования за довольно короткое время. А основа любого CMS, фреймворка и иже с ними — это как раз таки язык программирования. И вот за время жизни языка программирования в нём случаются новые стандарты, изменения и прочее, а популярное ПО на нём переписываются десятки и сотни раз. Т.е., изменчивость продуктов какого либо языка зависит как от самого языка так и от его популярности. И чем они выше — тем чаще что-то меняется. Из всего этого вытекает очень логичный вывод: в долгосрочной перспективе выгоднее те знания, которые не устареют как можно дольше. И вот тут как раз таки знания разработки ПО и языков программирования, построения архитектура, алгоритмы и прочее имеют наибольший срок устаревания. А уж сколько тысяч лет математике можно и не вспоминать. А она, кстати именно благодаря стремительному развитию IT тоже развивается очень быстрыми темпами. Так вот, при наличии вот таких фундаментальных знаний можно легко и быстро осваивать любые новые фреймворки, CMS, языки программирования и прочее. А уж при наличии подробных мануалов, гугла, форумов и прочего большинство задач сводится тупо к вбиванию "как сделать YYY в ZZZ" в строке поиска (я вот например никак не могу понять ход мыслей людей, которые задают вопросы на форумах и прочих ресусах, ответ на которые выдается в первых же строчках гугла, складывается впечатление, что они вообще первый раз в интернете и про гугл не знают вообще ничего).
    Если есть желание именно в изучении CMS — ставим себе задачу и решаем её используя разные CMS, далее выбираем наиболее понравившуюся и пользуемся пока не надоест или не устареет. А после — повторить.

    Немного перефразирую сам вопрос и соседний популярный ответ:
    — Каким инструментом учиться пользоваться начинающему строителю?
    — Учись использовать молоток и гвозди, леса полно, доски везде используются.
    Вот только строительство — это не одни только доски, в которые забиваются гвозди, а еще архитектура, сопромат и иже с ним, экстерьер, интерьер, отопление, освещение, канализация, вентиляция и еще куча всего. Аналогично и во всех остальных областях, в том числе и web разработке.
    Ответ написан
    9 комментариев
  • Как сделать единый аккаунт для своих сервисов?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Реализовать свой сервис авторизации. Называется CAS, работает примерно так:
    5bd748db6d572869658821.png
    Ответ написан
    6 комментариев
  • Как правильно описать класс для библиотеки Newtonsoft.Json C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Элементарно: https://app.quicktype.io/#r=json2csharp - слева вставляете JSON, справа на выходе получаете готовый класс для парсинга. Удобнейший сервис.

    Пример:
    {
      "greeting": "Welcome to quicktype!",
      "instructions": [
        "Type or paste JSON here",
        "Or choose a sample above",
        "quicktype will generate code in your",
        "chosen language to parse the sample data"
      ]
    }

    namespace QuickType
    {
        using System;
        using System.Collections.Generic;
    
        using System.Globalization;
        using Newtonsoft.Json;
        using Newtonsoft.Json.Converters;
        using J = Newtonsoft.Json.JsonPropertyAttribute;
        using R = Newtonsoft.Json.Required;
        using N = Newtonsoft.Json.NullValueHandling;
    
        public partial class Welcome
        {
            [J("greeting")]     public string Greeting { get; set; }      
            [J("instructions")] public string[] Instructions { get; set; }
        }
    
        public partial class Welcome
        {
            public static Welcome FromJson(string json) => JsonConvert.DeserializeObject<Welcome>(json, QuickType.Converter.Settings);
        }
    
        public static class Serialize
        {
            public static string ToJson(this Welcome self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
        }
    
        internal static class Converter
        {
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
                DateParseHandling = DateParseHandling.None,
                Converters = {
                    new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
                },
            };
        }
    }


    Я конвертер выношу в отдельный класс и файл:
    using Newtonsoft.Json;
    
        /// <summary>
        /// Конвертер JSON 
        /// </summary>
        public static class Converter
        {
            /// <summary>
            /// Настройки конвертации JSON
            /// </summary>
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,     // Пропускаем аттрибуты
                DateParseHandling = DateParseHandling.None,                     // Выключаем парсинг дат
                NullValueHandling = NullValueHandling.Ignore                    // Пропускаем пустые значения 
                                                                                // (API-вызов при создании запроса 
                                                                                // сам заполняет нужные поля)
            };
        }


    А парсинг/конвертацию JSON выношу в отдельный класс, от которого уже наследую классы для парсинга данных:
    namespace Foo
    {
        /// <summary>
        /// Абстрактный класс - сетевое сообщение: парсинг и 
        /// генерация JSON из экземпляров наследуемого класса
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public abstract class APIMessage<T>
        {
            /// <summary>
            /// Конвертация в JSON
            /// </summary>
            /// <returns></returns>
            public string ToJson()
            {
                return JsonConvert.SerializeObject(this, Converter.Settings);
            }
    
            /// <summary>
            /// Парсинг JSON в указанный тип
            /// </summary>
            /// <param name="json"></param>
            /// <returns></returns>
            public static T FromJson(string json)
            {
                try
                {
                    return JsonConvert.DeserializeObject<T>(json, Converter.Settings);
                }
                catch (Exception e)
                {                
                    throw new ServerConnectionException(
                        "Server response parse error!\nResponse type: <" + typeof(T).FullName
                        + ">\nError: " + e.Message
                    );
                }
            }
        }
    }


    Как-то так получается:
    public class Request : APIMessage<Request>
    {
        <описание JSON свойств>
    }
    Ответ написан
    3 комментария

Лучшие вопросы пользователя

Все вопросы (1)