Какое направление в программировании выбрать дальше?
Высшее образование (гуманитарий), хороший английский. Очень нравится программирование. За полгода самостоятельного изучения с нуля дошел до Си. Сейчас продолжаю набивать на нем руку небольшими программами. Насчет того, какое направление нравится больше всего, не могу дать четкий ответ - нравится, в принципе, все. Но выучить все не получится, потому что через 8 месяцев закончится мой "творческий отпуск" и придется искать работу (если бы не время, учил бы дальше C++, а затем Java). Есть "советчики" (такие же самоучки, как и я), которые рекомендуют забыть про С/С++ (вакансий мало) и Java (устаревший), а начать изучать более доступную веб-разработку на Python.
Вопрос: при наличии еще 8 месяцев абсолютно свободного времени и на текущем уровне знаний, на каком направлении лучше всего сконцентрироваться, чтобы в перспективе получить работу?
Ну вы тут уже как нибудь сами определяйтесь, что вам больше нравится. Всеравно всего скорее через года три четыре перегорите, особенно если залпом программировать, особенно если выбрать одно направление и перестать развитаться. Ну если это случиться будет печально, программирование может вызывать отвращение, а у если будет работа, то это рутина и придется этим заниматься... Единственный способ лечения это отдохнуть пол годика и возможно отпустит и опять появится интерес к программированию, но если будет рутинная работа всё будет только ухудшаться. Крч о чём это я, программируйте, но не переусердствуйте, отдыхайте, иначе невероятный интерес познать всё, может координально поменяться, хотя сейчас вам наверно кажется, что вам всегда будет так невероятно интересно этим заниматься, как сейчас. А по поводу вопроса, здесь вам никто ничего дельного не подскажет.
Спасибо за ответ! У меня вышел слишком длинный рассказ о себе. Я попробую его позже сократить. Скажите, если бы вы оказались на моем месте, с теми данными, знаниями и возможностями, и при этом у вас остается 7-8 месяцев до "конца денег", что бы вы стали изучать прямо сейчас, чтобы найти работу?
Чувак, ты же природный писатель. На ровном месте накатал такую простыню. Не?
За шесть месяцев я повторил всю школьную математику и алгебру, разобрался с некоторыми темами высшей математики (комбинаторика, теория вероятности, математическая логика), познакомился с утройством компьютера, прочитал две книги по программированию на Паскале и сделал парочку учебных проектов, прошелся по программированию на NASM (писал не очень много, т.к. больше интересовало как все работает), затем освоил С и сейчас продолжаю набивать на нем руку.
milssky, вы не поверите, что можно успеть выучить, когда в распоряжении есть 10-12 часов ежедневно. Попробую рассказать (пардон, если снова получилась "простыня")
--
Дело было так, что в сентябре mail.ru проводил набор на курсы по веб-программированию, и на втором этапе тестирования попались задачи на школьную вероятность и комбинаторику. Я этот тест завалил. Поэтому я выписал вопросы из теста и начал обучение именно с повторения математики. Школьную математику я повторял на spacemath.xyz и Khan Academy, вероятность и комбинаторику - по лекциям в YouTube (очень понравился канал Бориса Трушина) и различным он-лайн школам. Через 1,5 месяца я, в принципе, разобрал большинство типовых задач и решил все вопросы того злополучного теста. К сожалению, сейчас не скажу, что все помню потому что до сих пор такие задачи не попадались. Думаю, если пролистаю свой конспект, то вспомню. Товарищ выше, видимо, решил, что я всю высшую математику прошел - конечно же нет, лишь точечно те вопросы, которые попались в тесте и которые рекомендовали разобрать люди, когда я спрашивал о минимальном математическом багаже для изучения программирования.
Устройство компьютера начал читать паралельно с математикой по R. Young "How computers work" и C. Petzold "C.O.D.E.". Тогда особенно впечатлил первый автор (хотя там всего было 150 страниц). Прошел некоторые части из курсов Khan AP Computer Science, Coursera How Computers Work, посмотрел серию роликов Crash Course Computer Science. Поставил симулятор logic.ly, пробовал делать простейшие цепи. Потом посмотрел серию лекций одного преподавателя по введению в булеву алгебру.
Затем начал учить Паскаль по первой книге Столярова, консультируясь с учебником Г.Г. Рапакова и С.Ю. Ржеуцкой (эта книга пылилась у меня на полке еще с универа). Там темы работы CPU тоже поднимались. Паскаль я прошел где-то за 2 месяца. Сделал большинство заданий, попробовал написать "змейку", цифровой будильник (выложил на github), и очень кривую базу данных.
Затем пошла вторая книга по низкоуровневому программированию Столярова. Регистры, память, секции кода и данных, куча, стековый фрейм, переполнение, перенос, арифметические операции, хранение чисел с плавающей точкой - все это я разобрал. Не сказать, что я сильно кодил на ассемблере, больше читал для общего понимания.
Где-то в середине января я добрался до второй части книги Столярова, посвященной Си. Параллельно консультировался с книгой D. & D. Griffitths "HEADFIRST C". Когда и там, и там становилось совершенно непонятно, смотрел десятки роликов на YouTube, пытался всячески рисовать схемы, "визуализировать" и т.д. Стал много спрашивать на StackOverflow. Сложнее всего далось понимание работы указателя на указатель в динамических структурах, массив указателей на строки, и, само собой, рекурсия.
Неделю назад закрыл обе книги (в HeadFirst последние две главы были посвящены системным вызовам, межпроцессмному взаимодействию и сетевым протоколам, но я не стал читать, т.к. вся следующая книга Столярова посвящена этим вопросам), стал перечитывать конспект и выполнять различные задания. Ну а затем у меня случился небольшой кризис, собственно, о котором я написал в теме вопроса: что учить дальше, если времени мало и нужно искать работу?
Признаюсь, я пытался разобраться, но так и не понял некоторые темы, вроде машины Тьюринга, проблемы останова, вычислимость и определение алгоритма, разница между интерпретацией и компиляцией (компиляцию я, в принципе, "прочувствовал" на примере Си, но интерпретация мне осталось непонятной)
ftl87, я, конечно, не могу судить конкретно о вас, но. Никогда не поверю, что все 10-12 часов реально получается учится. Допустим, половину времени из этой кучи. 3 стандартные пары. Из вот этих 5-6 часов учения процент понятия и усвоения материала явно ниже половины (я по себе сужу. но вдруг вы уникум, конечно :) )
Тут ситуацию в том, что вы выбрали "академический", ИМХО, путь изучения программирования. Т.к. то, что вы описали про труды г-на Столярова очень напоминают программу технического вуза по специальности ЭВМ. Надо оно вам?
А теперь мои мысли:
1. Вы не умеете программировать еще. Выполнение лаб на паскале не считаются. Нужна практика, много очень практики. Все, что написано в книге, может казаться легким, но повторить быстро не получится.
2. Вы не определились с тем, чем вы хотите заниматься. А это, пожалуй, главное. По наблюдениям, чтобы нормально зарабатывать в этой области, нужно "болеть" своей работой. Вы нашли, от чего вас прет? Если да, то развивайтесь в этом направлении. Остальное попутно подтащиться.
3. Если вы просто хотите зарабатывать, не выполняя пункт 2, то гораздо проще не идти в эту область. Успехов больших в ней не получите.
4. Какой язык учить -- все равно. Любой язык общего назначения, который вас нравится. Но см пункт 2.
ftl87, сейчас глянул, что за чудо spacemath.xyz - там материал до 6го класса, по ощущению. Разбираться с Khan Academy не стал.
Выбор для изучения паскаля и С по меньшей мере странен, это языки одной парадигмы (императивной), но с разным синтаксисом. Кто вас надоумил так делать - не знаю.
Я, однако ж, переменил о вас мнение: сперва ваш пост выглядел безудержным хвастовством, но теперь я полагаю, что вы не вполне адекватно оцениваете себя и свою ситуацию.
Кой смысл играться в logic.ly? До чего вы там дошли? Как триггер работает - знаете? А если знаете - куда приложите эти знания?
Кой смысл копаться в ассемблере? Говорите, "читал для общего понимания"? Понимание - это такая штука, что когда вы берётесь что-то осмысленное накодить на асме - у вас это получается. Для этого нужна практика, много, а без неё у вас иллюзия общего понимания. Когда вам "Сложнее всего далось понимание работы указателя на указатель в динамических структурах, массив указателей на строки, и, само собой, рекурсия" - возня с ассемблером была впустую.
Ну, не совсем впустую. Лет за десять чему-то да научитесь. По Столярову.
зы И убей меня бог, что можно почерпнуть из серии лекций по булевой алгебе? Законы де Моргана проходятся в школе и умещаются в крошечной статье википедии. Что там ещё было-то?
longclaps, по вашему я потратил все это время впустую. Хорошо, как бы вы поступили?
У меня нет знакомых программистов или людей, к которым можно было бы обратиться за советом. В какой то момент, когда я тыкался по интернету в поисках "учителя", я наткнулся на Столярова и доверился его подходу. Он начал с того, что учить Си первым языком нельзя, а чтобы подговиться к его изучению, нужно начать с близкого ему языка, в котором реализованы указатели (Паскаль). Вы можете присоединиться к дискуссии по этому вопросу на странице самого Столярова - он там яростно отбивается от нападок на свой подход уже не один год.
ftl87, для начала найдите способ адекватно оценить свои знания и навыки. Тут действительно лучший вариант - пособеседоваться с доброжелательным и компетентным программистом. Ну вам не подходит.
Запишитесь на codeforces и порешайте задачки. Идёте в архив и решаете - там их тьма, и можно смотреть чужие решения, есть авторский разбор задач. Если думаете, что знаете С - на нём и решайте, паскаль можете начинать забывать.
Начинайте с задач A для второго дивизиона: они не требуют больших алгоритмических знаний, они "на реализацию". С самых старых.
ftl87, применимость)
тот же пайтон благодаря популярности обзавелся поддержкой создания gui в qt, то есть вручную созданная искусственная возможность
Я к тому, что поддержку языка можно добавить во многие места, но от этого все не перейдут на его использование. У всех своя ниша
Раз вы международник, повторить ещё раз статистику и БД и засесть за обработку больших данных (зарубежных баз данных полно). Подойдут R, MatLab, наверное, какие-то другие языки тоже. Наверняка вас примут большие корпорации или банки.
Я думаю, просто надо покопать пакеты обработки данных.
Я-то сам изучаю другую область - прикладную автоматику с новыми алгоритмами (машинное обучение, нейронные сети).
а) Вот пример на Матлабе обработки больших данных: введён специальный тип tall array, если всё не помещается в ОЗУ.
Информация о Big Data на сайте.
В России информацию даёт фирма "Экспонента".
Умозрительно эта задача не решается. Потому что программирование в книгах и коммерческое программирование — не одно и то же. Берите язык с широкой рамкой применения (тот из которого можно много куда пойти и где много вакансий), дотягивайте до уровня прохождения собеседований и идите на хэдхантер. В процессе работы придет понимание что вам подходит. Сейчас у вас есть заблуждение, что возможностей у вас много, вы грезите о мифе идеального айтишного рая. Рекомендую вам как можно скорее пройти через столкновение с реальностью, до того как вам придется увеличивать расходы на поддержания собственного здоровья, заботится о престарелых родителях и что-нибудь еще что не берет во внимание ваши планы.
Да, вы правы. Я, конечно, же понимаю, что все выучить невозможно. Но, когда времени остается относительно мало и деньги на "творческий отпуск" заканчиваются, то начинаешь лихорадочно соображать, на чем сконцентрироваться прямо сейчас, чтобы впоследствии найти работу. В этот момент глаза начинают разбегаться от "Учите Python - это будущее!" или "Python - не заменит JS и Java", или "Java умерла / "Java живет", и т.д. В ситуации, когда времени объективно хватит лишь на что-то одно, хочется сделать правильный выбор, чтобы потом не оказалось, что ты потратил время на изучение технологии на которую нет спроса.
ftl87, правильного выбора не будет хотя бы потому что сфера эволюционирует, появляются новые языки и подходы. Если у вас хорошие отношения с вашими «советчиками» то берите питон, будет с кем обсудить — это ускорит ваше развитие. Я бы рекомендовал отойти от формирования в голове «идеального» плана — это сковывает. И перейти к идее наилучшего использования текущих обстоятельств.