33 thoughts on “Защо трябва да знаем алгоритми

  1. Данаил

    Че са скучни, скучни са, но са важни. 🙂 Напълно съм съгласен с Иван , че тези основни стъпки са задължителни. Един съвет от мен как да не са ти толкова скучни …. остави мозъка да си почине. Сега си ентусиазиран и почваш да четеш и гледаш уроци и примети. Започваш да правиш упражненията и очакваш бърз резултат, но той не идва , а правиш само някакви „безсмислени “ примери. Не продължавай веднага към следващия урок. Почини си малко, ако трябва ден,два. После пак погледни урока и направи упражненията. По този начин скуката ще се сведе до поносимо ниво.
    Помисли си защо в училище се учи по 2-3 часа математика на седмица, и материята се сервира на порцийки? Мислил ли си сси някога че познанията натрупани в 3-ти клас ще са ти от решаващо значение за задача от 11клас? Ако в началото не научиш таблицата за умножение, няма да успееш да решиш нито една задача. Гледай на алгоритмите като на таблицата за умножение или като на питагоровата теорема :).

  2. deiman

    Благодаря за отговора! Беше ми важно да чуя мнението ти по въпроса, разбрах какво имаш предвид.

  3. deiman

    Примерът на Данаил със таблицата за умножение е много точен и на място, много добър завършек на това което каза Иван, и двамата ми помогнахте със тези съвети.

  4. Stilgar

    Добре де… ако са скучни алгоритмите, кое точно му е интересното на това програмиране? Аз си имам някакви отговори ама ми е интересно питащият защо иска да се занимава с програмиране като не му харесва да се занимава с алгоритми.

    BTW истинските алгоритми по-сложни от четно и нечетно като например алгоритми за сортиране… се оказва че може и да НЕ ги учиш. Разбира се зависи каква ти е целта и едва ли ще работиш по търсачката на Google ако не ги научиш, но може спокойно да си бичиш бизнес – related уеб проекти (каквито са повечето в България) и да не ти пука. В екипа обаче трябва да има поне един дето ги разбира за да може да оправи нещата като се скапе производителността на приложението, но наистина един е достатъчен.

  5. deiman

    @Stilgar тук става въпрос за конкретните задачи, след това видео ми стана ясно че е необходимо да се мине през тях, за да може да ги използваш във някой проект, какъвто и да е (тоест по-интересното) . Примерът с таблицата за умножение е много точен, защото: Учиш нещо, което знаеш че е необходимо и в един момент го използваш във задачи (тоест приложението), като вече толкова го знаеш че автоматично като ти кажат 5х6 автоматично отговаряш и като имаш тази база вече можеш да се развиваш. Иначе алгоритъмът грубо казано се явява подход към решение на даден проблем със последователни стъпки, там е работата че има разлика какъв проект си захванал, дали ще ти е интересен. Понеже както каза Иван във някой от предишните си видеа, като не виждаш смисъл във това което правиш и реалното му приложение интересът ти се губи -тогава и мисленето ти се губи, нали човек се води от интереса. Но както и да е вече разбрах че пряк път няма, трябва да мина през таблицата за умножение 😀

  6. LordDoskias

    Освен алгоритмите също е доста важно да се знаят структурите от данни, основните де. Hash-tables, heaps, stacks, etc.

  7. gatakka Автор

    @LordDoskias то е ясно 🙂
    Няма как да четеш и пишеш без да знаеш азбуката 🙂

  8. Stilgar

    @LordDoskias моля обясни защо „трябва“ да се знаят структурите от данни от алгоритмична гледна точка (тоест не само интерфейсът им, а и как работят) ако човек се занимава с разработка на бизнес софтуер (което според мен правят 90% от българските разработчици).

  9. deiman

    Тук нека да добавя нещо, което смятам за правилно, а именно, че не трябва да се губи време във решаването на решени вече въпроси. Тоест ако имаме даден готов клас примерно, видим че работи, тестваме го, той е добро решение и оптимизиран или да го коригираме евентуално само, а не да откриваме топлата вода наново, така ще се постигне развитие. По-добре да измисляш свои решение за нещо, което не присъства като решение, а не да правиш нови варианти на решения, които са също толкова оптимизаирани колкото готовото, вече ако наммериш по-добро оптимизирано решение тогава да.

  10. kg

    @Stilgar е прав, преди да почнеш програмиране, ти трябва само математическа логика, което е много различно от научаването наизуст (на таблицата за умножение или какво и да е било друго).
    Примерите с елементарните алгоритми е колкото да схванеш принципа, после лесно се комбинира, ама ти трябва въображение, а не всички имат въображение и могат да подреждат (това е от опит)

  11. xxTTcc

    Съжалявам грешен прозорец съм отворил. Алгоритмите са задължителни. Съгрласен съм.

  12. kg

    Ще има да учиш много неща, които после ще разбереш че не ти трябват.
    МАТЕМАТИКАТА е това, което остава в теб, след като си забравил и последния факт, свързан с наученото.(Айнщайн)

  13. deiman

    За напасването съм съгласен, но не виждам кое му е по-трудното да подадеш на дадено нещо (без значение какво клас, метод , без значение) параметри и да си свършиш работа. Ти естествено щом му подаваш параметри знаеш как работи и какво да очакваш от него.

  14. LordDoskias

    Проблемът е, че куцо и сакато пише код и съм сигурен, че в една голяма част от ситуациите, дори да има бъг не могат да си обяснят що се получава това – за мен такива хора не са нищо повече от code monkeys – да, те ще си изкарват прехраната пишейки код, но съм сигурен, че голяма част го правят само, защото е модерно, а не защото имат някаква страст към това.

  15. gat3way

    На който са му скучни алгоритмите, няма да е зле да си потърси друга работа. Сега вярно е че при уеб-програмирането мисленето леко отстъпва на нагаждането и копи-пействането, но това не променя нещата.

  16. kg

    „На който са му скучни алгоритмите, няма да е зле да си потърси друга работа. “
    Бих казала: На който са му скучна логиката, няма да е зле да си потърси друга работа. „

  17. Juliano

    браво брато поредния полезен клип които ного ми помага в развитието ми … лично на мене ного не се интересувам от програмиране или алугоритми зашото работата ми не го изисква но клиповете ти са доста интересни и помагателни .. браво и продалжаваи се така 🙂

  18. Мартин

    Влизате в infoman.musala.com – пробвайте да решите някой от задачите от ученическите олимпиади според вашата група. Задачите са на c++. Иначе при „уеб програмирането“ няма да ви трябват някакви сложни алгоритми…

  19. Bugomir

    Оффтопик: Често забелязвам че получаваш съобщения по време на клипчетата 🙂 позволено ти е да даваш пауза на клипа и да ги разглеждаш 😀

  20. gatakka Автор

    над 400 мейла на ден, при 10 часа, 600 минути, 600/400 сещай се през колко получавам средно.

  21. Данаил

    Не не не и пак не, как можа толкова сложна задача да дадеш? Отчитайки влиянието от въртенето на земята около слънцето, добавяйки високосната секунда, необходима ни за математически коректното записване на уравнението, разделяйки денонощието на 24 равни части, вземайки под внимание продължителността на работния ден … отговора е по едно съобщение на 90 секунци (всяко 101 съобщение идва на 91 секунди след предното, което е така заради гравитацията на луната)
    А сега някой да го реши с помоща на PHP, C, C++, Java или C#
    Резултати получени с помоща на Assembler и Basic не се приемат за верни

  22. Иван Стефанов

    Нека уточня, че GPS-и използват теорията на графите. Алгоритъмът на Дейкстра е много добър пример за алгоритъм върху графи(намиране на най-късите пътища от даден връх, до всички останали).

  23. LanMan

    А има ли някъде такава книжка или сборник с алгоритмични задачки?

  24. Mario

    Видеото е малко старо,но все пак…
    Алгоритмите!Мога да се обзаложа,че автора на въпроса не може,с 1-2 изречения да ми обясни какво е алгоритъм!Въпреки,че понятието алгоритъм да ни е известно отдавна,то все още няма ТОЧНА и ЯСНА дефиниция!Най-простото обяснение е,че това е някаква описана последователност от действия за извършване на определена работа.Но има и много видове алгоритми:рекурсивни,итеративни,детерминирани и не знам си какви още…
    Т’ва с такива задачи от сборници и тестове и домашни на C/C++ за мен си е лоша практика.Виждал съм някои ученици,които започват да се притесняват:„Ох,ама това защо не мога да го реша?“; „Ама нямам време,ама ще ми пише двойка?“ ; „Ама тези задачи за безсмислени…“ и т.н.А когато дадения човек(не е задължително да е ученик) прави проект за себе си,сложен или не,той среща тези проблеми и използва логика,алгоритми и т.н. и съм се блъска с проблемите и има много „problem-solving“,но това,че не е решил някоя си задача в някакъв си сборник, не го прави неспособен на логическо мислене и не „трябва да си търси друга работа“!!
    И човек не трябва да е някакъв гений,за да стане добър програмист!Все едно,че всеки математик се е родил математик!
    Програмирането(както и математиката) УЧИ на правилно,логическо,линейно,алгоритмично мислене!Не трябва да си роден с алгоритмите,за да станеш добър девелопър!
    А и един чист математик…не винаги ще стане много добър програмист.Защото освен математиката има и много други аспекти:принципи на ООП,MVC,боравене и използване на различни frameworks,опит с различни среди(IDE),шаблони за дизайн,както и просто ОПИТ.Математиката покрива,може би само 40% от целия процес „software development“!
    А и (за жалост) математиката,която се учи в училищата,не е математиката,която главно се използва в програмирането.В програмирането се използва главно дискретна математика(пр:комбинаторика).Не че без основите,като алгебрата може,но все пак голяма част от математиката в средното образование си е…не чак толкова използване в програмирането.
    По-правилно е да се каже,че ти трябва логика,отколкото математика.В някои среди на програмирането въобще не се използват някакви сложни алгоритми и математически формули!Но в други (като GIS game development,graphics) има доста математика.
    Навсякъде,по-важното е креативността.Логиката е просто…помощни колелца за креативността и въображението!

  25. gatakka Автор

    @Mario донякъде си прав, най-вече в частта, че програмирането Не е математика, въпроса е, че трябва да имаш базови основи. Знаеш ли колко човека не знаят какво е булево сортиране, метода на мехурчето или какво е сложност на алгоритъм, да не говорим за изчислението и.
    Не е нужно да знаеш всички възможни алгоритми, но както един професионален футболист трябва да може да ходи и тича, преди да прави финтове, така и програмиста трябва да има базови основи.
    Алгортмите трябва да се знаят, но не на изуст, а като принцип. Така че можеш да комбинираш няколко от тях да създадеш свой. Аз примерно НЕ мога да решавам интеграли, боже аз и уравнение с неизвестни не мога да реша 🙂 но не ми е проблем да пиша алгоритми за обхождане на дърво, решаване на транспортна задача, GIS калкулации, тригонометрични и стереометрични изчисления, бе общо взето само ми го дай 🙂
    Така че, алгоритмите трябва да се знаят, математиката само помага 🙂
    И да, ако пишеш модул за MathCad (примерно) тогава математиката трябва, но ти просто пишеш математика 🙂

  26. Mario

    Така е!Но все пак си има и други фактори.Например:разработката на софтуер си е екипна игра,така че четимостта на кода е от важност,особено при по-големите приложения!И това е важно.
    А между другото е голям мит,че в уеб девелопмънт няма много алгоритми (защото има няколко такива коментара по-нагоре).Има.Срещал съм и ми се е налагало и е много обидно някой да си мисли,че уеб разработката е лесна работа.FB,Twitter…все огромни приложения и някой да си помисли,че няма никакви алгоритми при тях…глупости!
    Проблема е,че PHP не се изучава толкова по училищата и не се срещат задачи или някаква имплементация на конкретен алгоритъм.А например при C/C++ всякакви задачи и т.н.При PHP не е така.Аз специално повече мяркам diff алгоритми…И за това в България,за един начинаещ PHP developer е малко по-трудно…
    Наготово няма да може да види имплементация на определен алгоритъм,което си има и плюсове(защото няма да дъвчеш наготово) и минуси(защото ученето става малко по-бавно и по-трудно)…

  27. Иван Кръстев

    Здравейте всички. Преди всички искам да кажа, че прекарвам много време тук, следя с голям интерес клиповете и аудиотата от nerds 2 nerds и като цяло ми е много готино. Сега имам няколко въпроса по тази тема и ще съм радостен ако намеря поне част от отговорите тук. Аз, като тотално неопитен, но желаещ да се занимава със софтуер знам, че базата за това са: бази от данни, алгоритми и езици за програмиране. Конкретно за алгоритмите съм чел (в книгата на Преслав Наков „Алгоритми ++), че се усвояват най-добре със чисто С. Моля да изкажете мнение и да споделите подходящи туториали, книги и като цяло източници на информация за този език. Знам, че някой, би казал „То в интернет е пълно!!!“- да това е така и в един момент се явява проблем. Аз като новак няма как да изчета всичко, за да мога след това да го сортирам и да преценя кое става и кое не. Иначе казано има много голям информационен шум и малко полезна информация. Много по-полезно и лесно е ако някой препоръча нещо работещо и изпитано, от колкото да чета някаква книга на английски език, писана от индиец, живеещ в Австралия например.
    Благодаря, Ви за разбирането и за отзивите.

  28. gatakka Автор

    Почни с основни алгоритми. Примерно сортиране. Правиш ги, търсиш информация ако не можеш и така.
    Не е нужно да знаеш всички алгоритми, а да знаеш да напишеш такъв, ако се наложи.

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *