Учусь на 2 курсе. И почти все свое свободное от учебы время, около 6-7 часов, каждый день(6 дней из 7-ми) пытаюсь изучать Computer Science. Погуглил и составил для себя план из книг, и по книгам уже ищу в гугле, там где не понял.
- Код. Тайный язык информатики
- Архитектура компьютера. Таненбаум(сейчас на этом этапе)
- SICP(MIT)
- Математика для Computer Science
- Алгоритмы и структуры данных. Скиена или Седжвик
- Операционные системы. Таненбаум
- Сети. Таненбаум
- Базы Данных
- Компиляторы. Наверное книга Дракона.
Пока почти 90 процентов это теория т.е на Архитектуре особо не попрактикуешься. Но планирую матем и алгоритмы изучать уже как на теории так и на практике.
Хочу не просто кодить, а именно понимать структуру изнутри, ну или хотябы представлять как это работает. Знать фундамент, на чем все простроенно. Когда начинаю заниматься более прикладными вещами типа Андроид, то сразу мысли о том, что пока не узнаю как все работает, то не имею право что то делать )
Но вот, когда смотрю на вакансии, то там в основном, требуется, тот кто учил какой нибудь фреймворк и умеет его использовать. И тут сразу приходят обратные мысли, насчет моего плана ((
Как поступить ?
UPD: язык программирования знаю Java. Могу писать не сложные приложения на Андроид. Но вот решил вернуться у основам всего, т.к многое пропустил вначале обучения.
sim3x, откуда речь про джун собесы? Зачастую компании зовут на собес, и уже сами решают, какого вы уровня.
А если будет джун собес, то тоже могут спросить. Но ожидать будут не правильного ответа, а общую логику.
sim3x, Рональд Макдональд, Ivan Yakushenko Попробую объяснить вопрос, я не совсем полный новичок, где то 1 год занимаюсь программированием. Начинал с java и android, делал небольшие приложения. Для меня написать несложное приложение за пару дней легче, чем решить какую нибудь задачу например с графами. И я понял, что сильно отстал в выше перечисленных темах. И хотелось бы понять, реально ли нужны перечисленные мной темы, я не говорю про все, ну я понимаю, что архитектура никаким боком, ну например остальные темы после архитектуры, ведь они реально применимы на практике ?!
sim3x в целом, я заметил, что здесь автором имеется ввиду архитектура компьютера, а не ПО. Поэтому думаю, что наши общие комментарии не имеют смысла и относятся именно к ПО.
noob777, сети, базы дынных в каких-то определенных аспектах знать вам нужно. Всё остальное не имеет практически никакой прикладной значимости практически во всех направлениях.
Всё зависит от того, что вы хотите и что вам нужно. Просто так учить можете всё, что угодно. Если хотите заниматься программированием под Android вычеркните вообще все, что есть в вашем списке, возьмите книгу Шилдта по Java, там есть все, что вам нужно знать для программирования. Если уж сильно захочется углубиться в принципы работы тех-же сетей, или чего-то еще - пожалуйста, вас никто не сдерживает. Ну и что-то из Head First по Android.
И да, пишите код, много кода.
techkuz,
При появлении такого вопроса, стоит сразу спросить у собеседующего, платят ли в данном заведении "попаттерно" или за решение задач
Такие вопросы часто используются разрабами без о/р и/или с завышенным ЧСВ, что также не очень хорошо
Узконаправленный разработчик - это человек, который досконально знает нюансы своей ниши и имеет кучу опыта в тех вопросах, которые в них возникают.
Широконаправленный разработчик - это человек, который попробовал многое и успешно воплотил проекты в нескольких разных нишах.
А тот, кто пролеживал бока, листая Танненбаума и Дейкстру - это вообще не разработчик, и нанимать его никто не будет по той простой причине, что опыта у него нет, и оплачивать время, пока он будет его набирать, набивая свои нубские шишки, никто не разбежался.
Книги - это прекрасно. Но в разработчиках ценят не умение проходить тестирование, а реальный опыт и приобретенные навыки. Даже если идиоты-эйчары организуют наем поперек этой логики.
Забавно что народ на слово "архитектура" тригерится именно как на архитектуру ПО хотя у автора архитектура выч. техники скорее.
По факту была похожая беда (начинал попытки своей учебы с кернигана и ричи, но натыкаясь на "магию" которую нужно было запомнить и не понимал - бросал все). Сейчас пришел к компромиссу для себя. Петцольд с его Кодом дали мне оооочень приблизительное и обзорное понимание абстракций от простых элементов к ПК и ОС, и как оно примерно работает, несколько дней асма тоже немного понимания добавила, маленько таненбаума почитал по ОС а дальше я по цепочке достроил в голове что все остальные уровни такие же абстракции и сейчас спокойно пишу под андроид почти не заглядывая под капот, но с пониманием что никакой магии нет и будь необходимо всегда можно вникнуть на любом уровне абстракции.
З.Ы. Я вообще планирую к этому всему вернуться, но уже когда поднакоплю опыта в андроиде, когда времени побольше будет. А сейчас для меня основное это все же набраться практики и использования прикладных библиотек и фреймворков, потому что именно они "решают задачи". А уже потом можно будет вернуться к математике, алгоритмам, ОС, сетям и прочему.
Кстати, если смотреть на вопрос в заголовке - лично мне скорее интересно быть разносторонне направленным, на андроиде останавливаться не планирую. Просто потому что мне так интереснее. Соответственно и смотреть надо именно на то что интересно тебе.
То что вы перечислили -- это фундаментальные знания. Без них разработчик -- просто мартышка. Да, они нужны, т.к. это база.
Но ещё нужен и практический опыт. Потому что вакансии без опыта обычно предполагают простые задачки, где особо не надо думать. Наличие фундаментальных знаний может определить, насколько быстро вы пройдёте этот этап. Ну или можно навсегда остаться "решающим задачи программистом, которому это не нужно". Таких тут много, почитайте ответы.
около 6-7 часов, каждый день(6 дней из 7-ми) пытаюсь изучать
Примерно 60% этого времени вы тратите впустую.
Остальное - какие-то страдания и держания в курсе.
Но вот, когда смотрю на вакансии, то там в основном, требуется, тот кто учил какой нибудь фреймворк и умеет его использовать.
А как вы хотели? Вы бы взяли к себе программиста, который хорошо знает оторванную от практики теорию, но не может написать нормальный код? Нет, не взяли, вы возьмёте кодошлёпа, который раз-раз и в продакшон.
Так что бросайте размусоливать и вперёд, курить фреймворки и на завод, махать кловеатурой.
Список объективно слабоват. Вас после такого даже джуном не возьмут. Обязательно нужно добавить следующее:
"Искусство программирования" Кнута (разумеется, все 4 тома)
"Приёмы объектно-ориентированного проектирования. Паттерны проектирования" Банты Четырёх
"DDD" Эванса
После этого можно пытаться идти на собес на стажёра
P.S. Я очень надеюсь, что ваш вопрос - это троллинг
Иван Шумов, DDD великолепная книжка (к слову, там всего чуть больше 500 страниц). Уже три раза перечитывал с интервалами в пару лет. Каждый раз что-то новое открывается или на что-то смотришь под другим углом.
Эти знания реально используются на работе. Потому что разработчики ПО, на практике, отвечают за проектирование ПО, не только за реализацию.
Vitaly, кхм. Ну, все зависит от компании и команды. В больших командах программистов к проектированию DDD не подпустят на пушечный выстрел (и не всегда даже к написанию интерфейсов), а в маленьких без него вполне можно прекрасно жить (что неоднократно доказывалось и мной тоже). Исключительно исходя из собственного опыта)
Иван Шумов, Ну конечно число примеров общности не доказывает. Тем более один пример.
Термин "архитектура ПО" трактуется очень широко, равно как и "модель предметной области". Так или иначе, вы используете большинство техник и подходов из DDD даже когда создаёте архитектуру на два-три класса.