?

Log in

No account? Create an account

Previous Entry | Next Entry

Попадалово!

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

Tags:

Comments

( 25 comments — Leave a comment )
morfizm
May. 12th, 2013 01:39 am (UTC)
Я же тебе говорил, что лучше всё заканчивать за пару (рабочих) дней до дедлайна. Надеюсь, восстановится :)Maintenance issues имеют тенденцию возникать на выходных и чиниться в понедельник с утра.

У тебя нет доступа к материалам, требуемым для работы, или нет доступа к сайту, куда вписывать ответы?
metaller
May. 12th, 2013 04:52 am (UTC)
Take it easy.
Я не вижу проблемы. Что за deadline у тебя ?
me_milady
May. 12th, 2013 05:58 am (UTC)
Проблема в том, что после дедлайна за правильные ответы даётся меньше баллов, да? Успокой себя тем, что главное - знания, а не баллы :)
Хотя я понимаю, очень хочется получить максимум - просто, для себя, для мотивации ))
morfizm
May. 12th, 2013 10:46 am (UTC)
IMHO, баллы это тоже круто и важно. После знаний, конечно, но, тем не менее, надо воспитывать в себе победителя :)
Парниковые условия, где можно стать победителем по очкам во время учёбы, просто делая всё вовремя и на максимум - это самое оно. Нельзя недооценивать полезный психологический эффект, влияние на самооценку и т.п.! :)

Edited at 2013-05-12 10:46 am (UTC)
me_milady
May. 12th, 2013 06:01 am (UTC)
Кстати, Катяя, а мне в целом интересно: ты потом хочешь apply-иться куда-то на software engineer? Сколько примерно времени нужно вот так, с нуля (ты же с нуля начала?) учиться, чтобы были шансы устроиться? Ну т.е. сколько месяцев интенсивной учёбы нужно, чтобы пытаться идти на собеседование?
morfizm
May. 12th, 2013 08:43 am (UTC)
Мы ставим задачей за 3 года подготовиться к позиции full-time SDE. Осталось 2.5 года, пока, на мой взгдяд, on track, но может, у Кати другое мнение, я не знаю.
morfizm
May. 12th, 2013 08:44 am (UTC)
Из того, что говорили другие люди по поводу этого проекта: некоторые считают, что это очень амбициозная цель, некоторые, что адекватная/нормально достижимая. Но никого ещё не было, кто бы сказал, что мы слишком низко целимся, или будто бы можно как-то значительно быстрее 3 лет получить то же самое :)
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)
Ну да. А вообще, я надеюсь что этот вопрос корректно будут обходить стороной, и не спрашивать насчёт этого.
l_sylvanas
May. 12th, 2013 05:49 pm (UTC)
Думаю, три года - вполне разумно, учитывая, что университет занимает 4, но в университете же общее образование, то есть там тебя заставлют также брать writing, иностранный язык, гуманитарные предметы, физику - на это все, допустим, год и уходит четвертый. Ну, так, грубо говоря. А меньше, чем за 2-3 года, я действительно не представляю, как бы можно было освоить достаточно вещей, тем более, что в большинстве из них нужно просто время, чтобы к ним привыкнуть и набить руку.
( 25 comments — Leave a comment )