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

тренды приходят и уходят, так что я не особо сильно этого хочу

Ну понятно. «Пилите, пилите Шура – они золотые».

no-such-file ★★★★★
()

Никак, только у наставника.

burato ★★★★★
()

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

То есть, для тебя бинарный поиск это какая-то сложная штука?

Мне кажется это абсолютно не мое.

Видимо, да.

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

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

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

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

Так многие делают и даже зарабатывают этим. У меня на работе такой «разработчик» продержался 4 месяца. И мог бы и больше, если бы не дурной характер.

Программа - это текст. В идеале - краткий и чёткий. Попробуйте для начала кратко излагать свои мысли. Например, Ваше первое сообщение программист написал бы как-то так:

  1. Жена говорит, что нам не хватает денег.
  2. Я слышал, что программисты почти ничего не делают, а получают много. Тоже так хочу.
  3. Пробовал кодить - получается какой-то гибрид-мутант из кусков чужих программ. Мне это не нравится.
  4. Пробовал читать книги - болит голова и тянет в сон.
  5. В чём ваш секрет? Витамины? Стероиды? Вещества? Рок-н-ролл?
Kogrom
()
Ответ на: комментарий от Kogrom

Ваше первое сообщение программист написал бы как-то так

🤔 А можно заменить то сообщение на это? А то там так много эмоций и букв, что кажется, что это какая-то важная история ИТ успеха…

Если серьёзно, то программист вначале начинает программировать, просто потому, что это нравится и не можешь не программировать, а только потом читаешь Страуструпа, чтобы уточнить тонкости… Самомотивация её и-тить…

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

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

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

Чувак, ну, не цепляет тебя это всё, отступись.

tiinn ★★★★★
()

тебе должен нравится сам процесс кодинга, иначе всё бесполезно

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

Нет.

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

PHP и C имеют тождественные языковые конструкции. 

Да прям близнецы. С таким же успехом можно с js начинать. Относительнло простой способ — сразу ц ;) не будет никаких иллюзий.

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

чтобы понять, какой участок кода не работает

Можешь попробовать онлайн отладчик чтобы понять, как работает настоящий

https://www.onlinegdb.com/

aiqu6Ait ★★★★
()

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

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

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

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

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

Не надо никаких блоксхемов :) замени «блок» на «последовательность выражений», она же «следование». И все. У меня опять же ни слова про именно «блоксхемы» :)

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

До этого нужно вначале дорасти, нужно написать некоторое количество кода, в результате которого начнут появляться мысли и зарисовки

На экзамен по знанию ПДД, надо приходить только после того как поездишь, побьешь машины, подавишь людей – «в результате которого начнут появляться мысли и зарисовки …»

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

Сравнение нимношк некорректно :) никакого такого риска от хеллуворлдов нет. По ПДД ездить не нужно, а вот вождение на одной теории не освоить — именно поездить надо с инструктором. Чтоб научиться плавать, внезапно, таки нужно плавать.

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

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

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

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

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

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

soomrack ★★★★★
()

пхп буквально взрывает мозг.

После Pascal и C++ было тоже самое. php писали нелогичные кретины.

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

Не, друг, программистами становятся только системщики, которые могут унаследовать готовый компонент, раскурочить и переписать его.
Я себя отношу к программистам-формошлёпщикам, так как я написал полноценную, каазалось бы программу
http://sourceforge.net/projects/klen-library/files/
Это текстовый редактор с возможность каталогизации в БД. Но, я дошёл до логического тупика. Появилась необходимость раскурочить QTextEdit и добавлять / изменять нужные мне фичи с текстом. Открыл чужой код и всё, я понял, что я не программист, так как понять что за чем идёт я физически не могу. Принял решение остановить проект, да и занялся уже потом другими работами на дядю.
Может попробовать что-то сделать полноценное и законченное? Не бесформенного бота, а написать телефонный справочник с БД, например, где нужен будет полный цикл: Постановка задачи, проверка возможностей языка или библиотеки(Qt/Builder), наброска проекта, дизайн окна и программы в целом, кодинг и наисание справки. Так ты будешь менять задачи и мозг будет отдыхая тренироваться.

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

Да, чтобы съэкономить время тебе придётся половину работы ковырять чужие исходники, иначе проекты будут делаться годами.

xwicked ★★☆
()

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

Необходимое, но не достаточное:

  • математика и математическая логика на уровне средней школы, как пример понимать НОК и НОД, уметь описать своими словами как это считается
  • опираясь на пункт выше понять, что такое алгоритм и что программирование - это формальная запись процесса решения
  • понять, что для описания алгоритма самой сложной задачи достаточно трёх элементов - терминатор, действие и условное ветвление
  • опираясь на пункт выше научиться описывать алгоритмы блок-схемами
  • перейти к изучению конкретного ЯП, осознавая какие из структур явялются «сахаром», как пример, что цикл for это счётчик итераций и условие выхода
  • решать учебные задачки на выбранном ЯП

Далее укрупнённый план развития навыков:

  • попробовать другие ЯП и понять, что есть база для кодинга и есть нюансы реализаций ЯП
  • освоив императивную парадигму переходить к ООП
  • после ООП уже можно осваивать декларативщину

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

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

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

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

Да пофиг на языки. Возьми хотя бы книжку Окулова для школьников за 7-ой (или 8-ой?) класс, научись свои алгоритмы реализовывать хотя бы на Паскале, сам, с нуля, дальше для тебя особых открытий кроме ООП, регэкспов и функциональщины не будет.

shalom_ ★★
()

Была ещё книжка. Автор: Дасгупта. Алгоритмы. Листал её в каком-то книжном магазине давно. Вообще ещё очень есть важный навык - выводить (выдумывать) алгоритмы самому, проектировать, так сказать, на листочке. Если этот навык имеется, то конечный результат - работающий код - упирается в знание ряда приёмов, трюков, подходов, методов, принципов и собственную смекалку.

Ещё важно понять, что технологии меняются, и пока учишь одно, оно уже успевает устареть к моменту завершения обучения.

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

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

Я сейчас обучаю пару человек ремонту электроники, и это, конечно, немного другое, но

У них через 20 минут рассказа теории уже замутняются глаза, и я беру для них ноутбук, в котором, по моим предположениям, всё просто, в итоге он, естественно, починяется, и они пищат от радости что у них получилось

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

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

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

Благодарю, книгу выкачаю. Хорошо что я все же поднял здесь эту тему, много годноты уже насоветовали. Надеюсь в течение следующего года точно научусь

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

По-моему, ты просто начинал не с того.

То похапе, то фреймворки… Это всё инструменты для прикладных задач.

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

Где-то параллельно строкодробилки простейшие. Написать свою реализацию wc, например, заодно и работу с файлами осилишь.

И да, параллельно Кнута почитать и что-нибудь из него реализовать.

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

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

Непонятно как именно строить программу на моем этапе.

Это отдельное умение, конечно. Ну возьми задачи попроще и на них тренируйся.

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

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

Открою секрет — этим очень часто занимаются опытные программисты с большим стажем. Ну может, не совсем «куда попало», но в сложной программе с кучей дёргающих друг друга классов зачастую выглядит именно так. Тесты помогают, но всех проблем не решают.

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

Ну и в принципе, тебе тут уже дали два очень важных совета.

Первое. Программирование, как и любую работу, надо ЛЮБИТЬ. Тебе нравится хотя бы? Если всё дело только из-за денег и жалко уже потраченных усилий — бросай. Если всё-таки нравится, но не можешь найти подход — песня другая.

Второе. Практика решает. Решай конкретные задачи, пусть поначалу они будут простыми и абстрактными.

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

Тесты помогают

Тесты - это лукавая игра. Особенно, если пишешь их сам на свою же реализацию. TDD тоже не отменяет подгон одного к другому. Поэтому тесты проблему не решают, они не про это.

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

Кстати, к нормальному дебаггеру и привыкаешь быстро и отвыкаешь так же быстро. (

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

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

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

Чтоб научиться плавать, внезапно, таки нужно плавать.

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

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

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

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

внутри чужого кода я уже могу писать свои функции, давать им что-то, возвращать из них что-то. А вот с 0 начать совсем не выходит

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

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

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

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

Совсем с нуля - это довольно утопично и идеалистично звучит.

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

В программировании мы видим цель и конструируем на разных уровнях. Можем оперировать и связывать между собой программы (пример bash), можем, библиотеки языка, можем конструкции в рамках одного языка, можем связывать инструкции (Ассемблер), можем двоичный код (хотя я таких людей не встречал, с другой стороны - бабушка, вяжущая свитер, перебирающая крупу или дедушка, плетущий лапти - фактически программируют на низком уровне, с точки зрения проектирования).

Простите за совсем наивный пример, из строительства. Можно дом (сруб) складывать по брёвнышку, а можно готовыми блоками, которые уже кто-то сделал на фабрике.

Сделать что-то с нуля необходимо. Открыть текстовый редактор и написать страницу с выводом новостей и пагинацией, например. Потом посмотреть на код и переписать, доработать и т.д. Если говорить про веб, то для начала можно сделать себе личный блог, только самостоятельно. Это как пример. На файлах, например, можно даже без админки. Только вывод записей и пагинация.
Задача хороша тем, что достаточно быстро решается и даёт видимый результат.

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

А вот с 0 начать совсем не выходит

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

Так и здесь. Это навык, который к программированию не относится.

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

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

Вот тебе чужой код. Пользуйся, меняй, дополняй

#include <stdio.h>

int main( int argc, char *argv[] )  {

   if( argc == 2 ) {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 ) {
      printf("Too many arguments supplied.\n");
   }
   else {
      printf("One argument expected.\n");
   }
}

И кончай троллить, забанят

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

Нет. Я не предлагаю. Это ты вангуешь на основании чего... правильно, ничего. Тебе мерещится ложная дихотомия. Однако одной теорией не обойдется ни ТС, никто другой :) Это просто факт. У ТСа, собственно, и не практика. А хаос. Или соах. Попытки ухватить суть не с того конца — из шаблонов, которые он толком не понимает, т.к. нет системы — он не видит в коде составных частей, а за составными частями — целого (и особенно тех, которые «сокрыты»). За деревьями не видно леса. Но «система знаний» у него из голой теории тоже не появится. Примерно никогда. Чтобы что-то понять, чаще всего, надо это прожить. Кроме, разумеется, путей саморазрушения :) Научить чему-то нельзя — человек учится сам, когда у него появляется «инсайт» (либо не появляется :)). «Всех людей учить трудно, а морочить легко - я, по крайней мере, едва ли не убежден в этом. Знания люди усваивают через пень колоду, если вообще хоть малую толику из того немногого, что им известно, они знают благодаря учению» (с) ТС попробовал скипнуть обучение, результат немного предсказуем: «и в то же время их с величайшею легкостью обманывает множество невежд, и люди морочат не только друг друга, но еще и самих себя» (с) там же :) Это подметили еще античные воплощения кэпа.

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

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

З.Ы. Ты выучил слово «дихотомия» и решил эффектно его ввернуть при случае. Неудачно вышло

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

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

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