Чи можна стати хорошим програмістом без знання математики і алгоритмів?

Чи можна стати хорошим програмістом без знання математики і алгоритмів? Це питання обговорили користувачі сайту Quora . А KV.by вирішили зібрати для своїх читачів найцікавіші відповіді.

сайту Quora

Джіакомбо Сорби, програміст-самоучка

Ні, хороший програміст постійно в курсі останніх новинок і прагне кожен день пізнавати щось нове.

Це не той випадок, коли ви, наприклад, хочете стати класним фахівцем з латинської мови (не в образу буде сказано тим людям, хто заробляє собі на життя латинською мовою), і в якийсь момент ви досягаєте високого рівня майстерності в своєму предметі і можете сказати собі «я нарешті це зробив!».
IT-сфера розвивається з вражаючою швидкістю, і, якщо ви з самого початку обмежуєте себе, то в довгостроковій перспективі це обійдеться вам дорожче.
Що стосується технічних навичок, то тут все залежить від того, чим ви хочете займатися. Для того, щоб бути хорошим веб-розробником, вам необхідно мати мінімальні знання в математиці і алгоритмах. Але, якщо ви хочете працювати повноцінним розробником в складі складних проектів, то і вимоги будуть відповідні.
При цьому враховуйте, що ви не повинні знати досконало навіть найскладніші алгоритми. Тут швидше питання в розпізнаванні моделей, тому ви знаходите проблему А чи завдання Б, при цьому ви знаєте, що для роботи вам знадобиться алгоритм пошуку найкоротшого шляху, або ж алгоритм обчислення відстані Левенштейна. Але ви завжди можете знайти конкретний код або більш конкретну інформацію про нього.
Спробуйте кодіть, змагаючись з іншими. Так ви зможете не тільки засвоїти основи програмування, а й, цілком можливо, розважитеся. Я вважаю, що у мене, наприклад, були хороші знання в математиці, але дуже багато цікавого і нового я дізнався в таких проектах, як Project Euler (Увага: цей проект не для новачків) або CodeWars (Більш доброзичливе по відношенню до нубам співтовариство).


Я вважаю, що у мене, наприклад, були хороші знання в математиці, але дуже багато цікавого і нового я дізнався в таких проектах, як   Project Euler   (Увага: цей проект не для новачків) або   CodeWars   (Більш доброзичливе по відношенню до нубам співтовариство)

Вестон Бікрофт, фахівець в сфері програмного забезпечення, математики, філософії, когнітивної науки

У сфері IT, як і в будь-який інший, існує правило, згідно з яким теорія і практика пов'язані між собою, а саме, теорія викликає бажання використовувати її на практиці, практика закріплює теорію, і так по колу. Я б порадив перед початком проекту переконатися, що ви володієте всіма необхідними теорією для роботи над ним. З практичної точки зору, теорія дуже допоможе вам під час роботи, тому я трохи заглиблюючись в цю тему.
Перше: алгоритми. Не хвилюйтеся сильно на їх рахунок. Існує досить теоретичного матеріалу щодо цієї теми, як описує їх природу, так і зачіпає те, скільки ресурсів знадобиться для виконання того чи іншого алгоритму. Якщо вас щось з цього зацікавить, то, звичайно, ознайомтеся з цим. Теорія навряд чи сильно вплине на ваші професійні якості як програміста. Що дійсно вам стане в нагоді щодо алгоритмів, так це практика. Просто продовжуйте їх писати, спостерігати за тим, що з написаного вами працює, а що ні, дивіться, що пишуть інші люди, робіть висновки, знову пишіть самі і так далі.
Друге: математика. Щодо цього говорити складніше, тому що термін «математика» може ставитися до багатьох речей. Я не думаю, що якісь певні знання в математиці можуть сильно вплинути на ваші здібності в якості програміста. На мій погляд, тут є лише один виняток: теорія мов програмування ( Programming language theory ).
Тонкий момент щодо математики полягає в тому, що, з одного боку, у вас немає необхідності в знаннях щодо певних областей цього предмета (крім теорії мов програмування), а з іншого боку, вам конче необхідно чітке розуміння характеру цієї науки і того, як мислять математики. Бо програмування - це і є математика!

Його «природа» бере своє коріння в математиці і лінгвістиці. Тому, якщо ви хочете отримати теоретичну підживлення, то я б на вашому місці спробував досягти максимально чіткого розуміння того, що відбувається під час того, як ви програмуєте. Спроби досягти цього розуміння можуть зайняти роки - цілком можливо, що ви будете зайняті цим протягом всієї вашої кар'єри. Повертайтеся до цього питання тоді, коли зможете або коли будете відчувати в цьому необхідність, але ніколи не дозволяйте своєму незнанню не дати вам програмувати.
Я б рекомендував наступні перші кроки в теорії програмування: дізнайтеся трохи про те, яким чином комп'ютерна техніка виконує програми, потім вивчіть основи теорії компіляторів. Довгий час я вважав компілятори лише додатковими інструментами, які нам лише доводилося використовувати, але насправді, розуміння їх роботи вкрай важливо для загального розуміння того, як функціонують самі програми. Якщо ви успішно засвоїте базові знання, то вони стануть картою, яка дозволить з одного погляду на новий об'єкт зрозуміти, що відбувається навколо вас.
Крім того, я б порекомендував почати з роздуми над такими поняттями, як абстракція, генералізація, параметризація, мовне середовище, реорганізація коду (перепроектування ПО). Ці поняття тісно пов'язані з робочим процесом. Кожне з них, підкріплене теорією, прикладами і власним досвідом, може дати вам багатогранне розуміння процесу програмування. Якщо і є щось, з чим, на мою думку, здатність до програмування і пов'язана, так це з чітким розумінням цих понять і їх зв'язку з процесом написання ПО.

Філліпе Де Ліма Арканьyo

Ні. Щоб пояснити свою позицію, я припущу, що у вас зовсім немає досвіду в програмуванні, і для пояснення спробую використовувати аналогію.
Скажімо, ви зі своєю дитиною хочете побудувати невеликий іграшковий будиночок. Ви купуєте конструктор Лего і удвох будуєте з цеглинок щось, що по закінченню роботи виглядало б як будиночок. Ви, як і ваша дитина, щасливі. Деякий час іграшковий будиночок стоїть в цілості й схоронності, адже він побудований з легких і міцних цеглинок.
А тепер припустимо, що ви хочете побудувати реальний будинок, такий, в якому ви б змогли б жити ви і ваша сім'я. Погодься б ви жити в подібному будинку, побудованому без жодних інженерних знань? Готовий посперечатися, що більшість розсудливих людей так би не надійшло.
Програмування без хорошого знання алгоритмів і математики схоже на будівництво ось такого ось вдома з конструктора. Згодом ви можете набити руку в цьому. Купуючи все більше досвіду, ви, може бути, навіть почнете помічати, що певні сполуки деталей можуть вести до кращих результатів. Незважаючи на все це, ви навряд чи зможете заявити щось на зразок «ця конструкція може витримати N кг» або «цей будинок досить безпечний, щоб в ньому жити».
Гірше того, разом зі складністю проекту буде зростати і різниця між тим, в яких випадках можна використовувати кожен окремий підхід. Цілком можливо, що будівництво невеликої будки за технологією, схожою з будівництвом з лего-деталей, ще може спрацювати, але малоймовірно, що величезний міст, побудований за тією ж технологією, буде триматися. Точно також і в програмуванні: простіші завдання, такі як, наприклад, створення невеликого веб-сайту, будуть цілком під силу команді програмістів, не сильно розбираються в математиці і алгоритмах, в той час, як робота з такими гігантами, як Amazon чи Google , навряд чи буде можлива.
Ідея про те, що математика і алгоритми не настільки важливі для програмування, досить часто зустрічається серед старшокурсників і навіть досвідчених програмістів. Я і сам так думав раніше. А потім я вступив до коледжу і почав вивчати алгоритми, математику, теорію ймовірності і багато іншого.
В кінцевому підсумку, зараз я можу написати код за значно менший час. Крім того, зараз я можу написати код для таких завдань, про які поняття не мав раніше. Я також можу проаналізувати код, щоб чітко розуміти, яким чином він буде виконуватися. Коротше кажучи, зараз я багато в чому розбираюся набагато краще, ніж це було раніше.

Розуміння того, який алгоритм в якій ситуації використовувати, це дуже цінний навик, але головна мета, заради якої варто вивчити цю тему, так це щоб навчитися правильно думати і вирішувати виникаючі проблеми.

Розуміння того, який алгоритм в якій ситуації використовувати, це дуже цінний навик, але головна мета, заради якої варто вивчити цю тему, так це щоб навчитися правильно думати і вирішувати виникаючі проблеми

Мальком ТЕАС, навчався програмування

Програмування - це не просто написання коду, це точне розуміння того, який саме код писати. Якщо ви не хочете вивчати алгоритми і математику, то ваша кар'єра завжди буде обмежена.
Якщо коротко, то можна вивчити мову програмування без поглибленого знання алгоритмів і математики, але ви ніколи не станете хорошим розробником програмного забезпечення, якщо ви не будете знати, що писати в вашому коді і як саме це робити.

Баррі Роунтрі, фахівець в області інформатики

Знання алгоритмів має дуже мало спільного з навичками програмування. Як сказав хтось із великих: "Коли сумніваєшся, використовуй грубу силу." Давайте розберемося, що ж це означає.
Хороший програміст знає, як виконати алгоритм сортування на мові Python. Відмінний програміст знає, що хтось розумніший за нього вже ввів сортування в цю мову, і вірить, що готова сортування буде працювати досить добре в більшості випадків.
Хороший програміст намагається вибрати найкращий алгоритм з точки зору продуктивності. Відмінний програміст вибирає найпростіший відповідний в цій ситуації алгоритм і оптимізує код пізніше в тому випадку, якщо продуктивність є головною метою (що далеко не завжди так), якщо зміна алгоритму суттєво підвищить загальну продуктивність (що майже ніколи не трапляється), якщо поліпшення продуктивності виправдовує ті кошти, які будуть витрачені на внесення змін (кільки доларів коштує 5% поліпшення загальної продуктивності?).
Хороший програміст знає, що він витратить 98 днів в році на налагодження і 2 дні в році на оптимізацію продуктивності. Відмінний програміст змінить це співвідношення в бік оптимізації, вибираючи більш прості алгоритми, які простіше розуміти і налагоджувати.
Якщо провести аналогію, то вам немає необхідності розуміти мову асемблера, крім того випадку, коли ви займаєтеся розробкою операційної системи або кодом компілятора. Точно також вам необов'язково глибоке розуміння алгоритмів, крім тих випадків, коли ви працюєте з математичної бібліотекою.

Точно також вам необов'язково глибоке розуміння алгоритмів, крім тих випадків, коли ви працюєте з математичної бібліотекою

Марія Корольова, редактор журналу Hypergrid Business

Це залежить від того, який саме діяльністю в сфері програмування ви хотіли б займатися. Ви можете зайнятися дизайном користувальницького інтерфейсу, розвитком ігрової динаміки або відображенням корпоративних даних в структурах баз даних.

Одного разу мені довелося використовувати тригонометрію при створенні графічних додатків. Незважаючи на те, що я впевнена, що все це має стати в нагоді в спеціалізованих сферах програмування. Але, коли я працювала програмістом, мені ніколи не доводилося використовувати обчислення, лінійну алгебру або диференціальні рівняння.
Вам знадобиться арифметика, але на цьому все.
Але «алгоритм» - це синонім до поняття «комп'ютерна програма», тому немає, ви не зможете програмувати без знання алгоритмів!
З іншого боку, незважаючи на те, що логічне мислення безсумнівно допомагає в роботі, не всі люди навколо вас будуть володіти ним. Тому, якщо ви сильні в дещо інший області, такий як, наприклад, дизайн, комунікації або менеджмент, ви могли б стати вкрай цінним доповненням до команди розробників.

Чи можна стати хорошим програмістом без знання математики і алгоритмів?
Погодься б ви жити в подібному будинку, побудованому без жодних інженерних знань?
?кільки доларів коштує 5% поліпшення загальної продуктивності?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: