Pull to refresh

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

Reading time 8 min
Views 75K

ПРОЛОГ


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

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

Ну а если ты в процессе самоопределения по данной профессии — 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% документации по программированию на английском. Перевода не ждите.
Названия переменных тоже называем английскими словами, заодно это комментирует код.
Если при изучении языка программирования, ты чувствуешь что продираешься через джунгли, что твои мозги вязнут в этой мути, что языковые конструкции ужасны и труднопонимаемы, и ты чувствуешь нарастающее раздражение, то вполне возможно, что это не твое. Бросай!
Программирование — это не профессия, это диагноз.
Главное, что ты — пытался, но возможно что твое призвание в другом.

P.S.


Немного из опыта других
Программирование — это не развлекательная вечеринка, а кропотливая работа, требующая много знаний и определенный склад ума.
Изучить язык != научиться программировать.
Only registered users can participate in poll. Log in, please.
Стать программистом
26.27% После статьи я решил что стану программистом 129
8.96% После статьи я передумал учиться на программиста 44
31.98% Автор не раскрыл тему. Поищу другой источник. 157
32.79% Автор все усложняет. Программировать может каждый! 161
491 users voted. 351 users abstained.
Tags:
Hubs:
-55
Comments 285
Comments Comments 285

Articles