Първоначално създадох това като кратък списък с теми за учене, за ставане на софтуерен инженер, но то се разрасна до този огромен списък, който виждате в момента. След като преминах през този учебен план, бях нает като софтуерен инженер в Amazon! Най-вероятно няма да Ви се налага да учите колкото мен, но все пак всичко, от което се нуждаете е тук.
Учих по около 8-12 часа на ден за няколко месеца. Това е историята ми: Why I studies full-time for 8 months for a Google interview
Моля обърнете внимание: Няма да Ви се налага да учите колкото мен. Загубих много време, учейки неща, които нямах нужда да знам. Може да прочетете повече за това надолу. Ще Ви помогна да достигнете до крайната цел без да прахосвате скъпото си време.
Темите, изредени тук, ще Ви подготвят добре за техническо интервю за почти всяка една компания, включително гигантите Amazon, Facebook, Google и Microsoft
Пожелавам Ви успех!
Това е моят многомесечен план за ставане на софтуерен инженер към голяма компания.
Изисквания:
Забележете, че това е учебен план за софтуерно инженерство, а не уеб разработка. Големите компании като Google, Amazon, Facebook и Microsoft различават софтуерното инженерство и уеб разработката. Amazon, например, имат Frontend инженери (FEE) и Software Development инженери (SDE). Това са 2 отделни позиции и интервютата за тях няма да са еднакви, тъй като всяка една от тях има своите специфики. Тези компании изискват знания по компютърни науки за позиции свързани с софтуерно инженерство/разработка
---------------- Всичко оттук надолу е по желание ----------------
Ако искате да работите като софтуерен инженер в голяма компания, това са нещата, които трябва да знаете.
Ако също като мен не сте учили компютърни науки в университет това ще Ви помогне да наваксате и ще Ви спести години.
Когато започнах този проект не знаех какво е стек или опашка, нямах представа какво е Big-O, не знаех нищо за дървета или как да обхождам графи. Ако трябваше да напиша сортиращ алгоритъм мога да Ви кажа, че бих се справил ужасно. Всяка от структурите от данни, които бях използвал досега бяха имплементирани в езика, който ползвах и нямах представа как работят реално. Никога не ми се беше налагало да управлявам памет освен ако някой от процесите, които бях пуснал не връщаха грешка "out of memory"- тогава се налагаше да търся заобиколен път. Бях ползвал хиляди асоциативни масиви и многоизмерни масиви няколко пъти, но никога преди не бях имплементирал структури от данни от нулата.
Планът е дълъг. Може да Ви отнеме месеци. Ако вече сте запознати с повечето от темите ще Ви отнеме многи по-малко
Всичко надолу е само схематично изложение и трябва да преминете през темите от горе до долу.
Някои видеа са достъпни само след записване в курс на Coursera или EdX- т.нар. MOOCs. Понякога се налага да изчакате няколко месеца, за да стартира ново издание на курса, така че няма да имате достъп до тях.
Би било чудесно такива ресурси да бъдат заменену с безплатни и винаги-достъпни публични източници като YouTube видеота (по възможност университетски лекции), за да могат всички да учат навсякъде и по всяко време, а не само когато даден курс върви в момента.
Трябва да изберете език за програмиране за интервютата на които ще се явявате, но също така трябва да изберете език, който можете да ползвате за учене на концепции от компютърните науки.
Желателно е този език да е един и същ, така ще Ви се налага да владеете само един език.
Когато преминавах през учебния план ползвах 2 езика за по-голямата част от нещата: C и Python
Това е моя личен избор. Вие можете да изберете каквото пожелаете, разбира се.
Може да не Ви трябват, но ето някои сайтове за учене на нов език:
Може да изберете език, в който се чувствате комфортно за интервюто Ви, но за големите компании това са най-добрите опции:
Може да ползвате и тези, но поразгледайте преди това, защото може да има уловки:
Това е статия, която написах за избирането на език за вашето интервю: Pick One Language for the Coding Interview. Това е оригиналната статия, на която базирах моя пост: http://blog.codingforinterviews.com/best-programming-language-jobs/
Трябва да се чувствате много удобно с вашия език и да сте знаещи.
Повече за вариантите:
Вижте ресурси за специфични езици тук
Тази книга ще положи вашата основа в компютърните науки.
Просто изберете една в език, с който ще се чувствате комфортно. Ще трябва да четете и да пишете код доста.
Изборът е ваш:
Изборът е ваш:
Няма нужда да купувате цял куп от тези книги. Честно казано "Cracking the Coding Interview" най-вероятно ще Ви бъде достатъчна, но аз си купих повече, за да се упражня по-добре. Но аз винаги правя прекалено много.
Купих тези двете, дадоха ми предостатъчно упражнение.
Изберете една:
Този списък се разрасна с времето и да, нещата излязоха извън контрол.
Споделям някои от грешките, които направих, за да имате по-добро преживяване и за да си спестите месеци с време.
Изгледах часове с клипове и водих записки за всичко, но след месеци имаше доста неща, които не си спомнях. Прекарах 3 дена преразглеждайки бележките си, за да си припомня някои неща. Не се нуждаех от всичките тези знания.
Моля, прочетете това, за да не повторите грешките миЛ
Да запазваме знания свързани с компютърни науки.
За да се справя с проблема си направих малък сайт за флаш карти, където можех да добавям 2 вида карти: общи и такива с код. Всяка карта има ралично форматиране. Направих сайта mobile-first, за да мога да ги разглеждам от телефона или таблета си, навсякъде където съм.
Направете свои безплатно:
НЕ ПРЕПОРЪЧВАМ да ползвате моите флаш карти. Има прекалено много и някои от тях съдържат информация, която не е нужно да знаете.
Но ако не искате да ме послушате, ето:
Забележете, че аз прекалих и имам карти, които покриват всичко от assembly language и Python Trivia до machine learning и статистика. Прекалено много е за това, което се изисква.
Бележка за флаш картите: Първия път когато видите, че знаете отговора, не я отбелязвайте като "позната". Трябва да видите същата карта и отговора няколко пъти, преди наистина да знаете отговора. Повторението ще накара мозъка Ви наистина да запамети знанието.
ТОВА Е МНОГО ВАЖНО.
Почнете да решавате задачи от интервюта по програмиране докато учите структури от данни и алгоритми.
Трябва да прилагате това, което учите като решавате задачи иначе ще забравите. Аз направих тази грешка.
Когато сте научили някоя тема и се чувствате що годе комфортно с нея, например linked lists:
Продължавайте да решавате задачи докато учите всичко това, а не след това.
Няма да ви наемат за знанията, които имате, а за това как ги прилагате.
Има много ресурси свързани с това надолу. Продължавайте да четете.
Има много неща, които могат да отвлекат вниманието Ви и да Ви загубят ценно време. Да сте концентрирани е трудно. Пуснете си музика без текст и ще можете да се фокусирате сравнително добре.
Това са широко разпространени технологии, но не и част от учебния план:
Този курс преминава през множество от теми. Всяка от тях най-вероятно ще Ви отнеме няколко дена или дори седмица, или повече. Зависи от графика Ви.
Всеки ден взимайте следващата тема в списъка, изгледайте няколко клипа по тази тема и след това напишете имплементацията на въпросната структура от данни или алгоритъм в езика за програмиране, който сте избрали за този курс.
Можете да видите моя код тук:
Не е нужно да помните всеки алгоритъм наизуст. Необходимо е просто да ги разбирате достатъчно добре, за да можете да напишете собствена имплементация.
Защо това е тук? Аз не съм готов да се явя на интервю.
Тогава се върни и прочети това.
Защо трябва да се упражнявате да решавате задачи по програмиране:
Пишете код на дъска или лист хартия вместо на компютър. Тествайте с няколко различни входни данни. След това го напишете и тествайте на компютър.
Ако нямате дъска за писане вкъщи можете да си купите голям тефтер от магазин за арт материали. Можете просто да седите на дивана и да се упражнявате. Това е моята "дъска за дивана". Добавих химикала към снимката за съпоставка на размера. Ако използвате химикал бързо ще ви се поиска да можеше да триете написаното- бързо става мазало. Аз ползвам молив и гума.
Когато се упражнявате да решавате задачи по програмиране не трябва да помните решенията наизуст.
Не забравяйте основните книги за подготовка за интервюто по програмиране тук
Решаване на задачи:
Клипове за задачи от интервюта по програмиране:
Сайтове със задачи:
Добре, стига сме говорили, нека да учим!
Но не забравяйте да решавате задачи от източниците по-горе докато учите!
Е, това е достатъчно за тази тема.
Когато четете "Cracking the Coding Interview" ще срещнете главата, която разглежда тази тема. Накрая на главата има кратък тест, който проверява дали можете да намерите сложността на различни алгоритми. Това е супер преговор и тест.
[ ] Клипове:
[ ] Онлайн курсовe:
[ ] Имплементирайте с масив, ползвайки linear probing