Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > junior C# developer


Автор: ArniLand 28.7.2011, 12:16
Подскажите, что необходимо знать для того чтобы устроиться junior C# developer.

Автор: gambit 28.7.2011, 13:19
Это из темы инструктора Epam, Александра Кузнецова(кстати отличного человека и специалиста) - "Что должен знать практикующий .NET разработчик"

1. Собственно .NET (основные принципы работы, внутреннее устройство и прочее). В зависимости от позиции может потребоваться как поверхностное знание, так и детальное понимание принципов работы того же сборщика мусора и компиляции кода на лету.
2. Reflection. Выделил отдельно, хотя является составной частью 1. Сейчас на этой штуке большинство всех привязок данных построены, так что знать надо.
3. ADO .NET. В небольших проектах сейчас активно заменяется новомодными фреймворками, типа того же Entity Framework, но еще полно старых проектов, да и в крупных от EF как-то больше геморроя. Ну а уж про то, что надо знать основы...
3*. Как справедливо заметил ниже Даниил, SQL знать тоже обязательно. smile Как минимум, это базовые запросы на уровне SELECT, INSERT, UPDATE, DELETE, JOIN и т.д. + представлять, что же такое хранимые процедуры. Но желательно, все-таки, уметь писать скрипты для разворачивания тестовой базы.
4. Entity Framework. Средство крайне быстрой генерации слоя доступа к данным. В небольших проектах однозначно рулит, в крупных... на то, чтобы научиться его правильно готовить, надо потратить время, сопоставимое со временем написания всего проекта.
5. LINQ. Средство крайне удобного описания запросов к данным в различного рода хранилищах. Для начала достаточно понять LINQ to objects, а дальше уже в зависимости от конкретики.
6. XML + XSD + XSLT + XPath. К .NET отношение имеет слабое, скорее, однозначный must have. Но в любом случае, возможности .NET по работе с ними знать надо
7. Сервисы. WCF в последнее время явный лидер, но и о старых тоже забывать не стоит.
8. WWF??? Не знаю, не пользовался. И как-то не особо доводилось видеть, чтобы ее использовали .
9. Remouting.

Дальше начинается UI
10. WinForms. Жива еще. Хотя разбираться с ней "на перспективу" уже не стоит.
11. WPF. Создавался как замена Winforms и постепенно успешно ее с рынка вытесняет.
12. ASP .NET средство создания web-приложений. В чистом виде используется уже редко, подменяясь AJAX, Silverlight, или активно тренсформируясь с использованием MVC
13. JavaScript + AJAX (Средство асинхронных запросов из JavaScript к серверу) Опять же не .NET, но знать надо
14. Silverlight. Средство создания UI для веб с использованием WPF. От полного WPF отличается урезанными возможностями и рядом заморочек.

Как-то так. Желающие могут продолжить/покритиковать. Естественно, все из этого знать на 100% не стоит (да и вряд ли возможно), но направление для раскопок, надеюсь, задал .

http://vkontakte.ru/topic-21396110_23476592

Автор: gmx 28.7.2011, 15:08
gambit, не согласен, потому что:

1-ый пункт - его слабо знают даже системные архитекторы в консалтинговых компаниях ( не смотря на громкое название должности ), в R&D Intel, к примеру, знают. Так что, тут нужно нюансы все учитывать. Что системный архитектор в ООО "Мухосранск-компани" или в Интел - это разные вещи, собственно относится, как и к junior, везде разный уровень серьезности.

Хотя, нет...

Вообще, несогласен с пунктами всеми, т.к. .net-программисты обычно имеют кривое понимание работы системы в целом... и тут можно затрагивать все аспекты, что и модель OSI плохо знают, и как вообще устроена сеть, как реально разбираются сетевые пакеты, и как устроена работа процессов в ОС, и как вообще устроена файловая система и тд и тп, и на чем сам был написан Silverlight любимый у .net-фанатов ( не только в плане ЯПа, а что NPAPI мало кто знает используется в ряде браузеров для создания подобных технологий ), да и вообще не владеют порой даже простейшими моделями построения данных, как связные списки ( LinkedList<T> в .NET - это не то! ).

Да, и вообще среди .net программистов не так много людей, которые закончили технические вузы по профилирующей специальности.

Да и работы с указателями норм - нет... smile

Кстати, вот интересно, как раз коль про такие основы, как связные списки затронули ( что, след. код будет фильмом ужасов для C#-программистов - это ясно, но все же интересно, как разберете ):

Задачка: построить односвязный список при помощи указателей , а не встроенного класса из Collection.Generics, и рекурсивно спуститься по нему, при этом изменяя каждый раз значения.

И код ниже, с еще задачами: "Почему после AddNewElement(&list, int); - нельзя будет просмотреть список *list?" и "Какие можно отключить сборку мусора ( или отложить ее до завершения опред. действий?"

Код

using System;

unsafe struct A
{
    public int num;
    public A* next;
};

unsafe struct P
{
    static void AddNewElement(A** begin, int num)
    {
        A ob1 = new A();
        A* ob2 = &ob1;
        ob2->num = num;

        if (*begin == null)
        {
            ob2->next = null;
            *begin = ob2;
        }
        else
        {
            ob2->next = (*begin)->next;
            (*begin)->next = ob2;
        };
    }

    static void DeleteLastItem(A** list)
    {
        A* next = null;

        if ((*list)->next != null)
        {
            next = (*list)->next;
            *list = null; GC.Collect();
            *list = next;
        };
    }

    static void PrintAll(A* list)
    {
        for (A* current = list; current != null; current = current->next)
        {
            Console.WriteLine(current->num + "\n");
        };
    }

    static int Main()
    {
        A* list = null;

        AddNewElement(&list, 14);
        AddNewElement(&list, 44);
        AddNewElement(&list, 24);
        AddNewElement(&list, 44);
        AddNewElement(&list, 4);

        PrintAll(list);
        DeleteLastItem(&list);
        PrintAll(list);

        return 0;
    }
};

Автор: Экскалупатор 28.7.2011, 15:31
gmx, ничего супер мега сложного в твоих примерах нету, первый курс решает подобные. а за использование "unsafe" на некоторых конторах можно и по голове больно получить. несомненно что знать нужно много, но junior он на то и junior что бы учиться...
Цитата(gmx @  28.7.2011,  14:08 Найти цитируемый пост)
Да и работы с указателями норм - нет

да и зачем если в этом языке их нет?

если нравиться Си/С++ то зачем тогда тебе .net?

и если ты считаешь, что не знать первый пункт для программиста это нормально то я не хотел бы работать с таким программистом.

Автор: gmx 28.7.2011, 15:45
Цитата

и если ты считаешь, что не знать первый пункт для программиста это нормально то я не хотел бы работать с таким программистом.

где я сказал КОНКРЕТНО , что не надо? я написал. что .net программисты обычно реально не знают, как это работает, а не то, что это не надо знать, смысл был в том, что .net программисты все равно не знают реального ус-ва памяти

Цитата

gmx, ничего супер мега сложного в ваших примерах нету

ок, тогда отвечай на мои задачки , написать "ничего сложного - нет" - это не ответ, за одно и посмотрим, как .net-программист ответит на это

Цитата

первый курс решает подобные.

первый курс НЕ решает подобное и на других курсах, в нормальных вузах C#/.NET вообще не преподают, т.к. не несет академической ценности - это раз, кривое - это два
первый курс обычно штудирует алгоритмы и опред. разделы математики и лабы выполняют (о Боже!) на bash или подобном, где нет возни с памятью, т.к. на 1-ом курсе это не нужно
Вы из какого ВУЗа? фак-т && спец-ть (или какой закончили)?

Цитата

да и зачем если в этом языке их нет?

Они есть. Кстати, зачем они нужны в C# ?

Цитата


а за использование "unsafe" на некоторых конторах можно и по голове больно получить


Видимо, это конторы из рязряда, где на Sharepoint отмывают деньги.


Автор: Экскалупатор 28.7.2011, 16:25
Цитата(gmx @  28.7.2011,  14:08 Найти цитируемый пост)
"Почему после AddNewElement(&list, int); - нельзя будет просмотреть список *list?" и "Какие можно отключить сборку мусора ( или отложить ее до завершения опред. действий?"

1. что подразумевается под словами "посмотреть список"? в дебагере не видно? потому что указатель в неуправляемую память...

2. GC.KeepAlive. это как бы кошерно, но "утечку памяти" вполне реально вызвать и самостоятельно, хотя и не совсем тривиально.

ps. твой код не работает, PrintAll(list); генерирует "NullReferenceException" Object reference not set to an instance of an object.

и таки да, динамические структуры это первый курс, второй семестр. там где бинарные деревья и пр.

Автор: WarHog 28.7.2011, 16:39
Цитата

в нормальных вузах C#/.NET вообще не преподают, т.к. не несет академической ценности - это раз, кривое - это два

А С++, стало быть, прям и несет несомненную академическую ценность  smile
Луговского на вас нет, gmx

Автор: Экскалупатор 28.7.2011, 16:45
 smile чувствую дело пахнет холиваром...
напомню что тема топика несколько в другом...

по теме: 
ArniLand, ориентируйся на конкретную контору, так будет надежнее, посмотри что они пишут(на сайте конторы обычно перечисляют продукты которые они пишут/писали, типа рекламы что то) ну и можно посмотреть что для этого чаще всего нужно, какие технологии используются и пр. от себя добавлю что в разных местах разные требования, где то нужно просто знать что существует XML и этого для начала будет достаточно, а где то нужно будет уметь рассказать что это и для чего это можно использовать в реальных проектах. знаю что непременным условием остается иностранный язык, но опять же на разных конторах к этому относятся по разному...

Автор: gambit 28.7.2011, 21:27
Цитата(gmx @  28.7.2011,  15:08 Найти цитируемый пост)
Вообще, несогласен с пунктами всеми, т.к. .net-программисты обычно имеют кривое понимание работы системы в целом...

В вы каким образом связаны с .net??

Цитата(gmx @  28.7.2011,  15:08 Найти цитируемый пост)
1-ый пункт - его слабо знают даже системные архитекторы в консалтинговых компаниях

Да, я бы тоже не стал с вами работать. Базовое понимание механизмов сборки мусора, рефлексии, имен сборок и пр. необходимо для того кто хочет развиваться в данном направлении, а не писать всю жизнь "Hello world". И раз уж это написал эпамовец, то расскажу про них: у них знание базовых вещей платформы, далеко не единственное, но одно из основных требований для принятия джуниора.

Цитата(Экскалупатор @  28.7.2011,  16:45 Найти цитируемый пост)
знаю что непременным условием остается иностранный язык, но опять же на разных конторах к этому относятся по разному... 

Я в эпам не попал по причине плохого английского, а сейчас работаю в компании, за пол года англ ни разу не понравился. А ни по условиям, ни по зарплате с эпамом никаких различий.

Автор: gmx 29.7.2011, 11:04
Модератор: Сообщение скрыто.

Автор: Экскалупатор 29.7.2011, 11:28
 smile 
gmx, ты вот скажи, с чего ты решил что в этой ветке форума кому то интересны твои познания в С++? это тема не этого топика и даже не этого раздела. го в флуд и там делай что хочешь... ты лучше свой пример исправь, что бы он работал, а потом будешь учить остальных и показывать свои глубокие познания, а пока что видно что даже если и знаешь названия то применять не умеешь...

а то мне прямо страшно от таких слов:

Цитата(gmx @  29.7.2011,  10:04 Найти цитируемый пост)
пройдусь в целом по .net 

вдруг действительно стану любить Си и начну в проекте использовать unsafe тогда и без работы недолго остаться. к тому же я уверен, что лучше Рихтера не пройдешься...

оставь лучше этот холивар, он тут мало кого тронет.

Автор: gmx 29.7.2011, 11:36
Цитата(Экскалупатор @  29.7.2011,  11:28 Найти цитируемый пост)
ты лучше свой пример исправь, что бы он работал, а потом будешь учить

1). уже сказал, что до выходных сделаю пост - раз
2). пример с таким же кодом на С/C++ рабочий, и сам ответить почему .net-кун, из-за чего среде .net будет ошибка во время исполнения , а в нативе нет? прежде, чем комментить надо и про др. вар-ты не забывать, код как раз-таки именно такой взят и был специально и исправлять в нем нечего, поэтому сначала учимся глубже думать, а потом комментарии вешать, ок?

все, более подробный ответ по всем - будет до выходных

Автор: Экскалупатор 29.7.2011, 11:46
 smile 
gmx, что то мне сдается что с таким подходом ты тут не надолго...
и попытки отмазаться словами "код как раз-таки именно такой взят и был специально" у тебя не получится. ты выложил пример, описал вопросы, пример г... и не работает, так что это говорит о тебе как о г-разработчике или как о троле. что в принципе не исключает присутствия и того и другого. детский сад тут развел какой то, не хватало что бы еще сказал потом: "ты меня как бы убил, но я как бы из последних сил!". не приставай к людям.

p.s. мне кажется что эту тему пора выпилить, ну или как минимум закрыть.

Автор: gmx 29.7.2011, 11:56
Цитата(Экскалупатор @  29.7.2011,  11:46 Найти цитируемый пост)
и попытки отмазаться словами "код как раз-таки именно такой взят и был специально" у тебя не получится

так, это ты не ответил мне почему NullReference? я четко написал код, и что код работает на С++ можешь проверять. у меня отмазок - нет, ты мне до сих пор ответа не смог дать, и все это видно


Цитата(Экскалупатор @  29.7.2011,  11:46 Найти цитируемый пост)
 пример г... и не работает

значит ты:
1). ни разу не видел в глаза односвязные списки ( это по поводу гавна )
2). не знаешь из-за чего именно NullReference, и что в свою очередь может показать твои незнания в организации памяти, да и самой работы .net ( а это по поводу, почему это работет в нативе , а в .net  - нет )



Цитата(Экскалупатор @  29.7.2011,  11:46 Найти цитируемый пост)
не хватало что бы еще сказал потом: "ты меня как бы убил, но я как бы из последних сил!

не скажу, потому что ты меня НЕ убил, а сам не можешь ответить на два вопросы выше

так почему код рабочий на нативе и почему в .net ошибка среды исполения? отвечай и сам неувиливай

Автор: lamber 11.8.2011, 11:29
Код который привел gmx формально верен, но не работает, кто-нибудь может объяснить почему, данный код был запощен на MSDN http://social.msdn.microsoft.com/Forums/en-IE/netfxbcl/thread/f0d7459b-e749-4ee7-ab88-894ad2cc926d ответа так и не было получено. По каким-то причинам список собираются GC и как этого избежать.

Автор: WarHog 11.8.2011, 14:45
При чем тут GC?
замени
Код

A ob1 = new A();
A* ob2 = &ob1;

на
Код

A* ob2 = (A*)Marshal.AllocHGlobal(sizeof(A)).ToPointer();
,
место будет выделяться не в стеке, а в хипе и все будет прекрасно работать

Автор: ДобренькийПапаша 11.8.2011, 20:36
Может я скажу глупость, но Interop это не первое и не второе и даже не третье и даже не четвёртое, что должен знать .NET разработчик, ибо от унаследованного кода, начиная со второй версии .NET почти полностью освободился.
Ну и потом, gmx тут блещет (как-бэ) познаниями в C++, но, что самое смешное - посади такого "знатока" за приличный проект на .NET, такого ###кода оберёшься, мама не горюй - С-style forever. Я уже как-то об этом говорил, что у программисты С++ и C#.NET разными вещами абсолютно занимаются. Ваши знания в низкоуровневом устройстве ОС не помогут в разработке крупного корпоративного ПО. Так что пишите на С проги для микроконтроллеров и успокойтесь. Не надо лезть не в свою песочницу со своими глупыми идеями (обладая непомерным ЧСВ, помимо всего прочего, что программиста ни разу не украшает, вообще).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)