Добрый день, сейчас на работе появилось свободное время, и я решил не тратить времени даром и выучить С#.
Язык интересный, местами красивый, но не всегда интуитивно понятный, поэтому я ищу человека, который мог бы помочь мне разобраться в некоторых моментах.
В частности меня интересуют:
* ООП: Я понимаю что такое инкапсуляция или полиморфизм, но когда дело доходит до практики, некторый моменты мне не всегда ясны.
* Тестирование: Я поставил nunit и добавил несколько тестов, прямо как в книге, но чувствую что я пишу тесты ради тестов и эффективность невелика.
* Грамотно спроектированный и структурированный код: Я могу заставить программу работать, но часто чувствую, что испольлую не самые оптимальные решения.
К чему я стремлюсь:
* Хочу писать красивый и понятный код.
* Хочу дописать свою небольшую программу
* Хочу поучавствовать в каком-нибудь open-source проекте
Кого я ищу:
Человека, который понимает, что, как и почему работает в C#
Знает как, и почему именно так должен быть написан и организован код.
И может это объяснить.
Что взамен?
Я понимаю, что обучение — не самый простой процес, поэтому я готов рассмотреть любые способы благодарности, начиная от помощи с каким-то проектом, заканчивая, в разумных пределах, финансовой.
Я умею использовать гугл, а так же читать книги и статьи и буду благодарен за любые полезные ссылки.
Половина желаний не относится конкретно к языку, прочитайте пару книг (да, именно не одну а больше) И вот тогда уже, избавясь от половины вопросов и желаний сами поймете чего Вам действительно нужно.
Что касается того, что мои вопросы имеют несколько более широкий спектр, чем C#, — причина не в том, что я не понимаю чего хочу, а в том, что менее общие вещи и вопросы легко решаются поиском в гугле или чтением книг.
Книги это прекрасно, я читал и продолжаю читать, к сожалению автор не может предусмотреть все вопросы, которые могут возникнуть у читателя, а читатель не всегда может сформулировать вопрос достаточно четко для гугла. Поэтому я ищу именно живого человека.
Вы не те книги читаете, я проектировать учился по книгам, я ооп понимал по книгам, я по книгам понимал именно _как_ использовать ооп, а не просто клепать наборы функций. Есть _очень_ хорошие книги. В данном случае я помочь не смогу с литературой, у меня немного другой профиль, но поверьте, книги хорошие есть, и в них именно учат хорошо писать код и правильно, а не просто обьясняют теорию.
Кстати, очень хорошая и универсальная книга — Совершенный код Макконела. Хотя там примеры 50/50 с++/пседокод, но все понятно и применимо к любому языку, это книга по дефолту должна быть прочитана любым.
Спасибо, Совершенный код читал. Понимание очень сильно зависит от восприятия и типа мышления. Иногда лучше один раз потрогать чем тридцать раз прочитать.
Не могу сказать что я мега-специалист, но могу посоветовать начать с курсов на сайте intuit.ru — там достаточно хорошо и четко расписаны азы языка, да и азы ООП даны хорошо))
Из книг посоветую классику: Дж. Рихтер — CLR via C# и Э.Троелсен — C# 2010.
Удачи вам!
По паттернам кстати есть хорошая книга. Примеры на джаве, но в данном случае это не особо важно. Зато все паттерны объясняются на чудесных живых примерах. Правда, нужен английский.
Выше уже дали много толковых советов, но есть еще один путь: если есть возможность — пойти работать джуниуром в толковую контору. Там у Вас будет практика (а научится писать код проще при разработке реальных приложений), будут примеры проектирования перед глазами (всегда полезно изучать идеи в чужом коде) и кто-то из сотрудников будет вам помогать на первых порах, как минимум смотреть Ваш код перед коммитом и делать замечания.
Тогда начните делать свой проект на C#. Лучше всего какое-нибудь десктоп приложение, даже аналог уже существующего. Например сделайте свой Excel на C#. Начните с простого — один лист, набор ячеек, возможность задавать в них цифры или формулы со ссылками на другие ячейки. UI на WPF, сохранять можно в xml или в protocol buffers, парсер формул свой или на ANTLR. По мере написания и научитесь. Будут вопросы — задавайте.
Сидите на форумах msdn/gotdotnet/vingrad/stack overflow, отвечайте на вопросы — гарантированно поднимите уровень и узнаете много нового. Или выберите себе проект на Codeplex: Project Openings.
Из книг — если действительно чувствуете пробелы в ООП/ООД — читайте книги по архитектуре:
* GoF.
* Фаулера, PoEAA.
* Нильсона, Applying Domain-Driven Design and Patterns: With Examples in C# and .NET.
* Дино Эспозито, Microsoft® .NET: Architecting Applications for the Enterprise.
Из чисто технических вещей могу посоветовать еще Debugging Microsoft .NET 2.0 Applications Роббинса. Он точно понимает что и как работает в C#.
Сомневаюсь, что вы найдете человека, который достаточно прокачан в C#/.NET и при этом имеет достаточно времени для менторства.