Наскоро започнах да опреснявам структури от данни и алгоритми по няколко различни причини:

  1. Забелязах, че дори за да получите договорна работа, може да се сблъскате с въпроси в тези области.
  2. Искам да разровя някои от системите с отворен код на по-дълбоко ниво и след това да допринеса. Ако искам да подобря производителността на системата, тогава фокусирането върху алгоритми, структури от данни, времева и пространствена сложност са задължителни.
  3. След няколко години работа в индустрията забелязах, че ми харесват и разбирам темите, обсъждани в книгите за структурата на данните и алгоритмите, на по-дълбоко ниво (тоест разбирам „защо“ от дълбочината на сърцето си) и мога да корелирам нещата , сравнете, контрастирайте, направете паралел по-добре. Тъй като по време на ежедневните операции (в повечето работни места в малки и средни предприятия в индустрията) ние рядко правим подобрения на ниско ниво на различни протоколи или алгоритми (просто знаем защо използваме един над друг от опциите /възможности, които идват със софтуер или инструмент, вместо да пишем нещо наше собствено — нали?) Забравих „как“ на алгоритмите (използване на купчина, AVL и т.н. като например) и това е, което трябва да опресня.
  4. Ако ми писне от естеството на проектите, които идват в чинията ми или от компанията, за която работя, тогава може да се опитам да работя за компании като Google, Microsoft, Netflix и т.н. един ден. Надявам се да имам възможността да се занимавам с интересни проекти там. Моят 4.0 от 4.0 CGPA по време на моята магистърска степен. в областта на компютърните науки, както и опитът ми в индустрията няма да има голяма стойност, ако не мога да реша проблемите с алгоритмите и системния дизайн достатъчно бързо по време на интервютата с тях. Така че виждате, че опитът за опресняване на алгоритми и структури от данни няма да бъде пропилян — има огромна стойност/положителен краен резултат.
  5. Искам да измисля различни форми и техники, така че темата да бъде достатъчно интересна за моето дете и неговите приятели, за да я разберат (благодарен съм на Aditya, тъй като той свърши толкова страхотна работа в книгата „Grokking Algorithms“! Тя е в състояние да привлече дори малко дете към тази тема.).

Бих искал да спомена ресурсите, които използвам за моето изследване в свободна форма. (Виждате, че те са различни от това, което в идеалния случай се предлага като подготвителни материали за интервю с Google - като книгите „Cracking The Coding Interview“, „Algorithm Design Manual“ и сайт като geeksforgeeks.org и т.н.) Книгите и сайтовете които използвам/следвам са както следва:

  1. „Algorithms Grokking“ — от Aditya B.
  2. https://www.tutorialspoint.com/data_structures_algorithms
  3. Структури на данни — от Рейнголд и Алгоритми — от Хоровиц и Сахни.
  4. http://interactivepython.org/runestone/static/pythonds/BasicDS/
  5. Подготвителен курс за интервю с Udacity Algorithm: https://www.udacity.com/course/technical-interview--ud513
  6. http://blog.gainlo.co — от Джейк Кук. Харесвам съветите за технически интервюта и проблемите с дизайна на системата (с отговори), изброени на този сайт.

И сериозна причина, поради която започнах да разчитам на книгата на Рейнголд (от моето бакалавърско обучение), се дължи на съвета на Джейк (ако си го спомням правилно): когато има малко време за подготовка, по-добре е да се придържате към книгата(ите), които вече са запознати и смятам, че е прав. И аз съм му благодарна.

Това е всичко за днес по тази тема/личен дневник.