?

Log in

No account? Create an account

Previous Entry | Next Entry

Попадалово!

Блииииин, гадство!! У меня в понедельник дедлайн, а у курсеры проблемы с сервером! Минут 30 назад начались. Хорошо, если дедлайн сдвинут из-за этого, а если нет? Гррррр!
Кликаю по ссылке каждые 5 минут, как заведенная. Обидно будет, если не успею... :(

Tags:

Comments

me_milady
May. 12th, 2013 09:29 am (UTC)
Упс. Я видела людей, которые совершенно не зная программирования, через полгода изучения по книжкам - идут работать. Я почему-то подумала что через 1 год обучения уже точно можно идти на junior
morfizm
May. 12th, 2013 09:40 am (UTC)
Смотря куда идти. Если примерно туда, где ты работала до переезда в Х., то ты же понимаешь,... это, во-первых, очень низкооплачиваемая работа, а во-вторых, из этого очень трудно выбраться. Главным образом, трудно изменить attitude. Трудно перейти из "сделать хоть как-нибудь, с поверхностным пониманием вещей" до "делать сложные вещи, понимая все fundamentals в глубину". У тебя вроде получилось или получается, но посмотри, тебе это дорого стоило - два года сверху на уже имеющуюся кучу опыта и на компьютерное высшее образование. Три года с нуля это очень небольшое время для такого же результата, особенно если начинать не в 20 лет, а в, ну, не буду говорить, во сколько :)

Мы изначально нацеливаемся на good depth, т.е. хотим получить нечто близкое к эквиваленту B.Sc. in CS. С таким прицелом можно получить работу $100K/год, ну, или какую-нибудь $75K starting с возможностью в очень обозримом будущем (год-два) перелезть за $100K, и потом, при желании, продолжать нормальный карьерный рост инженера.

Для сравнения, к manual QA можно подготовиться за 3-6 месяцев и получать $40-50K без каких либо перспектив роста. За эти деньги в нашей местности тебе придётся жить где-то на отшибе, на всём экономить, и ехать час на работу в одну сторону. Если ставить целью получать $50K, то, в принципе, правильнее закончить какие-нибудь курсы бухгалтера или офис-менеджера. Хороший офис-менеджер - не человек, сидящий на reception, а "продвинутый секретарь", который может управлять календарём начальника, планировать team events, нанимать receptionist'ов и т.п., - может получать те же $50K.
me_milady
May. 12th, 2013 10:06 am (UTC)
Ну вы вдохновляете конечно =) А ты можешь выложить (переслать на почту?) список всего, что вы изучаете. Это же не только алгоритмы, да?
morfizm
May. 12th, 2013 10:31 am (UTC)
У нас нет жёсткого плана, мы придерживаемся agile подхода - раз в пару месяцев смотрим, что available и прицеливаемся на ближайшие 3-6 месяцев, выбирая, что полезнее делать.

В общем и целом, подход примерно такой:

1. Как можно раньше программирование и регулярная практика. See our values :) Как можно раньше преодоление всех барьеров (как психологических, так и пробелы в знаниях), чтобы программирование было весело и интересно, и, в идеале, рассматривалось как отдых в перерывах между занятиями математикой и теорией по CS. По объёму часов где-то 30-40% практика в программировании. Я активно поддерживаю подход сначала экспериментировать с чем-то новым, а когда ты упираешься в проблему, уже разбираться с необходимой теорией - тогда теория очень хорошо укладывается в голове, а не наоборот: сначала "абстрактно" что-то "понять", а потом уже практиковаться. В таком случае ты, на самом деле, ничего не понимаешь с первого раза, и нужно будет перечитывать теорию как минимум ещё один раз - неэффективно по времени.

2. Математика:
*) обязательно школьный курс,
*) обязательно вся дискретная математика, это основы логики, основы абстрактной алгебры (группы и пр.), основы комбинаторики, основы теории чисел, основы теории автоматом и формальных грамматик; опционально компиляторы и т.п. более "эзотерические" вещи.
*) из непрерывной - на мой взгляд, ничего из отдельных предметов не является обязательным, но хотя бы что-нибудь взять надо. Это мат.анализ, дифуры, аналитическая геометрия и т.п.
*) есть предметы вроде линейной алгебры и численных методов, которые лежат посередине между дискреткой и непрерывной математикой, их тоже надо будет взять.

3) Теоретический computer science, алгоритмы и структуры данных.
4) Языки программирования. Сейчас Python, но нужен будет ещё хотя бы один язык со строгой статической проверкой синтаксиса, вроде Java/C++. Я думаю, так или иначе нужен C/C++, вне зависимости ни от чего. Нужен SQL. Опционально функциональные и декларативные языки, если будет время/желание/подвернётся удачный курс из онлайн или недорогих в колледже и т.п.

По п.п.2-4 это ещё 30% времени.
Оставшиеся 30%:

5) Операционные системы, компьютерные сети, базы данных и т.п., технологии, языки программирования, системы - в общем, разные прикладные знания.
6) Реальный опыт работы. Самостоятельные проекты большого размера, участие в open source или подработки/internships, работа в коллективе, source control, tools, etc.

К этому всему надо добавить правильный attitude:
*) Getting things done, project management.
*) Work-life balance.
*) Позитивное отношение к работе, к преодолению трудностей, видеть в неудачах интересные opportunities for learning, чтобы с радостью долбиться дальше и т.п. :)
*) Особенно в математике, основательный подход: не допускать пробелов. Не важно, сколько это займёт времени, предпочитать глубину охвату в ширину, понимать целиком и полностью, пробовать разные конкретные приложения абстрактных моделей, чтобы лучше понимать суть, посмотрев на одно и то же с разных сторон, и т.п.
*) Внимание к деталям.
*) Result-oriented.
*) Уметь эффективно пользоваться справочниками, гуглом. Не бояться обращаться за помощью. Уметь выбирать правильные моменты, когда это делать (не слишком рано и не слишком поздно).

Это так, навскидку. Наверняка что-то пропущено, но общий "дух" примерно такой. Катя уже брала три курса на coursera (mathematical thinking, introduction to logic и вот этот питоновский курс), а что она будет брать дальше - я не знаю :) У нас есть список, где мы как-то классифицировали и отсортировали по привлекательности те вещи, которые начнуться в будущем. Мы ещё не смотрели, что дают в community colleges и universities, но это будем делать потом. Можно будет брать какие-то отдельные курсы.

Тут надо ещё понимать, что вот эти принципы, которые упомянуты выше, могут влиять на расписание. Например, применение "основательного подхода" может привести к тому, что ты хотел взять 4 курса, а реально получается только 2. Ну или надо "галопом по Европам", что есть неправильно. Соответственно, приходится делать adjustment и от чего-то отказываться. Качество важнее количества :)
l_sylvanas
May. 12th, 2013 06:10 pm (UTC)
Мат. анализ наверное все же нужен :) просто иначе люди тебя всерьез воспринимать не будут, наверное :) Это немножко как читать не уметь, на мой взгляд :). Потом на самом деле без мат. анализа нельзя же понять многих доказательств, нельзя понять даже основ статистики (что такое maximum likelihood estimation), а без статистики сегодня проигрышно.

А дальше зависит, наверное, от того, что именно интересно. Если какой-нибудь machine learning - там нужно "на ты" быть со многими аспектами самой разной математики.

Я так понимаю, тебе кажется, что часто предмет в его целости как бы "не нужен": ну подумаешь, можно же в двух словах объяснить человеку, о чем речь, и он в приложении к конкретной задаче поймет и сможет пользоваться. По моему опыту это не так. Это человеку, который уже хорошо знает предмет, кажется, что из него можно быстренько просто объяснить какую-то часть, которая нужна прямо сейчас. А человек, который предмета не знает, скорее всего, не сможет воспринять ничего толком из такого объяснения.

Дифуры мне пока ни разу не были нужны. Линейная алгебра оказалась очень важна, но это потому что я machine learning и game theory заинтересовалась, так что это, наверное, действительно уже зависит от дальнейшего выбора. Мат. анализ пригождается нечасто, но регулярно (концепция дифференцирования и предела, и интегрирования (именно концепция, а не, допустим, различные способы интегрировать всякие неэлементарные вещи), градиент, ряды, суммы).

А так вообще пока что больше всего мне было нужно хорошее понимание функций (особенно экспоненты и логарифма) :). Что действительно школьный курс просто.
morfizm
May. 12th, 2013 08:14 pm (UTC)
Я основы статистики учу только сейчас, т.к. взялся читать книжку "Probabilistic Graphical Models" (это Machine Learning, да :)). Я не спорю, что ML это очень модно и правильно, и статистика для него нужна. Но она не была нужна предыдущие 8 лет моей карьеры, по крайней мере, не была нужна в объёме целого курса. Для distributed systems programming достаточно понимать, что такое распределение и процентиль, а это вещи, которые, если ты знаешь основы комбинаторики, можно объяснить за один вечер.

Мне кажется, что важны *основы* - именно понимать суть какого-то крупного *раздела*, направления математики, плюс умение учиться, тогда необходимое можно будет поднагнать. Скажем, основы непрерывной математики это функциональный анализ и производные, его дают в школе. Можно "укрепить" каким-то одним серьёзным университетским курсом вроде мат.анализа, дифуров (это к тому, почему я считаю, что нужен хотя бы один, но не так важно, какой именно). А остальное ты уже будешь брать по мере необходимости.

Мне, кстати, дифуры куда больше приходились, чем мат.анализ. Дифуры + численные методы открывают двери в моделирование и симуляции. Линейка помогает с аналитической геометрией (графика), но главный её плюс - она позволяет читать разные другие advanced математические книжки, т.к. без "беглости" с материцами и векторами читать книжки очень трудно. А вот мат. анализ в чистом не пригодился ни разу. Для практических задач у тебя всегда есть численные методы или мат.пакеты, решающие символьно. Если мат.пакет не сможет взять какой-то интеграл символьно или посчитать какой-то ряд символьно, то я и подавно не смогу :) Мне не кажется, будто бы 1-2 семестровый курс позволит тебе эффективно конкурировать с мат.пакетом. Это надо куда более основательно подходить... а зачем? Программисту зачем?

Хорошее понимание функций - не могу поспорить, оно необходимо, это да.

Что касается дискретной математики и разных родственных дисциплин, IMHO, там нужно брать как можно больше, потому что практически всё является prerequisite, чтобы бегло понимать и строить алгоритмы. Есть большая белая книжка (Cormen/Leiserson/Rivest, "Introduction to Algorithms"). Нужно прочесть её за разумное время (вроде одного семестра, а не десяти лет :)), прорешав большинство упражнений, а также есть другие книжки Gusfield, Aho/Ullman, Knuth, и т.п., которые методично штудировать не надо, но надо иметь необходимый багаж, чтобы за разумное, очень небольшое время разобраться с любым chapter'ом по необходимости.

Если у тебя нет такой базы, то ты довольно limited in terms of things you can learn later, and also about complexity of things you'll be able to design yourself, vs always relying on someone else telling you what to do.
l_sylvanas
May. 12th, 2013 08:38 pm (UTC)
про мат. анализ - я имела в виду, что без него тоже трудно книжки читать, как и без линейной алгебры. Я не имела в виду, что мне пригождаются знания, как интегрировать по частям или что-то в этом роде :). Это может быть нужно, только если ты хочешь работать теоретиком :).
morfizm
May. 12th, 2013 08:41 pm (UTC)
Ну, зависит от книжек. Хотя, возможно, тот необходимый минимум в мат.анализе, требуемый для книжек, у меня есть. Я же не спорю с необходимостью какого-то минимума. Я считаю что "мат. анализ" как предмет - optional, его можно заменить каким-то родственным из той же группы. Скажем, линейная алгебра + функциональный анализ, аналитическая геометрия, дифференциальные уравнения и т.п.

Edited at 2013-05-12 08:41 pm (UTC)
morfizm
May. 12th, 2013 08:30 pm (UTC)
Причём, заметь, "теория вероятностей" (необходимые её основы для ML) это параграф 2.1 в книжке, типа, 15 страниц математики. Я его собираюсь прочесть за неделю, и думаю, моего background'а (который, в основном, ориентирован на дискретку) хватит, чтобы поднять это за неделю. Мне не нужен семестр для этого. Т.е., по-моему, нужны те необходимые кирпичики, чтобы потом ты мог нужное (по какой-то теме) наверстать за неделю, и совсем не обязательно всё, что может тебе пригодиться, проходить в объёме серьёзных университетских семестров.
l_sylvanas
May. 12th, 2013 08:33 pm (UTC)
Дим, что тебе хватит недели, я не сомневаюсь :)) У тебя все же есть высшее математическое образование (кстати, разве у вас не было тервера?..). А мне бы недели не хватило, это точно.
morfizm
May. 12th, 2013 08:38 pm (UTC)
Ответил письмом.
morfizm
May. 12th, 2013 08:34 pm (UTC)
Ну и ещё один момент. Если ты работаешь как software engineer, в области, в которой нужна сильная advanced-математика, то пробелы в advanced-математике могут fill in другие люди, которые сделают для тебя модель и объяснят её тебе. Это что-то вроде разовая консультация на пару часов после которой у тебя месяц-два software development project. Если же наоборот, ты умеешь построить правильную модель, но не умеешь программировать, то ты не эффективный инженер. Нужно будет, чтобы кто-то за руку тебя вёл все два месяца.

Конечно, идеально, когда ты можешь и то, и другое, но you need to choose your battles.
morfizm
May. 12th, 2013 09:43 am (UTC)
Ещё... если, скажем, в IT (сисадмины) существует какой-то карьерный путь, как из "кустарного опыта" постепенно вырасти серьёзным специалистом, постепенно меняя работу, получая разные certifications и т.п., то для разработчика я такого карьерного пути не вижу. Ну, т.е., вижу, но только если после работы заниматься дополнительно, восполняя пробелы в fundamentals, и это очень тяжело. Опять же, кому как не тебе, про это знать :) Дешевле сразу начинать с правильных fundamentals.
morfizm
May. 12th, 2013 10:05 am (UTC)
Кстати, по поводу карьеры,... неправильный старт может пойти в минус, а не в плюс. Именно не в ноль, а в минус.

Я помню кто-то из Украины (опытный разработчик) спрашивал меня про возможности трудоустройства в США. Я попросил посмотреть на резюме. У него в резюме было хорошее образование, а потом десять лет опыта anykeyer-а в офшорной разработке никому не известных вебсайтов. Я ему объяснил, что с таким резюме он, скорее всего, не интересен ни одной компании, которая оформляет H1-B, ему нужно добавить года три опыта чего-нибудь посерьёзнее.

Посмотри на это с такой т.з.: если бы у него не было 10 лет "плохого" опыта, он был бы *заметно более* интересен, и мог бы куда-нибудь апплаиться сразу. Не потому что молод, а потому что предполагается, что вначале у человека есть потенциал. Когда он выписывает своим опытом в резюме доказательство того, что у него потенциала не было, или было, но просрано, то это минимизирует ценность полученного образования в глазах нового работодателя. Через 10 лет уже смотрят только на опыт, а не на образование и потенциал.
me_milady
May. 12th, 2013 10:10 am (UTC)
Я сейчас больше боюсь что на меня скоро начнут смотреть с позиции "девочка, которая может свалить в декрет" :( В 22 так не смотрят, а ближе к 30 шансы увеличиваются. Нужно ещё доказывать (на собеседовании) что ты намерена работать в ближайшее время.
morfizm
May. 12th, 2013 10:12 am (UTC)
Зато вскоре после 30 можно сказать, что у тебя (ранние) дети уже давно выросли и живут отдельно :) Никто же не будет проверять.
me_milady
May. 12th, 2013 10:15 am (UTC)
Ну да. А вообще, я надеюсь что этот вопрос корректно будут обходить стороной, и не спрашивать насчёт этого.

Profile

fearless_cat
Бывшие канадские ангелы мы

Latest Month

September 2019
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Page Summary

Powered by LiveJournal.com
Designed by Tiffany Chow