andresol: (Default)
[personal profile] andresol
В прошлом году я решил начать по-серьезному учить программирование, чтобы самому делать мобильные приложения. До этой цели я пока так и не дошел, поэтому пока расскажу о двух сайтах с программистскими задачками, которые мне сильно помогли прокачать навыки в этой сфере: Codewars и LeetCode. Таких сайтов сейчас развелось множество, но я решал задачи только на этих двух, поэтому буду делиться личным опытом и успехами.

Исторически первым я пришел на Codewars (мой аккаунт там). И он мне чем-то напомнил изучение иностранных языков на Duolingo: можно точно так же с полного нуля начать с самых простых задач, где требуется определить четное ли число или написать простейший for loop, минимум теории – максимум практики:


Конечно, тем, кто вообще никогда не программировал (вот у нас в школе, которую я закончил в 2002 году, программирования не было; на химфаке тоже; брат все учил по книжкам, но комп у нас был, поэтому что такое for loop, я смутно представлял), придется даже с простыми задачами лезть в гугл, на StackOverflow, но это будет не чтение теории, которую непонятно, куда применить, а поиски ответа на конкретный вопрос. Зато потом, после своего кривого алгоритма, можно будет посмотреть решение других людей и выучить из них еще больше. Я вот прямо скажу, что решив на Codewars 50 простейших задач по питону, я узнал о нем больше, чем от чтения 350-страничного учебника по Python для начинающих.

Задачи на codewars придумывают другие юзеры, и за несколько лет их накопилось несколько тысяч, самого разного уровня сложности (они обозначаются цифрами от 8 до 1: “восьмерки” – самые простые). На каких-то языках больше, на каких-то меньше. Некоторые задачи универсальны и могут быть переведены почти на любой язык. Другие – полностью зависят от фич определенного языка или группы языков. Этим Codewars очень понравился моему брату, который провел на этом сайте даже больше времени, чем я, и вышел на 21-е место в общей таблице пользователей (я где-то в районе 900-го места обитаю):


Мой брат глубоко изучил JavaScript, подтянул ассемблер, а когда в этом году на Codewars добавили языки формальных доказательств – тема, тесно связанная с его научной работой – такие как Coq, он зауважал этот сайт еще больше.

Я же начал прошлой весной с C#, потому что мы планировали переходить на кросс-платформенный движок Unity для создания приложений. Прорешал на нем несколько сотен задач, но год назад брат решил, что Unity нам не подходит и посоветовал мне учить нативную для андроида Java (на популярном нынче Kotlin там мало задач еще). Вот я так с тех пор на Java и решаю (а C# забыл). Недавно стал еще Python и JS решать – самые простые задачи 8-го и 7-го уровней. Для общего развития: на Python брат пишет скрипты по обработке файлов, на JS есть свой мобильный движок ReactNative. На Duolingo я так когда-то учил пять языков параллельно. Без практики почти все забыл, но основы в мозгу остались.

Но проблема с Codewars была и остается в том, что я не могу заставить себя решать сложные задачи (4 и сложнее). С простыми задачами я почти сразу вижу, как их решать и бросаюсь писать код. Через десять, максимум двадцать минут, моя программа проходит тесты, и я получаю моральное вознаграждение. Размышлять часами над сложными задачами, которые я, вполне возможно, и не могу решить в силу ограниченности моих познаний, мне скучно.

И вот недавно я завел аккаунт на LeetCode – еще одном сайте по решению задач, даже более известном, чем Codewars, потому что задачи оттуда часто используются компаниями для интервьюирования программистов. Там тоже есть (приблизительное) деление задач по сложности на простые, средние и трудные, но даже самая простая задача потребует уже определенных познаний. Правда, задачи при этом не привязаны к конкретному языку программирования, а тестируют абстрактные алгоритмы, которые фундаментально одинаковы и на Java, и на Python, и на C++.


Я снова рисковал завязнуть только на самых простых задачках (их там не тысячи, как на Codewars, но сотни – хватит на несколько месяцев), если бы не такая вещь как contests (соревнования). Раз в неделю, субботним вечером (по тихоокеанскому времени; в Китае утром) всем желающим предлагается решить за полтора часа 4 задачи (обычно 1 простая, 2 средние, 1 сложная).

Я никогда не участвовал в олимпиадах по программированию, но мне стало любопытно, решу ли я хотя бы одну задачу, и я записался на свой первый контест. После тренировок на Codewars я справился с простой задачей за 12 минут, у меня оставалось еще больше часа, но вот “средние” задачи для меня оказались не по зубам. Возможно, я допустил стратегическую ошибку, потратив все оставшееся время на задачу, которая объективно была сложнее другой. Но та другая была о “деревьях” – популярной структуре данных – а я решал о них всего одну задачу до этого и испугался деревьев. В итоге я больше так ничего и не решил и финишировал в районе 2000-го места.

Подобная же ситуация повторилась через неделю: я решил простую задачу за 12 минут, а потом все оставшееся время бился со средними задачами. Мне стало обидно: контест на полтора часа, а я отваливаюсь через 10 минут. И я засел за чтение теории (книги по алгоритмам, которые я считал, что мне не нужны в мобильной разработке), за разбор нерешенных мной задач и за решение задач сложнее “моей зоны комфорта”.

Уже на третьем контесте моя подготовка дала плоды: я смог решить три задачи и занять 550-е место. Возможно, они были чуть проще на этот раз, но если бы сильно проще, то другие участники обогнали бы меня как и раньше (при равенстве очков за решение задач места распределяются по времени, затраченном на решение). У меня даже оставалось 30 минут, чтобы подумать над “сложной” задачей. Но тут я уже был бессилен. Я дорешал ее через неделю с подсказкой брата (“делать двойную рекурсию”). Он сам явно мог бы решить там все задачи, все же это не “научные” проблемы, а вопросы для интервью, но он вообще не любит соревноваться на время. А меня порой захватывает азарт.

Неделю назад я поучаствовал в своем 4-м контесте, за полтора часа решил две задачи, а третью дорешал только через 25 минут после окончания (но я был на правильном пути; мой брат сказал, что она простая, и я должен был решать ее на контесте, но вот не решил). Ожидаемо оказался на 940-м месте, но все равно был доволен собой. После первых двух неудачных контестов мне было принципиально научиться решать эти задачи, а время – фактор второстепенный.


И вот я оказался с этими задачами на некоем распутье. Я не собираюсь проходить интервью в компании, я не собираюсь заниматься computer science в научном плане, для мобильных приложений умение решать алгоритмические задачи на время не пригодится. Нужно ли мне продолжать тратить время на эти сайты, или это чистая прокрастинация, которая только отвлекает меня от основной цели – научиться делать приложения?

Я уверен, что потрать я на контесты еще год-два, я буду гарантировано решать там четыре задачи и, если повезет, попадать в первую сотню. Денег или славы мне это не принесет. Я никогда не смогу обогнать лидеров, которые занимаются решением подобных задач всю жизнь (я посмотрел, что один из победителей контестов neal_wu еще в 2008-2010 годах брал золотые медали на международных олимпиадах по информатике, закончил Гарвард и работает в научном отделе Google; у него, наверно, такой отдых перед сном – зайти и решить все 4 задачи за 20 минут, напугав малышей).

Как я написал в Case Study #1, есть у меня талант решать задачи на время. В школе, универе или на интервью его очень ценят. Но в реальной работе над реальными проектами требуются другие навыки. В первую очередь не бросать работу, когда стало скучно, а доводить ее до конца. И я не знаю, какой контест смог бы меня научить такому, если даже финансовая мотивация от написания мобильных приложений не помогает мне довести хотя бы один из моих проектов до публикуемого состояния.

Все эти задачи в итоге сведутся не к изучению программирования, а к “занимательной математике”. К задачам, которые тоже раньше задавали на интервью: “Дано 12 шаров, один из них чуть тяжелее или легче остальных (неизвестно, легче или тяжелее), определите какой за три взвешивания”. Эту задачу я тоже решил, она хорошая, но никак не помогает разобраться с анимациями в андроиде.

Во многом я пишу этот пост, чтобы подвести некий итог решению задач. У меня так бывает: написал пост о фильмах и перестал их смотреть. Каждый учится по-своему, но если вы начинаете учить языки программирования я готов порекомендовать Codewars, если хотите посоревноваться в придумывании алгоритмов на время, LeetCode – неплохая платформа для этого. Мне она дала мотивацию разобраться с рекурсией. Я определенно продолжу решать там задачи время от времени, чтобы не забыть Java. Но надеюсь, что когда-нибудь напишу здесь пост и о своем собственном приложении, а не только о том, как я решаю чужие задачи.
Page 1 of 2 << [1] [2] >>

Date: 2019-08-17 05:24 am (UTC)
From: [identity profile] -heckfy.livejournal.com

Интересно вспомнить свои ощущения. Мне сначала идея программирования очень понравилась. Но в нашей деревне компьютеров ещё не было. И я писал программку на бумаге, а потом сам ее и исполнял ;). Так обучился ассемблеру. Потом переехал в другую деревню, а там уже были агаты, и стал писать программки уже для компов. А потом поступил в МГУ и увидел Нортон и виндовс 3.1 и понял как это все далеко от моих навыков, больше не программировал никогда.

Date: 2019-08-17 06:04 am (UTC)
From: [identity profile] andresol.livejournal.com
У нас дома компьютер появился в 1996 году. MS-DOS, Norton, QuickBasic, Win 3.1.1. Моего брата тогда программирование заинтересовало, и он так им и занимался, а я, несмотря на его пример, только в игры играл и учил химию. И если бы не брат, так в программирование не вернулся бы. У нынешних детей возможностей на порядки больше, чем было у нас.

(no subject)

From: [identity profile] duroshlep.livejournal.com - Date: 2019-08-18 05:58 am (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-18 06:07 am (UTC) - Expand

(no subject)

From: [identity profile] kuzandr52.livejournal.com - Date: 2019-08-27 12:45 pm (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-27 04:33 pm (UTC) - Expand

(no subject)

From: [identity profile] kuzandr52.livejournal.com - Date: 2019-08-27 12:38 pm (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-27 04:28 pm (UTC) - Expand

Date: 2019-08-17 05:37 am (UTC)
From: [identity profile] rollson.livejournal.com
молоток!
а я python мучаю сейчас в мои зрелые годы и при том что не айтишник ни разу..

скиньте пжст по python полезные ссылки для интервью, решения прстых задач и пр!

Date: 2019-08-17 06:10 am (UTC)
From: [identity profile] andresol.livejournal.com
У меня получается эффективнее учить язык, решая задачи. Вот поэтому эти два сайта - Codewars и LeetCode - я и рекомендую. Codewars - если решать задачи 8kyu - хорош, чтобы основы языка учить. LeetCode - готовиться к интервью. А если из теории что-то надо, то ищу в гугле. Но вот этот сайт часто попадается и статьи там весьма конкретные, с примерами:

https://www.geeksforgeeks.org/python-programming-language/

(no subject)

From: [identity profile] rollson.livejournal.com - Date: 2019-08-17 06:53 am (UTC) - Expand

Date: 2019-08-17 06:37 am (UTC)
From: [identity profile] tatotu.livejournal.com

У нас и в школе и в универе было программирование (разумеется самый бейсик), но странно, что у тебя не было от слова совсем😳

Date: 2019-08-17 07:08 am (UTC)
From: [identity profile] andresol.livejournal.com
В нашей школе, когда мы ее заканчивали, было два компьютера: у секретаря и у директора. Хотя у многих учеников уже дома компьютеры были. Не знаю, почему так отстало было. Какие компьютеры были в "компьютерном" классе на химфаке, тоже нельзя без смеха и слез вспоминать. Но зато я могу рассказывать, что видел операционную систему OS/2. И мы там какие-то основы MS Office и MatLab (без программирования) изучали.

(no subject)

From: [identity profile] tatotu.livejournal.com - Date: 2019-08-17 07:35 am (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-17 07:53 am (UTC) - Expand

(no subject)

From: [identity profile] tatotu.livejournal.com - Date: 2019-08-17 11:18 am (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2019-08-19 03:01 pm (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-19 04:53 pm (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2019-08-31 06:48 pm (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-31 06:54 pm (UTC) - Expand

Date: 2019-08-17 07:35 am (UTC)
From: [identity profile] sasha-severny.livejournal.com
Не решай дурацких задач. Если хочешь научиться программировать, задачи сам себе придумывай. Во всех языках логика в принципе одна и даже, только синтаксис разный. Питон прикольный. К нему еще можно QT или GTK GUI приделать. Поставь себе Линукс - Убунту или Дебиан. А на Линуксе быстро программировать научишься. Он такой.

Date: 2019-08-17 07:41 am (UTC)
From: [identity profile] andresol.livejournal.com
Мой брат сказал, что вы написали "абсолютный бред" после первого предложения (с ним он согласен). Я ему больше доверяю в этих вещах и с ним консультируюсь, что мне дальше изучать.

(no subject)

From: [identity profile] sasha-severny.livejournal.com - Date: 2019-08-17 07:43 am (UTC) - Expand

Date: 2019-08-17 07:50 am (UTC)
From: [identity profile] evgeniirudnyi.livejournal.com
Программирование во много связано с использованием библиотек. В этом смысле ключевым является понимание того, как можно использовать библиотеку, созданную на одном языке, при использовании другого языка. При этом если говорить про численные методы, то многие численные библиотеки остаются на Фортране.

Date: 2019-08-17 07:55 am (UTC)
From: [identity profile] andresol.livejournal.com
Программирование под Андроид - это и есть использование библиотек. Но они написаны на той же Java, за редкими исключениями (С++). У нас как раз проблема, что нынешние наши приложения написаны на C++, а было бы лучше, если бы они были на Java. С фортраном ни я, ни мой брат никак не пересекались.

(no subject)

From: [identity profile] evgeniirudnyi.livejournal.com - Date: 2019-08-17 08:04 am (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-17 08:10 am (UTC) - Expand

(no subject)

From: [identity profile] evgeniirudnyi.livejournal.com - Date: 2019-08-17 08:25 am (UTC) - Expand

Date: 2019-08-17 08:17 am (UTC)
From: [identity profile] pusets.livejournal.com
Решение таких задач почти не меет никакого отношения к промышленному програмированию. Если потыкать в реальные задачи, то на десять тысяч одна требует какого-то нетривиального алгоритма, и в подавляющем большинстве случаев этот алгоритм уже кем-то реализован и выложен в открытый доступ.
Првда, такие задачки развивают мышление, что бесценно.

Date: 2019-08-17 05:03 pm (UTC)
From: [identity profile] andresol.livejournal.com
Мне решение этих задач помогло выучить наизусть синтаксис Java, чтобы не ходить каждый раз в StackOverflow, если нужно перевести array в List. Осталось теперь найти этим навыкам практическое применение.

Date: 2019-08-17 08:20 am (UTC)
From: [identity profile] kirillkrm.livejournal.com
Здорово.
Я вот тоже думаю начать изучать программирование, но пока это "думаю", просто мечта.
Но навык мне бы оч. пригодился для разработки игры своей мечты.

Date: 2019-08-17 12:39 pm (UTC)
From: [identity profile] kvisaz.livejournal.com
если игра хорошо пойдет в Стиме - лучше выпусти продолжение на том же движке

голое программирование игр требует очень много рутинной работы, которую конструкторы реализуют под капотом )

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-17 05:09 pm (UTC) - Expand

Date: 2019-08-17 08:26 am (UTC)
From: [identity profile] pashkovdv.livejournal.com
Эти сайты хороши для понимания основ языка и алгоритмики.
А вот где таким же образом изучать технологии?
Git, CSS, Pug, React, Webpack и т.д.?

Date: 2019-08-17 05:12 pm (UTC)
From: [identity profile] andresol.livejournal.com
Я описываю то, с чем сам имел дело. Ни одной из этих технологий я не знаю (git - самые основы). Не удивлюсь, если никто так и не придумал, как их можно учить интересно. Но я не искал, мой брат говорит, что у git есть вполне интерактивный tutorial, где точно так же надо выполнять несложные шаги и продвигаться как в игре.

Date: 2019-08-17 10:08 am (UTC)
From: [identity profile] ahiin.livejournal.com
Без знания алгоритмов "программист" навсегда останется бессмысленной обезьяной. Пусть не в ущерб основной деятельности, но учить их надо.

Date: 2019-08-17 05:15 pm (UTC)
From: [identity profile] andresol.livejournal.com
Чтобы делать простые, но прибыльные мобильные приложения можно быть вполне "обезьяной" с точки зрения программирования. Меня только участие в контестах заставило сесть разбираться с некоторыми алгоритмами. Пока я смотрю на них как на часть "общего развития". Когда появится практический результат от моего программирования, я смогу сказать, насколько мне пригодились алгоритмы.

Date: 2019-08-17 10:29 am (UTC)
From: [identity profile] sakurovskiy.livejournal.com
А почему для изучения мобильной разработки вы не используете соответствующие курсы, а учитесь решать задачи? За год вроде бы вполне можно стать джуном, не?

Date: 2019-08-17 05:18 pm (UTC)
From: [identity profile] andresol.livejournal.com
Это хороший вопрос. "Лень-матушка раньше меня родилась". Проще всего мне свалить вину на то, что по изучению андроида нет таких интересных, test-driven курсов. Вот решение задач на время может заставить меня часами учить что-то новое, а мобильная разработка пока вгоняет в сон. Я надеюсь, что я когда-нибудь найду способ, как выучиться делать приложения, и напишу об этом в блоге.

(no subject)

From: [identity profile] sakurovskiy.livejournal.com - Date: 2019-08-18 11:40 am (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-18 03:48 pm (UTC) - Expand

(no subject)

From: [identity profile] sakurovskiy.livejournal.com - Date: 2019-08-18 03:58 pm (UTC) - Expand
(deleted comment)

Date: 2019-08-17 05:20 pm (UTC)
From: [identity profile] andresol.livejournal.com
Успехов! Этот пост о первом шаге - изучении основ программирования. Конкретно про андроид я могу рассказать о ресурсах, которые я использую для изучения, но, пожалуй, толк от этого будет только, если я смогу довести хотя бы одно приложение до публикации.
(deleted comment)

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-17 06:35 pm (UTC) - Expand

Date: 2019-08-17 02:51 pm (UTC)
From: [identity profile] rempi.livejournal.com
Здорово, очень познавательно написал! Прям аж самому захотелось пойти по указанным сайтам и порешать задачи. Я в основном Python'ом пользуюсь, но программированием это сложно назвать - использую его для численного решения дифуров, оптимизации функций и т.п. Ну и еще Labview конечно, там да, более-менее похоже на программирование. Причем, явно не оптимально я все это делаю, есть куда расти.
P.S. Ты не задумывался сделать учебное приложение для телефонов по программированию?

Date: 2019-08-17 05:25 pm (UTC)
From: [identity profile] andresol.livejournal.com
Порешать задачи рекомендую, но предупрежу, что это занятие может затянуть не хуже компьютерной игры.
Про учебное приложение - очень хороший вопрос. Мы с братом немного порассуждали на эту тему. Такое приложение могло бы стать самым практичным применением тех навыков и знаний, которые я получил, решая задачи на этих сайтах. Хотя бы для того, чтобы отобрать сотню самых популярных и несложных задач. И вообще взглянуть на процесс обучения программированию глазами новичка. Но у нас так много разных проектов запланировано, что не знаю, когда мы до этого доберемся. Тем более, что тема программирования настолько дорога моему брату, что он не станет делать о нем плохое примитивное приложение. (А я бы сделал, с multiple-choice ответами на вопросы "Что выведет программа?", "Какой оператор надо поставить сюда?").

(no subject)

From: (Anonymous) - Date: 2019-08-19 03:06 pm (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-19 04:56 pm (UTC) - Expand

Date: 2019-08-17 04:52 pm (UTC)
From: [identity profile] xenia.livejournal.com
Если цель исключительно практическая, то я бы просто стала писать то, что нужно для работы и набирать знания по мере необходимости.

Date: 2019-08-17 05:29 pm (UTC)
From: [identity profile] andresol.livejournal.com
Согласен. Я и попробовал начать свое обучение с непосредственного создания приложений, но очень быстро столкнулся с сложными, скучными вещами, для занятия которыми у меня нет мотивации. А решать простые задачи оказалось легко и весело, поэтому я отвлекся на них. Надеюсь, что этот пост закроет главу с задачами и я с приобретенными знаниями смогу вернуться хотя бы к чтению чужого Android-кода, а потом и к написанию своего.

Date: 2019-08-17 05:29 pm (UTC)
From: [identity profile] sedov-05.livejournal.com
упоминание Duolingo подкупило. Последнюю строчку написал в июле 1996 и иногда очень хочется возобновить навыки.

Date: 2019-08-17 05:32 pm (UTC)
From: [identity profile] andresol.livejournal.com
Duolingo часто ругают, что там нельзя выучить язык дальше самых основ. Но я считаю, что это лучшее место, чтобы выучить эти самые основы. Так и с Codewars - я живой пример, что основы языков программирования там можно выучить.

(no subject)

From: [identity profile] sedov-05.livejournal.com - Date: 2019-08-18 01:52 pm (UTC) - Expand

Date: 2019-08-17 05:46 pm (UTC)
From: [identity profile] crash-bum.livejournal.com

А что брат говорит будет полезным с практической точки зрения, то есть применения в работе?

Подписку на литкод взяли годовую?

Ещё есть курсы с Udemy, может из пройти?

Date: 2019-08-17 06:39 pm (UTC)
From: [identity profile] andresol.livejournal.com
Брат говорит, что надо взять реальный проект и делать его до конца, неделями и месяцами, как бы ни было трудно и скучно. А решать задачки за 10 минут или даже за час - это развлечение, а не учеба.

Не вижу никакой пользы от подписки на LeetCode. Ну, будет у меня доступ не к 500, а к 1200 задачам. Только еще больше простора для прокрастинации. Уверен, что достаточно решить все задачи в свободном доступе, чтобы научиться решать все задачи подобного уровня сложности.

О курсах на Udemy в плане изучения андроида все опытные люди очень плохо отзываются. Всегда приводят в пример, что официальный курс от Google на Udacity (или Codelabs) и лучше, и бесплатный. Но даже они мне особо не зашли. Возможно, я очень специфичные приложения хочу делать, не такие, какие делают в больших компаниях.

(no subject)

From: [identity profile] crash-bum.livejournal.com - Date: 2019-08-17 07:20 pm (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-17 10:05 pm (UTC) - Expand

Date: 2019-08-17 07:04 pm (UTC)
From: [identity profile] saint-dragon.livejournal.com
О моем отношении к этим сайтам ты знаешь как никто другой, поэтому повторяться тут не буду ;-)
А про алгоритмы в мобильных приложениях я бы поспорила. И даже не то что какие-то хитрые сложные алгоритмы, а простое понимание, когда и что будет эффективнее. Особенно если в твоем аппе есть видео, графика, стриминг, карты, если это какая-то довольно вовлеченная игра - оно должно быть эффективным, потому что может быть компьютер мощностью с современный айфон и запустил человека на Луну, но требования обычных юзеров к интерактивности стремительно взлетели до звезд. И с каждым днем они только растут. А мощность смартфона растет менее драматично, чем эти самые ожидания и запросы. И если апп не уникальный (а уникальных аппов в общем-то не существует в наше время, у каждого есть десятки и сотни аналогов), то апп, который не виснет и не думает по 20 секунд над каждым новым действием, всегда выиграет.

Date: 2019-08-17 10:53 pm (UTC)
From: [identity profile] andresol.livejournal.com
Я тоже надеюсь, что изучение базовых алгоритмов мне при создании приложений поможет. Мой брат говорит, что алгоритмы поиска пути точно пригодятся. Просто я не стал бы их сам учить заранее, пока не столкнулся с конкретной проблемой при создании приложения. А вот эти сайты дали мотивацию какие-то из алгоритмов выучить. Но умение быстро и без ошибок набирать куски стандартного кода на Java я еще более ценю. Все-таки если сложить весь код, который я написал, решая задачи, он будет сопоставим с весьма объемным приложением уже.

(no subject)

From: [identity profile] saint-dragon.livejournal.com - Date: 2019-08-18 05:49 am (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-18 06:05 am (UTC) - Expand

Date: 2019-08-18 05:06 am (UTC)
From: [identity profile] kvisaz.livejournal.com
Я думаю, что решать такие задачки и полезно в плане развития, и интересно

Причем самое интересное как раз на слабых и средних уровнях - потому что тяжелые задачки и отнимают много ресурсов, и встречаются крайне редко. А вот примеры слабой и средней тяжести - высока вероятность встретить и в работе.

Вообще, пока нет необходимости обрабатывать что-то огромное (не мой случай) или быстро-быстро считать в реалтайме (мой случай, в играх надо 60 раз в секунду просчитывать многие вещи) - то нет особых требований к алгоритмам, можно считать как угодно, лишь бы получалось верно )

Но задачки могут подсказывать красивые решения

Date: 2019-08-18 05:58 am (UTC)
From: [identity profile] andresol.livejournal.com
По сравнению с другими убивалками времени задачи - несомненно, полезное занятие. Особенно когда я только начинал их решать, у меня был большой прогресс.

У вас есть уже законченные проекты, поэтому вам проще понять по задаче, имеет ли она отношение к практике или нет. Я боюсь скатиться в решение задач, которые являются абстрактной занимательной математикой и ничему новому и полезному меня уже учить не будут. Поэтому надо от них временно отвлечься на непосредственно Android. А когда тот будет надоедать, можно будет временно возвращаться к задачкам.

Date: 2019-08-18 05:46 am (UTC)
From: [identity profile] redneck-prm.livejournal.com
по мне, дак подход ошибочный
да, несколько часов в неделю вполне можно тратить на каты codewars, это поддерживает низовой уровень знаний языка.

но в той же джаве верный путь выглядит примерно так:
Эккель "Thinking in Java" -> раскуривание framework collection -> раскуривание базовых подходов ООП, включая всякие SOLID, GRASP и базовые паттерны GoF (только самые базовые, и в ознакомительном режиме, попытки залезть глубже на раннем этапе выйдут боком).

а дальше уже в зависимости от направления - для мобил андроидный фреймворк, для кровавого энтерпрайза всякие спринги.

а с такими вещами, как алгоритмы и структуры данных, крайне полезно ознакомиться, но вот зарываться глубоко особого смысла не имеет. в современной разработке такой малоупоминаемый скилл, как умение декомпозировать задачу на более мелкие, гораздо важнее, чем верчение на одном органе сине-зеленых деревьев.

>>> В первую очередь не бросать работу, когда стало скучно, а доводить ее до конца. И я не знаю, какой контест смог бы меня научить такому, если даже финансовая мотивация от написания мобильных приложений не помогает мне довести хотя бы один из моих проектов до публикуемого состояния.

а для этого вам нужен проект-менеджер. в лице брата, который, имея опыт доведения проектов до конца, будет разбивать его на небольшие этапы, а то и на конкретные задачи, и кормить вам. а вы, решая раз за разом эти небольшие задачи, и получая удовлетворение от этого, в итоге закончите целый проект.

собственно, найти мотивацию сделать что-то большое - это одна из главных проблем начинающих. ибо это большое видится цельным, страшным и надолго. а без умения декомпозировать еще и оказывается, что после пары месяцев усиленного пиления конца не видно, и наступает неконтролируемое отчаяние.

Date: 2019-08-18 05:53 am (UTC)
From: [identity profile] andresol.livejournal.com
Это все верно в теории, но неверно на практике. Во-первых, проект-менеджер из моего брата никакой, он считает, что я не готов делать даже самый простейший проект и отправляет меня решать задачки, лишь бы я его не отвлекал. Во-вторых, это звучит как хороший план для того, кто от природы может стать хорошим программистом. Если бы я мог, то давно бы стал. Вместе с братом с 5-го класса бы программировал. Но судя по тому, как мне тяжело дается реальное программирование, такие прямолинейные планы "взял и выучил андроидный фреймворк" в моем случае (и подозреваю, что не только в моем) не работают. Но я пока не сдаюсь окончательно. Просто то, что другим дается за пару месяцев в моем случае уже растянулось на годы.

(no subject)

From: [identity profile] redneck-prm.livejournal.com - Date: 2019-08-18 08:54 am (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2019-08-18 03:45 pm (UTC) - Expand

По приложению

From: (Anonymous) - Date: 2019-08-19 04:12 pm (UTC) - Expand

Re: По приложению

From: [identity profile] andresol.livejournal.com - Date: 2019-08-19 05:25 pm (UTC) - Expand

Re: По приложению

From: (Anonymous) - Date: 2019-08-20 07:04 am (UTC) - Expand

Re: По приложению

From: [identity profile] andresol.livejournal.com - Date: 2019-08-20 07:35 am (UTC) - Expand

Re: По приложению

From: (Anonymous) - Date: 2019-08-22 01:13 pm (UTC) - Expand

Re: По приложению

From: [identity profile] andresol.livejournal.com - Date: 2019-08-22 04:21 pm (UTC) - Expand

Re: По приложению

From: [identity profile] anastasia kkk - Date: 2019-08-20 11:20 pm (UTC) - Expand

Re: По приложению

From: [identity profile] andresol.livejournal.com - Date: 2019-08-20 11:34 pm (UTC) - Expand

Re: По приложению

From: [identity profile] anastasia kkk - Date: 2019-08-21 05:17 am (UTC) - Expand

Re: По приложению

From: [identity profile] andresol.livejournal.com - Date: 2019-08-21 05:36 am (UTC) - Expand

Re: По приложению

From: [identity profile] anastasia kkk - Date: 2019-08-21 06:11 am (UTC) - Expand

Re: По приложению

From: [identity profile] andresol.livejournal.com - Date: 2019-08-21 06:24 am (UTC) - Expand

Re: По приложению

From: [identity profile] anastasia kkk - Date: 2019-08-21 06:29 am (UTC) - Expand

Re: По приложению

From: [identity profile] andresol.livejournal.com - Date: 2019-08-21 06:33 am (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2019-08-19 03:14 pm (UTC) - Expand

Date: 2019-08-19 11:39 am (UTC)
From: [identity profile] anggva-ubervald.livejournal.com
О, про Codewars я как-то не знала, спасибо за указку (это я решила вспомнить Питон, но в процессе все равно сбиваюсь на Java и Java Script).

Я считаю, что решение алгоритмических задач - это хорошая и нужная вещь, потому что эти алгоритмы все равно на каждом шагу попадаются, когда начинаешь писать промышленный код. И способность их быстро распознать помогает быстрее продумать архитектуру решения.

Date: 2019-08-19 04:51 pm (UTC)
From: [identity profile] andresol.livejournal.com
Буду рад, если Codewars тебе понравится и поможет. Там можно фильтровать/сортировать задачи по языку, сложности, оценкам юзеров, количеству решений. Тебе самые простые (8, 7, 6), наверно, слишком простыми покажутся. Мой брат решает обычно 5 и сложнее.

Я не видел смысла учить алгоритмы впрок, как будто я к экзамену готовлюсь, если я с ними в мобильной разработке в ближайшие годы не встречусь. Мне естественнее сталкиваться с проблемой на практике, а потом идти изучать соответствующую теорию, зная, на какой вопрос я ищу ответ. А с контестами получилось, что алгоритмы сами собой проблемой являются.

Date: 2019-08-25 12:17 am (UTC)
From: [identity profile] j31.livejournal.com
Андрей,

рекомендую зарегистрироваться на Fiverr или на Upwork и попробовать взять пару реальных бизнес-кейсов (самых простых, уровня «сайт для пиццерии»). Я именно так и выучил программирование в общаге, только вместо вышеупомянутых сервисов тогда были знакомые и родственники, а кванты СПбГУ помогли лишь опосредованно.

Date: 2019-08-25 12:29 am (UTC)
From: [identity profile] andresol.livejournal.com
Спасибо за совет, Женя, но моя проблема в том, что проекты у меня и так есть, которые, если будут сделаны, принесут больше денег, чем любой Upwork. Ставить себе жесткие дедлайны и работать на кого-то другого я не хочу. Это огромный стресс, от которого я всю жизнь старался уйти. То есть это хороший совет, но для других людей, не для меня.

Date: 2021-11-30 07:42 am (UTC)
From: [identity profile] tony60gr.livejournal.com
Спасибо за наводку! Пока только осваиваюсь с пайтоном.
Передо мной реальных задач, типа написания приложений, пока не стоит, поэтому сложно понять, где мне может это пригодиться. Чисто в целях общего развития

Date: 2021-11-30 07:48 am (UTC)
From: [identity profile] andresol.livejournal.com
Рад, если мой опыт и ссылки вам пригодятся. Мой брат (настоящий программист, не то, что я) очень сайт codewars.com уважает. Там есть задачи самого разного уровня сложности и на Python, и на множестве других языков.

(no subject)

From: [identity profile] tony60gr.livejournal.com - Date: 2021-11-30 07:50 am (UTC) - Expand

Date: 2021-11-30 08:57 am (UTC)
From: [identity profile] Алексей Р (from livejournal.com)
Пожалуйста посоветуйте систему программирования начального или базового уровня для мобильных приложений. Помню, в моем детстве был Делфи — можно было взять у друга установочный диск, купить на книжном рынке самоучитель по Делфи, поставить себе на старенький комп с 98 или 2000 виндой и со знаниями Паскаля написать простейшую, но вполне рабочую под Винду прогу, уровня калькулятора или даже Сапёра.

Date: 2021-11-30 02:55 pm (UTC)
From: [identity profile] alex-197.livejournal.com
Советую https://www.b4x.com/ (https://www.b4x.com/)

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2021-11-30 05:27 pm (UTC) - Expand

Date: 2021-11-30 09:41 am (UTC)
From: [identity profile] az118.livejournal.com
да, Фортран был очень популярен в 60-80 гг и мы его изучали, я на третьем курсе писал две курсовые, себе и своей девушке, ей как раз по решению систем линейных уравнений методом Гаусса-Зейделя, тогда все было еще на перфокартах и ее курсовая, программа + пример, представляла собой колоду карт толщиной 3 см

Date: 2021-11-30 07:08 pm (UTC)
From: [identity profile] andresol.livejournal.com
Фортран ещё не умер. У некоторых учёных он до сих пор популярен. И мой брат говорит, что современный Фортран – нормальный язык.

Date: 2021-11-30 10:38 am (UTC)
From: [identity profile] terverus.livejournal.com
Интересно, вот эти места в соревнованиях (100, 500, 2000) из какого количества людей?
Вам, как программисту, известно же, что количество элементов массива тоже очень важно, а не только индекс элемента)
Непонятно, круто ли занять 2000-е место, вдруг там 100 000 участников, тогда круто)

Date: 2021-11-30 07:53 pm (UTC)
From: [identity profile] andresol.livejournal.com
Я уже не помню, давно было. 5000 участников? 8000 участников? Многие же только регистрировались, но ничего не решали, считать их участниками?
Для меня это было в первую очередь соревнование с самим собой, чтобы решать больше и быстрее, чем в прошлый раз. Для новичка и 2000-е место хорошо, а для опытного программиста-олимпиадника и 2-м будет быть обидно, если в прошлый раз был первым.

(no subject)

From: [identity profile] terverus.livejournal.com - Date: 2021-12-01 08:01 am (UTC) - Expand

(no subject)

From: [identity profile] andresol.livejournal.com - Date: 2021-12-01 08:03 am (UTC) - Expand

Date: 2021-11-30 02:54 pm (UTC)
From: [identity profile] alex-197.livejournal.com
реальная задача с интервью

дано:

1. 10 монеток
2. весы

задача:

как найти фальшивую монету, если у них одинаковый вес?

Date: 2021-11-30 05:23 pm (UTC)
From: [identity profile] andresol.livejournal.com
Такими задачами я тоже одно время увлекался. На взвешивание монеток их десяток разных. Но с вашей задачей на интервью надо начинать с наводящего вопроса: чем отличается фальшивая монета от настоящей, если вес у них одинаков? Если ничем отличается, то как её можно найти? Или я что-то не понял в условии?

Стандартная задача такого типа: фальшивая монета отличается по весу от настоящих (легче или тяжелее), дано N монет, весы, за K взвешиваний найти фальшивую.

(no subject)

From: [identity profile] alex-197.livejournal.com - Date: 2021-11-30 05:26 pm (UTC) - Expand
Page 1 of 2 << [1] [2] >>

January 2026

S M T W T F S
    1 23
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 11th, 2026 08:12 pm
Powered by Dreamwidth Studios