как понять что программирование это не твое

Как не стать программистом или… тебе здесь не место

ПРОЛОГ

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

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

Ну а если ты в процессе самоопределения по данной профессии — you are welcome!

ТЕРМИНОЛОГИЯ

Согласно учебникам, программирование — это всего лишь процесс написания инструкций на каком-либо языке программирования (ЯП).
Но так ли это просто — взять и написать программу?
Неужели написать программу, это просто перечислить набор указаний (инструкций) компилятору и все готово?
Всего-то заучить команды и штампуй себе проги, да греби бабло!?

Программирование — это сугубо исследовательский творческий, а не технический процесс.

Программирование — это умение абстрагировать, мыслить объектами, функциональными зависимостями, виртуальными образами.

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

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

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

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

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

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

ВЫВОД. Программист должен уметь выполнять код в голове, до того как скормит его компилятору.

ГОРЬКАЯ ПРАВДА

Как правило, на программиста нельзя выучиться в учебном заведении.
Большая часть программистов — самоучки. Образование способно лишь заложить фундамент инженерных знаний. Остальное — это умственные способности и предрасположенности, помноженные на усердие и труд в квадрате, а то и в факториале(!).

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

СТАНОВЛЕНИЕ

Только после этого, ты становишься кем-то похожим на программиста. И только уже потом, немытая голова старый свитер и борода…

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

ВЫВОД. Программист — это человек, который не только пишет программы, но и у которого они работают.

О ЯЗЫКАХ.

Существует много языков программирования, но особняком в это списке всегда стоял С++.
Почему С++?

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

Ты можешь не использовать С++ в действии, но ты должен знать его как канон, как основу всех основ. Но тем не менее, С++ весьма опасен при использовании, ведь, например, при манипулировании указателями, если программист до конца не понимает их основ, можно улететь на исполнение кода в участок данных (из-за этого, кстати, в JAVA, указатели отменили). А еще можно «выстрелить себе в ногу»)) так считал автор языка С++, господин Страуструп. Потому что таким инструментом, как С++, нужно очень грамотно владеть, чтобы пользоваться им виртуозно.

Также учтите, что часть современных языков взяла С++ за базу — Java, PHP, Perl, Ruby etc.
Все известные программы написаны исключительно на С++ (или С) — ОС Windows, ОС Linux, MacOS, iOS, Firefox, Kaspersky, Chrome etc. Более того, многие из известных программ, имеют открытые исходники и по ним можно учиться программированию.

На данный момент, только С++ дает самый быстрый и оптимизированный код под нативную родную платформу.

ПОЧЕМУ DELPHI НЕ ВАРИАНТ?

Здесь я приму отчаянную попытку отговорить начинающих от программирования на Delphi.

Pascal (IDE Delphi) — это программирование в рамках (ИМХО). Pascal — это язык, придуманный ученым Н. Виртом в 1970-ом году, в ходе разработки другого языка Модула-2. Pascal широко использовался для изучения основ программирования, но коммерческое использование он получил только в 80-90-е годы.

За десятилетия правления Борланда и InPrise он превратился в монстра, заимствовав (украв) часть синтаксиса из С++. Сейчас компания Embarcadero продолжает выращивать этого монстра, в чреве которого вы будете компилировать гигантского размера программы. Кстати и для Андроида тоже.

Я в свое время немало людей перетащил с болота Delphi на C++, чему они сами были впоследствии несказанно рады. Будучи С++-программерами, они с ужасом вспоминали про Паскаль и больше не имели желания на нем программировать.
Также, я слышал немало баек от программистов, пытавшихся переучить дельфистов на Java и потерпевших полный фиаско. Теперь многие ставят крест на дельфистах. Якобы, непереобучаемые.

Возможно это вызов и вам, господа дельфисты! Попробуйте написать прогу на С++. Через 2 месяца Delphi (Pascal) покажется вам детским садом и вы перейдете на следующий уровень развития (в среднюю школу). А там уже и Python не за горами.
Развивайтесь! А вам слабо?

Сразу попрошу не разводить холивор по поводу кто круче — Дельфи или С. Если Вы пишете на Дельфи хорошие коммерческие программы и ваши юзеры довольны продуктом, то значит все отлично. Пишите и дальше. Вы нашли свою нишу.

ИСПОЛЬЗОВАНИЕ ЯП

Теперь посмотрим на мировую статистику за 2015 год, так на чем все-таки пишут программы?
C (C++,C#,ObjC) — 28.5% (это нормальные пацаны)
Java — 21.5% (это Android, серверные и мобильные приложения )
Basic (+.NET) — 4.1% (это США с их обожаемым Visual Basic)
Python — 3.8% (это кулхацкеры, линуксоиды и гики)
Delphi (Pascal) — 2.9% (это Россия и Восточная Европа)
PHP — 2.7% (Web-программирование)
Javascript — 2.5% (Web-программирование)
Ruby — 2.0%

ШАГИ ПО СТАНОВЛЕНИЮ ПРОГРАММИСТА

С чего же начнется твое обучение программированию?
1. Ознакомление с алгоритмизацией
Тут для начала все таки хорош Pascal. Он неплохо развивает блочное мышление. Вводит в предметную область программирования. Не отпугивает так, как С++. И нога останется целой.
2. Переменные и типы данных
3. Базовые элементы языка
Структуры, классы
Циклы, ветвления, выбор, переходы, функции
4. Ознакомление с ООП
ООП — это именно тот функционал, который делает из программы человека «хорошую» программу. Это скелет (остов) любой приличной программы.
Это то, от чего едет крыша у начинающих. Это то, от чего бегут недалекие программисты.
Тут начинается абстракция.
Требуется понять только одно — ООП является костяком любой хорошо спроектированной программы.
Без ООПа порой сложно выстроить между собой логическое и интуитивно-понятное взаимодействие модулей программы.
5. Знакомство с технологиями — работа с файлами, потоками, графикой, сокетами, СУБД, Web, XML
6. Углубление — работа над своими проектами 6-9 месяцев. Тут важно не дергать готовые компоненты, а писать чистый С++ код.
Важно просто набить руку.

ФРЕЙМВОРК И КОМПИЛЯТОР(IDE)

Фреймворк — это программная платформа, облегчающая разработку и объединение разных компонентов большого программного проекта.
Компилятор — это программа, которая превращает вашу писанину в исполняемый код.

IDE — это графическая оболочка-редактор, которая облегчает работу над созданием визуальных форм и редактирования кода.
Проблема современного программирования — излишнее многообразие фреймворков, сред и ЯПов.
Нельзя выучить все из них. Многое определяет заказчик или компания-работодатель.
Можно начать изучение с Visual C++ (среда от Microsoft), Builder C++ (Embarcadero) и Qt.

Visual C++ — это классика. Если нужно много удобных визуальных компонентов, если нужен навороченный интерфейс — берите Builder C++. Нужна кроссплатформенность — берите Qt C++.

Я начинал программировать на С++ в DOS. Тогда (в 90-х) больше и не было ничего (unix не в счет)!
Сейчас у нас есть C#.NET, Qt, wxWidgets, C++Builder, C++ VisualStudio под Windows. И не менее жирные вариации под Linux.
А если еще посмотреть в сторону Java, Android… то просто слюнки текут от возможностей.

Готовьте голову к обширному вливанию документации. Как говорят программисты — RTFM.
Учите один язык и одну среду. Учеными доказано, что программист с 3-летним опытом программирования на одном языке работает в 3 раза продуктивнее программиста с таким же опытом, но на другом языке.

ХОРОШИЕ ПРАВИЛА ПРОГРАММИРОВАНИЯ

1. Написал первую версию программы!? Выкинь и начните писать вторую версию.
2. Проектирование программы начинайте на бумаге — блоки, связи, морфология, схемы (UML)
3. Переменные самодокументируемые — bPersonNameValidity
4. 60% кода — обработка ошибок и исключительных ситуаций.
5. Разбивайте код на мелкие модули. Хорошая практика — один класс-один модуль.

КАКИЕ ОНИ БЫВАЮТ?

Разделение на системных(С) и прикладных(П) программистов.
С — знают устройство операционной системы, основы API, как работает ОС (потоки, процессы, прерывания, хуки), стараются весь код писать сами без привлечения сторонних компонент. Часто сторонники VisualStudio. Не любят создавать ПО с большими графическими интерфейсами.
П — пишут программу, использую сторонние модули и компоненты. Не вдаются в устройство ОС. Любят Delphi и Builder.

Embedding — самый профессиональный уровень. Программирование под железки — hardware. Требует знаний электроники и ассемблера. Самый высокооплачиваемый сегмент программирования.

Web-программисты — пишут код для динамических сайтов. Чаще на PHP. Дополнительно нужно знать HTML, CSS, JS и пр.

ЭПИЛОГ

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

По С++. Читаем Страуструпа. Держите его книгу под рукой.
И еще. Учи английский язык. Программисты должны уметь свободно читать на английском.
99% документации по программированию на английском. Перевода не ждите.
Названия переменных тоже называем английскими словами, заодно это комментирует код.
Если при изучении языка программирования, ты чувствуешь что продираешься через джунгли, что твои мозги вязнут в этой мути, что языковые конструкции ужасны и труднопонимаемы, и ты чувствуешь нарастающее раздражение, то вполне возможно, что это не твое. Бросай!
Программирование — это не профессия, это диагноз.
Главное, что ты — пытался, но возможно что твое призвание в другом.

Источник

Случайности неслучайны, или Как я думал, что программирование — не мой путь, но стал программистом благодаря настойчивости

Всем привет! Я уже два месяца работаю в компании ООО «Интегрикс» в своём родном Волгограде. «Чистыми», за вычетом подготовок к сессиям и переездов, учился на Хекслете интенсивно где-то 5 месяцев, за спиной два проекта и готовность к третьему.

Вроде бы всё логично и просто, но начиналось иначе.

Изучить программирование за три недели: миссия (не)выполнима?

Когда я узнал о Хекслете, обучался на первом курсе направления «Прикладная информатика в экономике» в своём городе. Ситуация была, откровенно говоря, так себе: еле сводил концы с концами в освоении Pascal, половина лабораторных была куплена у одногруппников, а экзамен был сдан только благодаря ловкости рук и небольшому везению. С математикой ситуация обстояла ещё хуже, что к окончанию первого курса летом 2019 года приводило меня к явному выводу: программирование — не моё.

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

В голову пришла гениальная и абсурдная мысль: за три недели освоить какой-нибудь язык, получить офер из Москвы, накопить 15 тыс. рублей и переехать к даме сердца 🙂

Конечно, эта мысль не выдерживала никакой критики, и ничего общего с реальностью, казалось бы, иметь не могла. Но на всё у меня был один ответ: «А почему бы и нет?»

Знакомство с Хекслетом

В скором времени на каком-то туманном форуме из глубин интернета мне добрый товарищ подкинул ссылку на Хекслет.

После вузовской программы меня очень сильно зацепила одна особенность Хекслета — невероятное внимание к деталям. Начиная от самих курсов и упражнений к ним, заканчивая структурой самой площадки в целом. Это было видно ещё при беглом взгляде на оформление. Ведь, в отличие от многих других онлайн-курсов, здесь не возникало ощущение, что тебе очень сильно хотят что-то впарить. Практически никаких речей в стиле «отучись x месяцев и будешь сразу получать y рублей в месяц». Также подкупает полная прозрачность учебного материала.

Для себя решил выбрать JavaScript по простой причине — самый низкий порог входа в профессию и обилие вакансий в столице.

Читайте также Стоит ли учить JavaScript: перспективы, ситуация на рынке труда, мнения экспертов

Я все ещё думал, что программирование не моё, но у меня была цель, и отступать не хотелось. Полностью забив на вуз, я проводил, в среднем, около 10-12 часов в день на Хекслете. Это довольно быстро дало плоды — материал давался всё лучше, упражнения становились всё солиднее, а значит, было что показать на собеседовании, мозг перестраивался на новый курс почти каждый день.

И вот, спустя три недели, наступил мой вымышленный дедлайн. Всё, что у меня было — пройденный курс по базовым функциям в JavaScript и пара-тройка упражнений из него в своём репозитории на GitHub. Я закинул резюме на HH.ru, красиво оформил его (не без помощи прекрасной Вероники — catwomenko.ru), написал сопроводительные во все места, куда откликался (50+ мест) и стал ждать чуда. Дождался.

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

Неудачные собеседования

Первым было собеседование от банка «Киви». В первой части был тест из нескольких разделов, в каждом из которых давались разные простые задачки. Здесь мне очень помог подход, который вбивался преподавателями из Хекслета с самых первых упражнений, а именно — представить пошагово, что делает моя функция, а потом её уже реализовывать. Тем не менее крайне скромная база всё же сказывалась, и очень много где я просто не понимал написанного и ориентировался по каким-то отрывкам контекста, который улавливал.

Меня пригласили на вторую часть собеседования. Это было уже собеседование с тимлидом и старшим разработчиком. Меня опрашивали по моим упражнениям на гитхабе и, указывая на разные элементы кода спрашивали: «Что здесь можно исправить и улучшить?»

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

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

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

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

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

Как я потерял запал, но кризис помог мне его вернуть

Вуз я по прежнему не посещал, появляясь лишь на сессиях. Освободившееся время тратил на курсы, проекты и небольшие подработки. Планомерно, не спеша, но продвигался, параллельно занимаясь очень важной вещью — вхождением в IT-общество. Общение с большим количеством уже состоявшихся разработчиков из разных сфер и разных стран дало понимание главных паттернов и антипаттернов в разработке, познакомило с неожиданными рабочими моментами, напрямую с кодом не связанными, и немного открыло глаза на то, в какую сторону лучше двигаться. Для себя понял, что действительно хочу работать на JS, а впоследствии — React.

Читайте также Зачем изучать React: особенности и перспективы библиотеки, ситуация на рынке труда

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

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

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

Если бы ещё немного приложил усилий и начал учить асинхронный код и DOM-деревья, которые на тот момент активно требовались на удалённых вакансиях — получил бы работу и остался в Москве. Усвоил ещё один важный урок — надо доводить дела до конца.

Как я нашёл работу в родном городе

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

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

Через неделю мне позвонили и сообщили, что приглашают на работу. Полностью белое оформление, 5/2 в хорошем офисе с действительно классным коллективом. Для меня абсолютно развеялся миф о том, что программисты — закрытые необщительные люди, с которыми не о чем разговаривать. Конечно, быть может это исключительно мне так повезло, и везде по-разному, но тенденцию подобную улавливаю не в первый раз.

Про саму работу написать особо нечего, потому что встречаю всё то, через что проходил при обучении. Разрабатываю информационные системы для разных государственных структур, например МФЦ или РЖД. У нас есть платформа под названием RDEV, и на её основе создаются другие ИС. Вся бизнес-логика описывается на чистом JavaScript с небольшим количеством готовых системных функций для взаимодействия с базой данных и отправкой HTTP-запросов.

Самое главное — упорство и умение задавать вопросы. 99% проблем, через которые проходил, решались банальным обращением в чат или к коллегам, которые сто раз предпочтут быстро помочь надоедливому новому разработчику, чем исправлять критические ошибки в коде тихого парня, который думал, что знает всё сам.

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

Источник

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

Простой 3 комментария

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

4 недели в год можете отдыхать.

вопрос имеет отношение к программированию!
по вашему каждый человек может добиться успеха в прогаммировании или любой профессии, только лишь учитывая правило 90%/10%?
есть же определенные предпочтения и склонности у каждой личности!

у меня такой же вопрос о себе.
обладаю терпением и добился успеха в некоторых профессиях и деятельностях.

А если кого-то интересуют высокие зарплаты, то пусть лучше идут в юристы.

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

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

В Совершенном Коде, есть страница, где говорится, что умность скорее вред для программиста, чем помощь. Программист борется со сложностью. Это его основное предназначение. Лучше быть тупым (или считать себя тупым), но с кодом который все легко понимают, чем умным который пишет коротко но не понятно.

Источник

Операционные системы и программное обеспечение