4. Трябва много учене и практика.
Към конретикта:
1 - Бъди сигурен, че умееш да кодираш. JavaScript e прекрасен втори програмен език, но поради призини, които нямаме време да дискутираме, не искаш, да ти е първо (споко, ще поговорим после за него).
Започни с Python! MIT и Станфорд вече преподават Python като начелен език, ако се търсиш второ мнение по-въпроса.
Мини всички неща - работа с типове данни, колекции, вградени методи, работа с други библиотеки, писане на собствени класове, ООП, сокети, нетуркинг и прочие.
Идеята е, да си ДОБРЕ запознат с основните концепции.
Ако си добре запознат, разбира се, можеш да пропуснеш тази стъпка и да се придържаш към JavaScript.
2 - Алгоритми! Как да създаваш и анализараш алгоритми.
Това е най-важната стъпка. Повярвай ми - научиш ли се, да мислиш по този начин за проблемите, ще си добър програмист, независимо какъв език, каква задача и колко трудна, винаги ще имаш върху какво да стъпиш. А и е много по-лесно, да обедиш отсрещнта страна, да те наеме на работа. Защото съм се занимвал с алгоритми, съм получавал позиции, които изискваха два пъти моят стаж и познание върху техонологии, които познавах слабо.
Не мога, да ти кажа точно от коя книга, курс или упражнения успях, да науча алгоритмите (със сигурност не беше университета ...), но ето няколко препоръки:
Algorithms Illuminated (всички части) на Tim Roughgarden
Всяка друга книга за алгоритми, до която можеш, да се докопаш.
Cracking the Coding Interview - различни авотри са, според изданието, но те съветвам, да търсиш възможно най-ново.
Знам, че в Udemy има курс за алгоритми с JavaScript, ако не ти се чете много, но аз бих минал и него, стига да пуснат разпордажба за 10 долара на курс.
3 - Дисктрента математика и логика. Ако искаш, да си още по-напред, докато се занимаваш да решаваш тежки проблеми при алгоритмите, съветвам те, да се захванеш с математиката. Защо сега? Защото истината е, че преди да видиш нуждата от повечето неща, които учиш и как са свързани с това, което правиш, математиката може да е ужасяващо скучна и тягосна за много хора.
В Khan Academy им много информация и упражнения по темата.
Колкото до книги ... много са. Наскоро видях една на български
Дисктерна Математика, Теоритизни основи на информатиката; на Светла Бойчева и Стефка Толева-Стоименова.
(не ги познавам, просто това пише на корицата). Мисля, че е добре, да минеш и това. Ще разбереш защо правим много от нещата, които правим, ще започнеш да виждаш нови връзки и ще ти е много по-лесно.
4 - Бази от данни. Няма нужда, да ставаш специалист, но е критично, да си запознат с това, как складираме и изискваме данни. Спокойно - ако си се справил с предните неща, това ще е сравнително лесно ... поне в началото.
От всичко прочетено, теза ми бяше най-полезна:
Sams Teach Yourself SQL in 10 Minutes (по-скоро 20ина часа с всичко, ако Съветвам те, поне в момента, да не се занимаваш с Graph бази данни, но ако те зачеше - Neo4J и уебсайта им е добро начало - имат си ресурси и всичко и дори отговарят на запитвания.
5 - Научи повече за мрежите. Шансовете са, че ще ти се наложи да пращаш и приемаш данни. Просто е смешно, да не си наясно с тези неща.
Препоръчвам ти:
Computer Networking: A Top-Down Approach (7th Edition) – Kurose and Ross
Но ако ти се стори "голяма", другата ми препоръка е:
Computer Networks and Internet, Global Edition of Douglas Comer
6 - Напиши сървър. Ако все още се занимаваш с JavaScript, горещо препоръчвам, да седнеш и да научиш Node.js, както и да работиш с Express. Ако караш с Python - прочети повече за Flask.
Тук ще трябва, да научиш що е то сървър, как работи и как да изискваме от него услуги (както и как да сме сигурни, че си върши работата).
Препоръчвам ти, да минеш който и да е популярен и модерне курс за Node.js с Еxpress или Python с Django. Там ще ти е обеснят повечето неща, както и защо ги правим.
Прочети и повече за JSON.
7 - Наузи се да работиш с терминал, било то през Linux или Mac. Ако не нямаш Apple компютър (единстената причина, да имаш такъв е за да правиш апликации за iOS ... честно) и не ти се занимава, да си инсталираш Linux, нека ти препоръчам Raspberry Pi. Разбира се, винаги можеш да позлваш Virtual Box и да качиш последната версия на Ubuntu. Помни, идеята не е да станеш гуру, но да си наясно с това, как се движат нещата в един компютър. Защо? Защото всичко, което се движи и изпълнява някакви важни услуги, върви под някаква форма на Unix.
8 - Сигурност - owasp top 10 в owasp.org е достатъчно, за да разбереш какви са най-честите пропуски в сигурността. Няма нужда, да се превърнеш някакъв спер хакер, но е наложително, да си наясно с основните неща, ако смяташ, да правиш каквото и да е.
9 - Тук ти препоръчвам, да направиш обратен завой, и да научиш функционален език за програмиране. Haskell и Lisp са езиците, които ти препоръчвам. Просто ще те направят по-добър програмист. Няма нужда, да си много добър в тях, просто мини основните неща, за да си наясно, че има и друг начин за решаването на проблемите.
https://wiki.haskell.org/Haskell - кажи речи всичко, което ти трябва за Haskell.
http://learnyouahaskell.com/ -добра книжка за Haskell.
https://www.youtube.com/watch?v=ymSq4wHrqyU - общо взето това видео.
10 - Методики на работа - XP (Extreme Programming), Agile и какво се е пръкнало напоследък.
Просто търси инфо в Google. Това са идеологии, на това как трябва да се разработва софтуер, как да се говори с клиенти и отдели, как да се организира работно време, как да се пише код и прочие и прочие.
Най-важното е, да разбереш, че програмирането е инструмен, който позлваме, за да създадем софтуер, който решава проблеми. Най-често говорим за бизнес проблеми. Именно, заради това се плаща. Осъзаеш ли този факт, жиовтът ти, ще е малко по-лесен. Ще работиш с много и всякакви хора. Важното е, да се разбираш с тях. Повярвай ми - екип от хора на средно ниво, които работят като екип, ще е много по-ефективен от група 10X програмисти, които по единично може и да са професори, но заедно са просто кълбо от конфликти и грешки. Методики, идеологии, философии ... много са. Едва, когаот навлезеш в индустрията, ще разбереш много неща.
11 - Софтуерна Архитектура - https://en.wikipedia.org/wiki/Software_architecture
Защо? Защото е важно, да имаш визия и план. Трябва да си спосебен, да плануваш добре, да оценяш вече създаденото и да си готов да действаш. оже би се питаш, дали няма да има човек, който ще ти казва, какво да правиш, поне в началото? Ще има, но това далеч не означава, че трябва да си неспособен, да действаш и мислиш сам. В даден момент, ако се разбере, че си адекватен, ще ти гласуват доверие и ще ти е мнго по-лесенживота.
12 - Учи феймъркове и библиетеки и работи над собствени проекти. Препоръчвам ти, да се прдържаш към популярното за момента, защото хем се учи лесно, когато има много хроа, които искат да учат и преподават, хем се плаща добре.
Това е краткото ми менние по-въпроса.
А сега за дргурите ти върпоси:
За твоите умения, предполагам, че можеш да ползваш Google Maps API-я, за да вземеш карите. Не знам, какво имаш предвид под "интерактивни", защото не си казал, но ако искаш, да показваш интересни данни, D3.js е добра библиотека за това, стига да си готов, да се научиш.
Колото до нуждата - това си е цяла наука. Да разбереш, дали нещо е нужно или не, поне в началото. Но какво вече беше казано - има такива приложения и е добре, да провериш какво и как правят, както и да разбереш защо и кой ги ползва.
Да, има смисъл, да правиш каквото и да е, докато се учиш. Това е все едно да питаш някой трениращ, дали има смисъл, да тренира. Мозъка ти работи много по-добре, когато му е навик, дарешава подобни проблеми. А найлесно се учи, когато ти е интересно. Пробвай, да разнообразиш игрите и да ги направиш с различни правила, различни движения, цветове, музика - просот за да се научиш как става.
Кой подводни каъмни да избегнеш? Ами, като за начало да работиш със софтуер и програмни езици, който замират. Да позлваш стари ресурси. Google ще ти каже, кое се търси в момента. А на твое място, бих избягвал почти всичко отпреди 2018-а, освен ако не е препоръчано от човке, който е наясно. Но най-вече, трбява да избягваш застояването (иронично, да) и да не се отпускаш с ученето.
Малко съвети:
Занимаваш се с JavaScript. Кажи речи, най-странния език в редовна употреба.
https://www.youtube.com/watch?time_continue=7&v=FSs_JYwnAdI
Ако съм на теб, в момента, щях да науча, как да работя не само с JS, ами и с Node.js, поради простата причина, че съврременният JS е почти безполезен без Node, a това, че може да върви на сървър е просто невероятно. Направи няколко прости сайта на т.нар. ванила JS (без библиотеки, без нищо), който са малко по-интерактвни. Примерно - направи няколко, който сменят фона на страницата, текста, картинките ... Идеята е, да се научиш, как JS борави с DOM.
После, като си минал през горните, научи и React или Angular (аз харесвам повече React, ама виж работните обяви в твоя район, за това, кое се търси повече). Ако си минал всичко, хем ще имаш много стабилна основа, хем знаия, котио ще се търсят в поне следващите 3-4 години, хем ще ти е лесно, да се насочиш на другаде.
Като за начало, потърси работа, като неплатен стажант.
Няколко неща, който е добре, да знаеш:
Английски - просто е много по-лесно, да си намериш работа, ако си с добър английски. Познавам индийци, които взимат 1/10 от това, което взима някакъв келеш, просто защото келеша е роден в Сиатъл, въпреки, че е на 1/5 от уменията им. Просто точно тези индийците са много зле с комуниацията. Но работех с човек от Банлгадеш, който говореше много добър английски и взима една от най-високите заплати в офиса. Истината е, че ако не знаеше добре езика, нямаше да е там. Това важи с пълна сила, за всяка държава, защото често офисите са международни и понякога се наага, да комуникираш с чуденци. Жалкото е, че дори никога, да не говориш с никого, пак ще ти изискват добро разговорно ниво (сертификати никой не иска ... те са само за кандидатстуденти).
Научи повезе за GitHub, UML, Design Patterns (MVP най-вече), REST, JSON, AWS.
Ползвай Google, Stackoverflow и документацията на каквото ползваш в момента. Това e важно умение. Редовно ще попадаш на сложни проблеми, които имат просто решение и се изисква, да ги решиш само по веднъж. Няма смисъл, да се правиш на велик, като измислиш собствено решение, губейки 3-4 часа, при положение, че първия отговор в Stack, wече предлага добро решение. И тук е другия подводен камък - трябва да се научиш, кои решения ти помагат и кои не. Сляпото copy-paste е сигурен начин, да се забатачиш.
Ами това е краткия вариант с много пропуски. Успех с работата!
|