Найти в Дзене
Репетитор IT mentor

Что делать, если программирование кажется сложным, но очень хочется разобраться в нем? #2

Оглавление

Цикл статей :
Что делать, если программирование кажется сложным Часть 1
Что делать, если программирование кажется сложным Часть 2 <--
Что делать, если программирование кажется сложным Часть 3

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

За 1й курс удалось немного разобраться в алгоритмах и начать писать программы в Pascal, но за оконные приложения было страшно браться. Так как выхода не было, выбор пал на Delphi 7, потому что object pascal был ближе всего к тому языку, которому пытались [м]учить в школе.

Кстати, конкретно по Delphi мне очень помогла книга "Михаил Фленов - Библия Delphi" ( Скачать )

От большого количества настроек полноценной IDE разбегались глаза. Интуитивно и методом научного тыка удалось вывести текст в поле ввода по нажатии на кнопку. Благо компоненты на форму можно было легко перетаскивать мышкой.

Всё было хорошо до тех пор, пока программа не становилась реальной. Когда нужна была обработка данных, обработка текста, правильно выставленные события по нажатию на различные компоненты формы. Часть кода Delphi генерировала сама IDE, но на тот момент код был ужасно непонятный.

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

Сейчас мы подходим к важной части. Заметки об ошибках...

Моими основными ошибками на тот период было следующее:


1. Я плохо проводил работу над ошибками. Никогда не записывал и не анализировал то, что мне уже когда-то попадалось. Так как я не выписывал свои основные ошибки, то часть из них забывал и наступал на одни и те же грабли.

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

3. Вместо того, чтобы разобраться в проблеме или ошибке алгоритма, я изменял какие-то мелочи в программе и пытался вновь ее компилировать.

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

5. Давал неправильные имена переменным и функциям, что способствовало ухудшению качества кода. Уже на следующий день приходилось катать колесико по листингу и искать за что отвечает некая переменная
p. Названия должны быть осмысленные! Пример: если ваш алгоритм определяет четную переменную и где-то использует флаг четности этой переменной в виде булевой (логической, boolean, bool), то не надо называть её flag = False. Пройдет время (1 - 2 дня даже), и вы забудете за что отвечает этот flag, вам нужно будет заново изучать весь кода. Используйте префиксы, используйте английские слова. Назовите эту переменную хотя бы isEven = False. Это уже будет намного понятнее для вашего глаза. Код должен читаться также легко, как и текст на английском языке. В противном случае это говнокод.

6. Я не управлял сложностью. Естественно я даже не знал о принципе KISS ( Keep it simple, stupid ). Не нужно писать хитрый код без должной необходимости. Рефакторинг прежде всего основан на простоте и читабельности кода. У этих факторов самый высокий приоритет. Если вы пишите сложный и хитрый код, то на это должна быть весомая причина, к примеру, повышение скорости работы программы на 20 %. Только в комментариях к такому методу (функции, процедуре) вы обязательно должны пояснить за этот алгоритм. Ведь не факт, что ваши коллеги сталкивались с этим алгоритмом. Им будет проще разобраться, если будут комментарии. Комментариев не должно быть мало, не должно быть много. Они должны быть там, где код можно трактовать по-разному ( в сложных моментах, хоть и сложность всегда субъективна ).

7. Для своего обучения я не использовал множественные источники информации. Чтобы понять одну тему, сложную для вас, вы можете прочитать одну книгу, другую книгу, выборочные статьи в интернете, посмотреть уроки на YouTube. Тогда со временем у вас сложится ваше собственное понимание. К примеру, есть такая сложная тема как указатели и ссылки (кстати вот неплохая статья по этой теме) , с чем сталкиваются те, кто начинает изучать C/C++. Вот здесь явно не поможет один источник информации. Потому что каждый объясняет по-разному, а тема довольно сложная, а уж ошибки компилятора по этой теме вообще не очевидные. Конкретно по этой теме и в целом по языку C++ я могу посоветовать следующую книгу:
C++. От ламера до программера [2015] Эллайн ( Скачать ). А хорошие примеры кода от простого к сложному есть в книге Программирование на языке С [2007] С. Кочан . А еще есть очень хорошая книга для начинающих: C++ для чайников [2019] Дэвис Стефан Рэнди (скачать 2014 En и Скачать 2007 Ru ). Есть также статья, где указан исчерпывающий список книг для изучения этого языка: Список книг для обучения программированию на C++

8. Ещё одна ошибка - при выборе языка программирования слушать советы 90% людей из интернета. К сожалению, это так. Как бы я тоже обычный человек из интернета, но я сейчас попробую кратко объяснить ситуацию. Дело в том, что большинство раздающих вам советы являются мамкиными специалистами, которые всего лишь рефлексируют чужое необоснованное мнение. В итоге задается некоторый тренд. Один недалекий скажет "Pascal отстой, Python лучший", другой скажет "С уже давно не актуален", третий скажет "Знания Assembler никому не нужны", четвертый скажет "Сейчас всё можно написать в WEB-приложении". Кругом будут всегда бегать мамины программисты с криками "То не актуально, это не актуально, C++ умрет, а ИИ на Python захватит мир и бла-бла-бла". Есть и такие, которые считают актуальными книги только текущего года выпуска. В интернете такие горе-эксперты пишут, что книга по математике 1980 год уже 40 лет как устарела. Но если их спросить "А что устарело?", то ответа вы не дождетесь. Потому что ответа у них нет. Естественно, большинство из таких людей не читало никаких книг, не решало реальных математических задач. Это просто толпа, пересказывающая слухи. Так вот будьте бдительны, прежде чем прислушаться к любому мнению в интернете.

Мораль: Учитесь на ошибках других людей, запоминайте свои ошибки, всегда проводите анализ вашей деятельности

Критика языков программирования в интернете

Вероятно, каждый человек, который начинает увлекаться программированием в наше время, может встретить такие комментарии в социальных сетях, которые восхваляют 1-2 "мейнстримных" языка программирования и мешают с грязью все остальные. "Pascal мертв", "Delphi г*вно", "Assembler никому не нужен", "Разве Си еще где-то используют", "Мобайл-web всему голова", "Java тормознутая и уже мертвая" и прочий бред.

-2

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

Каждый второй, будучи сам ноунеймом, может позволить себе неуместную критику сложнейших технологий. Люди чаще всего приходят чтобы критиковать тех, кто хочет сделать что-то полезное для общества. Развиваться? К черту! Изучать как можно больше технологий и выбирать нужное для себя? К черту! Сделать что-то полезное для общества, автоматизировать рутину, внедрить новшества? К черту! Лучше я буду критиковать проекты/программы/языки программирования великих людей, принесших обществу реальную пользу!

Каждый студент 3 курса считает себя экспертом в области программирования, физики, математики. Типичный эффект Даннинга-Крюгера. Метакогнитивное искажение личности. "Пик глупости". Максимализм.

Язык – это лишь инструмент для выполнения определённой задачи. Нужно программировать с использованием языка, а не программировать на языке. А говнокодить можно абсолютно на любом языке программирования. Как-то странно считать, что если я пишу на C++, то я представитель элитарного общества, а если на Delphi, то представитель люмпенов. Нет. Если руки из .... или, скажем мягче, мало опыта, то говнокодишь всегда и везде. Когда появляется опыт, то изящный код можно написать с использованием любого языка. А опыт появляется тогда, когда начинаешь пытаться делать что-то полезное. Когда некогда критиковать и выставлять своё мнение в качестве истины в последней инстанции.

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

А так как правда субъективна, истина у каждого своя, то я могу и буду ошибаться. Постоянно и во всем.

Чем кто невежественнее, тем нетерпеливее он порывается судить.
© Э. Кондильяк

Не образован тот, кто никогда не осмеливается признаться в том, что он чего-то не может или не знает.
© И. Гофмиллер

Выбрать один язык, одну технологию и начать в ней разбираться

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

Кратко и по пунктам

1. Управляйте сложностью. Принцип KISS.
2. Анализируйте ошибки.
3. Станьте экспертом хотя бы в одной технологии, прежде чем браться за другие. Изучите один язык, но глубоко. Советую начать с языка C. Потому что он дает понимание работы других языков программирования.
4. Читайте книги. В них самая высокая плотность полезной информации
5. Найдите себе наставника или опытного человека, который будет указывать вам на ваши ошибки.
6. Будьте спокойны и не впадайте в депрессию, если у вас несколько часов подряд не получается задача. Отложите всё, отдохните, очистите разум, попробуйте решить её на следующий день.
7. Во время программирования отключайте социальные сети и уведомления от них.

Прочитать:
Что делать, если программирование кажется сложным Часть 1
Что делать, если программирование кажется сложным Часть 3

Продолжение следует...

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

Еще много полезного и интересного вы сможете найти на ресурсах:

Репетитор IT mentor в VK

Репетитор IT mentor в Instagram