C# to Java или Чего стоит выучить новый язык, зная прежний?
=============================================================

 Здравствуйте. Я уже наметил свой путь в программирование. Установил прицел на C#. Недавно, ради интереса, просматривал вакансии по запросу "C#". В подборке несколько раз мелькнули вакансии на Ведущего программиста. Практически всегда в этих вакансиях были требования знать не только C#, но и C++, и просто С, и даже Java.   

 Для себя я это расценил так - наверное если отлично знаешь один язык, то другой (чем-то похожий) будет выучить легче? Тогда сколько времени примерно понадобится опытному программисту зная C# изучить Java? 

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

- ассемблер и устройство процессоров,  

- минимум один "взрослый" язык (C/C++/Pascal)  

- минимум один VM-ориентированный язык (C#/Java)  
  

Зная C#, выучить синтаксис Java - вопрос одного-двух дней, но научиться правильно писать на нем программы - это как минимум один-два серьезных проекта, т.е. годик-другой. Однако, не расстраивайтесь - после третьего языка "изучение" последующих уже практически не напрягает. А потом наступает состояние, когда "новых" языков не остается - есть лишь языки, которые еще не использовал... но если нужно - просто берешь и используешь, "изучая" их, практически, по ходу дела. Вот именно оно и есть признак пригодности для должности ведущего программиста. 

 Ну выучить Java хорошо зная c# не сильно сложно.  
  

Что бы стать крутым .NET-чиком нужно (да и Java-разработчиком и вообще) стоит:  

 - понимать как работает CLI (или JVM, короче понимать что такое рантайм и как он устроен).  

 - понимать как работает компьютер (можно почитать например архитектуру ЭВМ Таненбаума). Мол понимать что есть еще такие волшебные вещи как кеши процессора, реордер буферы, векторные инструкции, предсказание переходов, как работают потоки и т.д. Вы должны понимать что все это  
  

Собственно последний пункт говорит о том что вы можете писать на Си. Так сказать практическое применение знаний. Пописать потоко-безопасные lock-free структурки например (это у вас не сразу будет получаться). Ну как-то так... 

 Смотрите по запросу ".Net" 

> Для себя я это расценил так - наверное если отлично знаешь один язык, то другой (чем-то похожий) будет выучить легче? 

  

Java и Managed C# -- братья близнецы. C# называют клоном Java. Разница между самими языками (если исключить фреймворк) -- не большая. Хотя Java несколько остает от C# сейчас.  
  

В C++ есть прямой доступ к памяти через указатели (в C# тоже есть, но не Managed). К работе с указателями нужно привыкать длительное время, ошибки допустить очень легко. В остально, мало чем отличается от C#/Java.