понедельник, 10 декабря 2018 г.

На какие языки программирования и технологии точно не стоит тратить время — отвечают эксперты

С развитием IT-индустрии придумать что-то новое становится сложнее и сложнее. Языки программирования похожи друг на друга, компании копируют идеи друг друга, пытаясь одну и ту же конфету упаковать в разные фантики. Начинаешь понимать, что на изучение ряда вещей не стоит тратить своё время и усилия. Но из огромного множества можно случайно выбрать то, что уже неактуально, или то, что в скором времени пропадёт с рынка. Наш подписчик столкнулся с проблемой выбора и написал нам в редакцию с просьбой помочь ему:
«На какие языки программирования/технологии точно не стоит тратить время?»
За разъяснениями мы обратились к нашим экспертам, а полученные ответы предоставляем вашему вниманию.
Павел Романченко

Павел Романченко, технический директор Центра программных решений «Инфосистемы Джет»

Я бы пошёл от противного — на какие языки и технологии точно стоит тратить время. И тратить только на них. 😉
Во-первых, это языки, на которых ты и твоя компания зарабатываете деньги (Java, Python, Go, Javascript, Swift, C, C++ и т. д.).
Во-вторых, языки, которые заставляют по-другому взглянуть на программирование — например, Haskell, Rust, Prolog, Erlang, Clojure, Scheme. Если язык программирования не приносит ни денег, ни удовольствия, ни развития — не стоит тратить на него своё время и усилия.
Рейтинг полезности ответа: 13.4  
Андрей Коваленко

Андрей Коваленко, со-основатель и CTO Voximplant

Стоит понимать, что не всегда языкам уделяют время, чтобы затем использовать эти знания в работе: процесс изучения может быть интересным и ценным сам по себе. Кроме того, если тебе нравится писать на каком-либо языке, в него и стоит погружаться, а не задаваться вопросом о конечном профите.
Но грубо разделить языки на те, что точно заслуживают внимания, и те, что нет, всё-таки можно. К первой группе я отношу C-подобные языки, поскольку они все примерно одинаковые и можно легко переключаться между ними. Кроме того, эти языки позволяют разобраться, как всё работает изнутри, при этом не погружаясь совсем в дебри, как это делает Assembler. Даже в институтах преподают С/С++, и это стоящая дисциплина, в отличие от многих других. В первую группу я бы также включил JS.
Глобально не стоит тратить время на старые языки типа уже упомянутого Assembler или Fortran. В мой «чёрный список» входит также Ruby в силу серьёзных проблем с совместимостью разных библиотек — поставив одну, ты не знаешь, что может сломаться в другом месте.
Рейтинг полезности ответа: 0.1  
Дмитрий Казаков

Дмитрий Казаков, руководитель отдела веб-разработки RU-CENTER

Коротко — нет таких языков и технологий. Это не просто инструменты, это какие-то наборы концепций, которые сами по себе интересны для изучения. Любой инструмент, имеющий более одного автора и последователя, любопытен просто потому, что успешно используется кем-то для решения каких-то задач. В конце концов, вся карьера разработчика сводится к тому, что постоянно нужно решать задачи подходящими инструментами, а профессионализм оценивается знаниями максимального количества этих самых инструментов. К сожалению, об этом часто забывают в пылу религиозных войн о достоинствах своих инструментов и недостатках всех остальных. Конечно, можно оставаться адептом своего маленького технологического стека, но при этом лучше не ходить на работные сайты и не замечать там зарплат fullstack-разработчиков, например.
Конечно, мир не идеален, и существуют языки программирования, способные нанести молодому разработчику фатальные травмы сознания. Пожалуй, сейчас это Python, который своей универсальностью напрочь отбивает мотивацию к развитию. Вообще, будьте осторожнее с универсальными инструментами, как правило, эта универсальность на практике оборачивается полной бесполезностью. Не то чтобы Python был бесполезен, просто почти в каждой нише его применения есть инструменты лучше. Если прямо сейчас вы чувствуете неконтролируемый приступ гнева и лютое желание откомментировать — вам лучше задуматься, а не слишком ли вы прикипели к своему Python’у и не пора ли оглядеться по сторонам?
С технологиями всё аналогично — просто не верьте в серебряные пули и в то, что действия по одной и той же методичке подходят к любой ситуации. Не изучайте технологию заранее, но держите в голове область её применения на случай, если вдруг понадобится. А если запомнить не получается — всегда можно перед стартом проекта провести R&D по технологическому стеку. Ну, и адептов SCRUM на всякий случай обходите стороной — уж очень они на сектантов похожи.
Рейтинг полезности ответа: 1.9  
Дмитрий Горынин

Дмитрий Горынин, старший менеджер Технологического центра Accenture

Однозначной рекомендации тут дать не получится, так как всё зависит от того, с какой целью происходит изучение языка программирования или платформы.
Если речь идёт о серьёзном и вдумчивом изучении основ программирования, то я бы не рекомендовал использовать широко распространённые языки высокого уровня и построенные вокруг них фреймворки. Идеальным вариантом, на мой взгляд, в этом случае является старый добрый C++. С одной стороны, этот язык даёт прекрасную возможность освоить принципы ООП, которые являются фундаментальной основой современного прикладного программирования. С другой стороны, разрабатывая на C++, вы научитесь грамотно управлять памятью, писать оптимальный код.
Если вы мечтаете стать системным программистом и разрабатывать драйвера и операционные системы или программы для микроконтроллеров, то, опять же, не стоит тратить время на широко распространённые высокоуровневые языки программирования. Изучая C, а то и старый добрый Assembler, вы придёте к своей цели гораздо быстрее.
Если вы хотите быть мобильным в плане места работы и при этом неплохо зарабатывать, то следите за тенденциями в прикладной разработке. Грубо говоря, смотрите, на чём пишут сейчас сайты или фронтенд/бэкенд информационных систем. Быстрый поиск вакансий на сайтах поиска работы легко подскажет, на каких разработчиков сейчас наибольший спрос. Например, разработчики, владеющие Java, JavaScript и основанными на этих языках фреймворками (Spring, Node.js, React, Vue и т. д.), сейчас крайне востребованы. Соответственно, если ваши интересы лежат в этой области, то не тратьте время на те языки и платформы, которых не видите в информационном поле.
Если вы видите себя в разработке приложений для крупных бизнес-систем класса enterprise (ERP, eCommerce, CRM и т. д.), то изучите рынок в вашем регионе. Наверняка вы обнаружите лидеров в эти областях, которые имеют большое количество успешных проектов. В России и странах СНГ на хороших позициях в этом сегменте находятся решения таких производителей корпоративного ПО, как 1C, SAP (SAP S/4 HANA, SAP ERP, Hybris и т. д.), Miсrosoft (Microsoft Dynamics) и другие. Далее нужно сосредоточиться на изучении языков и технологий, лежащих в основе продукта, в разработке которого вы хотите стать гуру.
Ну, а если ваша мечта — стать экспертом в области разработки хранилищ данных или больших данных, то начать нужно с SQL. JavaScript, HTML, CSS в этом вам мало помогут.
Резюмируя вышесказанное — ориентируйтесь на ваши цели и не тратьте время на то, что не позволяет их достичь. При этом, язык программирования или платформа, на которые не имеет смысла тратить время будущему разработчику компьютерных игр, может быть фундаментальной основой для специалиста, который мечтает стать лучшим преподавателем информатики в России.
Рейтинг полезности ответа: 9  
Евгений Потапов

Евгений Потапов, генеральный директор ITSumma

Нет смысла привязываться к какой-то конкретной технологии или языку программирования. Как бы ни ругали высшее образование, но оно даёт основу для работы в любых сферах деятельности. Главное — это понять базовые концепции, и «набить руку» на каком-либо выбранном инструменте. А уже освоение новой технологии или языка — дело пары недель размеренного вникания. Руководствуясь таким методом, как таковых бесполезных технологий и нет. Важно освоить максимум возможных концепций. Вот на что точно надо тратить время. Ну, и, конечно, руководствоваться здравым смыслом. Вряд ли изучение Cobol или CVS имеет какой-то смысл, а вот Lisp — можно!
Рейтинг полезности ответа: 0.4  
Александр Кузнецов

Александр Кузнецов, ведущий разработчик TrueConf

Я считаю, что любой язык программирования заслуживает внимания и может быть полезным в зависимости от того, какие цели вы ставите перед собой. Кроме того, изучение новых языков — это, по сути, освоение новых горизонтов, что само по себе полезно для любого программиста.
При выборе языка нужно отталкиваться от своих целей. Если программирование — хобби, то для изучения подойдёт практически любой язык. Если вы заинтересованы в том, чтобы выйти на высокий доход от написания кода — для изучения выбирайте высокооплачиваемый на текущий момент времени язык. Для этого достаточно посетить, к примеру, HeadHunter и посмотреть, какие специалисты востребованы сегодня. Не стоит забывать, что высокооплачиваемые языки требуют углубленного и зачастую долгого изучения. При этом, можно оставаться востребованным программистом со средним уровнем зарплаты, изучив Java или PHP.
Я полагаю, что сегодня перспективно изучать web-разработку, например, JavaScript. Сейчас все процессы переносятся в web, и за этим будущее. Если не учитывать слишком молодые языки программирования, то можно сказать, что все направления актуальны и «умирающих» среди них нет.
Касательно технологий — практически каждую неделю разработчики выпускают новые веб-фреймворки, которые, по их мнению, должны стать «убийцами предшественников». Я считаю, что время, потраченное на изучение таких технологий, не окупится, потому как через год про очередного «убийцу» никто и не вспомнит, и полученные знания окажутся бесполезными. Рекомендую изучать технологии, которые существуют и развиваются хотя бы пару лет.
Рейтинг полезности ответа: 4  
Алексей Силаев

Алексей Силаев, директор по ИТ компании timebook

«Мёртвые» или «почти мёртвые» языки и технологии разработки ПО для собственного развития точно изучать не стоит. Список языков этого класса достаточно обширен — Fortran, Basic, Turbo Pascal, J#.
Исключения могут быть только в тех случаях, когда вам необходима именно эта технология для решения конкретной задачи. Сразу вспоминается история про последнего программиста космического аппарата Voyager в NASA. Он ушёл на пенсию, а аппарат по-прежнему функционирует, и его надо поддерживать.
Среди большого количества «живых» языков и технологий надо выбирать наиболее актуальные именно в той области разработки ПО, в которой вы собираетесь работать. Например, для низкоуровневой разработки «под железо» не стоит изучать PHP или Python — они там не используются. А при разработке бизнес-логики облачных сервисов — наоборот, но там, как правило, не используется такой язык, как С и т. д.
Если же под ваш класс задач подходят сразу несколько «живых» языков/технологий разработки ПО, тогда предпочтение стоит отдавать той, которая:
— больше распространена,
— более популярна в сообществе разработчиков,
— за этой технологией/языком стоит более правильная/мощная организация-разработчик.
Рейтинг полезности ответа: 4.1  
Игорь Павлов

Игорь Павлов, руководитель группы разработки Waves Node

Такой вопрос, скорее всего, приходит в голову людям, которые только собираются начать изучение одного из языков. Потому что опытный разработчик осмысленно выбирает каждый следующий язык программирования для изучения под конкретные задачи. В целом совет такой: не стоит в качестве первого языка выбирать какой-либо из малораспространённых языков. Выбирайте наиболее популярные классические языки, например, C++, C#, Java, JavaScript, Python, которые научат использовать правильный стиль программирования и мыслить как программист. Узкоспециализированные языки можно выучить позже, когда уже заложена основа. Это расширит ваш кругозор и дополнит сложившуюся картину. А там, кто знает, может быть, однажды вы сами создадите востребованный язык программирования. Естественно, не стоит тратить время на изучение языков, не предназначенных под ваши задачи. Например, нет необходимости учить C для реализации веб-интерфейса.
Я бы не стал тратить время на Objective-C. В силу перехода iOS-разработки на Swift, удел Objective-C разработчика — поддержка уже созданного ПО. Работу вы скорее всего найдёте, потому что такого ПО много, но, на мой взгляд, куда интереснее создавать новое. Не стал бы выбирать для изучения и Pascal, который воспринимался в своё время как стандарт для обучения программированию. Те редкие проекты на Delphi (Object Pascal), которые можно встретить, воспринимаются как что-то ужасно старое, как привет из прошлого. Также, если вы хотите выбрать Perl, я бы посоветовал рассмотреть замену в виде более простого и понятного Python.
Рейтинг полезности ответа: 6.1  
Эдуард Болмосов

Эдуард Болмосов, директор бизнес-юнита АТОЛ Sigma компании АТОЛ

Все языки программирования и технологии по-своему интересны. И, в принципе, все их можно задействовать в той или иной сфере. Вот только всегда ли это оправданно? Убежден, что при выборе решения главное — заранее понимать, как вы будете масштабировать свой продукт и во сколько вам это обойдётся. Покажу на примере.
Как человек бизнеса, занимающийся развитием SaaS-продукта, могу вас заверить: затраты на офис, зарплаты сотрудников и т. п. — лишь вершина айсберга. Что обязательно нужно учитывать, так это расходы на поддержание работоспособности платформы. Речь прежде всего о серверах/хостинге и софте. Именно они «отъедают» заметную часть бюджета, если технологии были выбраны не совсем удачно, но у платформы уже начался экспоненциальный рост числа пользователей.
Да, затрат на софт можно избежать за счёт Open Source-решений и других продуктов, которые выпускаются на условиях «свободных» лицензий (например, GNU GPL, Apache License). Возьмём известный язык программирования C#. Для запуска программ как таковых нужен лишь .NET Framework, который можно установить бесплатно. А вот чтобы запустить это ПО на сервере, требуется Windows Server с соответствующей лицензией. Причём в некоторых конфигурациях эта лицензия оказывается сопоставимой по стоимости с самим железом.
Далее. В любой современной системе надо хранить информацию, и база данных сегодня — это must have. В случае с Microsoft всё вроде бы просто: есть проверенный годами SQL Server. Но для большой системы его бесплатной редакции будет недостаточно. Значит, нам опять придётся потратиться на софт — примерно так же, как на железо. А если нам нужно хранить ОЧЕНЬ много информации? Тогда мы вспоминаем об Oracle Database. Но не все знают, что стоимость лицензии будет исчисляться в сотнях тысяч и даже в миллионах рублей. Иногда она превышает стоимость того железа, на которое ставится база. Если вы представляете крупный банк, то такие расходы, конечно, оправданы. Насчёт другого бизнеса я бы не был столь категоричен.
И в заключение. Нельзя однозначно сказать, какой язык программирования лучше: Java, PHP, Python, С++… И какая база данных оптимальна: PostgreSQL, MySQL, MongoDB, Cassandra или другая. Выбор технологии во многом зависит от ваших планов по развитию продукта и бюджета, которым вы располагаете.
Рейтинг полезности ответа: 2  
Не забывайте, что всегда стоит исходить именно из задач, которые ставятся перед проектом, а не из модных тенденций. В то же время, вряд ли много вопросов сейчас можно решить с помощью устаревших языков. Поэтому старайтесь подбирать им более современные альтернативы.
Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.

https://tproger.ru/experts/legacy-technologies/?utm_referrer=https%3A%2F%2Fzen.yandex.com

среда, 30 мая 2018 г.

"Геометрия Питона" 7-8

Летние курсы по программированию геометрических задач для учеников 7-10 классов (умеющих программировать).

Занятия будут проходить с 14.06 по 30.06:
  • вторник, 
  • четверг
  • суббота
 с 10-00 до 12-00.

Адрес: ул. Минина 15, РФМЛИ, каб.№6, тел. +7(918)827-86-37, Молчанова Ирина Александровна

"Геометрия Питона" 5-6

Летние курсы по геометрии с элементами программирования в Python для учеников 5-7 классов.

Занятия будут проходить с 13.06 по 29.06:
  • понедельник
  • среда
  • пятница
с 12-00 до 13-30.

Адрес: ул. Минина 15, РФМЛИ, каб.№6, тел. +7(918)827-86-37, Молчанова Ирина Александровна

"Креативное программирование"

Летние курсы по программированию для учеников 3-6 классов (не изучавших в школе Scratch)

Занятия будут проходить с 4.06 по 29.06:
  • понедельник, 
  • среда
  • пятница
 с 10-00 до 11-30.

Адрес: ул. Минина 15, РФМЛИ, каб.№6, тел. +7(918)827-86-37, Молчанова Ирина Александровна

пятница, 12 января 2018 г.

Законы программирования, о которых вы, возможно, не слышали

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

Принцип раздувания

«Каждая программа развивается до тех пор, пока не сможет читать почту. Программы, которые не способны так развиться, вытесняются теми, что смогут».
Это правило имеет множество вариаций, но официальной принято считать Закон о программном обеспечении, или Закон Завинского. Впервые он был упомянут в книге «Искусство программирования для Unix» (The Art of UNIX Programming). Речь идёт о тенденции программ увеличивать функциональность с течением времени и, как следствие, усложняться. Этот принцип заложен также в функцию ползучести, которая гласит:
«ПО расширяет функциональность до тех пор, пока не задействует все предоставленные ресурсы».
Она имеет негативную окраску и противопоставляется основным целям программирования.

Принцип «Чем хуже – тем лучше»

«ПО, которое имеет ограничения, но простое в использовании, более востребовано пользователем и рынком, чем не имеющее ограничений, но сложное для понимания».
Ричард П. Габриэль впервые упомянул это правило в эссе, написанном им о качестве программного обеспечения, в конце 1980-х годов. В развитии этой идеи он пишет, что разумно разобраться в одной проблеме, которую ваше ПО стремится решить, довести функцию до совершенства. Надо быть проще. Чем больше вы расплываетесь в идеях, тем более неуправляемым станет проект и тем более невостребованным он будет.
В случае игнорирования вы сталкиваетесь с принципом Питера:
«Каждый комплексный проект неизбежно становится сложным для понимания даже для собственных разработчиков».
Он исходит из более широкого Принципа Питера о продвижении по карьерной лестнице сотрудников с ограниченной компетентностью. Результат – все сотрудники компании оказываются некомпетентными. Этот же принцип легко спроецировать на ПО, и он тоже будет верным.

Закон Иглсона

«Ваш код, который вы не просматривали 6 или более месяцев, выглядит так, будто его написал кто-то другой».
Это демотивационное высказывание говорит о том, что никто не идеален. Вы можете считать себя гениальным программистом прямо сейчас, но всегда есть что-то большее, пространство для роста. Если вы когда-либо оглядываетесь на старый код и съеживаетесь – это означает, что вы узнали что-то новое с тех пор.
Иными словами, если вы не увидите в старом проекте ничего, что можно улучшить – это верный признак стагнации или деградирования.

Правило наименьшего удивления

«Если необходимая доработка имеет высокий коэффициент изумления, возможно, её стоит переработать».
Правило впервые появилось в IBM Systems Journal в 1984 году, а широкую огласку получило благодаря книге «Искусство программирования для Unix». Оно касается тонкого баланса между инновациями и знакомством с ними: если ПО слишком отличается от других подобных и не соответствует ожиданиям пользователей, то они вероятно его не примут. Лучше стремиться к дополнительным улучшениям, которые достаточно велики, чтобы впечатлить, но достаточно малы, чтобы казаться знакомыми.

Закон кибернетической энтомологии

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

Закон Кернигана

«Отладка кода вдвое сложнее, чем его написание. Поэтому, если вы пишете настолько умный код, насколько это возможно, вы по определению недостаточно умны, чтобы его отладить».
Брайан Керниган – один из авторов фундаментальной книги «The C Programming Language». Суть закона: напишите хороший код, читаемый, простой, какой угодно, но только не умный. В противном случае вы создадите полную противоположность тому, что принято считать лучшим кодом.
Роберт К. Мартин объясняет – речь идет не только об отладке:
«Действительно, соотношение времени, затраченного на чтение и письмо, составляет более 10 к 1. Мы постоянно читаем старый код как часть усилий по написанию нового. Облегчаем чтение, упрощаем запись».

Правило 90-90

«Создание 90% кода ПО занимает 90% заложенного времени разработки. Оставшиеся 10% – ещё 90% времени».
Эта небольшая пословица Тома Каргилла лежит в основе того, почему программирование может быть расстраивающим: независимо от того, насколько близко вы подбираетесь к решению задачи, на самом деле вы далеки от завершения. Когда думаете, что вот-вот закончите – вы находитесь только на середине пути.
В шуточной манере аналогичный закон составил Дуглас Хофштадтер:
«Любое дело всегда длится дольше, чем ожидается, даже если учесть закон Хофштадтера».

Закон Паркинсона

«Работа заполняет всё время, отпущенное на неё».
Этот принцип, придуманный историком Паркинсоном ещё в 1955 году, является более широким принципом, и идет рука об руку с Правилом 90-90, описанным выше: сколько бы времени вы не заложили на проект, он будет разрабатываться до самой последней минуты. В разработке ПО «ранняя сдача» в значительной степени является мифом.
Закон Паркинсона является причиной того, что правильные сроки имеют решающее значение, если вы хотите закончить и отправить свое ПО. Вот почему современные профессиональные программисты часто рекомендуют гибкие принципы управления проектами и соответствующие инструменты.

Закон Брука

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

Отладка резиновой утки

Здесь обойдёмся без цитаты, так как это скорее полезная техника. Речь идёт о публикации The Pragmatic Programmer, рассказывающая о методе отладки, когда вы объясняете свой код неодушевлённому объекту, например, резиновой утке. Это задействует разные области вашего мозга, и вы быстрее находите ошибки.
Благодаря описанной мудрости вы подойдёте к карьере программирования с реалистичными ожиданиями. Останется лишь малость – выучить язык программирования и найти подходящее место работы.
Джон Роббинс предлагает объяснять проблему на кошках. «Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей – и все становится ясно».

пятница, 5 января 2018 г.

Встреча со студентами Иннополиса

Спасибо Георгию Дзесову и Насте Минаковой за интересную и содержательную беседу. Все ученики были под большим впечатлением от услышанного. Многие однозначно будут пытаться поступать в Иннополис.

 


Межрегиональная Олимпиада школьников по информатике и компьютерной безопасности (2 уровень)

Организаторы олимпиады - Академия Федеральной службы безопасности Российской Федерации. По предварительным итогам Стас Теблоев - победитель, а Захар Жуков - призер (не хватило одного балла). Ждем подтверждения и грамот.