Вчера
Gregori создал
пост вызвавший жаркую дискуссию в узких кругах.
Спор выродился в вопрос о том должен ли программист, как автомобилист в СССР, знать всю свою «машину» вдоль и поперек, или достаточно уметь на ней ездить.
Если мы сейчас отбросим глупые споры о том, что лучше «знать или не знать» (думаю и дураку понятно, что всегда лучше что-то знать, чем наоборот), то встает вопрос времени. Реальные люди действуют в мире реальном, где время ограниченно, в том числе время на обучение. И задумываются ли те, кто орет, что программист должен знать всё и вся ab obo сколько времени это чаще всего бесполезное в реальной практике знание требует для изучения, и что это время можно потратить на изучение какой-то дополнительной технологии, которая реально будет приносить деньги.
Реальный, а не гипотетический человек обычно стоит перед выбором потратить время на изучение интерпретатора C# (в глубину) или ASP.NET? Изучать методы многопоточности C# (в глубину) или потратить это же время на изучение того как ОС распределяет потоки, или как процессор распределяет задачи по ядрам? Изучать архитектуру процессора или архитектуру программы (паттерны)?
На что нормальный человек потратит время, знание какой технологии принесет ему больше пользы и больше дохода?
Ответ ИМХО очевиден, людей программирующих на «низком» уровне (приближенных к железу) всегда нужно на порядок меньше, чем людей программирующих на «высоком» уровне, а желающих знать «низкий» уровень (просто из любопытства или из убеждений) значительно больше. Поэтому узких специалистов на высоком уровне очень часто оказывается меньше чем узких специалистов на низком уровне. По этой же причине спецов в языках высокого уровня требуется на порядок больше, чем спецов программирующих на низком уровне. Всё тоже самое касается и большинства других современных технологий особенно ИТ-технологий.
И по банальному экономическому закону спроса и предложения начинать обучение лучше с высоких уровней и углублять знания в первую очередь лучше в высоких областях и только при необходимости (лучше всего практической необходимости) двигаться на более низкие уровни.
ИМХО люди, утверждающие обратное являются пожирателями времени, будьте осторожны с ними и с их идеями.
Проще говоря вечный спор упирающийся в то считать ли байт-код инструкциями или командами наравне с нативными (если хотите ассемблерными) командами.
Бывало, чтобы разработчикам описать суть проблемы, нужно было брать отладчик и ловить/изучать им место падения программы. Иначе бы не пофиксили.
А вот если вы хотите написать реально хорошую программу на языке высокого уровня, то вам надо профессионально заниматься этим языком (особенно если вы ограниченны во времени), а не распылять свое внимание на низкие уровни.
Тем более что из различных С и assembler программистов обычно получаются фиговые программисты на языках высокого уровня, и дело даже не только в том, что они часто не разбираются в различных узких направлениях языков высокого уровня, а в том, что они зачастую тащут за собой и отвратительные привычки, например именование в стиле C (с подчеркиваниями — _underscore_) для C# (где используют CamelCase).
Ну да ладно вот еще один момент, который хоть и значительно реже но все же встречается, вместо использования стандартных методов из стандартных библиотек (которые зачастую написаны проффи куда как повыше их уровня) они изобретают велосипед, пишут свой код, который оказывается менее эффективным (в частности более медленным), чем вызов стандартных методов, в итоге тьма своего мало-эффективного кода, вместо одной строчки вызова стандартного метода.
ЗЫ Кстати, а как много вы видели современных серьезных программ написанных одним программистом, без работы в команде?
2) полно и обратных примеров, когда берут готовое а потом столько с ним «наедятся» (как правило уже в продакшне), что приходится переписывать. Сделать правильный выбор — исскуство.
3) когда работал в интеграторе, часто делал небольшие проекты один. Такова специфика задач. Сейчас работаю в Enterprise и там по-разному, но процент сделанного только мной — велик. И уверен, что в среднем количество малых проектов сделанных одним человеком значительно превосходит количество крупных. Если применительно к трейдингу, то тут уж точно много что делается одним человеком.
Из реальных знаю только один, когда один профессор написал свою математическую библиотеку, которая оказалась эффективнее «родной», Microsoft выкупил у него права и заменил свои стандартные методы на его (да и то не все методы, а только те, что реально оказались эффективнее).
А что касается триггеров и регистров, кто-то писал, что на последнем курсе их проходили, так я их ещё в школе прошёл, там проходить нечего.
Знать как, в принципе, устроено железо и софт на всех уровнях, хотя бы и без деталей, нужно просто для общего развития, чтоб железка не была для тебя эльфийским артефактом, который работает при произнесении магического заклинания: «der parol».
Вобще то, обучение в ВУЗ-е именно на это и нацелено, дать общие представления о предмете и его окружении, заменить магию на Знание. Но всегда найдётся дурачок, который будет орать, что ему знание не нужно, потому что в гугле этого не спрашивают, а он онли кодерок в глубину на си-шарпе и ему бабки за всё остальное не платят. Эти зашоренные рабы-копатели в глубину тоже нужны, пусть копают.
А понимание и кругозор — оно не для всех.