Дмитрий Ч.
2787 сообщений
#5 лет назад
3 года как начал заниматься программированием.

Пишу на c# не всегда тривиальные вещи, но тем не менее используя готовый инструментарий в виде библиотек (дефолтных. чужие наработки не использую. но все же даже дефолтные сильно расслабляют), готовых классов и методов по работе с бд (linq), ну и тд. 

Год как понял, что нифига это не программирование. Т.к. только год назад начал осознавать, что не понимаю основ. И изучение методом тыка дает плоды только первое время, для более сложных вещей не годится совсем... Часто приходится переписывать то, что написал пол года назад, т.к. сам вижу что это было не правильно (или не идеально...). В общем, ощущение что 3 года потеряны в пустую и по сути мало что понимаю в предмете не покидает.

К примеру, даже простые действия по оптимизации задач по работе с большими массивами БД приводят к долгому перебору алгоритмов. Т.к. не всегда понимаю принесет ли тот или иной способ, который себе спроектировал, нужный конечный результат (в плане скорости, экономии ресурсов, ну и вообще корректности построения алгоритма). Как мне кажется, нужен расширенный математический базис в качестве инструментария...

Решил подготовиться с нуля. Полез в мат.анализ. Мало что понял. Решил отступить на шаг - вспомнить высшую математику... - и тут пропасть, тк не все помню из основ алгебры. В общем в итоге уселся за учебники 7-11 класс алгебры, что бы вспомнить/выучить основы и двигаться дальше.

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

Отсюда вопрос к небезразличным.

В правильном ли направлении иду. Нужен ли весь курс математики, включая мат.ан. Либо наоборот обязательны к изучению и другие области математики перед изучением основ программирования.

Ну и след. вопрос. В какие предметы углубляться для изучения самих основ программирования, если на ближайшее будущее планируется работа преимущественно в вебе, частично с десктопом для того же веба. Языки (c#,php). Более серьезное понимание БД, архитектуры и тд тоже очень интересует.

Не надеюсь на развернутые ответы (у самого со временем не очень... - все понимаю), но если бы кто-нибудь дал пруфы на полезную литературу или написал пару слов о программе обучения в целом (что нужно, что лишнее), был бы очень благодарен!
п.с. Если у кого-то возникнет вопрос: зачем спрашивать, если уже наметил план. То отвечу. План наметил пока "на абум". Даже более глубокое изучение математики пока не понимаю к чему приведет. Т.е. понимаю, что не хватает знаний в математике для повышения разнообразия решений задач, но на этом все. Какие знания нужны для каких конечных целей не вижу пока.
Дмитрий Ч.
2787 сообщений
#5 лет назад
А лезть сразу в учебники по программированию в конкретных средах, без основ программирования в целом (хочется объять все прям с нуля, начиная алгоритмов...), без основ математики пока что кажется тем же, что я делал 3 года назад. Тогда я не лез даже в учебники по конкретной среде, а просто начал изучать язык методом тыка и выхватывать недостающие знания когда во что-то упирался. Вот и сейчас кажется, что не погрузившись в основы получится чуть глубже но также поверхностно!?...
Сидоров В.
918 сообщений
#5 лет назад
Матан вам пригодится вряд ли. По крайней мере точно не сразу. Скорее всего он вам вообще не пригодится..
Для основ программирования - оно не надо.
Корректность построения алгоритма это скажем так отдельная наука. Это скорее всего вообще не надо.

Надо учить сам язык, структуры данных и алгоритмы (это фундаментальные понятия),  http прокотол (коли идете в веб), базы данных с позиции разработчика (хотя бы SQL часть, но если будете параллельно понимать как получился nosql и зачем все это так - будет здорово).
Потом паттерны ООП.
Потом бросать в топку свое предубеждение к сторонним библиотекам и пробовать их. Никуда вы со своими велосипедами не уедете.
Затем всякие DDD  и основы построения тестируемого ПО.

Ну и инструменты типа git, консоли, докера в фоне.
Дмитрий Ч.
2787 сообщений
#5 лет назад
inter-job, Спасибо большое за неожиданные советы про не нужность (пока) матана и корректность построения алгоритмов... Буду думать.
И отдельное спасибо за наброску тем для профильного обучения. Практически все что перечислили планирую изучать глубже, а паттерны, бизнес-логика и перечисленные Вами инструменты вообще пока темный лес. Спасибо.
Давид Г.
565 сообщений
#5 лет назад
UniText, В единственном случае когда мне понадобилась вообще хоть какая то математика это когда заказали скрипт, который рисовал параболы относительно заполненного квадратного уравнения и его решения через дискриминант. Для более сложного программирования с помощью нейросетей возможно понадобиться знать или даже не знать, а представлять себе что такое теория графов. 

О вашем движении:
Двигаетесь вы в принципе правильно. Однако для лучшей мотивации в обучении должны присутствовать средства. Фриланс как за основу обучения опираясь на ваше собственное слово что вы для кого то что то сделаете  (конкретно реализуете какую то задачу) и будет для вас лучшим катализатором обучения, хотя средства тоже могут им быть.

Теперь немного о самом программировании: 
Само по себе программирование это процесс общения между вами и машиной - "Компьютер" это достаточно тупая структура из плат и делает лишь только то что вы скажете ей. Если спроецировать этот процесс на реальную жизнь то в ней точно так же не нужна математика - хотя очень многие будут утверждать что это царица наук. Все правильно и никто не против - однако в программирования с помощью Языков программирования за вас практически всегда и все считает машина.
Имеется больше 2000 ЯП - в практике это разные языки для общения с разными машинами 
В каждом свои синтаксис, свои диалекты ( паттерны ) - собственно на них решаются разные задачи. 
Языки делятся на два типа - Низкоуровневые и Высокоуровневые. Уровень определяет их место между программной частью (системой) и железом. Ярким примером такого разделения можно назвать два языка это Assembler один из самых низких уровней и UML - один из самых высоких уровней.
UniText вы метите приблизительно в середину и в теории здесь у вас на выбор около 500 языков на которых сейчас можно абсолютно спокойно построить веб приложение ( сейчас это сайтом уже никто не называет ) - на некоторых даже интегрироваться в инфраструктуру и управлять ею как это делают Perfect-сервера.

Что делать дальше?
Процесс программирования скорее больше тренируют вашу память, координацию и ориентирование в информации - чаще смотря на код вместо решения в вспоминаете где вы видели подобное для того что бы посмотреть реализацию там. Код который вы пишете вы не запоминаете - вы помните суть того что написали. Отсюда и отложение в опыте. Возьмите любой набор из самых популярных ЯП - Node.js, Ruby, Golang или любой другой. Возьмите какую то задачу и попробуйте решить ее на разных языках - какой больше понравится тот и затирайте до дыр. Когда возможности языка для вас закончатся вы переключитесь на другой - уже с приобретенным опытом вы сможете решать задачи и на нем и на последующих. Алгоритмы решения типовых задач для вас будут набираться по мере набора опыта. 
Откройте для себя Github, StackOverflow, Quora и прочие ресурсы на которых вы сможете найти решения задач. Архитектуры проектов инфраструктура построения индексирование это все приложиться если вы будете копать конкретно в программирование.

Как бы добавить больше нечего. 
Андрей В.
1205 сообщений
#5 лет назад
AiosS,
Спасибо! И я для себя почерпнул много нового!
Очень жаль что лайки так и не завезли
Александр Ф.
3318 сообщений
#5 лет назад
Мне кажется нужно себе простить, что в ближайший год Вы сможете программать лучше, чем последние 3, а затем посмотрите назад и на этот ближайший год скажите, что он был не Гуд. Важно все таки реализовывать, пусть и коряво и получать за это лаве. Так от изучения теоретических основ начнёте получать практическую реализацию. 
Дмитрий Ч.
2787 сообщений
#5 лет назад
AiosS, ого... спасибо!
Да. Языки написал скорее для ориентира. Просто те, с которыми пока имел дело. В низкоуровневые в ближайшей перспективе лезть и не планировал - просто пока не вижу для себя задач там. Мотивация и так есть - свои проекты, но получить новые (не типичиные) задачи да можно попробовать и здесь, на вебленсере - спасибо за совет.

А вот про то, что с языка на язык стоит и можно просто так перешагивать в поисках своего даже не думал. Буду пробовать. 
С гитхабом и им подобными отличный совет!... Но пока очень слабое английского. С таким пониманием там сильно не разгуляешься вроде. Но уже понял, что англ. стоит уделить отдельное время.

В общем, сохранил ваш пост целиком. буду перечитывать на разных этапах обучения, переосмыслять. Спасибо! 
Цитата (regado):
Важно все таки реализовывать, пусть и коряво и получать за это лаве. Так от изучения теоретических основ начнёте получать практическую реализацию. 
с этим проблем как раз таки нет  ... переживаю уже за качество и за развитие. А развитие финансовое теперь очень зависит от качества того что делаю. Ну и трудазатраты напрягают - на простые задачи иногда уходит кратно больше времени чем на сложные, т.к. в сложных нужно просто правильно спроектировать и фигачить, ну и после большого объема уже фиг разберешься где-ты что-то сделал не красиво... а в мелких нужно просто знать как это сделать. И на маленьком объеме видно когда сделал что-то не так - начинаешь миллион раз переделывать не понимая что править, просто перебором зачастую.

Цитата (regado):
Мне кажется нужно себе простить, что в ближайший год Вы сможете программать лучше, чем последние 3
уже попрощал 3 года... Надо подход менять. 
Давид Г.
565 сообщений
#5 лет назад
UniText, С английским тоже проблем не будет - как только вы ударитесь в нейминг на разных языках и начнете читать про паттерны одно слово для вас в одном паттерне будет означать кучу разных слов в разных языках.

Сейчас для простоты все ударяются во фреймворки. 
Фреймворк - это что то на подобии языка в языке. Сродни ограничения рамками нужных возможностей языка для определенных целей. Что бы понятнее было проецируем на обычное общение это что то типа "Здесь мы общаемся на русском языке, но без мата". То есть по факту лучше - круче - и вроде стандарты даже описаны ну там как предложения составлять всю лингвистику описали - вы можете использовать целые тексты - но вот только захотите сказать "Бл*" или что то в этом роде придется повозится.

Ну и как бы сейчас документации - всяких роликов на ютубе - всевозможных курсов есть еще и интерактивные части обучения такие как codecombat или (и на русском и на английском) - раньше было сложнее что ли.
Владимир Р.
3315 сообщений
#5 лет назад
Цитата (UniText):
Нужен ли весь курс математики, включая мат.ан.
Нет. По крайней мере точно не матан. Может пригодится дискретная математика (комбинаторика) и булева алгебра. Но это все нужно копать только, когда будет стоять реальная задача. 
Из общего я бы посоветовал:

  1. English
  2. "Теоретический минимум по Computer Science. Все что нужно программисту и разработчику"
  3. "Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих"
  4. "Чистая архитектура. Искусство разработки программного обеспечения"

Очень сильный пинок на старте может дать обучение с ментором. Есть несколько авторитетных ресурсов, не буду делать никому рекламу.  
Также порекомендую  и
Дмитрий Ч.
2787 сообщений
#5 лет назад
Цитата (AiosS):
Фреймворк - это что то на подобии языка в языке. Сродни ограничения рамками нужных возможностей языка для определенных целей. Что бы понятнее было проецируем на обычное общение это что то типа "Здесь мы общаемся на русском языке, но без мата". То есть по факту лучше - круче - и вроде стандарты даже описаны ну там как предложения составлять всю лингвистику описали - вы можете использовать целые тексты - но вот только захотите сказать "Бл*" или что то в этом роде придется повозится.
К сожалению, это основная проблема почему сторонние библиотеки даже сейчас не использую.
Как бы в своих проектах задачи уникальные (может плохо искал... т.к. к гитхабу на киллометр не приближался из-за плохого знания англ.). И эти задачи перестраиваем очень часто и очень много. Так что тут свое даже сложно менять когда уже закончил, а появилась новая идея кардинально ломающая всю схему... А в чужом это делать для меня пока совсем беда. 
С фреймворками предполагаю все кратно хуже (из-за объема не нужных в конкретной ситуации элементов, в которые все равно нужно залазить и разбираться что бы найти и изменить нужное)... а из "бл*" бывает состоят целые полотна... 

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

К менторам сейчас будет миллион вопросов. Боюсь, что они мне на них обязательно ответят и я уйду в бесконечное обучение))... Хочется сначала подтянуть основы, а потом уже обязательно к менторам - без них и не планировал.
Сидоров В.
918 сообщений
#5 лет назад
Цитата:
А вот про то, что с языка на язык стоит и можно просто так перешагивать в поисках своего даже не думал.
Я бы не советовал сначала лезть в слаботипизированные ЯП с "нестандартными" подходами к некоторым аспектам ООП.
Оно сломает вам мозг на очередные 2-3 года.
Шарпа вам хватит за глаза. Ну или жавы. Зависит от предназначения. Для своих проектов это очевидный оверкилл. Питон для новичков - самое то. И помните язык - ничто, инфраструктура все. Куча идеальных с точки зрения синтаксиса и возможностей ЯП погорели по причине убогого инструментария.

и да - UML и нода никогда не были языками программирования.
Давид Г.
565 сообщений
#5 лет назад
Цитата (inter-job):
и да - UML и нода никогда не были языками программирования.
C нодой соглашусь - платформа (а не язык) позволяющая использовать Javascript в качестве системного. Опечатался
То  с UML у вас прокол - это инструмент позволяющий с помощью диаграм генерировать код приложения да не особо функционального - но это программирование. А значит это своеобразный ЯП. 
Сидоров В.
918 сообщений
#5 лет назад
Цитата:
Мне кажется вы просто объелись конфет
Господь с вами. Прочитайте хоть определение в википедии.
Дмитрий Ш.
357 сообщений
#5 лет назад
Пока не изучишь СИ, о каком то профессиональном программировании говорить не приходится. Там выучишь как работает процессор, регистры, что такое память, адресация, прерывания, что такое вообще работа на аппаратном уровне, алгоритмы и много, много интересного именно основ.
Дмитрий Ш.
357 сообщений
#5 лет назад
И 3 года в программировании это почти ничего.
Виктор Я.
90 сообщений
#5 лет назад
Начните с физичских процессов земного ядра, кроме того  курс фундаментальной физики и математики, конечно же. разберетесь как зародилась жизнь на планете, после этого пойдет легче.
Григорий Пелипенко
430 сообщений
#5 лет назад
UniText, В низкоуровневые в ближайшей перспективе лезть и не планировал - просто пока не вижу для себя задач там.

И не нужно. Там деньги есть только в том случае, если работаешь в оффлайне.

Мне импонирует Ваша позиция поиска. Действительно, не всё просто. А вообще, нужно идти от проекта. Предлагают что-то "исполнить", не чувствуете подлга, ныряйте. Правильный заказчик закроет глаза на то, что Вы чего-то не умеете прямо сейчас.
Елена Б.
6863 сообщения
#5 лет назад
Вери вронг вей...
Да в общем-то, все уже написали. Почти все. 
Математика вообще не нужна. Совсем. Ни капельки.  С меня муж смеется, что считать не умею без компьютера. А уж как с коллегами счет за пиво делим, это любой оборжаться может. 
Низкоуровневое программирование - разве что как занимательное чтиво, с чего все начиналось. 
Теория эволюции и нейропсихология очень даже полезны. Дают понимание, почему так страшно смотреть через шесть месяцев на свой код, и почему это нормально. 
ООП обязательно. Стиль кода обязательно. Макконел "Совершенный код" - лучшее, что написано об этих двух вопросах. 
Выбросьте из головы мусор о "правильных" и "неправильных" языках. Те, что популярны, как минимум, достаточно хороши, чтоб популярность завоевать. Они же и прибыльны. 
Учить надо не язык, а стек технологий.
Это несколько языков, фреймворков и стандартов для решения определенного круга задач. Специализированные языки изжили себя давно, а вот специализированные стеки бурно развиваются. 
Пользуйтесь хорощей ide и удобными инструментами для сопутствующих задач. Не слушайте тех, кто говорит, что гитом правильно пользоваться только из консоли и прочую чушь. 
Самый ценный ресурс программиста - мыслительная деятельность. Энергию мозга нужно грамотно экономить. 
Дмитрий Ч.
2787 сообщений
#5 лет назад
Цитата (DimaShpak):
Пока не изучишь СИ, о каком то профессиональном программировании говорить не приходится.
И Си и ассемблер обязательно в планах. но не на ближайший год)... Текущих задач под них нет и вряд ли скоро появятся. Изучать буду для общего развития, но когда появится свободное время. И мб тогда только почувствую себя программистом)) 

Сейчас имею два веб проекта (CRM-ки - btb услуги. Все облачное на наших серверах, веб). Под эти проекты написано около 2х дестопных приложений и 300 фоновых (в основном импортеры, парсеры, пауки, сборщики аналитики, чистилки больших таблиц и тд...) С железом пока никаких работ они не требуется из под них... Зачем в данном случае может понадобиться C? - была б причина, с удовольствием бы поковырялся.

viktor_yan, воот Вы меня понимаете! Сначала Большой взрыв, потом время, потом материя, потом матан и потом программирование. Все как я хотел! Спасибо

Цитата (oldbadger):
Мне импонирует Ваша позиция поиска. Действительно, не всё просто. А вообще, нужно идти от проекта. Предлагают что-то "исполнить", не чувствуете подлга, ныряйте. Правильный заказчик закроет глаза на то, что Вы чего-то не умеете прямо сейчас.
Спасибо, но я, наверное, не до конца рассказал. Как раз, "От проекта" все эти три года я и двигался. Делал задачи, которые нужны были мне под свои собственные проекты. Задач был воз и маленькая тележка за это время. Работа занимала 18 часов в сутки. Задачи не были однотипными, т.е. успел многие аспекты пощупать. Сейчас начало появляться свободное время. Оглянулся и понял, что умею вроде многое... но не уверен, что умею правильно, т.к. основ до сих пор не знаю...

Это как научиться водить но не знать ПДД - вот примерно так сейчас себя чувствую.))
Цитата (floppox):
ООП обязательно. Стиль кода обязательно. Макконел "Совершенный код" - лучшее, что написано об этих двух вопросах. 
Спасибо. Записал!

Цитата:
Теория эволюции и нейропсихология очень даже полезны. Дают понимание, почему так страшно смотреть через шесть месяцев на свой код, и почему это нормально. 
и за это  

И в целом, спасибо. Все грамотно. Принял в работу.