JoeSmith3100
@JoeSmith3100
Начинающий программист C#

Для каких примерно целей программисту нужен computer science?

Часто приходится слышать от разных людей из IT сферы, что настоящему программисту необходим computer science, что без него он не более чем кодер.
Данное утверждение мне кажется слишком абстрактным и хотелось бы немного конкретики, думаю в таких вопросах, как выбор знаний, инструментария и прочего, конкретика, к сожалению, необходима. Так вот, какие есть примеры проблем, которые может помочь решить computer science непосредственно на работе?

P.S. Понимаю что конкретика - враг науки когда ставится кем-то выше абстрактных понятий и знаний (ограничивает и не позволяет на её базе задавать вопросы), я уже не говорю о том когда человек "казаться" самоутверждается за счёт человека "быть" на одной этой конкретике. Но когда дело доходит до вышеописанного - она нужна.
  • Вопрос задан
  • 1053 просмотра
Решения вопроса 6
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Можете отвечать этим выпендрёжникам, что computer science у всех в школе была.
61f95ecd99b46818468684.png
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
читайте уже best practices
это спасет от глупых ошибок и позволит подумать а почему так сделано.
Когда поймете сможете находить баланс между супер быстрым говнокодом и тормозом но понятным для всех.
Ответ написан
Комментировать
bingo347
@bingo347
Crazy on performance...
Ну начнем с того, что computer science - это очень широкое понятие, которое включает в себя множество различных областей, как теоретических так и практических. Вопрос "нужен ли программисту computer science?" из той же оперы, что и "нужна ли программисту математика?", кому-то и арифметики хватает (а это тоже математика как не странно), а кому-то нужен углубленный бэкграунд в мат.анализе, тер.вере и мат.статистике. Так же и с computer science, кому-то хватит базового понимания, почему 0.1 + 0.2 != 0.3, а кому-то нужен углубленный бэкграунд в алгоритмы, в теорию типов и в слабые модели памяти. Все сугубо индивидуально и сильно зависит от сферы, для которой ведется разработка.
Многим совсем не обязательно знать как реализуются те или иные алгоритмы или структуры данных, вполне можно пользоваться готовыми. Но вот иметь представление, какие вообще бывают алгоритмы и структуры данных, какая у них алгоритмическая сложность - это полезно всем, просто чтобы знать что гуглить и какие вообще есть возможности решить ту или иную задачу. Так же полезно уметь считать ту самую алгоритмическую сложность из составных частей произвольного алгоритма и понимать чем отличается нотация O-большое от нотации Ω-большое. Какая от этого практическая польза? Для самого программиста - это возможность решать задачи проще и быстрее, выдавая при этом более оптимальные решения. Для бизнеса - это деньги, от банального "ускорив некое действие в N раз мы повысили конверсию в M раз", до насущного "сократив потребление ресурсов на N в прошлом месяце мы заплатили за облако на M млн. рублей меньше в этом месяце при той же нагрузке".
Та же архитектура, всем не обязательно уметь строить огромные решения с запасом прочности на десятки лет. Но понимать базовые принципы и паттерны, какие у них плюсы и минусы, где и что применять - полезно. К сожалению здесь все плохо в большинстве своем, порой доходит до того что стоимость поддержки небольшого проекта вырастает в 300-500 раз всего лишь за год поддержки. Для бизнеса это опять таки деньги, и если бизнес не планирует через год-другой либо продаться либо свернуться, как делают многие стартапы, то бизнес будет это оптимизировать. А на программистах такая оптимизация скажется на прямую, те кто умеет писать код на года будет получать выше рынка, иногда значительно. Хотя и те кто вообще в архитектуре не шарит без работы не останутся, так как работодателей с принципом "продали и забыли" просто банально больше.
Ответ написан
Комментировать
@Akela_wolf
Extreme Programmer
Если коротко: не нужен.

Если длинно, то нужен в определенных областях. Например, разработка компилятора (особенно оптимизирующего компилятора) - это самый что ни на есть computer science. Разработка ядра операционной системы. Разработка виртуальной машины. И тому подобные задачи, которые требуют глубокого понимания как работает компьютер, какие алгоритмы будут эффективны, а какие нет.
В обычной жизни прикладного программиста максимум computer science, который мне приходилось использовать - это понимание О-нотации. Чем для меня, как для разработчика, оборачивается использование коллекции со временем доступа О(1) или О(n)? Насколько критично в данном месте (с определенными объемами данных) использовать алгоритм сложности О(n^2)? И тому подобные вопросы.
Ответ написан
@Arlekcangp
Разработчик, Лид, Архитектор ПО
Для любой задачи которую без CS не решить. В предыдущих ответах часть задач уже перечислили. Но это всё касается специализированных задач. Никто не гарантирует вам, что в какой то момент у вас подобных задач не встретится на рядовом до сего времени проекте. Обычно это происходит когда проект вырастает за рамки какого-либо фреймворка, который до того покрывал все 100% таких задач. Банальный пример: было однопоточное приложение. Оно перестало справляться с нагрузкой. По совету с Хабр QA (ну или стэковерфлоу - не важно )) приняли решение переписать на параллельные вычисления. А не у кого нет даже базовых знаний какие существуют "грабли" (опять банальный пример - "состояние гонки" может и маститого профессора CS свести с ума, а, как в том анекдоте про каплю никотина, лошадь и хомяка, "голову вайтишника разрывает на куски") Поэтому пока у вас в команде есть кто-то со знаниями может пусть не всего CS, а хотя бы каких то базовых вещей, а вы просто кодите, то вам оно и не нужно. (как выше замечено - на "галерах" это не актуально. Хотя даже там вообще то такие люди обычно есть и получают они вдвое больше. Иначе какой им смысл там оставаться)
Ответ написан
Комментировать
@Vitsliputsli
Computer science - все таки это наука, т.е. более область академических исследований, а не computer programming. Вики на это намекает так "Computer science is generally considered an area of academic research and distinct from computer programming".
Дело не в том, что это какое-то знание, которое нужно или не нужно. Это иная сфера работы. Т.е. если ты формируешь и обучаешь модель для бизнеса с помощью CatBoost, ты занимаешься computer programming. А если ты пишешь сам CatBoost или вообще изобретаешь градиентный бустинг, то ты занимаешься computer science.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы