Программист-любитель: крокодил не ловится, не растёт кокос

Программист-любитель: крокодил не ловится, не растёт кокос Javascript, Вопрос, Длиннопост, Framework

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


Есть у меня давнишнее увлечение: программирование. Последние лет пять мой язык - JavaScript. Начинал с других, но уже относительно давно переключился на него. Основная деятельность не связана напрямую с IT, так что применение скиллу - это автоматизировать что-нибудь для знакомых или для себя: тут проверка текста на повторы, там веб-скрейпинг (без жести, все прилично), здесь сбор адресов и рассылки (виноват, здесь PHP был), там допилить страницу на WP. Сайт знакомых поддерживаю, но не потому, что я такой крутой спец, а потому, что они не очень умеют пользоваться даже готовыми решениями (совсем не спецы, то есть).


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


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


Недавно решил подкачать межушный нервный узел при помощи Codewars. Есть такой сайт с задачками по программированию, которые проверяются уже готовыми тестами (но вы их при этом не видите). Можно сказать, что эта система учит test-driven development. Дошел до определенного уровня, получил ачивки, был очень этим доволен.


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


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


Уроки по Django вызвали примерно такие же ощущения. Прежде чем несчастный Hello World написать, нужно установить Virtual Environment, ибо версии Python разные. И для этого нужно выполнить несколько команд в терминале, которые вообще не имеют отношения к фреймворку, но неплохо бы их понимать, ибо все, что под sudo делается, рекомендуется через мозг пропустить. Теперь у меня несколько тысяч файлов в пустом проекте, и что-то я не пойму, куда код писать. Нет, не сюда, эта куча текста - это конфиги...


Разработка под Android поставила меня в тупик с самого начала. Тяжелая Android Studio, эмулятор Android-устройств, которому не понравился мой процессор, а когда что-то где-то наконец щелкнуло и заработало, я осознал, что не умею даже прикручивать код к нажатию кнопки, и знание Java (ее я до этого учил по книгам) мне вообще никак не помогло.


Возникает четкое ощущение, что я папуас, который не знает, что такое буквы, и ему не поможет ни ручка, ни тетрадь, ни книга. Хотя алгоритмы и структуры данных я в каком-то объеме знаю, равно как и (если говорить о JS) всякие XMLHttpRequest, Callback, events, exceptions, call stack, стрелочные функции и тому подобное. Историю вычислительных машин и языков программирования тоже примерно себе представляю, ибо нравится, а заодно и с парочкой старых языков знаком (BASIC, C).


Но чтобы превратиться из любителя в спеца, не поможет, если вы загуглите все подряд. Если не знаешь, чем ограничен тот материал, что тебе нужно выучить, тогда можно скачать 10 Гбайт мануалов в формате plain text и умереть от старости, прочитав 1%, и то без толку. Кроме того, пассивные знания прекрасно выветриваются.


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


Интересно, есть ли здесь люди, которые успешно вышли из такого кризиса программиста-любителя?

Лига программистов

1.6K постов11.5K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

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

1
Автор поста оценил этот комментарий

Как я понял вы не знакомились с компилируемыми языками, к которым и относится C#.

Шарп хорош не только компилируемостью, но и строгой типизацией: вам не придётся держать в голове какого типа та или иная переменная.

Шарп так же довольно хорошо подходит для бекенда вебсайтов, то есть выкидывать из головы JS не придётся :)

У Шарпа так же есть довольно мощная среда разработки, при этом бесплатная (платная версия имеет некоторый набор фич, который Вам не нужен при знакомстве с языком и технологиями)


Плюс, язык довольно простой, если сравнивать с C++ и уж тем более C, но при этом переход от C# к C++ будет условно простым и более простым - к Java.


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


Собственно каждый малёк хвалит своё болото: вот я и хвалю, как специалист в области разработки бекенда для промышленных систем :)


Если заинтересуетесь - пишите, не стесняйтесь.



З.Ы.: Ну и в C# проще на мой взгляд изучать все эти ваши ООП и всё вот это вот :)

З.З.Ы: И таки это один из языков для игрового движка Unity.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо!


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


Не интересуюсь? Почему, интересуюсь, в том числе потому что это новое.  Винда у меня есть, не только Linux. И вроде как существует Mono.


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


Давайте за С#, интересно. Как им очароваться? :)

показать ответы
1
Автор поста оценил этот комментарий

Сорян за некро...

А как насчёт сишарпа, дотнетфреймворка и вот этого вот всего?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Извините, не увидел 9 дней назад.

Я с C# и .NET не знаком. Вы рекомендуете? Чем они хороши?

показать ответы
1
Автор поста оценил этот комментарий

Привет, друг, напиши мне в телеге @ivorr Похоже мы с тобой товарищи по несчастью

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Привет! Напишу. :)

показать ответы
1
Автор поста оценил этот комментарий

Написать на нем много кода, прочесть пару учебников по диагонали, сходить на хабр, понять что ты крутой программист по сравнению с этими кретинами :)


Индивидуально, на самом деле.

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


Пробуйте, развлекаетесь.

Если вам нужна более подробная консультация в рамках шарпа - вот вам задачка на пользование поисковиком: найдите меня в соцсетях ;)

раскрыть ветку (1)
Автор поста оценил этот комментарий

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


Насчет соцсетей понял, спасибо! :)

1
Автор поста оценил этот комментарий

"Вижу, что чего-то для превращения в профессионала не хватает, но не пойму, с какого конца к этой проблеме подступиться." (c)


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

Во-первых, Если говоришь, что знаешь, как создавать проекты на реакт через CRA, то тащить за собой тонны node_modules действительно такая себе идея. Попробуй создать сайт на реакте без кра. Всё то же самое - разбивка каркаса на компоненты, импорт реакта, импорт твоего выбранного стейт-менеджера, упаковка css'a, импорт бабеля, импорт остальных либ. Настрой parcel или webpack, чтобы они тебе правильно всё собирали. Если есть бэк - добавляешь бэк. Можно накрутить типизацию, можно добавить тесты (всех видов). Можешь не сильно упарываться по архитектуре в плане - разбивка проекта по фичам или по файлам. Просто, как можешь, так и пиши. Архитектуру тебе потом на рабочем месте подскажут, какая будет принята. Хочешь - сам покопай в эту сторону.

Во-вторых, если всё что выше - сложно, попробуй обойтись без фреймворков. Сделай несколько простых проектов, которые ты мог бы осилить "от и до". При чем именно рабочих. Представь себя на месте заказчика - например, у тебя для твоей фирмы по изготовлению кухонь, должны быть: 1) сайт-лендинг для поимки заказов на изготовление кухонь (просто страничка с картинкой дизайнерской кухни, телефоном-адресом, чат-ботом, формой для обратной связи) 2) сайт-магазин для заказа кухонь - сделай, например, SPA с несколькими видами кухонь, добавь фильтры по по стоимости от количества шкафчиков, с вводом размеров, возможность заказа замерщика, если они размеров не знают и тд. 3) Можно сделать какой-нибудь мини-сайт/ форум по этим кухням - админка, разделение ролей юзеров, база данных с аватарками, загруженными от пользователей, их сообщения и тд.

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

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

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


Многое непонятно по причине, условно говоря, моей тупости, начиная с таких вещей как "импортировать babel"  - уже здесь я не понимаю, какому софту дается команда на импорт. Интерпретатору javascript, т.е., Node? Или npm?


Или: настроить parcel/webpack. Настроить его конфиг-файлом? Прочитать, что ли, азбуку какую для фронтендера. А то вопрос на вопросе выходит :)


Что касается свободы ("как можешь, так и пиши") - она в некотором смысле все усложняет. Если существует какой-то единственный способ сделать так, чтобы софт заработал, для человека без особого опыта это (как мне кажется) очень удобно.


Вот пример. Как мне, нубу, написать консольное приложение на С? А вот как.

0. Открыть окно терминала в любой GNU/Linux

1. nano sample.c

2. Написать шаблонный код в начало файла (можно скопипастить)

3. Указать хедеры (можно скопипастить)

4. Воткнуть свой нубовский код в int main и в другие функции

5. Объявить функций - написать прототипы в начале файла.

6. gcc -o executable-file sample.c

Когда перестали выползать ошибки:

7. ./executable-file

Все, можно радоваться.

Как передать код на другую машину?

0. Скопировать sample.c

Есть ли такой прямой путь, скажем, для React? Наверное, если есть, то он где-нибудь написан.

1
Автор поста оценил этот комментарий
Интересно, есть ли здесь люди, которые успешно вышли из такого кризиса программиста-любителя?

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, именно так. Понимаю, что написано на ЯП, каждую строчку отдельно (деревья), а леса не вижу. Как же знающие люди лес видят? :)

показать ответы
2
Автор поста оценил этот комментарий
В правильном направлении двигаетесь. На любом проекте придеться спрашивать и вникать. Просто выучите 1 фреймворк и поищите работу)
раскрыть ветку (1)
Автор поста оценил этот комментарий

Спасибо. Но согласитесь, выучить фреймворк сам по себе недостаточно. Нужно что-то еще вокруг него проработать. Например, если node modules каждый раз ложатся в проект React, нужно что-то добавлять в .gitignore, а что-то - наоборот, нельзя. И помимо самого React нужно понять Webpack, если хочешь это потом положить на сайт.


Собственно, вопрос вот в чем. Если сравнить знание фреймворка с deb-пакетом (извините, я пользуюсь ламерским ubuntu), то у него куча зависимостей, и их так просто не увидишь. Если dpkg сразу скажет, что пакету требуются liba, libb и libc, причем libc еще нужно libd и libe, то в случае знаний по фреймворкам я не вижу, чего в моей башке не хватает. Вот вы знаете, как dependencies по знаниям разрешать? :)

показать ответы
1
Автор поста оценил этот комментарий
Тяжелая Android Studio, эмулятор Android-устройств, которому не понравился мой процессор

Хах, ты XCODE для IOS не видел просто.
Вообще, есть куча курсов на ютубе под любой язык, например.
ЗЫ. Текст немного на нытье похож.

раскрыть ветку (1)
Автор поста оценил этот комментарий

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


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

1
Автор поста оценил этот комментарий
Здесь вам не тут😉
Сейчас в программировании "бог любит большие батальены"
Все инструменты направлены на работу в команде, по возможности распределённой и специализированной команде.
Если говорить про веб, помимо фреймворков посмотрите как сейчас создаётся CSS .
К тому же помимо чистого js, вам возможно придётся учить еще typescript.
Я это то что я знаю, как мимокрокодил фронтенда.
У бакенда свои приколюхи. И там знание ЯП отнюдь не самое основное.
В общем добро пожаловать в дивный новый мир разработки.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Спасибо. Действительно, я вижу, что нужно уметь в командную работу, но команды нет вообще (ибо у меня нет знакомых, кто этим занимается), и даже неясно, какие тулзы нужно уметь использовать. Мой максимум в этом плане - это git push/pull, поскольку на моем github никого, кроме меня, не бывало. А да, один случайный школьник зачем-то мою дребедень форкнул, наверное, не на ту кнопку нажал.

Какие тулзы научиться использовать? :)

1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

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


Если помните, был такой Терри Дэвис. Он написал TempleOS в одиночку. Вот он умел в код очень хорошо, а в командную работу - нет, ибо настоящий (со справкой) шизофреник. Его пример очень поучителен. Как начать командную работу? :)

показать ответы