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

 

ПРОЛОГ


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

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

Ну а если ты в процессе самоопределения по данной профессии — 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 не за горами. 
Развивайтесь! А вам слабо?

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

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


Теперь посмотрим на мировую статистику, так на чем все-таки пишут программы?
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.


Немного из опыта других
Программирование — это не развлекательная вечеринка, а кропотливая работа, требующая много знаний и определенный склад ума.
Изучить язык != научиться программировать.

Источник

Версия для печатиВерсия для печати
  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 2
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Страницы

Аватар пользователя tamakio

Делфи ещё жив? (Мой однокурсник, большой любитель Делфи в универе, спокойно перешёл на Яву. Да и с другими языками нет у него проблем. Думаю у тех ребят проблемы не из-за языка, а из-за подхода подобного "написал только диплом")

Пайтон - кулхацкеры? Чего не дата-аналитики и всякие ИИшники?

Все С языки под одну гребёнку? Ну хоть Java & JavaScript разделены.

А остальное позитивно и правильно :)

Аватар пользователя mike

А я вот с "плюсов" на Джаву не стал переходить. Почему? Тормозная она, да и некогда уже перестраивать мосх -- стар есьм. Паскаль сразу невзлюбил за многословие и отсутствие средств разработки для микроконтроллеров. Шарп? Увы, он только для Win. Пайтон унивесален, но дико неудобен -- люблю переносить строки, как хочу, особенно SQL. И медленный он.

И да -- не вебщик я. Мне простительно. :)

Москвич

Пишу учетно-складские, до этого инженерные задачи. Только Delphi !!!

И именно в силу его «многословности». Пойми Бро, мне пофиг будет выполнятся конкретный блок 0.001 сек или 0.002 сек. Мне пофиг сколько места в памяти займет мой «крокодил» - экзешник. Мне важно: как узнать остаток товара на складе, мне важны приходные и расходные накладные. Мне важен алгоритм, НЕ ПРОГРАММЫ, а соответствующего бизнес-процесса. Зная его (алгоритм), просто и тупо пишешь строчки кода не рискуя нарваться, блин, на «вектор указателей», или присвоение не того не тому. Никто не может знать работу сотен тысяч строк кода (такие они у нас!). Программа плод коллективного труда, люди приходят и уходят. И тут «читабельность» текста программы на две головы важнее ее быстродействия. Конечно прогоняешь в голове совместную работу блоков, форм, объектов, процедур, но отнюдь не каждую строчку кода. И еще принцип: написанный ранее кусок программы должен стать «отладочным стендом» для того, что ты пишешь сейчас. И, главное, Бро. Главное в программе — переделка! Жизнь течет и меняется и здесь ясный код, ясные имена переменных и функций (методов) позволяет не наделать ошибок.

+1
Аватар пользователя savely

> ясный код, ясные имена переменных и функций (методов) позволяет не наделать ошибок

На любом языке. ;) Мне неясно, почему текст выше объясняет фразу "Только Delphi !!!". 

Единственный пинок в сторону конкретно(!) С/C++ - "не рискуя нарваться, блин, на «вектор указателей», или присвоение не того не тому", но это, в общем-то, непринципиально. 

Аватар пользователя mike

Пофиг, выполняется блок за 0.001 сек или 0.002 сек

Гхм. Дык блоки-то в циклах. А есть разница -- задумается ли софтина на 2 с или на 6 с? wink К тому же в Делфи время исполнения SQL отличается >2 раза, особенно при неродной СУБД, и порой софтина задумывается так, что некоторые жмут альт-контрол-дел. Встречал такие шедевры, которые продаются по полштуки баксов, а то и более. crying 

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

Будьте честнее, г-н разработчик складского учёта.

 

-1
Аватар пользователя mike

Добавлю: читабельность очень сильно зависит от знакомства читающего с языком. laugh

-1

> ясный код, ясные имена переменных и функций (методов) позволяет не наделать ошибок

На любом языке. ;) Мне неясно, почему текст выше объясняет фразу "Только Delphi !!!". 

Единственный пинок в сторону конкретно(!) С/C++ - "не рискуя нарваться, блин, на «вектор указателей», или присвоение не того не тому", но это, в общем-то, непринципиально. 

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

К тому же в Делфи время исполнения SQL отличается >2 раза, особенно при неродной СУБД

Да? Как интересно. А я думал SQL запрос исполняется на сервере. А оно вон как.

Добавлю: читабельность очень сильно зависит от знакомства читающего с языком.

 

Ну все программеры, хотя бы шапочно знакомы с разными языками. А вот читабельность, действительно шибко коррелирует с комментированостью (ИМХО).

Еще раз мне важнее алгоритм бизнес-процесса. Текст на Паскале пишется практически автоматом. Может в силу привычки.

Будьте честнее, г-н разработчик складского учёта.

Буду! Дельфи действительно почти умерла. Такая печалька.surprise

Аватар пользователя mike

SQL запрос исполняется на сервере. 

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

все программеры, хотя бы шапочно знакомы с разными языками. 

Спорное утверждение. 

-1
Аватар пользователя mike

Текст на Паскале пишется практически автоматом. 

Я думал, человеком. А оно вон как. :)

 

-1

Страницы