Контакты

Какие программы нужно знать программисту. Что должен знать программист? Быть на «ты» с компьютером

Навык программирования может пригодиться не только тем, кто хочет создавать программы или сайты профессионально. О том, как умение писать код может облегчить жизнь, рассказал Илья Щуров, доцент кафедры высшей математики ВШЭ и преподаватель Центра непрерывного образования факультета компьютерных наук НИУ ВШЭ. T&P публикуют конспект его лекции .

Илья Щуров

доцент кафедры высшей математики ВШЭ и преподаватель Центра непрерывного образования факультета компьютерных наук НИУ ВШЭ

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

Опрос профессиональных программистов этого года показал, что 81% из них программируют в качестве хобби. Это означает, что программирование доставляет удовольствие, что это не просто работа, но и развлечение. Вы можете пользоваться готовыми программами, и в 95% случаев вы будете это делать, даже если вы профессиональный программист. Но в любой области есть задачи, которые никто до вас не решал, и умение программировать позволяет решать их гораздо эффективнее. Однажды я был в call-центре, и меня попросили объединить две таблицы. Человек, который поручил мне эту задачу, ожидал, что я начну по одной копировать ячейки из первой таблицы во вторую. Я перенес пару записей, мне надоело, и я написал короткий скрипт, который брал данные из одной таблицы и вместо меня заполнял гугл-форму, что не очень сложно. Мне это понравилось, но больше всего мне понравилось то, что коллеги смотрели на меня так, будто я владею какой-то магией.

Писать код интересно, но, с другой стороны, это испытание. Ты взаимодействуешь с компьютером, и очень часто это взаимодействие, особенно если ты осваиваешь новую технологию, новый язык, выглядит так. Ты пишешь код, считаешь, что написал его верно, а компьютер говорит, что у тебя ошибка синтаксиса. Действительно, забыл точку с запятой, исправил, запустил заново. А компьютер говорит: «Закрой скобку». Через несколько таких итераций программа начинает работать, и становится ясно, кто в доме хозяин. Дело в том, что и у навыка программирования, и у процесса обучения ему есть некоторые побочные (в том числе положительные) эффекты.

1. Экстремальный опыт руководства

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

2. Новый подход к информации

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

3. Профессиональная коммуникация

Если вы научитесь программировать хотя бы чуть-чуть, вам будет гораздо проще общаться с программистами. Полезно хотя бы на базовом уровне понимать, как устроен мир IT, и коммуницировать в этой сфере без посредников. Люди учат языки, чтобы лучше понять другую культуру, а языки программирования - технологии.

4. Ответственность

Почему уметь программировать может быть опасным? Первая причина - «тыжпрограммист». Если вдруг кто-то узнает, что вы умеете программировать, на вас начинают сыпаться запросы: «Переустанови мне операционную систему, пожалуйста, ты ж программист», «Почини чайник, ты ж программист» и так далее. Это не самая страшная проблема, есть пострашнее. Например, в 2001 году на первом курсе, когда интернет еще был медленным, я решил, что нужно сделать какую-то штуку, чтобы быстрее обмениваться информацией с друзьями. Я подумал: есть почта, и она работает. Тогда я завел отдельный почтовый ящик для нашей тусовки и написал скрипт. Робот заходил в этот ящик, брал письма, которые туда пришли, и пересылал их всем, кто был подписан на эту штуку. Так сейчас работают гугл-группы. Если я хотел написать всем, я отправлял письмо на этот общий ящик; если кто-то хотел ответить, он отвечал на него же, письмо попадало ко всем, и можно было что-то обсуждать.

Но у кого-то переполнился ящик, а когда ящик переполняется, почтовый сервер в ответ на любое письмо направляет отлуп, который тоже является письмом. Оно тоже попало в общий ящик, мой скрипт разослал его по всем адресам, в том числе и по тому, который переполнился. Почтовый сервер сгенерировал новый отлуп и так далее. В результате в воскресенье утром меня разбудил звонок моего друга, который аккуратно сказал: «Возможно, там какая-то проблема, потому что у меня в почтовом ящике 6 тысяч писем, и их количество увеличивается». Ничего особенно страшного не произошло, но это была проблема. Тогда я понял, что код легко может выйти из-под контроля и натворить бед, поэтому надо действовать аккуратно.

Это история как в «Маленьком принце»: вы в ответе за тех, кого приручили. Люди и процессы зависят от кода, который вы написали. То есть, как только вы делаете что-то полезное для других, цена ошибки возрастает.

Как научиться?

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

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

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

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

1. Самый лучший способ что-то понять - найти работающий кусок кода, начать его модифицировать и изучать, что получится. Это нужно сделать после того, как вы разобрались с базовым синтаксисом. Подгоняйте код под свои задачи или просто экспериментируйте.

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

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

4. Не бойтесь. Когда вы будете начинать программировать для себя, наверное, вы будете писать не тот код, который понравится профессиональным разработчикам. Они скажут, что так не пишут, что это избыточно, что такой код будет сложно поддерживать, и так далее. Наверное, они будут правы. Но если вы пишете для себя и если вы только начинаете, это нормально, что ваши первые попытки не являются текстами уровня Льва Толстого. Если вы напишете программу, которая будет работать и решать вашу задачу, то это хорошо.

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

Хочу рассказать кое-что важное. Если бы в свое время эта информация была бы доступна мне, то, возможно, многое бы сложилось иначе. Но, как говорится, “жалеть о не сделанной глупости – еще большая глупость”. А осветить я хочу проблему трудоустройства программистом после прощания с альма-матер.

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

Куда мы идем

Почему стоит обратить внимание на программирование и действительно ли это так круто? На эти вопросы я позволю ответить профессионалам мирового уровня в этой области.

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

Что нужно делать

Ну что же, перейдем ближе к делу. Поговорим о том, что можно сделать во время обучения в университете и как использовать это золотое время эффективно.

Четкая цель

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

Английский язык

Да, да, знание иностранного языка ценится работодателями так же высоко, как и владение навыками программирования. Английский поможет “вытащить”, казалось бы, проваленное техническое интервью. Кроме того, большая доля документации написана на английском, на нем общается мировое IT-сообщество. Поэтому поставьте себе цель, что к концу обучения вы будете хорошо владеть иностранным языком и свободно разговаривать на нем. Вот несколько вещей, которые могут в этом помочь:

Программирование в университете

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

Быть профессионалом во всем невозможно. На этом этапе вы должны определить, на каком языке хотите писать. В этом вам может помочь TIOBE Index .

Github

Есть одно прекрасное место, которое ждет ваши программы. И ссылка на ваш профиль в этом сервисе существенно повышает ценность резюме. “Слова ничего не стоят, покажите нам ваш код”. В интернете много информации о том, как пользоваться этим ресурсом и самой системой контроля версий Git, но если кто-то попросит в комментариях, я с радостью напишу об этом отдельную статью.

Пример, как это выглядит, можно посмотреть .

Зарегистрируйтесь на Github и “заливайте” все ваши программы, начиная с первой лабораторной работы. К концу обучения таким образом соберется неплохое портфолио.

Самообразование

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

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

Стажировки

Начиная с 3-его курса, ищите стажировки по программированию. Некоторые из них могут даже неплохо оплачиваться. Там вы сможете взять тот важный опыт работы, получить навык работы в команде, “прокачать” свои профессиональные умения. Могу предложить несколько вариантов, где стоит искать такие вакансии:

Заключение и благодарности

Вкратце у меня получилось изложить свой скромный опыт и выводы из уроков жизни. Буду рад, если кому-нибудь эта информация пригодится. Начинайте действовать уже сегодня. Помните, что от вас зависит будущее этого мира!

Хочу выразить благодарность моему преподавателю, Балсе Алдрину Раульевичу, который открыл для меня этот удивительный и интересный мир программирования.

Интересной учебы и красивого кода!

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

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

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

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

Люди, которые задумываются о том, должны понять, что основных знаний самого языка будет не совсем достаточно. Для получения хорошей работы и достойной оплаты необходимо разбираться в ООП, которое используется в написании популярных фреймворков и CMS. Работы с - следующий этап того, что нужно знать программисту PHP.

В настоящее время будет достаточно ознакомиться с работой самой распространенной из баз данных - MySQL. Настоящий специалист также вряд ли сможет обойтись без языков верстки HTML и CSS. Несмотря на то, что PHP - это язык сервера, он связан именно со сборкой веб-старниц, написанных на HTML. Также понадобится и знание синтаксиса JavaScript и понимание работы распространенных фреймворков - JQuery или ExtJS. Сейчас несложно осваивать все эти современные инструменты с помощью многочисленных блогов и онлайн-курсов.

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

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

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

  • Фундаментальные знания.

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

  • Аналитическое мышление.

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

  • Стремление быть лучше, знать больше – саморазвитие.

Без постоянного саморазвития не стать хорошим программистом. IT-сфера развивается неустанно: появляются новые языки, фреймворки и другие инструменты. Регулярное обновление своих знаний, сомнения в том, что вы знаете «как правильно» приведут вас к успеху в карьере и сделают настоящим профессионалом.

  • Любовь к программированию

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

Так, в общих чертах мы понимаем, кто такой «хороший программист». Давайте теперь разберемся, что нужно знать программисту.

Какие знания нужны программисту?

  • Английский язык.

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

  • Языки программирования.
  • Алгоритмы и структуры данных.

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

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

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

Программирование - это что-то вроде грамоты

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

Эти операторы - как буквы алфавита, а функции ввода/вывода Read () и Write () - как первые слова, «мама» и «папа», с которых ребенок начинает постигать мир.

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

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

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

Но есть одно существенное отличие: сценаристы уже не могут переписать сюжет снятой серии. В лучшем случае, если зритель что-то недопонял, они прояснят это в следующей серии.

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

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

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

Постепенно у программистов сложилась своя профессиональная лексика. Сам процесс написания программы они называют кодированием (Coding), а людей, которые кое-как освоили только это, уничижительно именуют кодерами. Они могут что-то вам написать, чтобы заработало, но потом улучшить, усовершенствовать такую программу будет крайне сложно и неприятно, обычно ее легче переписать. Сами кодеры называют себя разработчиками (Developers), а с течением времени, поднабравшись опыта, многие начинают именовать себя инженерами ПО (Software Engineer).

Оk, если программирование - это «как грамота», то что тогда еще нужно знать и уметь, чтобы стать «писателем»?

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

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

Все это выходит за рамки самого программирования и, по-хорошему, нуждается в каком-то своем, отдельном термине. Лично я для большей ясности называю «программерией» - это как Программная инженерия , но более широкий термин, охватывающий важное для нас: процессы разработки; умение программировать свой мозг, чтобы, например, «входить в поток»; умение работать в команде или составлять резюме - в общем, всё, чем мы занимаемся.

Основы программерии

Мне очень повезло, потому что я почти сразу же, как только увлекся программированием, прочел потрясающую книгу - «Совершенный Код» . Она меня поразила тем, что это была не книга о каком-нибудь языке программирования или о технологии, как все то, что мне попадалось ранее, а книга о самом Программировании как таковом. Это, наверное, первая книга, которая попыталась заполнить пробелы, остающиеся после прочтения учебников по алгоритмам, технических руководств и документации.

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

Неслучайно она победила, в опросе «Если бы вы могли вернуться в прошлое, когда были еще начинающим девелопером, то какую книгу по программированию вы посоветовали бы себе прочитать?».

Затем появились другие хорошие книги о программерии:

И множество других достойных, но в целом они охватывают глубже определённые области.

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

  • Основы компьютерной техники: основы Булевой алгебры, двоичная и шестнадцатирядная системы счисления.
  • Устройство компьютера: процессор, оперативная память, стек, жесткий диск, графическая карта, шина, периферия (т. е. клавиатура, мышь).
  • Ассемблер процессора и С - их тоже нужно знать хотя бы немного.
  • Собственно базовая грамота: синтаксис, как объявлять переменную, функцию, как писать условный оператор if, приоритет операторов, как организовать цикл, как получить ввод от пользователя и как ему вывести. Структурное программирование - как писать без goto, используя циклы и рекурсию. Это легкотня на самом деле, пятнадцать операторов выучиваются быстро. Почти все используемые сегодня языки программирования наследуются от С (C++, Java, C#, PHP, JavaScript), так что переучивать их не придется. Поэтому, кстати, не особо важно, с какого из этих языков вы начнете обучение.
  • Алгоритмизация: линейный поиск перебором, бинарный поиск, пузырьковая сортировка, быстрая сортировка и т. д. Оценка сложности алгоритмов.
  • Структуры данных: строки, очередь, стек, одно- и двусвязный список, массивы и т. д.
  • Декомпозиция, абстракция и проектирование программы: объектно-ориентированное программирование, SOLID, шаблоны проектирования, UML-диаграммы.
  • Основы функционального программирования: как писать без деструктивного присваивания и циклов, работа с коллекциями в функциональном стиле.
  • Знание платформы, библиотек, технологий: Java Core, работа с файлами, работа с Сетью, работа с массивами, строками и коллекциями, работа с памятью и сборка мусора. Обо всем этом есть толстые книги от самих создателей технологии (например, «Эффективная Java»).
  • Стандарты и протоколы сети: TCP, UDP, HTTP, HTML, XML, JSON, MIME, RFC.
  • Умение писать чистый код: как правильно называть переменные и классы, как форматировать код, как правильно писать комментарии (точнее, как их не писать:-)). Понимание приходит после прочтения книги Clean Code.
  • Умение работать с кодом: рефакторинг (книга Фаулера), хоткеи IDE для рефакторинга, умение читать и сопровождать старый код.
  • Инженерные практики: юнит-тесты, экстремальное программирование (XP), непрерывная интеграция, системы управления версиями (Git, SVN).
  • Управление проектом и организация процесса: Waterfall, Agile, SCRUM, Kanban, баг-трекеры, оценка времени на задачу.
  • Soft skills: умение общаться с заказчиком и ладить в команде, побороть отсутствие мотивации, выбрать приоритеты.
  • Базы данных: SQL, реляционные, документо- и граф-ориентированные БД, ACID, теорема CAP, оптимизация запросов.
  • Операционные системы: Linux, установка и настройка программ на нем, командная строка.
  • Масштабирование и высокие нагрузки, мониторинг, логинг, отказоустойчивость.
  • Криптография, защита от атак.
  • Юзабилити, сбор требований.
  • Знание английского языка, умение четко и лаконично писать документацию.
  • Умение правильно формулировать вопросы и самостоятельно находить ответы на них.
  • Умение учиться и при этом постоянно самосовершенствоваться.
  • Умение обучать других, понятно объяснять и даже выступать перед публикой на конференциях…
  • и при этом не слетать с катушек.

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

Понравилась статья? Поделитесь ей