LINUX.ORG.RU
ФорумTalks

Как научиться программировать?

 , , , ,


3

5

Как научиться прогать? Как учились вы? Как учились раньше олды я уже нашел тему и прочитал.

Господа, у меня такая проблема, что в общем и целом подступиться пытаюсь к теме уже 2 года. Начинал я еще в 2009, купили книгу по питону и я ее не осилил. Вот так. Там начались логарифмы(или я их где-то усмотрел, потому что сейчас перечитываю и не могу найти их), а с матаном тогда было совсем туго. Ну я и подумал, что матан == программировать = не мое. На следующий год склепал для игры на ucoz сайтец, немного размял html, потом был следующий сайт уже на гугл конструкторе. В итоге тоже похоронил это дело, т.к. пошел учиться на истфак и информации было очень много. Где-то в 2018 году решил вернуться к вопросу.

Начал с objective-C, начал с основ, буквально неделю подолбился и понял, что дела иметь с аппл и прочим я не хочу, тогда еще свифт начал набирать популярность так что я и вовсе забил. Далее был php. В пхп вникнуть не смог - не знаю кто там говорит за легкость, но мне мешанина из html кода и пхп буквально взрывает мозг. На пхп максимум правил какие-то штуки в шаблонах всяких CMS и забил на это дело. Потом начал javascript, потом забил. Начал изучать Java - было интересно поднять свой сервер для ММОРПГ. Но в итоге как-то забил. Да, здесь вы можете сказать что моя проблема в том, что я забиваю, но читайте пожалуйста дальше эту простыню :)

Решил закрыть гештальт и вернуться к питону. Написал на питоне бота, который нужен был другу….ну как написал.. В этом то и вся проблема! Что написать я ничего не написал. Я просто перерывал кучи исходников, статей, из говна и палок собирая бота, плюясь и кряхтя, проклиная все на свете. Потом начал учить синтаксис питона, забил.

Когда забивал - в основном работал, естественно, не по специальности. Пердолил бубунту, потому что в моем манямирке прогать не на линухе не тру. Да и вообще неудобно. Опять же, вернулся к основам. Читал Лутца, читал A Byte of Python 2 раза, читал Грокаем Алгоритмы Бхаргава. Потом высрал еще пару ботов на питоне, почти схожим с предыдущим примером образом. Я не умею взять и сесть начать писать программу, я буквально не знаю с чего мне начать.

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

Недавно начал С++. Смотрю лекции по алгоритмам и структурам данных, читаю Страуструпа. Страуструп конечно молодец, под видом простого упражнения заставляет писать алгоритм бинарного поиска - я такого никогда не осилю. Вернее я могу заучить этот алгоритм и написать по памяти, могу всматриваться в код и понимать, что этот алгоритм бинарного поиска делает построчно и пошагово. Вникал так же в С, возвращался снова к Java. Попутно реализуя всякие проекты на питон.

Но проблема в том, что я абсолютный 0. Нет, не так. Дырка от 0. Вот установил wm awesome ради Lua. И то снес, хоть и жалко, не успел я напердолиться. Непонятно как именно строить программу на моем этапе.

Я могу взять чей то код, могу даже починить его и заставить работать - НО НА ЭТОМ ВСЕ.

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

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

У меня цель простая, хочу писать ПО для микроконтроллеров и вебом как-то на хлеб зарабатывать. А еще надо семью каким-то образом кормить. Просто жесть, неужели я должен столько пролитой крови на этом программировании спустить в унитаз и заняться чем-то другим? Ведь мозг можно обучить буквально всему. Но у меня не идет. Сейчас сижу просто над очередным проектом буквально сутки и не сдвинулся ни на шаг. Когда уже оно пойдет, кто знает? Что делать, как практиковаться?

Ответ на: комментарий от NorthernBlow

Вот хочу свой список дел для CLI реализовать на С++

Ну сядь и напиши

Я не знаю с чего начать это делать

Сесть и начать писать код. Подумав сначала как будешь хранить данные. А потом сесть и писать код

неужто мне снова нужно копипастить чей то код, ковырять чьи-то исходники?

Нет. Но вот подсмотреть какие то конструкции и подходы - очень даже.

no-dashi-v2 ★★★
()
Ответ на: комментарий от no-dashi-v2

Сесть и начать писать код. Подумав сначала как будешь хранить данные. А потом сесть и писать код

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

soomrack ★★★★★
()

подступиться пытаюсь к теме уже 2 года.

Начинал я еще в 2009

Где-то в 2018 году решил вернуться

Checksum mismatch.

fluorite ★★★★★
()
Ответ на: комментарий от NorthernBlow

что за отладчик?

От среды зависит, иногда - и аппаратное устройство с jtag или swd

а без него никак что-ли?

Printf в помощь , но это негибко

то есть с отладчиком я быстрее научусь

Да

IDE установить рекомендуете?

Да. Но в первую очередь- начать зарабатывать этим вот.

aiqu6Ait ★★★★
()

Пока не было личного ПК, ни в школе ни в институте ничего не понимал в программировании. Когда появился личный комп достаточно быстро освоил си.

voltmod ★★★
()

У меня цель простая, хочу писать ПО для микроконтроллеров и вебом как-то на хлеб зарабатывать.

Вы перечислили две области которые просто огромные, поэтому вам надо выбрать чётко что-то одно, либо веб либо ембед, затем если вы выбрали например веб, надо выбрать фронт или бэк, затем выбрать один фреймворк и так далее. И уже тогда учить эту конкретную узкую специализацию, и даже выход на заработок на хлеб этой узкой специализации займёт года два, а сейчас вы хотите объять необъятное, в итоге у вас есть поверхностные знания «по всему», что годится для того чтобы создать свой курс на каком-нибудь юдеми где просто озвучивать доки ЯП и простые примеры и продавать этот курс успешно за косарь, но не годится для профессии разработчика.

Второе, у вас нет понимания пайплайна разработки ПО, погуглите SDLC, этому можно учиться самостоятельно, но я бы посоветовал надсмотрщика, его еще называют ментором, если вы серьезно видите себя в этой профессии и писать код вам в приниципе не доставляет мучений, то есть терпимо, я бы посоветовал уже начинать искать вакансии стажеров которые предполагают некоторое обучение от компании, раньше например ЕПАМ проводил такие годичные курсы после которых успешно сдавшие экзамен получили оффер, сейчас не знаю, ищите в нужной вам сфере такие компании. Этим убьете двух зайцев, получите образование и реальную возможность устройства на работу, в отличие от видеотуториалов от школьников которые вы смотрите в инете и лохотронов всяких «школ программирования».

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)
Ответ на: комментарий от yu-boot

выбираешь цель, дробишь задачу до уровня «так тут уже почти и кодить нечего, всё очевидно», реализуешь на известном тебе ЯП.

Не все задачи можно и нужно дробить в пыль. Эта дичь приводит к потерям времени на скедуляние задач, когда люди не в теме пытаются слишком декомпозировать — в итоге можно устать, объясняя что у компонента нельзя отделить разметку от логики так чтоб девелоперы не толкались локтями, и один компонент должен разрабатывать один человек целиком. Можно делить компоненты на компоненты, но компоненты на разметку и логику делить бессмысленно.

Я не понимаю, например, как и куда применять ООП, чтобы это было полезно и осмысленно. Ну кроме очевидных элементов GUI и каких-нибудь юнитов в играх.

ООП нужно не всегда :) компонентная модель эквивалентна, например, и обходится без развесистого наследования.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 2)
Ответ на: комментарий от soomrack

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

rumgot ★★★★★
()

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

Так начни с основ: типы, операции над ними, базовый ввод/вывод, блоки, ветвления, циклы, композиция этого, потом сделаешь «открытие» что блок — вырожденный цикл, ветвление — выбор между блоками, цикл — повторение блока, и что блоки можно выносить в процедуры и прочие функции, когда встречаешь необходимость скопипастить блок :)

Там уже осилишь эквипенисуальность рекурсии и цикла. Перестанешь робеть перед классическими алгоритмами. Дальше поймешь что в событийном/реактивном и прочих модных подходах внутри всегда есть главный цикл (просто у всех изобретателей своя «птичья» терминология) и начнешь разбираться как оно замыкается через обработчики в любом гуе, клиент-сервере и не только (называется по-старому «циклограмма» или в том же вебе «жизненный... что? Правильно, цикл» (не путать с жизненным циклом разработки). Просто у сетевых приложений «главный цикл» размазан по сети (на обоих концах «подключения» поэтому циклы для посылки-обработки).

Там и начнешь сам свои композиции придумывать. Прочитаешь про декомпозицию и проектирование сверху и снизу, и про спираль (итерации) проектирования. Тут уже про цикл разработки можно и нужно прочитать.

Сначала ходить, потом бегать. А то можно фрустрацию получить... или фобию.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 4)
  1. Считается, что наиболее простой вход в сферу программирования через язык PHP. В общем так и есть, возможно. Но важно, не застрять в этом языке и не слишком уйти в дебри всяких фреймворков, ООП и прочего. По крайней мере на первых этапах освоения. Дело в том, что на этом языке достаточно быстро можно получить полезную программу. Например, написать скрипт для вывода новостей и т.д. Ведь это очень важно для мотивации - на первых этапах получить работающий код и получить его достаточно быстро.

Самый простой вариант: поставить себе задачу сделать персональную странцу на PHP.

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

  2. Из PHP можно относительно легко прыгнуть в C, так как PHP на нём написан.

  3. А благодаря C можно приобщиться и к Ассемблеру, но это сильно на любителя. Хотя понимание Асма, работы железа, наверное, самое фундаментальное, что может быть.

Возвращаюсь к PHP: имеет смысл поиграться с разными алгортмами на этом языке: поиск, сортировки, перебор, обработки массивов и т.д. Просто ставить себе задачу, а потом решать её. Алгоритмы стоит брать на первом этапе самые простые. Бувально например:1) создать массив из десяти элементов, 2) напечатать этот массив, 3) напетать массив в обратном порядке и т.д. Если станет получаться и будет время, то стоит пробовать перекладывать алгоритмы на C.

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

AnonymUser
()

забил

забил

забил

забил

Молодец. :) Наш человек. :)

Но как научиться

Забей. :) Don’t worry, be happy. :)

pr849
()
Ответ на: комментарий от AnonymUser

Из PHP можно относительно легко прыгнуть в C, так как PHP на нём написан.

Это заблуждение, т.к. связь только по ассоциации.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от soomrack

Так и открывают спираль разработки :) другое дело, что ходить по тем же граблям самому не обязательно.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от vasya_pupkin

Комитет :) и кто книжки пишет :) но потом можно их книжки прочитать и начать разбираться «ах вот это они в стандарте так мутно написали»

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

PHP и C имеют тождественные языковые конструкции. Освоить после PHP stdio.h и ещё пару библиотек вполне возможно.

Что в C другие условные конструкции? Такие же циклы. Такой же switch case. Есть include. :) Да, проблемы после работы с переменными в php при переходе в C будут обязательно, но человек просит относительно простой способ. Если можете предложить иной путь, пожалуйста.

AnonymUser
()
Ответ на: комментарий от slackwarrior

Так начни с основ: типы, операции над ними, базовый ввод/вывод, блоки, ветвления, циклы, композиция этого, потом сделаешь «открытие» что блок — вырожденный цикл, ветвление — выбор между блоками, цикл — повторение блока, и что блоки можно выносить в процедуры и прочие функции, когда встречаешь необходимость скопипастить блок :)

Не думаю, что это подходит ТС. Описанная проблема (если это не троллинг) в том, что у него не развито абстрактное мышление, нет никакой математической базы. В частности, очень показателен пример с проблемами реализации бинарного поиска.

Поэтому заход нужно делать с позиции развития абстрактного алгоритмического мышления. На мой взгляд, на первом этапе нужно ограничиваться написанием процедурного кода, в ООП и пр. не лезть (пользоваться можно, но самому от объектов программу не выстраивать). Нужно написать программу в стиле процедурного программирования этак на 20.000 строк. Это должно развить навыки алгоритмизации (в мозгу).

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

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

soomrack ★★★★★
()
Последнее исправление: soomrack (всего исправлений: 1)
Ответ на: комментарий от vasya_pupkin

Вот интересно, а в современном c++ кто вообще шарит?

Страуструп.

Но С++ это набор инструментов, не надо пользоваться всеми. Во многих случаях можно обходиться очень небольшим функционалом языка. Всякое метапрограммирование не часто нужно, вот совсем не часто.

soomrack ★★★★★
()

Я не умею взять и сесть начать писать программу, я буквально не знаю с чего мне начать.

Не уверен, что правильно понял твой вопрос, но давай попробую объяснить.

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

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

Дальше ищешь в словесных описаниях сценариев повторяющиеся имена существительные - это будут объекты/классы. Глаголы при существительных - станут методами объектов. Программа будет сводиться к тому, чтобы породить эти объекты, связать их (грубо говоря, дать им указатели друг на друга), дергать за методы.

Попутно эту объектную модель можно натянуть на выбранный стек технологий - orm/субд, rest api, и тд и тп.

Ты об этом спрашивал?

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

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)

Если с первого раза не вышло, то прыжки с парашютом не для вас.

beastie ★★★★★
()
Ответ на: комментарий от NorthernBlow

т.е. рекомендуешь начать с Кнута все же? Хорошо, спасибо. Взял на заметку

Самоистязание Кнутом - это почётно, но есть более краткие и лёгкие для восприятия варианты. Например, https://www.mccme.ru/free-books/shen/shen-progbook.pdf

Manhunt ★★★★★
()

Я могу взять чей то код, могу даже починить его и заставить работать - НО НА ЭТОМ ВСЕ.

В общем так:

  1. пишешь неработающий код совершенно от балды
  2. чинишь его и заставляешь работать
  3. profit!!!
rupert ★★★★★
()
Последнее исправление: rupert (всего исправлений: 1)
Ответ на: комментарий от NorthernBlow

т.е. рекомендуешь начать с Кнута все же? Хорошо, спасибо. Взял на заметку

Нафиг Кнута для обучения программированию!!! Его книги абсолютно не для этого, это для тех кто уже умеет, чтобы глубоко влезть в алгоритмы и математику, связанные с программированием.

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

Рекомендую учиться с языком Паскаль, он для этого и придуман. Лучше с FreePascal. Рекомендую для этого учебники Столярова, если что присутствует на ЛОР под ником Croco. http://www.stolyarov.info/books/programming_intro/vol1 - его серия обучающих книг так и называется «Программирование: введение в профессию».

Если почему-то не нравится Столяров рекомендую классическую уже книгу Н.Вирта «Алгоритмы и структуры данных», впрочем в любом случае советую ее глянуть.

praseodim ★★★★★
()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от alex1101

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

Ты рофлишь что ли? Придумать свой даже псевдоязык - это не такое простое дело. А кнутовский слишком специфичен и емнип в новейших изданиях он даже отказался от него.

praseodim ★★★★★
()

from решения import нёх

print(нёх(*input()))

сила в импорте. Питон(с)

В любом редакторе поддерживающем навигацию по коду:

import this

затем прыг в сырцы this для реального дзена

import antigravity

ps. что бы весь xkcd к следующей неделе выучил не то родителей твою работу вызовем

решай что у тя горит пиШа проги(скрипты) вон Свейгартова автоматизация скучных задач на - самое то

положительная обратная при «закрытии» любой даже самой большей нуля полезности задачи кормит следующие

qulinxao3 ★★
()
Ответ на: комментарий от no-such-file

Ведь мозг можно обучить буквально всему

Тут в соседней теме недавно обсуждали.

Можно ссылку на тему?

greenman ★★★★★
()
Ответ на: комментарий от Psilocybe

да, 27 годиков, с 23 по сути мало мальски начал осознанно вникать. надо чем-то растолочь закостенелую гуманитарную жижку.

NorthernBlow
() автор топика
Ответ на: комментарий от praseodim

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

NorthernBlow
() автор топика
Ответ на: комментарий от praseodim

Ты рофлишь что ли? Придумать свой даже псевдоязык - это не такое >простое дело. А кнутовский слишком специфичен и емнип в новейших >изданиях он даже отказался от него.

Мне кажется питон вполне себе сойдет за псевдокод на самом деле

NorthernBlow
() автор топика

под видом простого упражнения заставляет писать алгоритм бинарного поиска - я такого никогда не осилю

Негодяй какой. Забейте - это не ваше. Сосредоточтесь лучше на областях где вам хоть что-то светит.

bugfixer ★★★★★
()
Ответ на: комментарий от qulinxao3

что бы весь xkcd к следующей неделе выучил

ну около-тематикой в виде пердолинга линухов я и так довольно много занимаюсь.

NorthernBlow
() автор топика
Ответ на: комментарий от soomrack

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

NorthernBlow
() автор топика
Ответ на: комментарий от Manhunt

Благодарю за материал. Таких вещей мне надо, забрал себе.

NorthernBlow
() автор топика
Ответ на: комментарий от NorthernBlow

угу, сейчас. только штаны подтяну.

С вашей страстью к «пердолингу» (ваш лексикончик - не мой) - может и не стОит.

bugfixer ★★★★★
()
Последнее исправление: bugfixer (всего исправлений: 1)
Ответ на: комментарий от AnonymUser

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

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

NorthernBlow
() автор топика
Ответ на: комментарий от mydibyje

затем выбрать один фреймворк и так далее.

для веба уже выбрал - Джанго. Его я думаю мне с головой хватит под большинство задач.

Второе, у вас нет понимания пайплайна разработки ПО, погуглите SDLC

принято, спасибо.

NorthernBlow
() автор топика
Ответ на: комментарий от NorthernBlow

можешь идти раков ловить.

Спасибо что напомнили - давненько я лобстеров не отведывал. Удачи в ваших «наполеоновских» начинаниях. Адью!

bugfixer ★★★★★
()
Ответ на: комментарий от no-such-file

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

тренды приходят и уходят, так что я не особо сильно этого хочу. Так, немного ковырял уже pandas и не понял, зачем мне это если есть Excel. Ну за одним исключением, что майкрософтовскую поделку я ненавижу.

NorthernBlow
() автор топика

Ведь мозг можно обучить буквально всему.

очень сомнительно

targitaj ★★★★★
()

Весь текст не осилил. Нужно начать с простого ЯП. Вообще-то, должны были научить в школе/ВУЗе.

hhhhacker
()
Ответ на: комментарий от hhhhacker

Весь текст не осилил. Нужно начать с простого ЯП. Вообще-то, должны были научить в школе/ВУЗе

ЯП не имеет значения. ТС сам заявил что для него binary search неподъемен. Спешу заметить - материал 7го-8го класса. О каких «высоких материях» может дальше идти речь?

ПыСы. А Кнут - гораздо больший безобразник и шутник чем было озвучено. Емнип, после одной из первых глав на «пятерку» он просил теорему Ферма доказать…

bugfixer ★★★★★
()
Ответ на: комментарий от hhhhacker

я прогуливал школу, а в вузе учился на истфаке.

NorthernBlow
() автор топика
Ответ на: комментарий от NorthernBlow

куда мне до илитки.

Скажу больше - куда вам до восьмиклассников.

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

bugfixer ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)