• Как распределить время при обучении программированию?

    @danSamara
    Мой ответ будет несколько груб и не типичен, однако: "Станьте говнокодером!"
    Я не шучу - берите реальные задачи и решайте их как можете - по наитию, по кривым советам из гугла и stackoverflow, но главное - делайте законченные решения, получайте результат который работает.
    Любую задачу сначала решайте сами - нужно сделать сортировку - пишите алгоритм и радуйтесь, что он работает. А уже потом - читайте как надо сделать, и только после этого (если почувствуете потребность!) - читайте теорию.
    Все книги что вы написали безусловно волшебны и необходимы для отличного программиста, однако без практики они - пыль, которая развеется спустя неделю после прочтения. Поверьте мне, я их все читал :)
    Кстати Кнута я бы вычеркнул без раздумий - для его чтения и понимания нужен очень хороший мат-базис и опыт в программировании. Если случиться, что вы будете писать оптимизированные библиотеки для обработки данных на С - тогда и начинайте его читать, очень пригодится, отвечаю )
    Пример обучения:
    1. Ставим задачу. Пример - написать приложение, которое выводит топ-10 вопросов на Тостере.
    2. Разбиваем задачу на проблемы которые надо решить. Пример - развернуть рабочее окружение, понять как сделать "Hi world", как работать с сетью, как парсить HTML
    3. Решаем проблемы. В лоб. Задание - на скорость, всё должно быть решено в кратчайшие скроки. Для каждой проблемы используем любое решение которое попалось под руку. Буквально - первое, это важно! То есть реально ковнокодим, забивая на всё - на красоту кода, на оформление, на скорость, лишь бы работало! Девиз этого этапа - херак, херак и в продакшен! Результат этапа - рабочее приложение.
    4. Делаем поверхностный анализ. Задача решена? Есть ли косяки которые уже не нравятся? Как их можно решить, исходя из минимального опыта? Локализуем проблемные участки исходя из собственных взглядов. Результат этапа - опыт самостоятельного анализа кода.
    5. Делаем глубокий анализ. Пытаемся для каждой задачи подобрать лучшее решение из тех что есть. Читаем теорию о том, как надо делать на самом деле. Изучаем и внедряем паттерны, пытаемся сделать код, который можно переносить в другой проект. Важно не менять условия задачи, вроде "а можно же ещё вывести ответы на вопросы". Не можно, задача должна оставаться прежней. Результат этапа - хороший код и выявленные пробелы в знаниях.
    6. Отдыхаем, читая теорию в рамках решённых задача и около них. Результат - теория, подкреплённая практикой.
    7. GOTO 1.
    Ответ написан
    2 комментария
  • Как организовать архитектуру приложений "Система управления проектами"?

    effetto
    @effetto
    .Net разработчик
    При решении поставленной задачи я рекомендую Вам использовать трехслойную архитектуру.

    Слой представления в Вашем случае - это windows клиент и web клиент.
    Слой домена - это сами объекты предметной области и веб сервисы.
    Слой данных - это маппинг предметной области в бд.

    Слой данных рекомендую организовать на основе Entity Framework 7 (бета), так как последняя версия поддерживает внедрение зависимости. Для учебного проекта будет в самый раз, заодно изучите новую технологию.

    Для предоставления данных рекомендую использовать шаблон Factory и шаблон Репозиторий.

    WPF клиентов я рекомендую цеплять все равно через сервисы, чтобы не нарушать общую архитектуру. Visual Studio сама сгенерирует Вам классы-обертки для вызова сервисов. К их методам Вы уже можете привязываться.

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

    Для пополнения копилки знаний на тему проектирования ПО я настоятельно рекомендую к прочтению Мартина Фаулера - Шаблоны корпоративных приложений. Ответы почти на все Ваши вопросы имеются в данной книге.
    Ответ написан
    Комментировать
  • Взаимодействие программы с системой. Как такое сделать?

    Реализуемо, можно и без WinAPI.
    Необходимо определить обработчик нажатия клавиш, а что бы знать какой текст выделен используйте поле SelectedText.
    //Собственно сам обработчик 
            private void keydown(object sender, KeyEventArgs e)
            {
                var type = sender.GetType();
                if (e.Control && e.KeyCode == Keys.C)
                {
                    if (type == typeof(TextBox))
                    {
                        textBox2.Text = (sender as TextBox).SelectedText;
                    }
                    if (type == typeof(RichTextBox))
                    {
                        textBox2.Text = (sender as RichTextBox).SelectedText;
                    }
                }
            }
    Ответ написан
    5 комментариев
  • Взаимодействие программы с системой. Как такое сделать?

    aush
    @aush
    Реализуемо. Для этого конкретного примера вам нужно будет поставить глобальный хук через WinAPI (blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx, https://gist.github.com/Stasonix/3181083)

    Хук нужно использовать, если вы хотите, чтобы этот функционал работал и в ситуации, когда пользователь копирует из любой другой программы, не только вашей (ваша в это время работает в фоне).
    Ответ написан
    5 комментариев