Язык программирования под конкретную задачу + с нуля + хорошая база?

Исходные условия:
25 лет
Хороший английский (легко читаю мануалы/воспринимаю на слух)
Слабый матан (не было мотивации/необходимости, при наличии - смогу улучшить)
Слабое знание статистических методов анализа (с универа - психфак)
7 лет назад КМС по шахматам :)
Знание html
Около нулевые знания языков программирования
Свободное время по вечерам, выходным

Мотивация:
Несколько простых проектов
Для "общего образования/развития)
Для работы (проект-менеджер - куча разных задач)*

Задачи:
1) Написать программу для себя. Программа - тренажер на n-back задачи. Есть много готовых вариантов, но мне нужен свой, с блекджеком и куртизанками.

А именно, программа должна:
Min:
работать на PC
Иметь стандартный функционал n-back тренажеров
Возможность использовать в кач-ве стимулов (картинка, звук, слово, символ) - собственные (этого не находил в существующих вариантах), легко менять их
Max:
+ версия для личного использования на android & iOS
+ web версия
+ опубликовать прогу в андроид маркет/iOS

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

2) Заложить хорошую базу для понимания программирования в целом.
Она несколько противоречит основной задаче.
Это не главная, но значимая задача. В идеале используя мотивацию к задаче 1, хочу втянуться в программирование.
Пока не планирую делать программирование своей профессией, но считаю навык программирования сейчас, равноценным навыку письму в ~17 веке. Весьма полезный навык (становящийся все более необходимым) для личного использования.

3) Разнообразные задачи в сфере менеджмента проектов. Хорошо бы разбираться в азах, чтобы понимать веб-програмистов, програмистов 1С. Возможно программистов металлообрабатывающих станков (не уверен понадобится или нет). Близко к задаче номер 2.

4) Отдаленная цель (для которой полезна база) - научиться простому программированию контролеров.
Этой целью можно пожертвовать.

5) Работа с БД и обработка информации вообще.
Задачи типа парсинга, создания БД (например БД интернет магазина и заливка её непосредственно в БД CMS).
В принципе мне сейчас хватает знаний html для настройки готового парсера. Для работы с БД магазина с помощью спец проги тоже.
Но в целом больше понимать работу SQL и принципы БД вообще - было бы полезно.
Не уверен, что мне когда либо понадобится написать свой парсер. Но написать плагин к парсеру (datacol) - уже была потребность.

Вот такие цели. Основная первая, распыляться не хочу (может не хватить мотивации). Очень желательно написать функциональную прогу за месяц-два, если это реально.

Какой язык посоветуете?
В плане: сложности/времени освоения/хорошей базы для последующего развития?
Сколько времени и сил на какой языке может занять написание проги из первой цели c min функционалом?
К языку киньте пжл хороших мануалов (рус/анг). Понимаю, мануалов море, но какой хороший, а какой нет я на данном этапе не разберусь.
  • Вопрос задан
  • 3291 просмотр
Решения вопроса 1
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
На самом деле, можно выбрать JS или Python. В контексте Python'а поставленная первая задача решается на раз два, вот пару советов, которые могут помочь в дальнейшем (естественно, в контексте получения быстрого результата):
+ забейте на классы и красивый код, пишите как можно быстрее, итоговый вариант будет мерзким и ужасным, однако результат не заставит себя ждать
+ используйте мощь Python'а - генераторы, списки (и слайсы), лямбды и много-много сахара
+ начните с pygame: тут не будет красивых менюшек из коробки, однако, что важнее, будет достаточно удобный с точки зрения Python API, и рисование и звук.

К слову, Python можно относительно легко компилировать в JS, а есть ещё и on-the-fly парсер на JS. Так что сделать web-версию не составит огромного труда.

Окей, что до ресурсов, то codeacademy, coursera очень хорошие варианты. Ну и официальная документация тоже одна из лучших (по языкам).

Единственная сложность, так это выбрать двойку или тройку. Советую тройку - с либами в основном всё хорошо, да и разница не настолько колоссальна (в основном это print стал настоящей функцией, когда был невесть чем). Да и забавно - python 2.x очень легко конвертируется в python 3.x подключением пары либ и парой импортов из __future__.

Теперь о том, как это можно экстраполировать на остальные задачи. Матан совсем не обязательно и легко поднимается по требованию. Было бы не плохо быстро поднять технический английский (дабы понимать термины), хотя здесь проблем совсем не должно быть - сам технический IT-русский на 80% из английского. Программировать контроллеры на Python сложно, но можно. Понимать вэб и 1С-программистов не составит труда, так как в основном они и не программисты.

Относительно JS могу сказать, что он и простой и сложный одновременно. Задумывался он максимально простым, и отчасти он таким получился. Однако уродцем он получился ещё тем. В этом видео очень интересно показано. И там ещё много таких тонких моментов. Хотя на самом деле, он действительно очень интересен и многое умеет. Да и разработка идёт полным ходом, а браузеры спешно имплементируют новшества.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
AMar4enko
@AMar4enko
Хоть и жутко прозвучит, но вам, вероятней всего, нужна Java.
Подойдет для обучения с нуля, далее сможете поднатаскаться в каноническом ООП, опытным путем поймете все must-have паттерны.
Сможете написать десктопное приложение, сервер веб-приложения, android-приложение.
Также для веб приложения вам понадобится некоторое знание JavaScript (никоим образом не соотносится с Java), но насколько я понял, это для вас программа "максимум".

Еще один вариант - JavaScript.
Веб-приложение на node.js, мобильное приложение на HTML5 с Apache Cordova, десктопное приложение на Node Webkit. Но влезать в него не обладая базовыми знаниями по программированию я вам не рекомендую - отсутствие строгой типизации, ООП как такового, куча скрытого поведения, замыкания на каждом шагу дают чересчур слишком много вариантов неправильной реализации иногда вполне очевидных вещей.

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

Итог: избавьтесь от иллюзий, что в этот поезд можно вскочить за полгода работы по вечерам и в выходные. Это будет долгая и кропотливая работа.
Ответ написан
@gleb_kudr
Вам важно не просто изучать язык, а изучать его вместе с конкретной экосистемой.

Поэтому варианты:
1. Джава + андроид
2. Obj-c/Swift+ iOS
3. C# + Win/Win Phone
4. JS+ web

В качестве новичка лично мне было достаточно просто изучать C# на базе обычной виндовой платформы (WPF). Так как есть удобная среда разработки и все понятно. После этого уже вкуривается в любую технологию достаточно быстро.

PS Начинать с книг - вредно. Начинать надо именно с программирования, а книги читать в процессе.
Ответ написан
Комментировать
@vsuhachev
Мне кажется вы слишком глобальные цели ставите. Программирование контроллеров, 1С, Web, GUI для iOS, Android, PC (Windows? Linux? MacOS?) это обширные области со своей спецификой.

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

Python, Ruby, JS/CoffeeScript вполне годные кандидаты.

Java, С# - в принципе тоже

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

Ну и еще из опыта - относитесь к выбору языка программирования как к выбору инструмента под задачу, а не как к единственному выбору на всю жизнь. У программистов считается хорошим тоном неплохо знать 2-3 языка, и поверхностно десяток-другой.
Ответ написан
@QuakeMan
если бы начинал знакомиться с программированием еще раз то возможно начал с этой книги
portablesoft.net/uploads/fotos/5351c2dba6984.jpg
дает представление о том что такое компьютер вообще, и возможность проверить себя как программиста

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

Слабый матан (не было мотивации/необходимости, при наличии - смогу улучшить)

а при наличии чего что можно улучшить???
Ответ написан
@Mist8 Автор вопроса
Если кому интересно, выбрал Python и доволен.

В целом, за это время, я понял что по сути вопрос "какой язык выбрать" - не на столько важен, как я полагал изначально. Уверен, что существенно ничего бы не изменилось, если бы я выбрал другой интерпретируемый язык. Например JS или Ruby.

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

Дело в том, что начальный этап легко и интересно проходить практически на любом популярном языке. Главные сложности начинаются потом, когда пытаешься сделать что-то самостоятельно (а не повторяя с некоторыми вариациями то, что хорошо расписано в курсах). И на данном этапе не так уж важно какой язык ты выбрал - в любом случае будет сложно и появится просто бездна новых вопросов.
Из разряда "как работают БД?", "как настроить модуль/плагин", "как устроен сайт (шаблоны, бд, куки, сессии, сервер...?", тысячи их.
ИЧСХ, эти вопросы мало зависят от выбранного языка программирования. Но если ты в них разберешься - то на любом языке сможешь с ними работать (потратив день/неделю/месяц на изучение синтаксиса и особенностей другого языка).

Кстати, рекомендую годную статью: Почему научиться программировать так чертовски тяжело?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы